| .macro test_suite name | |
| .data | |
| status: .word result | |
| result: .space 20 | |
| .text | |
| .global main | |
| .align 4 | |
| main: | |
| .endm | |
| .macro reset_ps | |
| movi a2, 0x4000f | |
| wsr a2, ps | |
| isync | |
| .endm | |
| .macro test_suite_end | |
| reset_ps | |
| movi a0, status | |
| l32i a2, a0, 0 | |
| movi a0, result | |
| sub a2, a2, a0 | |
| movi a3, 0 | |
| loopnez a2, 1f | |
| l8ui a2, a0, 0 | |
| or a3, a3, a2 | |
| addi a0, a0, 1 | |
| 1: | |
| exit | |
| .endm | |
| .macro test name | |
| .endm | |
| .macro test_end | |
| 99: | |
| reset_ps | |
| movi a2, status | |
| l32i a3, a2, 0 | |
| addi a3, a3, 1 | |
| s32i a3, a2, 0 | |
| .endm | |
| .macro exit | |
| movi a2, 1 | |
| simcall | |
| .endm | |
| .macro test_fail | |
| movi a2, status | |
| l32i a2, a2, 0 | |
| movi a3, 1 | |
| s8i a3, a2, 0 | |
| j 99f | |
| .endm | |
| .macro assert cond, arg1, arg2 | |
| b\cond \arg1, \arg2, 90f | |
| test_fail | |
| 90: | |
| nop | |
| .endm | |
| .macro set_vector vector, addr | |
| movi a2, handler_\vector | |
| movi a3, \addr | |
| s32i a3, a2, 0 | |
| .endm |