root / tests / tcg / xtensa / test_shift.S @ c09015dd
History | View | Annotate | Download (3.8 kB)
1 |
.include "macros.inc" |
---|---|
2 |
|
3 |
test_suite shift |
4 |
|
5 |
.macro test_shift prefix, dst, src, v, imm |
6 |
\prefix\()_set \dst, \src, \v, \imm |
7 |
\prefix\()_ver \dst, \v, \imm |
8 |
.endm |
9 |
|
10 |
.macro test_shift_sd prefix, v, imm |
11 |
test_shift \prefix, a3, a2, \v, \imm |
12 |
test_shift \prefix, a2, a2, \v, \imm |
13 |
.endm |
14 |
|
15 |
.macro tests_imm_shift prefix, v |
16 |
test_shift_sd \prefix, \v, 1 |
17 |
test_shift_sd \prefix, \v, 2 |
18 |
test_shift_sd \prefix, \v, 7 |
19 |
test_shift_sd \prefix, \v, 8 |
20 |
test_shift_sd \prefix, \v, 15 |
21 |
test_shift_sd \prefix, \v, 16 |
22 |
test_shift_sd \prefix, \v, 31 |
23 |
.endm |
24 |
|
25 |
.macro tests_shift prefix, v |
26 |
test_shift_sd \prefix, \v, 0 |
27 |
tests_imm_shift \prefix, \v |
28 |
test_shift_sd \prefix, \v, 32 |
29 |
.endm |
30 |
|
31 |
|
32 |
.macro slli_set dst, src, v, imm |
33 |
movi \src, \v |
34 |
slli \dst, \src, \imm |
35 |
.endm |
36 |
|
37 |
.macro slli_ver dst, v, imm |
38 |
mov a2, \dst |
39 |
movi a3, ((\v) << (\imm)) & 0xffffffff |
40 |
assert eq, a2, a3 |
41 |
.endm |
42 |
|
43 |
test slli |
44 |
tests_imm_shift slli, 0xa3c51249 |
45 |
test_end |
46 |
|
47 |
|
48 |
.macro srai_set dst, src, v, imm |
49 |
movi \src, \v |
50 |
srai \dst, \src, \imm |
51 |
.endm |
52 |
|
53 |
.macro srai_ver dst, v, imm |
54 |
mov a2, \dst |
55 |
.if (\imm) |
56 |
movi a3, (((\v) >> (\imm)) & 0xffffffff) | \ |
57 |
~((((\v) & 0x80000000) >> ((\imm) - 1)) - 1) |
58 |
.else |
59 |
movi a3, \v |
60 |
.endif |
61 |
assert eq, a2, a3 |
62 |
.endm |
63 |
|
64 |
test srai |
65 |
tests_imm_shift srai, 0x49a3c512 |
66 |
tests_imm_shift srai, 0xa3c51249 |
67 |
test_end |
68 |
|
69 |
|
70 |
.macro srli_set dst, src, v, imm |
71 |
movi \src, \v |
72 |
srli \dst, \src, \imm |
73 |
.endm |
74 |
|
75 |
.macro srli_ver dst, v, imm |
76 |
mov a2, \dst |
77 |
movi a3, (((\v) >> (\imm)) & 0xffffffff) |
78 |
assert eq, a2, a3 |
79 |
.endm |
80 |
|
81 |
test srli |
82 |
tests_imm_shift srli, 0x49a3c512 |
83 |
tests_imm_shift srli, 0xa3c51249 |
84 |
test_end |
85 |
|
86 |
|
87 |
.macro sll_set dst, src, v, imm |
88 |
movi a2, \imm |
89 |
ssl a2 |
90 |
movi \src, \v |
91 |
sll \dst, \src |
92 |
.endm |
93 |
|
94 |
.macro sll_sar_set dst, src, v, imm |
95 |
movi a2, 32 - \imm |
96 |
wsr a2, sar |
97 |
movi \src, \v |
98 |
sll \dst, \src |
99 |
.endm |
100 |
|
101 |
.macro sll_ver dst, v, imm |
102 |
slli_ver \dst, \v, (\imm) & 0x1f |
103 |
.endm |
104 |
|
105 |
.macro sll_sar_ver dst, v, imm |
106 |
slli_ver \dst, \v, \imm |
107 |
.endm |
108 |
|
109 |
test sll |
110 |
tests_shift sll, 0xa3c51249 |
111 |
tests_shift sll_sar, 0xa3c51249 |
112 |
test_end |
113 |
|
114 |
|
115 |
.macro srl_set dst, src, v, imm |
116 |
movi a2, \imm |
117 |
ssr a2 |
118 |
movi \src, \v |
119 |
srl \dst, \src |
120 |
.endm |
121 |
|
122 |
.macro srl_sar_set dst, src, v, imm |
123 |
movi a2, \imm |
124 |
wsr a2, sar |
125 |
movi \src, \v |
126 |
srl \dst, \src |
127 |
.endm |
128 |
|
129 |
.macro srl_ver dst, v, imm |
130 |
srli_ver \dst, \v, (\imm) & 0x1f |
131 |
.endm |
132 |
|
133 |
.macro srl_sar_ver dst, v, imm |
134 |
srli_ver \dst, \v, \imm |
135 |
.endm |
136 |
|
137 |
test srl |
138 |
tests_shift srl, 0xa3c51249 |
139 |
tests_shift srl_sar, 0xa3c51249 |
140 |
tests_shift srl, 0x49a3c512 |
141 |
tests_shift srl_sar, 0x49a3c512 |
142 |
test_end |
143 |
|
144 |
|
145 |
.macro sra_set dst, src, v, imm |
146 |
movi a2, \imm |
147 |
ssr a2 |
148 |
movi \src, \v |
149 |
sra \dst, \src |
150 |
.endm |
151 |
|
152 |
.macro sra_sar_set dst, src, v, imm |
153 |
movi a2, \imm |
154 |
wsr a2, sar |
155 |
movi \src, \v |
156 |
sra \dst, \src |
157 |
.endm |
158 |
|
159 |
.macro sra_ver dst, v, imm |
160 |
srai_ver \dst, \v, (\imm) & 0x1f |
161 |
.endm |
162 |
|
163 |
.macro sra_sar_ver dst, v, imm |
164 |
srai_ver \dst, \v, \imm |
165 |
.endm |
166 |
|
167 |
test sra |
168 |
tests_shift sra, 0xa3c51249 |
169 |
tests_shift sra_sar, 0xa3c51249 |
170 |
tests_shift sra, 0x49a3c512 |
171 |
tests_shift sra_sar, 0x49a3c512 |
172 |
test_end |
173 |
|
174 |
|
175 |
.macro src_set dst, src, v, imm |
176 |
movi a2, \imm |
177 |
ssr a2 |
178 |
movi \src, (\v) & 0xffffffff |
179 |
movi a4, (\v) >> 32 |
180 |
src \dst, a4, \src |
181 |
.endm |
182 |
|
183 |
.macro src_sar_set dst, src, v, imm |
184 |
movi a2, \imm |
185 |
wsr a2, sar |
186 |
movi \src, (\v) & 0xffffffff |
187 |
movi a4, (\v) >> 32 |
188 |
src \dst, a4, \src |
189 |
.endm |
190 |
|
191 |
.macro src_ver dst, v, imm |
192 |
src_sar_ver \dst, \v, (\imm) & 0x1f |
193 |
.endm |
194 |
|
195 |
.macro src_sar_ver dst, v, imm |
196 |
mov a2, \dst |
197 |
movi a3, ((\v) >> (\imm)) & 0xffffffff |
198 |
assert eq, a2, a3 |
199 |
.endm |
200 |
|
201 |
test src |
202 |
tests_shift src, 0xa3c51249215c3a94 |
203 |
tests_shift src_sar, 0xa3c51249215c3a94 |
204 |
test_end |
205 |
|
206 |
test_suite_end |