Skip to content

Commit e21264e

Browse files
committed
Migrate to fputil::cast
1 parent 2687d88 commit e21264e

File tree

4 files changed

+34
-27
lines changed

4 files changed

+34
-27
lines changed

libc/src/math/generic/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,7 @@ add_entrypoint_object(
16471647
.expxf16
16481648
libc.hdr.errno_macros
16491649
libc.hdr.fenv_macros
1650+
libc.src.__support.FPUtil.cast
16501651
libc.src.__support.FPUtil.except_value_utils
16511652
libc.src.__support.FPUtil.fenv_impl
16521653
libc.src.__support.FPUtil.fp_bits

libc/src/math/generic/exp10m1f16.cpp

Lines changed: 8 additions & 7 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"
@@ -103,7 +104,7 @@ LLVM_LIBC_FUNCTION(float16, exp10m1f16, (float16 x)) {
103104
// When x >= -0x1.ce4p+1, round(10^x - 1, HP, RN) = -0x1.ffcp-1.
104105
if (x_u <= 0xc339U) {
105106
return fputil::round_result_slightly_down(
106-
static_cast<float16>(-0x1.ffcp-1));
107+
fputil::cast<float16>(-0x1.ffcp-1));
107108
}
108109

109110
// When x < -0x1.ce4p+1, round(10^x - 1, HP, RN) = -1.
@@ -112,7 +113,7 @@ LLVM_LIBC_FUNCTION(float16, exp10m1f16, (float16 x)) {
112113
case FE_DOWNWARD:
113114
return FPBits::one(Sign::NEG).get_val();
114115
default:
115-
return static_cast<float16>(-0x1.ffcp-1);
116+
return fputil::cast<float16>(-0x1.ffcp-1);
116117
}
117118
}
118119

