[llvm-branch-commits] [libc] [libc][math][c++23] Add totalorder{, mag}bf16 math functions (PR #155568)

Krishna Pandey via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Aug 27 00:33:56 PDT 2025


https://github.com/krishna2803 created https://github.com/llvm/llvm-project/pull/155568

This PR adds the following basic math functions for BFloat16 type along with the tests:
- totalorderbf16
- totalordermagbf16

>From 204df3472901aba6382817f36b1f3d19e80d662a Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Wed, 27 Aug 2025 12:43:27 +0530
Subject: [PATCH 1/4] feat: implement totalorder{,mag}bf16 math functions

Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
---
 libc/src/math/CMakeLists.txt                |  2 ++
 libc/src/math/generic/CMakeLists.txt        | 29 +++++++++++++++++++++
 libc/src/math/generic/totalorderbf16.cpp    | 22 ++++++++++++++++
 libc/src/math/generic/totalordermagbf16.cpp | 22 ++++++++++++++++
 libc/src/math/totalorderbf16.h              | 21 +++++++++++++++
 libc/src/math/totalordermagbf16.h           | 21 +++++++++++++++
 6 files changed, 117 insertions(+)
 create mode 100644 libc/src/math/generic/totalorderbf16.cpp
 create mode 100644 libc/src/math/generic/totalordermagbf16.cpp
 create mode 100644 libc/src/math/totalorderbf16.h
 create mode 100644 libc/src/math/totalordermagbf16.h

diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index e6a2f868e46b5..1edb517421e28 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -579,12 +579,14 @@ add_math_entrypoint_object(totalorderf)
 add_math_entrypoint_object(totalorderl)
 add_math_entrypoint_object(totalorderf16)
 add_math_entrypoint_object(totalorderf128)
+add_math_entrypoint_object(totalorderbf16)
 
 add_math_entrypoint_object(totalordermag)
 add_math_entrypoint_object(totalordermagf)
 add_math_entrypoint_object(totalordermagl)
 add_math_entrypoint_object(totalordermagf16)
 add_math_entrypoint_object(totalordermagf128)
+add_math_entrypoint_object(totalordermagbf16)
 
 add_math_entrypoint_object(trunc)
 add_math_entrypoint_object(truncf)
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 70ca5c51990de..904f8d2eb4704 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -4784,6 +4784,21 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.basic_operations
     libc.src.__support.macros.properties.types
 )
