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