From be3f8fb237d5425ff9d6d42a590c7c575a20d12a Mon Sep 17 00:00:00 2001 From: Sukumarsawant Date: Thu, 20 Aug 2026 11:55:34 +0530 Subject: [PATCH 1/5] 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 a8fde0d8ad22c..01c929011ffcc 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 @@ -767,7 +768,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 efdbd9ae8735f..d5f3910c37e8d 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 @@ -778,7 +779,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 c31c33c3c3c42..c2e1721b867f4 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 @@ -775,7 +776,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 a681cf8890603..5088893687f49 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 @@ -587,7 +588,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 5cc09152a5d0b..cd9f1cc20f40a 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 @@ -527,7 +528,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 e3e560331f3c2..bd2a0229b3a2e 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 d9b635fd6db82..5f6c86c75a392 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 a80dfd2ad3afc..b28e3c5455f67 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.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 @@ -938,7 +939,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 04551e33d80f4..0d37a67074de8 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -431,6 +431,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 b7dd407d58ac8..386380922c45f 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -675,6 +675,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 @@ -1024,7 +1025,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 0d2678d27f4e7..4155954bfb9b0 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.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 @@ -1033,7 +1034,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 d1196d504ff9e..1bacfc3b56ef0 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 0f2fc3584c786..cde3be04cfe56 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 a62954c97d553..52d13531dafcb 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -2307,6 +2307,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(math::fmaximum_magf128( + cpp::bit_cast(x), cpp::bit_cast(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 58dc88ebf8c46..aa1680db86d99 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -3093,6 +3093,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 af4dcbf35310a..52cdee31c8afb 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -5529,8 +5529,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", ], ) @@ -11967,6 +11967,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 df2b60819e1cc6ef4fcf70b4709b013278db4bd1 Mon Sep 17 00:00:00 2001 From: Sukumarsawant Date: Thu, 20 Aug 2026 11:57:39 +0530 Subject: [PATCH 2/5] 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 01c929011ffcc..b9822e26199f0 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 @@ -769,7 +770,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 d5f3910c37e8d..cc9f0a5031e5a 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 @@ -780,7 +781,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 c2e1721b867f4..7a7746ccc3829 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 @@ -777,7 +778,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 5088893687f49..5f164fa98311b 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 @@ -589,7 +590,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 cd9f1cc20f40a..68ff19e72268e 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 @@ -529,7 +530,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 bd2a0229b3a2e..edfaef72cb9c3 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 5f6c86c75a392..7b3217b68649e 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 b28e3c5455f67..217e77437ff21 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -625,6 +625,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 @@ -940,7 +941,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 0d37a67074de8..b0bdc094b69bb 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -450,6 +450,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.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 386380922c45f..a820ddb05f60b 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -694,6 +694,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 @@ -1026,7 +1027,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 4155954bfb9b0..b97c3ff25ab29 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -703,6 +703,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 @@ -1035,7 +1036,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 1bacfc3b56ef0..033741aa38e18 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 cde3be04cfe56..7ec1dc12628f9 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 52d13531dafcb..51719babdd3fb 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -2550,6 +2550,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(math::fminimum_magf128( + cpp::bit_cast(x), cpp::bit_cast(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 aa1680db86d99..50e950e6c6546 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -3437,6 +3437,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 52cdee31c8afb..3712b6a00a2e0 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -5777,8 +5777,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", ], ) @@ -12157,6 +12157,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 7e137446227cf57a0c11c14143e32f334a853f4a Mon Sep 17 00:00:00 2001 From: Sukumarsawant Date: Thu, 20 Aug 2026 12:35:53 +0530 Subject: [PATCH 3/5] 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 753f2820a1de7943c286d16ac28b88f116094d85 Mon Sep 17 00:00:00 2001 From: Sukumarsawant Date: Thu, 20 Aug 2026 12:40:14 +0530 Subject: [PATCH 4/5] 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 018b1ed05932a7a8f50eea1f3a4e421a5c0aab13 Mon Sep 17 00:00:00 2001 From: Sukumarsawant Date: Thu, 20 Aug 2026 13:11:13 +0530 Subject: [PATCH 5/5] 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) ==