diff --git a/libc/config/darwin/arm/entrypoints.txt b/libc/config/darwin/arm/entrypoints.txt index ea5c7b537bbec..bb579d29ffe4b 100644 --- a/libc/config/darwin/arm/entrypoints.txt +++ b/libc/config/darwin/arm/entrypoints.txt @@ -135,7 +135,9 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.cos libc.src.math.cosf libc.src.math.cospif + libc.src.math.dfmal libc.src.math.dsqrtl + libc.src.math.dsubl libc.src.math.erff libc.src.math.exp libc.src.math.expf diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt index 1a7353172d464..ff3abb233ba8a 100644 --- a/libc/config/darwin/x86_64/entrypoints.txt +++ b/libc/config/darwin/x86_64/entrypoints.txt @@ -119,7 +119,9 @@ set(TARGET_LIBM_ENTRYPOINTS #libc.src.math.ceill #libc.src.math.coshf #libc.src.math.cosf + #libc.src.math.dfmal #libc.src.math.dsqrtl + #libc.src.math.dsubl #libc.src.math.expf #libc.src.math.exp2f #libc.src.math.expm1f diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 0be6f884f0368..d055943f9642d 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -358,8 +358,10 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.cosf libc.src.math.coshf libc.src.math.cospif + libc.src.math.dfmal libc.src.math.dmull libc.src.math.dsqrtl + libc.src.math.dsubl libc.src.math.erff libc.src.math.exp libc.src.math.exp10 @@ -599,7 +601,9 @@ if(LIBC_TYPES_HAS_FLOAT128) # math.h C23 _Float128 entrypoints libc.src.math.ceilf128 libc.src.math.copysignf128 + libc.src.math.dfmaf128 libc.src.math.dsqrtf128 + libc.src.math.dsubf128 libc.src.math.fabsf128 libc.src.math.fdimf128 libc.src.math.floorf128 diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt index 55f118395c22e..0f9097d0859cc 100644 --- a/libc/config/linux/arm/entrypoints.txt +++ b/libc/config/linux/arm/entrypoints.txt @@ -227,7 +227,9 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.cos libc.src.math.cosf libc.src.math.coshf + libc.src.math.dfmal libc.src.math.dsqrtl + libc.src.math.dsubl libc.src.math.erff libc.src.math.exp libc.src.math.exp10 diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index 597aeb361afe4..8293b7b2e3828 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -383,8 +383,10 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.cosf libc.src.math.coshf libc.src.math.cospif + libc.src.math.dfmal libc.src.math.dmull libc.src.math.dsqrtl + libc.src.math.dsubl libc.src.math.erff libc.src.math.exp libc.src.math.exp10 diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index f7813fc16ff7c..0f13cd02c8e20 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -383,8 +383,10 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.cosf libc.src.math.coshf libc.src.math.cospif + libc.src.math.dfmal libc.src.math.dmull libc.src.math.dsqrtl + libc.src.math.dsubl libc.src.math.erff libc.src.math.exp libc.src.math.exp10 @@ -645,8 +647,10 @@ if(LIBC_TYPES_HAS_FLOAT128) libc.src.math.canonicalizef128 libc.src.math.ceilf128 libc.src.math.copysignf128 + libc.src.math.dfmaf128 libc.src.math.dmulf128 libc.src.math.dsqrtf128 + libc.src.math.dsubf128 libc.src.math.fabsf128 libc.src.math.fdimf128 libc.src.math.floorf128 diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt index b6aced83c5815..b72cc09fa28f5 100644 --- a/libc/config/windows/entrypoints.txt +++ b/libc/config/windows/entrypoints.txt @@ -132,6 +132,8 @@ set(TARGET_LIBM_ENTRYPOINTS libc.src.math.cos libc.src.math.cosf libc.src.math.coshf + libc.src.math.dfmal + libc.src.math.dsubl libc.src.math.erff libc.src.math.exp libc.src.math.expf diff --git a/libc/docs/math/index.rst b/libc/docs/math/index.rst index f287c16fd01e2..07ce817bb7e64 100644 --- a/libc/docs/math/index.rst +++ b/libc/docs/math/index.rst @@ -118,11 +118,11 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | ddiv | N/A | N/A | | N/A | | 7.12.14.4 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| dfma | N/A | N/A | | N/A | | 7.12.14.5 | F.10.11 | +| dfma | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.5 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | dmul | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.3 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| dsub | N/A | N/A | | N/A | | 7.12.14.2 | F.10.11 | +| dsub | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.2 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | f16add | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.1 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ diff --git a/libc/spec/llvm_libc_ext.td b/libc/spec/llvm_libc_ext.td index f3a8862574ac5..1bd001f414187 100644 --- a/libc/spec/llvm_libc_ext.td +++ b/libc/spec/llvm_libc_ext.td @@ -57,7 +57,10 @@ def LLVMLibcExt : StandardSpec<"llvm_libc_ext"> { [], // Types [], // Enumerations [ + GuardedFunctionSpec<"dfmaf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, GuardedFunctionSpec<"dsqrtf128", RetValSpec, [ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + GuardedFunctionSpec<"dsubf128", RetValSpec, [ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + GuardedFunctionSpec<"f16add", RetValSpec, [ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, GuardedFunctionSpec<"f16addf", RetValSpec, [ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, diff --git a/libc/spec/stdc.td b/libc/spec/stdc.td index 0aae65308d33a..e02518c03cbf3 100644 --- a/libc/spec/stdc.td +++ b/libc/spec/stdc.td @@ -397,6 +397,9 @@ def StdC : StandardSpec<"stdc"> { GuardedFunctionSpec<"ceilf16", RetValSpec, [ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, GuardedFunctionSpec<"ceilf128", RetValSpec, [ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + FunctionSpec<"dfmal", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, + FunctionSpec<"dsubl", RetValSpec, [ArgSpec, ArgSpec]>, + FunctionSpec<"fabs", RetValSpec, [ArgSpec], [ConstAttr]>, FunctionSpec<"fabsf", RetValSpec, [ArgSpec]>, FunctionSpec<"fabsl", RetValSpec, [ArgSpec]>, diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt index 25aef3f72e3cd..030fb4a1bdd5c 100644 --- a/libc/src/math/CMakeLists.txt +++ b/libc/src/math/CMakeLists.txt @@ -89,9 +89,15 @@ add_math_entrypoint_object(cospif) add_math_entrypoint_object(dmull) add_math_entrypoint_object(dmulf128) +add_math_entrypoint_object(dfmal) +add_math_entrypoint_object(dfmaf128) + add_math_entrypoint_object(dsqrtl) add_math_entrypoint_object(dsqrtf128) +add_math_entrypoint_object(dsubl) +add_math_entrypoint_object(dsubf128) + add_math_entrypoint_object(erf) add_math_entrypoint_object(erff) diff --git a/libc/src/math/dfmaf128.h b/libc/src/math/dfmaf128.h new file mode 100644 index 0000000000000..1b2e72851c806 --- /dev/null +++ b/libc/src/math/dfmaf128.h @@ -0,0 +1,21 @@ +//===-- Implementation header for dfmaf128 ----------------------*- 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_DFMAF128_H +#define LLVM_LIBC_SRC_MATH_DFMAF128_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +double dfmaf128(float128 x, float128 y, float128 z); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_DFMAF128_H diff --git a/libc/src/math/dfmal.h b/libc/src/math/dfmal.h new file mode 100644 index 0000000000000..e0867305b1286 --- /dev/null +++ b/libc/src/math/dfmal.h @@ -0,0 +1,20 @@ +//===-- Implementation header for dfmal -------------------------*- 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_DFMAL_H +#define LLVM_LIBC_SRC_MATH_DFMAL_H + +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +double dfmal(long double x, long double y, long double z); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_DFMAL_H diff --git a/libc/src/math/dsubf128.h b/libc/src/math/dsubf128.h new file mode 100644 index 0000000000000..8ac58a916f0de --- /dev/null +++ b/libc/src/math/dsubf128.h @@ -0,0 +1,21 @@ +//===-- Implementation header for dsubf128 ----------------------*- 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_DSUBF128_H +#define LLVM_LIBC_SRC_MATH_DSUBF128_H + +#include "src/__support/macros/config.h" +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE_DECL { + +double dsubf128(float128 x, float128 y); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_DSUBF128_H diff --git a/libc/src/math/dsubl.h b/libc/src/math/dsubl.h new file mode 100644 index 0000000000000..a512bbe06d4e8 --- /dev/null +++ b/libc/src/math/dsubl.h @@ -0,0 +1,20 @@ +//===-- Implementation header for dsubl -------------------------*- 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_DSUBL_H +#define LLVM_LIBC_SRC_MATH_DSUBL_H + +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +double dsubl(long double x, long double y); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_DSUBL_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index ef96d6c4c2f37..fea64e9a9c601 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -129,6 +129,31 @@ add_entrypoint_object( libc.src.__support.FPUtil.nearest_integer_operations ) +add_entrypoint_object( + dfmaf128 + SRCS + dfmaf128.cpp + HDRS + ../dfmaf128.h + DEPENDS + libc.src.__support.FPUtil.fma + libc.src.__support.macros.properties.types + COMPILE_OPTIONS + -O3 +) + +add_entrypoint_object( + dfmal + SRCS + dfmal.cpp + HDRS + ../dfmal.h + DEPENDS + libc.src.__support.FPUtil.fma + COMPILE_OPTIONS + -O3 +) + add_entrypoint_object( dsqrtl SRCS @@ -154,6 +179,32 @@ add_entrypoint_object( -O3 ) + +add_entrypoint_object( + dsubf128 + SRCS + dsubf128.cpp + HDRS + ../dsubf128.h + DEPENDS + libc.src.__support.FPUtil.generic.add_sub + libc.src.__support.macros.properties.types + COMPILE_OPTIONS + -O3 +) + +add_entrypoint_object( + dsubl + SRCS + dsubl.cpp + HDRS + ../dsubl.h + DEPENDS + libc.src.__support.FPUtil.generic.add_sub + COMPILE_OPTIONS + -O3 +) + add_header_library( range_reduction HDRS diff --git a/libc/src/math/generic/dfmaf128.cpp b/libc/src/math/generic/dfmaf128.cpp new file mode 100644 index 0000000000000..b6e1bdb085cf7 --- /dev/null +++ b/libc/src/math/generic/dfmaf128.cpp @@ -0,0 +1,25 @@ +//===-- Implementation of dfmaf128 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SRC_MATH_DFMAf128_H +#define LLVM_LIBC_SRC_MATH_DFMAf128_H + +#include "src/math/dfmaf128.h" +#include "src/__support/FPUtil/FMA.h" +#include "src/__support/common.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(double, dfmaf128, (float128 x, float128 y, float128 z)) { + return fputil::fma(x, y, z); +} + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_MATH_DFMAf128_H diff --git a/libc/src/math/generic/dfmal.cpp b/libc/src/math/generic/dfmal.cpp new file mode 100644 index 0000000000000..02e0ce84ace83 --- /dev/null +++ b/libc/src/math/generic/dfmal.cpp @@ -0,0 +1,21 @@ +//===-- Implementation of dfmal 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/dfmal.h" +#include "src/__support/FPUtil/FMA.h" +#include "src/__support/common.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(double, dfmal, + (long double x, long double y, long double z)) { + return fputil::fma(x, y, z); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/dsubf128.cpp b/libc/src/math/generic/dsubf128.cpp new file mode 100644 index 0000000000000..1b2f1214b3a6f --- /dev/null +++ b/libc/src/math/generic/dsubf128.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of dsubf128 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/dsubf128.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(double, dsubf128, (float128 x, float128 y)) { + return fputil::generic::sub(x, y); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/math/generic/dsubl.cpp b/libc/src/math/generic/dsubl.cpp new file mode 100644 index 0000000000000..8b567d0869d2a --- /dev/null +++ b/libc/src/math/generic/dsubl.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of dsubl 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/dsubl.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(double, dsubl, (long double x, long double y)) { + return fputil::generic::sub(x, y); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt index 3ad5d98858165..8b447e97bb700 100644 --- a/libc/test/src/math/CMakeLists.txt +++ b/libc/test/src/math/CMakeLists.txt @@ -2368,6 +2368,35 @@ add_fp_unittest( libc.src.stdlib.srand ) +add_fp_unittest( + dfmal_test + NEED_MPFR + SUITE + libc-math-unittests + SRCS + dfmal_test.cpp + HDRS + FmaTest.h + DEPENDS + libc.src.math.dfmal + libc.src.stdlib.rand + libc.src.stdlib.srand +) + +add_fp_unittest( + dsubl_test + NEED_MPFR + SUITE + libc-math-unittests + SRCS + dsubl_test.cpp + HDRS + SubTest.h + DEPENDS + libc.src.math.dsubl +) + + add_subdirectory(generic) add_subdirectory(smoke) diff --git a/libc/test/src/math/dfmal_test.cpp b/libc/test/src/math/dfmal_test.cpp new file mode 100644 index 0000000000000..3c38f5eb7db9d --- /dev/null +++ b/libc/test/src/math/dfmal_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for dfmal -----------------------------------------------===// +// +// 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 "FmaTest.h" + +#include "src/math/dfmal.h" + +LIST_NARROWING_FMA_TESTS(double, long double, LIBC_NAMESPACE::dfmal) diff --git a/libc/test/src/math/dsubl_test.cpp b/libc/test/src/math/dsubl_test.cpp new file mode 100644 index 0000000000000..98846e0b6e3b3 --- /dev/null +++ b/libc/test/src/math/dsubl_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for dsubl -----------------------------------------------===// +// +// 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 "SubTest.h" + +#include "src/math/dsubl.h" + +LIST_SUB_TESTS(double, long double, LIBC_NAMESPACE::dsubl) diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index 1b3c51739c0fe..dc687e8c0f75e 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -358,6 +358,58 @@ add_fp_unittest( libc.src.__support.FPUtil.fp_bits ) +add_fp_unittest( + dfmal_test + SUITE + libc-math-smoke-tests + SRCS + dfmal_test.cpp + HDRS + FmaTest.h + DEPENDS + libc.src.math.dfmal +) + +add_fp_unittest( + dfmaf128_test + SUITE + libc-math-smoke-tests + SRCS + dfmaf128_test.cpp + HDRS + FmaTest.h + DEPENDS + libc.src.math.dfmaf128 +) + +add_fp_unittest( + dsubl_test + SUITE + libc-math-smoke-tests + SRCS + dsubl_test.cpp + HDRS + SubTest.h + DEPENDS + libc.src.errno.errno + libc.hdr.fenv_macros + libc.src.math.dsubl +) + +add_fp_unittest( + dsubf128_test + SUITE + libc-math-smoke-tests + SRCS + dsubf128_test.cpp + HDRS + SubTest.h + DEPENDS + libc.hdr.errno_macros + libc.hdr.fenv_macros + libc.src.math.dsubf128 +) + add_fp_unittest( floor_test SUITE @@ -3760,8 +3812,8 @@ add_fp_unittest( HDRS SubTest.h DEPENDS + libc.hdr.errno_macros libc.hdr.fenv_macros - libc.src.__support.FPUtil.basic_operations libc.src.math.f16sub ) @@ -3774,8 +3826,8 @@ add_fp_unittest( HDRS SubTest.h DEPENDS + libc.hdr.errno_macros libc.hdr.fenv_macros - libc.src.__support.FPUtil.basic_operations libc.src.math.f16subf ) @@ -3788,8 +3840,8 @@ add_fp_unittest( HDRS SubTest.h DEPENDS + libc.hdr.errno_macros libc.hdr.fenv_macros - libc.src.__support.FPUtil.basic_operations libc.src.math.f16subl ) @@ -3802,8 +3854,8 @@ add_fp_unittest( HDRS SubTest.h DEPENDS + libc.hdr.errno_macros libc.hdr.fenv_macros - libc.src.__support.FPUtil.basic_operations libc.src.math.f16subf128 ) diff --git a/libc/test/src/math/smoke/SubTest.h b/libc/test/src/math/smoke/SubTest.h index e5e04996affa8..9ee4220b38208 100644 --- a/libc/test/src/math/smoke/SubTest.h +++ b/libc/test/src/math/smoke/SubTest.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_TEST_SRC_MATH_SMOKE_SUBTEST_H #define LLVM_LIBC_TEST_SRC_MATH_SMOKE_SUBTEST_H +#include "hdr/errno_macros.h" #include "hdr/fenv_macros.h" -#include "src/__support/FPUtil/BasicOperations.h" #include "test/UnitTest/FEnvSafeTest.h" #include "test/UnitTest/FPMatcher.h" #include "test/UnitTest/Test.h" diff --git a/libc/test/src/math/smoke/dfmaf128_test.cpp b/libc/test/src/math/smoke/dfmaf128_test.cpp new file mode 100644 index 0000000000000..56c11747047b1 --- /dev/null +++ b/libc/test/src/math/smoke/dfmaf128_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for dfmaf128 --------------------------------------------===// +// +// 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 "FmaTest.h" + +#include "src/math/dfmaf128.h" + +LIST_NARROWING_FMA_TESTS(double, float128, LIBC_NAMESPACE::dfmaf128) diff --git a/libc/test/src/math/smoke/dfmal_test.cpp b/libc/test/src/math/smoke/dfmal_test.cpp new file mode 100644 index 0000000000000..3c38f5eb7db9d --- /dev/null +++ b/libc/test/src/math/smoke/dfmal_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for dfmal -----------------------------------------------===// +// +// 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 "FmaTest.h" + +#include "src/math/dfmal.h" + +LIST_NARROWING_FMA_TESTS(double, long double, LIBC_NAMESPACE::dfmal) diff --git a/libc/test/src/math/smoke/dsubf128_test.cpp b/libc/test/src/math/smoke/dsubf128_test.cpp new file mode 100644 index 0000000000000..e496cdd245070 --- /dev/null +++ b/libc/test/src/math/smoke/dsubf128_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for dsubf128 --------------------------------------------===// +// +// 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 "SubTest.h" + +#include "src/math/dsubf128.h" + +LIST_SUB_TESTS(double, float128, LIBC_NAMESPACE::dsubf128) diff --git a/libc/test/src/math/smoke/dsubl_test.cpp b/libc/test/src/math/smoke/dsubl_test.cpp new file mode 100644 index 0000000000000..98846e0b6e3b3 --- /dev/null +++ b/libc/test/src/math/smoke/dsubl_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for dsubl -----------------------------------------------===// +// +// 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 "SubTest.h" + +#include "src/math/dsubl.h" + +LIST_SUB_TESTS(double, long double, LIBC_NAMESPACE::dsubl) diff --git a/libc/utils/MPFRWrapper/MPFRUtils.cpp b/libc/utils/MPFRWrapper/MPFRUtils.cpp index f88ee2af35c52..4263c9dccb6a5 100644 --- a/libc/utils/MPFRWrapper/MPFRUtils.cpp +++ b/libc/utils/MPFRWrapper/MPFRUtils.cpp @@ -1086,6 +1086,9 @@ template void explain_ternary_operation_one_output_error(Operation, const TernaryInput &, long double, double, RoundingMode); + +template void explain_ternary_operation_one_output_error( + Operation, const TernaryInput &, double, double, RoundingMode); #ifdef LIBC_TYPES_HAS_FLOAT16 template void explain_ternary_operation_one_output_error( Operation, const TernaryInput &, float16, double, RoundingMode); @@ -1271,6 +1274,9 @@ template bool compare_ternary_operation_one_output(Operation, const TernaryInput &, long double, double, RoundingMode); + +template bool compare_ternary_operation_one_output( + Operation, const TernaryInput &, double, double, RoundingMode); #ifdef LIBC_TYPES_HAS_FLOAT16 template bool compare_ternary_operation_one_output(Operation, const TernaryInput &,