+
+add_entrypoint_object(
+  totalorderbf16
+  SRCS
+    totalorderbf16.cpp
+  HDRS
+    ../totalorderbf16.h
+  DEPENDS
+    libc.src.__support.common
+    libc.src.__support.macros.config
+    libc.src.__support.macros.properties.types
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.bfloat16
+)
+
 add_entrypoint_object(
   totalordermag
   SRCS
@@ -4835,6 +4850,20 @@ add_entrypoint_object(
     libc.src.__support.macros.properties.types
 )
 
+add_entrypoint_object(
+  totalordermagbf16
+  SRCS
+    totalordermagbf16.cpp
+  HDRS
+    ../totalordermagbf16.h
+  DEPENDS
+    libc.src.__support.common
+    libc.src.__support.macros.config
+    libc.src.__support.macros.properties.types
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.bfloat16
+)
+
 add_entrypoint_object(
   getpayload
   SRCS
diff --git a/libc/src/math/generic/totalorderbf16.cpp b/libc/src/math/generic/totalorderbf16.cpp
new file mode 100644
index 0000000000000..bb9c86e281f6b
--- /dev/null
+++ b/libc/src/math/generic/totalorderbf16.cpp
@@ -0,0 +1,22 @@
+//===-- Implementation of totalorderbf16 function -------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/totalorderbf16.h"
+#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(int, totalorderbf16,
+                   (const bfloat16 *x, const bfloat16 *y)) {
+  return static_cast<int>(fputil::totalorder(*x, *y));
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/generic/totalordermagbf16.cpp b/libc/src/math/generic/totalordermagbf16.cpp
new file mode 100644
index 0000000000000..3fc61d9d8bcb4
--- /dev/null
+++ b/libc/src/math/generic/totalordermagbf16.cpp
@@ -0,0 +1,22 @@
+//===-- Implementation of totalordermagbf16 function ----------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/totalordermagbf16.h"
+#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(int, totalordermagbf16,
+                   (const bfloat16 *x, const bfloat16 *y)) {
+  return static_cast<int>(fputil::totalordermag(*x, *y));
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/totalorderbf16.h b/libc/src/math/totalorderbf16.h
new file mode 100644
index 0000000000000..2414852db92b8
--- /dev/null
+++ b/libc/src/math/totalorderbf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for totalorderbf16 ----------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_TOTALORDERF16_H
+#define LLVM_LIBC_SRC_MATH_TOTALORDERF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+int totalorderbf16(const bfloat16 *x, const bfloat16 *y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_TOTALORDERF16_H
diff --git a/libc/src/math/totalordermagbf16.h b/libc/src/math/totalordermagbf16.h
new file mode 100644
index 0000000000000..c48de1ca8e540
--- /dev/null
+++ b/libc/src/math/totalordermagbf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for totalordermagbf16 -------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_TOTALORDERMAGF16_H
+#define LLVM_LIBC_SRC_MATH_TOTALORDERMAGF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+int totalordermagbf16(const bfloat16 *x, const bfloat16 *y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_TOTALORDERMAGF16_H

>From 06ca9a3956e5331d7cc15bc65d51c1f77f1e6c0c Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Wed, 27 Aug 2025 12:43:42 +0530
Subject: [PATCH 2/4] chore: add smoke tests for totalorder{,mag}bf16 math
 functions

Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
---
 libc/test/src/math/smoke/CMakeLists.txt       | 26 ++++++++++++
 libc/test/src/math/smoke/TotalOrderMagTest.h  | 41 +++++++++++++++----
 libc/test/src/math/smoke/TotalOrderTest.h     | 41 +++++++++++++++----
 .../src/math/smoke/totalorderbf16_test.cpp    | 14 +++++++
 .../src/math/smoke/totalordermagbf16_test.cpp | 14 +++++++
 5 files changed, 120 insertions(+), 16 deletions(-)
 create mode 100644 libc/test/src/math/smoke/totalorderbf16_test.cpp
 create mode 100644 libc/test/src/math/smoke/totalordermagbf16_test.cpp

diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 0497d5e0c06ed..166802fd9f9cc 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -5050,6 +5050,19 @@ add_fp_unittest(
     libc.src.math.totalorderf128
 )
 
+add_fp_unittest(
+  totalorderbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorderbf16_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorderbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
 add_fp_unittest(
   totalordermag_test
   SUITE
@@ -5110,6 +5123,19 @@ add_fp_unittest(
     libc.src.math.totalordermagf128
 )
 
+add_fp_unittest(
+  totalordermagbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermagbf16_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermagbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
 add_fp_unittest(
   getpayload_test
   SUITE
diff --git a/libc/test/src/math/smoke/TotalOrderMagTest.h b/libc/test/src/math/smoke/TotalOrderMagTest.h
index 0a13fd2922e4c..2b37d8b2f6c4a 100644
--- a/libc/test/src/math/smoke/TotalOrderMagTest.h
+++ b/libc/test/src/math/smoke/TotalOrderMagTest.h
@@ -111,19 +111,44 @@ class TotalOrderMagTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     T snan_0x42 = FPBits::signaling_nan(Sign::POS, 0x42).get_val();
     T neg_snan_0x42 = FPBits::signaling_nan(Sign::NEG, 0x42).get_val();
 
+    T qnan_0x15 = FPBits::quiet_nan(Sign::POS, 0x15).get_val();
+    T neg_qnan_0x15 = FPBits::quiet_nan(Sign::NEG, 0x15).get_val();
+    T snan_0x15 = FPBits::signaling_nan(Sign::POS, 0x15).get_val();
+    T neg_snan_0x15 = FPBits::signaling_nan(Sign::NEG, 0x15).get_val();
+
     EXPECT_TRUE(funcWrapper(func, aNaN, aNaN));
     EXPECT_TRUE(funcWrapper(func, sNaN, sNaN));
-    EXPECT_TRUE(funcWrapper(func, aNaN, qnan_0x42));
-    EXPECT_FALSE(funcWrapper(func, sNaN, snan_0x42));
-    EXPECT_FALSE(funcWrapper(func, qnan_0x42, aNaN));
-    EXPECT_TRUE(funcWrapper(func, snan_0x42, sNaN));
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
+      EXPECT_TRUE(funcWrapper(func, aNaN, qnan_0x42));
+      EXPECT_FALSE(funcWrapper(func, sNaN, snan_0x42));
+      EXPECT_FALSE(funcWrapper(func, qnan_0x42, aNaN));
+      EXPECT_TRUE(funcWrapper(func, snan_0x42, sNaN));
+    }
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 5) {
+      EXPECT_TRUE(funcWrapper(func, aNaN, qnan_0x15));
+      EXPECT_FALSE(funcWrapper(func, sNaN, snan_0x15));
+      EXPECT_FALSE(funcWrapper(func, qnan_0x15, aNaN));
+      EXPECT_TRUE(funcWrapper(func, snan_0x15, sNaN));
+    }
 
     EXPECT_TRUE(funcWrapper(func, neg_aNaN, neg_aNaN));
     EXPECT_TRUE(funcWrapper(func, neg_sNaN, neg_sNaN));
-    EXPECT_TRUE(funcWrapper(func, neg_aNaN, neg_qnan_0x42));
-    EXPECT_FALSE(funcWrapper(func, neg_sNaN, neg_snan_0x42));
-    EXPECT_FALSE(funcWrapper(func, neg_qnan_0x42, neg_aNaN));
-    EXPECT_TRUE(funcWrapper(func, neg_snan_0x42, neg_sNaN));
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
+      EXPECT_TRUE(funcWrapper(func, neg_aNaN, neg_qnan_0x42));
+      EXPECT_FALSE(funcWrapper(func, neg_sNaN, neg_snan_0x42));
+      EXPECT_FALSE(funcWrapper(func, neg_qnan_0x42, neg_aNaN));
+      EXPECT_TRUE(funcWrapper(func, neg_snan_0x42, neg_sNaN));
+    }
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 5) {
+      EXPECT_TRUE(funcWrapper(func, neg_aNaN, neg_qnan_0x15));
+      EXPECT_FALSE(funcWrapper(func, neg_sNaN, neg_snan_0x15));
+      EXPECT_FALSE(funcWrapper(func, neg_qnan_0x15, neg_aNaN));
+      EXPECT_TRUE(funcWrapper(func, neg_snan_0x15, neg_sNaN));
+    }
   }
 };
 
