|
|
1.1 root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.