Skip to content

Commit 740ddab

Browse files
committed
[libc][math][c23] Add fromfpxf16 C23 math function
1 parent fdfe9d0 commit 740ddab

File tree

12 files changed

+139
-61
lines changed

12 files changed

+139
-61
lines changed

libc/config/linux/aarch64/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,7 @@ if(LIBC_TYPES_HAS_FLOAT16)
501501
# math.h C23 _Float16 entrypoints
502502
libc.src.math.fabsf16
503503
libc.src.math.fromfpf16
504+
libc.src.math.fromfpxf16
504505
libc.src.math.ufromfpf16
505506
)
506507
endif()

libc/config/linux/x86_64/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,7 @@ if(LIBC_TYPES_HAS_FLOAT16)
534534
# math.h C23 _Float16 entrypoints
535535
libc.src.math.fabsf16
536536
libc.src.math.fromfpf16
537+
libc.src.math.fromfpxf16
537538
libc.src.math.ufromfpf16
538539
)
539540
endif()

libc/docs/c23.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Additions:
5757
* roundeven* |check|
5858
* fromfp* |check|
5959
* ufromfp* |check|
60-
* fromfpx*
60+
* fromfpx* |check|
6161
* nextup*
6262
* nextdown*
6363
* canonicalize*

libc/docs/math/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ Basic Operations
164164
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
165165
| fromfp | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 |
166166
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
167-
| fromfpx | |check| | |check| | |check| | | |check| | 7.12.9.11 | F.10.6.11 |
167+
| fromfpx | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 |
168168
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
169169
| fsub | N/A | | | N/A | | 7.12.14.2 | F.10.11 |
170170
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+

libc/spec/stdc.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,8 @@ def StdC : StandardSpec<"stdc"> {
480480
FunctionSpec<"fromfpx", RetValSpec<DoubleType>, [ArgSpec<DoubleType>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>]>,
481481
FunctionSpec<"fromfpxf", RetValSpec<FloatType>, [ArgSpec<FloatType>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>]>,
482482
FunctionSpec<"fromfpxl", RetValSpec<LongDoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>]>,
483-
GuardedFunctionSpec<"fromfpxf128", RetValSpec<LongDoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>], "LIBC_TYPES_HAS_FLOAT128">,
483+
GuardedFunctionSpec<"fromfpxf16", RetValSpec<Float16Type>, [ArgSpec<Float16Type>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>], "LIBC_TYPES_HAS_FLOAT16">,
484+
GuardedFunctionSpec<"fromfpxf128", RetValSpec<Float128Type>, [ArgSpec<Float128Type>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>], "LIBC_TYPES_HAS_FLOAT128">,
484485

485486
FunctionSpec<"ufromfp", RetValSpec<DoubleType>, [ArgSpec<DoubleType>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>]>,
486487
FunctionSpec<"ufromfpf", RetValSpec<FloatType>, [ArgSpec<FloatType>, ArgSpec<IntType>, ArgSpec<UnsignedIntType>]>,

libc/src/math/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ add_math_entrypoint_object(fromfpf128)
184184
add_math_entrypoint_object(fromfpx)
185185
add_math_entrypoint_object(fromfpxf)
186186
add_math_entrypoint_object(fromfpxl)
187+
add_math_entrypoint_object(fromfpxf16)
187188
add_math_entrypoint_object(fromfpxf128)
188189

189190
add_math_entrypoint_object(hypot)

libc/src/math/fromfpxf16.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//===-- Implementation header for fromfpxf16 --------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIBC_SRC_MATH_FROMFPXF16_H
10+
#define LLVM_LIBC_SRC_MATH_FROMFPXF16_H
11+
12+
#include "src/__support/macros/properties/types.h"
13+
14+
namespace LIBC_NAMESPACE {
15+
16+
float16 fromfpxf16(float16 x, int rnd, unsigned int width);
17+
18+
} // namespace LIBC_NAMESPACE
19+
20+
#endif // LLVM_LIBC_SRC_MATH_FROMFPXF16_H

