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>
207 lines
3.3 KiB
Plaintext
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
|
|
|