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