https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/217578
>From 0ce3d4a4441a035894375710742317eb8077dc71 Mon Sep 17 00:00:00 2001 From: Sukumarsawant <[email protected]> Date: Fri, 21 Aug 2026 17:18:36 +0530 Subject: [PATCH 1/4] nit --- libc/test/shared/shared_math_test.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 07802e0e30f60..ae96c6251c9ae 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -703,9 +703,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) { float128(0.0))); EXPECT_FP_EQ(float128(0.0), setpayloadsigf128_res); - float128 neg_min_denormal = FPBits::min_subnormal(Sign::NEG).get_val(); - float128 min_denormal = FPBits::min_subnormal(Sign ::POS).get_val(); - #ifdef LIBC_TYPES_HAS_FLOAT16 EXPECT_FP_EQ(10.0f16, LIBC_NAMESPACE::shared::f16fmaf128( float128(2.0), float128(3.0), float128(4.0))); >From 5877326568f61bc9d90bbccb550e1a049baae090 Mon Sep 17 00:00:00 2001 From: Sukumarsawant <[email protected]> Date: Thu, 20 Aug 2026 15:45:09 +0530 Subject: [PATCH 2/4] fmodf128 --- libc/config/baremetal/aarch64/entrypoints.txt | 2 +- libc/config/baremetal/arm/entrypoints.txt | 2 +- libc/config/baremetal/riscv/entrypoints.txt | 2 +- libc/config/darwin/aarch64/entrypoints.txt | 2 +- libc/config/darwin/x86_64/entrypoints.txt | 1 + libc/config/freebsd/x86_64/entrypoints.txt | 2 +- libc/config/gpu/amdgpu/entrypoints.txt | 1 + libc/config/gpu/nvptx/entrypoints.txt | 1 + libc/config/linux/aarch64/entrypoints.txt | 2 +- libc/config/linux/arm/entrypoints.txt | 1 + libc/config/linux/riscv/entrypoints.txt | 2 +- libc/config/linux/x86_64/entrypoints.txt | 2 +- libc/config/windows/entrypoints.txt | 1 + libc/shared/math/fmodf128.h | 6 ------ libc/src/__support/math/CMakeLists.txt | 2 +- libc/src/__support/math/fmodf128.h | 13 +++++-------- libc/src/math/fmodf128.h | 5 +++++ libc/src/math/generic/CMakeLists.txt | 1 + libc/src/math/generic/fmodf128.cpp | 6 +++++- libc/test/shared/shared_math_constexpr_test.cpp | 4 ++-- libc/test/shared/shared_math_test.cpp | 2 +- libc/test/src/math/smoke/CMakeLists.txt | 1 + libc/test/src/math/smoke/fmodf128_test.cpp | 5 +++++ utils/bazel/llvm-project-overlay/libc/BUILD.bazel | 4 +++- .../libc/test/src/math/smoke/BUILD.bazel | 3 +++ 25 files changed, 45 insertions(+), 28 deletions(-) diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt index 66911050bbf4a..eb6770aad0f90 100644 --- a/libc/config/baremetal/aarch64/entrypoints.txt +++ b/libc/config/baremetal/aarch64/entrypoints.txt @@ -463,6 +463,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -773,7 +774,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt index ef01c5a9e07fb..f23ee7b5d8cad 100644 --- a/libc/config/baremetal/arm/entrypoints.txt +++ b/libc/config/baremetal/arm/entrypoints.txt @@ -475,6 +475,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -784,7 +785,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt index 3313ac9b6be4c..e75f79cd25878 100644 --- a/libc/config/baremetal/riscv/entrypoints.txt +++ b/libc/config/baremetal/riscv/entrypoints.txt @@ -471,6 +471,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 # libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -781,7 +782,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - # libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt index a7b95b744e960..daf1a2483a785 100644 --- a/libc/config/darwin/aarch64/entrypoints.txt +++ b/libc/config/darwin/aarch64/entrypoints.txt @@ -282,6 +282,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -593,7 +594,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt index 3e38ac38b3791..2166d9393dc74 100644 --- a/libc/config/darwin/x86_64/entrypoints.txt +++ b/libc/config/darwin/x86_64/entrypoints.txt @@ -174,6 +174,7 @@ set(TARGET_LIBM_ENTRYPOINTS #libc.src.math.fminl #libc.src.math.fmod #libc.src.math.fmodf + #libc.src.math.fmodf128 #libc.src.math.frexp #libc.src.math.frexpf #libc.src.math.frexpl diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt index 5bf25d849e281..42f0bff1c784b 100644 --- a/libc/config/freebsd/x86_64/entrypoints.txt +++ b/libc/config/freebsd/x86_64/entrypoints.txt @@ -217,6 +217,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fmul libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.frexp libc.src.math.frexpf @@ -533,7 +534,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt index b81aabde82a3b..caaaee15ea913 100644 --- a/libc/config/gpu/amdgpu/entrypoints.txt +++ b/libc/config/gpu/amdgpu/entrypoints.txt @@ -410,6 +410,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt index c930b09c5253c..3e97fca8ba0e3 100644 --- a/libc/config/gpu/nvptx/entrypoints.txt +++ b/libc/config/gpu/nvptx/entrypoints.txt @@ -406,6 +406,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 0139010390342..9214f7a8c1170 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -640,6 +640,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -944,7 +945,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt index 095a4cc279c17..4653b7d655012 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -465,6 +465,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmul libc.src.math.frexp libc.src.math.frexpf diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index f69dad1d74633..caad1ecc958ad 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -709,6 +709,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -1030,7 +1031,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 5e80a8d31b136..054d125d6acfb 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -718,6 +718,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fminl libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.fmul libc.src.math.fmull @@ -1039,7 +1040,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.faddf128 libc.src.math.fdivf128 libc.src.math.ffmaf128 - libc.src.math.fmodf128 libc.src.math.fmulf128 libc.src.math.frexpf128 libc.src.math.fromfpf128 diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt index ce79244ddf760..420b8b9fa77ba 100644 --- a/libc/config/windows/entrypoints.txt +++ b/libc/config/windows/entrypoints.txt @@ -250,6 +250,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fmul libc.src.math.fmod libc.src.math.fmodf + libc.src.math.fmodf128 libc.src.math.fmodl libc.src.math.frexp libc.src.math.frexpf diff --git a/libc/shared/math/fmodf128.h b/libc/shared/math/fmodf128.h index 0000893546763..97bee8e09dca8 100644 --- a/libc/shared/math/fmodf128.h +++ b/libc/shared/math/fmodf128.h @@ -9,10 +9,6 @@ #ifndef LLVM_LIBC_SHARED_MATH_FMODF128_H #define LLVM_LIBC_SHARED_MATH_FMODF128_H -#include "include/llvm-libc-types/float128.h" - -#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128 - #include "shared/libc_common.h" #include "src/__support/math/fmodf128.h" @@ -24,6 +20,4 @@ using math::fmodf128; } // namespace shared } // namespace LIBC_NAMESPACE_DECL -#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 - #endif // LLVM_LIBC_SHARED_MATH_FMODF128_H diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index 194c0deb56e3d..d86e89727ac58 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -1426,7 +1426,7 @@ add_header_library( HDRS fmodf128.h DEPENDS - libc.include.llvm-libc-types.float128 + libc.src.__support.FPUtil.float128 libc.src.__support.FPUtil.generic.fmod libc.src.__support.macros.config ) diff --git a/libc/src/__support/math/fmodf128.h b/libc/src/__support/math/fmodf128.h index 7ed105b81af48..5a1b29c1997bc 100644 --- a/libc/src/__support/math/fmodf128.h +++ b/libc/src/__support/math/fmodf128.h @@ -9,23 +9,20 @@ #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMODF128_H #define LLVM_LIBC_SRC___SUPPORT_MATH_FMODF128_H -#include "include/llvm-libc-types/float128.h" - -#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128 - +#include "src/__support/FPUtil/float128.h" #include "src/__support/FPUtil/generic/FMod.h" #include "src/__support/macros/config.h" namespace LIBC_NAMESPACE_DECL { namespace math { -LIBC_INLINE constexpr float128 fmodf128(float128 x, float128 y) { - return fputil::generic::FMod<float128>::eval(x, y); +using LIBC_NAMESPACE::fputil::Float128; + +LIBC_INLINE constexpr Float128 fmodf128(Float128 x, Float128 y) { + return fputil::generic::FMod<Float128>::eval(x, y); } } // namespace math } // namespace LIBC_NAMESPACE_DECL -#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 - #endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMODF128_H diff --git a/libc/src/math/fmodf128.h b/libc/src/math/fmodf128.h index 908fc61a19497..4e18c34c5a83b 100644 --- a/libc/src/math/fmodf128.h +++ b/libc/src/math/fmodf128.h @@ -9,11 +9,16 @@ #ifndef LLVM_LIBC_SRC_MATH_FMODF128_H #define LLVM_LIBC_SRC_MATH_FMODF128_H +#include "src/__support/FPUtil/float128.h" #include "src/__support/macros/config.h" #include "src/__support/macros/properties/types.h" namespace LIBC_NAMESPACE_DECL { +#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128 +using float128 = LIBC_NAMESPACE::fputil::Float128; +#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 + float128 fmodf128(float128 x, float128 y); } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index 74f1c859d096b..bf55acd7c7c2b 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -3475,6 +3475,7 @@ add_entrypoint_object( HDRS ../fmodf128.h DEPENDS + libc.src.__support.CPP.bit libc.src.__support.math.fmodf128 ) diff --git a/libc/src/math/generic/fmodf128.cpp b/libc/src/math/generic/fmodf128.cpp index c72ec7ec1cdf5..fb22a165b2aa8 100644 --- a/libc/src/math/generic/fmodf128.cpp +++ b/libc/src/math/generic/fmodf128.cpp @@ -7,12 +7,16 @@ //===----------------------------------------------------------------------===// #include "src/math/fmodf128.h" +#include "src/__support/CPP/bit.h" #include "src/__support/math/fmodf128.h" namespace LIBC_NAMESPACE_DECL { +using LIBC_NAMESPACE::fputil::Float128; + LLVM_LIBC_FUNCTION(float128, fmodf128, (float128 x, float128 y)) { - return math::fmodf128(x, y); + return cpp::bit_cast<float128>( + math::fmodf128(cpp::bit_cast<Float128>(x), cpp::bit_cast<Float128>(y))); } } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp index af5396b5ee19e..cc4b18d49575f 100644 --- a/libc/test/shared/shared_math_constexpr_test.cpp +++ b/libc/test/shared/shared_math_constexpr_test.cpp @@ -381,6 +381,8 @@ static_assert(0 == LIBC_NAMESPACE::shared::isnanl(0.0L)); //===----------------------------------------------------------------------===// static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::ceilf128(Float128(0.0))); +static_assert(0 == + LIBC_NAMESPACE::shared::fmodf128(Float128(4.0), Float128(2.0))); static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::copysignf128(Float128(0.0), Float128(0.0))); @@ -480,8 +482,6 @@ constexpr float128 TOTALORDERMAGF128_Y = float128(0.0); static_assert(1 == LIBC_NAMESPACE::shared::totalordermagf128(&TOTALORDERMAGF128_X, &TOTALORDERMAGF128_Y)); -static_assert(0 == - LIBC_NAMESPACE::shared::fmodf128(float128(4.0), float128(2.0))); static_assert(float128(0.0) == [] { float128 iptr{}; return LIBC_NAMESPACE::shared::modff128(float128(0.0), &iptr); diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index ae96c6251c9ae..8e9b4c2888cf0 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -587,6 +587,7 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) { EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::atan2f128(Float128(0.0), Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::ceilf128(Float128(0.0))); + LIBC_NAMESPACE::shared::fmodf128(Float128(1.0), Float128(1.0)); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::copysignf128( Float128(0.0), Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fabsf128(Float128(0.0))); @@ -734,7 +735,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) { float128 totalordermagf128_y = float128(0.0); EXPECT_EQ(1, LIBC_NAMESPACE::shared::totalordermagf128(&totalordermagf128_x, &totalordermagf128_y)); - LIBC_NAMESPACE::shared::fmodf128(float128(1.0), float128(1.0)); float128 modff128_iptr = float128(0.0); EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::modff128(float128(0.0), &modff128_iptr)); diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index 02c3f31c38ae8..1baf2c5b60176 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -4706,6 +4706,7 @@ add_fp_unittest( DEPENDS libc.hdr.errno_macros libc.hdr.fenv_macros + libc.src.__support.FPUtil.float128 libc.src.math.fmodf128 libc.src.__support.FPUtil.fenv_impl # FIXME: Currently fails on the GPU build. diff --git a/libc/test/src/math/smoke/fmodf128_test.cpp b/libc/test/src/math/smoke/fmodf128_test.cpp index f75aadac84386..2afae9b9e98f4 100644 --- a/libc/test/src/math/smoke/fmodf128_test.cpp +++ b/libc/test/src/math/smoke/fmodf128_test.cpp @@ -7,7 +7,12 @@ //===----------------------------------------------------------------------===// #include "FModTest.h" +#include "src/__support/FPUtil/float128.h" #include "src/math/fmodf128.h" +#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128 +using float128 = LIBC_NAMESPACE::fputil::Float128; +#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 + LIST_FMOD_TESTS(float128, LIBC_NAMESPACE::fmodf128) diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 73ec1c0146c82..10b6552d46c09 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -5956,9 +5956,9 @@ libc_support_library( name = "__support_math_fmodf128", hdrs = ["src/__support/math/fmodf128.h"], deps = [ + ":__support_fputil_float128", ":__support_fputil_generic_fmod", ":__support_macros_config", - ":llvm_libc_types_float128", ], ) @@ -12279,6 +12279,8 @@ libc_math_function( libc_math_function( name = "fmodf128", additional_deps = [ + ":__support_cpp_bit", + ":__support_fputil_float128", ":__support_math_fmodf128", ], ) diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel index 8c47fb7858e49..7ebd4955198cb 100644 --- a/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel @@ -839,6 +839,9 @@ math_test( math_test( name = "fmodf128", hdrs = ["FModTest.h"], + deps = [ + "//libc:__support_fputil_float128", + ], ) math_test( >From 30a803526e4a8b680a4d7285505e7cc1caec60b2 Mon Sep 17 00:00:00 2001 From: Sukumarsawant <[email protected]> Date: Thu, 20 Aug 2026 16:07:11 +0530 Subject: [PATCH 3/4] remainderf128 --- libc/config/baremetal/aarch64/entrypoints.txt | 2 +- libc/config/baremetal/arm/entrypoints.txt | 2 +- libc/config/baremetal/riscv/entrypoints.txt | 2 +- libc/config/darwin/aarch64/entrypoints.txt | 2 +- libc/config/darwin/x86_64/entrypoints.txt | 1 + libc/config/freebsd/x86_64/entrypoints.txt | 2 +- libc/config/gpu/amdgpu/entrypoints.txt | 1 + libc/config/gpu/nvptx/entrypoints.txt | 1 + libc/config/linux/aarch64/entrypoints.txt | 2 +- libc/config/linux/arm/entrypoints.txt | 1 + libc/config/linux/riscv/entrypoints.txt | 2 +- libc/config/linux/x86_64/entrypoints.txt | 2 +- libc/config/windows/entrypoints.txt | 1 + libc/shared/math/remainderf128.h | 6 ------ libc/src/__support/math/CMakeLists.txt | 2 +- libc/src/__support/math/remainderf128.h | 11 ++++------- libc/src/math/generic/CMakeLists.txt | 1 + libc/src/math/generic/remainderf128.cpp | 6 +++++- libc/src/math/remainderf128.h | 5 +++++ libc/test/shared/shared_math_constexpr_test.cpp | 6 +++--- libc/test/shared/shared_math_test.cpp | 4 ++-- utils/bazel/llvm-project-overlay/libc/BUILD.bazel | 4 +++- 22 files changed, 37 insertions(+), 29 deletions(-) diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt index eb6770aad0f90..a00a7c5548ad0 100644 --- a/libc/config/baremetal/aarch64/entrypoints.txt +++ b/libc/config/baremetal/aarch64/entrypoints.txt @@ -563,6 +563,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -787,7 +788,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt index f23ee7b5d8cad..a922cde401214 100644 --- a/libc/config/baremetal/arm/entrypoints.txt +++ b/libc/config/baremetal/arm/entrypoints.txt @@ -575,6 +575,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -798,7 +799,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt index e75f79cd25878..a8a3504906c65 100644 --- a/libc/config/baremetal/riscv/entrypoints.txt +++ b/libc/config/baremetal/riscv/entrypoints.txt @@ -571,6 +571,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -795,7 +796,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt index daf1a2483a785..22ab2bbaa7ce6 100644 --- a/libc/config/darwin/aarch64/entrypoints.txt +++ b/libc/config/darwin/aarch64/entrypoints.txt @@ -382,6 +382,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -607,7 +608,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt index 2166d9393dc74..edd155dd8103d 100644 --- a/libc/config/darwin/x86_64/entrypoints.txt +++ b/libc/config/darwin/x86_64/entrypoints.txt @@ -234,6 +234,7 @@ set(TARGET_LIBM_ENTRYPOINTS #libc.src.math.nexttowardl #libc.src.math.nextupf128 #libc.src.math.remainderf + #libc.src.math.remainderf128 #libc.src.math.remainder #libc.src.math.remainderl #libc.src.math.remquof diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt index 42f0bff1c784b..707172d337a8b 100644 --- a/libc/config/freebsd/x86_64/entrypoints.txt +++ b/libc/config/freebsd/x86_64/entrypoints.txt @@ -285,6 +285,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.pow libc.src.math.powf libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainder libc.src.math.remainderl libc.src.math.remquof @@ -547,7 +548,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt index caaaee15ea913..f047b932184d1 100644 --- a/libc/config/gpu/amdgpu/entrypoints.txt +++ b/libc/config/gpu/amdgpu/entrypoints.txt @@ -506,6 +506,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt index 3e97fca8ba0e3..8eea2f1d409b2 100644 --- a/libc/config/gpu/nvptx/entrypoints.txt +++ b/libc/config/gpu/nvptx/entrypoints.txt @@ -503,6 +503,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 9214f7a8c1170..de1b28290f30c 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -740,6 +740,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -958,7 +959,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt index 4653b7d655012..20c3abe02072a 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -552,6 +552,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index caad1ecc958ad..480ce02b8d9dd 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -809,6 +809,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -1044,7 +1045,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 054d125d6acfb..fcab125ef0b30 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -818,6 +818,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.powf libc.src.math.remainder libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainderl libc.src.math.remquo libc.src.math.remquof @@ -1053,7 +1054,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128) libc.src.math.logbf128 libc.src.math.modff128 libc.src.math.nanf128 - libc.src.math.remainderf128 libc.src.math.remquof128 libc.src.math.scalblnf128 libc.src.math.scalbnf128 diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt index 420b8b9fa77ba..6795d1612284c 100644 --- a/libc/config/windows/entrypoints.txt +++ b/libc/config/windows/entrypoints.txt @@ -318,6 +318,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.pow libc.src.math.powf libc.src.math.remainderf + libc.src.math.remainderf128 libc.src.math.remainder libc.src.math.remainderl libc.src.math.remquof diff --git a/libc/shared/math/remainderf128.h b/libc/shared/math/remainderf128.h index b1d02de64c20b..d0d598c0c9c73 100644 --- a/libc/shared/math/remainderf128.h +++ b/libc/shared/math/remainderf128.h @@ -9,10 +9,6 @@ #ifndef LLVM_LIBC_SHARED_MATH_REMAINDERF128_H #define LLVM_LIBC_SHARED_MATH_REMAINDERF128_H -#include "include/llvm-libc-types/float128.h" - -#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128 - #include "shared/libc_common.h" #include "src/__support/math/remainderf128.h" @@ -24,6 +20,4 @@ using math::remainderf128; } // namespace shared } // namespace LIBC_NAMESPACE_DECL -#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 - #endif // LLVM_LIBC_SHARED_MATH_REMAINDERF128_H diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index d86e89727ac58..2c6d3c72bf40a 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -2298,7 +2298,7 @@ add_header_library( HDRS remainderf128.h DEPENDS - libc.include.llvm-libc-types.float128 + libc.src.__support.FPUtil.float128 libc.src.__support.FPUtil.division_and_remainder_operations libc.src.__support.macros.config ) diff --git a/libc/src/__support/math/remainderf128.h b/libc/src/__support/math/remainderf128.h index cd3ed15a7b1a2..3ef5d7e365caf 100644 --- a/libc/src/__support/math/remainderf128.h +++ b/libc/src/__support/math/remainderf128.h @@ -9,17 +9,16 @@ #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_REMAINDERF128_H #define LLVM_LIBC_SRC___SUPPORT_MATH_REMAINDERF128_H -#include "include/llvm-libc-types/float128.h" - -#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128 - #include "src/__support/FPUtil/DivisionAndRemainderOperations.h" +#include "src/__support/FPUtil/float128.h" #include "src/__support/macros/config.h" namespace LIBC_NAMESPACE_DECL { namespace math { -LIBC_INLINE constexpr float128 remainderf128(float128 x, float128 y) { +using LIBC_NAMESPACE::fputil::Float128; + +LIBC_INLINE constexpr Float128 remainderf128(Float128 x, Float128 y) { int quotient{}; return fputil::remquo(x, y, quotient); } @@ -27,6 +26,4 @@ LIBC_INLINE constexpr float128 remainderf128(float128 x, float128 y) { } // namespace math } // namespace LIBC_NAMESPACE_DECL -#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 - #endif // LLVM_LIBC_SRC___SUPPORT_MATH_REMAINDERF128_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index bf55acd7c7c2b..3e2d2835eb3f4 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -2854,6 +2854,7 @@ add_entrypoint_object( HDRS ../remainderf128.h DEPENDS + libc.src.__support.CPP.bit libc.src.__support.math.remainderf128 ) diff --git a/libc/src/math/generic/remainderf128.cpp b/libc/src/math/generic/remainderf128.cpp index 072d19737d382..47b265bb2f47c 100644 --- a/libc/src/math/generic/remainderf128.cpp +++ b/libc/src/math/generic/remainderf128.cpp @@ -7,12 +7,16 @@ //===----------------------------------------------------------------------===// #include "src/math/remainderf128.h" +#include "src/__support/CPP/bit.h" #include "src/__support/math/remainderf128.h" namespace LIBC_NAMESPACE_DECL { +using LIBC_NAMESPACE::fputil::Float128; + LLVM_LIBC_FUNCTION(float128, remainderf128, (float128 x, float128 y)) { - return math::remainderf128(x, y); + return cpp::bit_cast<float128>(math::remainderf128( + cpp::bit_cast<Float128>(x), cpp::bit_cast<Float128>(y))); } } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/remainderf128.h b/libc/src/math/remainderf128.h index 57f770a853d68..8f0e763a2d1ab 100644 --- a/libc/src/math/remainderf128.h +++ b/libc/src/math/remainderf128.h @@ -9,11 +9,16 @@ #ifndef LLVM_LIBC_SRC_MATH_REMAINDERF128_H #define LLVM_LIBC_SRC_MATH_REMAINDERF128_H +#include "src/__support/FPUtil/float128.h" #include "src/__support/macros/config.h" #include "src/__support/macros/properties/types.h" namespace LIBC_NAMESPACE_DECL { +#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128 +using float128 = LIBC_NAMESPACE::fputil::Float128; +#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128 + float128 remainderf128(float128 x, float128 y); } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp index cc4b18d49575f..ff30388e663be 100644 --- a/libc/test/shared/shared_math_constexpr_test.cpp +++ b/libc/test/shared/shared_math_constexpr_test.cpp @@ -381,6 +381,9 @@ static_assert(0 == LIBC_NAMESPACE::shared::isnanl(0.0L)); //===----------------------------------------------------------------------===// static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::ceilf128(Float128(0.0))); +static_assert(float128(0.0) == + LIBC_NAMESPACE::shared::remainderf128(Float128(1.0), + Float128(1.0))); static_assert(0 == LIBC_NAMESPACE::shared::fmodf128(Float128(4.0), Float128(2.0))); static_assert(Float128(0.0) == @@ -486,9 +489,6 @@ static_assert(float128(0.0) == [] { float128 iptr{}; return LIBC_NAMESPACE::shared::modff128(float128(0.0), &iptr); }()); -static_assert(float128(0.0) == - LIBC_NAMESPACE::shared::remainderf128(float128(1.0), - float128(1.0))); static_assert(float128(0.0) == [] { int exp{}; return LIBC_NAMESPACE::shared::remquof128(float128(1.0), float128(1.0), &exp); diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 8e9b4c2888cf0..7fad34078c478 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -587,6 +587,8 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) { EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::atan2f128(Float128(0.0), Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::ceilf128(Float128(0.0))); + EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remainderf128( + Float128(1.0), Float128(1.0))); LIBC_NAMESPACE::shared::fmodf128(Float128(1.0), Float128(1.0)); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::copysignf128( Float128(0.0), Float128(0.0))); @@ -739,8 +741,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) { EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::modff128(float128(0.0), &modff128_iptr)); EXPECT_FP_EQ(float128(0.0), modff128_iptr); - EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remainderf128( - float128(1.0), float128(1.0))); int remquof128_exp = 0; EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remquof128(float128(1.0), float128(1.0), diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 10b6552d46c09..efd81d694574c 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -6819,8 +6819,8 @@ libc_support_library( hdrs = ["src/__support/math/remainderf128.h"], deps = [ ":__support_fputil_division_and_remainder_operations", + ":__support_fputil_float128", ":__support_macros_config", - ":llvm_libc_types_float128", ], ) @@ -13284,6 +13284,8 @@ libc_math_function( libc_math_function( name = "remainderf128", additional_deps = [ + ":__support_cpp_bit", + ":__support_fputil_float128", ":__support_math_remainderf128", ], ) >From d65c9dac002ce8b292e757d6ac02c616e5ac2529 Mon Sep 17 00:00:00 2001 From: Sukumarsawant <[email protected]> Date: Thu, 20 Aug 2026 16:24:00 +0530 Subject: [PATCH 4/4] nit + bf16 fix --- libc/test/shared/shared_math_constexpr_test.cpp | 17 +++++++++++------ libc/test/shared/shared_math_test.cpp | 14 ++++++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp index ff30388e663be..c0c948ba24798 100644 --- a/libc/test/shared/shared_math_constexpr_test.cpp +++ b/libc/test/shared/shared_math_constexpr_test.cpp @@ -381,11 +381,6 @@ static_assert(0 == LIBC_NAMESPACE::shared::isnanl(0.0L)); //===----------------------------------------------------------------------===// static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::ceilf128(Float128(0.0))); -static_assert(float128(0.0) == - LIBC_NAMESPACE::shared::remainderf128(Float128(1.0), - Float128(1.0))); -static_assert(0 == - LIBC_NAMESPACE::shared::fmodf128(Float128(4.0), Float128(2.0))); static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::copysignf128(Float128(0.0), Float128(0.0))); @@ -423,6 +418,8 @@ static_assert(Float128(0.0) == static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::fminimum_numf128(Float128(0.0), Float128(0.0))); +static_assert(Float128(0.0) == + LIBC_NAMESPACE::shared::fmodf128(Float128(4.0), Float128(2.0))); static_assert(1 == LIBC_NAMESPACE::shared::iscanonicalf128(Float128(0.0))); static_assert(0 == LIBC_NAMESPACE::shared::isnanf128(Float128(0.0))); static_assert(0.0 == LIBC_NAMESPACE::shared::issignalingf128(Float128(0.0))); @@ -438,6 +435,9 @@ static_assert(Float128(0.0) == static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::nextafterf128(Float128(0.0), Float128(0.0))); +static_assert(Float128(0.0) == + LIBC_NAMESPACE::shared::remainderf128(Float128(1.0), + Float128(1.0))); static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::roundf128(Float128(0.0))); static_assert(Float128(0.0) == @@ -485,10 +485,15 @@ constexpr float128 TOTALORDERMAGF128_Y = float128(0.0); static_assert(1 == LIBC_NAMESPACE::shared::totalordermagf128(&TOTALORDERMAGF128_X, &TOTALORDERMAGF128_Y)); +static_assert(float128(0.0) == + LIBC_NAMESPACE::shared::fmodf128(float128(4.0), float128(2.0))); static_assert(float128(0.0) == [] { float128 iptr{}; return LIBC_NAMESPACE::shared::modff128(float128(0.0), &iptr); }()); +static_assert(float128(0.0) == + LIBC_NAMESPACE::shared::remainderf128(float128(1.0), + float128(1.0))); static_assert(float128(0.0) == [] { int exp{}; return LIBC_NAMESPACE::shared::remquof128(float128(1.0), float128(1.0), &exp); @@ -587,7 +592,7 @@ constexpr bfloat16 TOTALORDERMAGBF16_Y = bfloat16(0.0); static_assert(1 == LIBC_NAMESPACE::shared::totalordermagbf16(&TOTALORDERMAGBF16_X, &TOTALORDERMAGBF16_Y)); -static_assert(0 == +static_assert(bfloat16(0.0) == LIBC_NAMESPACE::shared::fmodbf16(bfloat16(4.0), bfloat16(2.0))); static_assert(bfloat16(0.0) == [] { bfloat16 iptr{}; diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 7fad34078c478..3668c904815d2 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -587,9 +587,6 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) { EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::atan2f128(Float128(0.0), Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::ceilf128(Float128(0.0))); - EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remainderf128( - Float128(1.0), Float128(1.0))); - LIBC_NAMESPACE::shared::fmodf128(Float128(1.0), Float128(1.0)); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::copysignf128( Float128(0.0), Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fabsf128(Float128(0.0))); @@ -616,6 +613,8 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) { Float128(0.0), Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimum_numf128( Float128(0.0), Float128(0.0))); + EXPECT_FP_EQ(Float128(0.0), + LIBC_NAMESPACE::shared::fmodf128(Float128(1.0), Float128(1.0))); EXPECT_EQ(1, LIBC_NAMESPACE::shared::iscanonicalf128(Float128(0.0))); EXPECT_EQ(0, LIBC_NAMESPACE::shared::isnanf128(Float128(0.0))); EXPECT_EQ(0, LIBC_NAMESPACE::shared::issignalingf128(Float128(0.0))); @@ -630,6 +629,8 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) { EXPECT_FP_EQ(neg_min_denormal, LIBC_NAMESPACE::shared::nextdownf128(Float128(0.0))); EXPECT_FP_EQ(min_denormal, LIBC_NAMESPACE::shared::nextupf128(Float128(0.0))); + EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::remainderf128( + Float128(1.0), Float128(1.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::rintf128(Float128(0.0))); EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::roundevenf128(Float128(0.0))); @@ -737,10 +738,14 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) { float128 totalordermagf128_y = float128(0.0); EXPECT_EQ(1, LIBC_NAMESPACE::shared::totalordermagf128(&totalordermagf128_x, &totalordermagf128_y)); + EXPECT_FP_EQ(float128(0.0), + LIBC_NAMESPACE::shared::fmodf128(float128(1.0), float128(1.0))); float128 modff128_iptr = float128(0.0); EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::modff128(float128(0.0), &modff128_iptr)); EXPECT_FP_EQ(float128(0.0), modff128_iptr); + EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remainderf128( + float128(1.0), float128(1.0))); int remquof128_exp = 0; EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remquof128(float128(1.0), float128(1.0), @@ -864,7 +869,8 @@ TEST(LlvmLibcSharedMathTest, AllBFloat16) { bfloat16 totalordermagbf16_y = bfloat16(0.0); EXPECT_EQ(1, LIBC_NAMESPACE::shared::totalordermagbf16(&totalordermagbf16_x, &totalordermagbf16_y)); - LIBC_NAMESPACE::shared::fmodbf16(bfloat16(1.0), bfloat16(1.0)); + EXPECT_FP_EQ(bfloat16(0.0), + LIBC_NAMESPACE::shared::fmodbf16(bfloat16(1.0), bfloat16(1.0))); bfloat16 modfbf16_iptr = bfloat16(0.0); EXPECT_FP_EQ(bfloat16(0.0), LIBC_NAMESPACE::shared::modfbf16(bfloat16(0.0), &modfbf16_iptr)); _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
