Skip to content

Commit b2ad5f5

Browse files
authored
[libc][math] Fix sNaN tests for AArch64 (#159483)
Fixes: #134917, #100632 (comment), #159417 --------- Signed-off-by: Krishna Pandey <[email protected]>
1 parent 8616dda commit b2ad5f5

File tree

9 files changed

+46
-65
lines changed

9 files changed

+46
-65
lines changed

libc/config/linux/aarch64/entrypoints.txt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -659,16 +659,13 @@ endif()
659659
if(LIBC_TYPES_HAS_FLOAT16)
660660
list(APPEND TARGET_LIBM_ENTRYPOINTS
661661
# math.h C23 _Float16 entrypoints
662-
# libc.src.math.acoshf16
662+
libc.src.math.acoshf16
663663
libc.src.math.asinpif16
664664
libc.src.math.canonicalizef16
665665
libc.src.math.ceilf16
666666
libc.src.math.copysignf16
667-
#TODO: Aarch64 bug https://github.com/llvm/llvm-project/issues/134917
668-
# libc.src.math.cospif16
669-
# TODO: aarch64 bug
670-
# Please see https://github.com/llvm/llvm-project/pull/100632#issuecomment-2258772681
671-
# libc.src.math.expf16
667+
libc.src.math.cospif16
668+
libc.src.math.expf16
672669
libc.src.math.f16add
673670
libc.src.math.f16addf
674671
# libc.src.math.f16addl
@@ -740,8 +737,7 @@ if(LIBC_TYPES_HAS_FLOAT16)
740737
libc.src.math.scalbnf16
741738
libc.src.math.setpayloadf16
742739
libc.src.math.setpayloadsigf16
743-
#TODO: Aarch64 bug https://github.com/llvm/llvm-project/issues/134917
744-
# libc.src.math.sinpif16
740+
libc.src.math.sinpif16
745741
libc.src.math.sqrtf16
746742
libc.src.math.totalorderf16
747743
libc.src.math.totalordermagf16

libc/test/UnitTest/FPMatcher.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ template <typename T> struct FPTest : public ErrnoCheckingTest {
177177
static constexpr T neg_zero = FPBits::zero(Sign::NEG).get_val();
178178
static constexpr T aNaN = FPBits::quiet_nan(Sign::POS).get_val();
179179
static constexpr T neg_aNaN = FPBits::quiet_nan(Sign::NEG).get_val();
180-
static constexpr T sNaN = FPBits::signaling_nan().get_val();
180+
// TODO: make this static constexpr
181+
const T sNaN = FPBits::signaling_nan().get_val();
181182
static constexpr T inf = FPBits::inf(Sign::POS).get_val();
182183
static constexpr T neg_inf = FPBits::inf(Sign::NEG).get_val();
183184
static constexpr T min_normal = FPBits::min_normal().get_val();

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

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,54 +15,51 @@
1515
using LlvmLibcAcoshf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
1616

1717
TEST_F(LlvmLibcAcoshf16Test, SpecialNumbers) {
18-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(aNaN));
18+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acoshf16(aNaN));
1919
EXPECT_MATH_ERRNO(0);
2020

21-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(sNaN), FE_INVALID);
21+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(sNaN), FE_INVALID);
2222
EXPECT_MATH_ERRNO(0);
2323

24-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(zero), FE_INVALID);
24+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(zero), FE_INVALID);
2525
EXPECT_MATH_ERRNO(EDOM);
2626

27-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(neg_zero));
27+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acoshf16(neg_zero));
2828
EXPECT_MATH_ERRNO(EDOM);
2929

30-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(neg_zero),
31-
FE_INVALID);
30+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(neg_zero),
31+
FE_INVALID);
3232
EXPECT_MATH_ERRNO(EDOM);
3333

3434
EXPECT_FP_EQ(inf, LIBC_NAMESPACE::acoshf16(inf));
3535
EXPECT_MATH_ERRNO(0);
3636

37-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(neg_inf));
37+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acoshf16(neg_inf));
3838
EXPECT_MATH_ERRNO(EDOM);
3939

