master
s 315 lines 11.2 KB
Raw
1 #include "macros.inc"
2 #include "fpu.h"
3
4 test_suite fp0_conv
5
6 #if XCHAL_HAVE_FP
7
8 .macro movfp fr, v
9 movi a2, \v
10 wfr \fr, a2
11 .endm
12
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
29
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
38
39
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
45
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
58
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
67
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
74
75 test round_s
76 movi a2, 1
77 wsr a2, cpenable
78
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
82
83 /* -inf */
84 test_ftoi round.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
85
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__
90
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 */
98
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 */
106
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
111
112 /* +inf */
113 test_ftoi round.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
114
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
119
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
124
125 /* -inf */
126 test_ftoi trunc.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
127
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__
132
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 */
140
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 */
148
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
153
154 /* +inf */
155 test_ftoi trunc.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
156
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
161
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
166
167 /* -inf */
168 test_ftoi floor.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
169
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__
174
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 */
182
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 */
190
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
195
196 /* +inf */
197 test_ftoi floor.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
198
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
203
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
208
209 /* -inf */
210 test_ftoi ceil.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
211
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__
216
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 */
224
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 */
232
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
237
238 /* +inf */
239 test_ftoi ceil.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
240
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
245
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
250
251 /* -inf */
252 test_ftoi utrunc.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
253
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
258
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 */
266
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 */
274
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
280
281 /* +inf */
282 test_ftoi utrunc.s, a2, f0, 0x7f800000, 0, 0xffffffff, FSR_V
283
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
288
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
300
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
312
313 #endif
314
315 test_suite_end