]> git.proxmox.com Git - mirror_qemu.git/blame - tests/tcg/xtensa/test_mac16.S
Merge remote-tracking branch 'remotes/xtensa/tags/20180918-xtensa' into staging
[mirror_qemu.git] / tests / tcg / xtensa / test_mac16.S
CommitLineData
a2e67072 1#include "macros.inc"
e7e9af5c
MF
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