[llvm-branch-commits] [libc] [llvm] [libc] Make `fdimf128` use the emulated float128 type (PR #217567)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Aug 21 04:51:26 PDT 2026
https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/217567
>From 01b9b4cceda15593ab62ec396f14e5c28973e9fc Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 13:47:56 +0530
Subject: [PATCH] fdimf128
---
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/fdimf128.h | 6 ------
libc/src/__support/math/CMakeLists.txt | 2 +-
libc/src/__support/math/fdimf128.h | 11 ++++-------
libc/src/math/fdimf128.h | 5 +++++
libc/src/math/generic/CMakeLists.txt | 1 +
libc/src/math/generic/fdimf128.cpp | 6 +++++-
libc/test/shared/shared_math_constexpr_test.cpp | 4 ++--
libc/test/shared/shared_math_test.cpp | 4 ++--
libc/test/src/math/smoke/CMakeLists.txt | 1 +
libc/test/src/math/smoke/fdimf128_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 6048e75227dc7..f7357b5194420 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -408,6 +408,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -766,7 +767,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 8ded133d8c914..302324ec9f913 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -420,6 +420,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -777,7 +778,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index b485973abc90d..d5866be41ba09 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -416,6 +416,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -774,7 +775,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
# libc.src.math.fmodf128
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index b69e17bdcc0ff..b2b37f7ae6e96 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -227,6 +227,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -586,7 +587,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 176a9019c4f57..716ab572f8d3c 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -143,6 +143,7 @@ set(TARGET_LIBM_ENTRYPOINTS
#libc.src.math.fabsl
#libc.src.math.fdim
#libc.src.math.fdimf
+ #libc.src.math.fdimf128
#libc.src.math.fdiml
#libc.src.math.fdiv
#libc.src.math.fdivl
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index c6f53e5326669..80e08959bfb0c 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -162,6 +162,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.faddl
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -525,7 +526,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 5ebbd57527927..8189076a8f194 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -355,6 +355,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.faddl
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index c5235109ba64f..b4b106a306999 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -351,6 +351,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.faddl
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 84af581691c3d..9310a59323271 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -572,6 +572,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.floor
libc.src.math.floorf
@@ -920,7 +921,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 3272d4c3f7e30..a8614f87f02d3 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -395,6 +395,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 68dd281655ccd..ef9fe8e89a155 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -636,6 +636,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -1005,7 +1006,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 270c181f93aac..8313063f60ca5 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -646,6 +646,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fadd
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
@@ -1015,7 +1016,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
libc.src.math.dsqrtf128
libc.src.math.dsubf128
libc.src.math.faddf128
- libc.src.math.fdimf128
libc.src.math.fdivf128
libc.src.math.ffmaf128
libc.src.math.fmodf128
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 664630ccc0e98..a21f465bd6d2f 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -194,6 +194,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.faddl
libc.src.math.fdim
libc.src.math.fdimf
+ libc.src.math.fdimf128
libc.src.math.fdiml
libc.src.math.fdiv
libc.src.math.fdivl
diff --git a/libc/shared/math/fdimf128.h b/libc/shared/math/fdimf128.h
index 0cac3ce9a67ae..16437f3bc0067 100644
--- a/libc/shared/math/fdimf128.h
+++ b/libc/shared/math/fdimf128.h
@@ -9,10 +9,6 @@
#ifndef LLVM_LIBC_SHARED_MATH_FDIMF128_H
#define LLVM_LIBC_SHARED_MATH_FDIMF128_H
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
#include "shared/libc_common.h"
#include "src/__support/math/fdimf128.h"
@@ -24,6 +20,4 @@ using math::fdimf128;
} // namespace shared
} // namespace LIBC_NAMESPACE_DECL
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
#endif // LLVM_LIBC_SHARED_MATH_FDIMF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index d0fb92fa022c7..71692b26a35dc 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -3436,7 +3436,7 @@ add_header_library(
HDRS
fdimf128.h
DEPENDS
- libc.include.llvm-libc-types.float128
+ libc.src.__support.FPUtil.float128
libc.src.__support.FPUtil.basic_operations
libc.src.__support.macros.config
)
diff --git a/libc/src/__support/math/fdimf128.h b/libc/src/__support/math/fdimf128.h
index 0f73f1c0561ee..63b3913fb7afb 100644
--- a/libc/src/__support/math/fdimf128.h
+++ b/libc/src/__support/math/fdimf128.h
@@ -9,23 +9,20 @@
#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FDIMF128_H
#define LLVM_LIBC_SRC___SUPPORT_MATH_FDIMF128_H
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/float128.h"
#include "src/__support/macros/config.h"
namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE constexpr float128 fdimf128(float128 x, float128 y) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 fdimf128(Float128 x, Float128 y) {
return fputil::fdim(x, y);
}
} // namespace math
} // namespace LIBC_NAMESPACE_DECL
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
#endif // LLVM_LIBC_SRC___SUPPORT_MATH_FDIMF128_H
diff --git a/libc/src/math/fdimf128.h b/libc/src/math/fdimf128.h
index a5e1387042b71..ead7fbc02162d 100644
--- a/libc/src/math/fdimf128.h
+++ b/libc/src/math/fdimf128.h
@@ -9,11 +9,16 @@
#ifndef LLVM_LIBC_SRC_MATH_FDIMF128_H
#define LLVM_LIBC_SRC_MATH_FDIMF128_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 fdimf128(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 e85014b4a995a..d35a8985c533a 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2932,6 +2932,7 @@ add_entrypoint_object(
HDRS
../fdimf128.h
DEPENDS
+ libc.src.__support.CPP.bit
libc.src.__support.math.fdimf128
)
diff --git a/libc/src/math/generic/fdimf128.cpp b/libc/src/math/generic/fdimf128.cpp
index de705aa03a2a5..385d683eba01b 100644
--- a/libc/src/math/generic/fdimf128.cpp
+++ b/libc/src/math/generic/fdimf128.cpp
@@ -7,12 +7,16 @@
//===----------------------------------------------------------------------===//
#include "src/math/fdimf128.h"
+#include "src/__support/CPP/bit.h"
#include "src/__support/math/fdimf128.h"
namespace LIBC_NAMESPACE_DECL {
+using LIBC_NAMESPACE::fputil::Float128;
+
LLVM_LIBC_FUNCTION(float128, fdimf128, (float128 x, float128 y)) {
- return math::fdimf128(x, y);
+ return cpp::bit_cast<float128>(
+ math::fdimf128(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 ae222e21d972f..64b8f6edadf52 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -386,6 +386,8 @@ static_assert(Float128(0.0) ==
Float128(0.0)));
static_assert(Float128(1.0) ==
LIBC_NAMESPACE::shared::fabsf128(Float128(-1.0)));
+static_assert(Float128(1.0) ==
+ LIBC_NAMESPACE::shared::fdimf128(Float128(1.0), Float128(0.0)));
static_assert(Float128(0.0) ==
LIBC_NAMESPACE::shared::floorf128(Float128(0.0)));
static_assert(Float128(0.0) ==
@@ -450,8 +452,6 @@ static_assert(0.0 ==
LIBC_NAMESPACE::shared::dmulf128(float128(0.0), float128(1.0)));
static_assert(0.0f ==
LIBC_NAMESPACE::shared::faddf128(float128(0.0), float128(0.0)));
-static_assert(float128(1.0) ==
- LIBC_NAMESPACE::shared::fdimf128(float128(1.0), float128(0.0)));
static_assert(0.0f ==
LIBC_NAMESPACE::shared::fdivf128(float128(0.0), float128(1.0)));
static_assert(0.0 == LIBC_NAMESPACE::shared::dsqrtf128(float128(0.0)));
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 77a37187a7443..b197fd4cecfba 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::copysignf128(
Float128(0.0), Float128(0.0)));
EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fabsf128(Float128(0.0)));
+ EXPECT_FP_EQ(Float128(0.0),
+ LIBC_NAMESPACE::shared::fdimf128(Float128(0.0), Float128(0.0)));
EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::floorf128(Float128(0.0)));
EXPECT_FP_EQ(Float128(0.0),
LIBC_NAMESPACE::shared::fmaxf128(Float128(0.0), Float128(0.0)));
@@ -677,8 +679,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) {
LIBC_NAMESPACE::shared::dsubf128(float128(0.0), float128(0.0)));
EXPECT_FP_EQ(float128(0.0),
LIBC_NAMESPACE::shared::faddf128(float128(0.0), float128(0.0)));
- EXPECT_FP_EQ(float128(0.0),
- LIBC_NAMESPACE::shared::fdimf128(float128(0.0), float128(0.0)));
EXPECT_FP_EQ(1.0f,
LIBC_NAMESPACE::shared::fdivf128(float128(1.0), float128(1.0)));
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index d4e3beb51e312..4f54d46991304 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -2636,6 +2636,7 @@ add_fp_unittest(
HDRS
FDimTest.h
DEPENDS
+ libc.src.__support.FPUtil.float128
libc.src.math.fdimf128
libc.src.__support.CPP.algorithm
libc.src.__support.FPUtil.fp_bits
diff --git a/libc/test/src/math/smoke/fdimf128_test.cpp b/libc/test/src/math/smoke/fdimf128_test.cpp
index 8e65c2b4a1ec5..65ecff18a8cc6 100644
--- a/libc/test/src/math/smoke/fdimf128_test.cpp
+++ b/libc/test/src/math/smoke/fdimf128_test.cpp
@@ -7,7 +7,12 @@
//===----------------------------------------------------------------------===//
#include "FDimTest.h"
+#include "src/__support/FPUtil/float128.h"
#include "src/math/fdimf128.h"
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
LIST_FDIM_TESTS(float128, LIBC_NAMESPACE::fdimf128);
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index f6062f08f5e0f..a5819b9a27a84 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -7792,8 +7792,8 @@ libc_support_library(
hdrs = ["src/__support/math/fdimf128.h"],
deps = [
":__support_fputil_basic_operations",
+ ":__support_fputil_float128",
":__support_macros_config",
- ":llvm_libc_types_float128",
],
)
@@ -11649,6 +11649,8 @@ libc_math_function(
libc_math_function(
name = "fdimf128",
additional_deps = [
+ ":__support_cpp_bit",
+ ":__support_fputil_float128",
":__support_math_fdimf128",
],
)
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 852dbc1326658..1ea19f953e0ad 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
@@ -448,6 +448,9 @@ math_test(
math_test(
name = "fdimf128",
hdrs = ["FDimTest.h"],
+ deps = [
+ "//libc:__support_fputil_float128",
+ ],
)
math_test(
More information about the llvm-branch-commits
mailing list