[libc-commits] [libc] [llvm] [libc] Add fmaximum_mag/fminimum_mag functions for float80 type (PR #236411)
via libc-commits
libc-commits at lists.llvm.org
Sat Oct 31 06:59:43 PDT 2026
https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/236411
>From 0c99ad8047863a5c8a77c687db3fc636d2b771ce Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Wed, 28 Oct 2026 18:43:54 +0530
Subject: [PATCH] add fmax_min_mag
---
libc/config/baremetal/aarch64/entrypoints.txt | 2 +
libc/config/baremetal/arm/entrypoints.txt | 2 +
libc/config/baremetal/hexagon/entrypoints.txt | 2 +
libc/config/baremetal/riscv/entrypoints.txt | 2 +
libc/config/darwin/aarch64/entrypoints.txt | 2 +
libc/config/darwin/x86_64/entrypoints.txt | 2 +
libc/config/freebsd/x86_64/entrypoints.txt | 2 +
libc/config/gpu/amdgpu/entrypoints.txt | 2 +
libc/config/gpu/nvptx/entrypoints.txt | 2 +
libc/config/linux/aarch64/entrypoints.txt | 2 +
libc/config/linux/arm/entrypoints.txt | 2 +
libc/config/linux/riscv/entrypoints.txt | 2 +
libc/config/linux/x86_64/entrypoints.txt | 2 +
libc/config/windows/entrypoints.txt | 2 +
libc/shared/math.h | 2 +
libc/shared/math/fmaximum_magf80.h | 28 ++++++++++++++
libc/shared/math/fminimum_magf80.h | 28 ++++++++++++++
libc/src/__support/math/CMakeLists.txt | 20 ++++++++++
libc/src/__support/math/fmaximum_magf80.h | 33 ++++++++++++++++
libc/src/__support/math/fminimum_magf80.h | 33 ++++++++++++++++
libc/src/math/CMakeLists.txt | 2 +
libc/src/math/fmaximum_magf80.h | 27 +++++++++++++
libc/src/math/fminimum_magf80.h | 27 +++++++++++++
libc/src/math/generic/CMakeLists.txt | 22 +++++++++++
libc/src/math/generic/fmaximum_magf80.cpp | 30 +++++++++++++++
libc/src/math/generic/fminimum_magf80.cpp | 30 +++++++++++++++
libc/test/shared/CMakeLists.txt | 4 ++
.../shared/shared_math_constexpr_test.cpp | 6 +++
libc/test/shared/shared_math_test.cpp | 4 ++
libc/test/src/math/smoke/CMakeLists.txt | 30 +++++++++++++++
.../src/math/smoke/fmaximum_magf80_test.cpp | 21 ++++++++++
.../src/math/smoke/fminimum_magf80_test.cpp | 21 ++++++++++
.../llvm-project-overlay/libc/BUILD.bazel | 38 +++++++++++++++++++
.../libc/test/src/math/smoke/BUILD.bazel | 16 ++++++++
34 files changed, 450 insertions(+)
create mode 100644 libc/shared/math/fmaximum_magf80.h
create mode 100644 libc/shared/math/fminimum_magf80.h
create mode 100644 libc/src/__support/math/fmaximum_magf80.h
create mode 100644 libc/src/__support/math/fminimum_magf80.h
create mode 100644 libc/src/math/fmaximum_magf80.h
create mode 100644 libc/src/math/fminimum_magf80.h
create mode 100644 libc/src/math/generic/fmaximum_magf80.cpp
create mode 100644 libc/src/math/generic/fminimum_magf80.cpp
create mode 100644 libc/test/src/math/smoke/fmaximum_magf80_test.cpp
create mode 100644 libc/test/src/math/smoke/fminimum_magf80_test.cpp
diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 487db7abeb1d59..d83eb8251b6781 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -441,6 +441,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -464,6 +465,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index ec59daaf02e349..15d01840e38d05 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -453,6 +453,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -476,6 +477,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/baremetal/hexagon/entrypoints.txt b/libc/config/baremetal/hexagon/entrypoints.txt
index 5dcac38bd5d09e..1a0ce9395b3a9a 100644
--- a/libc/config/baremetal/hexagon/entrypoints.txt
+++ b/libc/config/baremetal/hexagon/entrypoints.txt
@@ -434,6 +434,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_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -452,6 +453,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_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index d24fe26068c024..8f6bee6f1ac136 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -444,6 +444,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -467,6 +468,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 3f8a976e69ca16..e364840bbd3747 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -262,6 +262,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -285,6 +286,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 404f4512c7c07c..10346258e069a5 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -164,6 +164,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaxf80
#libc.src.math.fmaximum_mag_numf128
#libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
#libc.src.math.fmaximum_numf128
libc.src.math.fmaximum_numf80
#libc.src.math.fmaximumf128
@@ -175,6 +176,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminf80
#libc.src.math.fminimum_mag_numf128
#libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
#libc.src.math.fminimum_numf128
libc.src.math.fminimum_numf80
#libc.src.math.fminimumf128
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index 4b7fe65fc9ccb7..24c8e3b8ed9462 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -179,12 +179,14 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaf
libc.src.math.fmaximum_mag_numf128
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmin
libc.src.math.fminf
libc.src.math.fminf128
libc.src.math.fminf80
libc.src.math.fminimum_mag_numf128
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminl
libc.src.math.fmax
libc.src.math.fmaxf
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 28563cc294568b..96b3e3933633fd 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -378,6 +378,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum
libc.src.math.fmaximum_mag_numf128
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximumf
libc.src.math.fmaximumf128
libc.src.math.fmaximumf80
@@ -401,6 +402,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum
libc.src.math.fminimum_mag_numf128
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimumf
libc.src.math.fminimumf128
libc.src.math.fminimumf80
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 650ad9d74b6e2f..64b8bf5498660b 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -374,6 +374,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum
libc.src.math.fmaximum_mag_numf128
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximumf
libc.src.math.fmaximumf128
libc.src.math.fmaximumf80
@@ -397,6 +398,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum
libc.src.math.fminimum_mag_numf128
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimumf
libc.src.math.fminimumf128
libc.src.math.fminimumf80
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index cfa0bedd15f31c..dc8ecbd711994a 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -684,6 +684,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -707,6 +708,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index a75295a86671fb..cd36d9951b5001 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -477,6 +477,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -500,6 +501,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
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 8e8d2e82f85f26..b0a1fe91d1cf16 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -747,6 +747,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -770,6 +771,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 438c7d2639d977..ea368d58b7ac2f 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -769,6 +769,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaximum_mag_numl
libc.src.math.fmaximum_magf
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmaximum_magl
libc.src.math.fmaximum_num
libc.src.math.fmaximum_numf
@@ -792,6 +793,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_mag_numl
libc.src.math.fminimum_magf
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminimum_magl
libc.src.math.fminimum_num
libc.src.math.fminimum_numf
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 2dd8670cb84c8f..55791b48de2866 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -212,12 +212,14 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.fmaf
libc.src.math.fmaximum_mag_numf128
libc.src.math.fmaximum_magf128
+ libc.src.math.fmaximum_magf80
libc.src.math.fmin
libc.src.math.fminf
libc.src.math.fminf128
libc.src.math.fminf80
libc.src.math.fminimum_mag_numf128
libc.src.math.fminimum_magf128
+ libc.src.math.fminimum_magf80
libc.src.math.fminl
libc.src.math.fmax
libc.src.math.fmaxf
diff --git a/libc/shared/math.h b/libc/shared/math.h
index 39c7ec10fb2b5a..2fe259877d8a13 100644
--- a/libc/shared/math.h
+++ b/libc/shared/math.h
@@ -197,6 +197,7 @@
#include "math/fmaximum_magf.h"
#include "math/fmaximum_magf128.h"
#include "math/fmaximum_magf16.h"
+#include "math/fmaximum_magf80.h"
#include "math/fmaximum_magl.h"
#include "math/fmaximum_num.h"
#include "math/fmaximum_numbf16.h"
@@ -230,6 +231,7 @@
#include "math/fminimum_magf.h"
#include "math/fminimum_magf128.h"
#include "math/fminimum_magf16.h"
+#include "math/fminimum_magf80.h"
#include "math/fminimum_magl.h"
#include "math/fminimum_num.h"
#include "math/fminimum_numbf16.h"
diff --git a/libc/shared/math/fmaximum_magf80.h b/libc/shared/math/fmaximum_magf80.h
new file mode 100644
index 00000000000000..8315280f94ff07
--- /dev/null
+++ b/libc/shared/math/fmaximum_magf80.h
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Shared fmaximum_magf80 function.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAGF80_H
+#define LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAGF80_H
+
+#include "shared/libc_common.h"
+#include "src/__support/math/fmaximum_magf80.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace shared {
+
+using math::fmaximum_magf80;
+
+} // namespace shared
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SHARED_MATH_FMAXIMUM_MAGF80_H
diff --git a/libc/shared/math/fminimum_magf80.h b/libc/shared/math/fminimum_magf80.h
new file mode 100644
index 00000000000000..7da81bd55a5e8b
--- /dev/null
+++ b/libc/shared/math/fminimum_magf80.h
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Shared fminimum_magf80 function.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SHARED_MATH_FMINIMUM_MAGF80_H
+#define LLVM_LIBC_SHARED_MATH_FMINIMUM_MAGF80_H
+
+#include "shared/libc_common.h"
+#include "src/__support/math/fminimum_magf80.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace shared {
+
+using math::fminimum_magf80;
+
+} // namespace shared
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SHARED_MATH_FMINIMUM_MAGF80_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index a3bdc45b377cf0..d3d7bfe000f263 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -985,6 +985,16 @@ add_header_library(
libc.src.__support.macros.config
)
+add_header_library(
+ fmaximum_magf80
+ HDRS
+ fmaximum_magf80.h
+ DEPENDS
+ libc.src.__support.FPUtil.basic_operations
+ libc.src.__support.FPUtil.float80
+ libc.src.__support.macros.config
+)
+
add_header_library(
fmaximum_magl
HDRS
@@ -1291,6 +1301,16 @@ add_header_library(
libc.src.__support.macros.config
)
+add_header_library(
+ fminimum_magf80
+ HDRS
+ fminimum_magf80.h
+ DEPENDS
+ libc.src.__support.FPUtil.basic_operations
+ libc.src.__support.FPUtil.float80
+ libc.src.__support.macros.config
+)
+
add_header_library(
fminimum_magl
HDRS
diff --git a/libc/src/__support/math/fmaximum_magf80.h b/libc/src/__support/math/fmaximum_magf80.h
new file mode 100644
index 00000000000000..0d09e3be8e1721
--- /dev/null
+++ b/libc/src/__support/math/fmaximum_magf80.h
@@ -0,0 +1,33 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Implementation of the fmaximum_magf80 function.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAGF80_H
+#define LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAGF80_H
+
+#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/float80.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace math {
+
+using LIBC_NAMESPACE::fputil::Float80;
+
+LIBC_INLINE constexpr Float80 fmaximum_magf80(Float80 x, Float80 y) {
+ return fputil::fmaximum_mag(x, y);
+}
+
+} // namespace math
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMAXIMUM_MAGF80_H
diff --git a/libc/src/__support/math/fminimum_magf80.h b/libc/src/__support/math/fminimum_magf80.h
new file mode 100644
index 00000000000000..03a47b198eebd1
--- /dev/null
+++ b/libc/src/__support/math/fminimum_magf80.h
@@ -0,0 +1,33 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Implementation of the fminimum_magf80 function.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAGF80_H
+#define LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAGF80_H
+
+#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/float80.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace math {
+
+using LIBC_NAMESPACE::fputil::Float80;
+
+LIBC_INLINE constexpr Float80 fminimum_magf80(Float80 x, Float80 y) {
+ return fputil::fminimum_mag(x, y);
+}
+
+} // namespace math
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMINIMUM_MAGF80_H
diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index c839010eab36ce..d8323030f57932 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -283,6 +283,7 @@ add_math_entrypoint_object(fmaximum_magf)
add_math_entrypoint_object(fmaximum_magl)
add_math_entrypoint_object(fmaximum_magf16)
add_math_entrypoint_object(fmaximum_magf128)
+add_math_entrypoint_object(fmaximum_magf80)
add_math_entrypoint_object(fmaximum_magbf16)
add_math_entrypoint_object(fmaximum_mag_num)
@@ -313,6 +314,7 @@ add_math_entrypoint_object(fminimum_magf)
add_math_entrypoint_object(fminimum_magl)
add_math_entrypoint_object(fminimum_magf16)
add_math_entrypoint_object(fminimum_magf128)
+add_math_entrypoint_object(fminimum_magf80)
add_math_entrypoint_object(fminimum_magbf16)
add_math_entrypoint_object(fminimum_mag_num)
diff --git a/libc/src/math/fmaximum_magf80.h b/libc/src/math/fmaximum_magf80.h
new file mode 100644
index 00000000000000..304c78c74d22c7
--- /dev/null
+++ b/libc/src/math/fmaximum_magf80.h
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Public declaration of the fmaximum_magf80 entrypoint.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_FMAXIMUM_MAGF80_H
+#define LLVM_LIBC_SRC_MATH_FMAXIMUM_MAGF80_H
+
+#include "src/__support/FPUtil/float80.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+float80 fmaximum_magf80(float80 x, float80 y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_FMAXIMUM_MAGF80_H
diff --git a/libc/src/math/fminimum_magf80.h b/libc/src/math/fminimum_magf80.h
new file mode 100644
index 00000000000000..a12bbf18f83632
--- /dev/null
+++ b/libc/src/math/fminimum_magf80.h
@@ -0,0 +1,27 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Public declaration of the fminimum_magf80 entrypoint.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_FMINIMUM_MAGF80_H
+#define LLVM_LIBC_SRC_MATH_FMINIMUM_MAGF80_H
+
+#include "src/__support/FPUtil/float80.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+float80 fminimum_magf80(float80 x, float80 y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_FMINIMUM_MAGF80_H
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 122b8e74152447..99aa6f354b6617 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2362,6 +2362,17 @@ add_entrypoint_object(
libc.src.__support.math.fmaximum_magf128
)
+add_entrypoint_object(
+ fmaximum_magf80
+ SRCS
+ fmaximum_magf80.cpp
+ HDRS
+ ../fmaximum_magf80.h
+ DEPENDS
+ libc.src.__support.CPP.bit
+ libc.src.__support.math.fmaximum_magf80
+)
+
add_entrypoint_object(
fmaximum_magbf16
SRCS
@@ -2628,6 +2639,17 @@ add_entrypoint_object(
libc.src.__support.math.fminimum_magf128
)
+add_entrypoint_object(
+ fminimum_magf80
+ SRCS
+ fminimum_magf80.cpp
+ HDRS
+ ../fminimum_magf80.h
+ DEPENDS
+ libc.src.__support.CPP.bit
+ libc.src.__support.math.fminimum_magf80
+)
+
add_entrypoint_object(
fminimum_magbf16
SRCS
diff --git a/libc/src/math/generic/fmaximum_magf80.cpp b/libc/src/math/generic/fmaximum_magf80.cpp
new file mode 100644
index 00000000000000..82ab98f6021ca6
--- /dev/null
+++ b/libc/src/math/generic/fmaximum_magf80.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Implementation of the fmaximum_magf80 function.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/math/fmaximum_magf80.h"
+#include "src/__support/CPP/bit.h"
+#include "src/__support/FPUtil/float80.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/math/fmaximum_magf80.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+using LIBC_NAMESPACE::fputil::Float80;
+
+LLVM_LIBC_FUNCTION(float80, fmaximum_magf80, (float80 x, float80 y)) {
+ return cpp::bit_cast<float80>(math::fmaximum_magf80(
+ cpp::bit_cast<Float80>(x), cpp::bit_cast<Float80>(y)));
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/generic/fminimum_magf80.cpp b/libc/src/math/generic/fminimum_magf80.cpp
new file mode 100644
index 00000000000000..44d5fde94b487e
--- /dev/null
+++ b/libc/src/math/generic/fminimum_magf80.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Implementation of the fminimum_magf80 function.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/math/fminimum_magf80.h"
+#include "src/__support/CPP/bit.h"
+#include "src/__support/FPUtil/float80.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/math/fminimum_magf80.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+using LIBC_NAMESPACE::fputil::Float80;
+
+LLVM_LIBC_FUNCTION(float80, fminimum_magf80, (float80 x, float80 y)) {
+ return cpp::bit_cast<float80>(math::fminimum_magf80(
+ cpp::bit_cast<Float80>(x), cpp::bit_cast<Float80>(y)));
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt
index f9bebb25b1cbe9..bb46be60a3b388 100644
--- a/libc/test/shared/CMakeLists.txt
+++ b/libc/test/shared/CMakeLists.txt
@@ -212,6 +212,7 @@ else()
libc.src.__support.math.fmaximum_magf
libc.src.__support.math.fmaximum_magf128
libc.src.__support.math.fmaximum_magf16
+ libc.src.__support.math.fmaximum_magf80
libc.src.__support.math.fmaximum_magl
libc.src.__support.math.fmaximum_num
libc.src.__support.math.fmaximum_numbf16
@@ -245,6 +246,7 @@ else()
libc.src.__support.math.fminimum_magf
libc.src.__support.math.fminimum_magf128
libc.src.__support.math.fminimum_magf16
+ libc.src.__support.math.fminimum_magf80
libc.src.__support.math.fminimum_magl
libc.src.__support.math.fminimum_num
libc.src.__support.math.fminimum_numbf16
@@ -619,6 +621,7 @@ else()
libc.src.__support.math.fmaximum_magf
libc.src.__support.math.fmaximum_magf128
libc.src.__support.math.fmaximum_magf16
+ libc.src.__support.math.fmaximum_magf80
libc.src.__support.math.fmaximum_magl
libc.src.__support.math.fmaximum_num
libc.src.__support.math.fmaximum_numbf16
@@ -651,6 +654,7 @@ else()
libc.src.__support.math.fminimum_magf
libc.src.__support.math.fminimum_magf128
libc.src.__support.math.fminimum_magf16
+ libc.src.__support.math.fminimum_magf80
libc.src.__support.math.fminimum_magl
libc.src.__support.math.fminimum_num
libc.src.__support.math.fminimum_numbf16
diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 30b1af0ab58dce..18165e2724513a 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -430,6 +430,12 @@ static_assert(Float80(0.0) ==
static_assert(Float80(0.0) ==
LIBC_NAMESPACE::shared::fminimum_numf80(Float80(0.0),
Float80(0.0)));
+static_assert(Float80(0.0) ==
+ LIBC_NAMESPACE::shared::fmaximum_magf80(Float80(0.0),
+ Float80(0.0)));
+static_assert(Float80(0.0) ==
+ LIBC_NAMESPACE::shared::fminimum_magf80(Float80(0.0),
+ Float80(0.0)));
static_assert(Float128(1.0) ==
LIBC_NAMESPACE::shared::fdimf128(Float128(1.0), Float128(0.0)));
static_assert(Float128(0.0) ==
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 2c76502b36b78c..494fba99b546a5 100644
--- a/libc/test/shared/shared_math_test.cpp
+++ b/libc/test/shared/shared_math_test.cpp
@@ -691,6 +691,10 @@ TEST(LlvmLibcSharedMathTest, AllFloat80) {
Float80(0.0), Float80(0.0)));
EXPECT_FP_EQ(Float80(0.0), LIBC_NAMESPACE::shared::fminimum_numf80(
Float80(0.0), Float80(0.0)));
+ EXPECT_FP_EQ(Float80(0.0), LIBC_NAMESPACE::shared::fmaximum_magf80(
+ Float80(0.0), Float80(0.0)));
+ EXPECT_FP_EQ(Float80(0.0), LIBC_NAMESPACE::shared::fminimum_magf80(
+ Float80(0.0), Float80(0.0)));
}
#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 588ba732495f9f..75101cc13e91a6 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3186,6 +3186,21 @@ add_fp_unittest(
libc.src.__support.FPUtil.fp_bits
)
+add_fp_unittest(
+ fmaximum_magf80_test
+ SUITE
+ libc-math-smoke-tests
+ SRCS
+ fmaximum_magf80_test.cpp
+ HDRS
+ FMaximumMagTest.h
+ DEPENDS
+ libc.src.math.fmaximum_magf80
+ libc.src.__support.CPP.algorithm
+ libc.src.__support.FPUtil.float80
+ libc.src.__support.FPUtil.fp_bits
+)
+
add_fp_unittest(
fmaximum_magbf16_test
SUITE
@@ -3560,6 +3575,21 @@ add_fp_unittest(
libc.src.__support.FPUtil.fp_bits
)
+add_fp_unittest(
+ fminimum_magf80_test
+ SUITE
+ libc-math-smoke-tests
+ SRCS
+ fminimum_magf80_test.cpp
+ HDRS
+ FMinimumMagTest.h
+ DEPENDS
+ libc.src.math.fminimum_magf80
+ libc.src.__support.CPP.algorithm
+ libc.src.__support.FPUtil.float80
+ libc.src.__support.FPUtil.fp_bits
+)
+
add_fp_unittest(
fminimum_magbf16_test
SUITE
diff --git a/libc/test/src/math/smoke/fmaximum_magf80_test.cpp b/libc/test/src/math/smoke/fmaximum_magf80_test.cpp
new file mode 100644
index 00000000000000..954fd8ada77562
--- /dev/null
+++ b/libc/test/src/math/smoke/fmaximum_magf80_test.cpp
@@ -0,0 +1,21 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Smoke tests for fmaximum_magf80.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/__support/FPUtil/float80.h"
+#include "src/math/fmaximum_magf80.h"
+#include "test/src/math/smoke/FMaximumMagTest.h"
+
+using LIBC_NAMESPACE::fputil::Float80;
+
+LIST_FMAXIMUM_MAG_TESTS(Fmaximum_magf80, Float80,
+ LIBC_NAMESPACE::fmaximum_magf80)
diff --git a/libc/test/src/math/smoke/fminimum_magf80_test.cpp b/libc/test/src/math/smoke/fminimum_magf80_test.cpp
new file mode 100644
index 00000000000000..7741ee0db6a31e
--- /dev/null
+++ b/libc/test/src/math/smoke/fminimum_magf80_test.cpp
@@ -0,0 +1,21 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Smoke tests for fminimum_magf80.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/__support/FPUtil/float80.h"
+#include "src/math/fminimum_magf80.h"
+#include "test/src/math/smoke/FMinimumMagTest.h"
+
+using LIBC_NAMESPACE::fputil::Float80;
+
+LIST_FMINIMUM_MAG_TESTS(Fminimum_magf80, Float80,
+ LIBC_NAMESPACE::fminimum_magf80)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index 89ff540f963d90..87a23cefd82d50 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -7227,6 +7227,16 @@ libc_support_library(
],
)
+libc_support_library(
+ name = "__support_math_fmaximum_magf80",
+ hdrs = ["src/__support/math/fmaximum_magf80.h"],
+ deps = [
+ ":__support_fputil_basic_operations",
+ ":__support_fputil_float80",
+ ":__support_macros_config",
+ ],
+)
+
libc_support_library(
name = "__support_math_fmaximum_magl",
hdrs = ["src/__support/math/fmaximum_magl.h"],
@@ -7505,6 +7515,16 @@ libc_support_library(
],
)
+libc_support_library(
+ name = "__support_math_fminimum_magf80",
+ hdrs = ["src/__support/math/fminimum_magf80.h"],
+ deps = [
+ ":__support_fputil_basic_operations",
+ ":__support_fputil_float80",
+ ":__support_macros_config",
+ ],
+)
+
libc_support_library(
name = "__support_math_fminimum_magl",
hdrs = ["src/__support/math/fminimum_magl.h"],
@@ -14246,6 +14266,15 @@ libc_math_function(
],
)
+libc_math_function(
+ name = "fmaximum_magf80",
+ additional_deps = [
+ ":__support_cpp_bit",
+ ":__support_fputil_float80",
+ ":__support_math_fmaximum_magf80",
+ ],
+)
+
libc_math_function(
name = "fmaximum_magf16",
additional_deps = [
@@ -14465,6 +14494,15 @@ libc_math_function(
],
)
+libc_math_function(
+ name = "fminimum_magf80",
+ additional_deps = [
+ ":__support_cpp_bit",
+ ":__support_fputil_float80",
+ ":__support_math_fminimum_magf80",
+ ],
+)
+
libc_math_function(
name = "fminimum_magf16",
additional_deps = [
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 17358f3e617504..418d2d0d2352a4 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
@@ -914,6 +914,14 @@ math_test(
],
)
+math_test(
+ name = "fmaximum_magf80",
+ hdrs = ["FMaximumMagTest.h"],
+ deps = [
+ "//libc:__support_fputil_float80",
+ ],
+)
+
math_test(
name = "fmaximum_mag_num",
hdrs = ["FMaximumMagNumTest.h"],
@@ -1118,6 +1126,14 @@ math_test(
],
)
+math_test(
+ name = "fminimum_magf80",
+ hdrs = ["FMinimumMagTest.h"],
+ deps = [
+ "//libc:__support_fputil_float80",
+ ],
+)
+
math_test(
name = "fminimum_magf16",
hdrs = ["FMinimumMagTest.h"],
More information about the libc-commits
mailing list