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 14definitions: [] 15tests: 16 - file-name: "inci" 17 isa: 18 title: Increment register with immediate 19 description: > 20 Increment virtual register by specified immediate. Immediate is sign extended to operand size. 21 exceptions: 22 - x_none 23 commands: 24 - file-name: "op_v_4_imm_4_zero" 25 isa: 26 instructions: 27 - sig: inci v:inout:i32, imm:i32 28 acc: none 29 format: [op_v_4_imm_4] 30 code-template: | 31 # 32 movi v0, 0 33 inci v0, %s 34 ldai %s 35 jne v0, set_failure 36 ldai 0 37 jmp fall_through 38 set_failure: 39 ldai 1 40 fall_through: 41 42 description: Check `inci` with various values. 43 cases: 44 - values: ["0", "0x0"] 45 - values: ["1", "0x1"] 46 - values: ["-1", "0xFFFFFFFF"] 47 - values: ["0x7", "0x7"] 48 - values: ["-0x7", "0xFFFFFFF9"] 49 - values: ["0x8", "0xFFFFFFF8"] 50 - values: ["-0x8", "0xFFFFFFF8"] 51 - values: ["0xF", "0xFFFFFFFF"] 52 - values: ["-0xF", "0x1"] 53 54 # The following tests truncates first argument to imm4 size. 55 - values: ["0xF1", "1"] 56 - values: ["-0xF1", "-1"] 57 - values: ["0xF7", "7"] 58 - values: ["-0xF7", "-7"] 59 - values: ["0xF8", "-8"] 60 - values: ["-0xF8", "-8"] 61 - values: ["0xFF", "-1"] 62 - values: ["-0xFF", "1"] 63 - values: ["0xFFFF", "-1"] 64 - values: ["-0xFFFF", "1"] 65 - values: ["0xFFFFFF", "-1"] 66 - values: ["-0xFFFFFF", "1"] 67 - values: ["0xFFFFFFFF", "-1"] 68 - values: ["-0xFFFFFFFF", "1"] 69 70 - file-name: "op_v_4_imm_4_pone" 71 isa: 72 instructions: 73 - sig: inci v:inout:i32, imm:i32 74 acc: none 75 format: [op_v_4_imm_4] 76 code-template: | 77 # 78 movi v0, 1 79 inci v0, %s 80 ldai %s 81 jne v0, set_failure 82 ldai 0 83 jmp fall_through 84 set_failure: 85 ldai 1 86 fall_through: 87 description: Check `inci` with various values. 88 cases: 89 - values: ["0", "0x1"] 90 - values: ["1", "0x2"] 91 - values: ["-1", "0"] 92 - values: ["0x7", "0x8"] 93 - values: ["-0x7", "0xFFFFFFFA"] 94 - values: ["0x8", "0xFFFFFFF9"] 95 - values: ["-0x8", "0xFFFFFFF9"] 96 - values: ["0xF", "0"] 97 - values: ["-0xF", "0x2"] 98 - file-name: "op_v_4_imm_4_none" 99 isa: 100 instructions: 101 - sig: inci v:inout:i32, imm:i32 102 acc: none 103 format: [op_v_4_imm_4] 104 code-template: | 105 # 106 movi v0, -1 107 inci v0, %s 108 ldai %s 109 jne v0, set_failure 110 ldai 0 111 jmp fall_through 112 set_failure: 113 ldai 1 114 fall_through: 115 description: Check `inci` with various values. 116 cases: 117 - values: ["0", "0xFFFFFFFF"] 118 - values: ["1", "0"] 119 - values: ["-1", "0xFFFFFFFE"] 120 - values: ["0x7", "0x6"] 121 - values: ["-0x7", "0xFFFFFFF8"] 122 - values: ["0x8", "0xFFFFFFF7"] 123 - values: ["-0x8", "0xFFFFFFF7"] 124 - values: ["0xF", "0xFFFFFFFE"] 125 - values: ["-0xF", "0"] 126 127 - file-name: "op_v_4_imm_4_pmax" 128 isa: 129 instructions: 130 - sig: inci v:inout:i32, imm:i32 131 acc: none 132 format: [op_v_4_imm_4] 133 code-template: | 134 # 135 movi v0, 0x7FFFFFFF 136 inci v0, %s 137 ldai %s 138 jne v0, set_failure 139 ldai 0 140 jmp fall_through 141 set_failure: 142 ldai 1 143 fall_through: 144 description: Check `inci` with various values. 145 tags: ['clang_release_sanitizer'] 146 cases: 147 - values: ["0", "0x7FFFFFFF"] 148 - values: ["1", "0x80000000"] 149 - values: ["-1", "0x7FFFFFFE"] 150 - values: ["0x7", "0x80000006"] 151 - values: ["-0x7", "0x7FFFFFF8"] 152 - values: ["0x8", "0x7FFFFFF7"] 153 - values: ["-0x8", "0x7FFFFFF7"] 154 - values: ["0xF", "0x7FFFFFFE"] 155 - values: ["-0xF", "0x80000000"] 156 157 - file-name: "op_v_4_imm_4_nmax" 158 isa: 159 instructions: 160 - sig: inci v:inout:i32, imm:i32 161 acc: none 162 format: [op_v_4_imm_4] 163 code-template: | 164 # 165 movi v0, 0x80000000 166 inci v0, %s 167 ldai %s 168 jne v0, set_failure 169 ldai 0 170 jmp fall_through 171 set_failure: 172 ldai 1 173 fall_through: 174 description: Check `inci` with various values. 175 tags: ['clang_release_sanitizer'] 176 cases: 177 - values: ["0", "0x80000000"] 178 - values: ["1", "0x80000001"] 179 - values: ["-1", "0x7FFFFFFF"] 180 - values: ["0x7", "0x80000007"] 181 - values: ["-0x7", "0x7FFFFFF9"] 182 - values: ["0x8", "0x7FFFFFF8"] 183 - values: ["-0x8", "0x7FFFFFF8"] 184 - values: ["0xF", "0x7FFFFFFF"] 185 - values: ["-0xF", "0x80000001"] 186 187 - file-name: "values" 188 isa: 189 instructions: 190 - sig: inci v:inout:i32, imm:i32 191 acc: none 192 format: [op_v_4_imm_4] 193 code-template: | 194 # 195 movi v0, %s 196 inci v0, %s 197 movi v1, %s 198 lda v0 199 jne v0, set_failure 200 ldai 0 201 jmp fall_through 202 set_failure: 203 ldai 1 204 fall_through: 205 206 description: Check `inci` with various values. 207 tags: ['tsan'] 208 cases: 209 - values: ["0x527DF0C9", "0x810768F7", "0x527DF0D0"] 210 - values: ["0xF4D85C6B", "0x6A4FAA10", "0xF4D85C6B"] 211 - values: ["0xE1A513C2", "0x441A43A5", "0xE1A513C7"] 212 - values: ["0x22587543", "0xC0315D2F", "0x22587542"] 213 - values: ["0xAC2F0564", "0x4184FBB0", "0xAC2F0564"] 214 - values: ["0x789DD1C7", "0x785F2B4D", "0x789DD1C4"] 215 - values: ["0xF2945867", "0x9E7905DA", "0xF2945861"] 216 - values: ["0xCAF110C4", "0xD75B995", "0xCAF110C9"] 217 - values: ["0x36A6B239", "0x673DF774", "0x36A6B23D"] 218 - values: ["0xA9C7A3F1", "0xB6A9ED44", "0xA9C7A3F5"] 219 - values: ["0x76A8E402", "0xDC74D94E", "0x76A8E400"] 220 - values: ["0xB7BFCE38", "0x9C079C1F", "0xB7BFCE37"] 221 - values: ["0x78E8FD86", "0xCABD40FC", "0x78E8FD82"] 222 - values: ["0xAC15926", "0xFE5CF7C0", "0xAC15926"] 223 - values: ["0x49CC307D", "0xDC493657", "0x49CC3084"] 224 - values: ["0xAB00FCF5", "0xD97A5566", "0xAB00FCFB"] 225 - values: ["0x36863547", "0xB57C2433", "0x3686354A"] 226 - values: ["0x6AFD4EF", "0x70D9AA3C", "0x6AFD4EB"] 227 - values: ["0x41941827", "0x211BB144", "0x4194182B"] 228 - values: ["0x2FFB422A", "0xCB5D991A", "0x2FFB4224"] 229 230 - file-name: "regs" 231 isa: 232 instructions: 233 - sig: inci v:inout:i32, imm:i32 234 acc: none 235 format: [op_v_4_imm_4] 236 runner-options: ['compile-only'] 237 code-template: | 238 # 239 inci %s, 0 240 check-type: none 241 description: Check `inci` with various register numbers. 242 cases: 243 - values: ["v0"] 244 - values: ["v1"] 245 - values: ["v15"] 246 - values: ["v16"] 247 runner-options: ['compile-failure'] 248 249 - file-name: "type" 250 isa: 251 instructions: 252 - sig: inci v:inout:i32, imm:i32 253 acc: none 254 format: [op_v_4_imm_4] 255 verification: 256 - v1_i32 257 bugid: ["964", "1653"] 258 tags: ["verifier"] 259 description: | 260 Check `inci` with incorrect accumulator type. 261 Load different values (objects, strings, types, 64-bit floating point values, 64-bit integer values) and invokes `inci`. 262 Return 0 to indicate that negative test failed, because this line is unreachable and code will not be executed after verification error. 263 code-template: | 264 # 265 %s 266 inci v0, 1 267 ldai 0 268 return 269 check-type: none 270 runner-options: ['verifier-failure', 'verifier-debug-config'] 271 cases: 272 - values: [mov.null v0] 273 - values: 274 - | 275 # 276 lda.str "" 277 sta v0 278 - values: 279 - | 280 # 281 lda.str "some string" 282 sta v0 283 - values: ["fmovi.64 v0, 0.0"] 284 - values: ["fmovi.64 v0, -0.0"] 285 - values: ["fmovi.64 v0, 1.0"] 286 - values: ["fmovi.64 v0, -1.0"] 287 - values: ["fmovi.64 v0, 0x7FF8000000000000"] 288 - values: ["fmovi.64 v0, 0xFFFFFFFFFFFFFFFF"] 289 - values: ["fmovi.64 v0, 0x7FF0000000000000"] 290 - values: ["fmovi.64 v0, 0xFFF0000000000000"] 291 - values: ["fmovi.64 v0, 0xffefffffffffffff"] 292 - values: ["fmovi.64 v0, 0x7fefffffffffffff"] 293 - values: ["fmovi.64 v0, 0x0000000000000001"] 294 - values: ["fmovi.64 v0, 0x8000000000000001"] 295 - values: ["fmovi.64 v0, 3.14159265358979323846"] 296 - values: ["fmovi.64 v0, 0.0"] 297 - values: ["fmovi.64 v0, -0.0"] 298 - values: ["fmovi.64 v0, 1.0"] 299 - values: ["fmovi.64 v0, -1.0"] 300 - values: ["fmovi.64 v0, 0x7FF8000000000000"] 301 - values: ["fmovi.64 v0, 0xFFFFFFFFFFFFFFFF"] 302 - values: ["fmovi.64 v0, 0x7FF0000000000000"] 303 - values: ["fmovi.64 v0, 0xFFF0000000000000"] 304 - values: ["fmovi.64 v0, 0xffefffffffffffff"] 305 - values: ["fmovi.64 v0, 0x7fefffffffffffff"] 306 - values: ["fmovi.64 v0, 0x0000000000000001"] 307 - values: ["fmovi.64 v0, 0x8000000000000001"] 308 - values: ["fmovi.64 v0, 3.14159265358979323846"] 309 - values: ["movi.64 v0, 0"] 310 - values: ["movi.64 v0, 1"] 311 - values: ["movi.64 v0, -1"] 312 - values: ["movi.64 v0, 0x0000000100000000"] 313 - values: ["movi.64 v0, -0x0000000100000000"] 314 - values: ["movi.64 v0, 0x0000000080000000"] 315 - values: ["movi.64 v0, -0x0000000080000000"] 316 - values: ["movi.64 v0, 0x7FFFFFFFFFFFFFFF"] 317 - values: ["movi.64 v0, -0x7FFFFFFFFFFFFFFF"] 318 - values: ["movi.64 v0, 0x1000000000000000"] 319 - values: ["movi.64 v0, 0x8000000000000000"] 320 - values: ["movi.64 v0, 0xF000000000000000"] 321 - values: ["movi.64 v0, 0xFFFFFFFF00000000"] 322 - values: ["movi.64 v0, 0xFFFFFFFFFFFFFFFF"] 323 - values: ["movi.64 v0, -0x1000000000000000"] 324 - values: ["movi.64 v0, -0x8000000000000000"] 325 - values: ["movi.64 v0, -0xF000000000000000"] 326 - values: ["movi.64 v0, -0xFFFFFFFF00000000"] 327 - values: ["movi.64 v0, -0xFFFFFFFFFFFFFFFF"] 328 329 - file-name: "type_obj" 330 isa: 331 instructions: 332 - sig: inci v:inout:i32, imm:i32 333 acc: none 334 format: [op_v_4_imm_4] 335 verification: 336 - v1_i32 337 bugid: ["964"] 338 tags: ["verifier"] 339 description: | 340 Check `inci` with incorrect accumulator type. 341 Load different values (objects, strings, types, 64-bit floating point values, 64-bit integer values) and invokes `inci`. 342 Return 0 to indicate that negative test failed, because this line is unreachable and code will not be executed after verification error. 343 code-template: | 344 # 345 .record Object {} 346 .function i32 main() { 347 %s 348 inci v0, 1 349 ldai 0 350 return 351 check-type: none 352 runner-options: ['verifier-failure', 'verifier-debug-config'] 353 header-template: [] 354 cases: 355 - values: 356 - | 357 lda.type Object 358 sta v0 359 - values: 360 - newobj v0, Object 361