Skip to content

Conversation

krishna2803
Copy link
Contributor

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

  • canonicalizebf16
  • iscanonicalbf16
  • fdimbf16
  • copysignbf16
  • issignalingbf16

…f16 math functions

Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
…signaling}bf16 math functions

Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
…th functions

Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
@llvmbot
Copy link
Member

llvmbot commented Aug 27, 2025

@llvm/pr-subscribers-libc
@llvm/pr-subscribers-backend-amdgpu

@llvm/pr-subscribers-backend-risc-v

Author: Krishna Pandey (krishna2803)

Changes

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

  • canonicalizebf16
  • iscanonicalbf16
  • fdimbf16
  • copysignbf16
  • issignalingbf16

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

32 Files Affected:

  • (modified) libc/config/baremetal/aarch64/entrypoints.txt (+5)
  • (modified) libc/config/baremetal/arm/entrypoints.txt (+5)
  • (modified) libc/config/baremetal/riscv/entrypoints.txt (+5)
  • (modified) libc/config/darwin/aarch64/entrypoints.txt (+5)
  • (modified) libc/config/darwin/x86_64/entrypoints.txt (+5)
  • (modified) libc/config/gpu/amdgpu/entrypoints.txt (+5)
  • (modified) libc/config/gpu/nvptx/entrypoints.txt (+5)
  • (modified) libc/config/linux/aarch64/entrypoints.txt (+5)
  • (modified) libc/config/linux/arm/entrypoints.txt (+5)
  • (modified) libc/config/linux/riscv/entrypoints.txt (+5)
  • (modified) libc/config/linux/x86_64/entrypoints.txt (+5)
  • (modified) libc/config/windows/entrypoints.txt (+5)
  • (modified) libc/docs/headers/math/index.rst (+5-5)
  • (modified) libc/src/__support/FPUtil/BasicOperations.h (+1-1)
  • (modified) libc/src/math/CMakeLists.txt (+5)
  • (added) libc/src/math/canonicalizebf16.h (+21)
  • (added) libc/src/math/copysignbf16.h (+21)
  • (added) libc/src/math/fdimbf16.h (+21)
  • (modified) libc/src/math/generic/CMakeLists.txt (+72)
  • (added) libc/src/math/generic/canonicalizebf16.cpp (+21)
  • (added) libc/src/math/generic/copysignbf16.cpp (+21)
  • (added) libc/src/math/generic/fdimbf16.cpp (+21)
  • (added) libc/src/math/generic/iscanonicalbf16.cpp (+22)
  • (added) libc/src/math/generic/issignalingbf16.cpp (+21)
  • (added) libc/src/math/iscanonicalbf16.h (+21)
  • (added) libc/src/math/issignalingbf16.h (+21)
  • (modified) libc/test/src/math/smoke/CMakeLists.txt (+72)
  • (added) libc/test/src/math/smoke/canonicalizebf16_test.cpp (+14)
  • (added) libc/test/src/math/smoke/copysignbf16_test.cpp (+14)
  • (added) libc/test/src/math/smoke/fdimbf16_test.cpp (+14)
  • (added) libc/test/src/math/smoke/iscanonicalbf16_test.cpp (+14)
  • (added) libc/test/src/math/smoke/issignalingbf16_test.cpp (+14)
diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index c2e4c337f199a..27f8cfb4df18f 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -772,8 +772,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -790,6 +793,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index c4f3a87659b23..7de180d65832f 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -775,8 +775,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -793,6 +796,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 380ca57ea8aa9..2ba13a1123f7d 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -775,8 +775,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -793,6 +796,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 1f4318fc88389..804f9235e0d60 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -605,8 +605,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -623,6 +626,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 0cba22016c960..f4830edc0a292 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -248,8 +248,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -266,6 +269,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index e08b028865bfc..1843b727de478 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -631,8 +631,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -649,6 +652,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 88c8fc91ebb77..49d322ae32a92 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -633,8 +633,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -651,6 +654,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 20924e9047c69..8d6d4ca5e10d9 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -860,8 +860,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -878,6 +881,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index f2e8ddfe8e91a..2752bd0da56d0 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -475,8 +475,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -493,6 +496,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 0ad36a667232a..e3759dba921d6 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -878,8 +878,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -896,6 +899,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index c060e900472eb..a82faa4d6a141 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -911,8 +911,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -929,6 +932,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 9e45b800b10a3..20f7a187591d4 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -321,8 +321,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.bf16sub
   libc.src.math.bf16subf
   libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
   libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
   libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
   libc.src.math.floorbf16
   libc.src.math.fmaxbf16
   libc.src.math.fmaximumbf16
@@ -339,6 +342,8 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
   libc.src.math.llrintbf16
diff --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst
index b329bf031312d..818386aa18f02 100644
--- a/libc/docs/headers/math/index.rst
+++ b/libc/docs/headers/math/index.rst
@@ -109,9 +109,9 @@ Basic Operations
 +==================+==================+=================+========================+======================+========================+========================+========================+============================+
 | ceil             | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.9.1               | F.10.6.1                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| canonicalize     | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.11.7              | F.10.8.7                   |
