Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 4 additions & 8 deletions libc/config/linux/aarch64/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion libc/test/UnitTest/FPMatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
31 changes: 14 additions & 17 deletions libc/test/src/math/smoke/acoshf16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
13 changes: 6 additions & 7 deletions libc/test/src/math/smoke/acospif16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
27 changes: 10 additions & 17 deletions libc/test/src/math/smoke/asinpif16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
8 changes: 4 additions & 4 deletions libc/test/src/math/smoke/cospif16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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);
}

Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/smoke/expf16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
5 changes: 0 additions & 5 deletions libc/test/src/math/smoke/rsqrtf16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
8 changes: 4 additions & 4 deletions libc/test/src/math/smoke/sinpif16_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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);
}

Expand Down
Loading