• 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 Select/SelectImm 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 1000
22    return
23ret_true:
24    ldai 1001
25    return
26}
27
28.function i32 testVarsNeZeroI32(i32 a0, i32 a1) {
29    lda a0
30    and2 a1
31    jnez ret_true
32    ldai 1000
33    return
34ret_true:
35    ldai 1001
36    return
37}
38
39.function i32 testVarSmallImmEqZeroI32(i32 a0) {
40    ldai 0x5
41    and2 a0
42    jeqz ret_true
43    ldai 1000
44    return
45ret_true:
46    ldai 1001
47    return
48}
49
50.function i32 testVarSmallImmNeZeroI32(i32 a0) {
51    ldai 0x5
52    and2 a0
53    jnez ret_true
54    ldai 1000
55    return
56ret_true:
57    ldai 1001
58    return
59}
60
61.function i32 testVarLargeImmEqZeroI32(i32 a0) {
62    ldai 0xffb1ab1a
63    and2 a0
64    jeqz ret_true
65    ldai 1000
66    return
67ret_true:
68    ldai 1001
69    return
70}
71
72.function i32 testVarLargeImmNeZeroI32(i32 a0) {
73    ldai 0xffb1ab1a
74    and2 a0
75    jnez ret_true
76    ldai 1000
77    return
78ret_true:
79    ldai 1001
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 1000
90    return
91ret_true:
92    ldai 1001
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 1000
103    return
104ret_true:
105    ldai 1001
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 1000
116    return
117ret_true:
118    ldai 1001
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 1000
129    return
130ret_true:
131    ldai 1001
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 1000
142    return
143ret_true:
144    ldai 1001
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 1000
155    return
156ret_true:
157    ldai 1001
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    movi v4, 1000
167    movi v5, 1001
168
169    call.short testVarsEqZeroI32, v0, v1
170    jne v5, error_0
171    call.short testVarsEqZeroI32, v0, v0
172    jne v4, error_1
173    call.short testVarsNeZeroI32, v0, v1
174    jne v4, error_2
175    call.short testVarsNeZeroI32, v0, v0
176    jne v5, error_3
177    call.short testVarSmallImmEqZeroI32, v3
178    jne v5, error_4
179    call.short testVarSmallImmEqZeroI32, v2
180    jne v4, error_5
181    call.short testVarSmallImmNeZeroI32, v3
182    jne v4, error_6
183    call.short testVarSmallImmNeZeroI32, v2
184    jne v5, error_7
185    call.short testVarLargeImmEqZeroI32, v3
186    jne v5, error_8
187    call.short testVarLargeImmEqZeroI32, v2
188    jne v4, error_9
189    call.short testVarLargeImmNeZeroI32, v3
190    jne v4, error_10
191    call.short testVarLargeImmNeZeroI32, v2
192    jne v5, error_11
193
194    movi.64 v0, 0x0101010101010101
195    movi.64 v1, 0x1010101010101010
196    movi.64 v2, 0xffffffffffffffff
197    movi.64 v3, 0x0
198
199    call.short testVarsEqZeroI64, v0, v1
200    jne v5, error_12
201    call.short testVarsEqZeroI64, v0, v0
202    jne v4, error_13
203    call.short testVarsNeZeroI64, v0, v1
204    jne v4, error_14
205    call.short testVarsNeZeroI64, v0, v0
206    jne v5, error_15
207    call.short testVarSmallImmEqZeroI64, v3
208    jne v5, error_16
209    call.short testVarSmallImmEqZeroI64, v2
210    jne v4, error_17
211    call.short testVarSmallImmNeZeroI64, v3
212    jne v4, error_18
213    call.short testVarSmallImmNeZeroI64, v2
214    jne v5, error_19
215    call.short testVarLargeImmEqZeroI64, v3
216    jne v5, error_20
217    call.short testVarLargeImmEqZeroI64, v2
218    jne v4, error_21
219    call.short testVarLargeImmNeZeroI64, v3
220    jne v4, error_22
221    call.short testVarLargeImmNeZeroI64, v2
222    jne v5, error_23
223
224    ldai 0
225    return
226error_0:
227    ldai 1
228    return
229error_1:
230    ldai 2
231    return
232error_2:
233    ldai 3
234    return
235error_3:
236    ldai 4
237    return
238error_4:
239    ldai 5
240    return
241error_5:
242    ldai 6
243    return
244error_6:
245    ldai 7
246    return
247error_7:
248    ldai 8
249    return
250error_8:
251    ldai 9
252    return
253error_9:
254    ldai 10
255    return
256error_10:
257    ldai 11
258    return
259error_11:
260    ldai 12
261    return
262error_12:
263    ldai 13
264    return
265error_13:
266    ldai 14
267    return
268error_14:
269    ldai 15
270    return
271error_15:
272    ldai 16
273    return
274error_16:
275    ldai 17
276    return
277error_17:
278    ldai 18
279    return
280error_18:
281    ldai 19
282    return
283error_19:
284    ldai 20
285    return
286error_20:
287    ldai 21
288    return
289error_21:
290    ldai 22
291    return
292error_22:
293    ldai 23
294    return
295error_23:
296    ldai 24
297    return
298}