@@ -128,7 +129,7 @@ LLVM_LIBC_FUNCTION(float16, exp10m1f16, (float16 x)) {
128129
// > display = hexadecimal;
129130
// > P = fpminimax((10^x - 1)/x, 4, [|SG...|], [-2^-3, 2^-3]);
130131
// > x * P;
131-
return static_cast<float16>(
132+
return fputil::cast<float16>(
132133
xf * fputil::polyeval(xf, 0x1.26bb1cp+1f, 0x1.5351c8p+1f,
133134
0x1.04704p+1f, 0x1.2ce084p+0f, 0x1.14a6bep-1f));
134135
}
@@ -141,11 +142,11 @@ LLVM_LIBC_FUNCTION(float16, exp10m1f16, (float16 x)) {
141142
if (LIBC_UNLIKELY((x_u & ~(0x3c00U | 0x4000U | 0x4200U | 0x4400U)) == 0)) {
142143
switch (x_u) {
143144
case 0x3c00U: // x = 1.0f16
144-
return static_cast<float16>(9.0);
145+
return fputil::cast<float16>(9.0);
145146
case 0x4000U: // x = 2.0f16
146-
return static_cast<float16>(99.0);
147+
return fputil::cast<float16>(99.0);
147148
case 0x4200U: // x = 3.0f16
148-
return static_cast<float16>(999.0);
149+
return fputil::cast<float16>(999.0);
149150
}
150151
}
151152

@@ -155,7 +156,7 @@ LLVM_LIBC_FUNCTION(float16, exp10m1f16, (float16 x)) {
155156
// exp10(x) = exp2((hi + mid) * log2(10)) * exp10(lo)
156157
auto [exp2_hi_mid, exp10_lo] = exp10_range_reduction(x);
157158
// exp10m1(x) = exp2((hi + mid) * log2(lo)) * exp10(lo) - 1
158-
return static_cast<float16>(
159+
return fputil::cast<float16>(
159160
fputil::multiply_add(exp2_hi_mid, exp10_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
@@ -1234,6 +1234,7 @@ add_fp_unittest(
12341234
libc.hdr.fenv_macros
12351235
libc.src.errno.errno
12361236
libc.src.math.exp10m1f16
1237+
libc.src.__support.FPUtil.cast
12371238
)
12381239

12391240
add_fp_unittest(

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

Lines changed: 24 additions & 20 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/exp10m1f16.h"
1213
#include "test/UnitTest/FPMatcher.h"
@@ -27,7 +28,7 @@ TEST_F(LlvmLibcExp10m1f16Test, SpecialNumbers) {
2728
EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::exp10m1f16(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::exp10m1f16(neg_inf));
3233
EXPECT_MATH_ERRNO(0);
3334

@@ -46,7 +47,7 @@ TEST_F(LlvmLibcExp10m1f16Test, Overflow) {
4647
EXPECT_MATH_ERRNO(ERANGE);
4748

4849
// round(16 * log10(2), HP, RN);
49-
float16 x = static_cast<float16>(0x1.344p+2);
50+
float16 x = LIBC_NAMESPACE::fputil::cast<float16>(0x1.344p+2);
5051

5152
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
5253
inf, LIBC_NAMESPACE::exp10m1f16(x), FE_OVERFLOW | FE_INEXACT);
@@ -68,42 +69,45 @@ TEST_F(LlvmLibcExp10m1f16Test, Overflow) {
6869
TEST_F(LlvmLibcExp10m1f16Test, ResultNearNegOne) {
6970
LIBC_NAMESPACE::libc_errno = 0;
7071

71-
EXPECT_FP_EQ_WITH_EXCEPTION(static_cast<float16>(-1.0),
72+
EXPECT_FP_EQ_WITH_EXCEPTION(LIBC_NAMESPACE::fputil::cast<float16>(-1.0),
7273
LIBC_NAMESPACE::exp10m1f16(neg_max_normal),
7374
FE_INEXACT);
7475

7576
// round(-11 * log10(2), HP, RD);
76-
float16 x = static_cast<float16>(-0x1.a8p+1);
77+
float16 x = LIBC_NAMESPACE::fputil::cast<float16>(-0x1.a8p+1);
7778

7879
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
79-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::exp10m1f16(x),
80-
FE_INEXACT);
80+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
81+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
8182

82-
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(static_cast<float16>(-0x1.ffcp-1),
83-
LIBC_NAMESPACE::exp10m1f16(x),
84-
FE_INEXACT);
83+
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
84+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
85+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
8586

8687
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
87-
static_cast<float16>(-1.0), LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
88+
LIBC_NAMESPACE::fputil::cast<float16>(-1.0),
89+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
8890

8991
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
90-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::exp10m1f16(x),
91-
FE_INEXACT);
92+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
93+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
9294

9395
// Next float16 value below -0x1.ce4p+1.
94-
x = static_cast<float16>(-0x1.ce8p+1);
96+
x = LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ce8p+1);
9597

9698
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_NEAREST(
97-
static_cast<float16>(-1.0), LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
99+
LIBC_NAMESPACE::fputil::cast<float16>(-1.0),
100+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
98101

99-
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(static_cast<float16>(-0x1.ffcp-1),
100-
LIBC_NAMESPACE::exp10m1f16(x),
101-
FE_INEXACT);
102+
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_UPWARD(
103+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
104+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
102105

103106
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_DOWNWARD(
104-
static_cast<float16>(-1.0), LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
107+
LIBC_NAMESPACE::fputil::cast<float16>(-1.0),
108+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
105109

106110
EXPECT_FP_EQ_WITH_EXCEPTION_ROUNDING_TOWARD_ZERO(
107-
static_cast<float16>(-0x1.ffcp-1), LIBC_NAMESPACE::exp10m1f16(x),
108-
FE_INEXACT);
111+
LIBC_NAMESPACE::fputil::cast<float16>(-0x1.ffcp-1),
112+
LIBC_NAMESPACE::exp10m1f16(x), FE_INEXACT);
109113
}

0 commit comments

Comments
 (0)