https://github.com/Sukumarsawant created https://github.com/llvm/llvm-project/pull/217578
* fmodf128 * remainderf128 * remquof128 >From f54ed28eaa9c2184ac9ae3565452b8dab7edff42 Mon Sep 17 00:00:00 2001 From: Sukumarsawant <[email protected]> Date: Thu, 20 Aug 2026 15:45:09 +0530 Subject: [PATCH] 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 f944fd507e711..a0b541ae6f003 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 @@ -764,7 +765,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 2d7f3b456d1a0..7f0c4e5b0fa5d 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 @@ -775,7 +776,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 548ea52e96eaf..72a2bf2c310bd 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 @@ -772,7 +773,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 492be8088f66f..ac78866b0a928 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 @@ -584,7 +585,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 feeb568133521..b0ab05b79396b 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 8e71db9b4996d..716110fd2c452 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 @@ -523,7 +524,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 9b9fb891f9b2b..943d52e9ebc5a 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 8b861abc30550..49505ec03a9f1 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 86c992aea86da..68890c58e028f 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -622,6 +622,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 @@ -917,7 +918,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 18e557fd7eefe..a676d6f1b9317 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -450,6 +450,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 cd8afd64aee77..c2f894801f05b 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -690,6 +690,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 @@ -1002,7 +1003,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 d4b12dc3443af..7747f5397d4f5 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -700,6 +700,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 @@ -1012,7 +1013,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 c83486ff1eb17..77c7daaf7bcb8 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 8b1e34eea2522..9756ad43bcd21 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 3925affb9cf72..5df4c25e84905 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -3454,6 +3454,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 db8a949b76c73..f1812ea4598db 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))); @@ -470,8 +472,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 5e69673154ea6..2da09d2f1dbc7 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))); @@ -728,7 +729,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 b0cb51db79482..45b90795bbb17 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -4674,6 +4674,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 2f2c5655bf21c..3e267d039f76e 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -5937,9 +5937,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", ], ) @@ -12179,6 +12179,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 e82f9730fd6b4..f943fc2df4f14 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 @@ -831,6 +831,9 @@ math_test( math_test( name = "fmodf128", hdrs = ["FModTest.h"], + deps = [ + "//libc:__support_fputil_float128", + ], ) math_test( _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
