• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2024 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14# (a0 << 21) ^ a1
15.function i32 xorv_shlv_i32(i32 a0, i32 a1) <static> {
16  movi v0, 21
17  lda a0
18  shl2v v0, v0
19  lda v0
20  xor2v v0, a1
21  lda v0
22  return
23}
24# (a0 >>> 21) ^ a1
25.function i32 xorv_shrv_i32(i32 a0, i32 a1) <static> {
26  movi v0, 21
27  lda a0
28  shr2v v0, v0
29  lda v0
30  xor2v v0, a1
31  lda v0
32  return
33}
34# (a0 >> 21) ^ a1
35.function i32 xorv_ashrv_i32(i32 a0, i32 a1) <static> {
36  movi v0, 21
37  lda a0
38  ashr2v v0, v0
39  lda v0
40  xor2v v0, a1
41  lda v0
42  return
43}
44# a1 ^ (a0 << 21)
45.function i32 xorv_shlv_i32_2(i32 a0, i32 a1) <static> {
46  movi v0, 21
47  lda a0
48  shl2v v0, v0
49  lda a1
50  xor2v v0, v0
51  lda v0
52  return
53}
54# a1 ^ (a0 >>> 21)
55.function i32 xorv_shrv_i32_2(i32 a0, i32 a1) <static> {
56  movi v0, 21
57  lda a0
58  shr2v v0, v0
59  lda a1
60  xor2v v0, v0
61  lda v0
62  return
63}
64# a1 ^ (a0 >> 21)
65.function i32 xorv_ashrv_i32_2(i32 a0, i32 a1) <static> {
66  movi v0, 21
67  lda a0
68  ashr2v v0, v0
69  lda a1
70  xor2v v0, v0
71  lda v0
72  return
73}
74# (a0 << 42) ^ a1
75.function i64 xorv_shlv_i64(i64 a0, i64 a1) <static> {
76  movi.64 v0, 42
77  lda.64 a0
78  shl2v.64 v0, v0
79  lda.64 v0
80  xor2v.64 v0, a1
81  lda.64 v0
82  return.64
83}
84# (a0 >>> 42) ^ a1
85.function i64 xorv_shrv_i64(i64 a0, i64 a1) <static> {
86  movi.64 v0, 42
87  lda.64 a0
88  shr2v.64 v0, v0
89  lda.64 v0
90  xor2v.64 v0, a1
91  lda.64 v0
92  return.64
93}
94# (a0 >> 42) ^ a1
95.function i64 xorv_ashrv_i64(i64 a0, i64 a1) <static> {
96  movi.64 v0, 42
97  lda.64 a0
98  ashr2v.64 v0, v0
99  lda.64 v0
100  xor2v.64 v0, a1
101  lda.64 v0
102  return.64
103}
104# a1 ^ (a0 << 42)
105.function i64 xorv_shlv_i64_2(i64 a0, i64 a1) <static> {
106  movi.64 v0, 42
107  lda.64 a0
108  shl2v.64 v0, v0
109  lda.64 a1
110  xor2v.64 v0, v0
111  lda.64 v0
112  return.64
113}
114# a1 ^ (a0 >>> 42)
115.function i64 xorv_shrv_i64_2(i64 a0, i64 a1) <static> {
116  movi.64 v0, 42
117  lda.64 a0
118  shr2v.64 v0, v0
119  lda.64 a1
120  xor2v.64 v0, v0
121  lda.64 v0
122  return.64
123}
124# a1 ^ (a0 >> 42)
125.function i64 xorv_ashrv_i64_2(i64 a0, i64 a1) <static> {
126  movi.64 v0, 42
127  lda.64 a0
128  ashr2v.64 v0, v0
129  lda.64 a1
130  xor2v.64 v0, v0
131  lda.64 v0
132  return.64
133}
134
135.function i32 main() <static> {
136  movi v0, 21
137  ldai 0x200000
138  shr2 v0
139  sta v0
140  movi v1, 0
141  call.short xorv_shlv_i32, v0, v1
142  movi v0, 0x200000
143  jne v0, exit_error_0
144  movi v0, 21
145  ldai 1
146  shl2 v0
147  sta v0
148  movi v1, 3
149  call.short xorv_shrv_i32, v0, v1
150  movi v0, 2
151  jne v0, exit_error_1
152  movi v0, 21
153  ldai -1
154  shl2 v0
155  sta v0
156  movi v1, 0xff00ff00
157  call.short xorv_ashrv_i32, v0, v1
158  movi v0, 0x00ff00ff
159  jne v0, exit_error_2
160  movi v0, 21
161  ldai 0x200000
162  shr2 v0
163  sta v0
164  movi v1, 0
165  call.short xorv_shlv_i32_2, v0, v1
166  movi v0, 0x200000
167  jne v0, exit_error_3
168  movi v0, 21
169  ldai 1
170  shl2 v0
171  sta v0
172  movi v1, 3
173  call.short xorv_shrv_i32_2, v0, v1
174  movi v0, 2
175  jne v0, exit_error_4
176  movi v0, 21
177  ldai -1
178  shl2 v0
179  sta v0
180  movi v1, 0xff00ff00
181  call.short xorv_ashrv_i32_2, v0, v1
182  movi v0, 0x00ff00ff
183  jne v0, exit_error_5
184  movi.64 v0, 42
185  ldai.64 0x40000000000
186  shr2.64 v0
187  sta.64 v0
188  movi.64 v1, -1
189  call.short xorv_shlv_i64, v0, v1
190  movi.64 v0, 0xfffffbffffffffff
191  cmp.64 v0
192  jnez exit_error_6
193  movi.64 v0, 42
194  ldai.64 1
195  shl2.64 v0
196  sta.64 v0
197  movi.64 v1, 3
198  call.short xorv_shrv_i64, v0, v1
199  movi.64 v0, 2
200  cmp.64 v0
201  jnez exit_error_7
202  movi.64 v0, 42
203  ldai.64 -1
204  shl2.64 v0
205  sta.64 v0
206  movi.64 v1, 0x00ff00ff00ff00ff
207  call.short xorv_ashrv_i64, v0, v1
208  movi.64 v0, 0xff00ff00ff00ff00
209  cmp.64 v0
210  jnez exit_error_8
211
212  movi.64 v0, 42
213  ldai.64 0x40000000000
214  shr2.64 v0
215  sta.64 v0
216  movi.64 v1, -1
217  call.short xorv_shlv_i64_2, v0, v1
218  movi.64 v0, 0xfffffbffffffffff
219  cmp.64 v0
220  jnez exit_error_9
221  movi.64 v0, 42
222  ldai.64 1
223  shl2.64 v0
224  sta.64 v0
225  movi.64 v1, 3
226  call.short xorv_shrv_i64_2, v0, v1
227  movi.64 v0, 2
228  cmp.64 v0
229  jnez exit_error_10
230  movi.64 v0, 42
231  ldai.64 -1
232  shl2.64 v0
233  sta.64 v0
234  movi.64 v1, 0x00ff00ff00ff00ff
235  call.short xorv_ashrv_i64_2, v0, v1
236  movi.64 v0, 0xff00ff00ff00ff00
237  cmp.64 v0
238  jnez exit_error_11
239  ldai 0
240  return
241exit_error_0:
242  ldai 1
243  return
244exit_error_1:
245  ldai 2
246  return
247exit_error_2:
248  ldai 3
249  return
250exit_error_3:
251  ldai 4
252  return
253exit_error_4:
254  ldai 5
255  return
256exit_error_5:
257  ldai 6
258  return
259exit_error_6:
260  ldai 7
261  return
262exit_error_7:
263  ldai 8
264  return
265exit_error_8:
266  ldai 9
267  return
268exit_error_9:
269  ldai 10
270  return
271exit_error_10:
272  ldai 11
273  return
274exit_error_11:
275  ldai 12
276  return
277}
278