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