git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / lightning / check / branch.tst
1 #if __WORDSIZE == 64
2 #  define I7f           0x7fffffffffffffff
3 #  define I80           0x8000000000000000
4 #  define I81           0x8000000000000001
5 #  define Iff           0xffffffffffffffff
6 #else
7 #  define I7f           0x7fffffff
8 #  define I80           0x80000000
9 #  define I81           0x80000001
10 #  define Iff           0xffffffff
11 #endif
12
13 .data   12
14 ok:
15 .c      "ok\n"
16 .       $($NaN  =  0.0 / 0.0)
17
18 #define BOP(N, Ls, Rs, Lu, Ru, R0, R1)          \
19         movi %R0 Ls                             \
20         movi %R1 Rs                             \
21         b##N##r N##r_##R0##_##R1 %R0 %R1        \
22         calli @abort                            \
23 N##r_##R0##_##R1:                               \
24         b##N##i N##i_##R0##_##R1 %R0 Rs         \
25         calli @abort                            \
26 N##i_##R0##_##R1:                               \
27         movi %R0 Lu                             \
28         movi %R1 Ru                             \
29         b##N##r_u N##r_u_##R0##_##R1 %R0 %R1    \
30         calli @abort                            \
31 N##r_u_##R0##_##R1:                             \
32         b##N##i_u N##i_u_##R0##_##R1 %R0 Ru     \
33         calli @abort                            \
34 N##i_u_##R0##_##R1:                             \
35         movi %R0 Ls                             \
36         movi %R1 Rs                             \
37         N##r %R0 %R0 %R1                        \
38         beqi _##N##r_##R0##_##R1 %R0 1          \
39         calli @abort                            \
40 _##N##r_##R0##_##R1:                            \
41         movi %R0 Ls                             \
42         N##i %R1 %R0 Rs                         \
43         beqi _##N##i_##R0##_##R1 %R1 1          \
44         calli @abort                            \
45 _##N##i_##R0##_##R1:                            \
46         movi %R0 Lu                             \
47         movi %R1 Ru                             \
48         N##r_u %R0 %R0 %R1                      \
49         beqi _##N##r_u_##R0##_##R1 %R0 1        \
50         calli @abort                            \
51 _##N##r_u_##R0##_##R1:                          \
52         movi %R0 Lu                             \
53         N##i_u %R1 %R0 Ru                       \
54         beqi _##N##i_u_##R0##_##R1 %R1 1        \
55         calli @abort                            \
56 _##N##i_u_##R0##_##R1:
57
58 #define EB(N, L, R, R0, R1)                     \
59         movi %R0 L                              \
60         movi %R1 R                              \
61         b##N##r N##r_##R0##_##R1 %R0 %R1        \
62         calli @abort                            \
63 N##r_##R0##_##R1:                               \
64         b##N##i N##i_##R0##_##R1 %R0 R          \
65         calli @abort                            \
66 N##i_##R0##_##R1:                               \
67         movi %R0 L                              \
68         movi %R1 R                              \
69         N##r %R0 %R0 %R1                        \
70         beqi _##N##r_##R0##_##R1 %R0 1          \
71         calli @abort                            \
72 _##N##r_##R0##_##R1:                            \
73         movi %R0 L                              \
74         N##i %R1 %R0 R                          \
75         beqi _##N##i_##R0##_##R1 %R1 1          \
76         calli @abort                            \
77 _##N##i_##R0##_##R1:
78
79 #define XEB(N, L, R, R0, R1)                    \
80         movi %R0 L                              \
81         movi %R1 R                              \
82         b##N##r N##r_##R0##_##R1 %R0 %R1        \
83         calli @abort                            \
84 N##r_##R0##_##R1:                               \
85         b##N##i N##i_##R0##_##R1 %R0 R          \
86         calli @abort                            \
87 N##i_##R0##_##R1:
88
89 #define XBOP(N, Ls, Rs, Lu, Ru, R0, R1)         \
90         movi %R0 Ls                             \
91         movi %R1 Rs                             \
92         b##N##r N##r_##R0##_##R1 %R0 %R1        \
93         calli @abort                            \
94 N##r_##R0##_##R1:                               \
95         movi %R0 Ls                             \
96         b##N##i N##i_##R0##_##R1 %R0 Rs         \
97         calli @abort                            \
98 N##i_##R0##_##R1:                               \
99         movi %R0 Lu                             \
100         movi %R1 Ru                             \
101         b##N##r_u N##r_u_##R0##_##R1 %R0 %R1    \
102         calli @abort                            \
103 N##r_u_##R0##_##R1:                             \
104         movi %R0 Lu                             \
105         b##N##i_u N##i_u_##R0##_##R1 %R0 Ru     \
106         calli @abort                            \
107 N##i_u_##R0##_##R1:
108
109 #define BOPI(N, Ls, Rs, Lu, Ru)                 \
110         BOP(N, Ls, Rs, Lu, Ru, v0, v1)          \
111         BOP(N, Ls, Rs, Lu, Ru, v0, v2)          \
112         BOP(N, Ls, Rs, Lu, Ru, v0, r0)          \
113         BOP(N, Ls, Rs, Lu, Ru, v0, r1)          \
114         BOP(N, Ls, Rs, Lu, Ru, v0, r2)          \
115         BOP(N, Ls, Rs, Lu, Ru, v1, v0)          \
116         BOP(N, Ls, Rs, Lu, Ru, v1, v2)          \
117         BOP(N, Ls, Rs, Lu, Ru, v1, r0)          \
118         BOP(N, Ls, Rs, Lu, Ru, v1, r1)          \
119         BOP(N, Ls, Rs, Lu, Ru, v1, r2)          \
120         BOP(N, Ls, Rs, Lu, Ru, v2, v0)          \
121         BOP(N, Ls, Rs, Lu, Ru, v2, v1)          \
122         BOP(N, Ls, Rs, Lu, Ru, v2, r0)          \
123         BOP(N, Ls, Rs, Lu, Ru, v2, r1)          \
124         BOP(N, Ls, Rs, Lu, Ru, v2, r2)          \
125         BOP(N, Ls, Rs, Lu, Ru, r0, v0)          \
126         BOP(N, Ls, Rs, Lu, Ru, r0, v1)          \
127         BOP(N, Ls, Rs, Lu, Ru, r0, v2)          \
128         BOP(N, Ls, Rs, Lu, Ru, r0, r1)          \
129         BOP(N, Ls, Rs, Lu, Ru, r0, r2)          \
130         BOP(N, Ls, Rs, Lu, Ru, r1, v0)          \
131         BOP(N, Ls, Rs, Lu, Ru, r1, v1)          \
132         BOP(N, Ls, Rs, Lu, Ru, r1, v2)          \
133         BOP(N, Ls, Rs, Lu, Ru, r1, r0)          \
134         BOP(N, Ls, Rs, Lu, Ru, r1, r2)          \
135         BOP(N, Ls, Rs, Lu, Ru, r2, v0)          \
136         BOP(N, Ls, Rs, Lu, Ru, r2, v1)          \
137         BOP(N, Ls, Rs, Lu, Ru, r2, v2)          \
138         BOP(N, Ls, Rs, Lu, Ru, r2, r0)          \
139         BOP(N, Ls, Rs, Lu, Ru, r2, r1)
140
141 #define EBI(N, L, R)                            \
142         EB(N, L, R, v0, v1)                     \
143         EB(N, L, R, v0, v2)                     \
144         EB(N, L, R, v0, r0)                     \
145         EB(N, L, R, v0, r1)                     \
146         EB(N, L, R, v0, r2)                     \
147         EB(N, L, R, v1, v0)                     \
148         EB(N, L, R, v1, v2)                     \
149         EB(N, L, R, v1, r0)                     \
150         EB(N, L, R, v1, r1)                     \
151         EB(N, L, R, v1, r2)                     \
152         EB(N, L, R, v2, v0)                     \
153         EB(N, L, R, v2, v1)                     \
154         EB(N, L, R, v2, r0)                     \
155         EB(N, L, R, v2, r1)                     \
156         EB(N, L, R, v2, r2)                     \
157         EB(N, L, R, r0, v0)                     \
158         EB(N, L, R, r0, v1)                     \
159         EB(N, L, R, r0, v2)                     \
160         EB(N, L, R, r0, r1)                     \
161         EB(N, L, R, r0, r2)                     \
162         EB(N, L, R, r1, v0)                     \
163         EB(N, L, R, r1, v1)                     \
164         EB(N, L, R, r1, v2)                     \
165         EB(N, L, R, r1, r0)                     \
166         EB(N, L, R, r1, r2)                     \
167         EB(N, L, R, r2, v0)                     \
168         EB(N, L, R, r2, v1)                     \
169         EB(N, L, R, r2, v2)                     \
170         EB(N, L, R, r2, r0)                     \
171         EB(N, L, R, r2, r1)
172
173
174 #define XEBI(N, L, R)                           \
175         XEB(N, L, R, v0, v1)                    \
176         XEB(N, L, R, v0, v2)                    \
177         XEB(N, L, R, v0, r0)                    \
178         XEB(N, L, R, v0, r1)                    \
179         XEB(N, L, R, v0, r2)                    \
180         XEB(N, L, R, v1, v0)                    \
181         XEB(N, L, R, v1, v2)                    \
182         XEB(N, L, R, v1, r0)                    \
183         XEB(N, L, R, v1, r1)                    \
184         XEB(N, L, R, v1, r2)                    \
185         XEB(N, L, R, v2, v0)                    \
186         XEB(N, L, R, v2, v1)                    \
187         XEB(N, L, R, v2, r0)                    \
188         XEB(N, L, R, v2, r1)                    \
189         XEB(N, L, R, v2, r2)                    \
190         XEB(N, L, R, r0, v0)                    \
191         XEB(N, L, R, r0, v1)                    \
192         XEB(N, L, R, r0, v2)                    \
193         XEB(N, L, R, r0, r1)                    \
194         XEB(N, L, R, r0, r2)                    \
195         XEB(N, L, R, r1, v0)                    \
196         XEB(N, L, R, r1, v1)                    \
197         XEB(N, L, R, r1, v2)                    \
198         XEB(N, L, R, r1, r0)                    \
199         XEB(N, L, R, r1, r2)                    \
200         XEB(N, L, R, r2, v0)                    \
201         XEB(N, L, R, r2, v1)                    \
202         XEB(N, L, R, r2, v2)                    \
203         XEB(N, L, R, r2, r0)                    \
204         XEB(N, L, R, r2, r1)
205
206 #define XBOPI(N, Ls, Rs, Lu, Ru)                \
207         XBOP(N, Ls, Rs, Lu, Ru, v0, v1)         \
208         XBOP(N, Ls, Rs, Lu, Ru, v0, v2)         \
209         XBOP(N, Ls, Rs, Lu, Ru, v0, r0)         \
210         XBOP(N, Ls, Rs, Lu, Ru, v0, r1)         \
211         XBOP(N, Ls, Rs, Lu, Ru, v0, r2)         \
212         XBOP(N, Ls, Rs, Lu, Ru, v1, v0)         \
213         XBOP(N, Ls, Rs, Lu, Ru, v1, v2)         \
214         XBOP(N, Ls, Rs, Lu, Ru, v1, r0)         \
215         XBOP(N, Ls, Rs, Lu, Ru, v1, r1)         \
216         XBOP(N, Ls, Rs, Lu, Ru, v1, r2)         \
217         XBOP(N, Ls, Rs, Lu, Ru, v2, v0)         \
218         XBOP(N, Ls, Rs, Lu, Ru, v2, v1)         \
219         XBOP(N, Ls, Rs, Lu, Ru, v2, r0)         \
220         XBOP(N, Ls, Rs, Lu, Ru, v2, r1)         \
221         XBOP(N, Ls, Rs, Lu, Ru, v2, r2)         \
222         XBOP(N, Ls, Rs, Lu, Ru, r0, v0)         \
223         XBOP(N, Ls, Rs, Lu, Ru, r0, v1)         \
224         XBOP(N, Ls, Rs, Lu, Ru, r0, v2)         \
225         XBOP(N, Ls, Rs, Lu, Ru, r0, r1)         \
226         XBOP(N, Ls, Rs, Lu, Ru, r0, r2)         \
227         XBOP(N, Ls, Rs, Lu, Ru, r1, v0)         \
228         XBOP(N, Ls, Rs, Lu, Ru, r1, v1)         \
229         XBOP(N, Ls, Rs, Lu, Ru, r1, v2)         \
230         XBOP(N, Ls, Rs, Lu, Ru, r1, r0)         \
231         XBOP(N, Ls, Rs, Lu, Ru, r1, r2)         \
232         XBOP(N, Ls, Rs, Lu, Ru, r2, v0)         \
233         XBOP(N, Ls, Rs, Lu, Ru, r2, v1)         \
234         XBOP(N, Ls, Rs, Lu, Ru, r2, v2)         \
235         XBOP(N, Ls, Rs, Lu, Ru, r2, r0)         \
236         XBOP(N, Ls, Rs, Lu, Ru, r2, r1)
237
238 #define TBOPF(N, T, L, R)                       \
239         movi_##T %f0 L                          \
240         movi_##T %f1 R                          \
241         b##N##r##_##T N##r_##T %f0 %f1          \
242         calli @abort                            \
243 N##r_##T:                                       \
244         b##N##i##_##T N##i_##T %f0 R            \
245         calli @abort                            \
246 N##i_##T:                                       \
247         movi_##T %f1 $NaN                       \
248         b##N##r##_##T N##r_##T##_##u %f0 %f1    \
249         jmpi N##r_##T##_##u0                    \
250 N##r_##T##_##u:                                 \
251         calli @abort                            \
252 N##r##_##T##_##u0:                              \
253         b##N##i##_##T N##i_##T##_##u %f0 $NaN   \
254         jmpi N##i_##T##_##u0                    \
255 N##i##_##T##_##u:                               \
256         calli @abort                            \
257 N##i##_##T##_##u0:
258 #define BOPF(N, L, R)                           \
259         TBOPF(N, f, L, R)                       \
260         TBOPF(N, d, L, R)
261
262 #define TUBOPF(N, T, L, R)                      \
263         movi_##T %f0 L                          \
264         movi_##T %f1 R                          \
265         b##N##r##_##T N##r_##T %f0 %f1          \
266         calli @abort                            \
267 N##r_##T:                                       \
268         b##N##i##_##T N##i_##T %f0 R            \
269         calli @abort                            \
270 N##i_##T:                                       \
271         movi_##T %f1 $NaN                       \
272         b##N##r##_##T N##r_##T##_##u %f0 %f1    \
273         calli @abort                            \
274 N##r_##T##_##u:                                 \
275         b##N##i##_##T N##i_##T##_##u %f0 $NaN   \
276         calli @abort                            \
277 N##i##_##T##_##u:
278
279 #define UBOPF(N, L, R)                          \
280         TUBOPF(N, f, L, R)                      \
281         TUBOPF(N, d, L, R)
282
283 .code
284         prolog
285
286         movi %r0 -1
287         movi %r1 1
288         bltr xltr_r0_r1 %r0 %r1
289         calli @abort
290 xltr_r0_r1:
291         blti xlti_r0_r1 %r0 1
292         calli @abort
293 xlti_r0_r1:
294         movi %r0 1
295         movi %r1 -1
296         bltr_u xltru_r0_r1 %r0 %r1
297         calli @abort
298 xltru_r0_r1:
299         blti_u xltiu_r0_r1 %r0 -1
300         calli @abort
301 xltiu_r0_r1:
302         movi %r0 -1
303         movi %r1 -1
304         bler xler_r0_r1 %r0 %r1
305         calli @abort
306 xler_r0_r1:
307         blti xlei_r0_r1 %r0 1
308         calli @abort
309 xlei_r0_r1:
310         movi %r0 1
311         movi %r1 -1
312         bltr_u xlteu_r0_r1 %r0 %r1
313         calli @abort
314 xlteu_r0_r1:
315         blei_u xleiu_r0_r1 %r0 -1
316         calli @abort
317 xleiu_r0_r1:
318         movi %r0 32
319         movi %r1 32
320         beqr xeqr_r0_r1 %r0 %r1
321         calli @abort
322 xeqr_r0_r1:
323         beqi xeqi_r0_r1 %r0 32
324         calli @abort
325 xeqi_r0_r1:
326         movi %r0 -2
327         movi %r1 -2
328         bger xger_r0_r1 %r0 %r1
329         calli @abort
330 xger_r0_r1:
331         bgei xgei_r0_r1 %r0 -2
332         calli @abort
333 xgei_r0_r1:
334         movi %r0 2
335         movi %r1 2
336         bger_u xgeru_r0_r1 %r0 %r1
337         calli @abort
338 xgeru_r0_r1:
339         bgei_u xgeiu_r0_r1 %r0 2
340         calli @abort
341 xgeiu_r0_r1:
342         movi %r0 2
343         movi %r1 -2
344         bgtr xgtr_r0_r1 %r0 %r1
345         calli @abort
346 xgtr_r0_r1:
347         bgti xgti_r0_r1 %r0 -2
348         calli @abort
349 xgti_r0_r1:
350         movi %r0 -2
351         movi %r1 2
352         bgtr_u xgtru_r0_r1 %r0 %r1
353         calli @abort
354 xgtru_r0_r1:
355         bgti_u xgtiu_r0_r1 %r0 2
356         calli @abort
357 xgtiu_r0_r1:
358         movi %r0 -3
359         movi %r1 3
360         bner xner_r0_r1 %r0 %r1
361         calli @abort
362 xner_r0_r1:
363         bnei xnei_r0_r1 %r0 3
364         calli @abort
365 xnei_r0_r1:
366         movi %r0 1
367         movi %r1 3
368         bmsr xmsr_r0_r1 %r0 %r1
369         calli @abort
370 xmsr_r0_r1:
371         bmsi xmsi_r0_r1 %r0 3
372         calli @abort
373 xmsi_r0_r1:
374         movi %r0 1
375         movi %r1 2
376         bmcr xmcr_r0_r1 %r0 %r1
377         calli @abort
378 xmcr_r0_r1:
379         bmci xmci_r0_r1 %r0 2
380         calli @abort
381 xmci_r0_r1:
382         movi %r0 I7f
383         movi %r1 1
384         boaddr xoaddr_r0_r1 %r0 %r1
385         calli @abort
386 xoaddr_r0_r1:
387         movi %r0 Iff
388         movi %r1 1
389         boaddr_u xoaddr_u_r0_r1 %r0 %r1
390         calli @abort
391 xoaddr_u_r0_r1:
392         movi %r0 I7f
393         boaddi xoaddi_r0_r1 %r0 1
394         calli @abort
395 xoaddi_r0_r1:
396         movi %r0 Iff
397         boaddi_u xoaddi_u_r0_r1 %r0 1
398         calli @abort
399 xoaddi_u_r0_r1:
400         movi %r0 I80
401         movi %r1 1
402         bxaddr xxaddr_r0_r1 %r0 %r1
403         calli @abort
404 xxaddr_r0_r1:
405         movi %r0 I80
406         bxaddi xxaddi_r0_r1 %r0 1
407         calli @abort
408 xxaddi_r0_r1:
409         movi %r0 I7f
410         movi %r1 1
411         bxaddr_u xxaddr_u_r0_r1 %r0 %r1
412         calli @abort
413 xxaddr_u_r0_r1:
414         movi %r0 I7f
415         bxaddi_u xxaddi_u_r0_r1 %r0 1
416         calli @abort
417 xxaddi_u_r0_r1:
418         movi %r0 I80
419         movi %r1 1
420         bosubr xosubr_r0_r1 %r0 %r1
421         calli @abort
422 xosubr_r0_r1:
423         movi %r0 0
424         movi %r1 1
425         bosubr_u xosubr_u_r0_r1 %r0 %r1
426         calli @abort
427 xosubr_u_r0_r1:
428         movi %r0 I80
429         bosubi xosubi_r0_r1 %r0 1
430         calli @abort
431 xosubi_r0_r1:
432         movi %r0 0
433         bosubi_u xosubi_u_r0_r1 %r0 1
434         calli @abort
435 xosubi_u_r0_r1:
436         movi %r0 I81
437         movi %r1 1
438         bxsubr xxsubr_r0_r1 %r0 %r1
439         calli @abort
440 xxsubr_r0_r1:
441         movi %r0 I81
442         bxsubi xxsubi_r0_r1 %r0 1
443         calli @abort
444 xxsubi_r0_r1:
445         movi %r0 I80
446         movi %r1 1
447         bxsubr_u xxsubr_u_r0_r1 %r0 %r1
448         calli @abort
449 xxsubr_u_r0_r1:
450         movi %r0 I80
451         bxsubi_u xxsubi_u_r0_r1 %r0 1
452         calli @abort
453 xxsubi_u_r0_r1:
454         movi_f %f0 1
455         movi_f %f1 2
456         bltr_f xltr_f_f0_f1 %f0 %f1
457         calli @abort
458 xltr_f_f0_f1:
459         blti_f xlti_f_f0_f1 %f0 2
460         calli @abort
461 xlti_f_f0_f1:
462         movi_f %f0 -1
463         movi_f %f1 -1
464         bler_f xler_f_f0_f1 %f0 %f1
465         calli @abort
466 xler_f_f0_f1:
467         blei_f xlei_f_f0_f1 %f0 -1
468         calli @abort
469 xlei_f_f0_f1:
470         movi_f %f0 -2
471         movi_f %f1 -2
472         beqr_f xeqr_f_f0_f1 %f0 %f1
473         calli @abort
474 xeqr_f_f0_f1:
475         beqi_f xeqi_f_f0_f1 %f0 -2
476         calli @abort
477 xeqi_f_f0_f1:
478         movi_f %f0 -3
479         movi_f %f1 -3
480         bger_f xger_f_f0_f1 %f0 %f1
481         calli @abort
482 xger_f_f0_f1:
483         bgei_f xgei_f_f0_f1 %f0 -3
484         calli @abort
485 xgei_f_f0_f1:
486         movi_f %f0 2
487         movi_f %f1 1
488         bgtr_f xgtr_f_f0_f1 %f0 %f1
489         calli @abort
490 xgtr_f_f0_f1:
491         bgti_f xgti_f_f0_f1 %f0 1
492         calli @abort
493 xgti_f_f0_f1:
494         movi_f %f0 0
495         movi_f %f1 2
496         bner_f xner_f_f0_f1 %f0 %f1
497         calli @abort
498 xner_f_f0_f1:
499         bnei_f xnei_f_f0_f1 %f0 2
500         calli @abort
501 xnei_f_f0_f1:
502
503         BOPI(lt, -1, 1, 1, -1)
504         BOPI(le, -1, -1, 1, 1)
505         EBI(eq, 32, 32)
506         BOPI(ge, -2, -2, 2, 2)
507         BOPI(gt, 2, -2, -2, 2)
508         EBI(ne, 3, -3)
509         XEBI(ms, 1, 3)
510         XEBI(mc, 1, 2)
511         XBOPI(oadd, I7f, 1, Iff, 1)
512         XBOPI(xadd, I80, 1, I7f, 1)
513         XBOPI(osub, I80, 1, 0, 1)
514         XBOPI(xsub, I81, 1, I80, 1)
515         BOPF(lt, 1, 2)
516         BOPF(le, 2, 2)
517         BOPF(eq, 3, 3)
518         BOPF(ge, 3, 3)
519         BOPF(gt, 4, 3)
520         UBOPF(ne, 4, 3)
521         UBOPF(unlt, 1, 2)
522         UBOPF(unle, 2, 2)
523         UBOPF(uneq, 3, 3)
524         UBOPF(unge, 3, 3)
525         UBOPF(ungt, 4, 3)
526         BOPF(ltgt, 4, 3)
527         movi_f %f0 5
528         movi_f %f1 5
529         bordr_f ordr_f %f0 %f1
530         calli @abort
531 ordr_f:
532         bordi_f ordi_f %f0 1
533         calli @abort
534 ordi_f:
535         bordi_f ordi_f_u %f0 $NaN
536         jmpi ordi_f_u0
537 ordi_f_u:
538         calli @abort
539 ordi_f_u0:
540         movi_f %f0 5
541         movi_f %f1 5
542         bunordr_f unordr_f %f0 %f1
543         jmpi unordr_f_0
544 unordr_f:
545         calli @abort
546 unordr_f_0:
547         bunordi_f unordi_f %f0 1
548         jmpi unordi_f_0
549 unordi_f:
550         calli @abort
551 unordi_f_0:
552         bunordi_f unordi_f_1 %f0 $NaN
553         calli @abort
554 unordi_f_1:
555
556         // just to know did not crash or abort
557         prepare
558                 pushargi ok
559                 ellipsis
560         finishi @printf
561
562         ret
563         epilog