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}