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