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