Browse Source
This is required by the ABI and prevents a miscompilation when calling LLVM compiled functions.pull/7369/head
bjorn3
1 year ago
committed by
GitHub
4 changed files with 83 additions and 5 deletions
@ -0,0 +1,36 @@ |
|||
test compile |
|||
target aarch64 |
|||
|
|||
; The aapcs64 call conv ignores the uext and sext flags |
|||
function u0:0(i8) system_v { |
|||
sig0 = (i8 uext) system_v |
|||
fn0 = u0:0 sig0 |
|||
|
|||
block0(v0: i8): |
|||
call fn0(v0) |
|||
return |
|||
} |
|||
|
|||
; check: stp fp, lr, [sp, #-16]! |
|||
; nextln: mov fp, sp |
|||
; nextln: block0: |
|||
; check-not: uxtb w0, w0 |
|||
; nextln: load_ext_name x2, User(userextname0)+0 |
|||
; nextln: blr x2 |
|||
|
|||
; The aaple aarch64 call conv respects the uext and sext flags |
|||
function u0:0(i8) apple_aarch64 { |
|||
sig0 = (i8 uext) apple_aarch64 |
|||
fn0 = u0:0 sig0 |
|||
|
|||
block0(v0: i8): |
|||
call fn0(v0) |
|||
return |
|||
} |
|||
|
|||
; check: stp fp, lr, [sp, #-16]! |
|||
; nextln: mov fp, sp |
|||
; nextln: block0: |
|||
; nextln: uxtb w0, w0 |
|||
; nextln: load_ext_name x4, User(userextname0)+0 |
|||
; nextln: blr x4 |
@ -0,0 +1,38 @@ |
|||
test compile |
|||
target x86_64 |
|||
|
|||
; The x86_64 system_v call conv respects uext and sext |
|||
function u0:0(i8) system_v { |
|||
sig0 = (i8 uext) system_v |
|||
fn0 = u0:0 sig0 |
|||
|
|||
block0(v0: i8): |
|||
call fn0(v0) |
|||
return |
|||
} |
|||
|
|||
; check: pushq %rbp |
|||
; nextln: movq %rsp, %rbp |
|||
; nextln: block0: |
|||
; nextln: movzbq %dil, %rdi |
|||
; nextln: load_ext_name userextname0+0, %rdx |
|||
; nextln: call *%rdx |
|||
|
|||
; The x86_64 windows_fastcall call conv respects uext and sext |
|||
function u0:0(i8) windows_fastcall { |
|||
sig0 = (i8 uext) windows_fastcall |
|||
fn0 = u0:0 sig0 |
|||
|
|||
block0(v0: i8): |
|||
call fn0(v0) |
|||
return |
|||
} |
|||
|
|||
; check: pushq %rbp |
|||
; nextln: movq %rsp, %rbp |
|||
; nextln: block0: |
|||
; nextln: subq %rsp, $$32, %rsp |
|||
; nextln: virtual_sp_offset_adjust 32 |
|||
; nextln: movzbq %cl, %rcx |
|||
; nextln: load_ext_name userextname0+0, %r9 |
|||
; nextln: call *%r9 |
Loading…
Reference in new issue