diff options
Diffstat (limited to 'qemu/tests/tcg/lm32/macros.inc')
-rw-r--r-- | qemu/tests/tcg/lm32/macros.inc | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/qemu/tests/tcg/lm32/macros.inc b/qemu/tests/tcg/lm32/macros.inc new file mode 100644 index 000000000..360ad53c9 --- /dev/null +++ b/qemu/tests/tcg/lm32/macros.inc @@ -0,0 +1,90 @@ + +.equ MAX_TESTNAME_LEN, 32 +.macro test_name name + .data +tn_\name: + .ascii "\name" + .space MAX_TESTNAME_LEN - (. - tn_\name), ' ' + .text + .global \name +\name: + addi sp, sp, -12 + sw (sp+4), r1 + sw (sp+8), r2 + sw (sp+12), r3 + mvi r1, 1 + mvhi r2, hi(tn_\name) + ori r2, r2, lo(tn_\name) + mvi r3, MAX_TESTNAME_LEN + calli _write + lw r3, (sp+12) + lw r2, (sp+8) + lw r1, (sp+4) + addi sp, sp, 12 +.endm + +.macro load reg val + mvhi \reg, hi(\val) + ori \reg, \reg, lo(\val) +.endm + +.macro tc_pass + calli _tc_pass +.endm + +.macro tc_fail + addi r12, r12, 1 + calli _tc_fail +.endm + +.macro check_r3 val + mvhi r13, hi(\val) + ori r13, r13, lo(\val) + be r3, r13, 1f + tc_fail + bi 2f +1: + tc_pass +2: +.endm + +.macro check_mem adr val + mvhi r13, hi(\adr) + ori r13, r13, lo(\adr) + mvhi r14, hi(\val) + ori r14, r14, lo(\val) + lw r13, (r13+0) + be r13, r14, 1f + tc_fail + bi 2f +1: + tc_pass +2: +.endm + +.macro check_excp excp + andi r13, r25, \excp + bne r13, r0, 1f + tc_fail + bi 2f +1: + tc_pass +2: +.endm + +.macro start + .global _main + .text +_main: + mvi r12, 0 +.endm + +.macro end + mv r1, r12 + calli _exit +.endm + +# base + +# 0 ctrl +# 4 pass/fail +# 8 ptr to test name |