# Copyright (c) 2021-2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. definitions: [] tests: - file-name: 'inci' isa: title: Increment register with immediate description: > Increment virtual register by specified immediate. Immediate is sign extended to operand size. exceptions: - x_none commands: - file-name: 'op_v_4_imm_4_zero' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] code-template: | # movi v0, 0 inci v0, %s ldai %s jne v0, set_failure ldai 0 return set_failure: ldai 1 return check-type: none description: Check 'inci' with various values. cases: - values: ['0', '0x0'] - values: ['1', '0x1'] - values: ['-1', '0xFFFFFFFF'] - values: ['0x7', '0x7'] - values: ['-0x7', '0xFFFFFFF9'] - values: ['0x8', '0xFFFFFFF8'] - values: ['-0x8', '0xFFFFFFF8'] - values: ['0xF', '0xFFFFFFFF'] - values: ['-0xF', '0x1'] - file-name: 'op_v_4_imm_4_pone' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] code-template: | # movi v0, 1 inci v0, %s ldai %s jne v0, set_failure ldai 0 return set_failure: ldai 1 return check-type: none description: Check 'inci' with various values. cases: - values: ['0', '0x1'] - values: ['1', '0x2'] - values: ['-1', '0'] - values: ['0x7', '0x8'] - values: ['-0x7', '0xFFFFFFFA'] - values: ['0x8', '0xFFFFFFF9'] - values: ['-0x8', '0xFFFFFFF9'] - values: ['0xF', '0'] - values: ['-0xF', '0x2'] - file-name: 'op_v_4_imm_4_none' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] code-template: | # movi v0, -1 inci v0, %s ldai %s jne v0, set_failure ldai 0 return set_failure: ldai 1 return check-type: none description: Check 'inci' with various values. cases: - values: ['0', '0xFFFFFFFF'] - values: ['1', '0'] - values: ['-1', '0xFFFFFFFE'] - values: ['0x7', '0x6'] - values: ['-0x7', '0xFFFFFFF8'] - values: ['0x8', '0xFFFFFFF7'] - values: ['-0x8', '0xFFFFFFF7'] - values: ['0xF', '0xFFFFFFFE'] - values: ['-0xF', '0'] - file-name: 'op_v_4_imm_4_pmax' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] code-template: | # movi v0, 0x7FFFFFFF inci v0, %s ldai %s jne v0, set_failure ldai 0 return set_failure: ldai 1 return check-type: none description: Check `inci` with various values. cases: - values: ["0", "0x7FFFFFFF"] - values: ["1", "0x80000000"] tags: [sanitizer-fail] - values: ["-1", "0x7FFFFFFE"] - values: ["0x7", "0x80000006"] tags: [sanitizer-fail] - values: ["-0x7", "0x7FFFFFF8"] - values: ["0x8", "0x7FFFFFF7"] - values: ["-0x8", "0x7FFFFFF7"] - values: ["0xF", "0x7FFFFFFE"] - values: ["-0xF", "0x80000000"] tags: [sanitizer-fail] - file-name: 'op_v_4_imm_4_nmax' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] code-template: | # movi v0, 0x80000000 inci v0, %s ldai %s jne v0, set_failure ldai 0 return set_failure: ldai 1 return check-type: none description: Check `inci` with various values. cases: - values: ["0", "0x80000000"] - values: ["1", "0x80000001"] - values: ["-1", "0x7FFFFFFF"] tags: [sanitizer-fail] - values: ["0x7", "0x80000007"] - values: ["-0x7", "0x7FFFFFF9"] tags: [sanitizer-fail] - values: ["0x8", "0x7FFFFFF8"] tags: [sanitizer-fail] - values: ["-0x8", "0x7FFFFFF8"] tags: [sanitizer-fail] - values: ["0xF", "0x7FFFFFFF"] tags: [sanitizer-fail] - values: ["-0xF", "0x80000001"] - file-name: 'values' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] code-template: | # movi v0, %s inci v0, %s movi v1, %s lda v0 jne v0, set_failure ldai 0 return set_failure: ldai 1 return check-type: none description: Check 'inci' with various values. tags: ['tsan'] cases: - values: ['0x527DF0C9', '0x7', '0x527DF0D0'] - values: ['0xF4D85C6B', '0x0', '0xF4D85C6B'] - values: ['0xE1A513C2', '0x5', '0xE1A513C7'] - values: ['0x22587543', '0xF', '0x22587542'] - values: ['0xAC2F0564', '0x0', '0xAC2F0564'] - values: ['0x789DD1C7', '0xD', '0x789DD1C4'] - values: ['0xF2945867', '0xA', '0xF2945861'] - values: ['0xCAF110C4', '0x5', '0xCAF110C9'] - values: ['0x36A6B239', '0x4', '0x36A6B23D'] - values: ['0xA9C7A3F1', '0x4', '0xA9C7A3F5'] - values: ['0x76A8E402', '0xE', '0x76A8E400'] - values: ['0xB7BFCE38', '0xF', '0xB7BFCE37'] - values: ['0x78E8FD86', '0xC', '0x78E8FD82'] - values: ['0xAC15926', '0x0', '0xAC15926'] - values: ['0x49CC307D', '0x7', '0x49CC3084'] - values: ['0xAB00FCF5', '0x6', '0xAB00FCFB'] - values: ['0x36863547', '0x3', '0x3686354A'] - values: ['0x6AFD4EF', '0xC', '0x6AFD4EB'] - values: ['0x41941827', '0x4', '0x4194182B'] - values: ['0x2FFB422A', '0xA', '0x2FFB4224'] - file-name: 'regs' isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] runner-options: ['compile-only'] code-template: | # inci %s, 0 check-type: none description: Check 'inci' with various register numbers. cases: - values: ['v0'] - values: ['v1'] - values: ['v15'] - values: ['v16'] runner-options: ['compile-failure'] - file-name: 'type' isa: verification: - v1_i32 bugid: ['964', '1653'] tags: ['verifier'] description: | Check 'inci' with incorrect register type. Load different values (objects, strings, types, 64-bit floating point values, 64-bit integer values) in register and invoke 'inci'. header-template: [] code-template: | .record panda.Object .record B {} .function i32 main() { %s inci v0, 1 check-type: exit-positive runner-options: ['verifier-failure', 'verifier-config'] cases: - values: - movi.64 v0, 0 - values: - fmovi v0, 0 - values: - fmovi.64 v0, 0 - values: - newobj v0, B - values: - | # lda.type B sta.obj v0 - values: - | # lda.type B[] sta.obj v0 - values: - | # lda.type panda.Object sta.obj v0 - values: - | # movi v0, 10 newarr v0, v0, i32[] - values: - mov.null v0 - file-name: uninitialized_reg isa: instructions: - sig: inci v:inout:i32, imm:i32 acc: none format: [op_v_4_imm_4] description: Check 'inci' with uninitialized register. tags: ['verifier'] runner-options: ['verifier-failure', 'verifier-config'] code-template: | # inci v0, 2 check-type: exit-positive