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: muli 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: muli imm:i32 30 acc: inout:i32 31 format: [op_imm_8] 32 code-template: | 33 # 34 ldai 0 35 muli %s 36 movi v0, 0 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 `muli` with zero and various values. 45 tags: ['tsan'] 46 cases: 47 - values: ["0"] 48 - values: ["1"] 49 - values: ["-1"] 50 - values: ["0xF"] 51 - values: ["-0xF"] 52 - values: ["0x7F"] 53 - values: ["-0x7F"] 54 - values: ["0x80"] 55 - values: ["-0x80"] 56 - values: ["0xFF"] 57 - values: ["-0xFF"] 58 59 60 - file-name: op_imm_8_pone 61 isa: 62 instructions: 63 - sig: muli imm:i32 64 acc: inout:i32 65 format: [op_imm_8] 66 code-template: | 67 # 68 ldai 1 69 muli %s 70 movi v0, %s 71 jne v0, set_failure 72 ldai 0 73 return 74 set_failure: 75 ldai 1 76 return 77 check-type: none 78 description: Check `muli` with +1 and various values. 79 cases: 80 - values: ["0", "0x0"] 81 - values: ["1", "0x1"] 82 - values: ["-1", "0xFFFFFFFF"] 83 - values: ["0xF", "0xF"] 84 - values: ["-0xF", "0xFFFFFFF1"] 85 - values: ["0x7F", "0x7F"] 86 - values: ["-0x7F", "0xFFFFFF81"] 87 - values: ["0x80", "0xFFFFFF80"] 88 - values: ["-0x80", "0xFFFFFF80"] 89 - values: ["0xFF", "0xFFFFFFFF"] 90 - values: ["-0xFF", "0x1"] 91 92 93 - file-name: op_imm_8_none 94 isa: 95 instructions: 96 - sig: muli imm:i32 97 acc: inout:i32 98 format: [op_imm_8] 99 code-template: | 100 # 101 ldai -1 102 muli %s 103 movi v0, %s 104 jne v0, set_failure 105 ldai 0 106 return 107 set_failure: 108 ldai 1 109 return 110 check-type: none 111 description: Check `muli` with -1 and various values. 112 cases: 113 - values: ["0", "0x0"] 114 - values: ["1", "0xFFFFFFFF"] 115 - values: ["-1", "0x1"] 116 - values: ["0xF", "0xFFFFFFF1"] 117 - values: ["-0xF", "0xF"] 118 - values: ["0x7F", "0xFFFFFF81"] 119 - values: ["-0x7F", "0x7F"] 120 - values: ["0x80", "0x80"] 121 - values: ["-0x80", "0x80"] 122 - values: ["0xFF", "0x1"] 123 - values: ["-0xFF", "0xFFFFFFFF"] 124 125 126 - file-name: op_imm_8_pmax 127 isa: 128 instructions: 129 - sig: muli imm:i32 130 acc: inout:i32 131 format: [op_imm_8] 132 code-template: | 133 # 134 ldai 0x7FFFFFFF 135 muli %s 136 movi v0, %s 137 jne v0, set_failure 138 ldai 0 139 return 140 set_failure: 141 ldai 1 142 return 143 check-type: none 144 description: Check `muli` with +max and various values. 145 cases: 146 - values: ["0", "0x0"] 147 - values: ["1", "0x7FFFFFFF"] 148 - values: ["-1", "0x80000001"] 149 - values: ["0xF", "0x7FFFFFF1"] 150 - values: ["-0xF", "0x8000000F"] 151 - values: ["0x7F", "0x7FFFFF81"] 152 - values: ["-0x7F", "0x8000007F"] 153 - values: ["0x80", "0x80"] 154 - values: ["-0x80", "0x80"] 155 - values: ["0xFF", "0x80000001"] 156 - values: ["-0xFF", "0x7FFFFFFF"] 157 158 159 - file-name: op_imm_8_nmax 160 isa: 161 instructions: 162 - sig: muli imm:i32 163 acc: inout:i32 164 format: [op_imm_8] 165 code-template: | 166 # 167 ldai -0x80000000 168 muli %s 169 movi v0, %s 170 jne v0, set_failure 171 ldai 0 172 return 173 set_failure: 174 ldai 1 175 return 176 check-type: none 177 description: Check `muli` with -max and various values. 178 cases: 179 - values: ["0", "0x0"] 180 - values: ["1", "0x80000000"] 181 - values: ["-1", "0x80000000"] 182 - values: ["0xF", "0x80000000"] 183 - values: ["-0xF", "0x80000000"] 184 - values: ["0x7F", "0x80000000"] 185 - values: ["-0x7F", "0x80000000"] 186 - values: ["0x80", "0x0"] 187 - values: ["-0x80", "0x0"] 188 - values: ["0xFF", "0x80000000"] 189 - values: ["-0xFF", "0x80000000"] 190 191 192 - file-name: vals 193 isa: 194 instructions: 195 - sig: muli imm:i32 196 acc: inout:i32 197 format: [op_imm_8] 198 code-template: | 199 # 200 ldai %s 201 muli %s 202 movi v0, %s 203 jne v0, set_failure 204 ldai 0 205 return 206 set_failure: 207 ldai 1 208 return 209 check-type: none 210 description: Check `muli` with various values. 211 cases: 212 - values: ["0xD6FE0B32", "0x88", "0x38EAC090"] 213 - values: ["0x13484A42", "0x9A", "0x513269B4"] 214 - values: ["0x7D62F544", "0xDE", "0x58DB6CF8"] 215 - values: ["0xAEBE9BAC", "0x3B", "0x45EDE0A4"] 216 - values: ["0xBE2A4011", "0x46", "0xFF8D84A6"] 217 - values: ["0x1853EB07", "0x3E", "0xE452EBB2"] 218 - values: ["0x756756C8", "0x1F", "0x37838238"] 219 - values: ["0x84F26D1", "0x8A", "0x2B841BAA"] 220 - values: ["0x87224E03", "0x94", "0xFD8716BC"] 221 - values: ["0x379F75A8", "0x10", "0x79F75A80"] 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 muli 0 237 check-type: exit-positive 238 description: Check 'muli' 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: muli imm:i32 265 acc: inout:i32 266 format: [op_imm_8] 267 description: Check 'muli' with uninitialized accumulator. 268 tags: ['verifier'] 269 runner-options: ['verifier-failure', 'verifier-config'] 270 code-template: | 271 # 272 muli 0 273 check-type: exit-positive 274