Add qemu 2.4.0
[kvmfornfv.git] / qemu / tests / tcg / xtensa / test_mac16.S
1 #include "macros.inc"
2
3 test_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
44 test mul_aa
45     test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f
46 test_end
47
48 test mul_ad
49     test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f
50 test_end
51
52 test mul_da
53     test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f
54 test_end
55
56 test mul_dd
57     test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f
58 test_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
90 test mula_aa
91     test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
92 test_end
93
94 test mula_ad
95     test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
96 test_end
97
98 test mula_da
99     test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
100 test_end
101
102 test mula_dd
103     test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
104 test_end
105
106
107 test muls_aa
108     test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
109 test_end
110
111 test muls_ad
112     test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
113 test_end
114
115 test muls_da
116     test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
117 test_end
118
119 test muls_dd
120     test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
121 test_end
122
123 test 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
139 1:  .word 0x55aa137f, 0x12345678, 0x137fa5a5
140 .text
141 test_end
142
143 test 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
159 1:
160 .text
161 test_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
185 test 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
195 1:  .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678
196 .text
197 test_end
198
199 test 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
209 1:  .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678
210 .text
211 test_end
212
213 test 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
224 1:
225 .text
226 test_end
227
228 test 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
239 1:
240 .text
241 test_end
242
243 test_suite_end