libretro: adjust psxclock description
[pcsx_rearmed.git] / deps / lightning / check / carry.tst
CommitLineData
4a71579b
PC
1
2#define ix0 0
3#define lx0 0
4#define ix1 1
5#define lx1 1
6#define ix2 2
7#define lx2 2
8#define ix4 4
9#define lx4 4
10#if __WORDSIZE == 32
11# define ix7fe 0x7ffffffe
12# define ix7f 0x7fffffff
13# define ix80 0x80000000
14# define iff 0xffffffff
15# define ife 0xfffffffe
16# define ifd 0xfffffffd
17# define ifc 0xfffffffc
18#else
19# define ix7fe 0x7ffffffffffffffe
20# define ix7f 0x7fffffffffffffff
21# define ix80 0x8000000000000000
22# define iff 0xffffffffffffffff
23# define ife 0xfffffffffffffffe
24# define ifd 0xfffffffffffffffd
25# define ifc 0xfffffffffffffffc
26#endif
27
28/* check jumps are taken and result value is correct */
29#define bopr_t(l, u, op, r0, r1, il, ir, iv) \
30 movi %r0 il \
31 movi %r1 ir \
32 b##op##r##u op##u##r##l##r0##r1 %r0 %r1 \
33 /* validate did jump */ \
34 movi %r0 0x5a5a5a5a \
35op##u##r##l##r0##r1: \
36 beqi op##u##r##l##ok##r0##r1 %r0 iv \
37 calli @abort \
38op##u##r##l##ok##r0##r1:
39#define bopi_t(l, u, op, r0, il, ir, iv) \
40 movi %r0 il \
41 b##op##i##u op##u##i##l##r0##r1 %r0 ir \
42 /* validate did jump */ \
43 movi %r0 0x5a5a5a5a \
44op##u##i##l##r0##r1: \
45 beqi op##u##i##l##ok##r0##r1 %r0 iv \
46 calli @abort \
47op##u##i##l##ok##r0##r1:
48#define bopr_f(l, u, op, r0, r1, il, ir, iv) \
49 movi %r0 il \
50 movi %r1 ir \
51 b##op##r##u op##u##r##l##r0##r1 %r0 %r1 \
52 beqi op##u##r##l##ok##r0##r1 %r0 iv \
53op##u##r##l##r0##r1: \
54 calli @abort \
55op##u##r##l##ok##r0##r1:
56#define bopi_f(l, u, op, r0, il, ir, iv) \
57 movi %r0 il \
58 b##op##i##u op##u##i##l##r0##r1 %r0 ir \
59 beqi op##u##i##l##ok##r0##r1 %r0 iv \
60op##u##i##l##r0##r1: \
61 calli @abort \
62op##u##i##l##ok##r0##r1:
63#define ccop(cc, l, u, op, r0, r1, il, ir, iv) \
64 bopr##cc(l, u, op, r0, r1, i##il, i##ir, i##iv) \
65 bopi##cc(l, u, op, r0, i##il, i##ir, i##iv)
66#define tadd(l, u, r0, r1, il, ir, iv) \
67 ccop(_t, l, u, oadd, r0, r1, il, ir, iv) \
68 ccop(_f, l, u, xadd, r0, r1, il, ir, iv)
69#define fadd(l, u, r0, r1, il, ir, iv) \
70 ccop(_f, l, u, oadd, r0, r1, il, ir, iv) \
71 ccop(_t, l, u, xadd, r0, r1, il, ir, iv)
72#define tsub(l, u, r0, r1, il, ir, iv) \
73 ccop(_t, l, u, osub, r0, r1, il, ir, iv) \
74 ccop(_f, l, u, xsub, r0, r1, il, ir, iv)
75#define fsub(l, u, r0, r1, il, ir, iv) \
76 ccop(_f, l, u, osub, r0, r1, il, ir, iv) \
77 ccop(_t, l, u, xsub, r0, r1, il, ir, iv)
78
79#define xopr6(l,op,r0,r1,r2,r3,r4,r5,llo,lhi,rlo,rhi,vlo,vhi) \
80 movi %r1 llo \
81 movi %r2 lhi \
82 movi %r4 rlo \
83 movi %r5 rhi \
84 op##cr %r0 %r1 %r4 \
85 op##xr %r3 %r2 %r5 \
86 beqi op##l##L##r0##r1##r2##r3##r4##r5 %r0 vlo \
87 calli @abort \
88op##l##L##r0##r1##r2##r3##r4##r5: \
89 beqi op##l##H##r0##r1##r2##r3##r4##r5 %r3 vhi \
90 calli @abort \
91op##l##H##r0##r1##r2##r3##r4##r5:
92#define xopr4_(l,op,r0,r1,r2,r3,llo,lhi,rlo,rhi,vlo,vhi) \
93 movi %r0 llo \
94 movi %r1 lhi \
95 movi %r2 rlo \
96 movi %r3 rhi \
97 op##cr %r0 %r0 %r2 \
98 op##xr %r1 %r1 %r3 \
99 beqi op##l##L_##r0##r1##r2##r3 %r0 vlo \
100 calli @abort \
101op##l##L_##r0##r1##r2##r3: \
102 beqi op##l##H_##r0##r1##r2##r3 %r1 vhi \
103 calli @abort \
104op##l##H_##r0##r1##r2##r3:
105#define xopr_4(l,op,r0,r1,r2,r3,llo,lhi,rlo,rhi,vlo,vhi) \
106 movi %r0 rlo \
107 movi %r1 rhi \
108 movi %r2 llo \
109 movi %r3 lhi \
110 op##cr %r0 %r2 %r0 \
111 op##xr %r1 %r3 %r1 \
112 beqi op##l##_L##r0##r1##r2##r3 %r0 vlo \
113 calli @abort \
114op##l##_L##r0##r1##r2##r3: \
115 beqi op##l##_H##r0##r1##r2##r3 %r1 vhi \
116 calli @abort \
117op##l##_H##r0##r1##r2##r3:
118
119#define xaddr(l,llo,lhi,rlo,rhi,vlo,vhi) \
120 xopr6(l,add,r0,r1,r2,v0,v1,v2,i##llo,i##lhi,i##rlo,i##rhi,i##vlo,i##vhi) \
121 xopr4_(l,add,r0,r1,r2,v0,i##llo,i##lhi,i##rlo,i##rhi,i##vlo,i##vhi) \
122 xopr_4(l,add,r0,r1,r2,v0,i##llo,i##lhi,i##rlo,i##rhi,i##vlo,i##vhi)
123#define xsubr(l,llo,lhi,rlo,rhi,vlo,vhi) \
124 xopr6(l,sub,r0,r1,r2,v0,v1,v2,i##llo,i##lhi,i##rlo,i##rhi,i##vlo,i##vhi) \
125 xopr4_(l,sub,r0,r1,r2,v0,i##llo,i##lhi,i##rlo,i##rhi,i##vlo,i##vhi) \
126 xopr_4(l,sub,r0,r1,r2,v0,i##llo,i##lhi,i##rlo,i##rhi,i##vlo,i##vhi)
127
128.data 16
129ok:
130.c "ok\n"
131
132.code
133 prolog
134
135 tadd(__LINE__, , r0, r1, x7f, x1, x80)
136 fadd(__LINE__, , r0, r1, x7fe, x1, x7f)
137 tsub(__LINE__, , r0, r1, x80, x1, x7f)
138 fsub(__LINE__, , r0, r1, x7f, x1, x7fe)
139 tadd(__LINE__, _u, r0, r1, ff, x1, x0)
140 fadd(__LINE__, _u, r0, r1, x7f, x1, x80)
141 tsub(__LINE__, _u, r0, r1, x0, x1, ff)
142 fsub(__LINE__, _u, r0, r1, x80, x1, x7f)
143
144 /* 0xffffffffffffffff + 1 = 0x10000000000000000 */
145 xaddr(__LINE__, ff, ff, x1, x0, x0, x0)
146
147 /* 1 + 0xffffffffffffffff = 0x10000000000000000 */
148 xaddr(__LINE__, x1, x0, ff, ff, x0, x0)
149
150 /* 0xfffffffeffffffff + 1 = 0xffffffff00000000 */
151 xaddr(__LINE__, ff, fe, x1, x0, x0, ff)
152
153 /* 1 + 0xfffffffeffffffff = 0xffffffff00000000 */
154 xaddr(__LINE__, x1, x0, ff, fe, x0, ff)
155
156 /* 0xfffffffefffffffe + 2 = 0xffffffff00000000 */
157 xaddr(__LINE__, fe, fe, x2, x0, x0, ff)
158
159 /* 2 + 0xfffffffefffffffe = 0xffffffff00000000 */
160 xaddr(__LINE__, x2, x0, fe, fe, x0, ff)
161
162 /* 0xffffffffffffffff - 1 = 0xfffffffffffffffe */
163 xsubr(__LINE__, ff, ff, x1, x0, fe, ff)
164
165 /* 1 - 0xffffffffffffffff = -0xfffffffffffffffe */
166 xsubr(__LINE__, x1, x0, ff, ff, x2, x0)
167
168 /* 0xfffffffeffffffff - 1 = 0xfffffffefffffffe */
169 xsubr(__LINE__, ff, fe, x1, x0, fe, fe)
170
171 /* 1 - 0xfffffffeffffffff = -0xfffffffefffffffe */
172 xsubr(__LINE__, x1, x0, ff, fe, x2, x1)
173
174 /* 0xfffffffefffffffe - 2 = 0xfffffffefffffffc */
175 xsubr(__LINE__, fe, fe, x2, x0, fc, fe)
176
177 /* 2 + 0xfffffffefffffffe = -0xfffffffefffffffc */
178 xsubr(__LINE__, x2, x0, fe, fe, x4, x1)
179
180 prepare
181 pushargi ok
182 ellipsis
183 finishi @printf
184
185 ret
186 epilog