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

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Aug 27 00:34:24 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: Krishna Pandey (krishna2803)

<details>
<summary>Changes</summary>

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

---

Patch is 25.61 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/155568.diff


24 Files Affected:

- (modified) libc/config/baremetal/aarch64/entrypoints.txt (+3-1) 
- (modified) libc/config/baremetal/arm/entrypoints.txt (+3-1) 
- (modified) libc/config/baremetal/riscv/entrypoints.txt (+3-1) 
- (modified) libc/config/darwin/aarch64/entrypoints.txt (+3-1) 
- (modified) libc/config/darwin/x86_64/entrypoints.txt (+3-1) 
- (modified) libc/config/gpu/amdgpu/entrypoints.txt (+3-1) 
- (modified) libc/config/gpu/nvptx/entrypoints.txt (+3-1) 
- (modified) libc/config/linux/aarch64/entrypoints.txt (+3-1) 
- (modified) libc/config/linux/arm/entrypoints.txt (+3-1) 
- (modified) libc/config/linux/riscv/entrypoints.txt (+3-1) 
- (modified) libc/config/linux/x86_64/entrypoints.txt (+3-1) 
- (modified) libc/config/windows/entrypoints.txt (+3-1) 
- (modified) libc/docs/headers/math/index.rst (+2-2) 
- (modified) libc/src/math/CMakeLists.txt (+2) 
- (modified) libc/src/math/generic/CMakeLists.txt (+29) 
- (added) libc/src/math/generic/totalorderbf16.cpp (+22) 
- (added) libc/src/math/generic/totalordermagbf16.cpp (+22) 
- (added) libc/src/math/totalorderbf16.h (+21) 
- (added) libc/src/math/totalordermagbf16.h (+21) 
- (modified) libc/test/src/math/smoke/CMakeLists.txt (+26) 
- (modified) libc/test/src/math/smoke/TotalOrderMagTest.h (+33-8) 
- (modified) libc/test/src/math/smoke/TotalOrderTest.h (+33-8) 
- (added) libc/test/src/math/smoke/totalorderbf16_test.cpp (+14) 
- (added) libc/test/src/math/smoke/totalordermagbf16_test.cpp (+14) 


``````````diff
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
 )
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                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
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
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, sna...
[truncated]

``````````

</details>


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


More information about the llvm-branch-commits mailing list