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