Add qemu 2.4.0
[kvmfornfv.git] / qemu / tests / tcg / xtensa / test_shift.S
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