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 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 return 38 set_failure: 39 ldai 1 40 return 41 check-type: none 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 - file-name: 'op_v_4_imm_4_pone' 55 isa: 56 instructions: 57 - sig: inci v:inout:i32, imm:i32 58 acc: none 59 format: [op_v_4_imm_4] 60 code-template: | 61 # 62 movi v0, 1 63 inci v0, %s 64 ldai %s 65 jne v0, set_failure 66 ldai 0 67 return 68 set_failure: 69 ldai 1 70 return 71 check-type: none 72 description: Check 'inci' with various values. 73 cases: 74 - values: ['0', '0x1'] 75 - values: ['1', '0x2'] 76 - values: ['-1', '0'] 77 - values: ['0x7', '0x8'] 78 - values: ['-0x7', '0xFFFFFFFA'] 79 - values: ['0x8', '0xFFFFFFF9'] 80 - values: ['-0x8', '0xFFFFFFF9'] 81 - values: ['0xF', '0'] 82 - values: ['-0xF', '0x2'] 83 84 - file-name: 'op_v_4_imm_4_none' 85 isa: 86 instructions: 87 - sig: inci v:inout:i32, imm:i32 88 acc: none 89 format: [op_v_4_imm_4] 90 code-template: | 91 # 92 movi v0, -1 93 inci v0, %s 94 ldai %s 95 jne v0, set_failure 96 ldai 0 97 return 98 set_failure: 99 ldai 1 100 return 101 check-type: none 102 description: Check 'inci' with various values. 103 cases: 104 - values: ['0', '0xFFFFFFFF'] 105 - values: ['1', '0'] 106 - values: ['-1', '0xFFFFFFFE'] 107 - values: ['0x7', '0x6'] 108 - values: ['-0x7', '0xFFFFFFF8'] 109 - values: ['0x8', '0xFFFFFFF7'] 110 - values: ['-0x8', '0xFFFFFFF7'] 111 - values: ['0xF', '0xFFFFFFFE'] 112 - values: ['-0xF', '0'] 113 114 - file-name: 'op_v_4_imm_4_pmax' 115 isa: 116 instructions: 117 - sig: inci v:inout:i32, imm:i32 118 acc: none 119 format: [op_v_4_imm_4] 120 code-template: | 121 # 122 movi v0, 0x7FFFFFFF 123 inci v0, %s 124 ldai %s 125 jne v0, set_failure 126 ldai 0 127 return 128 set_failure: 129 ldai 1 130 return 131 check-type: none 132 description: Check `inci` with various values. 133 cases: 134 - values: ["0", "0x7FFFFFFF"] 135 - values: ["1", "0x80000000"] 136 tags: [sanitizer-fail] 137 - values: ["-1", "0x7FFFFFFE"] 138 - values: ["0x7", "0x80000006"] 139 tags: [sanitizer-fail] 140 - values: ["-0x7", "0x7FFFFFF8"] 141 - values: ["0x8", "0x7FFFFFF7"] 142 - values: ["-0x8", "0x7FFFFFF7"] 143 - values: ["0xF", "0x7FFFFFFE"] 144 - values: ["-0xF", "0x80000000"] 145 tags: [sanitizer-fail] 146 147 - file-name: 'op_v_4_imm_4_nmax' 148 isa: 149 instructions: 150 - sig: inci v:inout:i32, imm:i32 151 acc: none 152 format: [op_v_4_imm_4] 153 code-template: | 154 # 155 movi v0, 0x80000000 156 inci v0, %s 157 ldai %s 158 jne v0, set_failure 159 ldai 0 160 return 161 set_failure: 162 ldai 1 163 return 164 check-type: none 165 description: Check `inci` with various values. 166 cases: 167 - values: ["0", "0x80000000"] 168 - values: ["1", "0x80000001"] 169 - values: ["-1", "0x7FFFFFFF"] 170 tags: [sanitizer-fail] 171 - values: ["0x7", "0x80000007"] 172 - values: ["-0x7", "0x7FFFFFF9"] 173 tags: [sanitizer-fail] 174 - values: ["0x8", "0x7FFFFFF8"] 175 tags: [sanitizer-fail] 176 - values: ["-0x8", "0x7FFFFFF8"] 177 tags: [sanitizer-fail] 178 - values: ["0xF", "0x7FFFFFFF"] 179 tags: [sanitizer-fail] 180 - values: ["-0xF", "0x80000001"] 181 182 - file-name: 'values' 183 isa: 184 instructions: 185 - sig: inci v:inout:i32, imm:i32 186 acc: none 187 format: [op_v_4_imm_4] 188 code-template: | 189 # 190 movi v0, %s 191 inci v0, %s 192 movi v1, %s 193 lda v0 194 jne v0, set_failure 195 ldai 0 196 return 197 set_failure: 198 ldai 1 199 return 200 check-type: none 201 description: Check 'inci' with various values. 202 tags: ['tsan'] 203 cases: 204 - values: ['0x527DF0C9', '0x7', '0x527DF0D0'] 205 - values: ['0xF4D85C6B', '0x0', '0xF4D85C6B'] 206 - values: ['0xE1A513C2', '0x5', '0xE1A513C7'] 207 - values: ['0x22587543', '0xF', '0x22587542'] 208 - values: ['0xAC2F0564', '0x0', '0xAC2F0564'] 209 - values: ['0x789DD1C7', '0xD', '0x789DD1C4'] 210 - values: ['0xF2945867', '0xA', '0xF2945861'] 211 - values: ['0xCAF110C4', '0x5', '0xCAF110C9'] 212 - values: ['0x36A6B239', '0x4', '0x36A6B23D'] 213 - values: ['0xA9C7A3F1', '0x4', '0xA9C7A3F5'] 214 - values: ['0x76A8E402', '0xE', '0x76A8E400'] 215 - values: ['0xB7BFCE38', '0xF', '0xB7BFCE37'] 216 - values: ['0x78E8FD86', '0xC', '0x78E8FD82'] 217 - values: ['0xAC15926', '0x0', '0xAC15926'] 218 - values: ['0x49CC307D', '0x7', '0x49CC3084'] 219 - values: ['0xAB00FCF5', '0x6', '0xAB00FCFB'] 220 - values: ['0x36863547', '0x3', '0x3686354A'] 221 - values: ['0x6AFD4EF', '0xC', '0x6AFD4EB'] 222 - values: ['0x41941827', '0x4', '0x4194182B'] 223 - values: ['0x2FFB422A', '0xA', '0x2FFB4224'] 224 225 - file-name: 'regs' 226 isa: 227 instructions: 228 - sig: inci v:inout:i32, imm:i32 229 acc: none 230 format: [op_v_4_imm_4] 231 runner-options: ['compile-only'] 232 code-template: | 233 # 234 inci %s, 0 235 check-type: none 236 description: Check 'inci' with various register numbers. 237 cases: 238 - values: ['v0'] 239 - values: ['v1'] 240 - values: ['v15'] 241 - values: ['v16'] 242 runner-options: ['compile-failure'] 243 244 - file-name: 'type' 245 isa: 246 verification: 247 - v1_i32 248 bugid: ['964', '1653'] 249 tags: ['verifier'] 250 description: | 251 Check 'inci' with incorrect register type. 252 Load different values (objects, strings, types, 64-bit floating point values, 64-bit integer values) in register and invoke 'inci'. 253 header-template: [] 254 code-template: | 255 .record panda.Object <external> 256 .record B {} 257 .function i32 main() { 258 %s 259 inci v0, 1 260 check-type: exit-positive 261 runner-options: ['verifier-failure', 'verifier-config'] 262 cases: 263 - values: 264 - movi.64 v0, 0 265 - values: 266 - fmovi v0, 0 267 - values: 268 - fmovi.64 v0, 0 269 - values: 270 - newobj v0, B 271 - values: 272 - | 273 # 274 lda.type B 275 sta.obj v0 276 - values: 277 - | 278 # 279 lda.type B[] 280 sta.obj v0 281 - values: 282 - | 283 # 284 lda.type panda.Object 285 sta.obj v0 286 - values: 287 - | 288 # 289 movi v0, 10 290 newarr v0, v0, i32[] 291 - values: 292 - mov.null v0 293 294 - file-name: uninitialized_reg 295 isa: 296 instructions: 297 - sig: inci v:inout:i32, imm:i32 298 acc: none 299 format: [op_v_4_imm_4] 300 description: Check 'inci' with uninitialized register. 301 tags: ['verifier'] 302 runner-options: ['verifier-failure', 'verifier-config'] 303 code-template: | 304 # 305 inci v0, 2 306 check-type: exit-positive 307