From 604ff7861369319d6c4be082d8eb743646fe1e51 Mon Sep 17 00:00:00 2001 From: ThanSin02426 Date: Sun, 15 Mar 2026 11:03:20 +0530 Subject: [PATCH 1/2] [libc][math] Refactor bf16divf128 to Header Only --- libc/shared/math.h | 1 + libc/shared/math/bf16divf128.h | 23 +++++++++++++++++ libc/src/__support/math/CMakeLists.txt | 10 ++++++++ libc/src/__support/math/bf16divf128.h | 25 +++++++++++++++++++ libc/src/math/generic/CMakeLists.txt | 6 ++--- libc/src/math/generic/bf16divf128.cpp | 5 ++-- libc/test/shared/CMakeLists.txt | 1 + libc/test/shared/shared_math_test.cpp | 4 +++ .../llvm-project-overlay/libc/BUILD.bazel | 17 +++++++++++++ 9 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 libc/shared/math/bf16divf128.h create mode 100644 libc/src/__support/math/bf16divf128.h diff --git a/libc/shared/math.h b/libc/shared/math.h index 61c3ddffd74e5..a8e2dcbd23af4 100644 --- a/libc/shared/math.h +++ b/libc/shared/math.h @@ -40,6 +40,7 @@ #include "math/bf16addl.h" #include "math/bf16div.h" #include "math/bf16divf.h" +#include "math/bf16divf128.h" #include "math/bf16divl.h" #include "math/bf16fmaf.h" #include "math/bf16fmaf128.h" diff --git a/libc/shared/math/bf16divf128.h b/libc/shared/math/bf16divf128.h new file mode 100644 index 0000000000000..db5796255ba48 --- /dev/null +++ b/libc/shared/math/bf16divf128.h @@ -0,0 +1,23 @@ +//===-- Shared bf16divf128 function -------------------------------*- 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_SHARED_MATH_BF16DIVF128_H +#define LLVM_LIBC_SHARED_MATH_BF16DIVF128_H + +#include "shared/libc_common.h" +#include "src/__support/math/bf16divf128.h" + +namespace LIBC_NAMESPACE_DECL { +namespace shared { + +using math::bf16divf128; + +} // namespace shared +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SHARED_MATH_BF16DIVF128_H diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index 8bb935d863a9b..89dcc02e81648 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -452,6 +452,16 @@ add_header_library( libc.src.__support.macros.config ) +add_header_library( + bf16divf128 + HDRS + bf16divf128.h + DEPENDS + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.generic.div + libc.src.__support.macros.config +) + add_header_library( bf16fmaf HDRS diff --git a/libc/src/__support/math/bf16divf128.h b/libc/src/__support/math/bf16divf128.h new file mode 100644 index 0000000000000..6022043668907 --- /dev/null +++ b/libc/src/__support/math/bf16divf128.h @@ -0,0 +1,25 @@ +//===-- Implementation header for bf16divf128 -------------------*- 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___SUPPORT_MATH_BF16DIVF128_H +#define LLVM_LIBC_SRC___SUPPORT_MATH_BF16DIVF128_H + +#include "src/__support/FPUtil/bfloat16.h" +#include "src/__support/FPUtil/generic/div.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { +namespace math { + +LIBC_INLINE constexpr bfloat16 bf16divf128(float128 x, float128 y) { + return fputil::generic::div(x, y); +} + +} // namespace math +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC___SUPPORT_MATH_BF16DIVF128_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index 07c48c9a04c98..9689233bc76b5 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -5140,12 +5140,12 @@ add_entrypoint_object( bf16divf128.cpp HDRS ../bf16divf128.h + COMPILE_OPTIONS + -O3 DEPENDS libc.src.__support.common - libc.src.__support.FPUtil.bfloat16 - libc.src.__support.FPUtil.generic.div libc.src.__support.macros.config - libc.src.__support.macros.properties.types + libc.src.__support.math.bf16divf128 ) add_entrypoint_object( diff --git a/libc/src/math/generic/bf16divf128.cpp b/libc/src/math/generic/bf16divf128.cpp index fbe9775ce4046..32d02e2d31b0e 100644 --- a/libc/src/math/generic/bf16divf128.cpp +++ b/libc/src/math/generic/bf16divf128.cpp @@ -7,15 +7,14 @@ //===----------------------------------------------------------------------===// #include "src/math/bf16divf128.h" -#include "src/__support/FPUtil/bfloat16.h" -#include "src/__support/FPUtil/generic/div.h" #include "src/__support/common.h" #include "src/__support/macros/config.h" +#include "src/__support/math/bf16divf128.h" namespace LIBC_NAMESPACE_DECL { LLVM_LIBC_FUNCTION(bfloat16, bf16divf128, (float128 x, float128 y)) { - return fputil::generic::div(x, y); + return math::bf16divf128(x, y); } } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt index 2e351d8051bed..c4acfad4105f2 100644 --- a/libc/test/shared/CMakeLists.txt +++ b/libc/test/shared/CMakeLists.txt @@ -37,6 +37,7 @@ add_fp_unittest( libc.src.__support.math.bf16addf128 libc.src.__support.math.bf16div libc.src.__support.math.bf16divf + libc.src.__support.math.bf16divf128 libc.src.__support.math.bf16divl libc.src.__support.math.bf16fmaf libc.src.__support.math.bf16fmaf128 diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 4eb950f030a1a..604d6507bb8f8 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -415,6 +415,10 @@ TEST(LlvmLibcSharedMathTest, AllBFloat16) { EXPECT_FP_EQ(bfloat16(2.0f), LIBC_NAMESPACE::shared::bf16divf(4.0f, 2.0f)); EXPECT_FP_EQ(bfloat16(2.0), LIBC_NAMESPACE::shared::bf16divl(6.0L, 3.0L)); EXPECT_FP_EQ(bfloat16(2.0), LIBC_NAMESPACE::shared::bf16div(4.0, 2.0)); +#ifdef LIBC_TYPES_HAS_FLOAT128 + EXPECT_FP_EQ(bfloat16(2.0), LIBC_NAMESPACE::shared::bf16divf128( + float128(4.0), float128(2.0))); +#endif EXPECT_FP_EQ(bfloat16(10.0), LIBC_NAMESPACE::shared::bf16fmal(2.0L, 3.0L, 4.0L)); diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 316fda92c04a6..9796cdcf84afd 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -3178,6 +3178,16 @@ libc_support_library( ], ) +libc_support_library( + name = "__support_math_bf16divf128", + hdrs = ["src/__support/math/bf16divf128.h"], + deps = [ + ":__support_fputil_bfloat16", + ":__support_fputil_generic_div", + ":__support_macros_config", + ], +) + libc_support_library( name = "__support_math_bf16fmaf", hdrs = ["src/__support/math/bf16fmaf.h"], @@ -6300,6 +6310,13 @@ libc_math_function( ], ) +libc_math_function( + name = "bf16divf128", + additional_deps = [ + ":__support_math_bf16divf128", + ], +) + libc_math_function( name = "canonicalizef", additional_deps = [ From af656c5b73bf6f27268ede2433c96df61f9f22b5 Mon Sep 17 00:00:00 2001 From: ThanSin02426 Date: Sun, 15 Mar 2026 11:16:05 +0530 Subject: [PATCH 2/2] some formatting errors --- libc/shared/math/bf16divf128.h | 5 ++++- libc/src/__support/math/CMakeLists.txt | 2 ++ libc/src/__support/math/bf16divf128.h | 2 ++ utils/bazel/llvm-project-overlay/libc/BUILD.bazel | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libc/shared/math/bf16divf128.h b/libc/shared/math/bf16divf128.h index db5796255ba48..1f92bbb51414f 100644 --- a/libc/shared/math/bf16divf128.h +++ b/libc/shared/math/bf16divf128.h @@ -1,4 +1,5 @@ -//===-- Shared bf16divf128 function -------------------------------*- C++ -*-===// +//===-- Shared bf16divf128 function -------------------------------*- C++ +//-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -15,7 +16,9 @@ namespace LIBC_NAMESPACE_DECL { namespace shared { +#ifdef LIBC_TYPES_HAS_FLOAT128 using math::bf16divf128; +#endif // LIBC_TYPES_HAS_FLOAT128 } // namespace shared } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index 89dcc02e81648..4098775c0a3ef 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -457,9 +457,11 @@ add_header_library( HDRS bf16divf128.h DEPENDS + libc.include.llvm-libc-types.float128 libc.src.__support.FPUtil.bfloat16 libc.src.__support.FPUtil.generic.div libc.src.__support.macros.config + libc.src.__support.macros.properties.types ) add_header_library( diff --git a/libc/src/__support/math/bf16divf128.h b/libc/src/__support/math/bf16divf128.h index 6022043668907..32c348573c96a 100644 --- a/libc/src/__support/math/bf16divf128.h +++ b/libc/src/__support/math/bf16divf128.h @@ -15,9 +15,11 @@ namespace LIBC_NAMESPACE_DECL { namespace math { +#ifdef LIBC_TYPES_HAS_FLOAT128 LIBC_INLINE constexpr bfloat16 bf16divf128(float128 x, float128 y) { return fputil::generic::div(x, y); } +#endif // LIBC_TYPES_HAS_FLOAT128 } // namespace math } // namespace LIBC_NAMESPACE_DECL diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 9796cdcf84afd..864dc76f8f6ed 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -3182,9 +3182,10 @@ libc_support_library( name = "__support_math_bf16divf128", hdrs = ["src/__support/math/bf16divf128.h"], deps = [ + ":__support_fputil_basic_operations", ":__support_fputil_bfloat16", - ":__support_fputil_generic_div", ":__support_macros_config", + ":llvm_libc_types_float128", ], )