1#include "macros.inc"
2#include "fpu.h"
3
4test_suite fp0_conv
5
6
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
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
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
75test round_s
76 movi a2, 1
77 wsr a2, cpenable
78
79
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
84 test_ftoi round.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
85
86
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
92 test_ftoi round.s, a2, f0, 0xbfa00000, 1, -2, FSR_I
93 test_ftoi round.s, a2, f0, 0xbfc00000, 0, -2, FSR_I
94 test_ftoi round.s, a2, f0, 0xbf800000, 1, -2, FSR__
95 test_ftoi round.s, a2, f0, 0xbf800000, 0, -1, FSR__
96 test_ftoi round.s, a2, f0, 0xbf400000, 0, -1, FSR_I
97 test_ftoi round.s, a2, f0, 0xbf000000, 0, 0, FSR_I
98
99
100 test_ftoi round.s, a2, f0, 0x3f000000, 0, 0, FSR_I
101 test_ftoi round.s, a2, f0, 0x3f400000, 0, 1, FSR_I
102 test_ftoi round.s, a2, f0, 0x3f800000, 0, 1, FSR__
103 test_ftoi round.s, a2, f0, 0x3f800000, 1, 2, FSR__
104 test_ftoi round.s, a2, f0, 0x3fc00000, 0, 2, FSR_I
105 test_ftoi round.s, a2, f0, 0x3fa00000, 1, 2, FSR_I
106
107
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
113 test_ftoi round.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
114
115
116 test_ftoi round.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
117 test_ftoi round.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
118test_end
119
120test trunc_s
121
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
126 test_ftoi trunc.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
127
128
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
134 test_ftoi trunc.s, a2, f0, 0xbfa00000, 1, -2, FSR_I
135 test_ftoi trunc.s, a2, f0, 0xbfc00000, 0, -1, FSR_I
136 test_ftoi trunc.s, a2, f0, 0xbf800000, 1, -2, FSR__
137 test_ftoi trunc.s, a2, f0, 0xbf800000, 0, -1, FSR__
138 test_ftoi trunc.s, a2, f0, 0xbf400000, 0, 0, FSR_I
139 test_ftoi trunc.s, a2, f0, 0xbf000000, 0, 0, FSR_I
140
141
142 test_ftoi trunc.s, a2, f0, 0x3f000000, 0, 0, FSR_I
143 test_ftoi trunc.s, a2, f0, 0x3f400000, 0, 0, FSR_I
144 test_ftoi trunc.s, a2, f0, 0x3f800000, 0, 1, FSR__
145 test_ftoi trunc.s, a2, f0, 0x3f800000, 1, 2, FSR__
146 test_ftoi trunc.s, a2, f0, 0x3fc00000, 0, 1, FSR_I
147 test_ftoi trunc.s, a2, f0, 0x3fa00000, 1, 2, FSR_I
148
149
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
155 test_ftoi trunc.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
156
157
158 test_ftoi trunc.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
159 test_ftoi trunc.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
160test_end
161
162test floor_s
163
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
168 test_ftoi floor.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
169
170
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
176 test_ftoi floor.s, a2, f0, 0xbfa00000, 1, -3, FSR_I
177 test_ftoi floor.s, a2, f0, 0xbfc00000, 0, -2, FSR_I
178 test_ftoi floor.s, a2, f0, 0xbf800000, 1, -2, FSR__
179 test_ftoi floor.s, a2, f0, 0xbf800000, 0, -1, FSR__
180 test_ftoi floor.s, a2, f0, 0xbf400000, 0, -1, FSR_I
181 test_ftoi floor.s, a2, f0, 0xbf000000, 0, -1, FSR_I
182
183
184 test_ftoi floor.s, a2, f0, 0x3f000000, 0, 0, FSR_I
185 test_ftoi floor.s, a2, f0, 0x3f400000, 0, 0, FSR_I
186 test_ftoi floor.s, a2, f0, 0x3f800000, 0, 1, FSR__
187 test_ftoi floor.s, a2, f0, 0x3f800000, 1, 2, FSR__
188 test_ftoi floor.s, a2, f0, 0x3fc00000, 0, 1, FSR_I
189 test_ftoi floor.s, a2, f0, 0x3fa00000, 1, 2, FSR_I
190
191
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
197 test_ftoi floor.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
198
199
200 test_ftoi floor.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
201 test_ftoi floor.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
202test_end
203
204test ceil_s
205
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
210 test_ftoi ceil.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
211
212
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
218 test_ftoi ceil.s, a2, f0, 0xbfa00000, 1, -2, FSR_I
219 test_ftoi ceil.s, a2, f0, 0xbfc00000, 0, -1, FSR_I
220 test_ftoi ceil.s, a2, f0, 0xbf800000, 1, -2, FSR__
221 test_ftoi ceil.s, a2, f0, 0xbf800000, 0, -1, FSR__
222 test_ftoi ceil.s, a2, f0, 0xbf400000, 0, 0, FSR_I
223 test_ftoi ceil.s, a2, f0, 0xbf000000, 0, 0, FSR_I
224
225
226 test_ftoi ceil.s, a2, f0, 0x3f000000, 0, 1, FSR_I
227 test_ftoi ceil.s, a2, f0, 0x3f400000, 0, 1, FSR_I
228 test_ftoi ceil.s, a2, f0, 0x3f800000, 0, 1, FSR__
229 test_ftoi ceil.s, a2, f0, 0x3f800000, 1, 2, FSR__
230 test_ftoi ceil.s, a2, f0, 0x3fc00000, 0, 2, FSR_I
231 test_ftoi ceil.s, a2, f0, 0x3fa00000, 1, 3, FSR_I
232
233
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
239 test_ftoi ceil.s, a2, f0, 0x7f800000, 0, 0x7fffffff, FSR_V
240
241
242 test_ftoi ceil.s, a2, f0, 0x7f800001, 0, 0x7fffffff, FSR_V
243 test_ftoi ceil.s, a2, f0, 0x7fc00000, 0, 0x7fffffff, FSR_V
244test_end
245
246test utrunc_s
247
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
252 test_ftoi utrunc.s, a2, f0, 0xff800000, 0, 0x80000000, FSR_V
253
254
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
260 test_ftoi utrunc.s, a2, f0, 0xbfa00000, 1, -2, FSR_V
261 test_ftoi utrunc.s, a2, f0, 0xbfc00000, 0, -1, FSR_V
262 test_ftoi utrunc.s, a2, f0, 0xbf800000, 1, -2, FSR_V
263 test_ftoi utrunc.s, a2, f0, 0xbf800000, 0, -1, FSR_V
264 test_ftoi utrunc.s, a2, f0, 0xbf400000, 0, 0, FSR_I
265 test_ftoi utrunc.s, a2, f0, 0xbf000000, 0, 0, FSR_I
266
267
268 test_ftoi utrunc.s, a2, f0, 0x3f000000, 0, 0, FSR_I
269 test_ftoi utrunc.s, a2, f0, 0x3f400000, 0, 0, FSR_I
270 test_ftoi utrunc.s, a2, f0, 0x3f800000, 0, 1, FSR__
271 test_ftoi utrunc.s, a2, f0, 0x3f800000, 1, 2, FSR__
272 test_ftoi utrunc.s, a2, f0, 0x3fc00000, 0, 1, FSR_I
273 test_ftoi utrunc.s, a2, f0, 0x3fa00000, 1, 2, FSR_I
274
275
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
282 test_ftoi utrunc.s, a2, f0, 0x7f800000, 0, 0xffffffff, FSR_V
283
284
285 test_ftoi utrunc.s, a2, f0, 0x7f800001, 0, 0xffffffff, FSR_V
286 test_ftoi utrunc.s, a2, f0, 0x7fc00000, 0, 0xffffffff, FSR_V
287test_end
288
289test 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
299test_end
300
301test 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
311test_end
312
313#endif
314
315test_suite_end
316