1SYS_exit = 1 2SYS_write = 4 3 4 .bss 5 .space 64 6_stack: 7 8 .data 9pass_text: 10 .string "pass\n" 11fail_text: 12 .string "fail\n" 13 14 .text 15 .global _start 16_start: 17 movhi hi(_stack), r0, sp 18 movea lo(_stack), sp, sp 19 jr start_test 20 21 .macro seti val reg 22 movhi hi(\val),r0,\reg 23 movea lo(\val),\reg,\reg 24 .endm 25 26_pass_1: 27 mov SYS_write,r6 28 mov 1,r7 29 seti pass_text,r8 30 mov 5,r9 31 trap 31 32 33 mov 0, r7 34 jr _exit 35 36_fail_1: 37 mov SYS_write,r6 38 mov 1,r7 39 seti fail_text,r8 40 mov 5,r9 41 trap 31 42 43 mov 1, r7 44 jr _exit 45 46_exit: 47 mov SYS_exit, r6 48 mov 0, r8 49 mov 0, r9 50 trap 31 51 52_pass: 53 jr _pass_1 54 55_fail: 56 jr _fail_1 57 58 .macro pass 59 jr _pass 60 .endm 61 .macro fail 62 jr _fail 63 .endm 64 65 # These pass or fail if the given flag is set or not set 66 # Currently, it assumed that the code of any test is going to 67 # be less than 256 bytes. Else, we'll have to use a 68 # branch-around-jump design instead. 69 70 .macro pass_c 71 bc _pass 72 .endm 73 .macro fail_c 74 bc _fail 75 .endm 76 .macro pass_nc 77 bnc _pass 78 .endm 79 .macro fail_nc 80 bnc _fail 81 .endm 82 83 .macro pass_z 84 bz _pass 85 .endm 86 .macro fail_z 87 bz _fail 88 .endm 89 .macro pass_nz 90 bnz _pass 91 .endm 92 .macro fail_nz 93 bnz _fail 94 .endm 95 96 .macro pass_v 97 bv _pass 98 .endm 99 .macro fail_v 100 bv _fail 101 .endm 102 .macro pass_nv 103 bnv _pass 104 .endm 105 .macro fail_nv 106 bnv _fail 107 .endm 108 109 .macro pass_s 110 bn _pass 111 .endm 112 .macro fail_s 113 bn _fail 114 .endm 115 .macro pass_ns 116 bp _pass 117 .endm 118 .macro fail_ns 119 bp _fail 120 .endm 121 122 .macro pass_sat 123 bsa _pass 124 .endm 125 .macro fail_sat 126 bsa _fail 127 .endm 128 .macro pass_nsat 129 bsa 1f 130 br _pass 1311: 132 .endm 133 .macro fail_nsat 134 bsa 1f 135 br _fail 1361: 137 .endm 138 139 # These pass/fail if the given register has/hasn't the specified value in it. 140 141 .macro pass_req reg val 142 seti \val,r10 143 cmp r10,\reg 144 be _pass 145 .endm 146 147 .macro pass_rne reg val 148 seti \val,r10 149 cmp r10,\reg 150 bne _pass 151 .endm 152 153 .macro fail_req reg val 154 seti \val,r10 155 cmp r10,\reg 156 be _fail 157 .endm 158 159 .macro fail_rne reg val 160 seti \val,r10 161 cmp r10,\reg 162 bne _fail 163 .endm 164 165# convenience version 166 .macro reg reg val 167 seti \val,r10 168 cmp r10,\reg 169 bne _fail 170 .endm 171 172z = 1 173nz = 0 174s = 2 175ns = 0 176v = 4 177nv = 0 178c = 8 179nc = 0 180sat = 16 181nsat = 0 182 183# sat c v s z 184 185 .macro flags fval 186 stsr psw, r10 187 movea +(\fval), r0, r9 188 andi 31, r10, r10 189 cmp r9, r10 190 bne _fail 191 .endm 192 193 .macro noflags 194 stsr psw, r10 195 andi ~0x1f, r10, r10 196 ldsr r10, psw 197 .endm 198 199 .macro allflags 200 stsr psw, r10 201 ori 0x1f, r10, r10 202 ldsr r10, psw 203 .endm 204 205start_test: 206