git subrepo pull (merge) --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / check / ldstxi.tst
1 #include "ldst.inc"
2
3 #if __WORDSIZE == 64
4 #  define LDSTL(N, R0, R1)                                      \
5         stxi_i $offui %R0 %R1                                   \
6         movi %R1 L##N                                           \
7         stxi_l $offl %R0 %R1
8
9 #  define SI(C, N, x, X, R0, R1)                                \
10         ldxi_##x %R1 %R0 $off##x                                \
11         beqi L##x##C %R1 L##X##N                                \
12         calli @abort                                            \
13 L##x##C:
14
15 #  define LDRL(C, N, R0, R1)                                    \
16         UI(C, N, i, I, R0, R1)                                  \
17         SI(C, N, l, L, R0, R1)
18 #else
19 #  define LDSTL(C, R0, R1)
20 #  define SI(C, N, x, X, R0, R1)                                \
21         ldxi_##x %R1 %R0 $off##x                                \
22         beqi L##x##C %R1 I##X##N                                \
23         calli @abort                                            \
24 L##x##C:
25
26 #  define LDRL(C, N, R0, R1)
27
28 #endif
29
30 #define UI(C, N, x, X, R0, R1)                                  \
31         ldxi_u##x %R1 %R0 $offu##x                              \
32         beqi Lu##x##C %R1 X##N                                  \
33         calli @abort                                            \
34 Lu##x##C:
35
36 #define FF(C, N, x, X, R0, F0)                                  \
37         ldxi_##x %F0 %R0 $off##x                                \
38         beqi_##x L##x##C %F0 X##N                               \
39 L##x##C:
40
41 #define LDST1(X, N, R0, R1, F0)                                 \
42         movi %R0 t0                                             \
43         movi %R1 C##N                                           \
44         stxi_c $offc %R0 %R1                                    \
45         stxi_c $offuc %R0 %R1                                   \
46         movi %R1 S##N                                           \
47         stxi_s $offs %R0 %R1                                    \
48         stxi_s $offus %R0 %R1                                   \
49         movi %R1 I##N                                           \
50         stxi_i $offi %R0 %R1                                    \
51         LDSTL(N, R0, R1)                                        \
52         movi_f %F0 F##N                                         \
53         stxi_f $offf %R0 %F0                                    \
54         movi_d %F0 D##N                                         \
55         stxi_d $offd %R0 %F0                                    \
56         SI(X, N, c, C, R0, R1)                                  \
57         UI(X, N, c, C, R0, R1)                                  \
58         SI(X, N, s, S, R0, R1)                                  \
59         UI(X, N, s, S, R0, R1)                                  \
60         SI(X, N, i, I, R0, R1)                                  \
61         LDRL(X, N, R0, R1)                                      \
62         FF(X, N, f, F, R0, F0)                                  \
63         FF(X, N, d, D, R0, F0)
64
65 #define LDST0(R0, R1, F0)                                       \
66         LDST1(0_##R0##_##R1##_##F0, 0, R0, R1, F0)              \
67         LDST1(1_##R0##_##R1##_##F0, 1, R0, R1, F0)              \
68         LDST1(2_##R0##_##R1##_##F0, 2, R0, R1, F0)              \
69         LDST1(3_##R0##_##R1##_##F0, 3, R0, R1, F0)
70
71 #define LDST(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5)    \
72         LDST0(V0, V1, F0)                                       \
73         LDST0(V0, V2, F1)                                       \
74         LDST0(V0, R0, F3)                                       \
75         LDST0(V0, R1, F4)                                       \
76         LDST0(V0, R2, F5)                                       \
77         LDST0(V1, V2, F0)                                       \
78         LDST0(V1, R0, F1)                                       \
79         LDST0(V1, R1, F2)                                       \
80         LDST0(V1, R2, F3)                                       \
81         LDST0(V2, R0, F4)                                       \
82         LDST0(V2, R1, F5)                                       \
83         LDST0(V2, R2, F0)
84
85 .code
86         prolog
87
88         /* Simple test to simplify validating encodings before
89          * brute force tests */
90         movi %r0 t0
91         movi %r1 0x81
92         stxi_c $offc %r0 %r1
93         stxi_c $offuc %r0 %r1
94         movi %r1 0x8001
95         stxi_s $offs %r0 %r1
96         stxi_s $offus %r0 %r1
97         movi %r1 0x80000001
98         stxi_i $offi %r0 %r1
99 #if __WORDSIZE == 64
100         stxi_i $offui %r0 %r1
101         movi %r1 0x8000000000000001
102         stxi_l $offl %r0 %r1
103 #endif
104         movi_f %f0 0.5
105         stxi_f $offf %r0 %f0
106         movi_d %f0 0.25
107         stxi_d $offd %r0 %f0
108         ldxi_c %r1 %r0 $offc
109         beqi Lc %r1 XC
110         calli @abort
111 Lc:
112         ldxi_uc %r1 %r0 $offuc
113         beqi Luc %r1 0x81
114         calli @abort
115 Luc:
116         ldxi_s %r1 %r0 $offs
117         beqi Ls %r1 XS
118         calli @abort
119 Ls:
120         ldxi_us %r1 %r0 $offus
121         beqi Lus %r1 0x8001
122         calli @abort
123 Lus:
124         ldxi_i %r1 %r0 $offi
125         beqi Li %r1 XI
126         calli @abort
127 Li:
128 #if __WORDSIZE == 64
129         ldxi_ui %r1 %r0 $offui
130         beqi Lui %r1 0x80000001
131         calli @abort
132 Lui:
133         ldxi_l %r1 %r0 $offl
134         beqi Ll %r1 0x8000000000000001
135         calli @abort
136 Ll:
137 #endif
138         ldxi_f %f0 %r0 $offf
139         beqi_f Lf %f0 0.5
140         calli @abort
141 Lf:
142         ldxi_d %f0 %r0 $offd
143         beqi_d Ld %f0 0.25
144         calli @abort
145 Ld:
146
147         LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
148         // just to know did not abort
149         prepare
150                 pushargi ok
151                 ellipsis
152         finishi @printf
153         ret
154         epilog