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# (a0 << 21) & ~a1 15.function i32 and_not_shl_i32(i32 a0, i32 a1) <static> { 16 movi v0, 21 17 lda a0 18 shl2 v0 19 sta v0 20 lda a1 21 not 22 and2 v0 23 return 24} 25# (a0 >>> 21) & ~a1 26.function i32 and_not_shr_i32(i32 a0, i32 a1) <static> { 27 movi v0, 21 28 lda a0 29 shr2 v0 30 sta v0 31 lda a1 32 not 33 and2 v0 34 return 35} 36# (a0 >> 21) & ~a1 37.function i32 and_not_ashr_i32(i32 a0, i32 a1) <static> { 38 movi v0, 21 39 lda a0 40 ashr2 v0 41 sta v0 42 lda a1 43 not 44 and2 v0 45 return 46} 47# a1 & ~(a0 << 21) 48.function i32 and_not_shl_i32_2(i32 a0, i32 a1) <static> { 49 movi v0, 21 50 lda a0 51 shl2 v0 52 not 53 sta v0 54 lda a1 55 and2 v0 56 return 57} 58# a1 & ~(a0 >>> 21) 59.function i32 and_not_shr_i32_2(i32 a0, i32 a1) <static> { 60 movi v0, 21 61 lda a0 62 shr2 v0 63 not 64 sta v0 65 lda a1 66 and2 v0 67 return 68} 69# a1 & ~(a0 >> 21) 70.function i32 and_not_ashr_i32_2(i32 a0, i32 a1) <static> { 71 movi v0, 21 72 lda a0 73 ashr2 v0 74 not 75 sta v0 76 lda a1 77 and2 v0 78 return 79} 80# (a0 << 42) & ~a1 81.function i64 and_not_shl_i64(i64 a0, i64 a1) <static> { 82 movi.64 v0, 42 83 lda.64 a0 84 shl2.64 v0 85 sta.64 v0 86 lda.64 a1 87 not.64 88 and2.64 v0 89 return.64 90} 91# (a0 >>> 42) & ~a1 92.function i64 and_not_shr_i64(i64 a0, i64 a1) <static> { 93 movi.64 v0, 42 94 lda.64 a0 95 shr2.64 v0 96 sta.64 v0 97 lda.64 a1 98 not.64 99 and2.64 v0 100 return.64 101} 102# (a0 >> 42) & ~a1 103.function i64 and_not_ashr_i64(i64 a0, i64 a1) <static> { 104 movi.64 v0, 42 105 lda.64 a0 106 ashr2.64 v0 107 sta.64 v0 108 lda.64 a1 109 not.64 110 and2.64 v0 111 return.64 112} 113# a1 & ~(a0 << 42) 114.function i64 and_not_shl_i64_2(i64 a0, i64 a1) <static> { 115 movi.64 v0, 42 116 lda.64 a0 117 shl2.64 v0 118 not.64 119 sta.64 v0 120 lda.64 a1 121 and2.64 v0 122 return.64 123} 124# a1 & ~(a0 >>> 42) 125.function i64 and_not_shr_i64_2(i64 a0, i64 a1) <static> { 126 movi.64 v0, 42 127 lda.64 a0 128 shr2.64 v0 129 not.64 130 sta.64 v0 131 lda.64 a1 132 and2.64 v0 133 return.64 134} 135# a1 & ~(a0 >> 42) 136.function i64 and_not_ashr_i64_2(i64 a0, i64 a1) <static> { 137 movi.64 v0, 42 138 lda.64 a0 139 ashr2.64 v0 140 not.64 141 sta.64 v0 142 lda.64 a1 143 and2.64 v0 144 return.64 145} 146 147.function i32 main() <static> { 148 movi v0, 21 149 ldai 0x200000 150 shr2 v0 151 sta v0 152 movi v1, 0 153 call.short and_not_shl_i32, v0, v1 154 movi v0, 0x200000 155 jne v0, exit_error_0 156 movi v0, 21 157 ldai 1 158 shl2 v0 159 sta v0 160 movi v1, 2 161 call.short and_not_shr_i32, v0, v1 162 movi v0, 1 163 jne v0, exit_error_1 164 movi v0, 21 165 ldai -1 166 shl2 v0 167 sta v0 168 movi v1, 0 169 call.short and_not_ashr_i32, v0, v1 170 movi v0, -1 171 jne v0, exit_error_2 172 movi v0, 21 173 ldai 0x200000 174 shr2 v0 175 sta v0 176 movi v1, -1 177 call.short and_not_shl_i32_2, v0, v1 178 movi v0, 0xffdfffff 179 jne v0, exit_error_3 180 movi v0, 21 181 ldai 1 182 shl2 v0 183 sta v0 184 movi v1, 3 185 call.short and_not_shr_i32_2, v0, v1 186 movi v0, 2 187 jne v0, exit_error_4 188 movi v0, 21 189 ldai -1 190 shl2 v0 191 sta v0 192 movi v1, -1 193 call.short and_not_ashr_i32_2, v0, v1 194 movi v0, 0 195 jne v0, exit_error_5 196 movi.64 v0, 42 197 ldai.64 0x40000000000 198 shr2.64 v0 199 sta.64 v0 200 movi.64 v1, 0 201 call.short and_not_shl_i64, v0, v1 202 movi.64 v0, 0x40000000000 203 cmp.64 v0 204 jnez exit_error_6 205 movi.64 v0, 42 206 ldai.64 1 207 shl2.64 v0 208 sta.64 v0 209 movi.64 v1, 2 210 call.short and_not_shr_i64, v0, v1 211 movi.64 v0, 1 212 cmp.64 v0 213 jnez exit_error_7 214 movi.64 v0, 42 215 ldai.64 -1 216 shl2.64 v0 217 sta.64 v0 218 movi.64 v1, 0 219 call.short and_not_ashr_i64, v0, v1 220 movi.64 v0, -1 221 cmp.64 v0 222 jnez exit_error_8 223 movi.64 v0, 42 224 ldai.64 0x40000000000 225 shr2.64 v0 226 sta.64 v0 227 movi.64 v1, -1 228 call.short and_not_shl_i64_2, v0, v1 229 movi.64 v0, 0xfffffbffffffffff 230 cmp.64 v0 231 jnez exit_error_9 232 movi.64 v0, 42 233 ldai.64 1 234 shl2.64 v0 235 sta.64 v0 236 movi.64 v1, 3 237 call.short and_not_shr_i64_2, v0, v1 238 movi.64 v0, 2 239 cmp.64 v0 240 jnez exit_error_10 241 movi.64 v0, 42 242 ldai.64 -1 243 shl2.64 v0 244 sta.64 v0 245 movi.64 v1, -1 246 call.short and_not_ashr_i64_2, v0, v1 247 movi.64 v0, 0 248 cmp.64 v0 249 jnez exit_error_11 250 ldai 0 251 return 252exit_error_0: 253 ldai 1 254 return 255exit_error_1: 256 ldai 2 257 return 258exit_error_2: 259 ldai 3 260 return 261exit_error_3: 262 ldai 4 263 return 264exit_error_4: 265 ldai 5 266 return 267exit_error_5: 268 ldai 6 269 return 270exit_error_6: 271 ldai 7 272 return 273exit_error_7: 274 ldai 8 275 return 276exit_error_8: 277 ldai 9 278 return 279exit_error_9: 280 ldai 10 281 return 282exit_error_10: 283 ldai 11 284 return 285exit_error_11: 286 ldai 12 287 return 288} 289