libc/src/math/generic/CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2634,6 +2634,19 @@ add_entrypoint_object(
26342634
-O3
26352635
)
26362636

2637+
add_entrypoint_object(
2638+
fromfpxf16
2639+
SRCS
2640+
fromfpxf16.cpp
2641+
HDRS
2642+
../fromfpxf16.h
2643+
DEPENDS
2644+
libc.src.__support.macros.properties.types
2645+
libc.src.__support.FPUtil.nearest_integer_operations
2646+
COMPILE_OPTIONS
2647+
-O3
2648+
)
2649+
26372650
add_entrypoint_object(
26382651
fromfpxf128
26392652
SRCS

libc/src/math/generic/fromfpxf16.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//===-- Implementation of fromfpxf16 function -----------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "src/math/fromfpxf16.h"
10+
#include "src/__support/FPUtil/NearestIntegerOperations.h"
11+
#include "src/__support/common.h"
12+
13+
namespace LIBC_NAMESPACE {
14+
15+
LLVM_LIBC_FUNCTION(float16, fromfpxf16,
16+
(float16 x, int rnd, unsigned int width)) {
17+
return fputil::fromfpx</*IsSigned=*/true>(x, rnd, width);
18+
}
19+
20+
} // namespace LIBC_NAMESPACE

libc/test/src/math/smoke/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,18 @@ add_fp_unittest(
10201020
libc.src.math.fromfpxl
10211021
)
10221022

1023+
add_fp_unittest(
1024+
fromfpxf16_test
1025+
SUITE
1026+
libc-math-smoke-tests
1027+
SRCS
1028+
fromfpxf16_test.cpp
1029+
HDRS
1030+
FromfpxTest.h
1031+
DEPENDS
1032+
libc.src.math.fromfpxf16
1033+
)
1034+
10231035
add_fp_unittest(
10241036
fromfpxf128_test
10251037
SUITE

libc/test/src/math/smoke/FromfpxTest.h

Lines changed: 54 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
101101
FE_INEXACT);
102102
EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U),
103103
FE_INEXACT);
104-
EXPECT_FP_EQ_WITH_EXCEPTION(T(1235.0), func(T(1234.38), FP_INT_UPWARD, 12U),
104+
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U),
105105
FE_INEXACT);
106-
EXPECT_FP_EQ_WITH_EXCEPTION(
107-
T(-1234.0), func(T(-1234.38), FP_INT_UPWARD, 12U), FE_INEXACT);
108-
EXPECT_FP_EQ_WITH_EXCEPTION(T(1235.0), func(T(1234.96), FP_INT_UPWARD, 12U),
106+
EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U),
107+
FE_INEXACT);
108+
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U),
109+
FE_INEXACT);
110+
EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U),
109111
FE_INEXACT);
110-
EXPECT_FP_EQ_WITH_EXCEPTION(
111-
T(-1234.0), func(T(-1234.96), FP_INT_UPWARD, 12U), FE_INEXACT);
112112
}
113113

114114
void testFractionsUpwardOutsideRange(FromfpxFunc func) {
@@ -132,13 +132,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
132132
FE_INVALID);
133133
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U),
134134
FE_INVALID);
135-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_UPWARD, 11U),
135+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U),
136136
FE_INVALID);
137-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_UPWARD, 11U),
137+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U),
138138
FE_INVALID);
139-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_UPWARD, 11U),
139+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U),
140140
FE_INVALID);
141-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_UPWARD, 11U),
141+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U),
142142
FE_INVALID);
143143
}
144144

