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# a & ~b 15b1994897Sopenharmony_ci.function i32 and_not_i32(i32 a0, i32 a1) { 16b1994897Sopenharmony_ci lda a1 17b1994897Sopenharmony_ci not 18b1994897Sopenharmony_ci and2 a0 19b1994897Sopenharmony_ci return 20b1994897Sopenharmony_ci} 21b1994897Sopenharmony_ci 22b1994897Sopenharmony_ci# a & ~b 23b1994897Sopenharmony_ci.function i64 and_not_i64(i64 a0, i64 a1) { 24b1994897Sopenharmony_ci lda.64 a1 25b1994897Sopenharmony_ci not.64 26b1994897Sopenharmony_ci and2.64 a0 27b1994897Sopenharmony_ci return.64 28b1994897Sopenharmony_ci} 29b1994897Sopenharmony_ci 30b1994897Sopenharmony_ci# a | ~b 31b1994897Sopenharmony_ci.function i32 or_not_i32(i32 a0, i32 a1) { 32b1994897Sopenharmony_ci lda a1 33b1994897Sopenharmony_ci not 34b1994897Sopenharmony_ci or2 a0 35b1994897Sopenharmony_ci return 36b1994897Sopenharmony_ci} 37b1994897Sopenharmony_ci 38b1994897Sopenharmony_ci# a | ~b 39b1994897Sopenharmony_ci.function i64 or_not_i64(i64 a0, i64 a1) { 40b1994897Sopenharmony_ci lda.64 a1 41b1994897Sopenharmony_ci not.64 42b1994897Sopenharmony_ci or2.64 a0 43b1994897Sopenharmony_ci return.64 44b1994897Sopenharmony_ci} 45b1994897Sopenharmony_ci 46b1994897Sopenharmony_ci# a ^ ~b 47b1994897Sopenharmony_ci.function i32 xor_not_i32(i32 a0, i32 a1) { 48b1994897Sopenharmony_ci lda a1 49b1994897Sopenharmony_ci not 50b1994897Sopenharmony_ci xor2 a0 51b1994897Sopenharmony_ci return 52b1994897Sopenharmony_ci} 53b1994897Sopenharmony_ci 54b1994897Sopenharmony_ci# a ^ ~b 55b1994897Sopenharmony_ci.function i64 xor_not_i64(i64 a0, i64 a1) { 56b1994897Sopenharmony_ci lda.64 a1 57b1994897Sopenharmony_ci not.64 58b1994897Sopenharmony_ci xor2.64 a0 59b1994897Sopenharmony_ci return.64 60b1994897Sopenharmony_ci} 61b1994897Sopenharmony_ci 62b1994897Sopenharmony_ci.record IO <external> 63b1994897Sopenharmony_ci.function void IO.printI64(i64 a0) <external> 64b1994897Sopenharmony_ci 65b1994897Sopenharmony_ci.function i32 main() { 66b1994897Sopenharmony_ci movi v0, 0x0000ffff 67b1994897Sopenharmony_ci movi v1, 0x0 68b1994897Sopenharmony_ci call.short or_not_i32, v0, v1 69b1994897Sopenharmony_ci movi v0, 0xffffffff 70b1994897Sopenharmony_ci jne v0, exit_error_0 71b1994897Sopenharmony_ci movi.64 v0, 0x0000ffff0000ffff 72b1994897Sopenharmony_ci movi.64 v1, 0x00ffffffff000000 73b1994897Sopenharmony_ci call.short or_not_i64, v0, v1 74b1994897Sopenharmony_ci movi.64 v0, 0xff00ffff00ffffff 75b1994897Sopenharmony_ci cmp.64 v0 76b1994897Sopenharmony_ci jnez exit_error_1 77b1994897Sopenharmony_ci movi v0, 0x0f0f0f0f 78b1994897Sopenharmony_ci movi v1, 0 79b1994897Sopenharmony_ci call.short and_not_i32, v0, v1 80b1994897Sopenharmony_ci movi v0, 0x0f0f0f0f 81b1994897Sopenharmony_ci jne v0, exit_error_2 82b1994897Sopenharmony_ci movi.64 v0, 0x00ff00ff00ff00ff 83b1994897Sopenharmony_ci movi.64 v1, 0xff0ffff0ff0ffff0 84b1994897Sopenharmony_ci call.short and_not_i64, v0, v1 85b1994897Sopenharmony_ci movi.64 v0, 0x00f0000f00f0000f 86b1994897Sopenharmony_ci cmp.64 v0 87b1994897Sopenharmony_ci jnez exit_error_3 88b1994897Sopenharmony_ci movi v0, 0x01234567 89b1994897Sopenharmony_ci movi v1, 0x76543210 90b1994897Sopenharmony_ci call.short xor_not_i32, v0, v1 91b1994897Sopenharmony_ci movi v0, 0x88888888 92b1994897Sopenharmony_ci jne v0, exit_error_4 93b1994897Sopenharmony_ci movi.64 v0, 0x0123456789abcdef 94b1994897Sopenharmony_ci movi.64 v1, 0xfedcba9876543210 95b1994897Sopenharmony_ci call.short xor_not_i64, v0, v1 96b1994897Sopenharmony_ci movi.64 v0, 0 97b1994897Sopenharmony_ci cmp.64 v0 98b1994897Sopenharmony_ci jnez exit_error_5 99b1994897Sopenharmony_ci ldai 0 100b1994897Sopenharmony_ci return 101b1994897Sopenharmony_ciexit_error_0: 102b1994897Sopenharmony_ci ldai 1 103b1994897Sopenharmony_ci return 104b1994897Sopenharmony_ciexit_error_1: 105b1994897Sopenharmony_ci ldai 2 106b1994897Sopenharmony_ci return 107b1994897Sopenharmony_ciexit_error_2: 108b1994897Sopenharmony_ci ldai 3 109b1994897Sopenharmony_ci return 110b1994897Sopenharmony_ciexit_error_3: 111b1994897Sopenharmony_ci ldai 4 112b1994897Sopenharmony_ci return 113b1994897Sopenharmony_ciexit_error_4: 114b1994897Sopenharmony_ci ldai 5 115b1994897Sopenharmony_ci return 116b1994897Sopenharmony_ciexit_error_5: 117b1994897Sopenharmony_ci ldai 6 118b1994897Sopenharmony_ci return 119b1994897Sopenharmony_ci} 120