git subrepo clone https://git.savannah.gnu.org/git/lightning.git deps/lightning
[pcsx_rearmed.git] / deps / lightning / check / carry.tst
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                                     \
35 op##u##r##l##r0##r1:                                            \
36         beqi op##u##r##l##ok##r0##r1 %r0 iv                     \
37         calli @abort                                            \
38 op##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                                     \
44 op##u##i##l##r0##r1:                                            \
45         beqi op##u##i##l##ok##r0##r1 %r0 iv                     \
46         calli @abort                                            \
47 op##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                     \
53 op##u##r##l##r0##r1:                                            \
54         calli @abort                                            \
55 op##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                     \
60 op##u##i##l##r0##r1:                                            \
61         calli @abort                                            \
62 op##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                                            \
88 op##l##L##r0##r1##r2##r3##r4##r5:                               \
89         beqi op##l##H##r0##r1##r2##r3##r4##r5 %r3 vhi           \
90         calli @abort                                            \
91 op##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                                            \
101 op##l##L_##r0##r1##r2##r3:                                      \
102         beqi op##l##H_##r0##r1##r2##r3 %r1 vhi                  \
103         calli @abort                                            \
104 op##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                                            \
114 op##l##_L##r0##r1##r2##r3:                                      \
115         beqi op##l##_H##r0##r1##r2##r3 %r1 vhi                  \
116         calli @abort                                            \
117 op##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
129 ok:
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