• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2022 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 xor_shl_i32(i32 a0, i32 a1) <static> {
16  movi v0, 21
17  lda a0
18  shl2 v0
19  xor2 a1
20  return
21}
22# (a0 >>> 21) ^ a1
23.function i32 xor_shr_i32(i32 a0, i32 a1) <static> {
24  movi v0, 21
25  lda a0
26  shr2 v0
27  xor2 a1
28  return
29}
30# (a0 >> 21) ^ a1
31.function i32 xor_ashr_i32(i32 a0, i32 a1) <static> {
32  movi v0, 21
33  lda a0
34  ashr2 v0
35  xor2 a1
36  return
37}
38# a1 ^ (a0 << 21)
39.function i32 xor_shl_i32_2(i32 a0, i32 a1) <static> {
40  movi v0, 21
41  lda a0
42  shl2 v0
43  sta v0
44  lda a1
45  xor2 v0
46  return
47}
48# a1 ^ (a0 >>> 21)
49.function i32 xor_shr_i32_2(i32 a0, i32 a1) <static> {
50  movi v0, 21
51  lda a0
52  shr2 v0
53  sta v0
54  lda a1
55  xor2 v0
56  return
57}
58# a1 ^ (a0 >> 21)
59.function i32 xor_ashr_i32_2(i32 a0, i32 a1) <static> {
60  movi v0, 21
61  lda a0
62  ashr2 v0
63  sta v0
64  lda a1
65  xor2 v0
66  return
67}
68# (a0 << 42) ^ a1
69.function i64 xor_shl_i64(i64 a0, i64 a1) <static> {
70  movi.64 v0, 42
71  lda.64 a0
72  shl2.64 v0
73  xor2.64 a1
74  return.64
75}
76# (a0 >>> 42) ^ a1
77.function i64 xor_shr_i64(i64 a0, i64 a1) <static> {
78  movi.64 v0, 42
79  lda.64 a0
80  shr2.64 v0
81  xor2.64 a1
82  return.64
83}
84# (a0 >> 42) ^ a1
85.function i64 xor_ashr_i64(i64 a0, i64 a1) <static> {
86  movi.64 v0, 42
87  lda.64 a0
88  ashr2.64 v0
89  xor2.64 a1
90  return.64
91}
92# a1 ^ (a0 << 42)
93.function i64 xor_shl_i64_2(i64 a0, i64 a1) <static> {
94  movi.64 v0, 42
95  lda.64 a0
96  shl2.64 v0
97  sta.64 v0
98  lda.64 a1
99  xor2.64 v0
100  return.64
101}
102# a1 ^ (a0 >>> 42)
103.function i64 xor_shr_i64_2(i64 a0, i64 a1) <static> {
104  movi.64 v0, 42
105  lda.64 a0
106  shr2.64 v0
107  sta.64 v0
108  lda.64 a1
109  xor2.64 v0
110  return.64
111}
112# a1 ^ (a0 >> 42)
113.function i64 xor_ashr_i64_2(i64 a0, i64 a1) <static> {
114  movi.64 v0, 42
115  lda.64 a0
116  ashr2.64 v0
117  sta.64 v0
118  lda.64 a1
119  xor2.64 v0
120  return.64
121}
122
123.function i32 main() <static> {
124  movi v0, 21
125  ldai 0x200000
126  shr2 v0
127  sta v0
128  movi v1, 0
129  call.short xor_shl_i32, v0, v1
130  movi v0, 0x200000
131  jne v0, exit_error_0
132  movi v0, 21
133  ldai 1
134  shl2 v0
135  sta v0
136  movi v1, 3
137  call.short xor_shr_i32, v0, v1
138  movi v0, 2
139  jne v0, exit_error_1
140  movi v0, 21
141  ldai -1
142  shl2 v0
143  sta v0
144  movi v1, 0xff00ff00
145  call.short xor_ashr_i32, v0, v1
146  movi v0, 0x00ff00ff
147  jne v0, exit_error_2
148  movi v0, 21
149  ldai 0x200000
150  shr2 v0
151  sta v0
152  movi v1, 0
153  call.short xor_shl_i32_2, v0, v1
154  movi v0, 0x200000
155  jne v0, exit_error_3
156  movi v0, 21
157  ldai 1
158  shl2 v0
159  sta v0
160  movi v1, 3
161  call.short xor_shr_i32_2, v0, v1
162  movi v0, 2
163  jne v0, exit_error_4
164  movi v0, 21
165  ldai -1
166  shl2 v0
167  sta v0
168  movi v1, 0xff00ff00
169  call.short xor_ashr_i32_2, v0, v1
170  movi v0, 0x00ff00ff
171  jne v0, exit_error_5
172  movi.64 v0, 42
173  ldai.64 0x40000000000
174  shr2.64 v0
175  sta.64 v0
176  movi.64 v1, -1
177  call.short xor_shl_i64, v0, v1
178  movi.64 v0, 0xfffffbffffffffff
179  cmp.64 v0
180  jnez exit_error_6
181  movi.64 v0, 42
182  ldai.64 1
183  shl2.64 v0
184  sta.64 v0
185  movi.64 v1, 3
186  call.short xor_shr_i64, v0, v1
187  movi.64 v0, 2
188  cmp.64 v0
189  jnez exit_error_7
190  movi.64 v0, 42
191  ldai.64 -1
192  shl2.64 v0
193  sta.64 v0
194  movi.64 v1, 0x00ff00ff00ff00ff
195  call.short xor_ashr_i64, v0, v1
196  movi.64 v0, 0xff00ff00ff00ff00
197  cmp.64 v0
198  jnez exit_error_8
199
200  movi.64 v0, 42
201  ldai.64 0x40000000000
202  shr2.64 v0
203  sta.64 v0
204  movi.64 v1, -1
205  call.short xor_shl_i64_2, v0, v1
206  movi.64 v0, 0xfffffbffffffffff
207  cmp.64 v0
208  jnez exit_error_9
209  movi.64 v0, 42
210  ldai.64 1
211  shl2.64 v0
212  sta.64 v0
213  movi.64 v1, 3
214  call.short xor_shr_i64_2, v0, v1
215  movi.64 v0, 2
216  cmp.64 v0
217  jnez exit_error_10
218  movi.64 v0, 42
219  ldai.64 -1
220  shl2.64 v0
221  sta.64 v0
222  movi.64 v1, 0x00ff00ff00ff00ff
223  call.short xor_ashr_i64_2, v0, v1
224  movi.64 v0, 0xff00ff00ff00ff00
225  cmp.64 v0
226  jnez exit_error_11
227  ldai 0
228  return
229exit_error_0:
230  ldai 1
231  return
232exit_error_1:
233  ldai 2
234  return
235exit_error_2:
236  ldai 3
237  return
238exit_error_3:
239  ldai 4
240  return
241exit_error_4:
242  ldai 5
243  return
244exit_error_5:
245  ldai 6
246  return
247exit_error_6:
248  ldai 7
249  return
250exit_error_7:
251  ldai 8
252  return
253exit_error_8:
254  ldai 9
255  return
256exit_error_9:
257  ldai 10
258  return
259exit_error_10:
260  ldai 11
261  return
262exit_error_11:
263  ldai 12
264  return
265}
266