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