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}