diff --git a/libc/test/src/math/smoke/TotalOrderTest.h b/libc/test/src/math/smoke/TotalOrderTest.h
index e426eb35016b9..e5984391f719f 100644
--- a/libc/test/src/math/smoke/TotalOrderTest.h
+++ b/libc/test/src/math/smoke/TotalOrderTest.h
@@ -109,19 +109,44 @@ class TotalOrderTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     T snan_0x42 = FPBits::signaling_nan(Sign::POS, 0x42).get_val();
     T neg_snan_0x42 = FPBits::signaling_nan(Sign::NEG, 0x42).get_val();
 
+    T qnan_0x15 = FPBits::quiet_nan(Sign::POS, 0x15).get_val();
+    T neg_qnan_0x15 = FPBits::quiet_nan(Sign::NEG, 0x15).get_val();
+    T snan_0x15 = FPBits::signaling_nan(Sign::POS, 0x15).get_val();
+    T neg_snan_0x15 = FPBits::signaling_nan(Sign::NEG, 0x15).get_val();
+
     EXPECT_TRUE(funcWrapper(func, aNaN, aNaN));
     EXPECT_TRUE(funcWrapper(func, sNaN, sNaN));
-    EXPECT_TRUE(funcWrapper(func, aNaN, qnan_0x42));
-    EXPECT_FALSE(funcWrapper(func, sNaN, snan_0x42));
-    EXPECT_FALSE(funcWrapper(func, qnan_0x42, aNaN));
-    EXPECT_TRUE(funcWrapper(func, snan_0x42, sNaN));
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
+      EXPECT_TRUE(funcWrapper(func, aNaN, qnan_0x42));
+      EXPECT_FALSE(funcWrapper(func, sNaN, snan_0x42));
+      EXPECT_FALSE(funcWrapper(func, qnan_0x42, aNaN));
+      EXPECT_TRUE(funcWrapper(func, snan_0x42, sNaN));
+    }
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 5) {
+      EXPECT_TRUE(funcWrapper(func, aNaN, qnan_0x15));
+      EXPECT_FALSE(funcWrapper(func, sNaN, snan_0x15));
+      EXPECT_FALSE(funcWrapper(func, qnan_0x15, aNaN));
+      EXPECT_TRUE(funcWrapper(func, snan_0x15, sNaN));
+    }
 
     EXPECT_TRUE(funcWrapper(func, neg_aNaN, neg_aNaN));
     EXPECT_TRUE(funcWrapper(func, neg_sNaN, neg_sNaN));
