.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 |