[libc-commits] [libc] [libc][math] Fix sNaN tests for AArch64 (PR #159483)
via libc-commits
libc-commits at lists.llvm.org
Wed Sep 17 16:54:44 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: Krishna Pandey (krishna2803)
<details>
<summary>Changes</summary>
Fixes: #<!-- -->134917, https://github.com/llvm/llvm-project/pull/100632#issuecomment-2258772681, #<!-- -->159417
---
Full diff: https://github.com/llvm/llvm-project/pull/159483.diff
8 Files Affected:
- (modified) libc/config/linux/aarch64/entrypoints.txt (+4-8)
- (modified) libc/test/UnitTest/FPMatcher.h (+2-1)
- (modified) libc/test/src/math/smoke/acoshf16_test.cpp (+14-17)
- (modified) libc/test/src/math/smoke/acospif16_test.cpp (+6-7)
- (modified) libc/test/src/math/smoke/asinpif16_test.cpp (+10-17)
- (modified) libc/test/src/math/smoke/cospif16_test.cpp (+4-4)
- (modified) libc/test/src/math/smoke/expf16_test.cpp (+2-2)
- (modified) libc/test/src/math/smoke/sinpif16_test.cpp (+4-4)
``````````diff
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 00c4b2ec0f828..e38fc857d4e16 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -659,16 +659,13 @@ endif()
if(LIBC_TYPES_HAS_FLOAT16)
list(APPEND TARGET_LIBM_ENTRYPOINTS
# math.h C23 _Float16 entrypoints
- # libc.src.math.acoshf16
+ libc.src.math.acoshf16
libc.src.math.asinpif16
libc.src.math.canonicalizef16
libc.src.math.ceilf16
libc.src.math.copysignf16
- #TODO: Aarch64 bug https://github.com/llvm/llvm-project/issues/134917
- # libc.src.math.cospif16
- # TODO: aarch64 bug
- # Please see https://github.com/llvm/llvm-project/pull/100632#issuecomment-2258772681
- # libc.src.math.expf16
+ libc.src.math.cospif16
+ libc.src.math.expf16
libc.src.math.f16add
libc.src.math.f16addf
# libc.src.math.f16addl
@@ -740,8 +737,7 @@ if(LIBC_TYPES_HAS_FLOAT16)
libc.src.math.scalbnf16
libc.src.math.setpayloadf16
libc.src.math.setpayloadsigf16
- #TODO: Aarch64 bug https://github.com/llvm/llvm-project/issues/134917
- # libc.src.math.sinpif16
+ libc.src.math.sinpif16
libc.src.math.sqrtf16
libc.src.math.totalorderf16
libc.src.math.totalordermagf16
diff --git a/libc/test/UnitTest/FPMatcher.h b/libc/test/UnitTest/FPMatcher.h
index 592cd1b3f37ab..6a68211e6d849 100644
--- a/libc/test/UnitTest/FPMatcher.h
+++ b/libc/test/UnitTest/FPMatcher.h
@@ -177,7 +177,8 @@ template <typename T> struct FPTest : public ErrnoCheckingTest {
static constexpr T neg_zero = FPBits::zero(Sign::NEG).get_val();
static constexpr T aNaN = FPBits::quiet_nan(Sign::POS).get_val();
static constexpr T neg_aNaN = FPBits::quiet_nan(Sign::NEG).get_val();
- static constexpr T sNaN = FPBits::signaling_nan().get_val();
+ // TODO: make this static constexpr
+ const T sNaN = FPBits::signaling_nan().get_val();
static constexpr T inf = FPBits::inf(Sign::POS).get_val();
static constexpr T neg_inf = FPBits::inf(Sign::NEG).get_val();
static constexpr T min_normal = FPBits::min_normal().get_val();
diff --git a/libc/test/src/math/smoke/acoshf16_test.cpp b/libc/test/src/math/smoke/acoshf16_test.cpp
index b020de40b51ed..88776b8c42eb2 100644
--- a/libc/test/src/math/smoke/acoshf16_test.cpp
+++ b/libc/test/src/math/smoke/acoshf16_test.cpp
@@ -15,54 +15,51 @@
using LlvmLibcAcoshf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
TEST_F(LlvmLibcAcoshf16Test, SpecialNumbers) {
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(aNaN));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acoshf16(aNaN));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(sNaN), FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(sNaN), FE_INVALID);
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(zero), FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(zero), FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(neg_zero));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acoshf16(neg_zero));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(neg_zero),
- FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(neg_zero),
+ FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
EXPECT_FP_EQ(inf, LIBC_NAMESPACE::acoshf16(inf));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acoshf16(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(neg_inf),
- FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(neg_inf),
+ FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::acoshf16(
LIBC_NAMESPACE::fputil::cast<float16>(1.0)));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(
- LIBC_NAMESPACE::fputil::cast<float16>(0.5)));
+ EXPECT_FP_IS_NAN(
+ LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(0.5)));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ_WITH_EXCEPTION(
- aNaN,
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(-1.0)),
FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ_WITH_EXCEPTION(
- aNaN,
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(-2.0)),
FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ_WITH_EXCEPTION(
- aNaN,
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(-3.0)),
FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
diff --git a/libc/test/src/math/smoke/acospif16_test.cpp b/libc/test/src/math/smoke/acospif16_test.cpp
index 0669d21a8d99c..79618b54c3d1d 100644
--- a/libc/test/src/math/smoke/acospif16_test.cpp
+++ b/libc/test/src/math/smoke/acospif16_test.cpp
@@ -13,25 +13,24 @@
using LlvmLibcAcospif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
TEST_F(LlvmLibcAcospif16Test, SpecialNumbers) {
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(aNaN));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(aNaN));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acospif16(sNaN),
- FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acospif16(sNaN), FE_INVALID);
EXPECT_MATH_ERRNO(0);
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::acospif16(1.0f));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(inf));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(2.0f));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(2.0f));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(-2.0f));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(-2.0f));
EXPECT_MATH_ERRNO(EDOM);
}
diff --git a/libc/test/src/math/smoke/asinpif16_test.cpp b/libc/test/src/math/smoke/asinpif16_test.cpp
index 328da7fb0606f..9589901715075 100644
--- a/libc/test/src/math/smoke/asinpif16_test.cpp
+++ b/libc/test/src/math/smoke/asinpif16_test.cpp
@@ -21,44 +21,37 @@ TEST_F(LlvmLibcAsinpif16Test, SpecialNumbers) {
EXPECT_FP_EQ(-0.5f16, LIBC_NAMESPACE::asinpif16(-1.0));
// NaN inputs
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(FPBits::quiet_nan().get_val()));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::asinpif16(aNaN));
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(FPBits::signaling_nan().get_val()));
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(sNaN), FE_INVALID);
EXPECT_MATH_ERRNO(0);
// infinity inputs -> should return NaN
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(), LIBC_NAMESPACE::asinpif16(inf));
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(inf), FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(neg_inf));
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(neg_inf),
+ FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
}
TEST_F(LlvmLibcAsinpif16Test, OutOfRange) {
// Test values > 1
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(1.5f16));
+ EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(1.5f16));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(2.0f16));
+ EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(2.0f16));
EXPECT_MATH_ERRNO(EDOM);
// Test values < -1
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(-1.5f16));
+ EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(-1.5f16));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(-2.0f16));
+ EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(-2.0f16));
EXPECT_MATH_ERRNO(EDOM);
// Test maximum normal value (should be > 1 for float16)
- EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
- LIBC_NAMESPACE::asinpif16(FPBits::max_normal().get_val()));
+ EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(FPBits::max_normal().get_val()));
EXPECT_MATH_ERRNO(EDOM);
}
diff --git a/libc/test/src/math/smoke/cospif16_test.cpp b/libc/test/src/math/smoke/cospif16_test.cpp
index dadf0cf7b553b..307e483d8ab8d 100644
--- a/libc/test/src/math/smoke/cospif16_test.cpp
+++ b/libc/test/src/math/smoke/cospif16_test.cpp
@@ -15,10 +15,10 @@
using LlvmLibcCospif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
TEST_F(LlvmLibcCospif16Test, SpecialNumbers) {
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::cospif16(sNaN), FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::cospif16(sNaN), FE_INVALID);
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif16(aNaN));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::cospif16(aNaN));
EXPECT_MATH_ERRNO(0);
EXPECT_FP_EQ(FPBits::one().get_val(), LIBC_NAMESPACE::cospif16(zero));
@@ -27,10 +27,10 @@ TEST_F(LlvmLibcCospif16Test, SpecialNumbers) {
EXPECT_FP_EQ(FPBits::one().get_val(), LIBC_NAMESPACE::cospif16(neg_zero));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif16(inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::cospif16(inf));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif16(neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::cospif16(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
}
diff --git a/libc/test/src/math/smoke/expf16_test.cpp b/libc/test/src/math/smoke/expf16_test.cpp
index 85988c5518787..6334a31e6c397 100644
--- a/libc/test/src/math/smoke/expf16_test.cpp
+++ b/libc/test/src/math/smoke/expf16_test.cpp
@@ -16,10 +16,10 @@
using LlvmLibcExpf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
TEST_F(LlvmLibcExpf16Test, SpecialNumbers) {
- EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::expf16(aNaN));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::expf16(aNaN));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::expf16(sNaN), FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::expf16(sNaN), FE_INVALID);
EXPECT_MATH_ERRNO(0);
EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::expf16(inf));
diff --git a/libc/test/src/math/smoke/sinpif16_test.cpp b/libc/test/src/math/smoke/sinpif16_test.cpp
index 0b4ec915a5cee..e56514ac25fc0 100644
--- a/libc/test/src/math/smoke/sinpif16_test.cpp
+++ b/libc/test/src/math/smoke/sinpif16_test.cpp
@@ -15,10 +15,10 @@
using LlvmLibcSinpif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
TEST_F(LlvmLibcSinpif16Test, SpecialNumbers) {
- EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::sinpif16(sNaN), FE_INVALID);
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::sinpif16(sNaN), FE_INVALID);
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinpif16(aNaN));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::sinpif16(aNaN));
EXPECT_MATH_ERRNO(0);
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::sinpif16(zero));
@@ -27,10 +27,10 @@ TEST_F(LlvmLibcSinpif16Test, SpecialNumbers) {
EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::sinpif16(neg_zero));
EXPECT_MATH_ERRNO(0);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinpif16(inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::sinpif16(inf));
EXPECT_MATH_ERRNO(EDOM);
- EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinpif16(neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::sinpif16(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/159483
More information about the libc-commits
mailing list