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