1.include "macros.inc" 2 3test_suite mac16 4 5#define ext16(v) (((v) & 0xffff) | (((v) & 0x8000) * 0x1ffffffe)) 6#define mul16(a, b) ((ext16(a) * ext16(b))) 7 8.macro assert_acc_value v 9 rsr a4, ACCLO 10 movi a5, (\v) & 0xffffffff 11 assert eq, a4, a5 12 rsr a4, ACCHI 13 movi a5, (\v) >> 32 14 sext a5, a5, 7 15 assert eq, a4, a5 16.endm 17 18.macro init_reg sr, reg, val 19 .if (\sr) 20 movi a4, \val 21 wsr a4, \reg 22 .else 23 movi \reg, \val 24 .endif 25.endm 26 27.macro test_mulxx mulop, comb, s, t, a, b 28 init_reg \comb & 2, \s, \a 29 init_reg \comb & 1, \t, \b 30 31 \mulop\().ll \s, \t 32 assert_acc_value mul16(\a, \b) 33 34 \mulop\().lh \s, \t 35 assert_acc_value mul16(\a, (\b >> 16)) 36 37 \mulop\().hl \s, \t 38 assert_acc_value mul16((\a >> 16), \b) 39 40 \mulop\().hh \s, \t 41 assert_acc_value mul16((\a >> 16), (\b >> 16)) 42.endm 43 44test mul_aa 45 test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f 46test_end 47 48test mul_ad 49 test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f 50test_end 51 52test mul_da 53 test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f 54test_end 55 56test mul_dd 57 test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f 58test_end 59 60 61.macro init_acc iv 62 movi a4, (\iv) & 0xffffffff 63 wsr a4, ACCLO 64 movi a4, (\iv) >> 32 65 wsr a4, ACCHI 66.endm 67 68.macro test_mulxxx mulop, comb, s, t, a, b, iv, op 69 init_reg \comb & 2, \s, \a 70 init_reg \comb & 1, \t, \b 71 72 init_acc \iv 73 \mulop\().ll \s, \t 74 assert_acc_value (\iv \op mul16(\a, \b)) 75 76 init_acc \iv 77 \mulop\().lh \s, \t 78 assert_acc_value (\iv \op mul16(\a, (\b >> 16))) 79 80 init_acc \iv 81 \mulop\().hl \s, \t 82 assert_acc_value (\iv \op mul16((\a >> 16), \b)) 83 84 init_acc \iv 85 \mulop\().hh \s, \t 86 assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16))) 87.endm 88 89 90test mula_aa 91 test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, + 92test_end 93 94test mula_ad 95 test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, + 96test_end 97 98test mula_da 99 test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + 100test_end 101 102test mula_dd 103 test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + 104test_end 105 106 107test muls_aa 108 test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, - 109test_end 110 111test muls_ad 112 test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, - 113test_end 114 115test muls_da 116 test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, - 117test_end 118 119test muls_dd 120 test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, - 121test_end 122 123test ldinc 124 movi a2, 1f - 4 125 ldinc m0, a2 126 movi a3, 1f 127 assert eq, a2, a3 128 rsr a3, m0 129 movi a4, 0x55aa137f 130 assert eq, a3, a4 131 ldinc m1, a2 132 movi a3, 1f + 4 133 assert eq, a2, a3 134 rsr a3, m1 135 movi a4, 0x12345678 136 assert eq, a3, a4 137 138.data 1391: .word 0x55aa137f, 0x12345678, 0x137fa5a5 140.text 141test_end 142 143test lddec 144 movi a2, 1f 145 lddec m2, a2 146 movi a3, 1f - 4 147 assert eq, a2, a3 148 rsr a3, m2 149 movi a4, 0x12345678 150 assert eq, a3, a4 151 lddec m3, a2 152 movi a3, 1f - 8 153 assert eq, a2, a3 154 rsr a3, m3 155 movi a4, 0x55aa137f 156 assert eq, a3, a4 157.data 158 .word 0x55aa137f, 0x12345678 1591: 160.text 161test_end 162 163 164.macro test_mulxxx_ld mulop, ldop, comb, w, x, s, t, a, b, iv, op 165 init_reg \comb & 2, \s, \a 166 init_reg \comb & 1, \t, \b 167 168 init_acc \iv 169 \mulop\().ll.\ldop \w, \x, \s, \t 170 assert_acc_value (\iv \op mul16(\a, \b)) 171 172 init_acc \iv 173 \mulop\().lh.\ldop \w, \x, \s, \t 174 assert_acc_value (\iv \op mul16(\a, (\b >> 16))) 175 176 init_acc \iv 177 \mulop\().hl.\ldop \w, \x, \s, \t 178 assert_acc_value (\iv \op mul16((\a >> 16), \b)) 179 180 init_acc \iv 181 \mulop\().hh.\ldop \w, \x, \s, \t 182 assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16))) 183.endm 184 185test mula_da_ldinc 186 movi a2, 1f - 4 187 test_mulxxx_ld mula.da, ldinc, 2, m1, a2, m1, a3, \ 188 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + 189 movi a3, 1f + 12 190 assert eq, a2, a3 191 rsr a2, m1 192 movi a3, 0x12345678 193 assert eq, a2, a3 194.data 1951: .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678 196.text 197test_end 198 199test mula_dd_ldinc 200 movi a2, 1f - 4 201 test_mulxxx_ld mula.dd, ldinc, 3, m2, a2, m1, m2, \ 202 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + 203 movi a3, 1f + 12 204 assert eq, a2, a3 205 rsr a2, m2 206 movi a3, 0x12345678 207 assert eq, a2, a3 208.data 2091: .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678 210.text 211test_end 212 213test mula_da_lddec 214 movi a2, 1f 215 test_mulxxx_ld mula.da, lddec, 2, m1, a2, m1, a3, \ 216 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + 217 movi a3, 1f - 16 218 assert eq, a2, a3 219 rsr a2, m1 220 movi a3, 0x12345678 221 assert eq, a2, a3 222.data 223 .word 0x12345678, 0xf7315a5a, 0xf7315a5a, 0xf7315a5a 2241: 225.text 226test_end 227 228test mula_dd_lddec 229 movi a2, 1f 230 test_mulxxx_ld mula.dd, lddec, 3, m2, a2, m1, m2, \ 231 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + 232 movi a3, 1f - 16 233 assert eq, a2, a3 234 rsr a2, m2 235 movi a3, 0x12345678 236 assert eq, a2, a3 237.data 238 .word 0x12345678, 0xa5a5137f, 0xa5a5137f, 0xa5a5137f 2391: 240.text 241test_end 242 243test_suite_end 244