[llvm-branch-commits] [libc] [llvm] [libc] Make fmaximum_mag/fminimum_mag functions use the emulated float128 type (PR #217539)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Aug 21 05:20:17 PDT 2026


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

>From 9a6480e4a5c83cc9e42e1e83911a942e02b64ac6 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 11:55:34 +0530
Subject: [PATCH 1/6] fmaximum_magf128

---
 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_magf128.h                   |  6 ------
 libc/src/__support/math/CMakeLists.txt                |  2 +-
 libc/src/__support/math/fmaximum_magf128.h            | 11 ++++-------
 libc/src/math/fmaximum_magf128.h                      |  5 +++++
 libc/src/math/generic/CMakeLists.txt                  |  1 +
 libc/src/math/generic/fmaximum_magf128.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/FMaximumMagTest.h            |  2 +-
 libc/test/src/math/smoke/fmaximum_magf128_test.cpp    |  5 +++++
 utils/bazel/llvm-project-overlay/libc/BUILD.bazel     |  4 +++-
 .../libc/test/src/math/smoke/BUILD.bazel              |  3 +++
 26 files changed, 47 insertions(+), 30 deletions(-)

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 76f9cb53e35e1..744bbe7cbe41b 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -429,6 +429,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -766,7 +767,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 84b694b4328f8..7333ae10dac79 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -441,6 +441,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -777,7 +778,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 9bfa44ce5f2eb..19a374ac8800f 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -437,6 +437,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -774,7 +775,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     # libc.src.math.fmodf128
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 7deaa391be03d..a7ed4ced0084c 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -248,6 +248,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -586,7 +587,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 24d74acb9fde2..a3a08520b267d 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_magf128
     #libc.src.math.fmaximum_numf128
     #libc.src.math.fmaximumf128
     #libc.src.math.fmaxl
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index a1f4b3b62beef..91e7481f37dd2 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -191,6 +191,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_numl
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
@@ -525,7 +526,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index bba9427578f12..308497008400e 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -376,6 +376,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximuml
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 011cc8b73a607..360e10c6c718e 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -372,6 +372,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximuml
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 420bfa531f0fc..2bf0ad9ae5d46 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -589,6 +589,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -920,7 +921,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 14efa94861e5f..2e0b47d479db4 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -416,6 +416,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 2d1a13f389d1d..92aac7b463926 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -657,6 +657,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -1005,7 +1006,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index bbcecf78afae4..47d61db801b9c 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -667,6 +667,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_mag_numf
     libc.src.math.fmaximum_mag_numl
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_num
     libc.src.math.fmaximum_numf
@@ -1015,7 +1016,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fdivf128
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
     libc.src.math.fminimum_mag_numf128
     libc.src.math.fminimum_magf128
     libc.src.math.fmodf128
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 5b7ebe1e5e749..1a8f1941b72b7 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -224,6 +224,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fmaximum_numl
     libc.src.math.fmaximum_mag
     libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magf128
     libc.src.math.fmaximum_magl
     libc.src.math.fmaximum_mag_num
     libc.src.math.fmaximum_mag_numf
diff --git a/libc/shared/math/fmaximum_magf128.h b/libc/shared/math/fmaximum_magf128.h
index 93996933d1071..88794875893d4 100644
--- a/libc/shared/math/fmaximum_magf128.h
+++ b/libc/shared/math/fmaximum_magf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAGF128_H
 #define LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAGF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/fmaximum_magf128.h"
 
@@ -24,6 +20,4 @@ using math::fmaximum_magf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAGF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index cf3df4427f913..c4a01ee23f25c 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -960,7 +960,7 @@ add_header_library(
   HDRS
     fmaximum_magf128.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_magf128.h b/libc/src/__support/math/fmaximum_magf128.h
index b540e0940c926..11b0385061b7c 100644
--- a/libc/src/__support/math/fmaximum_magf128.h
+++ b/libc/src/__support/math/fmaximum_magf128.h
@@ -9,23 +9,20 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAGF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAGF128_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_magf128(float128 x, float128 y) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 fmaximum_magf128(Float128 x, Float128 y) {
   return fputil::fmaximum_mag(x, y);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAGF128_H
diff --git a/libc/src/math/fmaximum_magf128.h b/libc/src/math/fmaximum_magf128.h
index fb68af7e6a0c9..04212d893514a 100644
--- a/libc/src/math/fmaximum_magf128.h
+++ b/libc/src/math/fmaximum_magf128.h
@@ -10,11 +10,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_FMAXIMUM_MAGF128_H
 #define LLVM_LIBC_SRC_MATH_FMAXIMUM_MAGF128_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_magf128(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 3df5ad768b3a0..4efa4fd59c53a 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2294,6 +2294,7 @@ add_entrypoint_object(
   HDRS
     ../fmaximum_magf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.fmaximum_magf128
 )
 
diff --git a/libc/src/math/generic/fmaximum_magf128.cpp b/libc/src/math/generic/fmaximum_magf128.cpp
index d75d6a0a69b0c..97e97f6140aa0 100644
--- a/libc/src/math/generic/fmaximum_magf128.cpp
+++ b/libc/src/math/generic/fmaximum_magf128.cpp
@@ -7,12 +7,16 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/fmaximum_magf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/fmaximum_magf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(float128, fmaximum_magf128, (float128 x, float128 y)) {
-  return math::fmaximum_magf128(x, y);
+  return cpp::bit_cast<float128>(math::fmaximum_magf128(
+      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 e3cca0d15a4ea..0ea1c50424e6b 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::fmaximum_magf128(Float128(0.0),
+                                                       Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::copysignf128(Float128(0.0),
                                                    Float128(0.0)));
@@ -456,9 +459,6 @@ static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::ufromfpf128(float128(0.0), 0, 32));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::ufromfpxf128(float128(0.0), 0, 32));
-static_assert(float128(0.0) ==
-              LIBC_NAMESPACE::shared::fmaximum_magf128(float128(0.0),
-                                                       float128(0.0)));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::fminimum_magf128(float128(0.0),
                                                        float128(0.0)));
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index f27145ca2ce26..6667c67070bc1 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::fmaximum_magf128(
+                                  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)));
@@ -718,8 +720,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) {
                LIBC_NAMESPACE::shared::ufromfpf128(float128(0.0), 0, 32));
   EXPECT_FP_EQ(float128(0.0),
                LIBC_NAMESPACE::shared::ufromfpxf128(float128(0.0), 0, 32));
