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: addi 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_8_zero 27 isa: 28 instructions: 29 - sig: addi imm:i32 30 acc: inout:i32 31 format: [op_imm_8] 32 code-template: | 33 # 34 ldai 0 35 addi %s 36 movi v0, %s 37 jne v0, set_failure 38 ldai 0 39 jmp fall_through 40 set_failure: 41 ldai 1 42 fall_through: 43 description: Check `addi` with zero and various values. 44 cases: 45 - values: ["0", "0x0"] 46 - values: ["1", "0x1"] 47 - values: ["-1", "0xFFFFFFFF"] 48 - values: ["0xF", "0xF"] 49 - values: ["-0xF", "0xFFFFFFF1"] 50 - values: ["0x7F", "0x7F"] 51 - values: ["-0x7F", "0xFFFFFF81"] 52 - values: ["0x80", "0xFFFFFF80"] 53 - values: ["-0x80", "0xFFFFFF80"] 54 - values: ["0xFF", "0xFFFFFFFF"] 55 - values: ["-0xFF", "0x1"] 56 - values: ["0x7FFFFFFF", "0xFFFFFFFF"] 57 - values: ["-0x7FFFFFFF", "0x1"] 58 - values: ["0x80000000", "0x0"] 59 - values: ["-0x80000000", "0x0"] 60 - values: ["0xFFFFFFFF", "0xFFFFFFFF"] 61 - values: ["-0xFFFFFFFF", "0x1"] 62 - file-name: op_imm_8_pone 63 isa: 64 instructions: 65 - sig: addi imm:i32 66 acc: inout:i32 67 format: [op_imm_8] 68 code-template: | 69 # 70 ldai 1 71 addi %s 72 movi v0, %s 73 jne v0, set_failure 74 ldai 0 75 jmp fall_through 76 set_failure: 77 ldai 1 78 fall_through: 79 description: Check `addi` with +1 and various values. 80 cases: 81 - values: ["0", "0x1"] 82 - values: ["1", "0x2"] 83 - values: ["-1", "0x0"] 84 - values: ["0xF", "0x10"] 85 - values: ["-0xF", "0xFFFFFFF2"] 86 - values: ["0x7F", "0x80"] 87 - values: ["-0x7F", "0xFFFFFF82"] 88 - values: ["0x80", "0xFFFFFF81"] 89 - values: ["-0x80", "0xFFFFFF81"] 90 - values: ["0xFF", "0x0"] 91 - values: ["-0xFF", "0x2"] 92 - values: ["0x7FFFFFFF", "0x0"] 93 - values: ["-0x7FFFFFFF", "0x2"] 94 - values: ["0x80000000", "0x1"] 95 - values: ["-0x80000000", "0x1"] 96 - values: ["0xFFFFFFFF", "0x0"] 97 - values: ["-0xFFFFFFFF", "0x2"] 98 - file-name: op_imm_8_none 99 isa: 100 instructions: 101 - sig: addi imm:i32 102 acc: inout:i32 103 format: [op_imm_8] 104 code-template: | 105 # 106 ldai -1 107 addi %s 108 movi v0, %s 109 jne v0, set_failure 110 ldai 0 111 jmp fall_through 112 set_failure: 113 ldai 1 114 fall_through: 115 description: Check `addi` with -1 and various values. 116 cases: 117 - values: ["0", "0xFFFFFFFF"] 118 - values: ["1", "0x0"] 119 - values: ["-1", "0xFFFFFFFE"] 120 - values: ["0xF", "0xE"] 121 - values: ["-0xF", "0xFFFFFFF0"] 122 - values: ["0x7F", "0x7E"] 123 - values: ["-0x7F", "0xFFFFFF80"] 124 - values: ["0x80", "0xFFFFFF7F"] 125 - values: ["-0x80", "0xFFFFFF7F"] 126 - values: ["0xFF", "0xFFFFFFFE"] 127 - values: ["-0xFF", "0x0"] 128 - values: ["0x7FFFFFFF", "0xFFFFFFFE"] 129 - values: ["-0x7FFFFFFF", "0x0"] 130 - values: ["0x80000000", "0xFFFFFFFF"] 131 - values: ["-0x80000000", "0xFFFFFFFF"] 132 - values: ["0xFFFFFFFF", "0xFFFFFFFE"] 133 - values: ["-0xFFFFFFFF", "0x0"] 134 - file-name: op_imm_8_pmax 135 isa: 136 instructions: 137 - sig: addi imm:i32 138 acc: inout:i32 139 format: [op_imm_8] 140 code-template: | 141 # 142 ldai 0x7FFFFFFF 143 addi %s 144 movi v0, %s 145 jne v0, set_failure 146 ldai 0 147 jmp fall_through 148 set_failure: 149 ldai 1 150 fall_through: 151 description: Check `addi` with +max and various values. 152 cases: 153 - values: ["0", "0x7FFFFFFF"] 154 - values: ["1", "0x80000000"] 155 - values: ["-1", "0x7FFFFFFE"] 156 - values: ["0xF", "0x8000000E"] 157 - values: ["-0xF", "0x7FFFFFF0"] 158 - values: ["0x7F", "0x8000007E"] 159 - values: ["-0x7F", "0x7FFFFF80"] 160 - values: ["0x80", "0x7FFFFF7F"] 161 - values: ["-0x80", "0x7FFFFF7F"] 162 - values: ["0xFF", "0x7FFFFFFE"] 163 - values: ["-0xFF", "0x80000000"] 164 - values: ["0x7FFFFFFF", "0x7FFFFFFE"] 165 - values: ["-0x7FFFFFFF", "0x80000000"] 166 - values: ["0x80000000", "0x7FFFFFFF"] 167 - values: ["-0x80000000", "0x7FFFFFFF"] 168 - values: ["0xFFFFFFFF", "0x7FFFFFFE"] 169 - values: ["-0xFFFFFFFF", "0x80000000"] 170 - file-name: op_imm_8_nmax 171 isa: 172 instructions: 173 - sig: addi imm:i32 174 acc: inout:i32 175 format: [op_imm_8] 176 code-template: | 177 # 178 ldai -0x80000000 179 addi %s 180 movi v0, %s 181 jne v0, set_failure 182 ldai 0 183 jmp fall_through 184 set_failure: 185 ldai 1 186 fall_through: 187 description: Check `addi` with -max and various values. 188 cases: 189 - values: ["0", "0x80000000"] 190 - values: ["1", "0x80000001"] 191 - values: ["-1", "0x7FFFFFFF"] 192 - values: ["0xF", "0x8000000F"] 193 - values: ["-0xF", "0x7FFFFFF1"] 194 - values: ["0x7F", "0x8000007F"] 195 - values: ["-0x7F", "0x7FFFFF81"] 196 - values: ["0x80", "0x7FFFFF80"] 197 - values: ["-0x80", "0x7FFFFF80"] 198 - values: ["0xFF", "0x7FFFFFFF"] 199 - values: ["-0xFF", "0x80000001"] 200 - values: ["0x7FFFFFFF", "0x7FFFFFFF"] 201 - values: ["-0x7FFFFFFF", "0x80000001"] 202 - values: ["0x80000000", "0x80000000"] 203 - values: ["-0x80000000", "0x80000000"] 204 - values: ["0xFFFFFFFF", "0x7FFFFFFF"] 205 - values: ["-0xFFFFFFFF", "0x80000001"] 206 - file-name: vals 207 isa: 208 instructions: 209 - sig: addi imm:i32 210 acc: inout:i32 211 format: [op_imm_8] 212 code-template: | 213 # 214 ldai %s 215 addi %s 216 movi v0, %s 217 jne v0, set_failure 218 ldai 0 219 jmp fall_through 220 set_failure: 221 ldai 1 222 fall_through: 223 description: Check `addi` with various values. 224 tags: ['tsan'] 225 cases: 226 - values: ["0xB3FB9313", "0x2C9248E1", "0xB3FB92F4"] 227 - values: ["0x46A832F1", "0x4850A6C0", "0x46A832B1"] 228 - values: ["0xB4C93648", "0xF068FE2A", "0xB4C93672"] 229 - values: ["0x6C634024", "0x99DCC15F", "0x6C634083"] 230 - values: ["0x51FB4863", "0x620B0E04", "0x51FB4867"] 231 - values: ["0x24628B7D", "0x8D668AAC", "0x24628B29"] 232 - values: ["0xADB82709", "0x6E3AFBF0", "0xADB826F9"] 233 - values: ["0x92DDD52B", "0xC9E97127", "0x92DDD552"] 234 - values: ["0x179CDAA3", "0xCE2F54BC", "0x179CDA5F"] 235 - values: ["0x61B42CBB", "0x3A3B56F1", "0x61B42CAC"] 236 - file-name: type_1 237 bugid: ["964", "966"] 238 tags: ["verifier"] 239 isa: 240 instructions: 241 - sig: addi imm:i32 242 acc: inout:i32 243 format: [op_imm_8] 244 verification: 245 - acc_type 246 runner-options: ['verifier-failure', 'verifier-debug-config'] 247 code-template: | 248 # 249 %s 250 addi 1 251 ldai 0 252 check-type: no-check 253 description: Check `addi` with incorrect accumulator type. 254 cases: 255 - values: [fldai.64 0.0] 256 - values: [fldai.64 -0.0] 257 - values: [fldai.64 1.0] 258 - values: [fldai.64 -1.0] 259 - values: [fldai.64 0x7FF8000000000000] 260 - values: [fldai.64 0xFFFFFFFFFFFFFFFF] 261 - values: [fldai.64 0x7FF0000000000000] 262 - values: [fldai.64 0xFFF0000000000000] 263 - values: [fldai.64 0xFFEFFFFFFFFFFFFF] 264 - values: [fldai.64 0x7FEFFFFFFFFFFFFF] 265 - values: [fldai.64 0x0000000000000001] 266 - values: [fldai.64 0x8000000000000001] 267 - values: [fldai.64 3.14159265358979323846] 268 - values: [lda.str ""] 269 - values: [lda.str "some string"] 270 - values: [lda.null] 271 - values: [ldai.64 0] 272 - values: [ldai.64 1] 273 - values: [ldai.64 -1] 274 - values: [ldai.64 0x0000000100000000] 275 - values: [ldai.64 -0x0000000100000000] 276 - values: [ldai.64 0x0000000080000000] 277 - values: [ldai.64 -0x0000000080000000] 278 - values: [ldai.64 0x1000000000000000] 279 - values: [ldai.64 0x8000000000000000] 280 - values: [ldai.64 0xF000000000000000] 281 - values: [ldai.64 0xFFFFFFFF00000000] 282 - values: [ldai.64 0xFFFFFFFFFFFFFFFF] 283 - values: [ldai.64 -0x1000000000000000] 284 - values: [ldai.64 -0x8000000000000000] 285 - values: [ldai.64 -0xF000000000000000] 286 - values: [ldai.64 -0xFFFFFFFF00000000] 287 - values: [ldai.64 -0xFFFFFFFFFFFFFFFF] 288 - file-name: type_obj 289 bugid: ["964", "966"] 290 tags: ["verifier"] 291 isa: 292 instructions: 293 - sig: addi imm:i32 294 acc: inout:i32 295 format: [op_imm_8] 296 verification: 297 - acc_type 298 runner-options: ['verifier-failure', 'verifier-debug-config'] 299 description: Check `addi` with incorrect accumulator type. 300 code-template: | 301 # 302 .record Object {} 303 .function i32 main() { 304 %s 305 addi 1 306 ldai 0 307 return 308 check-type: none 309 header-template: [] 310 cases: 311 - values: [lda.type Object] 312 - values: 313 - | 314 newobj v0, Object 315 lda.obj v0 316 317 - file-name: type 318 isa: 319 instructions: 320 - sig: addi imm:i32 321 acc: inout:i32 322 format: [op_imm_8] 323 verification: 324 - acc_type 325 tags: ['verifier'] 326 runner-options: ['verifier-failure', 'verifier-debug-config'] 327 header-template: [] 328 code-template: | 329 # 330 .record B {} 331 .record panda.String <external> 332 .record panda.Object <external> 333 .function i32 main() { 334 %s 335 addi 0 336 ldai 0 337 check-type: no-check 338 description: Check addi with incorrect register type. 339 cases: 340 - values: 341 - fldai.64 0 342 - values: 343 - | 344 # 345 lda.type B 346 - values: 347 - | 348 # 349 lda.type B[] 350 - values: 351 - | 352 # 353 lda.type panda.String 354 - values: 355 - | 356 # 357 lda.type panda.Object 358 - values: 359 - | 360 # 361 movi v0, 10 362 newarr v0, v0, i32[] 363 lda.obj v0 364 - values: 365 - lda.null 366 - values: 367 - ldai.64 0 368 369 - file-name: uninitialized_regs 370 isa: 371 instructions: 372 - sig: addi imm:i32 373 acc: inout:i32 374 format: [op_imm_8] 375 description: Check add with uninitialized registers. 376 tags: ['verifier'] 377 runner-options: ['verifier-failure', 'verifier-debug-config'] 378 header-template: [] 379 code-template: | 380 # 381 .function i32 main() { 382 addi 0 383 ldai 0 384 check-type: no-check 385