1# Copyright (c) 2021 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--- 15definitions: [] 16tests: 17 - file-name: xori 18 isa: 19 title: Two address binary operation with immediate on accumulator 20 description: > 21 Perform specified binary operation on accumulator and immediate and store result into accumulator. 22 Immediate is sign extended to operand size. 23 exceptions: 24 - x_none 25 commands: 26 - file-name: op_imm_32_zero 27 isa: 28 instructions: 29 - sig: xori imm:i32 30 acc: inout:i32 31 prefix: bit 32 format: [pref_op_imm_32] 33 code-template: | 34 # 35 ldai 0 36 xori %s 37 movi v0, %s 38 jne v0, set_failure 39 ldai 0 40 jmp fall_through 41 set_failure: 42 ldai 1 43 fall_through: 44 description: Check `xori` with zero and various values. 45 cases: 46 - values: ["0", "0x0"] 47 - values: ["1", "0x1"] 48 - values: ["-1", "0xFFFFFFFF"] 49 - values: ["0x7FFFFFFF", "0x7FFFFFFF"] 50 - values: ["-0x7FFFFFFF", "0x80000001"] 51 - values: ["0x80000000", "0x80000000"] 52 - values: ["-0x80000000", "0x80000000"] 53 - values: ["0xFFFFFFFF", "0xFFFFFFFF"] 54 - values: ["-0xFFFFFFFF", "0x1"] 55 - file-name: op_imm_32_pone 56 isa: 57 instructions: 58 - sig: xori imm:i32 59 acc: inout:i32 60 prefix: bit 61 format: [pref_op_imm_32] 62 code-template: | 63 # 64 ldai 1 65 xori %s 66 movi v0, %s 67 jne v0, set_failure 68 ldai 0 69 jmp fall_through 70 set_failure: 71 ldai 1 72 fall_through: 73 description: Check `xori` with +1 and various values. 74 cases: 75 - values: ["0", "0x1"] 76 - values: ["1", "0x0"] 77 - values: ["-1", "0xFFFFFFFE"] 78 - values: ["0x7FFFFFFF", "0x7FFFFFFE"] 79 - values: ["-0x7FFFFFFF", "0x80000000"] 80 - values: ["0x80000000", "0x80000001"] 81 - values: ["-0x80000000", "0x80000001"] 82 - values: ["0xFFFFFFFF", "0xFFFFFFFE"] 83 - values: ["-0xFFFFFFFF", "0x0"] 84 - file-name: op_imm_32_none 85 isa: 86 instructions: 87 - sig: xori imm:i32 88 acc: inout:i32 89 prefix: bit 90 format: [pref_op_imm_32] 91 code-template: | 92 # 93 ldai -1 94 xori %s 95 movi v0, %s 96 jne v0, set_failure 97 ldai 0 98 jmp fall_through 99 set_failure: 100 ldai 1 101 fall_through: 102 description: Check `xori` with -1 and various values. 103 cases: 104 - values: ["0", "0xFFFFFFFF"] 105 - values: ["1", "0xFFFFFFFE"] 106 - values: ["-1", "0x0"] 107 - values: ["0x7FFFFFFF", "0x80000000"] 108 - values: ["-0x7FFFFFFF", "0x7FFFFFFE"] 109 - values: ["0x80000000", "0x7FFFFFFF"] 110 - values: ["-0x80000000", "0x7FFFFFFF"] 111 - values: ["0xFFFFFFFF", "0x0"] 112 - values: ["-0xFFFFFFFF", "0xFFFFFFFE"] 113 - file-name: op_imm_32_pmax 114 isa: 115 instructions: 116 - sig: xori imm:i32 117 acc: inout:i32 118 prefix: bit 119 format: [pref_op_imm_32] 120 code-template: | 121 # 122 ldai 0x7FFFFFFF 123 xori %s 124 movi v0, %s 125 jne v0, set_failure 126 ldai 0 127 jmp fall_through 128 set_failure: 129 ldai 1 130 fall_through: 131 description: Check `xori` with +max and various values. 132 cases: 133 - values: ["0", "0x7FFFFFFF"] 134 - values: ["1", "0x7FFFFFFE"] 135 - values: ["-1", "0x80000000"] 136 - values: ["0x7FFFFFFF", "0x0"] 137 - values: ["-0x7FFFFFFF", "0xFFFFFFFE"] 138 - values: ["0x80000000", "0xFFFFFFFF"] 139 - values: ["-0x80000000", "0xFFFFFFFF"] 140 - values: ["0xFFFFFFFF", "0x80000000"] 141 - values: ["-0xFFFFFFFF", "0x7FFFFFFE"] 142 - file-name: op_imm_32_nmax 143 isa: 144 instructions: 145 - sig: xori imm:i32 146 acc: inout:i32 147 prefix: bit 148 format: [pref_op_imm_32] 149 code-template: | 150 # 151 ldai -0x80000000 152 xori %s 153 movi v0, %s 154 jne v0, set_failure 155 ldai 0 156 jmp fall_through 157 set_failure: 158 ldai 1 159 fall_through: 160 description: Check `xori` with -max and various values. 161 cases: 162 - values: ["0", "0x80000000"] 163 - values: ["1", "0x80000001"] 164 - values: ["-1", "0x7FFFFFFF"] 165 - values: ["0x7FFFFFFF", "0xFFFFFFFF"] 166 - values: ["-0x7FFFFFFF", "0x1"] 167 - values: ["0x80000000", "0x0"] 168 - values: ["-0x80000000", "0x0"] 169 - values: ["0xFFFFFFFF", "0x7FFFFFFF"] 170 - values: ["-0xFFFFFFFF", "0x80000001"] 171 - file-name: vals 172 isa: 173 instructions: 174 - sig: xori imm:i32 175 acc: inout:i32 176 prefix: bit 177 format: [pref_op_imm_32] 178 code-template: | 179 # 180 ldai %s 181 xori %s 182 movi v0, %s 183 jne v0, set_failure 184 ldai 0 185 jmp fall_through 186 set_failure: 187 ldai 1 188 fall_through: 189 description: Check `xori` with various values. 190 tags: ['tsan'] 191 cases: 192 - values: ["0x486552BC", "0x6A1DAC75", "0x2278FEC9"] 193 - values: ["0x8AEB78EB", "0x5194C0BA", "0xDB7FB851"] 194 - values: ["0x5C2C67E7", "0x34CC1971", "0x68E07E96"] 195 - values: ["0x200ABCFA", "0x99E374A8", "0xB9E9C852"] 196 - values: ["0x89ED94D5", "0xE02D5731", "0x69C0C3E4"] 197 - values: ["0xCE2BBD72", "0xF6DE6676", "0x38F5DB04"] 198 - values: ["0xB9A3E964", "0xD3A8C9C3", "0x6A0B20A7"] 199 - values: ["0xE361D3E8", "0xDA6BA9E9", "0x390A7A01"] 200 - values: ["0xE4F1D3AF", "0x29DA35D8", "0xCD2BE677"] 201 - values: ["0xFBFF6F51", "0xBE511BDB", "0x45AE748A"] 202 - file-name: type 203 bugid: ["964", "966"] 204 tags: ["verifier"] 205 isa: 206 instructions: 207 - sig: xori imm:i32 208 acc: inout:i32 209 prefix: bit 210 format: [pref_op_imm_32] 211 verification: 212 - acc_type 213 runner-options: ['verifier-failure', 'verifier-debug-config'] 214 code-template: | 215 # 216 %s 217 xori 1 218 ldai 0 219 check-type: no-check 220 description: Check `xori` with incorrect accumulator type. 221 cases: 222 - values: [fldai.64 0.0] 223 - values: [fldai.64 -0.0] 224 - values: [fldai.64 1.0] 225 - values: [fldai.64 -1.0] 226 - values: [fldai.64 0x7FF8000000000000] 227 - values: [fldai.64 0xFFFFFFFFFFFFFFFF] 228 - values: [fldai.64 0x7FF0000000000000] 229 - values: [fldai.64 0xFFF0000000000000] 230 - values: [fldai.64 0xFFEFFFFFFFFFFFFF] 231 - values: [fldai.64 0x7FEFFFFFFFFFFFFF] 232 - values: [fldai.64 0x0000000000000001] 233 - values: [fldai.64 0x8000000000000001] 234 - values: [fldai.64 3.14159265358979323846] 235 - values: [lda.str ""] 236 - values: [lda.str "some string"] 237 - values: [lda.null] 238 - values: [ldai.64 0] 239 - values: [ldai.64 1] 240 - values: [ldai.64 -1] 241 - values: [ldai.64 0x0000000100000000] 242 - values: [ldai.64 -0x0000000100000000] 243 - values: [ldai.64 0x0000000080000000] 244 - values: [ldai.64 -0x0000000080000000] 245 - values: [ldai.64 0x1000000000000000] 246 - values: [ldai.64 0x8000000000000000] 247 - values: [ldai.64 0xF000000000000000] 248 - values: [ldai.64 0xFFFFFFFF00000000] 249 - values: [ldai.64 0xFFFFFFFFFFFFFFFF] 250 - values: [ldai.64 -0x1000000000000000] 251 - values: [ldai.64 -0x8000000000000000] 252 - values: [ldai.64 -0xF000000000000000] 253 - values: [ldai.64 -0xFFFFFFFF00000000] 254 - values: [ldai.64 -0xFFFFFFFFFFFFFFFF] 255 - file-name: type_obj 256 bugid: ["964", "966"] 257 tags: ["verifier"] 258 isa: 259 instructions: 260 - sig: xori imm:i32 261 acc: inout:i32 262 prefix: bit 263 format: [pref_op_imm_32] 264 verification: 265 - acc_type 266 runner-options: ['verifier-failure', 'verifier-debug-config'] 267 description: Check `xori` with incorrect accumulator type. 268 code-template: | 269 # 270 .record Object {} 271 .function i32 main() { 272 %s 273 xori 1 274 ldai 0 275 return 276 check-type: none 277 header-template: [] 278 cases: 279 - values: [lda.type Object] 280 - values: 281 - | 282 newobj v0, Object 283 lda.obj v0 284