root / tests / tcg / xtensa / test_mac16.S @ c09015dd
History | View | Annotate | Download (5.2 kB)
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 |