+| canonicalize     | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.11.7              | F.10.8.7                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| copysign         | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.11.1              | F.10.8.1                   |
+| copysign         | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.11.1              | F.10.8.1                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | dadd             | N/A              | N/A             | |check|                | N/A                  | |check|\*              | N/A                    | 7.12.14.1              | F.10.11                    |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
@@ -147,7 +147,7 @@ Basic Operations
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | fadd             | N/A              | |check|         | |check|                | N/A                  | |check|                | N/A                    | 7.12.14.1              | F.10.11                    |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| fdim             | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.12.1              | F.10.9.1                   |
+| fdim             | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.12.1              | F.10.9.1                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | fdiv             | N/A              | |check|         | |check|                | N/A                  | |check|\*              | N/A                    | 7.12.14.4              | F.10.11                    |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
@@ -191,9 +191,9 @@ Basic Operations
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | ilogb            | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.6.8               | F.10.3.8                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| iscanonical      | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.3.2               | N/A                        |
+| iscanonical      | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.3.2               | N/A                        |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| issignaling      | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.3.8               | N/A                        |
+| issignaling      | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.3.8               | N/A                        |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | ldexp            | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.6.9               | F.10.3.9                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
diff --git a/libc/src/__support/FPUtil/BasicOperations.h b/libc/src/__support/FPUtil/BasicOperations.h
index 2357b053b60b8..ca7be6676630a 100644
--- a/libc/src/__support/FPUtil/BasicOperations.h
+++ b/libc/src/__support/FPUtil/BasicOperations.h
@@ -244,7 +244,7 @@ LIBC_INLINE T fdim(T x, T y) {
     return y;
   }
 
-  return (x > y ? x - y : 0);
+  return (x > y ? x - y : T(0));
 }
 
 // Avoid reusing `issignaling` macro.
diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index 95e5ae781490f..e6a2f868e46b5 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -78,12 +78,14 @@ add_math_entrypoint_object(canonicalizef)
 add_math_entrypoint_object(canonicalizel)
 add_math_entrypoint_object(canonicalizef16)
 add_math_entrypoint_object(canonicalizef128)
+add_math_entrypoint_object(canonicalizebf16)
 
 add_math_entrypoint_object(iscanonical)
 add_math_entrypoint_object(iscanonicalf)
 add_math_entrypoint_object(iscanonicall)
 add_math_entrypoint_object(iscanonicalf16)
 add_math_entrypoint_object(iscanonicalf128)
+add_math_entrypoint_object(iscanonicalbf16)
 
 add_math_entrypoint_object(cbrt)
 add_math_entrypoint_object(cbrtf)
@@ -100,6 +102,7 @@ add_math_entrypoint_object(copysignf)
 add_math_entrypoint_object(copysignl)
 add_math_entrypoint_object(copysignf16)
 add_math_entrypoint_object(copysignf128)
+add_math_entrypoint_object(copysignbf16)
 
 add_math_entrypoint_object(cos)
 add_math_entrypoint_object(cosf)
@@ -203,6 +206,7 @@ add_math_entrypoint_object(fdimf)
 add_math_entrypoint_object(fdiml)
 add_math_entrypoint_object(fdimf16)
 add_math_entrypoint_object(fdimf128)
+add_math_entrypoint_object(fdimbf16)
 
 add_math_entrypoint_object(fdiv)
 add_math_entrypoint_object(fdivl)
@@ -355,6 +359,7 @@ add_math_entrypoint_object(issignalingf)
 add_math_entrypoint_object(issignalingl)
 add_math_entrypoint_object(issignalingf16)
 add_math_entrypoint_object(issignalingf128)
+add_math_entrypoint_object(issignalingbf16)
 
 add_math_entrypoint_object(llogb)
 add_math_entrypoint_object(llogbf)
diff --git a/libc/src/math/canonicalizebf16.h b/libc/src/math/canonicalizebf16.h
new file mode 100644
index 0000000000000..858fa32969868
--- /dev/null
+++ b/libc/src/math/canonicalizebf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for canonicalizebf16 --------------*- 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_CANONICALIZEBF16_H
+#define LLVM_LIBC_SRC_MATH_CANONICALIZEBF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+int canonicalizebf16(bfloat16 *cx, const bfloat16 *x);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_CANONICALIZEBF16_H
diff --git a/libc/src/math/copysignbf16.h b/libc/src/math/copysignbf16.h
new file mode 100644
index 0000000000000..6369616d6f569
--- /dev/null
+++ b/libc/src/math/copysignbf16.h
@@ -0,0 +1,21 @@
+//===-- Implementatio...
[truncated]

@krishna2803 krishna2803 merged commit 3d2b282 into main Aug 27, 2025
24 checks passed
@krishna2803 krishna2803 deleted the users/krishna2803/canonicalizebf16 branch August 27, 2025 17:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants