diff --git a/libc/shared/math.h b/libc/shared/math.h index 79ba2ea5aa6ff..2198ffdc74459 100644 --- a/libc/shared/math.h +++ b/libc/shared/math.h @@ -58,6 +58,7 @@ #include "math/expm1f.h" #include "math/expm1f16.h" #include "math/fma.h" +#include "math/fmaf.h" #include "math/frexpf.h" #include "math/frexpf128.h" #include "math/frexpf16.h" diff --git a/libc/shared/math/fmaf.h b/libc/shared/math/fmaf.h new file mode 100644 index 0000000000000..eef75b05d4a18 --- /dev/null +++ b/libc/shared/math/fmaf.h @@ -0,0 +1,23 @@ +//===-- Shared fmaf 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_FMAF_H +#define LLVM_LIBC_SHARED_MATH_FMAF_H + +#include "shared/libc_common.h" +#include "src/__support/math/fmaf.h" + +namespace LIBC_NAMESPACE_DECL { +namespace shared { + +using math::fmaf; + +} // namespace shared +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SHARED_MATH_FMAF_H diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt index 1911481d0649e..56229957a4c56 100644 --- a/libc/src/__support/math/CMakeLists.txt +++ b/libc/src/__support/math/CMakeLists.txt @@ -601,6 +601,14 @@ add_header_library( libc.src.__support.FPUtil.fma ) +add_header_library( + fmaf + HDRS + fmaf.h + DEPENDS + libc.src.__support.FPUtil.fma +) + add_header_library( frexpf128 HDRS diff --git a/libc/src/__support/math/fmaf.h b/libc/src/__support/math/fmaf.h new file mode 100644 index 0000000000000..f5b893873e885 --- /dev/null +++ b/libc/src/__support/math/fmaf.h @@ -0,0 +1,27 @@ +//===-- Implementation header for fmaf --------------------------*- 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_FMAF_H +#define LLVM_LIBC_SRC___SUPPORT_MATH_FMAF_H + +#include "src/__support/FPUtil/FMA.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +namespace math { + +LIBC_INLINE static float fmaf(float x, float y, float z) { + return fputil::fma(x, y, z); +} + +} // namespace math + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC___SUPPORT_MATH_FMAF_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index 7103c6947eba0..55055803731ae 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -4701,7 +4701,7 @@ add_entrypoint_object( HDRS ../fmaf.h DEPENDS - libc.src.__support.FPUtil.fma + libc.src.__support.math.fmaf ) add_entrypoint_object( diff --git a/libc/src/math/generic/fmaf.cpp b/libc/src/math/generic/fmaf.cpp index dad85b4e9d1e6..069c7c4605da7 100644 --- a/libc/src/math/generic/fmaf.cpp +++ b/libc/src/math/generic/fmaf.cpp @@ -7,15 +7,12 @@ //===----------------------------------------------------------------------===// #include "src/math/fmaf.h" -#include "src/__support/common.h" - -#include "src/__support/FPUtil/FMA.h" -#include "src/__support/macros/config.h" +#include "src/__support/math/fmaf.h" namespace LIBC_NAMESPACE_DECL { LLVM_LIBC_FUNCTION(float, fmaf, (float x, float y, float z)) { - return fputil::fma(x, y, z); + return math::fmaf(x, y, z); } } // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt index cd4b5ec75f876..f5c42c145c318 100644 --- a/libc/test/shared/CMakeLists.txt +++ b/libc/test/shared/CMakeLists.txt @@ -54,6 +54,7 @@ add_fp_unittest( libc.src.__support.math.expf libc.src.__support.math.expf16 libc.src.__support.math.fma + libc.src.__support.math.fmaf libc.src.__support.math.frexpf libc.src.__support.math.frexpf128 libc.src.__support.math.frexpf16 diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp index 7357e24603004..d81ae4df562b6 100644 --- a/libc/test/shared/shared_math_test.cpp +++ b/libc/test/shared/shared_math_test.cpp @@ -67,7 +67,7 @@ TEST(LlvmLibcSharedMathTest, AllFloat) { EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::expf(0.0f)); EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::exp2f(0.0f)); EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::expm1f(0.0f)); - + EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::fmaf(0.0f, 0.0f, 0.0f)); EXPECT_FP_EQ_ALL_ROUNDING(0.75f, LIBC_NAMESPACE::shared::frexpf(24.0f, &exponent)); EXPECT_EQ(exponent, 5); diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 1902b43216a7c..d3f3168f31a0d 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -2799,6 +2799,14 @@ libc_support_library( ], ) +libc_support_library( + name = "__support_math_fmaf", + hdrs = ["src/__support/math/fmaf.h"], + deps = [ + ":__support_fputil_fma", + ], +) + libc_support_library( name = "__support_math_frexpf128", hdrs = ["src/__support/math/frexpf128.h"], @@ -4016,7 +4024,7 @@ libc_math_function( libc_math_function( name = "fmaf", additional_deps = [ - ":__support_fputil_fma", + ":__support_math_fmaf", ], )