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: subi 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: subi imm:i32 30 acc: inout:i32 31 format: [op_imm_8] 32 code-template: | 33 # 34 ldai 0 35 subi %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 `subi` with zero and various values. 44 cases: 45 - values: ["0", "0x0"] 46 - values: ["1", "0xFFFFFFFF"] 47 - values: ["-1", "0x1"] 48 - values: ["0xF", "0xFFFFFFF1"] 49 - values: ["-0xF", "0xF"] 50 - values: ["0x7F", "0xFFFFFF81"] 51 - values: ["-0x7F", "0x7F"] 52 - values: ["0x80", "0x80"] 53 - values: ["-0x80", "0x80"] 54 - values: ["0xFF", "0x1"] 55 - values: ["-0xFF", "0xFFFFFFFF"] 56 - values: ["0x7FFFFFFF", "0x1"] 57 - values: ["-0x7FFFFFFF", "0xFFFFFFFF"] 58 - values: ["0x80000000", "0x0"] 59 - values: ["-0x80000000", "0x0"] 60 - values: ["0xFFFFFFFF", "0x1"] 61 - values: ["-0xFFFFFFFF", "0xFFFFFFFF"] 62 - file-name: op_imm_8_pone 63 isa: 64 instructions: 65 - sig: subi imm:i32 66 acc: inout:i32 67 format: [op_imm_8] 68 code-template: | 69 # 70 ldai 1 71 subi %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 `subi` with +1 and various values. 80 cases: 81 - values: ["0", "0x1"] 82 - values: ["1", "0x0"] 83 - values: ["-1", "0x2"] 84 - values: ["0xF", "0xFFFFFFF2"] 85 - values: ["-0xF", "0x10"] 86 - values: ["0x7F", "0xFFFFFF82"] 87 - values: ["-0x7F", "0x80"] 88 - values: ["0x80", "0x81"] 89 - values: ["-0x80", "0x81"] 90 - values: ["0xFF", "0x2"] 91 - values: ["-0xFF", "0x0"] 92 - values: ["0x7FFFFFFF", "0x2"] 93 - values: ["-0x7FFFFFFF", "0x0"] 94 - values: ["0x80000000", "0x1"] 95 - values: ["-0x80000000", "0x1"] 96 - values: ["0xFFFFFFFF", "0x2"] 97 - values: ["-0xFFFFFFFF", "0x0"] 98 99 - file-name: op_imm_8_none 100 isa: 101 instructions: 102 - sig: subi imm:i32 103 acc: inout:i32 104 format: [op_imm_8] 105 code-template: | 106 # 107 ldai -1 108 subi %s 109 movi v0, %s 110 jne v0, set_failure 111 ldai 0 112 jmp fall_through 113 set_failure: 114 ldai 1 115 fall_through: 116 description: Check `subi` with -1 and various values. 117 cases: 118 - values: ["0", "0xFFFFFFFF"] 119 - values: ["1", "0xFFFFFFFE"] 120 - values: ["-1", "0x0"] 121 - values: ["0xF", "0xFFFFFFF0"] 122 - values: ["-0xF", "0xE"] 123 - values: ["0x7F", "0xFFFFFF80"] 124 - values: ["-0x7F", "0x7E"] 125 - values: ["0x80", "0x7F"] 126 - values: ["-0x80", "0x7F"] 127 - values: ["0xFF", "0x0"] 128 - values: ["-0xFF", "0xFFFFFFFE"] 129 - values: ["0x7FFFFFFF", "0x0"] 130 - values: ["-0x7FFFFFFF", "0xFFFFFFFE"] 131 - values: ["0x80000000", "0xFFFFFFFF"] 132 - values: ["-0x80000000", "0xFFFFFFFF"] 133 - values: ["0xFFFFFFFF", "0x0"] 134 - values: ["-0xFFFFFFFF", "0xFFFFFFFE"] 135 - file-name: op_imm_8_pmax 136 isa: 137 instructions: 138 - sig: subi imm:i32 139 acc: inout:i32 140 format: [op_imm_8] 141 code-template: | 142 # 143 ldai 0x7FFFFFFF 144 subi %s 145 movi v0, %s 146 jne v0, set_failure 147 ldai 0 148 jmp fall_through 149 set_failure: 150 ldai 1 151 fall_through: 152 description: Check `subi` with +max and various values. 153 cases: 154 - values: ["0", "0x7FFFFFFF"] 155 - values: ["1", "0x7FFFFFFE"] 156 - values: ["-1", "0x80000000"] 157 - values: ["0xF", "0x7FFFFFF0"] 158 - values: ["-0xF", "0x8000000E"] 159 - values: ["0x7F", "0x7FFFFF80"] 160 - values: ["-0x7F", "0x8000007E"] 161 - values: ["0x80", "0x8000007F"] 162 - values: ["-0x80", "0x8000007F"] 163 - values: ["0xFF", "0x80000000"] 164 - values: ["-0xFF", "0x7FFFFFFE"] 165 - values: ["0x7FFFFFFF", "0x80000000"] 166 - values: ["-0x7FFFFFFF", "0x7FFFFFFE"] 167 - values: ["0x80000000", "0x7FFFFFFF"] 168 - values: ["-0x80000000", "0x7FFFFFFF"] 169 - values: ["0xFFFFFFFF", "0x80000000"] 170 - values: ["-0xFFFFFFFF", "0x7FFFFFFE"] 171 - file-name: op_imm_8_nmax 172 isa: 173 instructions: 174 - sig: subi imm:i32 175 acc: inout:i32 176 format: [op_imm_8] 177 code-template: | 178 # 179 ldai -0x80000000 180 subi %s 181 movi v0, %s 182 jne v0, set_failure 183 ldai 0 184 jmp fall_through 185 set_failure: 186 ldai 1 187 fall_through: 188 description: Check `subi` with -max and various values. 189 cases: 190 - values: ["0", "0x80000000"] 191 - values: ["1", "0x7FFFFFFF"] 192 - values: ["-1", "0x80000001"] 193 - values: ["0xF", "0x7FFFFFF1"] 194 - values: ["-0xF", "0x8000000F"] 195 - values: ["0x7F", "0x7FFFFF81"] 196 - values: ["-0x7F", "0x8000007F"] 197 - values: ["0x80", "0x80000080"] 198 - values: ["-0x80", "0x80000080"] 199 - values: ["0xFF", "0x80000001"] 200 - values: ["-0xFF", "0x7FFFFFFF"] 201 - values: ["0x7FFFFFFF", "0x80000001"] 202 - values: ["-0x7FFFFFFF", "0x7FFFFFFF"] 203 - values: ["0x80000000", "0x80000000"] 204 - values: ["-0x80000000", "0x80000000"] 205 - values: ["0xFFFFFFFF", "0x80000001"] 206 - values: ["-0xFFFFFFFF", "0x7FFFFFFF"] 207 - file-name: vals 208 isa: 209 instructions: 210 - sig: subi imm:i32 211 acc: inout:i32 212 format: [op_imm_8] 213 code-template: | 214 # 215 ldai %s 216 subi %s 217 movi v0, %s 218 jne v0, set_failure 219 ldai 0 220 jmp fall_through 221 set_failure: 222 ldai 1 223 fall_through: 224 description: Check `subi` with various values. 225 tags: ['tsan'] 226 cases: 227 - values: ["0x3B030AE3", "0x13112359", "0x3B030A8A"] 228 - values: ["0xB65CD5EE", "0xA0F81422", "0xB65CD5CC"] 229 - values: ["0x879FD92F", "0xBC71FE4", "0x879FD94B"] 230 - values: ["0xA7DE239F", "0xA18BDD29", "0xA7DE2376"] 231 - values: ["0x29B84E0C", "0xC2F5F80F", "0x29B84DFD"] 232 - values: ["0xC97A3E8A", "0xA06050C8", "0xC97A3EC2"] 233 - values: ["0x58E37AB0", "0x43513822", "0x58E37A8E"] 234 - values: ["0x94CD4C55", "0x6BFC483D", "0x94CD4C18"] 235 - values: ["0x966EB4B7", "0x909A94A2", "0x966EB515"] 236 - values: ["0x99769A97", "0xD60E43B8", "0x99769ADF"] 237 - file-name: type 238 bugid: ["964", "966"] 239 tags: ["verifier"] 240 isa: 241 instructions: 242 - sig: subi imm:i32 243 acc: inout:i32 244 format: [op_imm_8] 245 verification: 246 - acc_type 247 runner-options: ['verifier-failure', 'verifier-debug-config'] 248 code-template: | 249 # 250 %s 251 subi 1 252 ldai 0 253 check-type: no-check 254 description: Check `subi` with incorrect accumulator type. 255 cases: 256 - values: [fldai.64 0.0] 257 - values: [fldai.64 -0.0] 258 - values: [fldai.64 1.0] 259 - values: [fldai.64 -1.0] 260 - values: [fldai.64 0x7FF8000000000000] 261 - values: [fldai.64 0xFFFFFFFFFFFFFFFF] 262 - values: [fldai.64 0x7FF0000000000000] 263 - values: [fldai.64 0xFFF0000000000000] 264 - values: [fldai.64 0xFFEFFFFFFFFFFFFF] 265 - values: [fldai.64 0x7FEFFFFFFFFFFFFF] 266 - values: [fldai.64 0x0000000000000001] 267 - values: [fldai.64 0x8000000000000001] 268 - values: [fldai.64 3.14159265358979323846] 269 - values: [lda.str ""] 270 - values: [lda.str "some string"] 271 - values: [lda.null] 272 - values: [ldai.64 0] 273 - values: [ldai.64 1] 274 - values: [ldai.64 -1] 275 - values: [ldai.64 0x0000000100000000] 276 - values: [ldai.64 -0x0000000100000000] 277 - values: [ldai.64 0x0000000080000000] 278 - values: [ldai.64 -0x0000000080000000] 279 - values: [ldai.64 0x1000000000000000] 280 - values: [ldai.64 0x8000000000000000] 281 - values: [ldai.64 0xF000000000000000] 282 - values: [ldai.64 0xFFFFFFFF00000000] 283 - values: [ldai.64 0xFFFFFFFFFFFFFFFF] 284 - values: [ldai.64 -0x1000000000000000] 285 - values: [ldai.64 -0x8000000000000000] 286 - values: [ldai.64 -0xF000000000000000] 287 - values: [ldai.64 -0xFFFFFFFF00000000] 288 - values: [ldai.64 -0xFFFFFFFFFFFFFFFF] 289 - file-name: type_obj 290 bugid: ["964", "966"] 291 tags: ["verifier"] 292 isa: 293 instructions: 294 - sig: subi imm:i32 295 acc: inout:i32 296 format: [op_imm_8] 297 verification: 298 - acc_type 299 runner-options: ['verifier-failure', 'verifier-debug-config'] 300 description: Check `subi` with incorrect accumulator type. 301 code-template: | 302 # 303 .record Object {} 304 .function i32 main() { 305 %s 306 subi 1 307 ldai 0 308 return 309 check-type: none 310 header-template: [] 311 cases: 312 - values: [lda.type Object] 313 - values: 314 - | 315 newobj v0, Object 316 lda.obj v0 317