-    EXPECT_FALSE(funcWrapper(func, neg_aNaN, neg_qnan_0x42));
-    EXPECT_TRUE(funcWrapper(func, neg_sNaN, neg_snan_0x42));
-    EXPECT_TRUE(funcWrapper(func, neg_qnan_0x42, neg_aNaN));
-    EXPECT_FALSE(funcWrapper(func, neg_snan_0x42, neg_sNaN));
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
+      EXPECT_FALSE(funcWrapper(func, neg_aNaN, neg_qnan_0x42));
+      EXPECT_TRUE(funcWrapper(func, neg_sNaN, neg_snan_0x42));
+      EXPECT_TRUE(funcWrapper(func, neg_qnan_0x42, neg_aNaN));
+      EXPECT_FALSE(funcWrapper(func, neg_snan_0x42, neg_sNaN));
+    }
+
+    if constexpr (FPBits::FRACTION_LEN - 1 >= 5) {
+      EXPECT_FALSE(funcWrapper(func, neg_aNaN, neg_qnan_0x15));
+      EXPECT_TRUE(funcWrapper(func, neg_sNaN, neg_snan_0x15));
+      EXPECT_TRUE(funcWrapper(func, neg_qnan_0x15, neg_aNaN));
+      EXPECT_FALSE(funcWrapper(func, neg_snan_0x15, neg_sNaN));
+    }
   }
 };
 
diff --git a/libc/test/src/math/smoke/totalorderbf16_test.cpp b/libc/test/src/math/smoke/totalorderbf16_test.cpp
new file mode 100644
index 0000000000000..11aeeac0c52dd
--- /dev/null
+++ b/libc/test/src/math/smoke/totalorderbf16_test.cpp
@@ -0,0 +1,14 @@
+//===-- Unittests for totalorderbf16 --------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "TotalOrderTest.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/totalorderbf16.h"
+
+LIST_TOTALORDER_TESTS(bfloat16, LIBC_NAMESPACE::totalorderbf16)
diff --git a/libc/test/src/math/smoke/totalordermagbf16_test.cpp b/libc/test/src/math/smoke/totalordermagbf16_test.cpp
new file mode 100644
index 0000000000000..b5a5a1b7d6c52
--- /dev/null
+++ b/libc/test/src/math/smoke/totalordermagbf16_test.cpp
@@ -0,0 +1,14 @@
+//===-- Unittests for totalordermagbf16 -----------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "TotalOrderMagTest.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/totalordermagbf16.h"
+
+LIST_TOTALORDERMAG_TESTS(bfloat16, LIBC_NAMESPACE::totalordermagbf16)

