Skip to content

Commit c343f44

Browse files
committed
Migrate to fputil::cast
1 parent 1a0ef10 commit c343f44

File tree

4 files changed

+51
-36
lines changed

4 files changed

+51
-36
lines changed

libc/src/math/generic/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4279,6 +4279,7 @@ add_entrypoint_object(
42794279
.expxf16
42804280
libc.hdr.fenv_macros
42814281
libc.src.__support.CPP.array
4282+
libc.src.__support.FPUtil.cast
42824283
libc.src.__support.FPUtil.except_value_utils
42834284
libc.src.__support.FPUtil.fenv_impl
42844285
libc.src.__support.FPUtil.fp_bits

libc/src/math/generic/tanhf16.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "src/__support/FPUtil/FEnvImpl.h"
1414
#include "src/__support/FPUtil/FPBits.h"
1515
#include "src/__support/FPUtil/PolyEval.h"
16+
#include "src/__support/FPUtil/cast.h"
1617
#include "src/__support/FPUtil/except_value_utils.h"
1718
#include "src/__support/FPUtil/multiply_add.h"
1819
#include "src/__support/FPUtil/nearest_integer.h"
@@ -72,7 +73,7 @@ LLVM_LIBC_FUNCTION(float16, tanhf16, (float16 x)) {
7273
// > display = hexadecimal;
7374
// > // For each coefficient:
7475
// > round(/* put coefficient here */, SG, RN);
75-
return static_cast<float16>(
76+
return fputil::cast<float16>(
7677
xf * fputil::polyeval(xf_sq, 0x1p+0f, -0x1.555556p-2f, 0x1.111112p-3f,
7778
-0x1.ba1ba2p-5f));
7879
}
@@ -91,8 +92,8 @@ LLVM_LIBC_FUNCTION(float16, tanhf16, (float16 x)) {
9192
return FPBits::one(x_bits.sign()).get_val();
9293
}
9394
if (x_bits.is_pos())
94-
return static_cast<float16>(0x1.ffcp-1);
95-
return static_cast<float16>(-0x1.ffcp-1);
95+
return fputil::cast<float16>(0x1.ffcp-1);
96+
return fputil::cast<float16>(-0x1.ffcp-1);
9697
}
9798

9899
if (auto r = TANHF16_EXCEPTS.lookup(x_u); LIBC_UNLIKELY(r.has_value()))
@@ -137,8 +138,8 @@ LLVM_LIBC_FUNCTION(float16, tanhf16, (float16 x)) {
137138
// > 1 + x * P;
138139
float exp_2lo =
139140
fputil::polyeval(lo, 0x1p+0f, 0x1p+1f, 0x1.001p+1f, 0x1.555ddep+0f);
140-
return static_cast<float16>((exp_2lo - exp2_hi_mid) /
141-
(exp_2lo + exp2_hi_mid));
141+
return fputil::cast<float16>((exp_2lo - exp2_hi_mid) /
142+
(exp_2lo + exp2_hi_mid));
142143
}
143144

144145
} // namespace LIBC_NAMESPACE_DECL

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3777,6 +3777,7 @@ add_fp_unittest(
37773777
libc.hdr.fenv_macros
37783778
libc.src.errno.errno
37793779
libc.src.math.tanhf16
3780+
libc.src.__support.FPUtil.cast
37803781
)
37813782