@@ -175,14 +175,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
175175
FE_INEXACT);
176176
EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U),
177177
FE_INEXACT);
178+
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U),
179+
FE_INEXACT);
178180
EXPECT_FP_EQ_WITH_EXCEPTION(
179-
T(1234.0), func(T(1234.38), FP_INT_DOWNWARD, 12U), FE_INEXACT);
180-
EXPECT_FP_EQ_WITH_EXCEPTION(
181-
T(-1235.0), func(T(-1234.38), FP_INT_DOWNWARD, 12U), FE_INEXACT);
182-
EXPECT_FP_EQ_WITH_EXCEPTION(
183-
T(1234.0), func(T(1234.96), FP_INT_DOWNWARD, 12U), FE_INEXACT);
181+
T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U), FE_INEXACT);
182+
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U),
183+
FE_INEXACT);
184184
EXPECT_FP_EQ_WITH_EXCEPTION(
185-
T(-1235.0), func(T(-1234.96), FP_INT_DOWNWARD, 12U), FE_INEXACT);
185+
T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U), FE_INEXACT);
186186
}
187187

188188
void testFractionsDownwardOutsideRange(FromfpxFunc func) {
@@ -206,13 +206,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
206206
FE_INVALID);
207207
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U),
208208
FE_INVALID);
209-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_DOWNWARD, 11U),
209+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U),
210210
FE_INVALID);
211-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_DOWNWARD, 11U),
211+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U),
212212
FE_INVALID);
213-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_DOWNWARD, 11U),
213+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U),
214214
FE_INVALID);
215-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_DOWNWARD, 11U),
215+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U),
216216
FE_INVALID);
217217
}
218218

@@ -250,13 +250,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
250250
EXPECT_FP_EQ_WITH_EXCEPTION(
251251
T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U), FE_INEXACT);
252252
EXPECT_FP_EQ_WITH_EXCEPTION(
253-
T(1234.0), func(T(1234.38), FP_INT_TOWARDZERO, 12U), FE_INEXACT);
253+
T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
254254
EXPECT_FP_EQ_WITH_EXCEPTION(
255-
T(-1234.0), func(T(-1234.38), FP_INT_TOWARDZERO, 12U), FE_INEXACT);
255+
T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
256256
EXPECT_FP_EQ_WITH_EXCEPTION(
257-
T(1234.0), func(T(1234.96), FP_INT_TOWARDZERO, 12U), FE_INEXACT);
257+
T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
258258
EXPECT_FP_EQ_WITH_EXCEPTION(
259-
T(-1234.0), func(T(-1234.96), FP_INT_TOWARDZERO, 12U), FE_INEXACT);
259+
T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
260260
}
261261

262262
void testFractionsTowardZeroOutsideRange(FromfpxFunc func) {
@@ -274,13 +274,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
274274
FE_INVALID);
275275
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U),
276276
FE_INVALID);
277-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TOWARDZERO, 11U),
277+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U),
278278
FE_INVALID);
279-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TOWARDZERO, 11U),
279+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U),
280280
FE_INVALID);
281-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TOWARDZERO, 11U),
281+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U),
282282
FE_INVALID);
283-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TOWARDZERO, 11U),
283+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U),
284284
FE_INVALID);
285285
}
286286

@@ -318,15 +318,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
318318
EXPECT_FP_EQ_WITH_EXCEPTION(
319319
T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);
320320
EXPECT_FP_EQ_WITH_EXCEPTION(
321-
T(1234.0), func(T(1234.38), FP_INT_TONEARESTFROMZERO, 12U), FE_INEXACT);
321+
T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
322322
EXPECT_FP_EQ_WITH_EXCEPTION(
323-
T(-1234.0), func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 12U),
324-
FE_INEXACT);
323+
T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
325324
EXPECT_FP_EQ_WITH_EXCEPTION(
326-
T(1235.0), func(T(1234.96), FP_INT_TONEARESTFROMZERO, 12U), FE_INEXACT);
325+
T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
327326
EXPECT_FP_EQ_WITH_EXCEPTION(
328-
T(-1235.0), func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 12U),
329-
FE_INEXACT);
327+
T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
330328
}
331329

