• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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: "f64tou32"
17    isa:
18      title: Conversions between integer and floating point types
19      description: >
20        Perform specified primitive type conversion of accumulator.
21      exceptions:
22        - x_none
23    commands:
24      - file-name: "op_none_vals"
25        isa:
26          instructions:
27            - sig: f64tou32
28              acc: inout:f64->u32
29              prefix: cast
30              format: [pref_op_none]
31        code-template: |
32          #
33              fldai.64 %s
34              f64tou32
35              movi v0, %s
36              ucmp v0
37        description: Check f64tou32 with various values.
38        tags: ['tsan']
39        cases:
40          - values:
41              - "0.0"
42              - "0"
43          - values:
44              - "1.0"
45              - "1"
46          - values:
47              - "2.147483647e9"
48              - "0x7fffffff"
49          - values:
50              - "-0.0"
51              - "0"
52          - values:
53              - "-1.0"
54              - "0"
55          - values:
56              - "-2.147483647e9"
57              - "0"
58      - file-name: "op_none_round"
59        isa:
60          instructions:
61            - sig: f64tou32
62              acc: inout:f64->u32
63              prefix: cast
64              format: [pref_op_none]
65          description: It is rounding toward zero.
66        code-template: |
67          #
68              fldai.64 %s
69              f64tou32
70              movi v0, %s
71              ucmp v0
72        description: Check f64tou32 rounding with various values.
73        cases:
74          - values:
75              - "0.1"
76              - "0"
77          - values:
78              - "0.9"
79              - "0"
80          - values:
81              - "0.9999999999"
82              - "0"
83          - values:
84              - "1.1"
85              - "1"
86          - values:
87              - "2.14748364699999e9"
88              - "0x7ffffffe"
89          - values:
90              - "2.14748364799999e9"
91              - "0x7fffffff"
92          - values:
93              - "-0.1"
94              - "0"
95          - values:
96              - "-0.9"
97              - "0"
98          - values:
99              - "-2.14748364699999e9"
100              - "0"
101          - values:
102              - "-2.14748364799999e9"
103              - "0"
104
105      - file-name: "op_none_min"
106        isa:
107          instructions:
108            - sig: f64tou32
109              acc: inout:f64->u32
110              prefix: cast
111              format: [pref_op_none]
112          description: If converted integer is less than minimal value for destination type, the result is minimal value for that type.
113        code-template: |
114          #
115              fldai.64 %s
116              f64tou32
117              movi v0, %s
118              ucmp v0
119        description: Check f64tou32 conversion to 0.
120        cases:
121          - values:
122              - "-2.147483648e9"
123              - "0"
124          - values:
125              - "-6e100"
126              - "0"
127
128      - file-name: "op_none_max"
129        isa:
130          instructions:
131            - sig: f64tou32
132              acc: inout:f64->u32
133              prefix: cast
134              format: [pref_op_none]
135          description: If converted integer is greater than maximum value for destination type, the result is maximum value for that type.
136        code-template: |
137          #
138              fldai.64 %s
139              f64tou32
140              movi v0, -1 # 0xFFFFFFFF - max unsigned value
141              ucmp v0
142        description: Check f64tou32 conversion to 0xFFFFFFFF.
143        cases:
144          - values:
145              - "+4294967295.0"
146          - values:
147              - "+4294967296.0"
148          - values:
149              - "6e100"
150
151      - file-name: "op_none_pinf"
152        isa:
153          instructions:
154            - sig: f64tou32
155              acc: inout:f64->u32
156              prefix: cast
157              format: [pref_op_none]
158          description: If source is positive infinity, the result is maximum value for destination type.
159        description: Check f64tou32 conversion +inf to 0xFFFFFFFF.
160        code-template: |
161          #
162              fldai.64 0x7ff0000000000000 # +Inf
163              f64tou32
164              movi v0, -1 # Max positive value, i.e. 0xFFFFFFFF
165              ucmp v0
166
167      - file-name: "op_none_ninf"
168        isa:
169          instructions:
170            - sig: f64tou32
171              acc: inout:f64->u32
172              prefix: cast
173              format: [pref_op_none]
174          description: If source is negative infinity, the result is minimal value for destination type.
175        description: Check f64tou32 conversion -inf to 0.
176        code-template: |
177          #
178              fldai.64 0xfff0000000000000 # -Inf
179              f64tou32
180              movi v0, 0
181              ucmp v0
182
183      - file-name: "op_none_nan"
184        isa:
185          instructions:
186            - sig: f64tou32
187              acc: inout:f64->u32
188              prefix: cast
189              format: [pref_op_none]
190          description: If source is NaN, the result is equal to 0.
191        description: Check f64tou32 conversion of NaN to 0.
192        code-template: |
193          #
194              fldai.64 %s
195              f64tou32
196              movi v0, 0
197              ucmp v0
198
199        cases:
200          - values:
201              # NaN
202              - "0x7ff8000000000000"
203          - values:
204              # Other NaN representation
205              - "0xFFFFFFFFFFFFFFFF"
206
207      - file-name: "type"
208        isa:
209          instructions:
210            - sig: f64tou32
211              acc: inout:f64->u32
212              prefix: cast
213              format: [pref_op_none]
214          verification:
215              - acc_type
216        description: |
217          Check `f64tou32` with incorrect accumulator type.
218          Load different values (objects, strings, types, 32-bit values, 64-bit integer values) and invokes `f64tou32`.
219          Return 0 to indicate that negative test failed, because this line is unreachable and code will not be executed after verification error.
220        runner-options: ['verifier-failure', 'verifier-config']
221        bugid: ["964", "1653"]
222        tags: ["verifier"]
223        header-template: []
224        code-template: |
225            #
226            .record B {}
227            .record panda.String <external>
228            .record panda.Object <external>
229            .function i32 main() {
230                %s
231                f64tou32
232        check-type: exit-positive
233        cases:
234            - values:
235                - ldai 0
236            - values:
237                - ldai.64 0
238            - values:
239                - fldai 0
240              bugid: ['6094']
241            - values:
242                - lda.type B
243            - values:
244                - lda.type B[]
245            - values:
246                - lda.type panda.String
247            - values:
248                - lda.str "string"
249            - values:
250                - lda.type panda.Object
251            - values:
252                - |
253                  #
254                      movi v0, 10
255                      newarr v0, v0, i32[]
256                      lda.obj v0
257            - values:
258                - lda.null
259
260      - file-name: uninitialized_regs
261        isa:
262          instructions:
263            - sig: f64tou32
264              acc: inout:f64->u32
265              prefix: cast
266              format: [pref_op_none]
267        description: Check 'f64tou32' with uninitialized accumulator.
268        tags: ['verifier']
269        runner-options: ['verifier-failure', 'verifier-config']
270        code-template: |
271            #
272                f64tou32
273        check-type: exit-positive
274