40-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acoshf16(neg_inf),
41-
FE_INVALID);
40+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acoshf16(neg_inf),
41+
FE_INVALID);
4242
EXPECT_MATH_ERRNO(EDOM);
4343

4444
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::acoshf16(
4545
LIBC_NAMESPACE::fputil::cast<float16>(1.0)));
4646
EXPECT_MATH_ERRNO(0);
4747

48-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acoshf16(
49-
LIBC_NAMESPACE::fputil::cast<float16>(0.5)));
48+
EXPECT_FP_IS_NAN(
49+
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(0.5)));
5050
EXPECT_MATH_ERRNO(EDOM);
5151

52-
EXPECT_FP_EQ_WITH_EXCEPTION(
53-
aNaN,
52+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(
5453
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(-1.0)),
5554
FE_INVALID);
5655
EXPECT_MATH_ERRNO(EDOM);
5756

58-
EXPECT_FP_EQ_WITH_EXCEPTION(
59-
aNaN,
57+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(
6058
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(-2.0)),
6159
FE_INVALID);
6260
EXPECT_MATH_ERRNO(EDOM);
6361

64-
EXPECT_FP_EQ_WITH_EXCEPTION(
65-
aNaN,
62+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(
6663
LIBC_NAMESPACE::acoshf16(LIBC_NAMESPACE::fputil::cast<float16>(-3.0)),
6764
FE_INVALID);
6865
EXPECT_MATH_ERRNO(EDOM);

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,24 @@
1313

1414
using LlvmLibcAcospif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
1515
TEST_F(LlvmLibcAcospif16Test, SpecialNumbers) {
16-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(aNaN));
16+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(aNaN));
1717
EXPECT_MATH_ERRNO(0);
1818

19-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::acospif16(sNaN),
20-
FE_INVALID);
19+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::acospif16(sNaN), FE_INVALID);
2120
EXPECT_MATH_ERRNO(0);
2221

2322
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::acospif16(1.0f));
2423
EXPECT_MATH_ERRNO(0);
2524

26-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(inf));
25+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(inf));
2726
EXPECT_MATH_ERRNO(EDOM);
2827

29-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(neg_inf));
28+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(neg_inf));
3029
EXPECT_MATH_ERRNO(EDOM);
3130

32-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(2.0f));
31+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(2.0f));
3332
EXPECT_MATH_ERRNO(EDOM);
3433

35-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::acospif16(-2.0f));
34+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::acospif16(-2.0f));
3635
EXPECT_MATH_ERRNO(EDOM);
3736
}

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

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,44 +21,37 @@ TEST_F(LlvmLibcAsinpif16Test, SpecialNumbers) {
2121
EXPECT_FP_EQ(-0.5f16, LIBC_NAMESPACE::asinpif16(-1.0));
2222

2323
// NaN inputs
24-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
25-
LIBC_NAMESPACE::asinpif16(FPBits::quiet_nan().get_val()));
24+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::asinpif16(aNaN));
2625

27-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
28-
LIBC_NAMESPACE::asinpif16(FPBits::signaling_nan().get_val()));
26+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(sNaN), FE_INVALID);
2927
EXPECT_MATH_ERRNO(0);
3028

3129
// infinity inputs -> should return NaN
32-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(), LIBC_NAMESPACE::asinpif16(inf));
30+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(inf), FE_INVALID);
3331
EXPECT_MATH_ERRNO(EDOM);
3432

35-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
36-
LIBC_NAMESPACE::asinpif16(neg_inf));
33+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(neg_inf),
34+
FE_INVALID);
3735
EXPECT_MATH_ERRNO(EDOM);
3836
}
3937

4038
TEST_F(LlvmLibcAsinpif16Test, OutOfRange) {
4139
// Test values > 1
42-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
43-
LIBC_NAMESPACE::asinpif16(1.5f16));
40+
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(1.5f16));
4441
EXPECT_MATH_ERRNO(EDOM);
4542

46-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
47-
LIBC_NAMESPACE::asinpif16(2.0f16));
43+
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(2.0f16));
4844
EXPECT_MATH_ERRNO(EDOM);
4945

5046
// Test values < -1
51-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
52-
LIBC_NAMESPACE::asinpif16(-1.5f16));
47+
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(-1.5f16));
5348
EXPECT_MATH_ERRNO(EDOM);
5449

