tests/tcg/xtensa: add straightforward conditionals
[qemu/ar7.git] / tests / tcg / xtensa / test_mac16.S
blobee0cedd2ae5dd3d791216fb1482bea9d0d82c37d
1 #include "macros.inc"
3 test_suite mac16
5 #if XCHAL_HAVE_MAC16
7 #define ext16(v) (((v) & 0xffff) | (((v) & 0x8000) * 0x1ffffffe))
8 #define mul16(a, b) ((ext16(a) * ext16(b)))
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
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
29 .macro test_mulxx mulop, comb, s, t, a, b
30     init_reg \comb & 2, \s, \a
31     init_reg \comb & 1, \t, \b
33     \mulop\().ll \s, \t
34     assert_acc_value mul16(\a, \b)
36     \mulop\().lh \s, \t
37     assert_acc_value mul16(\a, (\b >> 16))
39     \mulop\().hl \s, \t
40     assert_acc_value mul16((\a >> 16), \b)
42     \mulop\().hh \s, \t
43     assert_acc_value mul16((\a >> 16), (\b >> 16))
44 .endm
46 test mul_aa
47     test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f
48 test_end
50 test mul_ad
51     test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f
52 test_end
54 test mul_da
55     test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f
56 test_end
58 test mul_dd
59     test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f
60 test_end
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
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
74     init_acc \iv
75     \mulop\().ll \s, \t
76     assert_acc_value (\iv \op mul16(\a, \b))
78     init_acc \iv
79     \mulop\().lh \s, \t
80     assert_acc_value (\iv \op mul16(\a, (\b >> 16)))
82     init_acc \iv
83     \mulop\().hl \s, \t
84     assert_acc_value (\iv \op mul16((\a >> 16), \b))
86     init_acc \iv
87     \mulop\().hh \s, \t
88     assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16)))
89 .endm
92 test mula_aa
93     test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
94 test_end
96 test mula_ad
97     test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
98 test_end
100 test mula_da
101     test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
102 test_end
104 test mula_dd
105     test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
106 test_end
109 test muls_aa
110     test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
111 test_end
113 test muls_ad
114     test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
115 test_end
117 test muls_da
118     test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
119 test_end
121 test muls_dd
122     test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
123 test_end
125 test 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
140 .data
141 1:  .word 0x55aa137f, 0x12345678, 0x137fa5a5
142 .text
143 test_end
145 test 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
162 .text
163 test_end
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
170     init_acc \iv
171     \mulop\().ll.\ldop \w, \x, \s, \t
172     assert_acc_value (\iv \op mul16(\a, \b))
174     init_acc \iv
175     \mulop\().lh.\ldop \w, \x, \s, \t
176     assert_acc_value (\iv \op mul16(\a, (\b >> 16)))
178     init_acc \iv
179     \mulop\().hl.\ldop \w, \x, \s, \t
180     assert_acc_value (\iv \op mul16((\a >> 16), \b))
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
187 test 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
197 1:  .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678
198 .text
199 test_end
201 test 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
211 1:  .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678
212 .text
213 test_end
215 test 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
227 .text
228 test_end
230 test 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
242 .text
243 test_end
245 #endif
247 test_suite_end