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