• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2024 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
14.function i32 main() {
15
16    # f32toi32 (NaN to 0 check)
17    fldai 0x7FFFFFFF
18    f32toi32
19    movi v0, 0
20    jne v0, exit_failure
21
22    # f64toi64 (NaN to 0 check)
23    fldai.64 0x7FF8000000000000
24    f64toi64
25    movi.64 v0, 0
26    jne v0, exit_failure
27
28    # f32tou32 (NaN to 0 check)
29    fldai 0x7FFFFFFF
30    f32tou32
31    movi v0, 0
32    jne v0, exit_failure
33
34    # f64tou64 (NaN to 0 check)
35    fldai.64 0x7FF8000000000000
36    f64tou64
37    movi.64 v0, 0
38    jne v0, exit_failure
39
40    # f32toi64 (NaN to 0 check)
41    fldai 0x7FFFFFFF
42    f32toi64
43    movi.64 v0, 0
44    jne v0, exit_failure
45
46    # f32tou64 (NaN to 0 check)
47    fldai 0x7FFFFFFF
48    movi.64 v0, 0
49    f32tou64
50    jne v0, exit_failure
51
52    # f32toi32 (MAX_INT32 + 1F to MAX_INT32 check)
53    fldai 0x4F000001
54    f32toi32
55    movi v0, 2147483647
56    jne v0, exit_failure
57
58    # f32toi32 (MIN_INT32 + 1F to MIN_INT32 (0x80000000) check)
59    # (sign bit set to 1 so if we sum float(MIN_INT32) with 1F
60    # we will get result < float(MIN_INT32))
61    fldai 0xCF000001
62    f32toi32
63    movi v0, 0x80000000
64    jne v0, exit_failure
65
66    # f32tou32 (MAX_UINT32 + 1F to MAX_UINT32 check)
67    fldai 0x4F800001
68    f32tou32
69    movi v0, 4294967295
70    jne v0, exit_failure
71
72    # f32tou32 (-1 to 0 check)
73    fldai 0xBF800000
74    f32tou32
75    movi v0, 0
76    jne v0, exit_failure
77
78    # f32toi64 (MAX_INT64 + 1F to MAX_INT64 check)
79    fldai 0x5F000001
80    f32toi64
81    movi.64 v0, 9223372036854775807
82    jne v0, exit_failure
83
84    # f32toi64 (MIN_INT64 - 1 to MIN_INT64 (0x8000000000000000) check)
85    # (sign bit set to 1 so if we sum float(MIN_INT64) with 1F
86    # we will get result < float(MIN_INT64))
87    fldai 0xDF000001
88    f32toi64
89    movi.64 v0, 0x8000000000000000
90    jne v0, exit_failure
91
92    # f32tou64 (MAX_UINT64 + 1F to MAX_UINT64 check)
93    fldai 0x5F800001
94    f32tou64
95    movi.64 v0, 18446744073709551615
96    jne v0, exit_failure
97
98    # f32tou64 (-1 to 0 check)
99    fldai 0xBF800000
100    f32tou64
101    movi v0, 0
102    jne v0, exit_failure
103
104    # f64toi32 (+inf to MAX_INT32 check)
105    fldai.64 0x7FF0000000000000
106    f64toi32
107    movi v0, 2147483647
108    jne v0, exit_failure
109
110    # f64toi32 (-inf to MIN_INT32 (0x80000000) check)
111    fldai.64 0xFFF0000000000000
112    f64toi32
113    movi v0, 0x80000000
114    jne v0, exit_failure
115
116    # f64tou32 (+inf to UMAX_INT32 check)
117    fldai.64 0x7FF0000000000000
118    f64tou32
119    movi v0, 4294967295
120    jne v0, exit_failure
121
122    # f64tou32 (-inf to 0 check)
123    fldai.64 0xFFF0000000000000
124    f64tou32
125    movi v0, 0
126    jne v0, exit_failure
127
128    # f32toi32 (+inf to MAX_INT32 check)
129    fldai 0x7F800000
130    f32toi32
131    movi v0, 2147483647
132    jne v0, exit_failure
133
134    # f32toi32 (-inf to MIN_INT32 (0x80000000) check)
135    fldai 0xFF800000
136    f32toi32
137    movi v0, 0x80000000
138    jne v0, exit_failure
139
140    # f32tou32 (+inf to UMAX_INT32 check)
141    fldai 0x7F800000
142    f32tou32
143    movi v0, 4294967295
144    jne v0, exit_failure
145
146    # f32tou32 (-inf to 0 check)
147    fldai 0xFF800000
148    f32tou32
149    movi v0, 0
150    jne v0, exit_failure
151
152    # All tests done
153    ldai 0
154    return
155
156exit_failure:
157    ldai 1
158    return
159}
160