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