[llvm-branch-commits] [libc] [llvm] [libc] Make remainder functions use the emulated float128 type (PR #217578)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Aug 21 04:51:30 PDT 2026


https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/217578

>From c78fa84287e29b94f0854dce65d9544643a5d8af Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 15:45:09 +0530
Subject: [PATCH 1/3] 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 48e172ed070c0..a4be4d5875e43 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
@@ -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/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 0c53b651f16d0..d482c87841ca7 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
@@ -783,7 +784,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 4c6c65b5b0814..a4f99436db896 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
@@ -780,7 +781,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 21c5093629f18..d62264d6964c6 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
@@ -592,7 +593,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 c073755071baa..c5ccf942fd01f 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
@@ -531,7 +532,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 c2d0ba31fe7ba..804dbe3b7a95e 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 66e4333fe0836..70f9f87170957 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 08ca2b49b93c1..ceb6b1f40d615 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -623,6 +623,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
@@ -926,7 +927,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 7a6cbac1ceaa9..652c948ecc219 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 a78569c93ac63..1fbc887ffade9 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -691,6 +691,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
@@ -1011,7 +1012,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 bee8c7ebc8709..d4c83d3f8a405 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -701,6 +701,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
@@ -1021,7 +1022,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 7f2081bfb2419..d57f40e86f0f9 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 6ce4662da7c6d..36a289d2c4564 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 59ab7ee7b27d7..910dc5a5fafe3 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -3462,6 +3462,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 ea5523c9118e8..8ab2ce8f0a1d7 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -4682,6 +4682,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 7863e382e32d0..db55dcecfd1c9 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",
     ],
 )
 
@@ -12185,6 +12185,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 f71f630e92ff2b93c7d5b5508fcb419d0d3a5846 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 16:07:11 +0530
Subject: [PATCH 2/3] 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 a4be4d5875e43..aca2468058aa1 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -562,6 +562,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
@@ -786,7 +787,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 d482c87841ca7..d5e2b903b7cb7 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -574,6 +574,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
@@ -797,7 +798,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 a4f99436db896..198821ed601f1 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -570,6 +570,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
@@ -794,7 +795,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 d62264d6964c6..6b354210943ec 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -381,6 +381,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
@@ -606,7 +607,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 c5ccf942fd01f..18bb40011e101 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -284,6 +284,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
@@ -545,7 +546,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 804dbe3b7a95e..ae79cdb5e73b2 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -505,6 +505,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 70f9f87170957..022576971a184 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -502,6 +502,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 ceb6b1f40d615..5643c29f3426d 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -722,6 +722,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
@@ -940,7 +941,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 652c948ecc219..094f9fbf13815 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -536,6 +536,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 1fbc887ffade9..46e7ddf74f385 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -790,6 +790,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
@@ -1025,7 +1026,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 d4c83d3f8a405..4b15c9ae37b33 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -800,6 +800,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
@@ -1035,7 +1036,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 d57f40e86f0f9..134523b2afaaa 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -317,6 +317,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 36a289d2c4564..d6a8933649de9 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 910dc5a5fafe3..d9dcc072147ce 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2841,6 +2841,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 db55dcecfd1c9..f5f47a2d5e44b 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -6800,8 +6800,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",
     ],
 )
 
@@ -13185,6 +13185,8 @@ libc_math_function(
 libc_math_function(
     name = "remainderf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_remainderf128",
     ],
 )

>From 37a56f9703a58c97b9f29570d893dc4e8806c1df Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 16:24:00 +0530
Subject: [PATCH 3/3] 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));



More information about the llvm-branch-commits mailing list