From a2f61ba08bebe0be50d3622f2535bc3a1d7e414f Mon Sep 17 00:00:00 2001 From: aaryanshukla <53713108+aaryanshukla@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:40:34 -0700 Subject: [PATCH] [libc][math]fadd implementation (#99694) - **[libc] math fadd** - **[libc][math] implemented fadd** --- libc/config/gpu/entrypoints.txt | 1 + libc/config/linux/aarch64/entrypoints.txt | 1 + libc/config/linux/arm/entrypoints.txt | 1 + libc/config/linux/riscv/entrypoints.txt | 1 + libc/config/linux/x86_64/entrypoints.txt | 1 + libc/config/windows/entrypoints.txt | 1 + libc/docs/math/index.rst | 2 +- libc/spec/stdc.td | 1 + libc/src/math/CMakeLists.txt | 1 + libc/src/math/fadd.h | 20 ++++++++++++++++++++ libc/src/math/generic/CMakeLists.txt | 12 ++++++++++++ libc/src/math/generic/fadd.cpp | 20 ++++++++++++++++++++ libc/test/src/math/CMakeLists.txt | 14 ++++++++++++++ libc/test/src/math/fadd_test.cpp | 13 +++++++++++++ libc/test/src/math/smoke/CMakeLists.txt | 14 ++++++++++++++ libc/test/src/math/smoke/fadd_test.cpp | 13 +++++++++++++ 16 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 libc/src/math/fadd.h create mode 100644 libc/src/math/generic/fadd.cpp create mode 100644 libc/test/src/math/fadd_test.cpp create mode 100644 libc/test/src/math/smoke/fadd_test.cpp diff --git a/libc/config/gpu/entrypoints.txt b/libc/config/gpu/entrypoints.txt index b8eb743cf587..506c7d6d7b31 100644 --- a/libc/config/gpu/entrypoints.txt +++ b/libc/config/gpu/entrypoints.txt @@ -266,6 +266,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.expm1f libc.src.math.fabs libc.src.math.fabsf + libc.src.math.fadd libc.src.math.fdim libc.src.math.fdimf libc.src.math.floor diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 208889ba34a5..e2f6bd74bb69 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -370,6 +370,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fabs libc.src.math.fabsf libc.src.math.fabsl + libc.src.math.fadd libc.src.math.fdim libc.src.math.fdimf libc.src.math.fdiml diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt index a72f8668808a..0d09e4c22953 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -239,6 +239,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fabs libc.src.math.fabsf libc.src.math.fabsl + libc.src.math.fadd libc.src.math.fdim libc.src.math.fdimf libc.src.math.fdiml diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index 266c94d54a9d..33dd8d06173b 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -371,6 +371,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fabs libc.src.math.fabsf libc.src.math.fabsl + libc.src.math.fadd libc.src.math.fdim libc.src.math.fdimf libc.src.math.fdiml diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index cbdee084aa19..7309e95644c7 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -396,6 +396,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fabs libc.src.math.fabsf libc.src.math.fabsl + libc.src.math.fadd libc.src.math.fdim libc.src.math.fdimf libc.src.math.fdiml diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt index afc9ca87ff09..b6aced83c581 100644 --- a/libc/config/windows/entrypoints.txt +++ b/libc/config/windows/entrypoints.txt @@ -144,6 +144,7 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.fabs libc.src.math.fabsf libc.src.math.fabsl + libc.src.math.fadd libc.src.math.fdim libc.src.math.fdimf libc.src.math.fdiml diff --git a/libc/docs/math/index.rst b/libc/docs/math/index.rst index 5fab9ce4df94..cff7f69deb7f 100644 --- a/libc/docs/math/index.rst +++ b/libc/docs/math/index.rst @@ -136,7 +136,7 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | fabs | |check| | |check| | |check| | |check| | |check| | 7.12.7.3 | F.10.4.3 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| fadd | N/A | | | N/A | | 7.12.14.1 | F.10.11 | +| fadd | N/A | |check| | |check| | N/A | |check| | 7.12.14.1 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | fdim | |check| | |check| | |check| | |check| | |check| | 7.12.12.1 | F.10.9.1 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ diff --git a/libc/spec/stdc.td b/libc/spec/stdc.td index 18592e92d330..285166ef0be7 100644 --- a/libc/spec/stdc.td +++ b/libc/spec/stdc.td @@ -402,6 +402,7 @@ def StdC : StandardSpec<"stdc"> { FunctionSpec<"fabsl", RetValSpec, [ArgSpec]>, GuardedFunctionSpec<"fabsf16", RetValSpec, [ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, GuardedFunctionSpec<"fabsf128", RetValSpec, [ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + FunctionSpec<"fadd", RetValSpec, [ArgSpec, ArgSpec]>, FunctionSpec<"fdim", RetValSpec, [ArgSpec, ArgSpec]>, FunctionSpec<"fdimf", RetValSpec, [ArgSpec, ArgSpec]>, diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt index c4e33130e909..050bf0f1ebf2 100644 --- a/libc/src/math/CMakeLists.txt +++ b/libc/src/math/CMakeLists.txt @@ -141,6 +141,7 @@ add_math_entrypoint_object(fabsf) add_math_entrypoint_object(fabsl) add_math_entrypoint_object(fabsf16) add_math_entrypoint_object(fabsf128) +add_math_entrypoint_object(fadd) add_math_entrypoint_object(fdim) add_math_entrypoint_object(fdimf) diff --git a/libc/src/math/fadd.h b/libc/src/math/fadd.h new file mode 100644 index 000000000000..ec3ce18bb676 --- /dev/null +++ b/libc/src/math/fadd.h @@ -0,0 +1,20 @@ +//===-- Implementation of fadd 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/__support/macros/config.h" + +#ifndef LLVM_LIBC_SRC_MATH_FADD_H +#define LLVM_LIBC_SRC_MATH_FADD_H + +namespace LIBC_NAMESPACE_DECL { + +float fadd(double x, double y); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_FADD_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index d775026fabb3..8e8ffb01adf6 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -452,6 +452,18 @@ add_entrypoint_object( -O3 ) +add_entrypoint_object( + fadd + SRCS + fadd.cpp + HDRS + ../fadd.h + DEPENDS + libc.src.__support.FPUtil.basic_operations + COMPILE_OPTIONS + -O3 +) + add_entrypoint_object( trunc SRCS diff --git a/libc/src/math/generic/fadd.cpp b/libc/src/math/generic/fadd.cpp new file mode 100644 index 000000000000..66e5188cbcfd --- /dev/null +++ b/libc/src/math/generic/fadd.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of fadd 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/fadd.h" +#include "src/__support/FPUtil/generic/add_sub.h" +#include "src/__support/common.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(float, fadd, (double x, double y)) { + return fputil::generic::add(x, y); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt index c28385f620cf..f69b0d9b1b66 100644 --- a/libc/test/src/math/CMakeLists.txt +++ b/libc/test/src/math/CMakeLists.txt @@ -174,6 +174,20 @@ add_fp_unittest( libc.src.__support.FPUtil.fp_bits ) +add_fp_unittest( + fadd_test + NEED_MPFR + SUITE + libc-math-unittests + SRCS + fadd_test.cpp + HDRS + AddTest.h + DEPENDS + libc.src.math.fadd + libc.src.__support.FPUtil.basic_operations +) + add_fp_unittest( trunc_test NEED_MPFR diff --git a/libc/test/src/math/fadd_test.cpp b/libc/test/src/math/fadd_test.cpp new file mode 100644 index 000000000000..fe9ac8b252ed --- /dev/null +++ b/libc/test/src/math/fadd_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for fadd ----------------------------------------------===// +// +// 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 "AddTest.h" + +#include "src/math/fadd.h" + +LIST_ADD_TESTS(float, double, LIBC_NAMESPACE::fadd) diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index a02648ea1018..69f53c5d27f1 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -141,6 +141,20 @@ add_fp_unittest( libc.src.__support.FPUtil.fp_bits ) +add_fp_unittest( + fadd_test + SUITE + libc-math-smoke-tests + SRCS + fadd_test.cpp + HDRS + AddTest.h + DEPENDS + libc.src.math.fadd + libc.src.__support.FPUtil.basic_operations + +) + add_fp_unittest( trunc_test SUITE diff --git a/libc/test/src/math/smoke/fadd_test.cpp b/libc/test/src/math/smoke/fadd_test.cpp new file mode 100644 index 000000000000..fe9ac8b252ed --- /dev/null +++ b/libc/test/src/math/smoke/fadd_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for fadd ----------------------------------------------===// +// +// 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 "AddTest.h" + +#include "src/math/fadd.h" + +LIST_ADD_TESTS(float, double, LIBC_NAMESPACE::fadd)