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