• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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: "i64toi32"
17    isa:
18      title: Integer truncations and extensions.
19      description: >
20        Perform specified integer extension or truncations of accumulator.
21        Truncations discard all but N lowest-order bits, where N is the bit size of destination type.
22      exceptions:
23        - x_none
24    commands:
25      - file-name: "op_none"
26        isa:
27          instructions:
28            - sig: i64toi32
29              acc: inout:i64->i32
30              prefix: cast
31              format: [pref_op_none]
32        code-template: |
33          #
34              ldai.64 %s
35              i64toi32
36              movi v0, %s
37              jne v0, set_failure
38              ldai 0
39              jmp fall_through
40          set_failure:
41              ldai 1
42          fall_through:
43        description: Check i64toi32 with various values.
44        tags: ['tsan']
45        cases:
46          - values:
47              - "0"
48              - "0"
49          - values:
50              - "-1"
51              - "-1"
52          - values:
53              - "0x1111111122222222"
54              - "0x22222222"
55          - values:
56              - "0x7fffffffffffffff"
57              - "-1"
58          - values:
59              - "0xBBCCDDEE00000001"
60              - "1"
61      - file-name: "type"
62        isa:
63          instructions:
64            - sig: i64toi32
65              acc: inout:i64->i32
66              prefix: cast
67              format: [pref_op_none]
68          verification:
69              - acc_type
70        bugid: ["964", "1653", "2107"]
71        tags: ["verifier"]
72        description: |
73          Check `i64toi32` with incorrect accumulator type.
74          Load different values (objects, strings, types, 64-bit floating point values, 32-bit integer values) and invokes `i64toi32`.
75          Return 0 to indicate that negative test failed, because this line is unreachable and code will not be executed after verification error.
76        runner-options: ['verifier-failure', 'verifier-debug-config']
77        header-template: []
78        code-template: |
79            #
80            .record B {}
81            .record panda.String <external>
82            .record panda.Object <external>
83            .function i32 main() {
84                %s
85                i64toi32
86        check-type: exit-positive
87        cases:
88            - values:
89                - ldai 0
90            - values:
91                - fldai.64 0
92            - values:
93                - lda.type B
94            - values:
95                - lda.type B[]
96            - values:
97                - lda.type panda.String
98            - values:
99                - lda.str "string"
100            - values:
101                - lda.type panda.Object
102            - values:
103                - |
104                  #
105                      movi v0, 10
106                      newarr v0, v0, i32[]
107                      lda.obj v0
108            - values:
109                - lda.null
110
111      - file-name: uninitialized_regs
112        isa:
113          instructions:
114            - sig: i64toi32
115              acc: inout:i64->i32
116              prefix: cast
117              format: [pref_op_none]
118        description: Check i64toi32 with uninitialized accumulator.
119        tags: ['verifier']
120        runner-options: ['verifier-failure', 'verifier-debug-config']
121        header-template: []
122        code-template: |
123            #
124            .function i32 main() {
125                i64toi32
126        check-type: exit-positive
127