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