332330
void testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func) {
@@ -353,13 +351,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
353351
EXPECT_FP_EQ_WITH_EXCEPTION(
354352
aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
355353
EXPECT_FP_EQ_WITH_EXCEPTION(
356-
aNaN, func(T(1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID);
354+
aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
357355
EXPECT_FP_EQ_WITH_EXCEPTION(
358-
aNaN, func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID);
356+
aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
359357
EXPECT_FP_EQ_WITH_EXCEPTION(
360-
aNaN, func(T(1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID);
358+
aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
361359
EXPECT_FP_EQ_WITH_EXCEPTION(
362-
aNaN, func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID);
360+
aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
363361
}
364362

365363
void testFractionsToNearestWithinRange(FromfpxFunc func) {
@@ -395,14 +393,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
395393
FE_INEXACT);
396394
EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U),
397395
FE_INEXACT);
396+
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U),
397+
FE_INEXACT);
398398
EXPECT_FP_EQ_WITH_EXCEPTION(
399-
T(1234.0), func(T(1234.38), FP_INT_TONEAREST, 12U), FE_INEXACT);
400-
EXPECT_FP_EQ_WITH_EXCEPTION(
401-
T(-1234.0), func(T(-1234.38), FP_INT_TONEAREST, 12U), FE_INEXACT);
402-
EXPECT_FP_EQ_WITH_EXCEPTION(
403-
T(1235.0), func(T(1234.96), FP_INT_TONEAREST, 12U), FE_INEXACT);
399+
T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U), FE_INEXACT);
400+
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U),
401+
FE_INEXACT);
404402
EXPECT_FP_EQ_WITH_EXCEPTION(
405-
T(-1235.0), func(T(-1234.96), FP_INT_TONEAREST, 12U), FE_INEXACT);
403+
T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U), FE_INEXACT);
406404

407405
EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U),
408406
FE_INEXACT);
@@ -451,13 +449,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
451449
FE_INVALID);
452450
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U),
453451
FE_INVALID);
454-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TONEAREST, 11U),
452+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U),
455453
FE_INVALID);
456-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TONEAREST, 11U),
454+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U),
457455
FE_INVALID);
458-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TONEAREST, 11U),
456+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U),
459457
FE_INVALID);
460-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TONEAREST, 11U),
458+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U),
461459
FE_INVALID);
462460

463461
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U),
@@ -532,16 +530,16 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
532530
T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),
533531
FE_INEXACT);
534532
EXPECT_FP_EQ_WITH_EXCEPTION(
535-
T(1234.0), func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U),
533+
T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
536534
FE_INEXACT);
537535
EXPECT_FP_EQ_WITH_EXCEPTION(
538-
T(-1234.0), func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U),
536+
T(-123.0), func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
539537
FE_INEXACT);
540538
EXPECT_FP_EQ_WITH_EXCEPTION(
541-
T(1235.0), func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U),
539+
T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
542540
FE_INEXACT);
543541
EXPECT_FP_EQ_WITH_EXCEPTION(
544-
T(-1235.0), func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U),
542+
T(-124.0), func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
545543
FE_INEXACT);
546544

547545
EXPECT_FP_EQ_WITH_EXCEPTION(
@@ -598,16 +596,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
598596
EXPECT_FP_EQ_WITH_EXCEPTION(
599597
aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
600598
EXPECT_FP_EQ_WITH_EXCEPTION(
601-
aNaN, func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U),
602-
FE_INVALID);
599+
aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);
603600
EXPECT_FP_EQ_WITH_EXCEPTION(
604-
aNaN, func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U),
601+
aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
605602
FE_INVALID);
606603
EXPECT_FP_EQ_WITH_EXCEPTION(
607-
aNaN, func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U),
608-
FE_INVALID);
604+
aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);
609605
EXPECT_FP_EQ_WITH_EXCEPTION(
610-
aNaN, func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U),
606+
aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
611607
FE_INVALID);
612608

613609
EXPECT_FP_EQ_WITH_EXCEPTION(
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//===-- Unittests for fromfpxf16 ------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "FromfpxTest.h"
10+
11+
#include "src/math/fromfpxf16.h"
12+
13+
LIST_FROMFPX_TESTS(float16, LIBC_NAMESPACE::fromfpxf16)

0 commit comments

Comments
 (0)