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: 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 jmp fall_through 40 set_failure: 41 ldai 1 42 fall_through: 43 description: Check `muli` with zero and various values. 44 tags: ['tsan'] 45 cases: 46 - values: ["0"] 47 - values: ["1"] 48 - values: ["-1"] 49 - values: ["0xF"] 50 - values: ["-0xF"] 51 - values: ["0x7F"] 52 - values: ["-0x7F"] 53 - values: ["0x80"] 54 - values: ["-0x80"] 55 - values: ["0xFF"] 56 - values: ["-0xFF"] 57 - values: ["0x7FFFFFFF"] 58 - values: ["-0x7FFFFFFF"] 59 - values: ["0x80000000"] 60 - values: ["-0x80000000"] 61 - values: ["0xFFFFFFFF"] 62 - values: ["-0xFFFFFFFF"] 63 - file-name: op_imm_8_pone 64 isa: 65 instructions: 66 - sig: muli imm:i32 67 acc: inout:i32 68 format: [op_imm_8] 69 code-template: | 70 # 71 ldai 1 72 muli %s 73 movi v0, %s 74 jne v0, set_failure 75 ldai 0 76 jmp fall_through 77 set_failure: 78 ldai 1 79 fall_through: 80 description: Check `muli` with +1 and various values. 81 cases: 82 - values: ["0", "0x0"] 83 - values: ["1", "0x1"] 84 - values: ["-1", "0xFFFFFFFF"] 85 - values: ["0xF", "0xF"] 86 - values: ["-0xF", "0xFFFFFFF1"] 87 - values: ["0x7F", "0x7F"] 88 - values: ["-0x7F", "0xFFFFFF81"] 89 - values: ["0x80", "0xFFFFFF80"] 90 - values: ["-0x80", "0xFFFFFF80"] 91 - values: ["0xFF", "0xFFFFFFFF"] 92 - values: ["-0xFF", "0x1"] 93 - values: ["0x7FFFFFFF", "0xFFFFFFFF"] 94 - values: ["-0x7FFFFFFF", "0x1"] 95 - values: ["0x80000000", "0x0"] 96 - values: ["-0x80000000", "0x0"] 97 - values: ["0xFFFFFFFF", "0xFFFFFFFF"] 98 - values: ["-0xFFFFFFFF", "0x1"] 99 - file-name: op_imm_8_none 100 isa: 101 instructions: 102 - sig: muli imm:i32 103 acc: inout:i32 104 format: [op_imm_8] 105 code-template: | 106 # 107 ldai -1 108 muli %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 `muli` with -1 and various values. 117 cases: 118 - values: ["0", "0x0"] 119 - values: ["1", "0xFFFFFFFF"] 120 - values: ["-1", "0x1"] 121 - values: ["0xF", "0xFFFFFFF1"] 122 - values: ["-0xF", "0xF"] 123 - values: ["0x7F", "0xFFFFFF81"] 124 - values: ["-0x7F", "0x7F"] 125 - values: ["0x80", "0x80"] 126 - values: ["-0x80", "0x80"] 127 - values: ["0xFF", "0x1"] 128 - values: ["-0xFF", "0xFFFFFFFF"] 129 - values: ["0x7FFFFFFF", "0x1"] 130 - values: ["-0x7FFFFFFF", "0xFFFFFFFF"] 131 - values: ["0x80000000", "0x0"] 132 - values: ["-0x80000000", "0x0"] 133 - values: ["0xFFFFFFFF", "0x1"] 134 - values: ["-0xFFFFFFFF", "0xFFFFFFFF"] 135 - file-name: op_imm_8_pmax 136 isa: 137 instructions: 138 - sig: muli imm:i32 139 acc: inout:i32 140 format: [op_imm_8] 141 code-template: | 142 # 143 ldai 0x7FFFFFFF 144 muli %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 `muli` with +max and various values. 153 cases: 154 - values: ["0", "0x0"] 155 - values: ["1", "0x7FFFFFFF"] 156 - values: ["-1", "0x80000001"] 157 - values: ["0xF", "0x7FFFFFF1"] 158 - values: ["-0xF", "0x8000000F"] 159 - values: ["0x7F", "0x7FFFFF81"] 160 - values: ["-0x7F", "0x8000007F"] 161 - values: ["0x80", "0x80"] 162 - values: ["-0x80", "0x80"] 163 - values: ["0xFF", "0x80000001"] 164 - values: ["-0xFF", "0x7FFFFFFF"] 165 - values: ["0x7FFFFFFF", "0x80000001"] 166 - values: ["-0x7FFFFFFF", "0x7FFFFFFF"] 167 - values: ["0x80000000", "0x0"] 168 - values: ["-0x80000000", "0x0"] 169 - values: ["0xFFFFFFFF", "0x80000001"] 170 - values: ["-0xFFFFFFFF", "0x7FFFFFFF"] 171 - file-name: op_imm_8_nmax 172 isa: 173 instructions: 174 - sig: muli imm:i32 175 acc: inout:i32 176 format: [op_imm_8] 177 code-template: | 178 # 179 ldai -0x80000000 180 muli %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 `muli` with -max and various values. 189 cases: 190 - values: ["0", "0x0"] 191 - values: ["1", "0x80000000"] 192 - values: ["-1", "0x80000000"] 193 - values: ["0xF", "0x80000000"] 194 - values: ["-0xF", "0x80000000"] 195 - values: ["0x7F", "0x80000000"] 196 - values: ["-0x7F", "0x80000000"] 197 - values: ["0x80", "0x0"] 198 - values: ["-0x80", "0x0"] 199 - values: ["0xFF", "0x80000000"] 200 - values: ["-0xFF", "0x80000000"] 201 - values: ["0x7FFFFFFF", "0x80000000"] 202 - values: ["-0x7FFFFFFF", "0x80000000"] 203 - values: ["0x80000000", "0x0"] 204 - values: ["-0x80000000", "0x0"] 205 - values: ["0xFFFFFFFF", "0x80000000"] 206 - values: ["-0xFFFFFFFF", "0x80000000"] 207 - file-name: vals 208 isa: 209 instructions: 210 - sig: muli imm:i32 211 acc: inout:i32 212 format: [op_imm_8] 213 code-template: | 214 # 215 ldai %s 216 muli %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 `muli` with various values. 225 cases: 226 - values: ["0xD6FE0B32", "0x52C2D788", "0x38EAC090"] 227 - values: ["0x13484A42", "0x8CF4E79A", "0x513269B4"] 228 - values: ["0x7D62F544", "0x8A43C6DE", "0x58DB6CF8"] 229 - values: ["0xAEBE9BAC", "0xABAFF53B", "0x45EDE0A4"] 230 - values: ["0xBE2A4011", "0x214B3746", "0xFF8D84A6"] 231 - values: ["0x1853EB07", "0x847B8C3E", "0xE452EBB2"] 232 - values: ["0x756756C8", "0xA71CE01F", "0x37838238"] 233 - values: ["0x84F26D1", "0xFFF46D8A", "0x2B841BAA"] 234 - values: ["0x87224E03", "0x2950EF94", "0xFD8716BC"] 235 - values: ["0x379F75A8", "0x86F93610", "0x79F75A80"] 236 - file-name: type 237 bugid: ["964", "966"] 238 tags: ["verifier"] 239 isa: 240 instructions: 241 - sig: muli 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 muli 1 251 ldai 0 252 check-type: no-check 253 description: Check `muli` 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: muli 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 `muli` with incorrect accumulator type. 300 code-template: | 301 # 302 .record Object {} 303 .function i32 main() { 304 %s 305 muli 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