55-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
56-
LIBC_NAMESPACE::asinpif16(-2.0f16));
50+
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(-2.0f16));
5751
EXPECT_MATH_ERRNO(EDOM);
5852

5953
// Test maximum normal value (should be > 1 for float16)
60-
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
61-
LIBC_NAMESPACE::asinpif16(FPBits::max_normal().get_val()));
54+
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(FPBits::max_normal().get_val()));
6255
EXPECT_MATH_ERRNO(EDOM);
6356
}
6457

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
using LlvmLibcCospif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
1616

1717
TEST_F(LlvmLibcCospif16Test, SpecialNumbers) {
18-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::cospif16(sNaN), FE_INVALID);
18+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::cospif16(sNaN), FE_INVALID);
1919
EXPECT_MATH_ERRNO(0);
2020

21-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif16(aNaN));
21+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::cospif16(aNaN));
2222
EXPECT_MATH_ERRNO(0);
2323

2424
EXPECT_FP_EQ(FPBits::one().get_val(), LIBC_NAMESPACE::cospif16(zero));
@@ -27,10 +27,10 @@ TEST_F(LlvmLibcCospif16Test, SpecialNumbers) {
2727
EXPECT_FP_EQ(FPBits::one().get_val(), LIBC_NAMESPACE::cospif16(neg_zero));
2828
EXPECT_MATH_ERRNO(0);
2929

30-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif16(inf));
30+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::cospif16(inf));
3131
EXPECT_MATH_ERRNO(EDOM);
3232

33-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif16(neg_inf));
33+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::cospif16(neg_inf));
3434
EXPECT_MATH_ERRNO(EDOM);
3535
}
3636

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
using LlvmLibcExpf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
1717

1818
TEST_F(LlvmLibcExpf16Test, SpecialNumbers) {
19-
EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::expf16(aNaN));
19+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::expf16(aNaN));
2020
EXPECT_MATH_ERRNO(0);
2121

22-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::expf16(sNaN), FE_INVALID);
22+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::expf16(sNaN), FE_INVALID);
2323
EXPECT_MATH_ERRNO(0);
2424

2525
EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::expf16(inf));

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,7 @@ TEST_F(LlvmLibcRsqrtf16Test, SpecialNumbers) {
2020
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::rsqrtf16(aNaN));
2121
EXPECT_MATH_ERRNO(0);
2222

23-
// TODO: investigate why the exception is not raised on aarch64 post-build CI.
24-
#ifdef LIBC_TARGET_ARCH_IS_AARCH64
25-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::rsqrtf16(sNaN));
26-
#else
2723
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::rsqrtf16(sNaN), FE_INVALID);
28-
#endif // LIBC_TARGET_ARCH_IS_AARCH64
2924
EXPECT_MATH_ERRNO(0);
3025

3126
EXPECT_FP_EQ(inf, LIBC_NAMESPACE::rsqrtf16(zero));

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
using LlvmLibcSinpif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
1616

1717
TEST_F(LlvmLibcSinpif16Test, SpecialNumbers) {
18-
EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::sinpif16(sNaN), FE_INVALID);
18+
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::sinpif16(sNaN), FE_INVALID);
1919
EXPECT_MATH_ERRNO(0);
2020

21-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinpif16(aNaN));
21+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::sinpif16(aNaN));
2222
EXPECT_MATH_ERRNO(0);
2323

2424
EXPECT_FP_EQ(zero, LIBC_NAMESPACE::sinpif16(zero));
@@ -27,10 +27,10 @@ TEST_F(LlvmLibcSinpif16Test, SpecialNumbers) {
2727
EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::sinpif16(neg_zero));
2828
EXPECT_MATH_ERRNO(0);
2929

30-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinpif16(inf));
30+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::sinpif16(inf));
3131
EXPECT_MATH_ERRNO(EDOM);
3232

33-
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinpif16(neg_inf));
33+
EXPECT_FP_IS_NAN(LIBC_NAMESPACE::sinpif16(neg_inf));
3434
EXPECT_MATH_ERRNO(EDOM);
3535
}
3636

0 commit comments

Comments
 (0)