https://github.com/bassiounix updated https://github.com/llvm/llvm-project/pull/152871
>From 99fcd032df293e5f3404e7ce275ce43891f7c9f3 Mon Sep 17 00:00:00 2001 From: bassiounix <muhammad.m.bassio...@gmail.com> Date: Sat, 9 Aug 2025 20:15:12 +0300 Subject: [PATCH] [libc][math] Refactor cosf16 implementation to header-only in src/__support/math folder. --- libc/shared/math.h | 1 + libc/shared/math/cosf16.h | 28 +++++ libc/src/__support/math/CMakeLists.txt | 27 +++++ libc/src/__support/math/cosf16.h | 106 ++++++++++++++++++ .../math}/sincosf16_utils.h | 6 +- libc/src/math/generic/CMakeLists.txt | 31 +---- libc/src/math/generic/cosf16.cpp | 81 +------------ libc/src/math/generic/cospif16.cpp | 3 +- libc/src/math/generic/sinf16.cpp | 3 +- libc/src/math/generic/sinpif16.cpp | 3 +- libc/src/math/generic/tanf16.cpp | 3 +- libc/src/math/generic/tanpif16.cpp | 3 +- libc/test/shared/CMakeLists.txt | 1 + libc/test/shared/shared_math_test.cpp | 2 +- .../llvm-project-overlay/libc/BUILD.bazel | 48 +++++--- 15 files changed, 217 insertions(+), 129 deletions(-) create mode 100644 libc/shared/math/cosf16.h create mode 100644 libc/src/__support/math/cosf16.h rename libc/src/{math/generic => __support/math}/sincosf16_utils.h (97%) diff --git a/libc/shared/math.h b/libc/shared/math.h index 0c11640101563..a7edb0811a380 100644 --- a/libc/shared/math.h +++ b/libc/shared/math.h @@ -34,6 +34,7 @@ #include "math/cbrtf.h" #include "math/cos.h" #include "math/cosf.h" +#include "math/cosf16.h" #include "math/erff.h" #include "math/exp.h" #include "math/exp10.h" diff --git a/libc/shared/math/cosf16.h b/libc/shared/math/cosf16.h new file mode 100644 index 0000000000000..8a19285c5755b --- /dev/null +++ b/libc/shared/math/cosf16.h @@ -0,0 +1,28 @@ +//===-- Shared cosf16 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_COSF16_H +#define LLVM_LIBC_SHARED_MATH_COSF16_H + +#include "shared/libc_common.h" + +#ifdef LIBC_TYPES_HAS_FLOAT16 + +#include "src/__support/math/cosf16.h" + +namespace LIBC_NAMESPACE_DECL { +namespace shared { + +using math::cosf16; + +} // namespace shared +} // namespace LIBC_NAMESPACE_DECL + +#endif // LIBC_TYPES_HAS_FLOAT16 + +#endif // LLVM_LIBC_SHARED_MATH_COSF16_H diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index 2cd064591e976..f4a8ee0fbb41c 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -390,6 +390,23 @@ add_header_library( libc.src.__support.macros.optimization ) +add_header_library( + cosf16 + HDRS + cosf16.h + DEPENDS + .sincosf16_utils + libc.hdr.errno_macros + libc.hdr.fenv_macros + libc.src.__support.FPUtil.cast + libc.src.__support.FPUtil.fenv_impl + libc.src.__support.FPUtil.fp_bits + libc.src.__support.FPUtil.except_value_utils + libc.src.__support.FPUtil.multiply_add + libc.src.__support.macros.optimization + libc.src.__support.macros.properties.types +) + add_header_library( erff HDRS @@ -699,3 +716,13 @@ add_header_library( libc.src.__support.FPUtil.polyeval libc.src.__support.common ) + +add_header_library( + sincosf16_utils + HDRS + sincosf16_utils.h + DEPENDS + libc.src.__support.FPUtil.polyeval + libc.src.__support.FPUtil.nearest_integer + libc.src.__support.common +) diff --git a/libc/src/__support/math/cosf16.h b/libc/src/__support/math/cosf16.h new file mode 100644 index 0000000000000..50c9a8f765c2a --- /dev/null +++ b/libc/src/__support/math/cosf16.h @@ -0,0 +1,106 @@ +//===-- Implementation header for cosf16 ------------------------*- 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_COSF16_H +#define LLVM_LIBC_SRC___SUPPORT_MATH_COSF16_H + +#include "include/llvm-libc-macros/float16-macros.h" + +#ifdef LIBC_TYPES_HAS_FLOAT16 + +#include "sincosf16_utils.h" +#include "src/__support/FPUtil/FEnvImpl.h" +#include "src/__support/FPUtil/FPBits.h" +#include "src/__support/FPUtil/cast.h" +#include "src/__support/FPUtil/except_value_utils.h" +#include "src/__support/FPUtil/multiply_add.h" +#include "src/__support/macros/optimization.h" + +namespace LIBC_NAMESPACE_DECL { + +namespace math { + +LIBC_INLINE static constexpr float16 cosf16(float16 x) { +#ifndef LIBC_MATH_HAS_SKIP_ACCURATE_PASS + constexpr size_t N_EXCEPTS = 4; + + constexpr fputil::ExceptValues<float16, N_EXCEPTS> COSF16_EXCEPTS{{ + // (input, RZ output, RU offset, RD offset, RN offset) + {0x2b7c, 0x3bfc, 1, 0, 1}, + {0x4ac1, 0x38b5, 1, 0, 0}, + {0x5c49, 0xb8c6, 0, 1, 0}, + {0x7acc, 0xa474, 0, 1, 0}, + }}; +#endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS + + using namespace sincosf16_internal; + using FPBits = fputil::FPBits<float16>; + FPBits xbits(x); + + uint16_t x_u = xbits.uintval(); + uint16_t x_abs = x_u & 0x7fff; + float xf = x; + + // Range reduction: + // For |x| > pi/32, we perform range reduction as follows: + // Find k and y such that: + // x = (k + y) * pi/32 + // k is an integer, |y| < 0.5 + // + // This is done by performing: + // k = round(x * 32/pi) + // y = x * 32/pi - k + // + // Once k and y are computed, we then deduce the answer by the cosine of sum + // formula: + // cos(x) = cos((k + y) * pi/32) + // = cos(k * pi/32) * cos(y * pi/32) - + // sin(k * pi/32) * sin(y * pi/32) + +#ifndef LIBC_MATH_HAS_SKIP_ACCURATE_PASS + // Handle exceptional values + if (auto r = COSF16_EXCEPTS.lookup(x_abs); LIBC_UNLIKELY(r.has_value())) + return r.value(); +#endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS + + // cos(+/-0) = 1 + if (LIBC_UNLIKELY(x_abs == 0U)) + return fputil::cast<float16>(1.0f); + + // cos(+/-inf) = NaN, and cos(NaN) = NaN + if (xbits.is_inf_or_nan()) { + if (xbits.is_signaling_nan()) { + fputil::raise_except_if_required(FE_INVALID); + return FPBits::quiet_nan().get_val(); + } + + if (xbits.is_inf()) { + fputil::set_errno_if_required(EDOM); + fputil::raise_except_if_required(FE_INVALID); + } + + return x + FPBits::quiet_nan().get_val(); + } + + float sin_k = 0.0f, cos_k = 0.0f, sin_y = 0.0f, cosm1_y = 0.0f; + sincosf16_eval(xf, sin_k, cos_k, sin_y, cosm1_y); + // Since, cosm1_y = cos_y - 1, therefore: + // cos(x) = cos_k * cos_y - sin_k * sin_y + // = cos_k * (cos_y - 1 + 1) - sin_k * sin_y + // = cos_k * cosm1_y - sin_k * sin_y + cos_k + return fputil::cast<float16>(fputil::multiply_add( + cos_k, cosm1_y, fputil::multiply_add(-sin_k, sin_y, cos_k))); +} + +} // namespace math + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LIBC_TYPES_HAS_FLOAT16 + +#endif // LLVM_LIBC_SRC___SUPPORT_MATH_COSF16_H diff --git a/libc/src/math/generic/sincosf16_utils.h b/libc/src/__support/math/sincosf16_utils.h similarity index 97% rename from libc/src/math/generic/sincosf16_utils.h rename to libc/src/__support/math/sincosf16_utils.h index 05cab09d2089b..74f21fd0a9dc4 100644 --- a/libc/src/math/generic/sincosf16_utils.h +++ b/libc/src/__support/math/sincosf16_utils.h @@ -16,6 +16,8 @@ namespace LIBC_NAMESPACE_DECL { +namespace sincosf16_internal { + // Lookup table for sin(k * pi / 32) with k = 0, ..., 63. // Table is generated with Sollya as follows: // > display = hexadecimmal; @@ -66,7 +68,7 @@ LIBC_INLINE int32_t range_reduction_sincosf16(float x, float &y) { return static_cast<int32_t>(kd); } -static LIBC_INLINE void sincosf16_poly_eval(int32_t k, float y, float &sin_k, +LIBC_INLINE static void sincosf16_poly_eval(int32_t k, float y, float &sin_k, float &cos_k, float &sin_y, float &cosm1_y) { @@ -107,6 +109,8 @@ LIBC_INLINE void sincospif16_eval(float xf, float &sin_k, float &cos_k, sincosf16_poly_eval(k, y, sin_k, cos_k, sin_y, cosm1_y); } +} // namespace sincosf16_internal + } // namespace LIBC_NAMESPACE_DECL #endif // LLVM_LIBC_SRC_MATH_GENERIC_SINCOSF16_UTILS_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index 3bf77029d65c5..ab708978e818f 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -278,16 +278,6 @@ add_entrypoint_object( libc.src.__support.FPUtil.generic.add_sub ) -add_header_library( - sincosf16_utils - HDRS - sincosf16_utils.h - DEPENDS - libc.src.__support.FPUtil.polyeval - libc.src.__support.FPUtil.nearest_integer - libc.src.__support.common -) - add_entrypoint_object( cos SRCS @@ -315,16 +305,7 @@ add_entrypoint_object( HDRS ../cosf16.h DEPENDS - .sincosf16_utils - libc.hdr.errno_macros - libc.hdr.fenv_macros - libc.src.__support.FPUtil.cast - libc.src.__support.FPUtil.fenv_impl - libc.src.__support.FPUtil.fp_bits - libc.src.__support.FPUtil.except_value_utils - libc.src.__support.FPUtil.multiply_add - libc.src.__support.macros.optimization - libc.src.__support.macros.properties.types + libc.src.__support.math.cosf16 ) add_entrypoint_object( @@ -349,7 +330,6 @@ add_entrypoint_object( HDRS ../cospif16.h DEPENDS - .sincosf16_utils libc.hdr.errno_macros libc.hdr.fenv_macros libc.src.__support.FPUtil.cast @@ -357,6 +337,7 @@ add_entrypoint_object( libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.multiply_add libc.src.__support.macros.optimization + libc.src.__support.math.sincosf16_utils ) add_entrypoint_object( @@ -405,7 +386,6 @@ add_entrypoint_object( HDRS ../sinf16.h DEPENDS - .sincosf16_utils libc.hdr.errno_macros libc.hdr.fenv_macros libc.src.__support.FPUtil.cast @@ -415,6 +395,7 @@ add_entrypoint_object( libc.src.__support.FPUtil.multiply_add libc.src.__support.macros.optimization libc.src.__support.macros.properties.types + libc.src.__support.math.sincosf16_utils COMPILE_OPTIONS ${libc_opt_high_flag} ) @@ -482,7 +463,6 @@ add_entrypoint_object( HDRS ../sinpif16.h DEPENDS - .sincosf16_utils libc.hdr.errno_macros libc.hdr.fenv_macros libc.src.__support.FPUtil.cast @@ -490,6 +470,7 @@ add_entrypoint_object( libc.src.__support.FPUtil.fp_bits libc.src.__support.FPUtil.multiply_add libc.src.__support.macros.optimization + libc.src.__support.math.sincosf16_utils ) add_entrypoint_object( @@ -538,7 +519,6 @@ add_entrypoint_object( HDRS ../tanf16.h DEPENDS - .sincosf16_utils libc.hdr.errno_macros libc.hdr.fenv_macros libc.src.__support.FPUtil.cast @@ -548,6 +528,7 @@ add_entrypoint_object( libc.src.__support.FPUtil.multiply_add libc.src.__support.macros.optimization libc.src.__support.macros.properties.types + libc.src.__support.math.sincosf16_utils ) add_entrypoint_object( @@ -572,7 +553,6 @@ add_entrypoint_object( HDRS ../tanpif16.h DEPENDS - .sincosf16_utils libc.hdr.errno_macros libc.hdr.fenv_macros libc.src.__support.FPUtil.cast @@ -581,6 +561,7 @@ add_entrypoint_object( libc.src.__support.FPUtil.except_value_utils libc.src.__support.FPUtil.multiply_add libc.src.__support.macros.optimization + libc.src.__support.math.sincosf16_utils ) add_entrypoint_object( diff --git a/libc/src/math/generic/cosf16.cpp b/libc/src/math/generic/cosf16.cpp index 99bb03eb71426..031c3e131d972 100644 --- a/libc/src/math/generic/cosf16.cpp +++ b/libc/src/math/generic/cosf16.cpp @@ -7,87 +7,10 @@ //===----------------------------------------------------------------------===// #include "src/math/cosf16.h" -#include "hdr/errno_macros.h" -#include "hdr/fenv_macros.h" -#include "sincosf16_utils.h" -#include "src/__support/FPUtil/FEnvImpl.h" -#include "src/__support/FPUtil/FPBits.h" -#include "src/__support/FPUtil/cast.h" -#include "src/__support/FPUtil/except_value_utils.h" -#include "src/__support/FPUtil/multiply_add.h" -#include "src/__support/macros/optimization.h" +#include "src/__support/math/cosf16.h" namespace LIBC_NAMESPACE_DECL { -#ifndef LIBC_MATH_HAS_SKIP_ACCURATE_PASS -constexpr size_t N_EXCEPTS = 4; - -constexpr fputil::ExceptValues<float16, N_EXCEPTS> COSF16_EXCEPTS{{ - // (input, RZ output, RU offset, RD offset, RN offset) - {0x2b7c, 0x3bfc, 1, 0, 1}, - {0x4ac1, 0x38b5, 1, 0, 0}, - {0x5c49, 0xb8c6, 0, 1, 0}, - {0x7acc, 0xa474, 0, 1, 0}, -}}; -#endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS - -LLVM_LIBC_FUNCTION(float16, cosf16, (float16 x)) { - using FPBits = fputil::FPBits<float16>; - FPBits xbits(x); - - uint16_t x_u = xbits.uintval(); - uint16_t x_abs = x_u & 0x7fff; - float xf = x; - - // Range reduction: - // For |x| > pi/32, we perform range reduction as follows: - // Find k and y such that: - // x = (k + y) * pi/32 - // k is an integer, |y| < 0.5 - // - // This is done by performing: - // k = round(x * 32/pi) - // y = x * 32/pi - k - // - // Once k and y are computed, we then deduce the answer by the cosine of sum - // formula: - // cos(x) = cos((k + y) * pi/32) - // = cos(k * pi/32) * cos(y * pi/32) - - // sin(k * pi/32) * sin(y * pi/32) - -#ifndef LIBC_MATH_HAS_SKIP_ACCURATE_PASS - // Handle exceptional values - if (auto r = COSF16_EXCEPTS.lookup(x_abs); LIBC_UNLIKELY(r.has_value())) - return r.value(); -#endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS - - // cos(+/-0) = 1 - if (LIBC_UNLIKELY(x_abs == 0U)) - return fputil::cast<float16>(1.0f); - - // cos(+/-inf) = NaN, and cos(NaN) = NaN - if (xbits.is_inf_or_nan()) { - if (xbits.is_signaling_nan()) { - fputil::raise_except_if_required(FE_INVALID); - return FPBits::quiet_nan().get_val(); - } - - if (xbits.is_inf()) { - fputil::set_errno_if_required(EDOM); - fputil::raise_except_if_required(FE_INVALID); - } - - return x + FPBits::quiet_nan().get_val(); - } - - float sin_k, cos_k, sin_y, cosm1_y; - sincosf16_eval(xf, sin_k, cos_k, sin_y, cosm1_y); - // Since, cosm1_y = cos_y - 1, therefore: - // cos(x) = cos_k * cos_y - sin_k * sin_y - // = cos_k * (cos_y - 1 + 1) - sin_k * sin_y - // = cos_k * cosm1_y - sin_k * sin_y + cos_k - return fputil::cast<float16>(fputil::multiply_add( - cos_k, cosm1_y, fputil::multiply_add(-sin_k, sin_y, cos_k))); -} +LLVM_LIBC_FUNCTION(float16, cosf16, (float16 x)) { return math::cosf16(x); } } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/cospif16.cpp b/libc/src/math/generic/cospif16.cpp index 9dc25920d5cfe..c99285b25c106 100644 --- a/libc/src/math/generic/cospif16.cpp +++ b/libc/src/math/generic/cospif16.cpp @@ -9,16 +9,17 @@ #include "src/math/cospif16.h" #include "hdr/errno_macros.h" #include "hdr/fenv_macros.h" -#include "sincosf16_utils.h" #include "src/__support/FPUtil/FEnvImpl.h" #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/cast.h" #include "src/__support/FPUtil/multiply_add.h" #include "src/__support/macros/optimization.h" +#include "src/__support/math/sincosf16_utils.h" namespace LIBC_NAMESPACE_DECL { LLVM_LIBC_FUNCTION(float16, cospif16, (float16 x)) { + using namespace sincosf16_internal; using FPBits = typename fputil::FPBits<float16>; FPBits xbits(x); diff --git a/libc/src/math/generic/sinf16.cpp b/libc/src/math/generic/sinf16.cpp index 28debbd52a9a5..2b579202ea111 100644 --- a/libc/src/math/generic/sinf16.cpp +++ b/libc/src/math/generic/sinf16.cpp @@ -9,13 +9,13 @@ #include "src/math/sinf16.h" #include "hdr/errno_macros.h" #include "hdr/fenv_macros.h" -#include "sincosf16_utils.h" #include "src/__support/FPUtil/FEnvImpl.h" #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/cast.h" #include "src/__support/FPUtil/except_value_utils.h" #include "src/__support/FPUtil/multiply_add.h" #include "src/__support/macros/optimization.h" +#include "src/__support/math/sincosf16_utils.h" namespace LIBC_NAMESPACE_DECL { @@ -32,6 +32,7 @@ constexpr fputil::ExceptValues<float16, N_EXCEPTS> SINF16_EXCEPTS{{ #endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS LLVM_LIBC_FUNCTION(float16, sinf16, (float16 x)) { + using namespace sincosf16_internal; using FPBits = fputil::FPBits<float16>; FPBits xbits(x); diff --git a/libc/src/math/generic/sinpif16.cpp b/libc/src/math/generic/sinpif16.cpp index 68af484a6c5d3..311e6f989ebf1 100644 --- a/libc/src/math/generic/sinpif16.cpp +++ b/libc/src/math/generic/sinpif16.cpp @@ -9,15 +9,16 @@ #include "src/math/sinpif16.h" #include "hdr/errno_macros.h" #include "hdr/fenv_macros.h" -#include "sincosf16_utils.h" #include "src/__support/FPUtil/FEnvImpl.h" #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/cast.h" #include "src/__support/FPUtil/multiply_add.h" +#include "src/__support/math/sincosf16_utils.h" namespace LIBC_NAMESPACE_DECL { LLVM_LIBC_FUNCTION(float16, sinpif16, (float16 x)) { + using namespace sincosf16_internal; using FPBits = typename fputil::FPBits<float16>; FPBits xbits(x); diff --git a/libc/src/math/generic/tanf16.cpp b/libc/src/math/generic/tanf16.cpp index 229f4a363670b..20323a88f3527 100644 --- a/libc/src/math/generic/tanf16.cpp +++ b/libc/src/math/generic/tanf16.cpp @@ -9,13 +9,13 @@ #include "src/math/tanf16.h" #include "hdr/errno_macros.h" #include "hdr/fenv_macros.h" -#include "sincosf16_utils.h" #include "src/__support/FPUtil/FEnvImpl.h" #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/cast.h" #include "src/__support/FPUtil/except_value_utils.h" #include "src/__support/FPUtil/multiply_add.h" #include "src/__support/macros/optimization.h" +#include "src/__support/math/sincosf16_utils.h" namespace LIBC_NAMESPACE_DECL { @@ -37,6 +37,7 @@ constexpr fputil::ExceptValues<float16, N_EXCEPTS> TANF16_EXCEPTS{{ #endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS LLVM_LIBC_FUNCTION(float16, tanf16, (float16 x)) { + using namespace sincosf16_internal; using FPBits = fputil::FPBits<float16>; FPBits xbits(x); diff --git a/libc/src/math/generic/tanpif16.cpp b/libc/src/math/generic/tanpif16.cpp index 792d405b1bb9e..b137b09860f7c 100644 --- a/libc/src/math/generic/tanpif16.cpp +++ b/libc/src/math/generic/tanpif16.cpp @@ -9,13 +9,13 @@ #include "src/math/tanpif16.h" #include "hdr/errno_macros.h" #include "hdr/fenv_macros.h" -#include "sincosf16_utils.h" #include "src/__support/FPUtil/FEnvImpl.h" #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/cast.h" #include "src/__support/FPUtil/except_value_utils.h" #include "src/__support/FPUtil/multiply_add.h" #include "src/__support/macros/optimization.h" +#include "src/__support/math/sincosf16_utils.h" namespace LIBC_NAMESPACE_DECL { @@ -39,6 +39,7 @@ constexpr fputil::ExceptValues<float16, N_EXCEPTS> TANPIF16_EXCEPTS{{ #endif // !LIBC_MATH_HAS_SKIP_ACCURATE_PASS LLVM_LIBC_FUNCTION(float16, tanpif16, (float16 x)) { + using namespace sincosf16_internal; using FPBits = typename fputil::FPBits<float16>; FPBits xbits(x); diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt index 052be9aa9484b..a8f17d3acd10d 100644 --- a/libc/test/shared/CMakeLists.txt +++ b/libc/test/shared/CMakeLists.txt @@ -30,6 +30,7 @@ add_fp_unittest( libc.src.__support.math.cbrtf libc.src.__support.math.cos libc.src.__support.math.cosf + libc.src.__support.math.cosf16 libc.src.__support.math.erff libc.src.__support.math.exp libc.src.__support.math.exp10 diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 26e6a1b712c48..971e1b71e658d 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -21,7 +21,7 @@ TEST(LlvmLibcSharedMathTest, AllFloat16) { EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::asinhf16(0.0f16)); EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::atanf16(0.0f16)); EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::atanhf16(0.0f16)); - + EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::cosf16(0.0f16)); EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::exp10f16(0.0f16)); EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::expf16(0.0f16)); diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 38f7e3bcc8e27..adc0ee8a38e18 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -1953,16 +1953,6 @@ libc_support_library( ], ) -libc_support_library( - name = "sincosf16_utils", - hdrs = ["src/math/generic/sincosf16_utils.h"], - deps = [ - ":__support_common", - ":__support_fputil_nearest_integer", - ":__support_fputil_polyeval", - ], -) - libc_support_library( name = "explogxf", hdrs = ["src/math/generic/explogxf.h"], @@ -2390,6 +2380,20 @@ libc_support_library( ], ) +libc_support_library( + name = "__support_math_cosf16", + hdrs = ["src/__support/math/cosf16.h"], + deps = [ + ":__support_fputil_multiply_add", + ":__support_fputil_fenv_impl", + ":__support_fputil_cast", + ":__support_fputil_except_value_utils", + ":__support_macros_optimization", + ":__support_math_sincosf16_utils", + ":errno", + ], +) + libc_support_library( name = "__support_math_erff", hdrs = ["src/__support/math/erff.h"], @@ -2704,6 +2708,16 @@ libc_support_library( ], ) +libc_support_library( + name = "__support_math_sincosf16_utils", + hdrs = ["src/__support/math/sincosf16_utils.h"], + deps = [ + ":__support_common", + ":__support_fputil_nearest_integer", + ":__support_fputil_polyeval", + ], +) + ############################### complex targets ################################ libc_function( @@ -3167,9 +3181,7 @@ libc_math_function( libc_math_function( name = "cosf16", additional_deps = [ - ":__support_fputil_multiply_add", - ":__support_macros_optimization", - ":sincosf16_utils", + ":__support_math_cosf16", ], ) @@ -3214,7 +3226,7 @@ libc_math_function( additional_deps = [ ":__support_fputil_multiply_add", ":__support_macros_optimization", - ":sincosf16_utils", + ":__support_math_sincosf16_utils", ], ) @@ -4292,7 +4304,7 @@ libc_math_function( additional_deps = [ ":__support_fputil_nearest_integer", ":__support_fputil_polyeval", - ":sincosf16_utils", + ":__support_math_sincosf16_utils", ], ) @@ -4352,7 +4364,7 @@ libc_math_function( additional_deps = [ ":__support_fputil_nearest_integer", ":__support_fputil_polyeval", - ":sincosf16_utils", + ":__support_math_sincosf16_utils", ], ) @@ -4421,7 +4433,7 @@ libc_math_function( additional_deps = [ ":__support_fputil_nearest_integer", ":__support_fputil_polyeval", - ":sincosf16_utils", + ":__support_math_sincosf16_utils", ], ) @@ -4461,7 +4473,7 @@ libc_math_function( libc_math_function( name = "tanpif16", additional_deps = [ - ":sincosf16_utils", + ":__support_math_sincosf16_utils", ":hdr_errno_macros", ":hdr_fenv_macros", ":__support_fputil_cast", _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits