Statistics
| Branch: | Revision:

root / tests / tcg / xtensa / test_mac16.S @ c09015dd

History | View | Annotate | Download (5.2 kB)

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