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 and_not_shl_i32(i32 a0, i32 a1) <static> {
16b1994897Sopenharmony_ci  movi v0, 21
17b1994897Sopenharmony_ci  lda a0
18b1994897Sopenharmony_ci  shl2 v0
19b1994897Sopenharmony_ci  sta v0
20b1994897Sopenharmony_ci  lda a1
21b1994897Sopenharmony_ci  not
22b1994897Sopenharmony_ci  and2 v0
23b1994897Sopenharmony_ci  return
24b1994897Sopenharmony_ci}
25b1994897Sopenharmony_ci# (a0 >>> 21) & ~a1
26b1994897Sopenharmony_ci.function i32 and_not_shr_i32(i32 a0, i32 a1) <static> {
27b1994897Sopenharmony_ci  movi v0, 21
28b1994897Sopenharmony_ci  lda a0
29b1994897Sopenharmony_ci  shr2 v0
30b1994897Sopenharmony_ci  sta v0
31b1994897Sopenharmony_ci  lda a1
32b1994897Sopenharmony_ci  not
33b1994897Sopenharmony_ci  and2 v0
34b1994897Sopenharmony_ci  return
35b1994897Sopenharmony_ci}
36b1994897Sopenharmony_ci# (a0 >> 21) & ~a1
37b1994897Sopenharmony_ci.function i32 and_not_ashr_i32(i32 a0, i32 a1) <static> {
38b1994897Sopenharmony_ci  movi v0, 21
39b1994897Sopenharmony_ci  lda a0
40b1994897Sopenharmony_ci  ashr2 v0
41b1994897Sopenharmony_ci  sta v0
42b1994897Sopenharmony_ci  lda a1
43b1994897Sopenharmony_ci  not
44b1994897Sopenharmony_ci  and2 v0
45b1994897Sopenharmony_ci  return
46b1994897Sopenharmony_ci}
47b1994897Sopenharmony_ci# a1 & ~(a0 << 21)
48b1994897Sopenharmony_ci.function i32 and_not_shl_i32_2(i32 a0, i32 a1) <static> {
49b1994897Sopenharmony_ci  movi v0, 21
50b1994897Sopenharmony_ci  lda a0
51b1994897Sopenharmony_ci  shl2 v0
52b1994897Sopenharmony_ci  not
53b1994897Sopenharmony_ci  sta v0
54b1994897Sopenharmony_ci  lda a1
55b1994897Sopenharmony_ci  and2 v0
56b1994897Sopenharmony_ci  return
57b1994897Sopenharmony_ci}
58b1994897Sopenharmony_ci# a1 & ~(a0 >>> 21)
59b1994897Sopenharmony_ci.function i32 and_not_shr_i32_2(i32 a0, i32 a1) <static> {
60b1994897Sopenharmony_ci  movi v0, 21
61b1994897Sopenharmony_ci  lda a0
62b1994897Sopenharmony_ci  shr2 v0
63b1994897Sopenharmony_ci  not
64b1994897Sopenharmony_ci  sta v0
65b1994897Sopenharmony_ci  lda a1
66b1994897Sopenharmony_ci  and2 v0
67b1994897Sopenharmony_ci  return
68b1994897Sopenharmony_ci}
69b1994897Sopenharmony_ci# a1 & ~(a0 >> 21)
70b1994897Sopenharmony_ci.function i32 and_not_ashr_i32_2(i32 a0, i32 a1) <static> {
71b1994897Sopenharmony_ci  movi v0, 21
72b1994897Sopenharmony_ci  lda a0
73b1994897Sopenharmony_ci  ashr2 v0
74b1994897Sopenharmony_ci  not
75b1994897Sopenharmony_ci  sta v0
76b1994897Sopenharmony_ci  lda a1
77b1994897Sopenharmony_ci  and2 v0
78b1994897Sopenharmony_ci  return
79b1994897Sopenharmony_ci}
80b1994897Sopenharmony_ci# (a0 << 42) & ~a1
81b1994897Sopenharmony_ci.function i64 and_not_shl_i64(i64 a0, i64 a1) <static> {
82b1994897Sopenharmony_ci  movi.64 v0, 42
83b1994897Sopenharmony_ci  lda.64 a0
84b1994897Sopenharmony_ci  shl2.64 v0
85b1994897Sopenharmony_ci  sta.64 v0
86b1994897Sopenharmony_ci  lda.64 a1
87b1994897Sopenharmony_ci  not.64
88b1994897Sopenharmony_ci  and2.64 v0
89b1994897Sopenharmony_ci  return.64
90b1994897Sopenharmony_ci}
91b1994897Sopenharmony_ci# (a0 >>> 42) & ~a1
92b1994897Sopenharmony_ci.function i64 and_not_shr_i64(i64 a0, i64 a1) <static> {
93b1994897Sopenharmony_ci  movi.64 v0, 42
94b1994897Sopenharmony_ci  lda.64 a0
95b1994897Sopenharmony_ci  shr2.64 v0
96b1994897Sopenharmony_ci  sta.64 v0
97b1994897Sopenharmony_ci  lda.64 a1
98b1994897Sopenharmony_ci  not.64
99b1994897Sopenharmony_ci  and2.64 v0
100b1994897Sopenharmony_ci  return.64
101b1994897Sopenharmony_ci}
102b1994897Sopenharmony_ci# (a0 >> 42) & ~a1
103b1994897Sopenharmony_ci.function i64 and_not_ashr_i64(i64 a0, i64 a1) <static> {
104b1994897Sopenharmony_ci  movi.64 v0, 42
105b1994897Sopenharmony_ci  lda.64 a0
106b1994897Sopenharmony_ci  ashr2.64 v0
107b1994897Sopenharmony_ci  sta.64 v0
108b1994897Sopenharmony_ci  lda.64 a1
109b1994897Sopenharmony_ci  not.64
110b1994897Sopenharmony_ci  and2.64 v0
111b1994897Sopenharmony_ci  return.64
112b1994897Sopenharmony_ci}
113b1994897Sopenharmony_ci# a1 & ~(a0 << 42)
114b1994897Sopenharmony_ci.function i64 and_not_shl_i64_2(i64 a0, i64 a1) <static> {
115b1994897Sopenharmony_ci  movi.64 v0, 42
116b1994897Sopenharmony_ci  lda.64 a0
117b1994897Sopenharmony_ci  shl2.64 v0
118b1994897Sopenharmony_ci  not.64
119b1994897Sopenharmony_ci  sta.64 v0
120b1994897Sopenharmony_ci  lda.64 a1
121b1994897Sopenharmony_ci  and2.64 v0
122b1994897Sopenharmony_ci  return.64
123b1994897Sopenharmony_ci}
124b1994897Sopenharmony_ci# a1 & ~(a0 >>> 42)
125b1994897Sopenharmony_ci.function i64 and_not_shr_i64_2(i64 a0, i64 a1) <static> {
126b1994897Sopenharmony_ci  movi.64 v0, 42
127b1994897Sopenharmony_ci  lda.64 a0
128b1994897Sopenharmony_ci  shr2.64 v0
129b1994897Sopenharmony_ci  not.64
130b1994897Sopenharmony_ci  sta.64 v0
131b1994897Sopenharmony_ci  lda.64 a1
132b1994897Sopenharmony_ci  and2.64 v0
133b1994897Sopenharmony_ci  return.64
134b1994897Sopenharmony_ci}
135b1994897Sopenharmony_ci# a1 & ~(a0 >> 42)
136b1994897Sopenharmony_ci.function i64 and_not_ashr_i64_2(i64 a0, i64 a1) <static> {
137b1994897Sopenharmony_ci  movi.64 v0, 42
138b1994897Sopenharmony_ci  lda.64 a0
139b1994897Sopenharmony_ci  ashr2.64 v0
140b1994897Sopenharmony_ci  not.64
141b1994897Sopenharmony_ci  sta.64 v0
142b1994897Sopenharmony_ci  lda.64 a1
143b1994897Sopenharmony_ci  and2.64 v0
144b1994897Sopenharmony_ci  return.64
145b1994897Sopenharmony_ci}
146b1994897Sopenharmony_ci
147b1994897Sopenharmony_ci.function i32 main() <static> {
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 and_not_shl_i32, v0, v1
154b1994897Sopenharmony_ci  movi v0, 0x200000
155b1994897Sopenharmony_ci  jne v0, exit_error_0
156b1994897Sopenharmony_ci  movi v0, 21
157b1994897Sopenharmony_ci  ldai 1
158b1994897Sopenharmony_ci  shl2 v0
159b1994897Sopenharmony_ci  sta v0
160b1994897Sopenharmony_ci  movi v1, 2
161b1994897Sopenharmony_ci  call.short and_not_shr_i32, v0, v1
162b1994897Sopenharmony_ci  movi v0, 1
163b1994897Sopenharmony_ci  jne v0, exit_error_1
164b1994897Sopenharmony_ci  movi v0, 21
165b1994897Sopenharmony_ci  ldai -1
166b1994897Sopenharmony_ci  shl2 v0
167b1994897Sopenharmony_ci  sta v0
168b1994897Sopenharmony_ci  movi v1, 0
169b1994897Sopenharmony_ci  call.short and_not_ashr_i32, v0, v1
170b1994897Sopenharmony_ci  movi v0, -1
171b1994897Sopenharmony_ci  jne v0, exit_error_2
172b1994897Sopenharmony_ci  movi v0, 21
173b1994897Sopenharmony_ci  ldai 0x200000
174b1994897Sopenharmony_ci  shr2 v0
175b1994897Sopenharmony_ci  sta v0
176b1994897Sopenharmony_ci  movi v1, -1
177b1994897Sopenharmony_ci  call.short and_not_shl_i32_2, v0, v1
178b1994897Sopenharmony_ci  movi v0, 0xffdfffff
179b1994897Sopenharmony_ci  jne v0, exit_error_3
180b1994897Sopenharmony_ci  movi v0, 21
181b1994897Sopenharmony_ci  ldai 1
182b1994897Sopenharmony_ci  shl2 v0
183b1994897Sopenharmony_ci  sta v0
184b1994897Sopenharmony_ci  movi v1, 3
185b1994897Sopenharmony_ci  call.short and_not_shr_i32_2, v0, v1
186b1994897Sopenharmony_ci  movi v0, 2
187b1994897Sopenharmony_ci  jne v0, exit_error_4
188b1994897Sopenharmony_ci  movi v0, 21
189b1994897Sopenharmony_ci  ldai -1
190b1994897Sopenharmony_ci  shl2 v0
191b1994897Sopenharmony_ci  sta v0
192b1994897Sopenharmony_ci  movi v1, -1
193b1994897Sopenharmony_ci  call.short and_not_ashr_i32_2, v0, v1
194b1994897Sopenharmony_ci  movi v0, 0
195b1994897Sopenharmony_ci  jne v0, exit_error_5
196b1994897Sopenharmony_ci  movi.64 v0, 42
197b1994897Sopenharmony_ci  ldai.64 0x40000000000
198b1994897Sopenharmony_ci  shr2.64 v0
199b1994897Sopenharmony_ci  sta.64 v0
200b1994897Sopenharmony_ci  movi.64 v1, 0
201b1994897Sopenharmony_ci  call.short and_not_shl_i64, v0, v1
202b1994897Sopenharmony_ci  movi.64 v0, 0x40000000000
203b1994897Sopenharmony_ci  cmp.64 v0
204b1994897Sopenharmony_ci  jnez exit_error_6
205b1994897Sopenharmony_ci  movi.64 v0, 42
206b1994897Sopenharmony_ci  ldai.64 1
207b1994897Sopenharmony_ci  shl2.64 v0
208b1994897Sopenharmony_ci  sta.64 v0
209b1994897Sopenharmony_ci  movi.64 v1, 2
210b1994897Sopenharmony_ci  call.short and_not_shr_i64, v0, v1
211b1994897Sopenharmony_ci  movi.64 v0, 1
212b1994897Sopenharmony_ci  cmp.64 v0
213b1994897Sopenharmony_ci  jnez exit_error_7
214b1994897Sopenharmony_ci  movi.64 v0, 42
215b1994897Sopenharmony_ci  ldai.64 -1
216b1994897Sopenharmony_ci  shl2.64 v0
217b1994897Sopenharmony_ci  sta.64 v0
218b1994897Sopenharmony_ci  movi.64 v1, 0
219b1994897Sopenharmony_ci  call.short and_not_ashr_i64, v0, v1
220b1994897Sopenharmony_ci  movi.64 v0, -1
221b1994897Sopenharmony_ci  cmp.64 v0
222b1994897Sopenharmony_ci  jnez exit_error_8
223b1994897Sopenharmony_ci  movi.64 v0, 42
224b1994897Sopenharmony_ci  ldai.64 0x40000000000
225b1994897Sopenharmony_ci  shr2.64 v0
226b1994897Sopenharmony_ci  sta.64 v0
227b1994897Sopenharmony_ci  movi.64 v1, -1
228b1994897Sopenharmony_ci  call.short and_not_shl_i64_2, v0, v1
229b1994897Sopenharmony_ci  movi.64 v0, 0xfffffbffffffffff
230b1994897Sopenharmony_ci  cmp.64 v0
231b1994897Sopenharmony_ci  jnez exit_error_9
232b1994897Sopenharmony_ci  movi.64 v0, 42
233b1994897Sopenharmony_ci  ldai.64 1
234b1994897Sopenharmony_ci  shl2.64 v0
235b1994897Sopenharmony_ci  sta.64 v0
236b1994897Sopenharmony_ci  movi.64 v1, 3
237b1994897Sopenharmony_ci  call.short and_not_shr_i64_2, v0, v1
238b1994897Sopenharmony_ci  movi.64 v0, 2
239b1994897Sopenharmony_ci  cmp.64 v0
240b1994897Sopenharmony_ci  jnez exit_error_10
241b1994897Sopenharmony_ci  movi.64 v0, 42
242b1994897Sopenharmony_ci  ldai.64 -1
243b1994897Sopenharmony_ci  shl2.64 v0
244b1994897Sopenharmony_ci  sta.64 v0
245b1994897Sopenharmony_ci  movi.64 v1, -1
246b1994897Sopenharmony_ci  call.short and_not_ashr_i64_2, v0, v1
247b1994897Sopenharmony_ci  movi.64 v0, 0
248b1994897Sopenharmony_ci  cmp.64 v0
249b1994897Sopenharmony_ci  jnez exit_error_11
250b1994897Sopenharmony_ci  ldai 0
251b1994897Sopenharmony_ci  return
252b1994897Sopenharmony_ciexit_error_0:
253b1994897Sopenharmony_ci  ldai 1
254b1994897Sopenharmony_ci  return
255b1994897Sopenharmony_ciexit_error_1:
256b1994897Sopenharmony_ci  ldai 2
257b1994897Sopenharmony_ci  return
258b1994897Sopenharmony_ciexit_error_2:
259b1994897Sopenharmony_ci  ldai 3
260b1994897Sopenharmony_ci  return
261b1994897Sopenharmony_ciexit_error_3:
262b1994897Sopenharmony_ci  ldai 4
263b1994897Sopenharmony_ci  return
264b1994897Sopenharmony_ciexit_error_4:
265b1994897Sopenharmony_ci  ldai 5
266b1994897Sopenharmony_ci  return
267b1994897Sopenharmony_ciexit_error_5:
268b1994897Sopenharmony_ci  ldai 6
269b1994897Sopenharmony_ci  return
270b1994897Sopenharmony_ciexit_error_6:
271b1994897Sopenharmony_ci  ldai 7
272b1994897Sopenharmony_ci  return
273b1994897Sopenharmony_ciexit_error_7:
274b1994897Sopenharmony_ci  ldai 8
275b1994897Sopenharmony_ci  return
276b1994897Sopenharmony_ciexit_error_8:
277b1994897Sopenharmony_ci  ldai 9
278b1994897Sopenharmony_ci  return
279b1994897Sopenharmony_ciexit_error_9:
280b1994897Sopenharmony_ci  ldai 10
281b1994897Sopenharmony_ci  return
282b1994897Sopenharmony_ciexit_error_10:
283b1994897Sopenharmony_ci  ldai 11
284b1994897Sopenharmony_ci  return
285b1994897Sopenharmony_ciexit_error_11:
286b1994897Sopenharmony_ci  ldai 12
287b1994897Sopenharmony_ci  return
288b1994897Sopenharmony_ci}
289