osdep: protect qemu/osdep.h with extern "C"
[qemu/ar7.git] / tests / tcg / xtensa / test_fp0_conv.S
blobcfee6e51790cec6f2eda2061d049c23a1412ebb3
1 #include "macros.inc"
2 #include "fpu.h"
4 test_suite fp0_conv
6 #if XCHAL_HAVE_FP
8 .macro movfp fr, v
9     movi    a2, \v
10     wfr     \fr, a2
11 .endm
13 .macro test_ftoi_ex op, r0, fr0, v, c, r, sr
14     movi    a2, 0
15     wur     a2, fsr
16     movfp   \fr0, \v
17     \op     \r0, \fr0, \c
18     dump    \r0
19     movi    a3, \r
20     assert  eq, \r0, a3
21     rur     a2, fsr
22 #if DFPU
23     movi    a3, \sr
24     assert  eq, a2, a3
25 #else
26     assert  eqi, a2, 0
27 #endif
28 .endm
30 .macro test_ftoi op, r0, fr0, v, c, r, sr
31     movi    a2, 0
32     wur     a2, fcr
33     test_ftoi_ex \op, \r0, \fr0, \v, \c, \r, \sr
34     movi    a2, 0x7c
35     wur     a2, fcr
36     test_ftoi_ex \op, \r0, \fr0, \v, \c, \r, \sr
37 .endm
40 .macro test_itof_ex op, fr0, ar0, v, c, r, sr
41     movi    a2, 0
42     wur     a2, fsr
43     movi    \ar0, \v
44     \op     \fr0, \ar0, \c
46     rfr     a2, \fr0
47     dump    a2
48     movi    a3, \r
49     assert  eq, a2, a3
50     rur     a2, fsr
51 #if DFPU
52     movi    a3, \sr
53     assert  eq, a2, a3
54 #else
55     assert  eqi, a2, 0
56 #endif
57 .endm
59 .macro test_itof_rm op, fr0, ar0, v, c, rm, r, sr
60     movi    a2, \rm
61     wur     a2, fcr
62     test_itof_ex \op, \fr0, \ar0, \v, \c, \r, \sr
63     movi    a2, (\rm) | 0x7c
64     wur     a2, fcr
65     test_itof_ex \op, \fr0, \ar0, \v, \c, \r, \sr
66 .endm
68 .macro test_itof op, fr0, ar0, v, c, r0, r1, r2, r3, sr
69     test_itof_rm \op, \fr0, \ar0, \v, \c, 0, \r0, \sr
70     test_itof_rm \op, \fr0, \ar0, \v, \c, 1, \r1, \sr
71     test_itof_rm \op, \fr0, \ar0, \v, \c, 2, \r2, \sr
72     test_itof_rm \op, \fr0, \ar0, \v, \c, 3, \r3, \sr
73 .endm
75 test round_s
76     movi    a2, 1
77     wsr     a2, cpenable
79     /* NaN */
80     test_ftoi round.s, a2, f0, 0xffc00001, 0, 0x7fffffff, FSR_V
81     test_ftoi round.s, a2, f0, 0xff800001, 0, 0x7fffffff, FSR_V
83     /* -inf */
84     test_ftoi round.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
86     /* negative overflow */
87     test_ftoi round.s, a2, f0, 0xceffffff, 1, 0x80000000, FSR_V
88     test_ftoi round.s, a2, f0, 0xcf000000, 0, 0x80000000, FSR__
89     test_ftoi round.s, a2, f0, 0xceffffff, 0, 0x80000080, FSR__
91     /* negative */
92     test_ftoi round.s, a2, f0, 0xbfa00000, 1, -2, FSR_I  /* -1.25 * 2 */
93     test_ftoi round.s, a2, f0, 0xbfc00000, 0, -2, FSR_I  /* -1.5 */
94     test_ftoi round.s, a2, f0, 0xbf800000, 1, -2, FSR__  /* -1 * 2 */
95     test_ftoi round.s, a2, f0, 0xbf800000, 0, -1, FSR__  /* -1 */
96     test_ftoi round.s, a2, f0, 0xbf400000, 0, -1, FSR_I  /* -0.75 */
97     test_ftoi round.s, a2, f0, 0xbf000000, 0,  0, FSR_I  /* -0.5 */
99     /* positive */
100     test_ftoi round.s, a2, f0, 0x3f000000, 0, 0, FSR_I /* 0.5 */
101     test_ftoi round.s, a2, f0, 0x3f400000, 0, 1, FSR_I /* 0.75 */
102     test_ftoi round.s, a2, f0, 0x3f800000, 0, 1, FSR__ /* 1 */
103     test_ftoi round.s, a2, f0, 0x3f800000, 1, 2, FSR__ /* 1 * 2 */
104     test_ftoi round.s, a2, f0, 0x3fc00000, 0, 2, FSR_I /* 1.5 */
105     test_ftoi round.s, a2, f0, 0x3fa00000, 1, 2, FSR_I /* 1.25 * 2 */
107     /* positive overflow */
108     test_ftoi round.s, a2, f0, 0x4effffff, 0, 0x7fffff80, FSR__
109     test_ftoi round.s, a2, f0, 0x4f000000, 0, 0x7fffffff, FSR_V
110     test_ftoi round.s, a2, f0, 0x4effffff, 1, 0x7fffffff, FSR_V
112     /* +inf */
113     test_ftoi round.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
115     /* NaN */
116     test_ftoi round.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
117     test_ftoi round.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
118 test_end
120 test trunc_s
121     /* NaN */
122     test_ftoi trunc.s, a2, f0, 0xffc00001, 0, 0x7fffffff, FSR_V
123     test_ftoi trunc.s, a2, f0, 0xff800001, 0, 0x7fffffff, FSR_V
125     /* -inf */
126     test_ftoi trunc.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
128     /* negative overflow */
129     test_ftoi trunc.s, a2, f0, 0xceffffff, 1, 0x80000000, FSR_V
130     test_ftoi trunc.s, a2, f0, 0xcf000000, 0, 0x80000000, FSR__
131     test_ftoi trunc.s, a2, f0, 0xceffffff, 0, 0x80000080, FSR__
133     /* negative */
134     test_ftoi trunc.s, a2, f0, 0xbfa00000, 1, -2, FSR_I /* -1.25 * 2 */
135     test_ftoi trunc.s, a2, f0, 0xbfc00000, 0, -1, FSR_I /* -1.5 */
136     test_ftoi trunc.s, a2, f0, 0xbf800000, 1, -2, FSR__ /* -1 * 2 */
137     test_ftoi trunc.s, a2, f0, 0xbf800000, 0, -1, FSR__ /* -1 */
138     test_ftoi trunc.s, a2, f0, 0xbf400000, 0,  0, FSR_I /* -0.75 */
139     test_ftoi trunc.s, a2, f0, 0xbf000000, 0,  0, FSR_I /* -0.5 */
141     /* positive */
142     test_ftoi trunc.s, a2, f0, 0x3f000000, 0, 0, FSR_I /* 0.5 */
143     test_ftoi trunc.s, a2, f0, 0x3f400000, 0, 0, FSR_I /* 0.75 */
144     test_ftoi trunc.s, a2, f0, 0x3f800000, 0, 1, FSR__ /* 1 */
145     test_ftoi trunc.s, a2, f0, 0x3f800000, 1, 2, FSR__ /* 1 * 2 */
146     test_ftoi trunc.s, a2, f0, 0x3fc00000, 0, 1, FSR_I /* 1.5 */
147     test_ftoi trunc.s, a2, f0, 0x3fa00000, 1, 2, FSR_I /* 1.25 * 2 */
149     /* positive overflow */
150     test_ftoi trunc.s, a2, f0, 0x4effffff, 0, 0x7fffff80, FSR__
151     test_ftoi trunc.s, a2, f0, 0x4f000000, 0, 0x7fffffff, FSR_V
152     test_ftoi trunc.s, a2, f0, 0x4effffff, 1, 0x7fffffff, FSR_V
154     /* +inf */
155     test_ftoi trunc.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
157     /* NaN */
158     test_ftoi trunc.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
159     test_ftoi trunc.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
160 test_end
162 test floor_s
163     /* NaN */
164     test_ftoi floor.s, a2, f0, 0xffc00001, 0, 0x7fffffff, FSR_V
165     test_ftoi floor.s, a2, f0, 0xff800001, 0, 0x7fffffff, FSR_V
167     /* -inf */
168     test_ftoi floor.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
170     /* negative overflow */
171     test_ftoi floor.s, a2, f0, 0xceffffff, 1, 0x80000000, FSR_V
172     test_ftoi floor.s, a2, f0, 0xcf000000, 0, 0x80000000, FSR__
173     test_ftoi floor.s, a2, f0, 0xceffffff, 0, 0x80000080, FSR__
175     /* negative */
176     test_ftoi floor.s, a2, f0, 0xbfa00000, 1, -3, FSR_I /* -1.25 * 2 */
177     test_ftoi floor.s, a2, f0, 0xbfc00000, 0, -2, FSR_I /* -1.5 */
178     test_ftoi floor.s, a2, f0, 0xbf800000, 1, -2, FSR__ /* -1 * 2 */
179     test_ftoi floor.s, a2, f0, 0xbf800000, 0, -1, FSR__ /* -1 */
180     test_ftoi floor.s, a2, f0, 0xbf400000, 0, -1, FSR_I /* -0.75 */
181     test_ftoi floor.s, a2, f0, 0xbf000000, 0, -1, FSR_I /* -0.5 */
183     /* positive */
184     test_ftoi floor.s, a2, f0, 0x3f000000, 0, 0, FSR_I /* 0.5 */
185     test_ftoi floor.s, a2, f0, 0x3f400000, 0, 0, FSR_I /* 0.75 */
186     test_ftoi floor.s, a2, f0, 0x3f800000, 0, 1, FSR__ /* 1 */
187     test_ftoi floor.s, a2, f0, 0x3f800000, 1, 2, FSR__ /* 1 * 2 */
188     test_ftoi floor.s, a2, f0, 0x3fc00000, 0, 1, FSR_I /* 1.5 */
189     test_ftoi floor.s, a2, f0, 0x3fa00000, 1, 2, FSR_I /* 1.25 * 2 */
191     /* positive overflow */
192     test_ftoi floor.s, a2, f0, 0x4effffff, 0, 0x7fffff80, FSR__
193     test_ftoi floor.s, a2, f0, 0x4f000000, 0, 0x7fffffff, FSR_V
194     test_ftoi floor.s, a2, f0, 0x4effffff, 1, 0x7fffffff, FSR_V
196     /* +inf */
197     test_ftoi floor.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
199     /* NaN */
200     test_ftoi floor.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
201     test_ftoi floor.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
202 test_end
204 test ceil_s
205     /* NaN */
206     test_ftoi ceil.s, a2, f0, 0xffc00001, 0, 0x7fffffff, FSR_V
207     test_ftoi ceil.s, a2, f0, 0xff800001, 0, 0x7fffffff, FSR_V
209     /* -inf */
210     test_ftoi ceil.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
212     /* negative overflow */
213     test_ftoi ceil.s, a2, f0, 0xceffffff, 1, 0x80000000, FSR_V
214     test_ftoi ceil.s, a2, f0, 0xcf000000, 0, 0x80000000, FSR__
215     test_ftoi ceil.s, a2, f0, 0xceffffff, 0, 0x80000080, FSR__
217     /* negative */
218     test_ftoi ceil.s, a2, f0, 0xbfa00000, 1, -2, FSR_I /* -1.25 * 2 */
219     test_ftoi ceil.s, a2, f0, 0xbfc00000, 0, -1, FSR_I /* -1.5 */
220     test_ftoi ceil.s, a2, f0, 0xbf800000, 1, -2, FSR__ /* -1 * 2 */
221     test_ftoi ceil.s, a2, f0, 0xbf800000, 0, -1, FSR__ /* -1 */
222     test_ftoi ceil.s, a2, f0, 0xbf400000, 0,  0, FSR_I /* -0.75 */
223     test_ftoi ceil.s, a2, f0, 0xbf000000, 0,  0, FSR_I /* -0.5 */
225     /* positive */
226     test_ftoi ceil.s, a2, f0, 0x3f000000, 0, 1, FSR_I /* 0.5 */
227     test_ftoi ceil.s, a2, f0, 0x3f400000, 0, 1, FSR_I /* 0.75 */
228     test_ftoi ceil.s, a2, f0, 0x3f800000, 0, 1, FSR__ /* 1 */
229     test_ftoi ceil.s, a2, f0, 0x3f800000, 1, 2, FSR__ /* 1 * 2 */
230     test_ftoi ceil.s, a2, f0, 0x3fc00000, 0, 2, FSR_I /* 1.5 */
231     test_ftoi ceil.s, a2, f0, 0x3fa00000, 1, 3, FSR_I /* 1.25 * 2 */
233     /* positive overflow */
234     test_ftoi ceil.s, a2, f0, 0x4effffff, 0, 0x7fffff80, FSR__
235     test_ftoi ceil.s, a2, f0, 0x4f000000, 0, 0x7fffffff, FSR_V
236     test_ftoi ceil.s, a2, f0, 0x4effffff, 1, 0x7fffffff, FSR_V
238     /* +inf */
239     test_ftoi ceil.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
241     /* NaN */
242     test_ftoi ceil.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
243     test_ftoi ceil.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
244 test_end
246 test utrunc_s
247     /* NaN */
248     test_ftoi utrunc.s, a2, f0, 0xffc00001, 0, 0xffffffff, FSR_V
249     test_ftoi utrunc.s, a2, f0, 0xff800001, 0, 0xffffffff, FSR_V
251     /* -inf */
252     test_ftoi utrunc.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
254     /* negative overflow */
255     test_ftoi utrunc.s, a2, f0, 0xceffffff, 1, 0x80000000, FSR_V
256     test_ftoi utrunc.s, a2, f0, 0xcf000000, 0, 0x80000000, FSR_V
257     test_ftoi utrunc.s, a2, f0, 0xceffffff, 0, 0x80000080, FSR_V
259     /* negative */
260     test_ftoi utrunc.s, a2, f0, 0xbfa00000, 1, -2, FSR_V /* -1.25 * 2 */
261     test_ftoi utrunc.s, a2, f0, 0xbfc00000, 0, -1, FSR_V /* -1.5 */
262     test_ftoi utrunc.s, a2, f0, 0xbf800000, 1, -2, FSR_V /* -1 * 2 */
263     test_ftoi utrunc.s, a2, f0, 0xbf800000, 0, -1, FSR_V /* -1 */
264     test_ftoi utrunc.s, a2, f0, 0xbf400000, 0,  0, FSR_I /* -0.75 */
265     test_ftoi utrunc.s, a2, f0, 0xbf000000, 0,  0, FSR_I /* -0.5 */
267     /* positive */
268     test_ftoi utrunc.s, a2, f0, 0x3f000000, 0, 0, FSR_I /* 0.5 */
269     test_ftoi utrunc.s, a2, f0, 0x3f400000, 0, 0, FSR_I /* 0.75 */
270     test_ftoi utrunc.s, a2, f0, 0x3f800000, 0, 1, FSR__ /* 1 */
271     test_ftoi utrunc.s, a2, f0, 0x3f800000, 1, 2, FSR__ /* 1 * 2 */
272     test_ftoi utrunc.s, a2, f0, 0x3fc00000, 0, 1, FSR_I /* 1.5 */
273     test_ftoi utrunc.s, a2, f0, 0x3fa00000, 1, 2, FSR_I /* 1.25 * 2 */
275     /* positive overflow */
276     test_ftoi utrunc.s, a2, f0, 0x4effffff, 0, 0x7fffff80, FSR__
277     test_ftoi utrunc.s, a2, f0, 0x4f000000, 0, 0x80000000, FSR__
278     test_ftoi utrunc.s, a2, f0, 0x4effffff, 1, 0xffffff00, FSR__
279     test_ftoi utrunc.s, a2, f0, 0x4f800000, 1, 0xffffffff, FSR_V
281     /* +inf */
282     test_ftoi utrunc.s, a2, f0, 0x7f800000, 0, 0xffffffff, FSR_V
284     /* NaN */
285     test_ftoi utrunc.s, a2, f0, 0x7f800001, 0, 0xffffffff, FSR_V
286     test_ftoi utrunc.s, a2, f0, 0x7fc00000, 0, 0xffffffff, FSR_V
287 test_end
289 test float_s
290     test_itof float.s, f0, a2, -1, 0, \
291         0xbf800000, 0xbf800000, 0xbf800000, 0xbf800000, FSR__
292     test_itof float.s, f0, a2, 0, 0, 0, 0, 0, 0, FSR__
293     test_itof float.s, f0, a2, 1, 1, \
294         0x3f000000, 0x3f000000, 0x3f000000, 0x3f000000, FSR__
295     test_itof float.s, f0, a2, 1, 0, \
296         0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, FSR__
297     test_itof float.s, f0, a2, 0x7fffffff, 0, \
298         0x4f000000, 0x4effffff, 0x4f000000, 0x4effffff, FSR_I
299 test_end
301 test ufloat_s
302     test_itof ufloat.s, f0, a2, 0, 0, 0, 0, 0, 0, FSR__
303     test_itof ufloat.s, f0, a2, 1, 1, \
304         0x3f000000, 0x3f000000, 0x3f000000, 0x3f000000, FSR__
305     test_itof ufloat.s, f0, a2, 1, 0, \
306         0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, FSR__
307     test_itof ufloat.s, f0, a2, 0x7fffffff, 0, \
308         0x4f000000, 0x4effffff, 0x4f000000, 0x4effffff, FSR_I
309     test_itof ufloat.s, f0, a2, 0xffffffff, 0, \
310         0x4f800000, 0x4f7fffff, 0x4f800000, 0x4f7fffff, FSR_I
311 test_end
313 #endif
315 test_suite_end