git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / lightning / check / ldstxi.tst
CommitLineData
4a71579b
PC
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 \
13L##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 \
24L##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 \
34Lu##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 \
39L##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
111Lc:
112 ldxi_uc %r1 %r0 $offuc
113 beqi Luc %r1 0x81
114 calli @abort
115Luc:
116 ldxi_s %r1 %r0 $offs
117 beqi Ls %r1 XS
118 calli @abort
119Ls:
120 ldxi_us %r1 %r0 $offus
121 beqi Lus %r1 0x8001
122 calli @abort
123Lus:
124 ldxi_i %r1 %r0 $offi
125 beqi Li %r1 XI
126 calli @abort
127Li:
128#if __WORDSIZE == 64
129 ldxi_ui %r1 %r0 $offui
130 beqi Lui %r1 0x80000001
131 calli @abort
132Lui:
133 ldxi_l %r1 %r0 $offl
134 beqi Ll %r1 0x8000000000000001
135 calli @abort
136Ll:
137#endif
138 ldxi_f %f0 %r0 $offf
139 beqi_f Lf %f0 0.5
140 calli @abort
141Lf:
142 ldxi_d %f0 %r0 $offd
143 beqi_d Ld %f0 0.25
144 calli @abort
145Ld:
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