Skip to content

Commit eca8d05

Browse files
committed
Migrate to fputil::cast and use implicit casts for constants
1 parent da6b98a commit eca8d05

File tree

3 files changed

+16
-20
lines changed

3 files changed

+16
-20
lines changed

libc/src/math/generic/exp2m1f16.cpp

Lines changed: 5 additions & 4 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/rounding_mode.h"
@@ -117,7 +118,7 @@ LLVM_LIBC_FUNCTION(float16, exp2m1f16, (float16 x)) {
117118
// When -12 < x < -11, round(2^x - 1, HP, RN) = -0x1.ffcp-1.
118119
if (x_u < 0xca00U) {
119120
return fputil::round_result_slightly_down(
120-
static_cast<float16>(-0x1.ffcp-1));
121+
fputil::cast<float16>(-0x1.ffcp-1));
121122
}
122123

123124
// When x <= -12, round(2^x - 1, HP, RN) = -1.
@@ -126,7 +127,7 @@ LLVM_LIBC_FUNCTION(float16, exp2m1f16, (float16 x)) {
126127
case FE_DOWNWARD:
127128
return FPBits::one(Sign::NEG).get_val();
128129
default:
129-
return static_cast<float16>(-0x1.ffcp-1);
130+
return -0x1.ffcp-1;
130131
}
131132
}
132133

@@ -142,7 +143,7 @@ LLVM_LIBC_FUNCTION(float16, exp2m1f16, (float16 x)) {
142143
// > display = hexadecimal;
143144
// > P = fpminimax((2^x - 1)/x, 4, [|SG...|], [-2^-3, 2^-3]);
144145
// > x * P;
145-
return static_cast<float16>(
146+
return fputil::cast<float16>(
146147
xf * fputil::polyeval(xf, 0x1.62e43p-1f, 0x1.ebfbdep-3f,
147148
0x1.c6af88p-5f, 0x1.3b45d6p-7f,
148149
0x1.641e7cp-10f));
@@ -155,7 +156,7 @@ LLVM_LIBC_FUNCTION(float16, exp2m1f16, (float16 x)) {
155156
// exp2(x) = exp2(hi + mid) * exp2(lo)
156157
auto [exp2_hi_mid, exp2_lo] = exp2_range_reduction(x);
157158
// exp2m1(x) = exp2(hi + mid) * exp2(lo) - 1
158-
return static_cast<float16>(
159+
return fputil::cast<float16>(
159160
fputil::multiply_add(exp2_hi_mid, exp2_lo, -1.0f));
160161
}
161162

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,6 +1185,7 @@ add_fp_unittest(
11851185
libc.hdr.fenv_macros
11861186
libc.src.errno.errno
11871187
libc.src.math.exp2m1f16
1188+
libc.src.__support.FPUtil.cast
11881189
)
11891190

11901191
add_fp_unittest(

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

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ TEST_F(LlvmLibcExp2m1f16Test, SpecialNumbers) {
2727
EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::exp2m1f16(inf));
2828
EXPECT_MATH_ERRNO(0);
2929

30-
EXPECT_FP_EQ_ALL_ROUNDING(static_cast<float16>(-1.0),
31-
LIBC_NAMESPACE::exp2m1f16(neg_inf));
30+
EXPECT_FP_EQ_ALL_ROUNDING(-1.0, LIBC_NAMESPACE::exp2m1f16(neg_inf));
3231
EXPECT_MATH_ERRNO(0);
3332

3433
EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::exp2m1f16(zero));
@@ -45,7 +44,7 @@ TEST_F(LlvmLibcExp2m1f16Test, Overflow) {
4544
FE_OVERFLOW | FE_INEXACT);
4645
EXPECT_MATH_ERRNO(ERANGE);
4746

48-
float16 x = static_cast<float16>(16.0);
47+
float16 x = 16.0;
4948

5049
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
5150
inf, LIBC_NAMESPACE::exp2m1f16(x), FE_OVERFLOW | FE_INEXACT);
@@ -67,27 +66,22 @@ TEST_F(LlvmLibcExp2m1f16Test, Overflow) {
6766
TEST_F(LlvmLibcExp2m1f16Test, ResultNearNegOne) {
6867
LIBC_NAMESPACE::libc_errno = 0;
6968

70-
EXPECT_FP_EQ_WITH_EXCEPTION(static_cast<float16>(-1.0),
71-
LIBC_NAMESPACE::exp2m1f16(neg_max_normal),
69+
EXPECT_FP_EQ_WITH_EXCEPTION(-1.0, LIBC_NAMESPACE::exp2m1f16(neg_max_normal),
7270
FE_INEXACT);
7371

74-
EXPECT_FP_EQ_ALL_ROUNDING(
75-
static_cast<float16>(-0x1.ffcp-1),
76-
LIBC_NAMESPACE::exp2m1f16(static_cast<float16>(-11)));
72+
EXPECT_FP_EQ_ALL_ROUNDING(-0x1.ffcp-1, LIBC_NAMESPACE::exp2m1f16(-11.0));
7773

78-
float16 x = static_cast<float16>(-12);
74+
float16 x = -12.0;
7975

8076
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
81-
static_cast<float16>(-1.0), LIBC_NAMESPACE::exp2m1f16(x), FE_INEXACT);
77+
-1.0, LIBC_NAMESPACE::exp2m1f16(x), FE_INEXACT);
8278

83-
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(static_cast<float16>(-0x1.ffcp-1),
84-
LIBC_NAMESPACE::exp2m1f16(x),
85-
FE_INEXACT);
79+
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
80+
-0x1.ffcp-1, LIBC_NAMESPACE::exp2m1f16(x), FE_INEXACT);
8681

8782
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
88-
static_cast<float16>(-1.0), LIBC_NAMESPACE::exp2m1f16(x), FE_INEXACT);
83+
-1.0, LIBC_NAMESPACE::exp2m1f16(x), FE_INEXACT);
8984

9085
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
91-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::exp2m1f16(x),
92-
FE_INEXACT);
86+
-0x1.ffcp-1, LIBC_NAMESPACE::exp2m1f16(x), FE_INEXACT);
9387
}

0 commit comments

Comments
 (0)