1# Copyright (c) 2021-2022 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 return 40 set_failure: 41 ldai 1 42 return 43 check-type: none 44 description: Check `subi` with zero and various values. 45 cases: 46 - values: ["0", "0x0"] 47 - values: ["1", "0xFFFFFFFF"] 48 - values: ["-1", "0x1"] 49 - values: ["0xF", "0xFFFFFFF1"] 50 - values: ["-0xF", "0xF"] 51 - values: ["0x7F", "0xFFFFFF81"] 52 - values: ["-0x7F", "0x7F"] 53 - values: ["0x80", "0x80"] 54 - values: ["-0x80", "0x80"] 55 - values: ["0xFF", "0x1"] 56 - values: ["-0xFF", "0xFFFFFFFF"] 57 58 59 - file-name: op_imm_8_pone 60 isa: 61 instructions: 62 - sig: subi imm:i32 63 acc: inout:i32 64 format: [op_imm_8] 65 code-template: | 66 # 67 ldai 1 68 subi %s 69 movi v0, %s 70 jne v0, set_failure 71 ldai 0 72 return 73 set_failure: 74 ldai 1 75 return 76 check-type: none 77 description: Check `subi` with +1 and various values. 78 cases: 79 - values: ["0", "0x1"] 80 - values: ["1", "0x0"] 81 - values: ["-1", "0x2"] 82 - values: ["0xF", "0xFFFFFFF2"] 83 - values: ["-0xF", "0x10"] 84 - values: ["0x7F", "0xFFFFFF82"] 85 - values: ["-0x7F", "0x80"] 86 - values: ["0x80", "0x81"] 87 - values: ["-0x80", "0x81"] 88 - values: ["0xFF", "0x2"] 89 - values: ["-0xFF", "0x0"] 90 91 92 - file-name: op_imm_8_none 93 isa: 94 instructions: 95 - sig: subi imm:i32 96 acc: inout:i32 97 format: [op_imm_8] 98 code-template: | 99 # 100 ldai -1 101 subi %s 102 movi v0, %s 103 jne v0, set_failure 104 ldai 0 105 return 106 set_failure: 107 ldai 1 108 return 109 check-type: none 110 description: Check `subi` with -1 and various values. 111 cases: 112 - values: ["0", "0xFFFFFFFF"] 113 - values: ["1", "0xFFFFFFFE"] 114 - values: ["-1", "0x0"] 115 - values: ["0xF", "0xFFFFFFF0"] 116 - values: ["-0xF", "0xE"] 117 - values: ["0x7F", "0xFFFFFF80"] 118 - values: ["-0x7F", "0x7E"] 119 - values: ["0x80", "0x7F"] 120 - values: ["-0x80", "0x7F"] 121 - values: ["0xFF", "0x0"] 122 - values: ["-0xFF", "0xFFFFFFFE"] 123 124 125 - file-name: op_imm_8_pmax 126 isa: 127 instructions: 128 - sig: subi imm:i32 129 acc: inout:i32 130 format: [op_imm_8] 131 code-template: | 132 # 133 ldai 0x7FFFFFFF 134 subi %s 135 movi v0, %s 136 jne v0, set_failure 137 ldai 0 138 return 139 set_failure: 140 ldai 1 141 return 142 check-type: none 143 description: Check `subi` with +max and various values. 144 cases: 145 - values: ["0", "0x7FFFFFFF"] 146 - values: ["1", "0x7FFFFFFE"] 147 - values: ["-1", "0x80000000"] 148 - values: ["0xF", "0x7FFFFFF0"] 149 - values: ["-0xF", "0x8000000E"] 150 - values: ["0x7F", "0x7FFFFF80"] 151 - values: ["-0x7F", "0x8000007E"] 152 - values: ["0x80", "0x8000007F"] 153 - values: ["-0x80", "0x8000007F"] 154 - values: ["0xFF", "0x80000000"] 155 - values: ["-0xFF", "0x7FFFFFFE"] 156 157 158 - file-name: op_imm_8_nmax 159 isa: 160 instructions: 161 - sig: subi imm:i32 162 acc: inout:i32 163 format: [op_imm_8] 164 code-template: | 165 # 166 ldai -0x80000000 167 subi %s 168 movi v0, %s 169 jne v0, set_failure 170 ldai 0 171 return 172 set_failure: 173 ldai 1 174 return 175 check-type: none 176 description: Check `subi` with -max and various values. 177 cases: 178 - values: ["0", "0x80000000"] 179 - values: ["1", "0x7FFFFFFF"] 180 - values: ["-1", "0x80000001"] 181 - values: ["0xF", "0x7FFFFFF1"] 182 - values: ["-0xF", "0x8000000F"] 183 - values: ["0x7F", "0x7FFFFF81"] 184 - values: ["-0x7F", "0x8000007F"] 185 - values: ["0x80", "0x80000080"] 186 - values: ["-0x80", "0x80000080"] 187 - values: ["0xFF", "0x80000001"] 188 - values: ["-0xFF", "0x7FFFFFFF"] 189 190 191 - file-name: vals 192 isa: 193 instructions: 194 - sig: subi imm:i32 195 acc: inout:i32 196 format: [op_imm_8] 197 code-template: | 198 # 199 ldai %s 200 subi %s 201 movi v0, %s 202 jne v0, set_failure 203 ldai 0 204 return 205 set_failure: 206 ldai 1 207 return 208 check-type: none 209 description: Check `subi` with various values. 210 tags: ['tsan'] 211 cases: 212 - values: ["0x3B030AE3", "0x59", "0x3B030A8A"] 213 - values: ["0xB65CD5EE", "0x22", "0xB65CD5CC"] 214 - values: ["0x879FD92F", "0xE4", "0x879FD94B"] 215 - values: ["0xA7DE239F", "0x29", "0xA7DE2376"] 216 - values: ["0x29B84E0C", "0x0F", "0x29B84DFD"] 217 - values: ["0xC97A3E8A", "0xC8", "0xC97A3EC2"] 218 - values: ["0x58E37AB0", "0x22", "0x58E37A8E"] 219 - values: ["0x94CD4C55", "0x3D", "0x94CD4C18"] 220 - values: ["0x966EB4B7", "0xA2", "0x966EB515"] 221 - values: ["0x99769A97", "0xB8", "0x99769ADF"] 222 223 224 - file-name: type 225 isa: 226 verification: 227 - acc_type 228 tags: ['verifier'] 229 runner-options: ['verifier-failure', 'verifier-config'] 230 header-template: [] 231 code-template: | 232 # 233 .record panda.Object <external> 234 .function i32 main() { 235 %s 236 subi 0 237 check-type: exit-positive 238 description: Check 'subi' with incorrect acc type. 239 cases: 240 - values: [ldai.64 0] 241 - values: [fldai 0] 242 bugid: ['7315'] 243 - values: [fldai.64 0] 244 - values: [lda.null] 245 - values: [lda.type panda.Object] 246 - values: ['lda.type i32[]'] 247 - values: [lda.str ""] 248 - values: 249 - | 250 # 251 newobj v0, panda.Object 252 lda.obj v0 253 - values: 254 - | 255 # 256 movi v0, 10 257 newarr v0, v0, i32[] 258 lda.obj v0 259 260 261 - file-name: uninitialized_acc 262 isa: 263 instructions: 264 - sig: subi imm:i32 265 acc: inout:i32 266 format: [op_imm_8] 267 description: Check 'subi' with uninitialized accumulator. 268 tags: ['verifier'] 269 runner-options: ['verifier-failure', 'verifier-config'] 270 code-template: | 271 # 272 subi 0 273 check-type: exit-positive 274