From 6309b08e594baf02d70b8e5ad1c52fbf2b05a85f Mon Sep 17 00:00:00 2001 From: Krishna Pandey Date: Thu, 18 Sep 2025 05:12:30 +0530 Subject: [PATCH 1/5] refactor: EXPECT_FP_EQUAL(aNaN,...) -> EXPECT_FP_IS_NAN(...) Signed-off-by: Krishna Pandey --- libc/test/src/math/smoke/asinpif16_test.cpp | 27 ++++++++------------- libc/test/src/math/smoke/cospif16_test.cpp | 8 +++--- libc/test/src/math/smoke/expf16_test.cpp | 4 +-- 3 files changed, 16 insertions(+), 23 deletions(-) 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; 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; 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)); From db213cce4ac4739fcb1ae6b2818f88fa43169771 Mon Sep 17 00:00:00 2001 From: Krishna Pandey Date: Thu, 18 Sep 2025 05:13:03 +0530 Subject: [PATCH 2/5] fix: make sNaN simply const rather than static constexpr Signed-off-by: Krishna Pandey --- libc/test/UnitTest/FPMatcher.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 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(); From 21997656a93747f9c621be75ba5724c5f082f1f7 Mon Sep 17 00:00:00 2001 From: Krishna Pandey Date: Thu, 18 Sep 2025 05:13:20 +0530 Subject: [PATCH 3/5] chore: re-enable entrypoints for AAarch64 Signed-off-by: Krishna Pandey --- libc/config/linux/aarch64/entrypoints.txt | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) 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 From d852ab78e58d42d5f808539c3bb01e2afcd9d7f0 Mon Sep 17 00:00:00 2001 From: Krishna Pandey Date: Thu, 18 Sep 2025 05:18:43 +0530 Subject: [PATCH 4/5] refactor: EXPECT_FP_EQUAL(aNaN,...) -> EXPECT_FP_IS_NAN(...) Signed-off-by: Krishna Pandey --- libc/test/src/math/smoke/acoshf16_test.cpp | 31 ++++++++++----------- libc/test/src/math/smoke/acospif16_test.cpp | 13 ++++----- libc/test/src/math/smoke/sinpif16_test.cpp | 8 +++--- 3 files changed, 24 insertions(+), 28 deletions(-) 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; 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(1.0))); EXPECT_MATH_ERRNO(0); - EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16( - LIBC_NAMESPACE::fputil::cast(0.5))); + EXPECT_FP_IS_NAN( + LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast(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(-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(-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(-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; 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/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; 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); } From 4e36e23a33178c39defc86abf348572e671d10bd Mon Sep 17 00:00:00 2001 From: Krishna Pandey Date: Thu, 18 Sep 2025 05:39:50 +0530 Subject: [PATCH 5/5] chore: remove AArch64 ggaurds Signed-off-by: Krishna Pandey --- libc/test/src/math/smoke/rsqrtf16_test.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libc/test/src/math/smoke/rsqrtf16_test.cpp b/libc/test/src/math/smoke/rsqrtf16_test.cpp index 2bef034722349..e103e73014a01 100644 --- a/libc/test/src/math/smoke/rsqrtf16_test.cpp +++ b/libc/test/src/math/smoke/rsqrtf16_test.cpp @@ -20,12 +20,7 @@ TEST_F(LlvmLibcRsqrtf16Test, SpecialNumbers) { EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::rsqrtf16(aNaN)); EXPECT_MATH_ERRNO(0); - // TODO: investigate why the exception is not raised on aarch64 post-build CI. -#ifdef LIBC_TARGET_ARCH_IS_AARCH64 - EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::rsqrtf16(sNaN)); -#else EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::rsqrtf16(sNaN), FE_INVALID); -#endif // LIBC_TARGET_ARCH_IS_AARCH64 EXPECT_MATH_ERRNO(0); EXPECT_FP_EQ(inf, LIBC_NAMESPACE::rsqrtf16(zero));