Skip to content

Commit 5a5136c

Browse files
committed
minor changes
1 parent 96ab636 commit 5a5136c

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

libc/src/math/generic/asinf16.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
3131
uint16_t x_abs = x_u & 0x7fff;
3232
float xf = x;
3333

34-
float xsq = xf * xf;
35-
36-
// |x| <= 0x1p-1, |x| <= 0.5
37-
if (x_abs <= 0x3800) {
34+
// |x| > 0x1p0, |x| > 1, or x is NaN.
35+
if (LIBC_UNLIKELY(x_abs > 0x3c00)) {
3836
// asinf16(NaN) = NaN
3937
if (xbits.is_nan()) {
4038
if (xbits.is_signaling_nan()) {
@@ -44,7 +42,18 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
4442

4543
return x;
4644
}
45+
46+
// 1 < |x| <= +/-inf
47+
fputil::raise_except_if_required(FE_INVALID);
48+
fputil::set_errno_if_required(EDOM);
49+
50+
return FPBits::quiet_nan().get_val();
51+
}
52+
53+
float xsq = xf * xf;
4754

55+
// |x| <= 0x1p-1, |x| <= 0.5
56+
if (x_abs <= 0x3800) {
4857
// asinf16(+/-0) = +/-0
4958
if (LIBC_UNLIKELY(x_abs == 0))
5059
return x;
@@ -73,17 +82,6 @@ LLVM_LIBC_FUNCTION(float16, asinf16, (float16 x)) {
7382
return fputil::cast<float16>(xf * result);
7483
}
7584

76-
// |x| > 1, asinf16(x) = NaN
77-
if (LIBC_UNLIKELY(x_abs > 0x3c00)) {
78-
// |x| <= +/-inf
79-
if (LIBC_UNLIKELY(x_abs <= 0x7c00)) {
80-
fputil::set_errno_if_required(EDOM);
81-
fputil::raise_except_if_required(FE_INVALID);
82-
}
83-
84-
return FPBits::quiet_nan().get_val();
85-
}
86-
8785
// When |x| > 0.5, assume that 0.5 < |x| <= 1,
8886
//
8987
// Step-by-step range-reduction proof:

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ TEST_F(LlvmLibcAsinf16Test, SpecialNumbers) {
1919
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinf16(aNaN));
2020
EXPECT_MATH_ERRNO(0);
2121

22+
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::asinf16(sNaN), FE_INVALID);
23+
EXPECT_MATH_ERRNO(0);
24+
2225
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::asinf16(zero));
2326
EXPECT_MATH_ERRNO(0);
2427

0 commit comments

Comments
 (0)