[llvm-branch-commits] [libc] [llvm] [libc] Make fmaximum_mag_num/fminimum_man_num functions use the emulated float128 type (PR #217549)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Aug 21 03:49:16 PDT 2026


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

>From fc62fd397ccb560ddd03874eac0b0dde05c3a243 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 13:20:16 +0530
Subject: [PATCH 1/2] fminimum_mag_numf128

---
 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/fminimum_mag_numf128.h               |  6 ------
 libc/src/__support/math/CMakeLists.txt                |  2 +-
 libc/src/__support/math/fminimum_mag_numf128.h        | 11 ++++-------
 libc/src/math/fminimum_mag_numf128.h                  |  5 +++++
 libc/src/math/generic/CMakeLists.txt                  |  1 +
 libc/src/math/generic/fminimum_mag_numf128.cpp        |  6 +++++-
 libc/test/shared/shared_math_constexpr_test.cpp       |  6 +++---
 libc/test/shared/shared_math_test.cpp                 |  4 ++--
 libc/test/src/math/smoke/CMakeLists.txt               |  1 +
 libc/test/src/math/smoke/FMaximumMagNumTest.h         |  2 +-
 libc/test/src/math/smoke/FMinimumMagNumTest.h         |  2 +-
 .../test/src/math/smoke/fminimum_mag_numf128_test.cpp |  5 +++++
 utils/bazel/llvm-project-overlay/libc/BUILD.bazel     |  4 +++-
 .../libc/test/src/math/smoke/BUILD.bazel              |  3 +++
 27 files changed, 48 insertions(+), 31 deletions(-)

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 198056f0642aa..c3d89f624594c 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -446,6 +446,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -765,7 +766,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 5b5ba8c14d483..1f6ca48052dc3 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -458,6 +458,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -776,7 +777,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index be35db4205c7f..8ada9809651ff 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -454,6 +454,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -773,7 +774,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     # libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index ecea1dbb192f3..b53a8de6c0183 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -265,6 +265,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -585,7 +586,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 0a13546740b1c..dd89067f72a25 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -165,6 +165,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     #libc.src.math.fmin
     #libc.src.math.fminf
     #libc.src.math.fminf128
+    #libc.src.math.fminimum_mag_numf128
     #libc.src.math.fminimum_magf128
     #libc.src.math.fminimum_numf128
     #libc.src.math.fminimumf128
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index 28c14c44db80a..1d54ae853822c 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -210,6 +210,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fmul
     libc.src.math.fmod
@@ -524,7 +525,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index d43c82d00f2e5..1d0109ad20ea4 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -399,6 +399,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 303b438653e65..8602810b8b9e8 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -395,6 +395,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 793714dd02ee5..9c8aa700662a8 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -606,6 +606,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -919,7 +920,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index dfb0752222c8b..c7834bf19079c 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -433,6 +433,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 6a533fdb19189..a0f6e18eae324 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -674,6 +674,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -1004,7 +1005,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 2ac8231a4015e..47b07c8c7bd8a 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -684,6 +684,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
     libc.src.math.fminimum_magf128
@@ -1014,7 +1015,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fminimum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 7b5cbc40f9f7f..ecd1607c69f78 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -243,6 +243,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_mag_numl
     libc.src.math.fmul
     libc.src.math.fmod
diff --git a/libc/shared/math/fminimum_mag_numf128.h b/libc/shared/math/fminimum_mag_numf128.h
index 416a9c610bfe2..75e04f510f76d 100644
--- a/libc/shared/math/fminimum_mag_numf128.h
+++ b/libc/shared/math/fminimum_mag_numf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_FMINIMUM_MAG_NUMF128_H
 #define LLVM_LIBC_SHARED_MATH_FMINIMUM_MAG_NUMF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/fminimum_mag_numf128.h"
 
@@ -24,6 +20,4 @@ using math::fminimum_mag_numf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_FMINIMUM_MAG_NUMF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index 3ff2302621e23..f7f4439d8d1b8 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -1295,7 +1295,7 @@ add_header_library(
   HDRS
     fminimum_mag_numf128.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/fminimum_mag_numf128.h b/libc/src/__support/math/fminimum_mag_numf128.h
index d8b23a38247f8..b02f388f4a8fd 100644
--- a/libc/src/__support/math/fminimum_mag_numf128.h
+++ b/libc/src/__support/math/fminimum_mag_numf128.h
@@ -9,23 +9,20 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAG_NUMF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAG_NUMF128_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 fminimum_mag_numf128(float128 x, float128 y) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 fminimum_mag_numf128(Float128 x, Float128 y) {
   return fputil::fminimum_mag_num(x, y);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAG_NUMF128_H
diff --git a/libc/src/math/fminimum_mag_numf128.h b/libc/src/math/fminimum_mag_numf128.h
index e3e69a770c667..73d91fdd40bb6 100644
--- a/libc/src/math/fminimum_mag_numf128.h
+++ b/libc/src/math/fminimum_mag_numf128.h
@@ -10,11 +10,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_FMINIMUM_MAG_NUMF128_H
 #define LLVM_LIBC_SRC_MATH_FMINIMUM_MAG_NUMF128_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 fminimum_mag_numf128(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 b92d1cb27ca36..041ff2fbf268a 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2597,6 +2597,7 @@ add_entrypoint_object(
   HDRS
     ../fminimum_mag_numf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.fminimum_mag_numf128
 )
 
diff --git a/libc/src/math/generic/fminimum_mag_numf128.cpp b/libc/src/math/generic/fminimum_mag_numf128.cpp
index 27f7656733d27..f0a6a488ace54 100644
--- a/libc/src/math/generic/fminimum_mag_numf128.cpp
+++ b/libc/src/math/generic/fminimum_mag_numf128.cpp
@@ -7,12 +7,16 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/fminimum_mag_numf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/fminimum_mag_numf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(float128, fminimum_mag_numf128, (float128 x, float128 y)) {
-  return math::fminimum_mag_numf128(x, y);
+  return cpp::bit_cast<float128>(math::fminimum_mag_numf128(
+      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 51b8e673c606f..cc4f172256c29 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::fminimum_mag_numf128(Float128(0.0),
+                                                           Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::copysignf128(Float128(0.0),
                                                    Float128(0.0)));
@@ -477,9 +480,6 @@ static_assert(float128(0.0) == [] {
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::fmaximum_mag_numf128(float128(0.0),
                                                            float128(0.0)));
-static_assert(float128(0.0) ==
-              LIBC_NAMESPACE::shared::fminimum_mag_numf128(float128(0.0),
-                                                           float128(0.0)));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::remainderf128(float128(1.0),
                                                     float128(1.0)));
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 6fb094f2db962..504e23bfc33d0 100644
--- a/libc/test/shared/shared_math_test.cpp
+++ b/libc/test/shared/shared_math_test.cpp
@@ -584,6 +584,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::fminimum_mag_numf128(
+                                  Float128(0.0), Float128(0.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,8 +736,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) {
   EXPECT_FP_EQ(float128(0.0), modff128_iptr);
   EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::fmaximum_mag_numf128(
                                   float128(0.0), float128(0.0)));
-  EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::fminimum_mag_numf128(
-                                  float128(0.0), float128(0.0)));
   EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remainderf128(
                                   float128(1.0), float128(1.0)));
   int remquof128_exp = 0;
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index a998bcbec0787..b128d6b524ab1 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3496,6 +3496,7 @@ add_fp_unittest(
   HDRS
     FMinimumMagNumTest.h
   DEPENDS
+    libc.src.__support.FPUtil.float128
     libc.src.math.fminimum_mag_numf128
     libc.src.__support.CPP.algorithm
     libc.src.__support.FPUtil.fp_bits
diff --git a/libc/test/src/math/smoke/FMaximumMagNumTest.h b/libc/test/src/math/smoke/FMaximumMagNumTest.h
index b5c4347857d4c..96f703cbd63ac 100644
--- a/libc/test/src/math/smoke/FMaximumMagNumTest.h
+++ b/libc/test/src/math/smoke/FMaximumMagNumTest.h
@@ -81,7 +81,7 @@ class FMaximumMagNumTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
         continue;
       T x = xbits.get_val();
       T y = ybits.get_val();
-      if ((x == 0) && (y == 0))
+      if ((x == T(0)) && (y == T(0)))
         continue;
 
       if (LIBC_NAMESPACE::fputil::abs(x) > LIBC_NAMESPACE::fputil::abs(y))
diff --git a/libc/test/src/math/smoke/FMinimumMagNumTest.h b/libc/test/src/math/smoke/FMinimumMagNumTest.h
index a5809ea471f63..6e504bfc94414 100644
--- a/libc/test/src/math/smoke/FMinimumMagNumTest.h
+++ b/libc/test/src/math/smoke/FMinimumMagNumTest.h
@@ -81,7 +81,7 @@ class FMinimumMagNumTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
         continue;
       T x = xbits.get_val();
       T y = ybits.get_val();
-      if ((x == 0) && (y == 0))
+      if ((x == T(0)) && (y == T(0)))
         continue;
 
       if (LIBC_NAMESPACE::fputil::abs(x) > LIBC_NAMESPACE::fputil::abs(y))
diff --git a/libc/test/src/math/smoke/fminimum_mag_numf128_test.cpp b/libc/test/src/math/smoke/fminimum_mag_numf128_test.cpp
index f1db025f48954..29f9bd434a701 100644
--- a/libc/test/src/math/smoke/fminimum_mag_numf128_test.cpp
+++ b/libc/test/src/math/smoke/fminimum_mag_numf128_test.cpp
@@ -7,7 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 #include "FMinimumMagNumTest.h"
+#include "src/__support/FPUtil/float128.h"
 
 #include "src/math/fminimum_mag_numf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_FMINIMUM_MAG_NUM_TESTS(float128, LIBC_NAMESPACE::fminimum_mag_numf128)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index 0122b39d7984b..bf463205c31f9 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -5815,8 +5815,8 @@ libc_support_library(
     hdrs = ["src/__support/math/fminimum_mag_numf128.h"],
     deps = [
         ":__support_fputil_basic_operations",
+        ":__support_fputil_float128",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -12094,6 +12094,8 @@ libc_math_function(
 libc_math_function(
     name = "fminimum_mag_numf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_fminimum_mag_numf128",
     ],
 )
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 2db47f7d952fa..5f11404f56be3 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
@@ -754,6 +754,9 @@ math_test(
 math_test(
     name = "fminimum_mag_numf128",
     hdrs = ["FMinimumMagNumTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ],
 )
 
 math_test(

>From 49149606b2dbe521b9c01e8912da8e67c898f094 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 13:22:10 +0530
Subject: [PATCH 2/2] fmaximum+mag_numf128

---
 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/fmaximum_mag_numf128.h              |  6 ------
 libc/src/__support/math/CMakeLists.txt               |  2 +-
 libc/src/__support/math/fmaximum_mag_numf128.h       | 11 ++++-------
 libc/src/math/fmaximum_mag_numf128.h                 |  5 +++++
 libc/src/math/generic/CMakeLists.txt                 |  1 +
 libc/src/math/generic/fmaximum_mag_numf128.cpp       |  6 +++++-
 libc/test/shared/shared_math_constexpr_test.cpp      | 12 ++++++------
 libc/test/shared/shared_math_test.cpp                |  8 ++++----
 libc/test/src/math/smoke/CMakeLists.txt              |  1 +
 .../src/math/smoke/fmaximum_mag_numf128_test.cpp     |  5 +++++
 utils/bazel/llvm-project-overlay/libc/BUILD.bazel    |  4 +++-
 .../libc/test/src/math/smoke/BUILD.bazel             |  3 +++
 25 files changed, 51 insertions(+), 34 deletions(-)

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index c3d89f624594c..4e9d5295135b0 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -427,6 +427,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -765,7 +766,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 1f6ca48052dc3..802e72ca4aec1 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -439,6 +439,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -776,7 +777,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 8ada9809651ff..3c471c9fd47b0 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -435,6 +435,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -773,7 +774,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     # libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index b53a8de6c0183..6ca116de0be92 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -246,6 +246,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -585,7 +586,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index dd89067f72a25..64a3836ffb72d 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -158,6 +158,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     #libc.src.math.fmax
     #libc.src.math.fmaxf
     #libc.src.math.fmaxf128
+    #libc.src.math.fmaximum_mag_numf128
     #libc.src.math.fmaximum_magf128
     #libc.src.math.fmaximum_numf128
     #libc.src.math.fmaximumf128
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index 1d54ae853822c..ba2020981dcc3 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -195,6 +195,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fminimum
     libc.src.math.fminimumf
@@ -524,7 +525,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 1d0109ad20ea4..cb8797affd168 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -380,6 +380,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 8602810b8b9e8..d19e8c8cb0cf3 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -376,6 +376,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 9c8aa700662a8..c8a9e4f722260 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -587,6 +587,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -919,7 +920,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index c7834bf19079c..7e79167e1b409 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -414,6 +414,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index a0f6e18eae324..b130171761b6d 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -655,6 +655,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -1004,7 +1005,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 47b07c8c7bd8a..2300efacb4f03 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -665,6 +665,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
     libc.src.math.fmaximum_magf128
@@ -1014,7 +1015,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdimf128
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
-    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmodf128
     libc.src.math.fmulf128
     libc.src.math.frexpf128
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index ecd1607c69f78..dddf4b63b07ba 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -228,6 +228,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numf128
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fminimum
     libc.src.math.fminimumf
diff --git a/libc/shared/math/fmaximum_mag_numf128.h b/libc/shared/math/fmaximum_mag_numf128.h
index de2d21e4244a5..d12909fbc476f 100644
--- a/libc/shared/math/fmaximum_mag_numf128.h
+++ b/libc/shared/math/fmaximum_mag_numf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAG_NUMF128_H
 #define LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAG_NUMF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/fmaximum_mag_numf128.h"
 
@@ -24,6 +20,4 @@ using math::fmaximum_mag_numf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAG_NUMF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index f7f4439d8d1b8..0f1a75ca90264 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -989,7 +989,7 @@ add_header_library(
   HDRS
     fmaximum_mag_numf128.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/fmaximum_mag_numf128.h b/libc/src/__support/math/fmaximum_mag_numf128.h
index 79e8842f81eca..d0aaeae0327e4 100644
--- a/libc/src/__support/math/fmaximum_mag_numf128.h
+++ b/libc/src/__support/math/fmaximum_mag_numf128.h
@@ -9,23 +9,20 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAG_NUMF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAG_NUMF128_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 fmaximum_mag_numf128(float128 x, float128 y) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 fmaximum_mag_numf128(Float128 x, Float128 y) {
   return fputil::fmaximum_mag_num(x, y);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAG_NUMF128_H
diff --git a/libc/src/math/fmaximum_mag_numf128.h b/libc/src/math/fmaximum_mag_numf128.h
index a263f98aabcf1..4525d7ba7b128 100644
--- a/libc/src/math/fmaximum_mag_numf128.h
+++ b/libc/src/math/fmaximum_mag_numf128.h
@@ -10,11 +10,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_FMAXIMUM_MAG_NUMF128_H
 #define LLVM_LIBC_SRC_MATH_FMAXIMUM_MAG_NUMF128_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 fmaximum_mag_numf128(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 041ff2fbf268a..90b2d66427b39 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2354,6 +2354,7 @@ add_entrypoint_object(
   HDRS
     ../fmaximum_mag_numf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.fmaximum_mag_numf128
 )
 
diff --git a/libc/src/math/generic/fmaximum_mag_numf128.cpp b/libc/src/math/generic/fmaximum_mag_numf128.cpp
index e3fac9dbbadf4..d9a192c076a74 100644
--- a/libc/src/math/generic/fmaximum_mag_numf128.cpp
+++ b/libc/src/math/generic/fmaximum_mag_numf128.cpp
@@ -7,12 +7,16 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/fmaximum_mag_numf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/fmaximum_mag_numf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(float128, fmaximum_mag_numf128, (float128 x, float128 y)) {
-  return math::fmaximum_mag_numf128(x, y);
+  return cpp::bit_cast<float128>(math::fmaximum_mag_numf128(
+      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 cc4f172256c29..a6179baaa35a3 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -381,9 +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::fminimum_mag_numf128(Float128(0.0),
-                                                           Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::copysignf128(Float128(0.0),
                                                    Float128(0.0)));
@@ -407,6 +404,12 @@ static_assert(Float128(0.0) ==
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::fminimum_magf128(Float128(0.0),
                                                        Float128(0.0)));
+static_assert(Float128(0.0) ==
+              LIBC_NAMESPACE::shared::fmaximum_mag_numf128(Float128(0.0),
+                                                           Float128(0.0)));
+static_assert(Float128(0.0) ==
+              LIBC_NAMESPACE::shared::fminimum_mag_numf128(Float128(0.0),
+                                                           Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::fmaximum_numf128(Float128(0.0),
                                                        Float128(0.0)));
@@ -477,9 +480,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::fmaximum_mag_numf128(float128(0.0),
-                                                           float128(0.0)));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::remainderf128(float128(1.0),
                                                     float128(1.0)));
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 504e23bfc33d0..3a337acef326a 100644
--- a/libc/test/shared/shared_math_test.cpp
+++ b/libc/test/shared/shared_math_test.cpp
@@ -584,8 +584,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::fminimum_mag_numf128(
-                                  Float128(0.0), Float128(0.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)));
@@ -602,6 +600,10 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) {
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimum_magf128(
                                   Float128(0.0), Float128(0.0)));
+  EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fmaximum_mag_numf128(
+                                  Float128(0.0), Float128(0.0)));
+  EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimum_mag_numf128(
+                                  Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fmaximum_numf128(
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimum_numf128(
@@ -734,8 +736,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::fmaximum_mag_numf128(
-                                  float128(0.0), float128(0.0)));
   EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::remainderf128(
                                   float128(1.0), float128(1.0)));
   int remquof128_exp = 0;
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index b128d6b524ab1..3bd4c0784a9a0 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3153,6 +3153,7 @@ add_fp_unittest(
   HDRS
     FMaximumMagNumTest.h
   DEPENDS
+    libc.src.__support.FPUtil.float128
     libc.src.math.fmaximum_mag_numf128
     libc.src.__support.FPUtil.basic_operations
     libc.src.__support.FPUtil.fp_bits
diff --git a/libc/test/src/math/smoke/fmaximum_mag_numf128_test.cpp b/libc/test/src/math/smoke/fmaximum_mag_numf128_test.cpp
index 17f2a24f7fd04..c098b476e62b5 100644
--- a/libc/test/src/math/smoke/fmaximum_mag_numf128_test.cpp
+++ b/libc/test/src/math/smoke/fmaximum_mag_numf128_test.cpp
@@ -7,7 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 #include "FMaximumMagNumTest.h"
+#include "src/__support/FPUtil/float128.h"
 
 #include "src/math/fmaximum_mag_numf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_FMAXIMUM_MAG_NUM_TESTS(float128, LIBC_NAMESPACE::fmaximum_mag_numf128)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index bf463205c31f9..bc8a8238d82fd 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -5539,8 +5539,8 @@ libc_support_library(
     hdrs = ["src/__support/math/fmaximum_mag_numf128.h"],
     deps = [
         ":__support_fputil_basic_operations",
+        ":__support_fputil_float128",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -11911,6 +11911,8 @@ libc_math_function(
 libc_math_function(
     name = "fmaximum_mag_numf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_fmaximum_mag_numf128",
     ],
 )
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 5f11404f56be3..00ffb097bfeca 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
@@ -612,6 +612,9 @@ math_test(
 math_test(
     name = "fmaximum_mag_numf128",
     hdrs = ["FMaximumMagNumTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ],
 )
 
 math_test(



More information about the llvm-branch-commits mailing list