>From f83bce4928ed483836a84d7630fcbced151602fd Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Wed, 27 Aug 2025 12:43:52 +0530
Subject: [PATCH 3/4] chore: update entrypoints

Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
---
 libc/config/baremetal/aarch64/entrypoints.txt | 4 +++-
 libc/config/baremetal/arm/entrypoints.txt     | 4 +++-
 libc/config/baremetal/riscv/entrypoints.txt   | 4 +++-
 libc/config/darwin/aarch64/entrypoints.txt    | 4 +++-
 libc/config/darwin/x86_64/entrypoints.txt     | 4 +++-
 libc/config/gpu/amdgpu/entrypoints.txt        | 4 +++-
 libc/config/gpu/nvptx/entrypoints.txt         | 4 +++-
 libc/config/linux/aarch64/entrypoints.txt     | 4 +++-
 libc/config/linux/arm/entrypoints.txt         | 4 +++-
 libc/config/linux/riscv/entrypoints.txt       | 4 +++-
 libc/config/linux/x86_64/entrypoints.txt      | 4 +++-
 libc/config/windows/entrypoints.txt           | 4 +++-
 12 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index ce6d0a7e440a4..ff3a6bfa8a2fc 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -794,7 +794,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -817,6 +817,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index d8fffd0da48da..f8916d71f86aa 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -797,7 +797,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -820,6 +820,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 2a120b2f68c41..8a72fa6692869 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -797,7 +797,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -820,6 +820,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 8945b61f186b3..796c0d3c8a4ff 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -627,7 +627,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -650,6 +650,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 1a5c75fb0c038..fa1d8def8936c 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -270,7 +270,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -293,6 +293,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 53fbabc6fce39..49c41411cb5d2 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -653,7 +653,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -676,6 +676,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index a970618643f5c..06a2c9addb7fb 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -655,7 +655,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -678,6 +678,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index e55c47e1ee4d6..feea7ff69c166 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -882,7 +882,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -905,6 +905,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 55554e439e71e..8e92fac863c6b 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -497,7 +497,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -520,6 +520,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 6bf97c5164ada..fb08cfe7bd3f8 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -900,7 +900,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -923,6 +923,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 998d4193c353b..37af75454daa3 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -933,7 +933,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -956,6 +956,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 2ca06edfa9a2c..c09e6b259fa42 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -343,7 +343,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.iscanonicalbf16
-  libc.src.math.isignalingbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
@@ -366,6 +366,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
   libc.src.math.ufromfpbf16
   libc.src.math.ufromfpxbf16
 )

>From 4396ea91f1af80bf74bd765a3c02b95ca71a89bc Mon Sep 17 00:00:00 2001
From: Krishna Pandey <kpandey81930 at gmail.com>
Date: Wed, 27 Aug 2025 12:44:02 +0530
Subject: [PATCH 4/4] docs: add totalorder{,mag}bf16 math functions

Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
---
 libc/docs/headers/math/index.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst
index 818386aa18f02..89624460c3af5 100644
--- a/libc/docs/headers/math/index.rst
+++ b/libc/docs/headers/math/index.rst
@@ -241,9 +241,9 @@ Basic Operations
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | setpayloadsig    | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | F.10.13.3              | N/A                        |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| totalorder       | |check|          | |check|         | |check|                | |check|              | |check|                |                        | F.10.12.1              | N/A                        |
+| totalorder       | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | F.10.12.1              | N/A                        |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| totalordermag    | |check|          | |check|         | |check|                | |check|              | |check|                |                        | F.10.12.2              | N/A                        |
+| totalordermag    | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | F.10.12.2              | N/A                        |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | trunc            | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.9.9               | F.10.6.9                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+



More information about the llvm-branch-commits mailing list