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 xor_shl_i32(i32 a0, i32 a1) <static> { 16 movi v0, 21 17 lda a0 18 shl2 v0 19 xor2 a1 20 return 21} 22# (a0 >>> 21) ^ a1 23.function i32 xor_shr_i32(i32 a0, i32 a1) <static> { 24 movi v0, 21 25 lda a0 26 shr2 v0 27 xor2 a1 28 return 29} 30# (a0 >> 21) ^ a1 31.function i32 xor_ashr_i32(i32 a0, i32 a1) <static> { 32 movi v0, 21 33 lda a0 34 ashr2 v0 35 xor2 a1 36 return 37} 38# a1 ^ (a0 << 21) 39.function i32 xor_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 xor2 v0 46 return 47} 48# a1 ^ (a0 >>> 21) 49.function i32 xor_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 xor2 v0 56 return 57} 58# a1 ^ (a0 >> 21) 59.function i32 xor_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 xor2 v0 66 return 67} 68# (a0 << 42) ^ a1 69.function i64 xor_shl_i64(i64 a0, i64 a1) <static> { 70 movi.64 v0, 42 71 lda.64 a0 72 shl2.64 v0 73 xor2.64 a1 74 return.64 75} 76# (a0 >>> 42) ^ a1 77.function i64 xor_shr_i64(i64 a0, i64 a1) <static> { 78 movi.64 v0, 42 79 lda.64 a0 80 shr2.64 v0 81 xor2.64 a1 82 return.64 83} 84# (a0 >> 42) ^ a1 85.function i64 xor_ashr_i64(i64 a0, i64 a1) <static> { 86 movi.64 v0, 42 87 lda.64 a0 88 ashr2.64 v0 89 xor2.64 a1 90 return.64 91} 92# a1 ^ (a0 << 42) 93.function i64 xor_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 xor2.64 v0 100 return.64 101} 102# a1 ^ (a0 >>> 42) 103.function i64 xor_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 xor2.64 v0 110 return.64 111} 112# a1 ^ (a0 >> 42) 113.function i64 xor_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 xor2.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, 0 129 call.short xor_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 xor_shr_i32, v0, v1 138 movi v0, 2 139 jne v0, exit_error_1 140 movi v0, 21 141 ldai -1 142 shl2 v0 143 sta v0 144 movi v1, 0xff00ff00 145 call.short xor_ashr_i32, v0, v1 146 movi v0, 0x00ff00ff 147 jne v0, exit_error_2 148 movi v0, 21 149 ldai 0x200000 150 shr2 v0 151 sta v0 152 movi v1, 0 153 call.short xor_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 xor_shr_i32_2, v0, v1 162 movi v0, 2 163 jne v0, exit_error_4 164 movi v0, 21 165 ldai -1 166 shl2 v0 167 sta v0 168 movi v1, 0xff00ff00 169 call.short xor_ashr_i32_2, v0, v1 170 movi v0, 0x00ff00ff 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, -1 177 call.short xor_shl_i64, v0, v1 178 movi.64 v0, 0xfffffbffffffffff 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 xor_shr_i64, v0, v1 187 movi.64 v0, 2 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, 0x00ff00ff00ff00ff 195 call.short xor_ashr_i64, v0, v1 196 movi.64 v0, 0xff00ff00ff00ff00 197 cmp.64 v0 198 jnez exit_error_8 199 200 movi.64 v0, 42 201 ldai.64 0x40000000000 202 shr2.64 v0 203 sta.64 v0 204 movi.64 v1, -1 205 call.short xor_shl_i64_2, v0, v1 206 movi.64 v0, 0xfffffbffffffffff 207 cmp.64 v0 208 jnez exit_error_9 209 movi.64 v0, 42 210 ldai.64 1 211 shl2.64 v0 212 sta.64 v0 213 movi.64 v1, 3 214 call.short xor_shr_i64_2, v0, v1 215 movi.64 v0, 2 216 cmp.64 v0 217 jnez exit_error_10 218 movi.64 v0, 42 219 ldai.64 -1 220 shl2.64 v0 221 sta.64 v0 222 movi.64 v1, 0x00ff00ff00ff00ff 223 call.short xor_ashr_i64_2, v0, v1 224 movi.64 v0, 0xff00ff00ff00ff00 225 cmp.64 v0 226 jnez exit_error_11 227 ldai 0 228 return 229exit_error_0: 230 ldai 1 231 return 232exit_error_1: 233 ldai 2 234 return 235exit_error_2: 236 ldai 3 237 return 238exit_error_3: 239 ldai 4 240 return 241exit_error_4: 242 ldai 5 243 return 244exit_error_5: 245 ldai 6 246 return 247exit_error_6: 248 ldai 7 249 return 250exit_error_7: 251 ldai 8 252 return 253exit_error_8: 254 ldai 9 255 return 256exit_error_9: 257 ldai 10 258 return 259exit_error_10: 260 ldai 11 261 return 262exit_error_11: 263 ldai 12 264 return 265} 266