Merge pull request #377 from pcercuei/libretro
[pcsx_rearmed.git] / deps / lightning / check / cvt.tst
1 .data   12
2 ok:
3 .c      "ok\n"
4
5 #if __WORDSIZE == 32
6 #  define w7f           0x7fffffff
7 #  define w80           0x80000000
8 #  define w81           0x80000001
9 #  define wff           0xffffffff
10 #  define LEXTII2(N, R0, R1)
11 #  define LEXTIC2(N, R0)
12 #else
13 #  define w7f           0x7fffffffffffffff
14 #  define w80           0x8000000000000000
15 #  define w81           0x8000000000000001
16 #  define wff           0xffffffffffffffff
17 #  define i7f           wff
18 #  define ui7f          0xffffffff
19 #  define i80           0
20 #  define ui80          0
21 #  define i81           1
22 #  define ui81          1
23 #  define iff           wff
24 #  define uiff          0xffffffff
25 #  define LEXTII2(N, R0, R1)                                    \
26         EXTII2(N, i, R0, R1)                                    \
27         EXTII2(N, ui, R0, R1)
28 #  define LEXTIC2(N, R0)                                        \
29         EXTIC2(N, i, R0)                                        \
30         EXTIC2(N, ui, R0)
31 #endif
32 #define c7f             wff
33 #define uc7f            0xff
34 #define s7f             wff
35 #define us7f            0xffff
36 #define c80             0
37 #define uc80            0
38 #define s80             0
39 #define us80            0
40 #define c81             1
41 #define uc81            1
42 #define s81             1
43 #define us81            1
44 #define cff             wff
45 #define ucff            0xff
46 #define sff             wff
47 #define usff            0xffff
48
49 #define EXTII2(N, T, R0, R1)                                    \
50         movi %R0 w##N                                           \
51         extr_##T %R1 %R0                                        \
52         beqi T##_##R0##_##R1##_##N %R1 T##N                     \
53         calli @abort                                            \
54 T##_##R0##_##R1##_##N:
55 #define EXTII1(N, R0, R1)                                       \
56         EXTII2(N, c, R0, R1)                                    \
57         EXTII2(N, uc, R0, R1)                                   \
58         EXTII2(N, s, R0, R1)                                    \
59         EXTII2(N, us, R0, R1)                                   \
60         LEXTII2(N, R0, R1)
61 #define EXTII0(R0, R1)                                          \
62         EXTII1(7f, R0, R1)                                      \
63         EXTII1(80, R0, R1)                                      \
64         EXTII1(81, R0, R1)                                      \
65         EXTII1(ff, R0, R1)
66
67 #define EXTIC2(N, T, R0)                                        \
68         movi %R0 w##N                                           \
69         extr_##T %R0 %R0                                        \
70         beqi T##_##R0##_##N %R0 T##N                            \
71         calli @abort                                            \
72 T##_##R0##_##N:
73 #define EXTIC1(N, R0)                                           \
74         EXTIC2(N, c, R0)                                        \
75         EXTIC2(N, uc, R0)                                       \
76         EXTIC2(N, s, R0)                                        \
77         EXTIC2(N, us, R0)                                       \
78         LEXTIC2(N, R0)
79 #define EXTIC0(R0)                                              \
80         EXTIC1(7f, R0)                                          \
81         EXTIC1(80, R0)                                          \
82         EXTIC1(81, R0)                                          \
83         EXTIC1(ff, R0)
84
85 #define EXTII(V0, V1, V2, R0, R1, R2)                           \
86         EXTII0(V0, V1)                                          \
87         EXTII0(V0, V2)                                          \
88         EXTII0(V0, R0)                                          \
89         EXTII0(V0, R1)                                          \
90         EXTII0(V0, R2)                                          \
91         EXTII0(V1, V0)                                          \
92         EXTII0(V1, V2)                                          \
93         EXTII0(V1, R0)                                          \
94         EXTII0(V1, R1)                                          \
95         EXTII0(V1, R2)                                          \
96         EXTII0(V2, V0)                                          \
97         EXTII0(V2, V1)                                          \
98         EXTII0(V2, R0)                                          \
99         EXTII0(V2, R1)                                          \
100         EXTII0(V2, R2)                                          \
101         EXTII0(R0, V0)                                          \
102         EXTII0(R0, V1)                                          \
103         EXTII0(R0, V2)                                          \
104         EXTII0(R0, R1)                                          \
105         EXTII0(R0, R2)                                          \
106         EXTII0(R1, V0)                                          \
107         EXTII0(R1, V1)                                          \
108         EXTII0(R1, V2)                                          \
109         EXTII0(R1, R0)                                          \
110         EXTII0(R1, R2)                                          \
111         EXTII0(R2, V0)                                          \
112         EXTII0(R2, V1)                                          \
113         EXTII0(R2, V2)                                          \
114         EXTII0(R2, R0)                                          \
115         EXTII0(R2, R1)                                          \
116         EXTIC0(V0)                                              \
117         EXTIC0(V1)                                              \
118         EXTIC0(V2)                                              \
119         EXTIC0(R0)                                              \
120         EXTIC0(R1)                                              \
121         EXTIC0(R2)
122
123 #define EXIF1(N, V, R0, R1)                                     \
124         movi %R0 V                                              \
125         extr_f %R1 %R0                                          \
126         beqi_f wf##_##R0##_##R1##_##N %R1 V                     \
127 wf##_##R0##_##R1##_##N:
128 #define EXIF0(R0, R1)                                           \
129         EXIF1(0, -1, R0, R1)                                    \
130         EXIF1(1, 64, R0, R1)
131 #define EXIF(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)    \
132         EXIF0(V0, F0)                                           \
133         EXIF0(V1, F1)                                           \
134         EXIF0(V2, F2)                                           \
135         EXIF0(R0, F3)                                           \
136         EXIF0(R1, F4)                                           \
137         EXIF0(R2, F5)
138 #define EXID1(N, V, R0, R1)                                     \
139         movi %R0 V                                              \
140         extr_d %R1 %R0                                          \
141         beqi_d wd##_##R0##_##R1##_##N %R1 V                     \
142 wd##_##R0##_##R1##_##N:
143 #define EXID0(R0, R1)                                           \
144         EXID1(0, -1, R0, R1)                                    \
145         EXID1(1, 64, R0, R1)
146 #define EXID(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)    \
147         EXID0(V0, F0)                                           \
148         EXID0(V1, F1)                                           \
149         EXID0(V2, F2)                                           \
150         EXID0(R0, F3)                                           \
151         EXID0(R1, F4)                                           \
152         EXID0(R2, F5)
153
154 #define EXFI1(N, V, R0, R1)                                     \
155         movi_f %R1 V                                            \
156         truncr_f %R0 %R1                                        \
157         beqi fi##_##R0##_##R1##_##N %R0 V                       \
158         calli @abort                                            \
159 fi##_##R0##_##R1##_##N:
160 #define EXFI0(R0, R1)                                           \
161         EXFI1(0,   42, R0, R1)                                  \
162         EXFI1(1, -128, R0, R1)
163 #define EXFI(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)    \
164         EXFI0(V0, F5)                                           \
165         EXFI0(V1, F4)                                           \
166         EXFI0(V2, F3)                                           \
167         EXFI0(R0, F2)                                           \
168         EXFI0(R1, F1)                                           \
169         EXFI0(R2, F0)
170 #define EXDI1(N, V, R0, R1)                                     \
171         movi_d %R1 V                                            \
172         truncr_d %R0 %R1                                        \
173         beqi di##_##R0##_##R1##_##N %R0 V                       \
174         calli @abort                                            \
175 di##_##R0##_##R1##_##N:
176 #define EXDI0(R0, R1)                                           \
177         EXDI1(0,   42, R0, R1)                                  \
178         EXDI1(1, -128, R0, R1)
179 #define EXDI(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)    \
180         EXDI0(V0, F5)                                           \
181         EXDI0(V1, F4)                                           \
182         EXDI0(V2, F3)                                           \
183         EXDI0(R0, F2)                                           \
184         EXDI0(R1, F1)                                           \
185         EXDI0(R2, F0)
186
187 #define LEXFI1(N, V, R0, R1)                                    \
188         movi_f %R1 V                                            \
189         truncr_f_i %R0 %R1                                      \
190         andi %R0 %R0 0xffffffff                                 \
191         beqi lfi##_##R0##_##R1##_##N %R0 $(V & 0xffffffff)      \
192         calli @abort                                            \
193 lfi##_##R0##_##R1##_##N:
194 #define LEXFI0(R0, R1)                                          \
195         LEXFI1(0,   42, R0, R1)                                 \
196         LEXFI1(1, -128, R0, R1)
197 #define LEXFI(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)   \
198         LEXFI0(V0, F5)                                          \
199         LEXFI0(V1, F4)                                          \
200         LEXFI0(V2, F3)                                          \
201         LEXFI0(R0, F2)                                          \
202         LEXFI0(R1, F1)                                          \
203         LEXFI0(R2, F0)
204 #define LEXDI1(N, V, R0, R1)                                    \
205         movi_d %R1 V                                            \
206         truncr_d_i %R0 %R1                                      \
207         andi %R0 %R0 0xffffffff                                 \
208         beqi ldi##_##R0##_##R1##_##N %R0 $(V & 0xffffffff)      \
209         calli @abort                                            \
210 ldi##_##R0##_##R1##_##N:
211 #define LEXDI0(R0, R1)                                          \
212         LEXDI1(0,   42, R0, R1)                                 \
213         LEXDI1(1, -128, R0, R1)
214 #define LEXDI(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)   \
215         LEXDI0(V0, F5)                                          \
216         LEXDI0(V1, F4)                                          \
217         LEXDI0(V2, F3)                                          \
218         LEXDI0(R0, F2)                                          \
219         LEXDI0(R1, F1)                                          \
220         LEXDI0(R2, F0)
221
222 #define EXTFD2(V, R0, R1)                                       \
223         movi_f %R0 V                                            \
224         extr_f_d %R1 %R0                                        \
225         beqi_d fd##_##R0##_##R1 %R1 V                           \
226         calli @abort                                            \
227 fd##_##R0##_##R1:
228 #define EXTFD1(R0, R1)                                          \
229         EXTFD2(1.25, R0, R1)
230 #define EXTFDC2(V, R0)                                          \
231         movi_f %R0 V                                            \
232         extr_f_d %R0 %R0                                        \
233         beqi_d fdc##_##R0 %R0 V                                 \
234         calli @abort                                            \
235 fdc##_##R0:
236 #define EXTFDC1(R0)                                             \
237         EXTFDC2(-0.75, R0)
238 #define EXTFD(R0, R1, R2, R3, R4, R5)                           \
239         EXTFD1(R0, R1)                                          \
240         EXTFD1(R0, R2)                                          \
241         EXTFD1(R0, R3)                                          \
242         EXTFD1(R0, R4)                                          \
243         EXTFD1(R0, R5)                                          \
244         EXTFDC1(R0)                                             \
245         EXTFDC1(R1)                                             \
246         EXTFDC1(R2)                                             \
247         EXTFDC1(R3)                                             \
248         EXTFDC1(R4)                                             \
249         EXTFDC1(R5)
250
251 #define EXTDF2(V, R0, R1)                                       \
252         movi_d %R0 V                                            \
253         extr_d_f %R1 %R0                                        \
254         beqi_f df##_##R0##_##R1 %R1 V                           \
255         calli @abort                                            \
256 df##_##R0##_##R1:
257 #define EXTDF1(R0, R1)                                          \
258         EXTDF2(1.25, R0, R1)
259 #define EXTDFC2(V, R0)                                          \
260         movi_d %R0 V                                            \
261         extr_d_f %R0 %R0                                        \
262         beqi_f dfc##_##R0 %R0 V                                 \
263         calli @abort                                            \
264 dfc##_##R0:
265 #define EXTDFC1(R0)                                             \
266         EXTDFC2(-0.75, R0)
267 #define EXTDF(R0, R1, R2, R3, R4, R5)                           \
268         EXTDF1(R0, R1)                                          \
269         EXTDF1(R0, R2)                                          \
270         EXTDF1(R0, R3)                                          \
271         EXTDF1(R0, R4)                                          \
272         EXTDF1(R0, R5)                                          \
273         EXTDFC1(R0)                                             \
274         EXTDFC1(R1)                                             \
275         EXTDFC1(R2)                                             \
276         EXTDFC1(R3)                                             \
277         EXTDFC1(R4)                                             \
278         EXTDFC1(R5)
279
280 .code
281         prolog
282
283         /* simple sequence for easier disassembly reading and encoding check */
284         movi %r0 w7f
285         extr_c %r1 %r0
286         beqi xc %r1 c7f
287         calli @abort
288 xc:
289         movi %r0 w7f
290         extr_uc %r1 %r0
291         beqi xuc %r1 uc7f
292         calli @abort
293 xuc:
294         movi %r0 w7f
295         extr_s %r1 %r0
296         beqi xs %r1 s7f
297         calli @abort
298 xs:
299         movi %r0 w7f
300         extr_us %r1 %r0
301         beqi xus %r1 us7f
302         calli @abort
303 xus:
304 #if __WORDSIZE == 64
305         movi %r0 w7f
306         extr_i %r1 %r0
307         beqi xi %r1 i7f
308         calli @abort
309 xi:
310         movi %r0 w7f
311         extr_ui %r1 %r0
312         beqi xui %r1 ui7f
313         calli @abort
314 xui:
315 #endif
316         movi %r0 -2
317         extr_f %f0 %r0
318         beqi_f xif %f0 -2
319         calli @abort
320 xif:
321         movi %r0 32
322         extr_d %f0 %r0
323         beqi_d xid %f0 32
324         calli @abort
325 xid:
326         movi_f %f0 -128
327         truncr_f %r0 %f0
328         beqi xfi %r0 -128
329         calli @abort
330 xfi:
331         movi_d %f0 -128
332         truncr_d %r0 %f0
333         beqi xdi %r0 -128
334         calli @abort
335 xdi:
336 #if __WORDSIZE == 64
337         movi_f %f0 -128
338         truncr_f_i %r0 %f0
339         andi %r0 %r0 0xffffffff
340         beqi yfi %r0 $(-128 & 0xffffffff)
341         calli @abort
342 yfi:
343         movi_d %f0 -128
344         truncr_d_i %r0 %f0
345         andi %r0 %r0 0xffffffff
346         beqi ydi %r0 $(-128 & 0xffffffff)
347         calli @abort
348 ydi:
349 #endif
350         movi_f %f0 0.5
351         extr_f_d %f1 %f0
352         beqi_d xfd %f1 0.5
353         calli @abort
354 xfd:
355         movi_d %f0 0.5
356         extr_d_f %f1 %f0
357         beqi_f xdf %f1 0.5
358         calli @abort
359 xdf:
360
361         EXTII(v0, v1, v2, r0, r1, r2)
362         EXIF(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
363         EXID(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
364         EXFI(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
365 #if __WORDSIZE == 64
366         LEXFI(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
367         LEXDI(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
368 #endif
369         EXDI(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
370         EXTFD(f0, f1, f2, f3, f4, f5)
371         EXTDF(f0, f1, f2, f3, f4, f5)
372
373         // just to know did not abort
374         prepare
375                 pushargi ok
376                 ellipsis
377         finishi @printf
378
379         ret
380         epilog