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: ashri 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: ashri imm:i32 30 acc: inout:i32 31 format: [op_imm_8] 32 code-template: | 33 # 34 ldai 0 35 ashri %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 `ashri` with zero and various values. 44 cases: 45 - values: ["0"] 46 - values: ["1"] 47 - values: ["-1"] 48 - values: ["0xF"] 49 - values: ["-0xF"] 50 - values: ["0x7F"] 51 - values: ["-0x7F"] 52 - values: ["0x80"] 53 - values: ["-0x80"] 54 - values: ["0xFF"] 55 - values: ["-0xFF"] 56 - values: ["0x7FFFFFFF"] 57 - values: ["-0x7FFFFFFF"] 58 - values: ["0x80000000"] 59 - values: ["-0x80000000"] 60 - values: ["0xFFFFFFFF"] 61 - values: ["-0xFFFFFFFF"] 62 - file-name: op_imm_8_pone 63 isa: 64 instructions: 65 - sig: ashri imm:i32 66 acc: inout:i32 67 format: [op_imm_8] 68 code-template: | 69 # 70 ldai 1 71 ashri %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 `ashri` with +1 and various values. 80 cases: 81 - values: ["0", "0x1"] 82 - values: ["1", "0x0"] 83 - values: ["-1", "0x0"] 84 - values: ["0xF", "0x0"] 85 - values: ["-0xF", "0x0"] 86 - values: ["0x7F", "0x0"] 87 - values: ["-0x7F", "0x0"] 88 - values: ["0x80", "0x1"] 89 - values: ["-0x80", "0x1"] 90 - values: ["0xFF", "0x0"] 91 - values: ["-0xFF", "0x0"] 92 - values: ["0x7FFFFFFF", "0x0"] 93 - values: ["-0x7FFFFFFF", "0x0"] 94 - values: ["0x80000000", "0x1"] 95 - values: ["-0x80000000", "0x1"] 96 - values: ["0xFFFFFFFF", "0x0"] 97 - values: ["-0xFFFFFFFF", "0x0"] 98 - file-name: op_imm_8_none 99 isa: 100 instructions: 101 - sig: ashri imm:i32 102 acc: inout:i32 103 format: [op_imm_8] 104 code-template: | 105 # 106 ldai -1 107 ashri %s 108 movi v0, 0xFFFFFFFF 109 jne v0, set_failure 110 ldai 0 111 jmp fall_through 112 set_failure: 113 ldai 1 114 fall_through: 115 description: Check `ashri` with -1 and various values. 116 cases: 117 - values: ["0"] 118 - values: ["1"] 119 - values: ["-1"] 120 - values: ["0xF"] 121 - values: ["-0xF"] 122 - values: ["0x7F"] 123 - values: ["-0x7F"] 124 - values: ["0x80"] 125 - values: ["-0x80"] 126 - values: ["0xFF"] 127 - values: ["-0xFF"] 128 - values: ["0x7FFFFFFF"] 129 - values: ["-0x7FFFFFFF"] 130 - values: ["0x80000000"] 131 - values: ["-0x80000000"] 132 - values: ["0xFFFFFFFF"] 133 - values: ["-0xFFFFFFFF"] 134 - file-name: op_imm_8_pmax 135 isa: 136 instructions: 137 - sig: ashri imm:i32 138 acc: inout:i32 139 format: [op_imm_8] 140 code-template: | 141 # 142 ldai 0x7FFFFFFF 143 ashri %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 `ashri` with +max and various values. 152 cases: 153 - values: ["0", "0x7FFFFFFF"] 154 - values: ["1", "0x3FFFFFFF"] 155 - values: ["-1", "0x0"] 156 - values: ["0xF", "0xFFFF"] 157 - values: ["-0xF", "0x3FFF"] 158 - values: ["0x7F", "0x0"] 159 - values: ["-0x7F", "0x3FFFFFFF"] 160 - values: ["0x80", "0x7FFFFFFF"] 161 - values: ["-0x80", "0x7FFFFFFF"] 162 - values: ["0xFF", "0x0"] 163 - values: ["-0xFF", "0x3FFFFFFF"] 164 - values: ["0x7FFFFFFF", "0x0"] 165 - values: ["-0x7FFFFFFF", "0x3FFFFFFF"] 166 - values: ["0x80000000", "0x7FFFFFFF"] 167 - values: ["-0x80000000", "0x7FFFFFFF"] 168 - values: ["0xFFFFFFFF", "0x0"] 169 - values: ["-0xFFFFFFFF", "0x3FFFFFFF"] 170 - file-name: op_imm_8_nmax 171 isa: 172 instructions: 173 - sig: ashri imm:i32 174 acc: inout:i32 175 format: [op_imm_8] 176 code-template: | 177 # 178 ldai -0x80000000 179 ashri %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 `ashri` with -max and various values. 188 cases: 189 - values: ["0", "0x80000000"] 190 - values: ["1", "0xC0000000"] 191 - values: ["-1", "0xFFFFFFFF"] 192 - values: ["0xF", "0xFFFF0000"] 193 - values: ["-0xF", "0xFFFFC000"] 194 - values: ["0x7F", "0xFFFFFFFF"] 195 - values: ["-0x7F", "0xC0000000"] 196 - values: ["0x80", "0x80000000"] 197 - values: ["-0x80", "0x80000000"] 198 - values: ["0xFF", "0xFFFFFFFF"] 199 - values: ["-0xFF", "0xC0000000"] 200 - values: ["0x7FFFFFFF", "0xFFFFFFFF"] 201 - values: ["-0x7FFFFFFF", "0xC0000000"] 202 - values: ["0x80000000", "0x80000000"] 203 - values: ["-0x80000000", "0x80000000"] 204 - values: ["0xFFFFFFFF", "0xFFFFFFFF"] 205 - values: ["-0xFFFFFFFF", "0xC0000000"] 206 - file-name: vals 207 isa: 208 instructions: 209 - sig: ashri imm:i32 210 acc: inout:i32 211 format: [op_imm_8] 212 code-template: | 213 # 214 ldai %s 215 ashri %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 `ashri` with various values. 224 tags: ['tsan'] 225 cases: 226 - values: ["0x47BC623", "0xEDBE3EF0", "0x47B"] 227 - values: ["0x98FF55FA", "0x38143937", "0xFFFFFF31"] 228 - values: ["0x4BFD9885", "0xBEDABE74", "0x4BF"] 229 - values: ["0xB2FC1EB6", "0x2958BE01", "0xD97E0F5B"] 230 - values: ["0x7E2C4D16", "0x2E3AE7C6", "0x1F8B134"] 231 - values: ["0xDEE4E62E", "0xBDDC2A01", "0xEF727317"] 232 - values: ["0x1BE3708A", "0x3D55538D", "0xDF1B"] 233 - values: ["0x15C646C2", "0xEA8C82F", "0x2B8C"] 234 - values: ["0xC86F8B23", "0x7C6E6DF", "0xFFFFFFFF"] 235 - values: ["0x978A9490", "0xD60732E9", "0xFFCBC54A"] 236 - file-name: type 237 bugid: ["964", "966"] 238 tags: ["verifier"] 239 isa: 240 instructions: 241 - sig: ashri 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 ashri 1 251 ldai 0 252 check-type: no-check 253 description: Check `ashri` 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: ashri 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 `ashri` with incorrect accumulator type. 300 code-template: | 301 # 302 .record Object {} 303 .function i32 main() { 304 %s 305 ashri 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