1#include "core-isa.h" 2 3.macro test_suite name 4.data 5status: .word result 6result: .space 256 7.text 8.global main 9.align 4 10main: 11.endm 12 13.macro reset_ps 14 movi a2, 0x4000f 15 wsr a2, ps 16 isync 17.endm 18 19.macro test_suite_end 20 reset_ps 21 movi a0, status 22 l32i a2, a0, 0 23 movi a0, result 24 sub a2, a2, a0 25 movi a3, 0 26 beqz a2, 2f 271: 28 l8ui a1, a0, 0 29 or a3, a3, a1 30 addi a0, a0, 1 31 addi a2, a2, -1 32 bnez a2, 1b 332: 34 exit 35.endm 36 37.macro print text 38.data 3997: .ascii "\text\n" 4098: 41 .align 4 42.text 43 movi a2, 4 44 movi a3, 2 45 movi a4, 97b 46 movi a5, 98b 47 sub a5, a5, a4 48 simcall 49.endm 50 51.macro test_init 52.endm 53 54.macro test name 55#ifdef DEBUG 56 print test_\name 57#endif 58 test_init 59test_\name: 60.global test_\name 61.endm 62 63.macro test_end 6499: 65 reset_ps 66 movi a2, status 67 l32i a3, a2, 0 68 addi a3, a3, 1 69 s32i a3, a2, 0 70.endm 71 72.macro exit 73 movi a2, 1 74 simcall 75.endm 76 77.macro test_fail 78 movi a2, status 79 l32i a2, a2, 0 80 movi a3, 1 81 s8i a3, a2, 0 82#ifdef DEBUG 83 print failed 84#endif 85 j 99f 86.endm 87 88.macro assert cond, arg1, arg2 89 b\cond \arg1, \arg2, 90f 90 test_fail 9190: 92 nop 93.endm 94 95.macro set_vector vector, addr 96 movi a2, handler_\vector 97 movi a3, \addr 98 s32i a3, a2, 0 99.endm 100 101.macro dump r 102#ifdef DEBUG 103.data 104.align 4 1051: .word 0 106.text 107 movi a4, 1b 108 s32i a2, a4, 0 109 movi a2, 4 110 movi a3, 1 111 movi a5, 4 112 simcall 113 movi a4, 1b 114 l32i a2, a4, 0 115#endif 116.endm 117 118#define glue(a, b) _glue(a, b) 119#define _glue(a, b) a ## b 120 121#define glue3(a, b, c) _glue3(a, b, c) 122#define _glue3(a, b, c) a ## b ## c 123