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 Select/SelectImm 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 1000
22b1994897Sopenharmony_ci    return
23b1994897Sopenharmony_ciret_true:
24b1994897Sopenharmony_ci    ldai 1001
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 1000
33b1994897Sopenharmony_ci    return
34b1994897Sopenharmony_ciret_true:
35b1994897Sopenharmony_ci    ldai 1001
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 1000
44b1994897Sopenharmony_ci    return
45b1994897Sopenharmony_ciret_true:
46b1994897Sopenharmony_ci    ldai 1001
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 1000
55b1994897Sopenharmony_ci    return
56b1994897Sopenharmony_ciret_true:
57b1994897Sopenharmony_ci    ldai 1001
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 1000
66b1994897Sopenharmony_ci    return
67b1994897Sopenharmony_ciret_true:
68b1994897Sopenharmony_ci    ldai 1001
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 1000
77b1994897Sopenharmony_ci    return
78b1994897Sopenharmony_ciret_true:
79b1994897Sopenharmony_ci    ldai 1001
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 1000
90b1994897Sopenharmony_ci    return
91b1994897Sopenharmony_ciret_true:
92b1994897Sopenharmony_ci    ldai 1001
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 1000
103b1994897Sopenharmony_ci    return
104b1994897Sopenharmony_ciret_true:
105b1994897Sopenharmony_ci    ldai 1001
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 1000
116b1994897Sopenharmony_ci    return
117b1994897Sopenharmony_ciret_true:
118b1994897Sopenharmony_ci    ldai 1001
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 1000
129b1994897Sopenharmony_ci    return
130b1994897Sopenharmony_ciret_true:
131b1994897Sopenharmony_ci    ldai 1001
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 1000
142b1994897Sopenharmony_ci    return
143b1994897Sopenharmony_ciret_true:
144b1994897Sopenharmony_ci    ldai 1001
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 1000
155b1994897Sopenharmony_ci    return
156b1994897Sopenharmony_ciret_true:
157b1994897Sopenharmony_ci    ldai 1001
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    movi v4, 1000
167b1994897Sopenharmony_ci    movi v5, 1001
168b1994897Sopenharmony_ci
169b1994897Sopenharmony_ci    call.short testVarsEqZeroI32, v0, v1
170b1994897Sopenharmony_ci    jne v5, error_0
171b1994897Sopenharmony_ci    call.short testVarsEqZeroI32, v0, v0
172b1994897Sopenharmony_ci    jne v4, error_1
173b1994897Sopenharmony_ci    call.short testVarsNeZeroI32, v0, v1
174b1994897Sopenharmony_ci    jne v4, error_2
175b1994897Sopenharmony_ci    call.short testVarsNeZeroI32, v0, v0
176b1994897Sopenharmony_ci    jne v5, error_3
177b1994897Sopenharmony_ci    call.short testVarSmallImmEqZeroI32, v3
178b1994897Sopenharmony_ci    jne v5, error_4
179b1994897Sopenharmony_ci    call.short testVarSmallImmEqZeroI32, v2
180b1994897Sopenharmony_ci    jne v4, error_5
181b1994897Sopenharmony_ci    call.short testVarSmallImmNeZeroI32, v3
182b1994897Sopenharmony_ci    jne v4, error_6
183b1994897Sopenharmony_ci    call.short testVarSmallImmNeZeroI32, v2
184b1994897Sopenharmony_ci    jne v5, error_7
185b1994897Sopenharmony_ci    call.short testVarLargeImmEqZeroI32, v3
186b1994897Sopenharmony_ci    jne v5, error_8
187b1994897Sopenharmony_ci    call.short testVarLargeImmEqZeroI32, v2
188b1994897Sopenharmony_ci    jne v4, error_9
189b1994897Sopenharmony_ci    call.short testVarLargeImmNeZeroI32, v3
190b1994897Sopenharmony_ci    jne v4, error_10
191b1994897Sopenharmony_ci    call.short testVarLargeImmNeZeroI32, v2
192b1994897Sopenharmony_ci    jne v5, error_11
193b1994897Sopenharmony_ci
194b1994897Sopenharmony_ci    movi.64 v0, 0x0101010101010101
195b1994897Sopenharmony_ci    movi.64 v1, 0x1010101010101010
196b1994897Sopenharmony_ci    movi.64 v2, 0xffffffffffffffff
197b1994897Sopenharmony_ci    movi.64 v3, 0x0
198b1994897Sopenharmony_ci
199b1994897Sopenharmony_ci    call.short testVarsEqZeroI64, v0, v1
200b1994897Sopenharmony_ci    jne v5, error_12
201b1994897Sopenharmony_ci    call.short testVarsEqZeroI64, v0, v0
202b1994897Sopenharmony_ci    jne v4, error_13
203b1994897Sopenharmony_ci    call.short testVarsNeZeroI64, v0, v1
204b1994897Sopenharmony_ci    jne v4, error_14
205b1994897Sopenharmony_ci    call.short testVarsNeZeroI64, v0, v0
206b1994897Sopenharmony_ci    jne v5, error_15
207b1994897Sopenharmony_ci    call.short testVarSmallImmEqZeroI64, v3
208b1994897Sopenharmony_ci    jne v5, error_16
209b1994897Sopenharmony_ci    call.short testVarSmallImmEqZeroI64, v2
210b1994897Sopenharmony_ci    jne v4, error_17
211b1994897Sopenharmony_ci    call.short testVarSmallImmNeZeroI64, v3
212b1994897Sopenharmony_ci    jne v4, error_18
213b1994897Sopenharmony_ci    call.short testVarSmallImmNeZeroI64, v2
214b1994897Sopenharmony_ci    jne v5, error_19
215b1994897Sopenharmony_ci    call.short testVarLargeImmEqZeroI64, v3
216b1994897Sopenharmony_ci    jne v5, error_20
217b1994897Sopenharmony_ci    call.short testVarLargeImmEqZeroI64, v2
218b1994897Sopenharmony_ci    jne v4, error_21
219b1994897Sopenharmony_ci    call.short testVarLargeImmNeZeroI64, v3
220b1994897Sopenharmony_ci    jne v4, error_22
221b1994897Sopenharmony_ci    call.short testVarLargeImmNeZeroI64, v2
222b1994897Sopenharmony_ci    jne v5, error_23
223b1994897Sopenharmony_ci
224b1994897Sopenharmony_ci    ldai 0
225b1994897Sopenharmony_ci    return
226b1994897Sopenharmony_cierror_0:
227b1994897Sopenharmony_ci    ldai 1
228b1994897Sopenharmony_ci    return
229b1994897Sopenharmony_cierror_1:
230b1994897Sopenharmony_ci    ldai 2
231b1994897Sopenharmony_ci    return
232b1994897Sopenharmony_cierror_2:
233b1994897Sopenharmony_ci    ldai 3
234b1994897Sopenharmony_ci    return
235b1994897Sopenharmony_cierror_3:
236b1994897Sopenharmony_ci    ldai 4
237b1994897Sopenharmony_ci    return
238b1994897Sopenharmony_cierror_4:
239b1994897Sopenharmony_ci    ldai 5
240b1994897Sopenharmony_ci    return
241b1994897Sopenharmony_cierror_5:
242b1994897Sopenharmony_ci    ldai 6
243b1994897Sopenharmony_ci    return
244b1994897Sopenharmony_cierror_6:
245b1994897Sopenharmony_ci    ldai 7
246b1994897Sopenharmony_ci    return
247b1994897Sopenharmony_cierror_7:
248b1994897Sopenharmony_ci    ldai 8
249b1994897Sopenharmony_ci    return
250b1994897Sopenharmony_cierror_8:
251b1994897Sopenharmony_ci    ldai 9
252b1994897Sopenharmony_ci    return
253b1994897Sopenharmony_cierror_9:
254b1994897Sopenharmony_ci    ldai 10
255b1994897Sopenharmony_ci    return
256b1994897Sopenharmony_cierror_10:
257b1994897Sopenharmony_ci    ldai 11
258b1994897Sopenharmony_ci    return
259b1994897Sopenharmony_cierror_11:
260b1994897Sopenharmony_ci    ldai 12
261b1994897Sopenharmony_ci    return
262b1994897Sopenharmony_cierror_12:
263b1994897Sopenharmony_ci    ldai 13
264b1994897Sopenharmony_ci    return
265b1994897Sopenharmony_cierror_13:
266b1994897Sopenharmony_ci    ldai 14
267b1994897Sopenharmony_ci    return
268b1994897Sopenharmony_cierror_14:
269b1994897Sopenharmony_ci    ldai 15
270b1994897Sopenharmony_ci    return
271b1994897Sopenharmony_cierror_15:
272b1994897Sopenharmony_ci    ldai 16
273b1994897Sopenharmony_ci    return
274b1994897Sopenharmony_cierror_16:
275b1994897Sopenharmony_ci    ldai 17
276b1994897Sopenharmony_ci    return
277b1994897Sopenharmony_cierror_17:
278b1994897Sopenharmony_ci    ldai 18
279b1994897Sopenharmony_ci    return
280b1994897Sopenharmony_cierror_18:
281b1994897Sopenharmony_ci    ldai 19
282b1994897Sopenharmony_ci    return
283b1994897Sopenharmony_cierror_19:
284b1994897Sopenharmony_ci    ldai 20
285b1994897Sopenharmony_ci    return
286b1994897Sopenharmony_cierror_20:
287b1994897Sopenharmony_ci    ldai 21
288b1994897Sopenharmony_ci    return
289b1994897Sopenharmony_cierror_21:
290b1994897Sopenharmony_ci    ldai 22
291b1994897Sopenharmony_ci    return
292b1994897Sopenharmony_cierror_22:
293b1994897Sopenharmony_ci    ldai 23
294b1994897Sopenharmony_ci    return
295b1994897Sopenharmony_cierror_23:
296b1994897Sopenharmony_ci    ldai 24
297b1994897Sopenharmony_ci    return
298b1994897Sopenharmony_ci}