xref: /qemu/tests/tcg/xtensa/test_fp1.S (revision 44423107e7b5731ef40c5c8632a5bad8b49d0838)
1fd78bc55SMax Filippov#include "macros.inc"
2*7f4faa21SMax Filippov#include "fpu.h"
3fd78bc55SMax Filippov
4fd78bc55SMax Filippovtest_suite fp1
5fd78bc55SMax Filippov
6fd78bc55SMax Filippov#if XCHAL_HAVE_FP
7fd78bc55SMax Filippov
8fd78bc55SMax Filippov.macro movfp fr, v
9fd78bc55SMax Filippov    movi    a2, \v
10fd78bc55SMax Filippov    wfr     \fr, a2
11fd78bc55SMax Filippov.endm
12fd78bc55SMax Filippov
13*7f4faa21SMax Filippov.macro test_ord_ex op, br, fr0, fr1, v0, v1, r, sr
14fd78bc55SMax Filippov    movi    a2, 0
15fd78bc55SMax Filippov    wur     a2, fsr
16fd78bc55SMax Filippov    movfp   \fr0, \v0
17fd78bc55SMax Filippov    movfp   \fr1, \v1
18fd78bc55SMax Filippov    \op     \br, \fr0, \fr1
19fd78bc55SMax Filippov    movi    a2, 0
20fd78bc55SMax Filippov    movi    a3, 1
21fd78bc55SMax Filippov    movt    a2, a3, \br
22fd78bc55SMax Filippov    assert  eqi, a2, \r
23fd78bc55SMax Filippov    rur     a2, fsr
24*7f4faa21SMax Filippov#if DFPU
25*7f4faa21SMax Filippov    movi    a3, \sr
26*7f4faa21SMax Filippov    assert  eq, a2, a3
27*7f4faa21SMax Filippov#else
28fd78bc55SMax Filippov    assert  eqi, a2, 0
29*7f4faa21SMax Filippov#endif
30fd78bc55SMax Filippov.endm
31fd78bc55SMax Filippov
32*7f4faa21SMax Filippov.macro test_ord op, br, fr0, fr1, v0, v1, r, sr
33fd78bc55SMax Filippov    movi    a2, 0
34fd78bc55SMax Filippov    wur     a2, fcr
35*7f4faa21SMax Filippov    test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r, \sr
36fd78bc55SMax Filippov    movi    a2, 0x7c
37fd78bc55SMax Filippov    wur     a2, fcr
38*7f4faa21SMax Filippov    test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r, \sr
39fd78bc55SMax Filippov.endm
40fd78bc55SMax Filippov
41*7f4faa21SMax Filippov.macro test_ord_all op, aa, ab, ba, aPI, PIa, aN, Na, II, IN, NI, qnan_sr
42*7f4faa21SMax Filippov    test_ord \op  b0,  f0,  f1, 0x3f800000, 0x3f800000, \aa,  FSR__    /*   ord == ord */
43*7f4faa21SMax Filippov    test_ord \op  b1,  f2,  f3, 0x3f800000, 0x3fc00000, \ab,  FSR__    /*   ord <  ord */
44*7f4faa21SMax Filippov    test_ord \op  b2,  f4,  f5, 0x3fc00000, 0x3f800000, \ba,  FSR__    /*   ord >  ord */
45*7f4faa21SMax Filippov    test_ord \op  b3,  f6,  f7, 0x3f800000, 0x7f800000, \aPI, FSR__    /*   ord   +INF */
46*7f4faa21SMax Filippov    test_ord \op  b4,  f8,  f9, 0x7f800000, 0x3f800000, \PIa, FSR__    /*  +INF    ord */
47*7f4faa21SMax Filippov    test_ord \op  b5, f10, f11, 0x3f800000, 0xffc00001, \aN,  \qnan_sr /*   ord  -QNaN */
48*7f4faa21SMax Filippov    test_ord \op  b6, f12, f13, 0x3f800000, 0xff800001, \aN,  FSR_V    /*   ord  -SNaN */
49*7f4faa21SMax Filippov    test_ord \op  b7, f14, f15, 0x3f800000, 0x7f800001, \aN,  FSR_V    /*   ord  +SNaN */
50*7f4faa21SMax Filippov    test_ord \op  b8,  f0,  f1, 0x3f800000, 0x7fc00000, \aN,  \qnan_sr /*   ord  +QNaN */
51*7f4faa21SMax Filippov    test_ord \op  b9,  f2,  f3, 0xffc00001, 0x3f800000, \Na,  \qnan_sr /* -QNaN    ord */
52*7f4faa21SMax Filippov    test_ord \op b10,  f4,  f5, 0xff800001, 0x3f800000, \Na,  FSR_V    /* -SNaN    ord */
53*7f4faa21SMax Filippov    test_ord \op b11,  f6,  f7, 0x7f800001, 0x3f800000, \Na,  FSR_V    /* +SNaN    ord */
54*7f4faa21SMax Filippov    test_ord \op b12,  f8,  f9, 0x7fc00000, 0x3f800000, \Na,  \qnan_sr /* +QNaN    ord */
55*7f4faa21SMax Filippov    test_ord \op b13, f10, f11, 0x7f800000, 0x7f800000, \II,  FSR__    /*  +INF   +INF */
56*7f4faa21SMax Filippov    test_ord \op b14, f12, f13, 0x7f800000, 0x7fc00000, \IN,  \qnan_sr /*  +INF  +QNaN */
57*7f4faa21SMax Filippov    test_ord \op b15, f14, f15, 0x7fc00000, 0x7f800000, \NI,  \qnan_sr /* +QNaN   +INF */
58fd78bc55SMax Filippov.endm
59fd78bc55SMax Filippov
60fd78bc55SMax Filippovtest un_s
61fd78bc55SMax Filippov    movi    a2, 1
62fd78bc55SMax Filippov    wsr     a2, cpenable
63*7f4faa21SMax Filippov    test_ord_all un.s, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, FSR__
64fd78bc55SMax Filippovtest_end
65fd78bc55SMax Filippov
66fd78bc55SMax Filippovtest oeq_s
67*7f4faa21SMax Filippov    test_ord_all oeq.s, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, FSR__
68fd78bc55SMax Filippovtest_end
69fd78bc55SMax Filippov
70fd78bc55SMax Filippovtest ueq_s
71*7f4faa21SMax Filippov    test_ord_all ueq.s, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, FSR__
72fd78bc55SMax Filippovtest_end
73fd78bc55SMax Filippov
74fd78bc55SMax Filippovtest olt_s
75*7f4faa21SMax Filippov    test_ord_all olt.s, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, FSR_V
76fd78bc55SMax Filippovtest_end
77fd78bc55SMax Filippov
78fd78bc55SMax Filippovtest ult_s
79*7f4faa21SMax Filippov    test_ord_all ult.s, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, FSR__
80fd78bc55SMax Filippovtest_end
81fd78bc55SMax Filippov
82fd78bc55SMax Filippovtest ole_s
83*7f4faa21SMax Filippov    test_ord_all ole.s, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, FSR_V
84fd78bc55SMax Filippovtest_end
85fd78bc55SMax Filippov
86fd78bc55SMax Filippovtest ule_s
87*7f4faa21SMax Filippov    test_ord_all ule.s, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, FSR__
88fd78bc55SMax Filippovtest_end
89fd78bc55SMax Filippov
90fd78bc55SMax Filippov.macro test_cond op, fr0, fr1, cr, v0, v1, r
91fd78bc55SMax Filippov    movfp   \fr0, \v0
92fd78bc55SMax Filippov    movfp   \fr1, \v1
93fd78bc55SMax Filippov    \op     \fr0, \fr1, \cr
94fd78bc55SMax Filippov    rfr     a2, \fr0
95fd78bc55SMax Filippov    movi    a3, \r
96fd78bc55SMax Filippov    assert  eq, a2, a3
97fd78bc55SMax Filippov.endm
98fd78bc55SMax Filippov
99fd78bc55SMax Filippovtest moveqz_s
100fd78bc55SMax Filippov    movi    a3, 0
101fd78bc55SMax Filippov    test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
102fd78bc55SMax Filippov    movi    a3, 1
103fd78bc55SMax Filippov    test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0
104fd78bc55SMax Filippovtest_end
105fd78bc55SMax Filippov
106fd78bc55SMax Filippovtest movnez_s
107fd78bc55SMax Filippov    movi    a3, 0
108fd78bc55SMax Filippov    test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0
109fd78bc55SMax Filippov    movi    a3, 1
110fd78bc55SMax Filippov    test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
111fd78bc55SMax Filippovtest_end
112fd78bc55SMax Filippov
113fd78bc55SMax Filippovtest movltz_s
114fd78bc55SMax Filippov    movi    a3, -1
115fd78bc55SMax Filippov    test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
116fd78bc55SMax Filippov    movi    a3, 0
117fd78bc55SMax Filippov    test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0
118fd78bc55SMax Filippov    movi    a3, 1
119fd78bc55SMax Filippov    test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0
120fd78bc55SMax Filippovtest_end
121fd78bc55SMax Filippov
122fd78bc55SMax Filippovtest movgez_s
123fd78bc55SMax Filippov    movi    a3, -1
124fd78bc55SMax Filippov    test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0
125fd78bc55SMax Filippov    movi    a3, 0
126fd78bc55SMax Filippov    test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
127fd78bc55SMax Filippov    movi    a3, 1
128fd78bc55SMax Filippov    test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
129fd78bc55SMax Filippovtest_end
130fd78bc55SMax Filippov
131fd78bc55SMax Filippovtest movf_s
132fd78bc55SMax Filippov    olt.s   b0, f0, f0
133fd78bc55SMax Filippov    test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000
134fd78bc55SMax Filippov    ueq.s   b0, f0, f0
135fd78bc55SMax Filippov    test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0
136fd78bc55SMax Filippovtest_end
137fd78bc55SMax Filippov
138fd78bc55SMax Filippovtest movt_s
139fd78bc55SMax Filippov    ueq.s   b0, f0, f0
140fd78bc55SMax Filippov    test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000
141fd78bc55SMax Filippov    olt.s   b0, f0, f0
142fd78bc55SMax Filippov    test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0
143fd78bc55SMax Filippovtest_end
144fd78bc55SMax Filippov
145fd78bc55SMax Filippov#endif
146fd78bc55SMax Filippov
147fd78bc55SMax Filippovtest_suite_end
148