https://github.com/krishna2803 updated https://github.com/llvm/llvm-project/pull/154427
>From 832bbc6f4743015ef1af5e9d4a9aea4b94e73374 Mon Sep 17 00:00:00 2001 From: Krishna Pandey <[email protected]> Date: Tue, 19 Aug 2025 22:13:40 +0530 Subject: [PATCH 1/6] feat: implement {frexp,ilogb,ldexp,llogb,logb}bf16 math functions Signed-off-by: Krishna Pandey <[email protected]> --- libc/src/math/CMakeLists.txt | 5 ++ libc/src/math/frexpbf16.h | 21 +++++++++ libc/src/math/generic/CMakeLists.txt | 70 ++++++++++++++++++++++++++++ libc/src/math/generic/frexpbf16.cpp | 21 +++++++++ libc/src/math/generic/ilogbbf16.cpp | 21 +++++++++ libc/src/math/generic/ldexpbf16.cpp | 21 +++++++++ libc/src/math/generic/llogbbf16.cpp | 21 +++++++++ libc/src/math/generic/logbbf16.cpp | 19 ++++++++ libc/src/math/ilogbbf16.h | 21 +++++++++ libc/src/math/ldexpbf16.h | 21 +++++++++ libc/src/math/llogbbf16.h | 21 +++++++++ libc/src/math/logbbf16.h | 21 +++++++++ 12 files changed, 283 insertions(+) create mode 100644 libc/src/math/frexpbf16.h create mode 100644 libc/src/math/generic/frexpbf16.cpp create mode 100644 libc/src/math/generic/ilogbbf16.cpp create mode 100644 libc/src/math/generic/ldexpbf16.cpp create mode 100644 libc/src/math/generic/llogbbf16.cpp create mode 100644 libc/src/math/generic/logbbf16.cpp create mode 100644 libc/src/math/ilogbbf16.h create mode 100644 libc/src/math/ldexpbf16.h create mode 100644 libc/src/math/llogbbf16.h create mode 100644 libc/src/math/logbbf16.h diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt index 87a341bb6267b..b1d76c6008cf5 100644 --- a/libc/src/math/CMakeLists.txt +++ b/libc/src/math/CMakeLists.txt @@ -306,6 +306,7 @@ add_math_entrypoint_object(frexpf) add_math_entrypoint_object(frexpl) add_math_entrypoint_object(frexpf16) add_math_entrypoint_object(frexpf128) +add_math_entrypoint_object(frexpbf16) add_math_entrypoint_object(fromfp) add_math_entrypoint_object(fromfpf) @@ -341,6 +342,7 @@ add_math_entrypoint_object(ilogbf) add_math_entrypoint_object(ilogbl) add_math_entrypoint_object(ilogbf16) add_math_entrypoint_object(ilogbf128) +add_math_entrypoint_object(ilogbbf16) add_math_entrypoint_object(isnan) add_math_entrypoint_object(isnanf) @@ -357,12 +359,14 @@ add_math_entrypoint_object(llogbf) add_math_entrypoint_object(llogbl) add_math_entrypoint_object(llogbf16) add_math_entrypoint_object(llogbf128) +add_math_entrypoint_object(llogbbf16) add_math_entrypoint_object(ldexp) add_math_entrypoint_object(ldexpf) add_math_entrypoint_object(ldexpl) add_math_entrypoint_object(ldexpf16) add_math_entrypoint_object(ldexpf128) +add_math_entrypoint_object(ldexpbf16) add_math_entrypoint_object(log10) add_math_entrypoint_object(log10f) @@ -384,6 +388,7 @@ add_math_entrypoint_object(logbf) add_math_entrypoint_object(logbl) add_math_entrypoint_object(logbf16) add_math_entrypoint_object(logbf128) +add_math_entrypoint_object(logbbf16) add_math_entrypoint_object(llrint) add_math_entrypoint_object(llrintf) diff --git a/libc/src/math/frexpbf16.h b/libc/src/math/frexpbf16.h new file mode 100644 index 0000000000000..1e9bba16ea6c4 --- /dev/null +++ b/libc/src/math/frexpbf16.h @@ -0,0 +1,21 @@ +//===-- Implementation header for frexpbf16 ---------------------*- 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_FREXPFB16_H +#define LLVM_LIBC_SRC_MATH_FREXPFB16_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +bfloat16 frexpbf16(bfloat16 x, int *exp); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_FREXPFB16_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index e34e3f04ed8bd..3dbc54a819722 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -1732,6 +1732,20 @@ add_entrypoint_object( libc.src.__support.math.frexpf128 ) +add_entrypoint_object( + frexpbf16 + SRCS + frexpbf16.cpp + HDRS + ../frexpbf16.h + DEPENDS + libc.src.__support.common + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.manipulation_functions + libc.src.__support.macros.config + libc.src.__support.macros.properties.types +) + add_entrypoint_object( ilogb SRCS @@ -1784,6 +1798,20 @@ add_entrypoint_object( libc.src.__support.FPUtil.manipulation_functions ) +add_entrypoint_object( + ilogbbf16 + SRCS + ilogbbf16.cpp + HDRS + ../ilogbbf16.h + DEPENDS + libc.src.__support.common + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.manipulation_functions + libc.src.__support.macros.config + libc.src.__support.macros.properties.types +) + add_entrypoint_object( llogb SRCS @@ -1836,6 +1864,20 @@ add_entrypoint_object( libc.src.__support.FPUtil.manipulation_functions ) +add_entrypoint_object( + llogbbf16 + SRCS + llogbbf16.cpp + HDRS + ../llogbbf16.h + DEPENDS + libc.src.__support.common + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.manipulation_functions + libc.src.__support.macros.config + libc.src.__support.macros.properties.types +) + add_entrypoint_object( ldexp SRCS @@ -1886,6 +1928,20 @@ add_entrypoint_object( libc.src.__support.math.ldexpf128 ) +add_entrypoint_object( + ldexpbf16 + SRCS + ldexpbf16.cpp + HDRS + ../ldexpbf16.h + DEPENDS + libc.src.__support.common + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.manipulation_functions + libc.src.__support.macros.config + libc.src.__support.macros.properties.types +) + add_object_library( common_constants HDRS @@ -2158,6 +2214,20 @@ add_entrypoint_object( libc.src.__support.FPUtil.manipulation_functions ) +add_entrypoint_object( + logbbf16 + SRCS + logbbf16.cpp + HDRS + ../logbbf16.h + DEPENDS + libc.src.__support.common + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.manipulation_functions + libc.src.__support.macros.config + libc.src.__support.macros.properties.types +) + add_entrypoint_object( modf SRCS diff --git a/libc/src/math/generic/frexpbf16.cpp b/libc/src/math/generic/frexpbf16.cpp new file mode 100644 index 0000000000000..004f64f282f7d --- /dev/null +++ b/libc/src/math/generic/frexpbf16.cpp @@ -0,0 +1,21 @@ +//===-- Implementation of frexpbf16 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/frexpbf16.h" +#include "src/__support/FPUtil/ManipulationFunctions.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(bfloat16, frexpbf16, (bfloat16 x, int *exp)) { + return fputil::frexp(x, *exp); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/ilogbbf16.cpp b/libc/src/math/generic/ilogbbf16.cpp new file mode 100644 index 0000000000000..6811139c6dcfd --- /dev/null +++ b/libc/src/math/generic/ilogbbf16.cpp @@ -0,0 +1,21 @@ +//===-- Implementation of ilogbbf16 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/ilogbbf16.h" +#include "src/__support/FPUtil/ManipulationFunctions.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, ilogbbf16, (bfloat16 x)) { + return fputil::intlogb<int>(x); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/ldexpbf16.cpp b/libc/src/math/generic/ldexpbf16.cpp new file mode 100644 index 0000000000000..42a5039e81bc0 --- /dev/null +++ b/libc/src/math/generic/ldexpbf16.cpp @@ -0,0 +1,21 @@ +//===-- Implementation of ldexpbf16 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/ldexpbf16.h" +#include "src/__support/FPUtil/ManipulationFunctions.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(bfloat16, ldexpbf16, (bfloat16 x, int exp)) { + return fputil::ldexp(x, exp); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/llogbbf16.cpp b/libc/src/math/generic/llogbbf16.cpp new file mode 100644 index 0000000000000..74c27620053da --- /dev/null +++ b/libc/src/math/generic/llogbbf16.cpp @@ -0,0 +1,21 @@ +//===-- Implementation of llogbbf16 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/llogbbf16.h" +#include "src/__support/FPUtil/ManipulationFunctions.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(long, llogbbf16, (bfloat16 x)) { + return fputil::intlogb<long>(x); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/logbbf16.cpp b/libc/src/math/generic/logbbf16.cpp new file mode 100644 index 0000000000000..5a43ddfafde75 --- /dev/null +++ b/libc/src/math/generic/logbbf16.cpp @@ -0,0 +1,19 @@ +//===-- Implementation of logbbf16 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/logbbf16.h" +#include "src/__support/FPUtil/ManipulationFunctions.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(bfloat16, logbbf16, (bfloat16 x)) { return fputil::logb(x); } + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/ilogbbf16.h b/libc/src/math/ilogbbf16.h new file mode 100644 index 0000000000000..da2384b6d62f6 --- /dev/null +++ b/libc/src/math/ilogbbf16.h @@ -0,0 +1,21 @@ +//===-- Implementation header for ilogbbf16 ---------------------*- 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_ILOGBBF16_H +#define LLVM_LIBC_SRC_MATH_ILOGBBF16_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +int ilogbbf16(bfloat16 x); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_ILOGBBF16_H diff --git a/libc/src/math/ldexpbf16.h b/libc/src/math/ldexpbf16.h new file mode 100644 index 0000000000000..7436d8dc5c149 --- /dev/null +++ b/libc/src/math/ldexpbf16.h @@ -0,0 +1,21 @@ +//===-- Implementation header for ldexpbf16 ---------------------*- 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_LDEXPBF16_H +#define LLVM_LIBC_SRC_MATH_LDEXPBF16_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +bfloat16 ldexpbf16(bfloat16 x, int exp); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_LDEXPBF16_H diff --git a/libc/src/math/llogbbf16.h b/libc/src/math/llogbbf16.h new file mode 100644 index 0000000000000..13f0570585d82 --- /dev/null +++ b/libc/src/math/llogbbf16.h @@ -0,0 +1,21 @@ +//===-- Implementation header for llogbbf16 ---------------------*- 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_LLOGBBF16_H +#define LLVM_LIBC_SRC_MATH_LLOGBBF16_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +long llogbbf16(bfloat16 x); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_LLOGBBF16_H diff --git a/libc/src/math/logbbf16.h b/libc/src/math/logbbf16.h new file mode 100644 index 0000000000000..2c0d77e9df8af --- /dev/null +++ b/libc/src/math/logbbf16.h @@ -0,0 +1,21 @@ +//===-- Implementation header for logbbf16 ----------------------*- 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_LOGBBF16_H +#define LLVM_LIBC_SRC_MATH_LOGBBF16_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +bfloat16 logbbf16(bfloat16 x); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_LOGBBF16_H >From a08faab58f32221951ae0af6091a2ac3ddc672d2 Mon Sep 17 00:00:00 2001 From: Krishna Pandey <[email protected]> Date: Tue, 19 Aug 2025 22:14:10 +0530 Subject: [PATCH 2/6] chore: add smoke tests for {frexp,ilogb,ldexp,llogb,logb}bf16 math functions Signed-off-by: Krishna Pandey <[email protected]> --- libc/test/src/math/smoke/CMakeLists.txt | 76 +++++++++++++++++++++ libc/test/src/math/smoke/frexpbf16_test.cpp | 14 ++++ libc/test/src/math/smoke/ilogbbf16_test.cpp | 14 ++++ libc/test/src/math/smoke/ldexpbf16_test.cpp | 14 ++++ libc/test/src/math/smoke/llogbbf16_test.cpp | 14 ++++ libc/test/src/math/smoke/logbbf16_test.cpp | 14 ++++ 6 files changed, 146 insertions(+) create mode 100644 libc/test/src/math/smoke/frexpbf16_test.cpp create mode 100644 libc/test/src/math/smoke/ilogbbf16_test.cpp create mode 100644 libc/test/src/math/smoke/ldexpbf16_test.cpp create mode 100644 libc/test/src/math/smoke/llogbbf16_test.cpp create mode 100644 libc/test/src/math/smoke/logbbf16_test.cpp diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index c26bd84e2ca9d..b71d47568309b 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -1536,6 +1536,19 @@ add_fp_unittest( libc.src.math.frexpf128 ) +add_fp_unittest( + frexpbf16_test + SUITE + libc-math-smoke-tests + SRCS + frexpbf16_test.cpp + HDRS + FrexpTest.h + DEPENDS + libc.src.math.frexpbf16 + libc.src.__support.FPUtil.bfloat16 +) + add_fp_unittest( fromfp_test SUITE @@ -1904,6 +1917,22 @@ add_fp_unittest( libc.src.__support.FPUtil.manipulation_functions ) +add_fp_unittest( + ilogbbf16_test + SUITE + libc-math-smoke-tests + SRCS + ilogbbf16_test.cpp + HDRS + ILogbTest.h + DEPENDS + libc.src.math.ilogbbf16 + libc.src.__support.CPP.algorithm + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.fp_bits + libc.src.__support.FPUtil.manipulation_functions +) + add_fp_unittest( issignaling_test SUITE @@ -2039,6 +2068,22 @@ add_fp_unittest( libc.src.__support.FPUtil.manipulation_functions ) +add_fp_unittest( + llogbbf16_test + SUITE + libc-math-smoke-tests + SRCS + llogbbf16_test.cpp + HDRS + ILogbTest.h + DEPENDS + libc.src.math.llogbbf16 + libc.src.__support.CPP.algorithm + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.fp_bits + libc.src.__support.FPUtil.manipulation_functions +) + add_fp_unittest( ldexp_test SUITE @@ -2114,6 +2159,22 @@ add_fp_unittest( libc.src.__support.FPUtil.normal_float ) +add_fp_unittest( + ldexpbf16_test + SUITE + libc-math-smoke-tests + SRCS + ldexpbf16_test.cpp + HDRS + LdExpTest.h + DEPENDS + libc.src.math.ldexpbf16 + libc.src.__support.CPP.limits + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.fp_bits + libc.src.__support.FPUtil.normal_float +) + add_fp_unittest( logb_test SUITE @@ -2184,6 +2245,21 @@ add_fp_unittest( libc.src.__support.FPUtil.manipulation_functions ) +add_fp_unittest( + logbbf16_test + SUITE + libc-math-smoke-tests + SRCS + logbbf16_test.cpp + HDRS + LogbTest.h + DEPENDS + libc.src.math.logbbf16 + libc.src.__support.CPP.algorithm + libc.src.__support.FPUtil.bfloat16 + libc.src.__support.FPUtil.manipulation_functions +) + add_fp_unittest( modf_test SUITE diff --git a/libc/test/src/math/smoke/frexpbf16_test.cpp b/libc/test/src/math/smoke/frexpbf16_test.cpp new file mode 100644 index 0000000000000..3c80edbb433ba --- /dev/null +++ b/libc/test/src/math/smoke/frexpbf16_test.cpp @@ -0,0 +1,14 @@ +//===-- Unittests for frexpbf16 -------------------------------------------===// +// +// 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 "FrexpTest.h" + +#include "src/__support/FPUtil/bfloat16.h" +#include "src/math/frexpbf16.h" + +LIST_FREXP_TESTS(bfloat16, LIBC_NAMESPACE::frexpbf16); diff --git a/libc/test/src/math/smoke/ilogbbf16_test.cpp b/libc/test/src/math/smoke/ilogbbf16_test.cpp new file mode 100644 index 0000000000000..d9fa03a2e50cb --- /dev/null +++ b/libc/test/src/math/smoke/ilogbbf16_test.cpp @@ -0,0 +1,14 @@ +//===-- Unittests for ilogbbf16 -------------------------------------------===// +// +// 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 "ILogbTest.h" + +#include "src/__support/FPUtil/bfloat16.h" +#include "src/math/ilogbbf16.h" + +LIST_INTLOGB_TESTS(int, bfloat16, LIBC_NAMESPACE::ilogbbf16); diff --git a/libc/test/src/math/smoke/ldexpbf16_test.cpp b/libc/test/src/math/smoke/ldexpbf16_test.cpp new file mode 100644 index 0000000000000..2e57eb8460c9e --- /dev/null +++ b/libc/test/src/math/smoke/ldexpbf16_test.cpp @@ -0,0 +1,14 @@ +//===-- Unittests for ldexpbf16 -------------------------------------------===// +// +// 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 "LdExpTest.h" + +#include "src/__support/FPUtil/bfloat16.h" +#include "src/math/ldexpbf16.h" + +LIST_LDEXP_TESTS(bfloat16, LIBC_NAMESPACE::ldexpbf16); diff --git a/libc/test/src/math/smoke/llogbbf16_test.cpp b/libc/test/src/math/smoke/llogbbf16_test.cpp new file mode 100644 index 0000000000000..4454fbfb0644b --- /dev/null +++ b/libc/test/src/math/smoke/llogbbf16_test.cpp @@ -0,0 +1,14 @@ +//===-- Unittests for llogbbf16 -------------------------------------------===// +// +// 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 "ILogbTest.h" + +#include "src/__support/FPUtil/bfloat16.h" +#include "src/math/llogbbf16.h" + +LIST_INTLOGB_TESTS(long, bfloat16, LIBC_NAMESPACE::llogbbf16); diff --git a/libc/test/src/math/smoke/logbbf16_test.cpp b/libc/test/src/math/smoke/logbbf16_test.cpp new file mode 100644 index 0000000000000..4ceec3d6984dd --- /dev/null +++ b/libc/test/src/math/smoke/logbbf16_test.cpp @@ -0,0 +1,14 @@ +//===-- Unittests for logbbf16 --------------------------------------------===// +// +// 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 "LogbTest.h" + +#include "src/__support/FPUtil/bfloat16.h" +#include "src/math/logbbf16.h" + +LIST_LOGB_TESTS(bfloat16, LIBC_NAMESPACE::logbbf16) >From 5fb2a5c94516a3964308f8b2320d98c2b8e9796d Mon Sep 17 00:00:00 2001 From: Krishna Pandey <[email protected]> Date: Tue, 19 Aug 2025 22:16:15 +0530 Subject: [PATCH 3/6] chore: update entrypoints Signed-off-by: Krishna Pandey <[email protected]> --- libc/config/baremetal/aarch64/entrypoints.txt | 5 +++++ libc/config/baremetal/arm/entrypoints.txt | 5 +++++ libc/config/baremetal/riscv/entrypoints.txt | 5 +++++ libc/config/darwin/aarch64/entrypoints.txt | 5 +++++ libc/config/darwin/x86_64/entrypoints.txt | 5 +++++ libc/config/gpu/amdgpu/entrypoints.txt | 5 +++++ libc/config/gpu/nvptx/entrypoints.txt | 5 +++++ libc/config/linux/aarch64/entrypoints.txt | 5 +++++ libc/config/linux/arm/entrypoints.txt | 5 +++++ libc/config/linux/riscv/entrypoints.txt | 5 +++++ libc/config/linux/x86_64/entrypoints.txt | 5 +++++ libc/config/windows/entrypoints.txt | 5 +++++ 12 files changed, 60 insertions(+) diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt index c4ec03fc146e8..10d5b3a591d0d 100644 --- a/libc/config/baremetal/aarch64/entrypoints.txt +++ b/libc/config/baremetal/aarch64/entrypoints.txt @@ -785,9 +785,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt index d9e173a71e47a..785b84163701f 100644 --- a/libc/config/baremetal/arm/entrypoints.txt +++ b/libc/config/baremetal/arm/entrypoints.txt @@ -788,9 +788,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt index 9b0cf14037fae..2038f3e4952cf 100644 --- a/libc/config/baremetal/riscv/entrypoints.txt +++ b/libc/config/baremetal/riscv/entrypoints.txt @@ -788,9 +788,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt index 2a634852a2ed0..707e8b1d43658 100644 --- a/libc/config/darwin/aarch64/entrypoints.txt +++ b/libc/config/darwin/aarch64/entrypoints.txt @@ -618,9 +618,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt index 6a18d557f86fb..db3b305d376b0 100644 --- a/libc/config/darwin/x86_64/entrypoints.txt +++ b/libc/config/darwin/x86_64/entrypoints.txt @@ -261,9 +261,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt index 008f7c7bd642c..76bda91f3b229 100644 --- a/libc/config/gpu/amdgpu/entrypoints.txt +++ b/libc/config/gpu/amdgpu/entrypoints.txt @@ -644,9 +644,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt index ae434117eb8e2..cae9d593b056d 100644 --- a/libc/config/gpu/nvptx/entrypoints.txt +++ b/libc/config/gpu/nvptx/entrypoints.txt @@ -645,9 +645,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 88438247643f6..18853de2c13c1 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -872,9 +872,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt index 865392a918624..150e34a1fb195 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -488,9 +488,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index 207608c431a9b..937ec4253299a 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -891,9 +891,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 44f5f2d03db0a..23871c406d236 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -923,9 +923,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt index 32a6a578aae13..cc7c655280213 100644 --- a/libc/config/windows/entrypoints.txt +++ b/libc/config/windows/entrypoints.txt @@ -334,9 +334,14 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS libc.src.math.fminimum_magbf16 libc.src.math.fminimum_mag_numbf16 libc.src.math.fminimum_numbf16 + libc.src.math.frexpbf16 libc.src.math.fromfpbf16 libc.src.math.fromfpxbf16 libc.src.math.getpayloadbf16 + libc.src.math.ilogbbf16 + libc.src.math.ldexpbf16 + libc.src.math.llogbbf16 + libc.src.math.logbbf16 libc.src.math.nanbf16 libc.src.math.nextafterbf16 libc.src.math.nextdownbf16 >From 5f0ab92aca48dce84062940924d6327195e17f64 Mon Sep 17 00:00:00 2001 From: Krishna Pandey <[email protected]> Date: Wed, 20 Aug 2025 03:08:21 +0530 Subject: [PATCH 4/6] fix: infinite recursion and tests Signed-off-by: Krishna Pandey <[email protected]> --- libc/src/__support/FPUtil/bfloat16.h | 2 ++ libc/test/src/math/smoke/LdExpTest.h | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libc/src/__support/FPUtil/bfloat16.h b/libc/src/__support/FPUtil/bfloat16.h index 3fab2b80317de..89d06a06f2dcf 100644 --- a/libc/src/__support/FPUtil/bfloat16.h +++ b/libc/src/__support/FPUtil/bfloat16.h @@ -48,6 +48,8 @@ struct BFloat16 { xd(sign, 0, value); bits = xd.template as<bfloat16, /*ShouldSignalExceptions=*/true>().bits; + } else if constexpr (cpp::is_convertible_v<T, BFloat16>) { + bits = value.operator BFloat16().bits; } else { bits = fputil::cast<bfloat16>(static_cast<float>(value)).bits; } diff --git a/libc/test/src/math/smoke/LdExpTest.h b/libc/test/src/math/smoke/LdExpTest.h index 8de70ad161ad6..ac3affdcd680b 100644 --- a/libc/test/src/math/smoke/LdExpTest.h +++ b/libc/test/src/math/smoke/LdExpTest.h @@ -135,8 +135,8 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { // Normal which trigger mantissa overflow. T x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1, StorageType(2) * NormalFloat::ONE - StorageType(1)); - ASSERT_FP_EQ(func(x, -1), x / 2); - ASSERT_FP_EQ(func(-x, -1), -x / 2); + ASSERT_FP_EQ(func(x, -1), T(x / 2)); + ASSERT_FP_EQ(func(-x, -1), -T(x / 2)); // Start with a normal number high exponent but pass a very low number for // exp. The result should be a subnormal number. @@ -154,7 +154,8 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { // Start with a subnormal number but pass a very high number for exponent. // The result should not be infinity. - x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1, NormalFloat::ONE >> 10); + x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1, + NormalFloat::ONE >> FPBits::FRACTION_LEN); exp = FPBits::MAX_BIASED_EXPONENT + 5; ASSERT_FALSE(FPBits(func(x, exp)).is_inf()); // But if the exp is large enough to oversome than the normalization shift, >From 49dc65d6fea894b444191a844f5ed819a7d7dd73 Mon Sep 17 00:00:00 2001 From: Krishna Pandey <[email protected]> Date: Wed, 20 Aug 2025 03:10:07 +0530 Subject: [PATCH 5/6] docs: add {frexp,ilogb,ldexp,llogb,logb}bf16 math functions Signed-off-by: Krishna Pandey <[email protected]> --- libc/docs/headers/math/index.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst index 9efbce06920b5..5049ab65d00af 100644 --- a/libc/docs/headers/math/index.rst +++ b/libc/docs/headers/math/index.rst @@ -179,7 +179,7 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | fmul | N/A | |check| | |check| | N/A | |check|\* | N/A | 7.12.14.3 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ -| frexp | |check| | |check| | |check| | |check| | |check| | | 7.12.6.7 | F.10.3.7 | +| frexp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.7 | F.10.3.7 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | fromfp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ @@ -189,21 +189,21 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | getpayload | |check| | |check| | |check| | |check| | |check| | |check| | F.10.13.1 | N/A | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ -| ilogb | |check| | |check| | |check| | |check| | |check| | | 7.12.6.8 | F.10.3.8 | +| 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 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | issignaling | |check| | |check| | |check| | |check| | |check| | | 7.12.3.8 | N/A | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ -| ldexp | |check| | |check| | |check| | |check| | |check| | | 7.12.6.9 | F.10.3.9 | +| ldexp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.9 | F.10.3.9 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ -| llogb | |check| | |check| | |check| | |check| | |check| | | 7.12.6.10 | F.10.3.10 | +| llogb | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.10 | F.10.3.10 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | llrint | |check| | |check| | |check| | |check| | |check| | | 7.12.9.5 | F.10.6.5 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | llround | |check| | |check| | |check| | |check| | |check| | | 7.12.9.7 | F.10.6.7 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ -| logb | |check| | |check| | |check| | |check| | |check| | | 7.12.6.17 | F.10.3.17 | +| logb | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.17 | F.10.3.17 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ | lrint | |check| | |check| | |check| | |check| | |check| | | 7.12.9.5 | F.10.6.5 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+ >From 2bf7920d79c31551408e689f8c065eb92ff27726 Mon Sep 17 00:00:00 2001 From: Krishna Pandey <[email protected]> Date: Thu, 21 Aug 2025 05:22:19 +0530 Subject: [PATCH 6/6] fix: add cpp::min in LdExpTest.h Signed-off-by: Krishna Pandey <[email protected]> --- libc/test/src/math/smoke/CMakeLists.txt | 6 ++++++ libc/test/src/math/smoke/LdExpTest.h | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index b71d47568309b..a7135def118c4 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -2094,6 +2094,7 @@ add_fp_unittest( LdExpTest.h DEPENDS libc.src.math.ldexp + libc.src.__support.CPP.algorithm libc.src.__support.CPP.limits libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.normal_float @@ -2109,6 +2110,7 @@ add_fp_unittest( LdExpTest.h DEPENDS libc.src.math.ldexpf + libc.src.__support.CPP.algorithm libc.src.__support.CPP.limits libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.normal_float @@ -2124,6 +2126,7 @@ add_fp_unittest( LdExpTest.h DEPENDS libc.src.math.ldexpl + libc.src.__support.CPP.algorithm libc.src.__support.CPP.limits libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.normal_float @@ -2139,6 +2142,7 @@ add_fp_unittest( LdExpTest.h DEPENDS libc.src.math.ldexpf16 + libc.src.__support.CPP.algorithm libc.src.__support.CPP.limits libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.normal_float @@ -2154,6 +2158,7 @@ add_fp_unittest( LdExpTest.h DEPENDS libc.src.math.ldexpf128 + libc.src.__support.CPP.algorithm libc.src.__support.CPP.limits libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.normal_float @@ -2169,6 +2174,7 @@ add_fp_unittest( LdExpTest.h DEPENDS libc.src.math.ldexpbf16 + libc.src.__support.CPP.algorithm libc.src.__support.CPP.limits libc.src.__support.FPUtil.bfloat16 libc.src.__support.FPUtil.fp_bits diff --git a/libc/test/src/math/smoke/LdExpTest.h b/libc/test/src/math/smoke/LdExpTest.h index ac3affdcd680b..d005f053c0c91 100644 --- a/libc/test/src/math/smoke/LdExpTest.h +++ b/libc/test/src/math/smoke/LdExpTest.h @@ -10,7 +10,8 @@ #define LLVM_LIBC_TEST_SRC_MATH_LDEXPTEST_H #include "hdr/stdint_proxy.h" -#include "src/__support/CPP/limits.h" // INT_MAX +#include "src/__support/CPP/algorithm.h" // cpp::min +#include "src/__support/CPP/limits.h" // INT_MAX #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/NormalFloat.h" #include "test/UnitTest/FEnvSafeTest.h" @@ -155,7 +156,8 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { // Start with a subnormal number but pass a very high number for exponent. // The result should not be infinity. x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1, - NormalFloat::ONE >> FPBits::FRACTION_LEN); + NormalFloat::ONE >> + LIBC_NAMESPACE::cpp::min(FPBits::FRACTION_LEN, 10)); exp = FPBits::MAX_BIASED_EXPONENT + 5; ASSERT_FALSE(FPBits(func(x, exp)).is_inf()); // But if the exp is large enough to oversome than the normalization shift, _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
