• 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#
15# Tests on If/IfImm with CC_TST_EQ/CC_TST_NE condition code.
16#
17
18.function i32 ret0() {
19    ldai 0
20    return
21}
22
23.function i32 ret1() {
24    ldai 1
25    return
26}
27
28.function i32 testVarsEqZeroI32(i32 a0, i32 a1) {
29    lda a0
30    and2 a1
31    jeqz ret_true
32    call.short ret0
33    return
34ret_true:
35    call.short ret1
36    return
37}
38
39.function i32 testVarsNeZeroI32(i32 a0, i32 a1) {
40    lda a0
41    and2 a1
42    jnez ret_true
43    call.short ret0
44    return
45ret_true:
46    call.short ret1
47    return
48}
49
50.function i32 testVarSmallImmEqZeroI32(i32 a0) {
51    ldai 0x5
52    and2 a0
53    jeqz ret_true
54    call.short ret0
55    return
56ret_true:
57    call.short ret1
58    return
59}
60
61.function i32 testVarSmallImmNeZeroI32(i32 a0) {
62    ldai 0x5
63    and2 a0
64    jnez ret_true
65    call.short ret0
66    return
67ret_true:
68    call.short ret1
69    return
70}
71
72.function i32 testVarLargeImmEqZeroI32(i32 a0) {
73    ldai 0xffb1ab1a
74    and2 a0
75    jeqz ret_true
76    call.short ret0
77    return
78ret_true:
79    call.short ret1
80    return
81}
82
83.function i32 testVarLargeImmNeZeroI32(i32 a0) {
84    ldai 0xffb1ab1a
85    and2 a0
86    jnez ret_true
87    call.short ret0
88    return
89ret_true:
90    call.short ret1
91    return
92}
93
94.function i32 testVarsEqZeroI64(i64 a0, i64 a1) {
95    lda.64 a0
96    and2.64 a1
97    movi.64 v0, 0
98    cmp.64 v0
99    jeqz ret_true
100    call.short ret0
101    return
102ret_true:
103    call.short ret1
104    return
105}
106
107.function i32 testVarsNeZeroI64(i64 a0, i64 a1) {
108    lda.64 a0
109    and2.64 a1
110    movi.64 v0, 0
111    cmp.64 v0
112    jnez ret_true
113    call.short ret0
114    return
115ret_true:
116    call.short ret1
117    return
118}
119
120.function i32 testVarSmallImmEqZeroI64(i64 a0) {
121    ldai.64 0x5
122    and2.64 a0
123    movi.64 v0, 0
124    cmp.64 v0
125    jeqz ret_true
126    call.short ret0
127    return
128ret_true:
129    call.short ret1
130    return
131}
132
133.function i32 testVarSmallImmNeZeroI64(i64 a0) {
134    ldai.64 0x5
135    and2.64 a0
136    movi.64 v0, 0
137    cmp.64 v0
138    jnez ret_true
139    call.short ret0
140    return
141ret_true:
142    call.short ret1
143    return
144}
145
146.function i32 testVarLargeImmEqZeroI64(i64 a0) {
147    ldai.64 0xffffb1ab1ab1ab1a
148    and2.64 a0
149    movi.64 v0, 0
150    cmp.64 v0
151    jeqz ret_true
152    call.short ret0
153    return
154ret_true:
155    call.short ret1
156    return
157}
158
159.function i32 testVarLargeImmNeZeroI64(i64 a0) {
160    ldai.64 0xffffb1ab1ab1ab1a
161    and2.64 a0
162    movi.64 v0, 0
163    cmp.64 v0
164    jnez ret_true
165    call.short ret0
166    return
167ret_true:
168    call.short ret1
169    return
170}
171
172.function i32 main() {
173    movi v0, 0x01010101
174    movi v1, 0x10101010
175    movi v2, 0xffffffff
176    movi v3, 0x0
177
178    call.short testVarsEqZeroI32, v0, v1
179    jeqz error_0
180    call.short testVarsEqZeroI32, v0, v0
181    jnez error_1
182    call.short testVarsNeZeroI32, v0, v1
183    jnez error_2
184    call.short testVarsNeZeroI32, v0, v0
185    jeqz error_3
186    call.short testVarSmallImmEqZeroI32, v3
187    jeqz error_4
188    call.short testVarSmallImmEqZeroI32, v2
189    jnez error_5
190    call.short testVarSmallImmNeZeroI32, v3
191    jnez error_6
192    call.short testVarSmallImmNeZeroI32, v2
193    jeqz error_7
194    call.short testVarLargeImmEqZeroI32, v3
195    jeqz error_8
196    call.short testVarLargeImmEqZeroI32, v2
197    jnez error_9
198    call.short testVarLargeImmNeZeroI32, v3
199    jnez error_10
200    call.short testVarLargeImmNeZeroI32, v2
201    jeqz error_11
202
203    movi.64 v0, 0x0101010101010101
204    movi.64 v1, 0x1010101010101010
205    movi.64 v2, 0xffffffffffffffff
206    movi.64 v3, 0x0
207
208    call.short testVarsEqZeroI64, v0, v1
209    jeqz error_12
210    call.short testVarsEqZeroI64, v0, v0
211    jnez error_13
212    call.short testVarsNeZeroI64, v0, v1
213    jnez error_14
214    call.short testVarsNeZeroI64, v0, v0
215    jeqz error_15
216    call.short testVarSmallImmEqZeroI64, v3
217    jeqz error_16
218    call.short testVarSmallImmEqZeroI64, v2
219    jnez error_17
220    call.short testVarSmallImmNeZeroI64, v3
221    jnez error_18
222    call.short testVarSmallImmNeZeroI64, v2
223    jeqz error_19
224    call.short testVarLargeImmEqZeroI64, v3
225    jeqz error_20
226    call.short testVarLargeImmEqZeroI64, v2
227    jnez error_21
228    call.short testVarLargeImmNeZeroI64, v3
229    jnez error_22
230    call.short testVarLargeImmNeZeroI64, v2
231    jeqz error_23
232
233    ldai 0
234    return
235error_0:
236    ldai 1
237    return
238error_1:
239    ldai 2
240    return
241error_2:
242    ldai 3
243    return
244error_3:
245    ldai 4
246    return
247error_4:
248    ldai 5
249    return
250error_5:
251    ldai 6
252    return
253error_6:
254    ldai 7
255    return
256error_7:
257    ldai 8
258    return
259error_8:
260    ldai 9
261    return
262error_9:
263    ldai 10
264    return
265error_10:
266    ldai 11
267    return
268error_11:
269    ldai 12
270    return
271error_12:
272    ldai 13
273    return
274error_13:
275    ldai 14
276    return
277error_14:
278    ldai 15
279    return
280error_15:
281    ldai 16
282    return
283error_16:
284    ldai 17
285    return
286error_17:
287    ldai 18
288    return
289error_18:
290    ldai 19
291    return
292error_19:
293    ldai 20
294    return
295error_20:
296    ldai 21
297    return
298error_21:
299    ldai 22
300    return
301error_22:
302    ldai 23
303    return
304error_23:
305    ldai 24
306    return
307}