# 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: add isa: title: Three address binary operation description: Perform specified binary operation on two registers and store result into accumulator exceptions: - x_none commands: - file-name: op_vs1_4_vs2_4_zero isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, 0 movi v1, %s add v0, v1 movi v0, %s jne v0, set_failure ldai 0 jmp fall_through set_failure: ldai 1 fall_through: description: Check add with zero and various values. cases: - values: - '0' - '0' - values: - '1' - '1' - values: - "-1" - "-1" - values: - '0x7FFFFFFF' - '0x7FFFFFFF' - values: - '0x80000000' - '0x80000000' - values: - "-0x7FFFFFFF" - "-0x7FFFFFFF" - values: - "-0x80000000" - "-0x80000000" - values: - '0xFFFFFFFF' - '0xFFFFFFFF' - values: - "-0xFFFFFFFF" - "-0xFFFFFFFF" - file-name: op_vs1_4_vs2_4_pone isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, 1 movi v1, %s add v0, v1 movi v0, %s jne v0, set_failure ldai 0 jmp fall_through set_failure: ldai 1 fall_through: description: Check add with +1 and various values. cases: - values: - '0' - '1' - values: - '1' - '2' - values: - "-1" - '0' - values: - '0x7FFFFFFF' - '0x80000000' bugid: ["966"] - values: - '0x80000000' - '0x80000001' - values: - "-0x7FFFFFFF" - "-0x7FFFFFFE" - values: - "-0x80000000" - "-0x7FFFFFFF" - values: - '0xFFFFFFFF' - '0' - values: - "-0xFFFFFFFF" - "-0xFFFFFFFE" - file-name: op_vs1_4_vs2_4_none isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, -1 movi v1, %s add v0, v1 movi v0, %s jne v0, set_failure ldai 0 jmp fall_through set_failure: ldai 1 fall_through: description: Check add with -1 and various values. cases: - values: - '0' - "-1" - values: - '1' - '0' - values: - "-1" - "-2" - values: - '0x7FFFFFFF' - '0x7FFFFFFE' - values: - '0x80000000' - '0x7FFFFFFF' bugid: ["966"] - values: - "-0x7FFFFFFF" - "-0x80000000" - values: - "-0x80000000" - "-0x80000001" bugid: ["966"] - values: - '0xFFFFFFFF' - "-2" - values: - "-0xFFFFFFFF" - '0' - file-name: op_vs1_4_vs2_4_pmax isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, 0x7FFFFFFF movi v1, %s add v0, v1 movi v0, %s jne v0, set_failure ldai 0 jmp fall_through set_failure: ldai 1 fall_through: description: Check add with +max and various values. cases: - values: - '0' - '0x7fffffff' - values: - '1' - '0x80000000' bugid: ["966"] - values: - "-1" - '0x7FFFFFFE' - values: - '0x7FFFFFFF' - '0xFFFFFFFE' bugid: ["966"] - values: - '0x80000000' - '0xFFFFFFFF' - values: - "-0x7FFFFFFF" - '0' - values: - "-0x80000000" - '0xFFFFFFFF' - values: - '0xFFFFFFFF' - '0x7FFFFFFE' - values: - "-0xFFFFFFFF" - '0x80000000' bugid: ["966"] - file-name: op_vs1_4_vs2_4_nmax isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, -0x80000000 movi v1, %s add v0, v1 movi v0, %s jne v0, set_failure ldai 0 jmp fall_through set_failure: ldai 1 fall_through: description: Check add with -max and various values. cases: - values: - '0' - '0x80000000' - values: - '1' - '0x80000001' - values: - "-1" - '0x7FFFFFFF' bugid: ["966"] - values: - '0x7FFFFFFF' - "-1" - values: - '0x80000000' - '0' bugid: ["966"] - values: - "-0x7FFFFFFF" - '1' bugid: ["966"] - values: - "-0x80000000" - '0' bugid: ["966"] - values: - '0xFFFFFFFF' - '0x7FFFFFFF' bugid: ["966"] - values: - "-0xFFFFFFFF" - "-0x7FFFFFFF" - file-name: vals isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, %s movi v1, %s add v0, v1 movi v0, %s jne v0, set_failure ldai 0 jmp fall_through set_failure: ldai 1 fall_through: description: Check add with various values. tags: ['tsan'] cases: - values: - '0x455ed8f5' - '0xfe61fbdd' - '0x43c0d4d2' - values: - '0xc3e6a70' - '0xae9b1e98' - '0xbad98908' - values: - '0xd2670242' - '0xef691c0f' - '0xc1d01e51' - values: - '0xf6d0f4f8' - '0x4ee5e5df' - '0x45b6dad7' - values: - '0xded7f996' - '0xd94428a1' - '0xb81c2237' - values: - '0x262d5e15' - '0x1a85200d' - '0x40b27e22' - values: - '0x4bb930e4' - '0x416b3a07' - '0x8d246aeb' bugid: ["966"] - values: - '0x61a80560' - '0xb076ee9' - '0x6caf7449' - values: - '0x42bd8cd3' - '0x9e28b8b6' - '0xe0e64589' - values: - '0x3c0a62e1' - '0xb18cfa' - '0x3cbbefdb' - file-name: vals_mod32_1 bugid: ['1324', '2072'] tags: ['verifier'] runner-options: ['verifier-failure', 'verifier-config'] isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi v0, %s movi v1, %s add v0, v1 movi.64 v0, %s cmp.64 v0 description: Check add with incorrect register type. cases: - values: - '0x7FFFFFFF' - '0x7FFFFFFF' - '0xFFFFFFFFFFFFFFFE' bugid: ["966"] - values: - '0x7FFFFFFF' - '0x80000000' - '0xFFFFFFFFFFFFFFFF' - values: - '0x80000000' - '0x80000000' - '0' bugid: ["966"] - file-name: vals_mod32_2 bugid: ['1324'] tags: ['verifier'] runner-options: ['verifier-failure', 'verifier-config'] isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] code-template: | # movi.64 v0, %s movi.64 v1, %s add v0, v1 movi.64 v0, %s cmp.64 v0 description: Check add with incorrect register type. cases: - values: - '0x17FFFFFFF' - '0x17FFFFFFF' - '0xFFFFFFFFFFFFFFFE' bugid: ["966"] - values: - '0x777777777FFFFFFF' - '0x1111111180000000' - '0xFFFFFFFFFFFFFFFF' - values: - '0x180000000' - '0x180000000' - '0' bugid: ["966"] - file-name: regs isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] runner-options: - compile-only code-template: | # add %s, %s check-type: none description: Check add with various register numbers. cases: - values: - v0 - v15 - values: - v0 - v16 runner-options: - compile-failure - values: - v15 - v0 - values: - v16 - v0 runner-options: - compile-failure - file-name: type isa: verification: - v1_type - v2_type tags: ['verifier'] runner-options: ['verifier-failure', 'verifier-config'] header-template: [] code-template: | # .record A {} .record B {} .record panda.String .record panda.Object .function i32 main() { %s *s add v0, v1 check-type: exit-positive description: Check 'add' with incorrect register types. template-cases: - values: - movi v0, 0 exclude: [val] - values: - movi.64 v0, 0 - values: - fmovi v0, 0 - values: - fmovi.64 v0, 0 - values: - | # lda.type B sta.obj v0 - values: - | # lda.type B[] sta.obj v0 - values: - | # lda.type panda.String sta.obj v0 - values: - | # lda.type panda.Object sta.obj v0 - values: - | # movi v0, 10 newarr v0, v0, i32[] - values: - mov.null v0 cases: - values: - movi v1, 0 id: val - values: - movi.64 v1, 0 - values: - fmovi v1, 0 - values: - fmovi.64 v1, 0 - values: - | # lda.type A sta.obj v1 - values: - | # lda.type A[] sta.obj v1 - values: - | # lda.type panda.String sta.obj v1 - values: - | # lda.type panda.Object sta.obj v1 - values: - | # movi v1, 10 newarr v1, v1, f64[] - values: - mov.null v1 - file-name: uninitialized_regs isa: instructions: - sig: add v1:in:i32, v2:in:i32 acc: out:i32 format: [op_v1_4_v2_4] description: Check 'add' with uninitialized registers. tags: ['verifier'] runner-options: ['verifier-failure', 'verifier-config'] code-template: | # %s *s add %s, *s check-type: exit-positive template-cases: - values: - '' - v0 - values: - movi v0, 0 - v0 exclude: [init] - values: - '' - v7 - values: - '' - v15 - values: - 'movi v15, 0' - v15 exclude: [init] cases: - values: - '' - v1 - values: - movi v1, 0 - v1 id: init - values: - '' - v8 - values: - '' - v14