Files
wasmtime/cranelift/filetests/filetests/isa/riscv64/stack-limit.clif
yuyang-ok cdecc858b4 add riscv64 backend for cranelift. (#4271)
Add a RISC-V 64 (`riscv64`, RV64GC) backend.

Co-authored-by: yuyang <756445638@qq.com>
Co-authored-by: Chris Fallin <chris@cfallin.org>
Co-authored-by: Afonso Bordado <afonsobordado@az8.co>
2022-09-27 17:30:31 -07:00

207 lines
3.3 KiB
Plaintext

test compile precise-output
set unwind_info=false
target riscv64
function %foo() {
block0:
return
}
; block0:
; ret
function %stack_limit_leaf_zero(i64 stack_limit) {
block0(v0: i64):
return
}
; block0:
; ret
function %stack_limit_gv_leaf_zero(i64 vmctx) {
gv0 = vmctx
gv1 = load.i64 notrap aligned gv0
gv2 = load.i64 notrap aligned gv1+4
stack_limit = gv2
block0(v0: i64):
return
}
; block0:
; ret
function %stack_limit_call_zero(i64 stack_limit) {
fn0 = %foo()
block0(v0: i64):
call fn0()
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; trap_ifc stk_ovf##(sp ult a0)
; block0:
; load_sym t2,%foo+0
; callind t2
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret
function %stack_limit_gv_call_zero(i64 vmctx) {
gv0 = vmctx
gv1 = load.i64 notrap aligned gv0
gv2 = load.i64 notrap aligned gv1+4
stack_limit = gv2
fn0 = %foo()
block0(v0: i64):
call fn0()
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; ld t6,0(a0)
; ld t6,4(t6)
; trap_ifc stk_ovf##(sp ult t6)
; block0:
; load_sym t2,%foo+0
; callind t2
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret
function %stack_limit(i64 stack_limit) {
ss0 = explicit_slot 168
block0(v0: i64):
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; andi t6,a0,176
; trap_ifc stk_ovf##(sp ult t6)
; add sp,-176
; block0:
; add sp,+176
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret
function %huge_stack_limit(i64 stack_limit) {
ss0 = explicit_slot 400000
block0(v0: i64):
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; trap_ifc stk_ovf##(sp ult a0)
; lui t5,98
; addi t5,t5,2688
; add t6,t5,a0
; trap_ifc stk_ovf##(sp ult t6)
; lui a0,98
; addi a0,a0,2688
; call %Probestack
; add sp,-400000
; block0:
; add sp,+400000
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret
function %limit_preamble(i64 vmctx) {
gv0 = vmctx
gv1 = load.i64 notrap aligned gv0
gv2 = load.i64 notrap aligned gv1+4
stack_limit = gv2
ss0 = explicit_slot 20
block0(v0: i64):
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; ld t6,0(a0)
; ld t6,4(t6)
; andi t6,t6,32
; trap_ifc stk_ovf##(sp ult t6)
; add sp,-32
; block0:
; add sp,+32
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret
function %limit_preamble_huge(i64 vmctx) {
gv0 = vmctx
gv1 = load.i64 notrap aligned gv0
gv2 = load.i64 notrap aligned gv1+4
stack_limit = gv2
ss0 = explicit_slot 400000
block0(v0: i64):
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; ld t6,0(a0)
; ld t6,4(t6)
; trap_ifc stk_ovf##(sp ult t6)
; lui t5,98
; addi t5,t5,2688
; add t6,t5,t6
; trap_ifc stk_ovf##(sp ult t6)
; lui a0,98
; addi a0,a0,2688
; call %Probestack
; add sp,-400000
; block0:
; add sp,+400000
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret
function %limit_preamble_huge_offset(i64 vmctx) {
gv0 = vmctx
gv1 = load.i64 notrap aligned gv0+400000
stack_limit = gv1
ss0 = explicit_slot 20
block0(v0: i64):
return
}
; add sp,-16
; sd ra,8(sp)
; sd fp,0(sp)
; mv fp,sp
; ld t6,400000(a0)
; andi t6,t6,32
; trap_ifc stk_ovf##(sp ult t6)
; add sp,-32
; block0:
; add sp,+32
; ld ra,8(sp)
; ld fp,0(sp)
; add sp,+16
; ret