• 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 addv_shlv_i32(i32 a0, i32 a1) <static> {
16  movi v0, 21
17  lda a0
18  shl2v v0, v0
19  lda v0
20  add2v v0, a1
21  lda v0
22  return
23}
24# (a0 >>> 21) + a1
25.function i32 addv_shrv_i32(i32 a0, i32 a1) <static> {
26  movi v0, 21
27  lda a0
28  shr2v v0, v0
29  lda v0
30  add2v v0, a1
31  lda v0
32  return
33}
34# (a0 >> 21) + a1
35.function i32 addv_ashrv_i32(i32 a0, i32 a1) <static> {
36  movi v0, 21
37  lda a0
38  ashr2v v0, v0
39  lda v0
40  add2v v0, a1
41  lda v0
42  return
43}
44# a1 + (a0 << 21)
45.function i32 addv_shlv_i32_2(i32 a0, i32 a1) <static> {
46  movi v0, 21
47  lda a0
48  shl2v v0, v0
49  lda a1
50  add2v v0, v0
51  lda v0
52  return
53}
54# a1 + (a0 >>> 21)
55.function i32 addv_shrv_i32_2(i32 a0, i32 a1) <static> {
56  movi v0, 21
57  lda a0
58  shr2v v0, v0
59  lda a1
60  add2v v0, v0
61  lda v0
62  return
63}
64# a1 + (a0 >> 21)
65.function i32 addv_ashrv_i32_2(i32 a0, i32 a1) <static> {
66  movi v0, 21
67  lda a0
68  ashr2v v0, v0
69  lda a1
70  add2v v0, v0
71  lda v0
72  return
73}
74# (a0 << 42) + a1
75.function i64 addv_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  add2v.64 v0, a1
81  lda.64 v0
82  return.64
83}
84# (a0 >>> 42) + a1
85.function i64 addv_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  add2v.64 v0, a1
91  lda.64 v0
92  return.64
93}
94# (a0 >> 42) + a1
95.function i64 addv_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  add2v.64 v0, a1
101  lda.64 v0
102  return.64
103}
104# a1 + (a0 << 42)
105.function i64 addv_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  add2v.64 v0, v0
111  lda.64 v0
112  return.64
113}
114# a1 + (a0 >>> 42)
115.function i64 addv_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  add2v.64 v0, v0
121  lda.64 v0
122  return.64
123}
124# a1 + (a0 >> 42)
125.function i64 addv_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  add2v.64 v0, v0
131  lda.64 v0
132  return.64
133}
134
135.function i32 main() <static> {
136  movi v0, 21
137  ldai 257949696
138  shr2 v0
139  sta v0
140  movi v1, 321
141  call.short addv_shlv_i32, v0, v1
142  movi v0, 257950017
143  jne v0, exit_error_0
144  movi v0, 21
145  ldai 123
146  shl2 v0
147  sta v0
148  movi v1, 321
149  call.short addv_shrv_i32, v0, v1
150  movi v0, 444
151  jne v0, exit_error_1
152  movi v0, 21
153  ldai -1
154  shl2 v0
155  sta v0
156  movi v1, 321
157  call.short addv_ashrv_i32, v0, v1
158  movi v0, 320
159  jne v0, exit_error_2
160  movi v0, 21
161  ldai 257949696
162  shr2 v0
163  sta v0
164  movi v1, 321
165  call.short addv_shlv_i32_2, v0, v1
166  movi v0, 257950017
167  jne v0, exit_error_3
168  movi v0, 21
169  ldai 123
170  shl2 v0
171  sta v0
172  movi v1, 321
173  call.short addv_shrv_i32_2, v0, v1
174  movi v0, 444
175  jne v0, exit_error_4
176  movi v0, 21
177  ldai -1
178  shl2 v0
179  sta v0
180  movi v1, 321
181  call.short addv_ashrv_i32_2, v0, v1
182  movi v0, 320
183  jne v0, exit_error_5
184  movi.64 v0, 42
185  ldai.64 540959720865792
186  shr2.64 v0
187  sta.64 v0
188  movi.64 v1, 321
189  call.short addv_shlv_i64, v0, v1
190  movi.64 v0, 540959720866113
191  cmp.64 v0
192  jnez exit_error_6
193  movi.64 v0, 42
194  ldai.64 123
195  shl2.64 v0
196  sta.64 v0
197  movi.64 v1, 321
198  call.short addv_shrv_i64, v0, v1
199  movi.64 v0, 444
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, 321
207  call.short addv_ashrv_i64, v0, v1
208  movi.64 v0, 320
209  cmp.64 v0
210  jnez exit_error_8
211  movi.64 v0, 42
212  ldai.64 540959720865792
213  shr2.64 v0
214  sta.64 v0
215  movi.64 v1, 321
216  call.short addv_shlv_i64_2, v0, v1
217  movi.64 v0, 540959720866113
218  cmp.64 v0
219  jnez exit_error_9
220  movi.64 v0, 42
221  ldai.64 123
222  shl2.64 v0
223  sta.64 v0
224  movi.64 v1, 321
225  call.short addv_shrv_i64_2, v0, v1
226  movi.64 v0, 444
227  cmp.64 v0
228  jnez exit_error_10
229  movi.64 v0, 42
230  ldai.64 -1
231  shl2.64 v0
232  sta.64 v0
233  movi.64 v1, 321
234  call.short addv_ashrv_i64_2, v0, v1
235  movi.64 v0, 320
236  cmp.64 v0
237  jnez exit_error_11
238  ldai 0
239  return
240exit_error_0:
241  ldai 1
242  return
243exit_error_1:
244  ldai 2
245  return
246exit_error_2:
247  ldai 3
248  return
249exit_error_3:
250  ldai 4
251  return
252exit_error_4:
253  ldai 5
254  return
255exit_error_5:
256  ldai 6
257  return
258exit_error_6:
259  ldai 7
260  return
261exit_error_7:
262  ldai 8
263  return
264exit_error_8:
265  ldai 9
266  return
267exit_error_9:
268  ldai 10
269  return
270exit_error_10:
271  ldai 11
272  return
273exit_error_11:
274  ldai 12
275  return
276}
277