-  EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::fmaximum_magf128(
-                                  float128(0.0), float128(0.0)));
   EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::fminimum_magf128(
                                   float128(0.0), float128(0.0)));
   float128 totalorderf128_x = float128(0.0);
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 7303183d5af38..26c1c380b2491 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3069,6 +3069,7 @@ add_fp_unittest(
   HDRS
     FMaximumMagTest.h
   DEPENDS
+    libc.src.__support.FPUtil.float128
     libc.src.math.fmaximum_magf128
     libc.src.__support.CPP.algorithm
     libc.src.__support.FPUtil.basic_operations
diff --git a/libc/test/src/math/smoke/FMaximumMagTest.h b/libc/test/src/math/smoke/FMaximumMagTest.h
index 6a45ad13fc293..001501f311878 100644
--- a/libc/test/src/math/smoke/FMaximumMagTest.h
+++ b/libc/test/src/math/smoke/FMaximumMagTest.h
@@ -69,7 +69,7 @@ class FMaximumMagTest : 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/fmaximum_magf128_test.cpp b/libc/test/src/math/smoke/fmaximum_magf128_test.cpp
index d7ae8ec8d7a03..653e786c9b0ac 100644
--- a/libc/test/src/math/smoke/fmaximum_magf128_test.cpp
+++ b/libc/test/src/math/smoke/fmaximum_magf128_test.cpp
@@ -7,7 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 #include "FMaximumMagTest.h"
+#include "src/__support/FPUtil/float128.h"
 
 #include "src/math/fmaximum_magf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_FMAXIMUM_MAG_TESTS(float128, LIBC_NAMESPACE::fmaximum_magf128)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index f32698428fb3a..15669311fc69b 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -5510,8 +5510,8 @@ libc_support_library(
     hdrs = ["src/__support/math/fmaximum_magf128.h"],
     deps = [
         ":__support_fputil_basic_operations",
+        ":__support_fputil_float128",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -11873,6 +11873,8 @@ libc_math_function(
 libc_math_function(
     name = "fmaximum_magf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_fmaximum_magf128",
     ],
 )
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 b98db6861ba7b..a6013a22d41f2 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
@@ -597,6 +597,9 @@ math_test(
 math_test(
     name = "fmaximum_magf128",
     hdrs = ["FMaximumMagTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ],
 )
 
 math_test(

>From 9dfe64ad25892ec3005225ac875438d2817c7105 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 11:57:39 +0530
Subject: [PATCH 2/6] fminimum_magf128

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

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 744bbe7cbe41b..b86579abea10e 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -448,6 +448,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -768,7 +769,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 7333ae10dac79..cafc6e88a31a6 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -460,6 +460,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -779,7 +780,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 19a374ac8800f..367bcb1d48b04 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -456,6 +456,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -776,7 +777,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     # 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 a7ed4ced0084c..1bf1ffe71eb58 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -267,6 +267,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -588,7 +589,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 a3a08520b267d..a2c86acfc2d28 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_magf128
     #libc.src.math.fminimum_numf128
     #libc.src.math.fminimumf128
     #libc.src.math.fminl
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index 91e7481f37dd2..bfa2471cf21f9 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -206,6 +206,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_numl
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
@@ -527,7 +528,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 308497008400e..c1d58e42cea94 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -395,6 +395,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimuml
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 360e10c6c718e..8d4b88a43547a 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -391,6 +391,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimuml
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 2bf0ad9ae5d46..93063c60a11bb 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -608,6 +608,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -922,7 +923,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 2e0b47d479db4..81d31f4bb2eaf 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -435,6 +435,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 92aac7b463926..f1f262f598f0a 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -676,6 +676,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -1007,7 +1008,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 47d61db801b9c..5d58b7ace307b 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -686,6 +686,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_mag_numf
     libc.src.math.fminimum_mag_numl
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_num
     libc.src.math.fminimum_numf
@@ -1017,7 +1018,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.ffmaf128
     libc.src.math.fmaximum_mag_numf128
     libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
     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 1a8f1941b72b7..c068585931236 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -239,6 +239,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fminimum_numl
     libc.src.math.fminimum_mag
     libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magf128
     libc.src.math.fminimum_magl
     libc.src.math.fminimum_mag_num
     libc.src.math.fminimum_mag_numf
diff --git a/libc/shared/math/fminimum_magf128.h b/libc/shared/math/fminimum_magf128.h
index cf8794c5b16ce..f538605febfe4 100644
--- a/libc/shared/math/fminimum_magf128.h
+++ b/libc/shared/math/fminimum_magf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_FMINIMUM_MAGF128_H
 #define LLVM_LIBC_SHARED_MATH_FMINIMUM_MAGF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/fminimum_magf128.h"
 
@@ -24,6 +20,4 @@ using math::fminimum_magf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_FMINIMUM_MAGF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index c4a01ee23f25c..61a786a60533a 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -1236,7 +1236,7 @@ add_header_library(
   HDRS
     fminimum_magf128.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_magf128.h b/libc/src/__support/math/fminimum_magf128.h
index ea571905fb7df..d81f64821da63 100644
--- a/libc/src/__support/math/fminimum_magf128.h
+++ b/libc/src/__support/math/fminimum_magf128.h
@@ -9,23 +9,20 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAGF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAGF128_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_magf128(float128 x, float128 y) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 fminimum_magf128(Float128 x, Float128 y) {
   return fputil::fminimum_mag(x, y);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAGF128_H
diff --git a/libc/src/math/fminimum_magf128.h b/libc/src/math/fminimum_magf128.h
index 00eee4e287933..4f8114cf49651 100644
--- a/libc/src/math/fminimum_magf128.h
+++ b/libc/src/math/fminimum_magf128.h
@@ -10,11 +10,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_FMINIMUM_MAGF128_H
 #define LLVM_LIBC_SRC_MATH_FMINIMUM_MAGF128_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_magf128(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 4efa4fd59c53a..bda38082011e6 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2537,6 +2537,7 @@ add_entrypoint_object(
   HDRS
     ../fminimum_magf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.fminimum_magf128
 )
 
diff --git a/libc/src/math/generic/fminimum_magf128.cpp b/libc/src/math/generic/fminimum_magf128.cpp
index 56c6a48d291aa..64c04ef785152 100644
--- a/libc/src/math/generic/fminimum_magf128.cpp
+++ b/libc/src/math/generic/fminimum_magf128.cpp
@@ -7,12 +7,16 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/fminimum_magf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/fminimum_magf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(float128, fminimum_magf128, (float128 x, float128 y)) {
-  return math::fminimum_magf128(x, y);
+  return cpp::bit_cast<float128>(math::fminimum_magf128(
+      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 0ea1c50424e6b..0a65d26472445 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -37,14 +37,14 @@ static_assert(0.0 == LIBC_NAMESPACE::shared::fmaximum(0.0, 0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum(0.0, 0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fmin(0.0, 0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fmax(0.0, 0.0));
+static_assert(0.0 == LIBC_NAMESPACE::shared::fmaximum_mag(0.0, 0.0));
+static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_mag(0.0, 0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fmaximum_num(0.0, 0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_num(0.0, 0.0));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fromfp(0.0, 0, 32));
 static_assert(0.0 == LIBC_NAMESPACE::shared::fromfpx(0.0, 0, 32));
 static_assert(0.0 == LIBC_NAMESPACE::shared::ufromfp(0.0, 0, 32));
 static_assert(0.0 == LIBC_NAMESPACE::shared::ufromfpx(0.0, 0, 32));
-static_assert(0.0 == LIBC_NAMESPACE::shared::fmaximum_mag(0.0, 0.0));
-static_assert(0.0 == LIBC_NAMESPACE::shared::fminimum_mag(0.0, 0.0));
 static_assert(-1.0 == [] {
   double getpayload_x = 0.0;
   return LIBC_NAMESPACE::shared::getpayload(&getpayload_x);
@@ -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_magf128(Float128(0.0),
+                                                       Float128(0.0)));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::fmaximum_magf128(Float128(0.0),
                                                        Float128(0.0)));
@@ -459,9 +462,6 @@ static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::ufromfpf128(float128(0.0), 0, 32));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::ufromfpxf128(float128(0.0), 0, 32));
-static_assert(float128(0.0) ==
-              LIBC_NAMESPACE::shared::fminimum_magf128(float128(0.0),
-                                                       float128(0.0)));
 constexpr float128 TOTALORDERF128_X = float128(0.0);
 constexpr float128 TOTALORDERF128_Y = float128(0.0);
 static_assert(1 == LIBC_NAMESPACE::shared::totalorderf128(&TOTALORDERF128_X,
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 6667c67070bc1..5eaa6505b9fa9 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::fmaximum_magf128(
-                                  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)));
@@ -598,6 +596,10 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) {
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimumf128(
                                   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_magf128(
+                                  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(
@@ -720,8 +722,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) {
                LIBC_NAMESPACE::shared::ufromfpf128(float128(0.0), 0, 32));
   EXPECT_FP_EQ(float128(0.0),
                LIBC_NAMESPACE::shared::ufromfpxf128(float128(0.0), 0, 32));
-  EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::fminimum_magf128(
-                                  float128(0.0), float128(0.0)));
   float128 totalorderf128_x = float128(0.0);
   float128 totalorderf128_y = float128(0.0);
   EXPECT_EQ(1, LIBC_NAMESPACE::shared::totalorderf128(&totalorderf128_x,
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 26c1c380b2491..63fc47a372c0c 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3413,6 +3413,7 @@ add_fp_unittest(
   HDRS
     FMinimumMagTest.h
   DEPENDS
+    libc.src.__support.FPUtil.float128
     libc.src.math.fminimum_magf128
     libc.src.__support.CPP.algorithm
     libc.src.__support.FPUtil.fp_bits
diff --git a/libc/test/src/math/smoke/FMinimumMagTest.h b/libc/test/src/math/smoke/FMinimumMagTest.h
index ee24042cfe242..4732fa1d26561 100644
--- a/libc/test/src/math/smoke/FMinimumMagTest.h
+++ b/libc/test/src/math/smoke/FMinimumMagTest.h
@@ -69,7 +69,7 @@ class FMinimumMagTest : 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_magf128_test.cpp b/libc/test/src/math/smoke/fminimum_magf128_test.cpp
index 010ee6e73bee0..405e735841419 100644
--- a/libc/test/src/math/smoke/fminimum_magf128_test.cpp
+++ b/libc/test/src/math/smoke/fminimum_magf128_test.cpp
@@ -7,7 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 #include "FMinimumMagTest.h"
+#include "src/__support/FPUtil/float128.h"
 
 #include "src/math/fminimum_magf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_FMINIMUM_MAG_TESTS(float128, LIBC_NAMESPACE::fminimum_magf128)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index 15669311fc69b..f33672215ac87 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -5758,8 +5758,8 @@ libc_support_library(
     hdrs = ["src/__support/math/fminimum_magf128.h"],
     deps = [
         ":__support_fputil_basic_operations",
+        ":__support_fputil_float128",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -12063,6 +12063,8 @@ libc_math_function(
 libc_math_function(
     name = "fminimum_magf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_fminimum_magf128",
     ],
 )
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 a6013a22d41f2..9fc31339b415c 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
@@ -734,6 +734,9 @@ math_test(
 math_test(
     name = "fminimum_magf128",
     hdrs = ["FMinimumMagTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ],
 )
 
 math_test(

>From e592d9f5b95233c2e276ca704d30ea8d8b87a767 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 12:35:53 +0530
Subject: [PATCH 3/6] nit

---
 libc/test/shared/shared_math_test.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 5eaa6505b9fa9..ca006e159d646 100644
--- a/libc/test/shared/shared_math_test.cpp
+++ b/libc/test/shared/shared_math_test.cpp
@@ -596,9 +596,9 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) {
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimumf128(
                                   Float128(0.0), Float128(0.0)));
-  EXPECT_FP_EQ(float128(0.0), LIBC_NAMESPACE::shared::fminimum_magf128(
+  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_magf128(
+  EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fmaximum_magf128(
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fmaximum_numf128(
                                   Float128(0.0), Float128(0.0)));

>From c24cde4496b696886e9c4cdcd996f9f067560e72 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 12:40:14 +0530
Subject: [PATCH 4/6] nit

---
 libc/test/shared/shared_math_constexpr_test.cpp | 12 ++++++------
 libc/test/shared/shared_math_test.cpp           |  4 ++--
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 0a65d26472445..2560273eb8168 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -381,12 +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_magf128(Float128(0.0),
-                                                       Float128(0.0)));
-static_assert(float128(0.0) ==
-              LIBC_NAMESPACE::shared::fmaximum_magf128(Float128(0.0),
-                                                       Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::copysignf128(Float128(0.0),
                                                    Float128(0.0)));
@@ -404,6 +398,12 @@ static_assert(Float128(0.0) ==
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::fminimumf128(Float128(0.0),
                                                    Float128(0.0)));
+static_assert(Float128(0.0) ==
+              LIBC_NAMESPACE::shared::fmaximum_magf128(Float128(0.0),
+                                                       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_numf128(Float128(0.0),
                                                        Float128(0.0)));
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index ca006e159d646..351c765cfc4db 100644
--- a/libc/test/shared/shared_math_test.cpp
+++ b/libc/test/shared/shared_math_test.cpp
@@ -596,10 +596,10 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) {
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimumf128(
                                   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_magf128(
                                   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_numf128(
                                   Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::fminimum_numf128(

>From 05a64df5f26604a11158345cd28775ab56c0e5b5 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 20 Aug 2026 13:11:13 +0530
Subject: [PATCH 5/6] nit

---
 libc/test/shared/shared_math_constexpr_test.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 2560273eb8168..82a501514fed6 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -401,7 +401,7 @@ static_assert(Float128(0.0) ==
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::fmaximum_magf128(Float128(0.0),
                                                        Float128(0.0)));
-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) ==

>From c0d33453bea0c2426fbb206044f6bcae04f21d35 Mon Sep 17 00:00:00 2001
From: Zorojuro <sawantsukumar at gmail.com>
Date: Fri, 21 Aug 2026 17:50:06 +0530
Subject: [PATCH 6/6] Apply suggestions from code review

Co-authored-by: Zorojuro <sawantsukumar at gmail.com>
---
 libc/test/src/math/smoke/fmaximum_magf128_test.cpp | 2 +-
 libc/test/src/math/smoke/fminimum_magf128_test.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/test/src/math/smoke/fmaximum_magf128_test.cpp b/libc/test/src/math/smoke/fmaximum_magf128_test.cpp
index 653e786c9b0ac..1701ffc9fac22 100644
--- a/libc/test/src/math/smoke/fmaximum_magf128_test.cpp
+++ b/libc/test/src/math/smoke/fmaximum_magf128_test.cpp
@@ -7,8 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "FMaximumMagTest.h"
-#include "src/__support/FPUtil/float128.h"
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/math/fmaximum_magf128.h"
 
 #ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
diff --git a/libc/test/src/math/smoke/fminimum_magf128_test.cpp b/libc/test/src/math/smoke/fminimum_magf128_test.cpp
index 405e735841419..75f40faa2bfab 100644
--- a/libc/test/src/math/smoke/fminimum_magf128_test.cpp
+++ b/libc/test/src/math/smoke/fminimum_magf128_test.cpp
@@ -7,8 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "FMinimumMagTest.h"
-#include "src/__support/FPUtil/float128.h"
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/math/fminimum_magf128.h"
 
 #ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128



More information about the llvm-branch-commits mailing list