[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
Wed Sep 2 07:54:28 PDT 2026
https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/217578
>From 0ce3d4a4441a035894375710742317eb8077dc71 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
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 <sawantsukumar at gmail.com>
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 <sawantsukumar at gmail.com>
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 <sawantsukumar at gmail.com>
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));
More information about the llvm-branch-commits
mailing list