37823783
add_fp_unittest(

libc/test/src/math/smoke/tanhf16_test.cpp

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "hdr/fenv_macros.h"
10+
#include "src/__support/FPUtil/cast.h"
1011
#include "src/errno/libc_errno.h"
1112
#include "src/math/tanhf16.h"
1213
#include "test/UnitTest/FPMatcher.h"
@@ -23,11 +24,11 @@ TEST_F(LlvmLibcTanhf16Test, SpecialNumbers) {
2324
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::tanhf16(sNaN), FE_INVALID);
2425
EXPECT_MATH_ERRNO(0);
2526

26-
EXPECT_FP_EQ_ALL_ROUNDING(static_cast<float16>(1.0),
27+
EXPECT_FP_EQ_ALL_ROUNDING(LIBC_NAMESPACE::fputil::cast<float16>(1.0),
2728
LIBC_NAMESPACE::tanhf16(inf));
2829
EXPECT_MATH_ERRNO(0);
2930

30-
EXPECT_FP_EQ_ALL_ROUNDING(static_cast<float16>(-1.0),
31+
EXPECT_FP_EQ_ALL_ROUNDING(LIBC_NAMESPACE::fputil::cast<float16>(-1.0),
3132
LIBC_NAMESPACE::tanhf16(neg_inf));
3233
EXPECT_MATH_ERRNO(0);
3334

@@ -41,91 +42,102 @@ TEST_F(LlvmLibcTanhf16Test, SpecialNumbers) {
4142
TEST_F(LlvmLibcTanhf16Test, ResultNearBounds) {
4243
LIBC_NAMESPACE::libc_errno = 0;
4344

44-
EXPECT_FP_EQ_WITH_EXCEPTION(static_cast<float16>(1.0),
45+
EXPECT_FP_EQ_WITH_EXCEPTION(LIBC_NAMESPACE::fputil::cast<float16>(1.0),
4546
LIBC_NAMESPACE::tanhf16(max_normal), FE_INEXACT);
4647
EXPECT_MATH_ERRNO(0);
4748

48-
EXPECT_FP_EQ_WITH_EXCEPTION(static_cast<float16>(-1.0),
49+
EXPECT_FP_EQ_WITH_EXCEPTION(LIBC_NAMESPACE::fputil::cast<float16>(-1.0),
4950
LIBC_NAMESPACE::tanhf16(neg_max_normal),
5051
FE_INEXACT);
5152
EXPECT_MATH_ERRNO(0);
5253

5354
// round(atanh(1 - 2^-11), HP, RU);
54-
float16 x = static_cast<float16>(0x1.0a4p+2);
55+
float16 x = LIBC_NAMESPACE::fputil::cast<float16>(0x1.0a4p+2);
5556

5657
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
57-
static_cast<float16>(0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
58+
LIBC_NAMESPACE::fputil::cast<float16>(0x1.ffcp-1),
59+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
5860
EXPECT_MATH_ERRNO(0);
5961

6062
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
61-
static_cast<float16>(1.0), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
63+
LIBC_NAMESPACE::fputil::cast<float16>(1.0), LIBC_NAMESPACE::tanhf16(x),
64+
FE_INEXACT);
6265
EXPECT_MATH_ERRNO(0);
6366

6467
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
65-
static_cast<float16>(0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
68+
LIBC_NAMESPACE::fputil::cast<float16>(0x1.ffcp-1),
69+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
6670
EXPECT_MATH_ERRNO(0);
6771

6872
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
69-
static_cast<float16>(0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
73+
LIBC_NAMESPACE::fputil::cast<float16>(0x1.ffcp-1),
74+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
7075
EXPECT_MATH_ERRNO(0);
7176

72-
x = static_cast<float16>(0x1.208p+2);
77+
x = LIBC_NAMESPACE::fputil::cast<float16>(0x1.208p+2);
7378

7479
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
75-
static_cast<float16>(1.0), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
80+
LIBC_NAMESPACE::fputil::cast<float16>(1.0), LIBC_NAMESPACE::tanhf16(x),
81+
FE_INEXACT);
7682
EXPECT_MATH_ERRNO(0);
7783

7884
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
79-
static_cast<float16>(1.0), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
85+
LIBC_NAMESPACE::fputil::cast<float16>(1.0), LIBC_NAMESPACE::tanhf16(x),
86+
FE_INEXACT);
8087
EXPECT_MATH_ERRNO(0);
8188

8289
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
83-
static_cast<float16>(0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
90+
LIBC_NAMESPACE::fputil::cast<float16>(0x1.ffcp-1),
91+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
8492
EXPECT_MATH_ERRNO(0);
8593

8694
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
87-
static_cast<float16>(0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
95+
LIBC_NAMESPACE::fputil::cast<float16>(0x1.ffcp-1),
96+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
8897
EXPECT_MATH_ERRNO(0);
8998

9099
// round(atanh(-1 + 2^-11), HP, RD);
91-
x = static_cast<float16>(-0x1.0a4p+2);
100+
x = LIBC_NAMESPACE::fputil::cast<float16>(-0x1.0a4p+2);
92101

93102
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
94-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x),
95-
FE_INEXACT);
103+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
104+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
96105
EXPECT_MATH_ERRNO(0);
97106

98-
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(static_cast<float16>(-0x1.ffcp-1),
99-
LIBC_NAMESPACE::tanhf16(x),
100-
FE_INEXACT);
107+
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
108+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
109+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
101110
EXPECT_MATH_ERRNO(0);
102111

103112
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
104-
static_cast<float16>(-1.0), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
113+
LIBC_NAMESPACE::fputil::cast<float16>(-1.0), LIBC_NAMESPACE::tanhf16(x),
114+
FE_INEXACT);
105115
EXPECT_MATH_ERRNO(0);
106116

107117
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
108-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x),
109-
FE_INEXACT);
118+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
119+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
110120
EXPECT_MATH_ERRNO(0);
111121

112-
x = static_cast<float16>(-0x1.208p+2);
122+
x = LIBC_NAMESPACE::fputil::cast<float16>(-0x1.208p+2);
113123

114124
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
115-
static_cast<float16>(-1.0), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
125+
LIBC_NAMESPACE::fputil::cast<float16>(-1.0), LIBC_NAMESPACE::tanhf16(x),
126+
FE_INEXACT);
116127
EXPECT_MATH_ERRNO(0);
117128

118-
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(static_cast<float16>(-0x1.ffcp-1),
119-
LIBC_NAMESPACE::tanhf16(x),
120-
FE_INEXACT);
129+
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
130+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
131+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
121132
EXPECT_MATH_ERRNO(0);
122133

123134
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
124-
static_cast<float16>(-1.0), LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
135+
LIBC_NAMESPACE::fputil::cast<float16>(-1.0), LIBC_NAMESPACE::tanhf16(x),
136+
FE_INEXACT);
125137
EXPECT_MATH_ERRNO(0);
126138

127139
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
128-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::tanhf16(x),
129-
FE_INEXACT);
140+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
141+
LIBC_NAMESPACE::tanhf16(x), FE_INEXACT);
130142
EXPECT_MATH_ERRNO(0);
131143
}

0 commit comments

Comments
 (0)