xref: /qemu/tests/tcg/xtensa/test_lsc.S (revision b2d84da9)
15e33b037SMax Filippov#include "macros.inc"
2adbb3df0SMax Filippov#include "fpu.h"
35e33b037SMax Filippov
45e33b037SMax Filippovtest_suite lsc
55e33b037SMax Filippov
65e33b037SMax Filippov#if XCHAL_HAVE_FP
75e33b037SMax Filippov
85e33b037SMax Filippovtest lsi
95e33b037SMax Filippov    movi    a2, 1
105e33b037SMax Filippov    wsr     a2, cpenable
115e33b037SMax Filippov
125e33b037SMax Filippov    movi    a2, 1f
135e33b037SMax Filippov    lsi     f1, a2, 4
14adbb3df0SMax Filippov#if DFPU
15adbb3df0SMax Filippov    lsi     f2, a2, 8
16adbb3df0SMax Filippov    lsip    f0, a2, 8
17adbb3df0SMax Filippov#else
18adbb3df0SMax Filippov    lsi     f0, a2, 0
195e33b037SMax Filippov    lsiu    f2, a2, 8
20adbb3df0SMax Filippov#endif
215e33b037SMax Filippov    movi    a3, 1f + 8
225e33b037SMax Filippov    assert  eq, a2, a3
235e33b037SMax Filippov    rfr     a2, f0
245e33b037SMax Filippov    movi    a3, 0x3f800000
255e33b037SMax Filippov    assert  eq, a2, a3
265e33b037SMax Filippov    rfr     a2, f1
275e33b037SMax Filippov    movi    a3, 0x40000000
285e33b037SMax Filippov    assert  eq, a2, a3
295e33b037SMax Filippov    rfr     a2, f2
305e33b037SMax Filippov    movi    a3, 0x40400000
315e33b037SMax Filippov    assert  eq, a2, a3
325e33b037SMax Filippov.data
335e33b037SMax Filippov    .align  4
345e33b037SMax Filippov1:
355e33b037SMax Filippov.float 1, 2, 3
365e33b037SMax Filippov.text
375e33b037SMax Filippovtest_end
385e33b037SMax Filippov
395e33b037SMax Filippovtest ssi
405e33b037SMax Filippov    movi    a2, 1f
415e33b037SMax Filippov    movi    a3, 0x40800000
425e33b037SMax Filippov    wfr     f3, a3
435e33b037SMax Filippov    movi    a3, 0x40a00000
445e33b037SMax Filippov    wfr     f4, a3
455e33b037SMax Filippov    movi    a3, 0x40c00000
465e33b037SMax Filippov    wfr     f5, a3
47adbb3df0SMax Filippov    ssi     f4, a2, 4
48adbb3df0SMax Filippov#if DFPU
49adbb3df0SMax Filippov    ssi     f5, a2, 8
50adbb3df0SMax Filippov    ssip    f3, a2, 8
51adbb3df0SMax Filippov#else
52adbb3df0SMax Filippov    ssi     f3, a2, 0
535e33b037SMax Filippov    ssiu    f5, a2, 8
54adbb3df0SMax Filippov#endif
555e33b037SMax Filippov    movi    a3, 1f + 8
565e33b037SMax Filippov    assert  eq, a2, a3
575e33b037SMax Filippov    l32i    a4, a2, -8
585e33b037SMax Filippov    movi    a3, 0x40800000
595e33b037SMax Filippov    assert  eq, a4, a3
605e33b037SMax Filippov    l32i    a4, a2, -4
615e33b037SMax Filippov    movi    a3, 0x40a00000
625e33b037SMax Filippov    assert  eq, a4, a3
635e33b037SMax Filippov    l32i    a4, a2, 0
645e33b037SMax Filippov    movi    a3, 0x40c00000
655e33b037SMax Filippov    assert  eq, a4, a3
665e33b037SMax Filippov.data
675e33b037SMax Filippov    .align  4
685e33b037SMax Filippov1:
695e33b037SMax Filippov.float 0, 0, 0
705e33b037SMax Filippov.text
715e33b037SMax Filippovtest_end
725e33b037SMax Filippov
735e33b037SMax Filippovtest lsx
745e33b037SMax Filippov    movi    a2, 1f
755e33b037SMax Filippov    movi    a3, 0
76adbb3df0SMax Filippov    movi    a4, 4
77adbb3df0SMax Filippov    movi    a5, 8
78adbb3df0SMax Filippov    lsx     f7, a2, a4
79adbb3df0SMax Filippov#if DFPU
80adbb3df0SMax Filippov    lsx     f8, a2, a5
81adbb3df0SMax Filippov    lsxp    f6, a2, a5
82adbb3df0SMax Filippov#else
835e33b037SMax Filippov    lsx     f6, a2, a3
84adbb3df0SMax Filippov    lsxu    f8, a2, a5
85adbb3df0SMax Filippov#endif
865e33b037SMax Filippov    movi    a3, 1f + 8
875e33b037SMax Filippov    assert  eq, a2, a3
885e33b037SMax Filippov    rfr     a2, f6
895e33b037SMax Filippov    movi    a3, 0x40e00000
905e33b037SMax Filippov    assert  eq, a2, a3
915e33b037SMax Filippov    rfr     a2, f7
925e33b037SMax Filippov    movi    a3, 0x41000000
935e33b037SMax Filippov    assert  eq, a2, a3
945e33b037SMax Filippov    rfr     a2, f8
955e33b037SMax Filippov    movi    a3, 0x41100000
965e33b037SMax Filippov    assert  eq, a2, a3
975e33b037SMax Filippov.data
985e33b037SMax Filippov    .align  4
995e33b037SMax Filippov1:
1005e33b037SMax Filippov.float 7, 8, 9
1015e33b037SMax Filippov.text
1025e33b037SMax Filippovtest_end
1035e33b037SMax Filippov
1045e33b037SMax Filippovtest ssx
1055e33b037SMax Filippov    movi    a2, 1f
1065e33b037SMax Filippov    movi    a4, 0x41200000
1075e33b037SMax Filippov    wfr     f9, a4
1085e33b037SMax Filippov    movi    a4, 0x41300000
1095e33b037SMax Filippov    wfr     f10, a4
1105e33b037SMax Filippov    movi    a4, 0x41400000
1115e33b037SMax Filippov    wfr     f11, a4
112adbb3df0SMax Filippov    movi    a3, 0
113adbb3df0SMax Filippov    movi    a4, 4
114adbb3df0SMax Filippov    movi    a5, 8
115adbb3df0SMax Filippov    ssx     f10, a2, a4
116adbb3df0SMax Filippov#if DFPU
117adbb3df0SMax Filippov    ssx     f11, a2, a5
118adbb3df0SMax Filippov    ssxp    f9, a2, a5
119adbb3df0SMax Filippov#else
120adbb3df0SMax Filippov    ssx     f9, a2, a3
121adbb3df0SMax Filippov    ssxu    f11, a2, a5
122adbb3df0SMax Filippov#endif
1235e33b037SMax Filippov    movi    a3, 1f + 8
1245e33b037SMax Filippov    assert  eq, a2, a3
1255e33b037SMax Filippov    l32i    a4, a2, -8
1265e33b037SMax Filippov    movi    a3, 0x41200000
1275e33b037SMax Filippov    assert  eq, a4, a3
1285e33b037SMax Filippov    l32i    a4, a2, -4
1295e33b037SMax Filippov    movi    a3, 0x41300000
1305e33b037SMax Filippov    assert  eq, a4, a3
1315e33b037SMax Filippov    l32i    a4, a2, 0
1325e33b037SMax Filippov    movi    a3, 0x41400000
1335e33b037SMax Filippov    assert  eq, a4, a3
1345e33b037SMax Filippov.data
1355e33b037SMax Filippov    .align  4
1365e33b037SMax Filippov1:
1375e33b037SMax Filippov.float 0, 0, 0
1385e33b037SMax Filippov.text
1395e33b037SMax Filippovtest_end
1405e33b037SMax Filippov
1415e33b037SMax Filippov#endif
1425e33b037SMax Filippov
143*b2d84da9SMax Filippov#if XCHAL_HAVE_DFP
144*b2d84da9SMax Filippov
145*b2d84da9SMax Filippov#if XCHAL_HAVE_BE
146*b2d84da9SMax Filippov#define F64_HIGH_OFF 0
147*b2d84da9SMax Filippov#else
148*b2d84da9SMax Filippov#define F64_HIGH_OFF 4
149*b2d84da9SMax Filippov#endif
150*b2d84da9SMax Filippov
151*b2d84da9SMax Filippov.macro movdf fr, hi, lo
152*b2d84da9SMax Filippov    movi    a2, \hi
153*b2d84da9SMax Filippov    movi    a3, \lo
154*b2d84da9SMax Filippov    wfrd    \fr, a2, a3
155*b2d84da9SMax Filippov.endm
156*b2d84da9SMax Filippov
157*b2d84da9SMax Filippovtest ldi
158*b2d84da9SMax Filippov    movi    a2, 1
159*b2d84da9SMax Filippov    wsr     a2, cpenable
160*b2d84da9SMax Filippov
161*b2d84da9SMax Filippov    movi    a2, 1f
162*b2d84da9SMax Filippov    ldi     f1, a2, 8
163*b2d84da9SMax Filippov    ldi     f2, a2, 16
164*b2d84da9SMax Filippov    ldip    f0, a2, 16
165*b2d84da9SMax Filippov    movi    a3, 1f + 16
166*b2d84da9SMax Filippov    assert  eq, a2, a3
167*b2d84da9SMax Filippov    rfrd    a2, f0
168*b2d84da9SMax Filippov    movi    a3, 0x3ff00000
169*b2d84da9SMax Filippov    assert  eq, a2, a3
170*b2d84da9SMax Filippov    rfrd    a2, f1
171*b2d84da9SMax Filippov    movi    a3, 0x40000000
172*b2d84da9SMax Filippov    assert  eq, a2, a3
173*b2d84da9SMax Filippov    rfrd    a2, f2
174*b2d84da9SMax Filippov    movi    a3, 0x40080000
175*b2d84da9SMax Filippov    assert  eq, a2, a3
176*b2d84da9SMax Filippov.data
177*b2d84da9SMax Filippov    .align  8
178*b2d84da9SMax Filippov1:
179*b2d84da9SMax Filippov.double 1, 2, 3
180*b2d84da9SMax Filippov.text
181*b2d84da9SMax Filippovtest_end
182*b2d84da9SMax Filippov
183*b2d84da9SMax Filippovtest sdi
184*b2d84da9SMax Filippov    movdf   f3, 0x40800000, 0
185*b2d84da9SMax Filippov    movdf   f4, 0x40a00000, 0
186*b2d84da9SMax Filippov    movdf   f5, 0x40c00000, 0
187*b2d84da9SMax Filippov    movi    a2, 1f
188*b2d84da9SMax Filippov    sdi     f4, a2, 8
189*b2d84da9SMax Filippov    sdi     f5, a2, 16
190*b2d84da9SMax Filippov    sdip    f3, a2, 16
191*b2d84da9SMax Filippov    movi    a3, 1f + 16
192*b2d84da9SMax Filippov    assert  eq, a2, a3
193*b2d84da9SMax Filippov    l32i    a4, a2, -16 + F64_HIGH_OFF
194*b2d84da9SMax Filippov    movi    a3, 0x40800000
195*b2d84da9SMax Filippov    assert  eq, a4, a3
196*b2d84da9SMax Filippov    l32i    a4, a2, -8 + F64_HIGH_OFF
197*b2d84da9SMax Filippov    movi    a3, 0x40a00000
198*b2d84da9SMax Filippov    assert  eq, a4, a3
199*b2d84da9SMax Filippov    l32i    a4, a2, F64_HIGH_OFF
200*b2d84da9SMax Filippov    movi    a3, 0x40c00000
201*b2d84da9SMax Filippov    assert  eq, a4, a3
202*b2d84da9SMax Filippov.data
203*b2d84da9SMax Filippov    .align  8
204*b2d84da9SMax Filippov1:
205*b2d84da9SMax Filippov.double 0, 0, 0
206*b2d84da9SMax Filippov.text
207*b2d84da9SMax Filippovtest_end
208*b2d84da9SMax Filippov
209*b2d84da9SMax Filippovtest ldx
210*b2d84da9SMax Filippov    movi    a2, 1f
211*b2d84da9SMax Filippov    movi    a3, 0
212*b2d84da9SMax Filippov    movi    a4, 8
213*b2d84da9SMax Filippov    movi    a5, 16
214*b2d84da9SMax Filippov    ldx     f7, a2, a4
215*b2d84da9SMax Filippov    ldx     f8, a2, a5
216*b2d84da9SMax Filippov    ldxp    f6, a2, a5
217*b2d84da9SMax Filippov    movi    a3, 1f + 16
218*b2d84da9SMax Filippov    assert  eq, a2, a3
219*b2d84da9SMax Filippov    rfrd    a2, f6
220*b2d84da9SMax Filippov    movi    a3, 0x401c0000
221*b2d84da9SMax Filippov    assert  eq, a2, a3
222*b2d84da9SMax Filippov    rfrd    a2, f7
223*b2d84da9SMax Filippov    movi    a3, 0x40200000
224*b2d84da9SMax Filippov    assert  eq, a2, a3
225*b2d84da9SMax Filippov    rfrd    a2, f8
226*b2d84da9SMax Filippov    movi    a3, 0x40220000
227*b2d84da9SMax Filippov    assert  eq, a2, a3
228*b2d84da9SMax Filippov.data
229*b2d84da9SMax Filippov    .align  8
230*b2d84da9SMax Filippov1:
231*b2d84da9SMax Filippov.double 7, 8, 9
232*b2d84da9SMax Filippov.text
233*b2d84da9SMax Filippovtest_end
234*b2d84da9SMax Filippov
235*b2d84da9SMax Filippovtest sdx
236*b2d84da9SMax Filippov    movdf   f9, 0x41200000, 0
237*b2d84da9SMax Filippov    movdf   f10, 0x41300000, 0
238*b2d84da9SMax Filippov    movdf   f11, 0x41400000, 0
239*b2d84da9SMax Filippov    movi    a2, 1f
240*b2d84da9SMax Filippov    movi    a3, 0
241*b2d84da9SMax Filippov    movi    a4, 8
242*b2d84da9SMax Filippov    movi    a5, 16
243*b2d84da9SMax Filippov    sdx     f10, a2, a4
244*b2d84da9SMax Filippov    sdx     f11, a2, a5
245*b2d84da9SMax Filippov    sdxp    f9, a2, a5
246*b2d84da9SMax Filippov    movi    a3, 1f + 16
247*b2d84da9SMax Filippov    assert  eq, a2, a3
248*b2d84da9SMax Filippov    l32i    a4, a2, -16 + F64_HIGH_OFF
249*b2d84da9SMax Filippov    movi    a3, 0x41200000
250*b2d84da9SMax Filippov    assert  eq, a4, a3
251*b2d84da9SMax Filippov    l32i    a4, a2, -8 + F64_HIGH_OFF
252*b2d84da9SMax Filippov    movi    a3, 0x41300000
253*b2d84da9SMax Filippov    assert  eq, a4, a3
254*b2d84da9SMax Filippov    l32i    a4, a2, F64_HIGH_OFF
255*b2d84da9SMax Filippov    movi    a3, 0x41400000
256*b2d84da9SMax Filippov    assert  eq, a4, a3
257*b2d84da9SMax Filippov.data
258*b2d84da9SMax Filippov    .align  8
259*b2d84da9SMax Filippov1:
260*b2d84da9SMax Filippov.double 0, 0, 0
261*b2d84da9SMax Filippov.text
262*b2d84da9SMax Filippovtest_end
263*b2d84da9SMax Filippov
264*b2d84da9SMax Filippov#endif
265*b2d84da9SMax Filippov
2665e33b037SMax Filippovtest_suite_end
267