1b1994897Sopenharmony_ci# Copyright (c) 2021-2022 Huawei Device Co., Ltd. 2b1994897Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 3b1994897Sopenharmony_ci# you may not use this file except in compliance with the License. 4b1994897Sopenharmony_ci# You may obtain a copy of the License at 5b1994897Sopenharmony_ci# 6b1994897Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 7b1994897Sopenharmony_ci# 8b1994897Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 9b1994897Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 10b1994897Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11b1994897Sopenharmony_ci# See the License for the specific language governing permissions and 12b1994897Sopenharmony_ci# limitations under the License. 13b1994897Sopenharmony_ci 14b1994897Sopenharmony_ci# (a0 << 21) & ~a1 15b1994897Sopenharmony_ci.function i32 and_not_shl_i32(i32 a0, i32 a1) <static> { 16b1994897Sopenharmony_ci movi v0, 21 17b1994897Sopenharmony_ci lda a0 18b1994897Sopenharmony_ci shl2 v0 19b1994897Sopenharmony_ci sta v0 20b1994897Sopenharmony_ci lda a1 21b1994897Sopenharmony_ci not 22b1994897Sopenharmony_ci and2 v0 23b1994897Sopenharmony_ci return 24b1994897Sopenharmony_ci} 25b1994897Sopenharmony_ci# (a0 >>> 21) & ~a1 26b1994897Sopenharmony_ci.function i32 and_not_shr_i32(i32 a0, i32 a1) <static> { 27b1994897Sopenharmony_ci movi v0, 21 28b1994897Sopenharmony_ci lda a0 29b1994897Sopenharmony_ci shr2 v0 30b1994897Sopenharmony_ci sta v0 31b1994897Sopenharmony_ci lda a1 32b1994897Sopenharmony_ci not 33b1994897Sopenharmony_ci and2 v0 34b1994897Sopenharmony_ci return 35b1994897Sopenharmony_ci} 36b1994897Sopenharmony_ci# (a0 >> 21) & ~a1 37b1994897Sopenharmony_ci.function i32 and_not_ashr_i32(i32 a0, i32 a1) <static> { 38b1994897Sopenharmony_ci movi v0, 21 39b1994897Sopenharmony_ci lda a0 40b1994897Sopenharmony_ci ashr2 v0 41b1994897Sopenharmony_ci sta v0 42b1994897Sopenharmony_ci lda a1 43b1994897Sopenharmony_ci not 44b1994897Sopenharmony_ci and2 v0 45b1994897Sopenharmony_ci return 46b1994897Sopenharmony_ci} 47b1994897Sopenharmony_ci# a1 & ~(a0 << 21) 48b1994897Sopenharmony_ci.function i32 and_not_shl_i32_2(i32 a0, i32 a1) <static> { 49b1994897Sopenharmony_ci movi v0, 21 50b1994897Sopenharmony_ci lda a0 51b1994897Sopenharmony_ci shl2 v0 52b1994897Sopenharmony_ci not 53b1994897Sopenharmony_ci sta v0 54b1994897Sopenharmony_ci lda a1 55b1994897Sopenharmony_ci and2 v0 56b1994897Sopenharmony_ci return 57b1994897Sopenharmony_ci} 58b1994897Sopenharmony_ci# a1 & ~(a0 >>> 21) 59b1994897Sopenharmony_ci.function i32 and_not_shr_i32_2(i32 a0, i32 a1) <static> { 60b1994897Sopenharmony_ci movi v0, 21 61b1994897Sopenharmony_ci lda a0 62b1994897Sopenharmony_ci shr2 v0 63b1994897Sopenharmony_ci not 64b1994897Sopenharmony_ci sta v0 65b1994897Sopenharmony_ci lda a1 66b1994897Sopenharmony_ci and2 v0 67b1994897Sopenharmony_ci return 68b1994897Sopenharmony_ci} 69b1994897Sopenharmony_ci# a1 & ~(a0 >> 21) 70b1994897Sopenharmony_ci.function i32 and_not_ashr_i32_2(i32 a0, i32 a1) <static> { 71b1994897Sopenharmony_ci movi v0, 21 72b1994897Sopenharmony_ci lda a0 73b1994897Sopenharmony_ci ashr2 v0 74b1994897Sopenharmony_ci not 75b1994897Sopenharmony_ci sta v0 76b1994897Sopenharmony_ci lda a1 77b1994897Sopenharmony_ci and2 v0 78b1994897Sopenharmony_ci return 79b1994897Sopenharmony_ci} 80b1994897Sopenharmony_ci# (a0 << 42) & ~a1 81b1994897Sopenharmony_ci.function i64 and_not_shl_i64(i64 a0, i64 a1) <static> { 82b1994897Sopenharmony_ci movi.64 v0, 42 83b1994897Sopenharmony_ci lda.64 a0 84b1994897Sopenharmony_ci shl2.64 v0 85b1994897Sopenharmony_ci sta.64 v0 86b1994897Sopenharmony_ci lda.64 a1 87b1994897Sopenharmony_ci not.64 88b1994897Sopenharmony_ci and2.64 v0 89b1994897Sopenharmony_ci return.64 90b1994897Sopenharmony_ci} 91b1994897Sopenharmony_ci# (a0 >>> 42) & ~a1 92b1994897Sopenharmony_ci.function i64 and_not_shr_i64(i64 a0, i64 a1) <static> { 93b1994897Sopenharmony_ci movi.64 v0, 42 94b1994897Sopenharmony_ci lda.64 a0 95b1994897Sopenharmony_ci shr2.64 v0 96b1994897Sopenharmony_ci sta.64 v0 97b1994897Sopenharmony_ci lda.64 a1 98b1994897Sopenharmony_ci not.64 99b1994897Sopenharmony_ci and2.64 v0 100b1994897Sopenharmony_ci return.64 101b1994897Sopenharmony_ci} 102b1994897Sopenharmony_ci# (a0 >> 42) & ~a1 103b1994897Sopenharmony_ci.function i64 and_not_ashr_i64(i64 a0, i64 a1) <static> { 104b1994897Sopenharmony_ci movi.64 v0, 42 105b1994897Sopenharmony_ci lda.64 a0 106b1994897Sopenharmony_ci ashr2.64 v0 107b1994897Sopenharmony_ci sta.64 v0 108b1994897Sopenharmony_ci lda.64 a1 109b1994897Sopenharmony_ci not.64 110b1994897Sopenharmony_ci and2.64 v0 111b1994897Sopenharmony_ci return.64 112b1994897Sopenharmony_ci} 113b1994897Sopenharmony_ci# a1 & ~(a0 << 42) 114b1994897Sopenharmony_ci.function i64 and_not_shl_i64_2(i64 a0, i64 a1) <static> { 115b1994897Sopenharmony_ci movi.64 v0, 42 116b1994897Sopenharmony_ci lda.64 a0 117b1994897Sopenharmony_ci shl2.64 v0 118b1994897Sopenharmony_ci not.64 119b1994897Sopenharmony_ci sta.64 v0 120b1994897Sopenharmony_ci lda.64 a1 121b1994897Sopenharmony_ci and2.64 v0 122b1994897Sopenharmony_ci return.64 123b1994897Sopenharmony_ci} 124b1994897Sopenharmony_ci# a1 & ~(a0 >>> 42) 125b1994897Sopenharmony_ci.function i64 and_not_shr_i64_2(i64 a0, i64 a1) <static> { 126b1994897Sopenharmony_ci movi.64 v0, 42 127b1994897Sopenharmony_ci lda.64 a0 128b1994897Sopenharmony_ci shr2.64 v0 129b1994897Sopenharmony_ci not.64 130b1994897Sopenharmony_ci sta.64 v0 131b1994897Sopenharmony_ci lda.64 a1 132b1994897Sopenharmony_ci and2.64 v0 133b1994897Sopenharmony_ci return.64 134b1994897Sopenharmony_ci} 135b1994897Sopenharmony_ci# a1 & ~(a0 >> 42) 136b1994897Sopenharmony_ci.function i64 and_not_ashr_i64_2(i64 a0, i64 a1) <static> { 137b1994897Sopenharmony_ci movi.64 v0, 42 138b1994897Sopenharmony_ci lda.64 a0 139b1994897Sopenharmony_ci ashr2.64 v0 140b1994897Sopenharmony_ci not.64 141b1994897Sopenharmony_ci sta.64 v0 142b1994897Sopenharmony_ci lda.64 a1 143b1994897Sopenharmony_ci and2.64 v0 144b1994897Sopenharmony_ci return.64 145b1994897Sopenharmony_ci} 146b1994897Sopenharmony_ci 147b1994897Sopenharmony_ci.function i32 main() <static> { 148b1994897Sopenharmony_ci movi v0, 21 149b1994897Sopenharmony_ci ldai 0x200000 150b1994897Sopenharmony_ci shr2 v0 151b1994897Sopenharmony_ci sta v0 152b1994897Sopenharmony_ci movi v1, 0 153b1994897Sopenharmony_ci call.short and_not_shl_i32, v0, v1 154b1994897Sopenharmony_ci movi v0, 0x200000 155b1994897Sopenharmony_ci jne v0, exit_error_0 156b1994897Sopenharmony_ci movi v0, 21 157b1994897Sopenharmony_ci ldai 1 158b1994897Sopenharmony_ci shl2 v0 159b1994897Sopenharmony_ci sta v0 160b1994897Sopenharmony_ci movi v1, 2 161b1994897Sopenharmony_ci call.short and_not_shr_i32, v0, v1 162b1994897Sopenharmony_ci movi v0, 1 163b1994897Sopenharmony_ci jne v0, exit_error_1 164b1994897Sopenharmony_ci movi v0, 21 165b1994897Sopenharmony_ci ldai -1 166b1994897Sopenharmony_ci shl2 v0 167b1994897Sopenharmony_ci sta v0 168b1994897Sopenharmony_ci movi v1, 0 169b1994897Sopenharmony_ci call.short and_not_ashr_i32, v0, v1 170b1994897Sopenharmony_ci movi v0, -1 171b1994897Sopenharmony_ci jne v0, exit_error_2 172b1994897Sopenharmony_ci movi v0, 21 173b1994897Sopenharmony_ci ldai 0x200000 174b1994897Sopenharmony_ci shr2 v0 175b1994897Sopenharmony_ci sta v0 176b1994897Sopenharmony_ci movi v1, -1 177b1994897Sopenharmony_ci call.short and_not_shl_i32_2, v0, v1 178b1994897Sopenharmony_ci movi v0, 0xffdfffff 179b1994897Sopenharmony_ci jne v0, exit_error_3 180b1994897Sopenharmony_ci movi v0, 21 181b1994897Sopenharmony_ci ldai 1 182b1994897Sopenharmony_ci shl2 v0 183b1994897Sopenharmony_ci sta v0 184b1994897Sopenharmony_ci movi v1, 3 185b1994897Sopenharmony_ci call.short and_not_shr_i32_2, v0, v1 186b1994897Sopenharmony_ci movi v0, 2 187b1994897Sopenharmony_ci jne v0, exit_error_4 188b1994897Sopenharmony_ci movi v0, 21 189b1994897Sopenharmony_ci ldai -1 190b1994897Sopenharmony_ci shl2 v0 191b1994897Sopenharmony_ci sta v0 192b1994897Sopenharmony_ci movi v1, -1 193b1994897Sopenharmony_ci call.short and_not_ashr_i32_2, v0, v1 194b1994897Sopenharmony_ci movi v0, 0 195b1994897Sopenharmony_ci jne v0, exit_error_5 196b1994897Sopenharmony_ci movi.64 v0, 42 197b1994897Sopenharmony_ci ldai.64 0x40000000000 198b1994897Sopenharmony_ci shr2.64 v0 199b1994897Sopenharmony_ci sta.64 v0 200b1994897Sopenharmony_ci movi.64 v1, 0 201b1994897Sopenharmony_ci call.short and_not_shl_i64, v0, v1 202b1994897Sopenharmony_ci movi.64 v0, 0x40000000000 203b1994897Sopenharmony_ci cmp.64 v0 204b1994897Sopenharmony_ci jnez exit_error_6 205b1994897Sopenharmony_ci movi.64 v0, 42 206b1994897Sopenharmony_ci ldai.64 1 207b1994897Sopenharmony_ci shl2.64 v0 208b1994897Sopenharmony_ci sta.64 v0 209b1994897Sopenharmony_ci movi.64 v1, 2 210b1994897Sopenharmony_ci call.short and_not_shr_i64, v0, v1 211b1994897Sopenharmony_ci movi.64 v0, 1 212b1994897Sopenharmony_ci cmp.64 v0 213b1994897Sopenharmony_ci jnez exit_error_7 214b1994897Sopenharmony_ci movi.64 v0, 42 215b1994897Sopenharmony_ci ldai.64 -1 216b1994897Sopenharmony_ci shl2.64 v0 217b1994897Sopenharmony_ci sta.64 v0 218b1994897Sopenharmony_ci movi.64 v1, 0 219b1994897Sopenharmony_ci call.short and_not_ashr_i64, v0, v1 220b1994897Sopenharmony_ci movi.64 v0, -1 221b1994897Sopenharmony_ci cmp.64 v0 222b1994897Sopenharmony_ci jnez exit_error_8 223b1994897Sopenharmony_ci movi.64 v0, 42 224b1994897Sopenharmony_ci ldai.64 0x40000000000 225b1994897Sopenharmony_ci shr2.64 v0 226b1994897Sopenharmony_ci sta.64 v0 227b1994897Sopenharmony_ci movi.64 v1, -1 228b1994897Sopenharmony_ci call.short and_not_shl_i64_2, v0, v1 229b1994897Sopenharmony_ci movi.64 v0, 0xfffffbffffffffff 230b1994897Sopenharmony_ci cmp.64 v0 231b1994897Sopenharmony_ci jnez exit_error_9 232b1994897Sopenharmony_ci movi.64 v0, 42 233b1994897Sopenharmony_ci ldai.64 1 234b1994897Sopenharmony_ci shl2.64 v0 235b1994897Sopenharmony_ci sta.64 v0 236b1994897Sopenharmony_ci movi.64 v1, 3 237b1994897Sopenharmony_ci call.short and_not_shr_i64_2, v0, v1 238b1994897Sopenharmony_ci movi.64 v0, 2 239b1994897Sopenharmony_ci cmp.64 v0 240b1994897Sopenharmony_ci jnez exit_error_10 241b1994897Sopenharmony_ci movi.64 v0, 42 242b1994897Sopenharmony_ci ldai.64 -1 243b1994897Sopenharmony_ci shl2.64 v0 244b1994897Sopenharmony_ci sta.64 v0 245b1994897Sopenharmony_ci movi.64 v1, -1 246b1994897Sopenharmony_ci call.short and_not_ashr_i64_2, v0, v1 247b1994897Sopenharmony_ci movi.64 v0, 0 248b1994897Sopenharmony_ci cmp.64 v0 249b1994897Sopenharmony_ci jnez exit_error_11 250b1994897Sopenharmony_ci ldai 0 251b1994897Sopenharmony_ci return 252b1994897Sopenharmony_ciexit_error_0: 253b1994897Sopenharmony_ci ldai 1 254b1994897Sopenharmony_ci return 255b1994897Sopenharmony_ciexit_error_1: 256b1994897Sopenharmony_ci ldai 2 257b1994897Sopenharmony_ci return 258b1994897Sopenharmony_ciexit_error_2: 259b1994897Sopenharmony_ci ldai 3 260b1994897Sopenharmony_ci return 261b1994897Sopenharmony_ciexit_error_3: 262b1994897Sopenharmony_ci ldai 4 263b1994897Sopenharmony_ci return 264b1994897Sopenharmony_ciexit_error_4: 265b1994897Sopenharmony_ci ldai 5 266b1994897Sopenharmony_ci return 267b1994897Sopenharmony_ciexit_error_5: 268b1994897Sopenharmony_ci ldai 6 269b1994897Sopenharmony_ci return 270b1994897Sopenharmony_ciexit_error_6: 271b1994897Sopenharmony_ci ldai 7 272b1994897Sopenharmony_ci return 273b1994897Sopenharmony_ciexit_error_7: 274b1994897Sopenharmony_ci ldai 8 275b1994897Sopenharmony_ci return 276b1994897Sopenharmony_ciexit_error_8: 277b1994897Sopenharmony_ci ldai 9 278b1994897Sopenharmony_ci return 279b1994897Sopenharmony_ciexit_error_9: 280b1994897Sopenharmony_ci ldai 10 281b1994897Sopenharmony_ci return 282b1994897Sopenharmony_ciexit_error_10: 283b1994897Sopenharmony_ci ldai 11 284b1994897Sopenharmony_ci return 285b1994897Sopenharmony_ciexit_error_11: 286b1994897Sopenharmony_ci ldai 12 287b1994897Sopenharmony_ci return 288b1994897Sopenharmony_ci} 289