A value passed as an argument to a function call may live in an incoming stack slot initially. Fix the call legalizer so it copies such an argument into the expected outgoing stack slot for the call.
33 lines
1.0 KiB
Plaintext
33 lines
1.0 KiB
Plaintext
; Test the legalization of function signatures.
|
|
test legalizer
|
|
set is_64bit
|
|
isa intel
|
|
|
|
; regex: V=v\d+
|
|
|
|
function %f() {
|
|
sig0 = (i32) -> i32 native
|
|
; check: sig0 = (i32 [%rdi]) -> i32 [%rax] native
|
|
|
|
sig1 = (i64) -> b1 native
|
|
; check: sig1 = (i64 [%rdi]) -> b1 [%rax] native
|
|
|
|
sig2 = (f32, i64) -> f64 native
|
|
; check: sig2 = (f32 [%xmm0], i64 [%rdi]) -> f64 [%xmm0] native
|
|
|
|
ebb0:
|
|
return
|
|
}
|
|
|
|
function %pass_stack_int64(i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 vmctx) spiderwasm {
|
|
sig0 = (i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 vmctx) spiderwasm
|
|
fn0 = sig0 #00000000
|
|
|
|
ebb0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i64, v5: i64, v6: i64, v7: i64, v8: i64, v9: i64, v10: i64, v11: i64, v12: i64, v13: i64, v14: i64, v15: i64, v16: i64, v17: i64, v18: i64, v19: i64, v20: i64):
|
|
call fn0(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
|
|
jump ebb1
|
|
|
|
ebb1:
|
|
return
|
|
}
|