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