diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 7ea70cad55a561..381061ce3fcbf0 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -537,6 +537,7 @@ if(LIBC_TYPES_HAS_FLOAT16) # libc.src.math.nexttowardf16 libc.src.math.nextupf16 libc.src.math.remainderf16 + libc.src.math.remquof16 libc.src.math.rintf16 libc.src.math.roundf16 libc.src.math.roundevenf16 diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index d2b73066ab04c4..e99960b12441da 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -567,6 +567,7 @@ if(LIBC_TYPES_HAS_FLOAT16) libc.src.math.nexttowardf16 libc.src.math.nextupf16 libc.src.math.remainderf16 + libc.src.math.remquof16 libc.src.math.rintf16 libc.src.math.roundf16 libc.src.math.roundevenf16 diff --git a/libc/docs/math/index.rst b/libc/docs/math/index.rst index 23e1555b531be9..f83a646c34b57c 100644 --- a/libc/docs/math/index.rst +++ b/libc/docs/math/index.rst @@ -200,7 +200,7 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | remainder | |check| | |check| | |check| | |check| | | 7.12.10.2 | F.10.7.2 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| remquo | |check| | |check| | |check| | | |check| | 7.12.10.3 | F.10.7.3 | +| remquo | |check| | |check| | |check| | |check| | |check| | 7.12.10.3 | F.10.7.3 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | rint | |check| | |check| | |check| | |check| | |check| | 7.12.9.4 | F.10.6.4 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ diff --git a/libc/spec/stdc.td b/libc/spec/stdc.td index 430ed405f3fbea..34169948fc6d27 100644 --- a/libc/spec/stdc.td +++ b/libc/spec/stdc.td @@ -586,10 +586,11 @@ def StdC : StandardSpec<"stdc"> { FunctionSpec<"remainderl", RetValSpec, [ArgSpec, ArgSpec]>, GuardedFunctionSpec<"remainderf16", RetValSpec, [ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, - FunctionSpec<"remquof", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, - GuardedFunctionSpec<"remquof128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, FunctionSpec<"remquo", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, + FunctionSpec<"remquof", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"remquol", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, + GuardedFunctionSpec<"remquof16", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, + GuardedFunctionSpec<"remquof128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, FunctionSpec<"round", RetValSpec, [ArgSpec]>, FunctionSpec<"roundf", RetValSpec, [ArgSpec]>, diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt index 6947e10bceadca..82dfdaf479ff00 100644 --- a/libc/src/math/CMakeLists.txt +++ b/libc/src/math/CMakeLists.txt @@ -321,6 +321,7 @@ add_math_entrypoint_object(remquo) add_math_entrypoint_object(remquof) add_math_entrypoint_object(remquof128) add_math_entrypoint_object(remquol) +add_math_entrypoint_object(remquof16) add_math_entrypoint_object(rint) add_math_entrypoint_object(rintf) diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index 24bf06ffab2c3e..c56ad016821190 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -2534,6 +2534,19 @@ add_entrypoint_object( -O2 ) +add_entrypoint_object( + remquof16 + SRCS + remquof16.cpp + HDRS + ../remquof16.h + DEPENDS + libc.src.__support.macros.properties.types + libc.src.__support.FPUtil.division_and_remainder_operations + COMPILE_OPTIONS + -O2 +) + add_entrypoint_object( remainderf SRCS diff --git a/libc/src/math/generic/remquof16.cpp b/libc/src/math/generic/remquof16.cpp new file mode 100644 index 00000000000000..a373bfa58651bb --- /dev/null +++ b/libc/src/math/generic/remquof16.cpp @@ -0,0 +1,19 @@ +//===-- Implementation of remquof16 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/remquof16.h" +#include "src/__support/FPUtil/DivisionAndRemainderOperations.h" +#include "src/__support/common.h" + +namespace LIBC_NAMESPACE { + +LLVM_LIBC_FUNCTION(float16, remquof16, (float16 x, float16 y, int *exp)) { + return fputil::remquo(x, y, *exp); +} + +} // namespace LIBC_NAMESPACE diff --git a/libc/src/math/remquof16.h b/libc/src/math/remquof16.h new file mode 100644 index 00000000000000..fee848c955a018 --- /dev/null +++ b/libc/src/math/remquof16.h @@ -0,0 +1,20 @@ +//===-- Implementation header for remquof16 ---------------------*- 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_REMQUOF16_H +#define LLVM_LIBC_SRC_MATH_REMQUOF16_H + +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE { + +float16 remquof16(float16 x, float16 y, int *exp); + +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC_MATH_REMQUOF16_H diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index 84aa76c0a08810..75e2bdd7be100a 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -2608,7 +2608,6 @@ add_fp_unittest( RemQuoTest.h DEPENDS libc.src.math.remquof - libc.src.__support.FPUtil.basic_operations libc.src.__support.FPUtil.fp_bits ) @@ -2636,7 +2635,6 @@ add_fp_unittest( RemQuoTest.h DEPENDS libc.src.math.remquo - libc.src.__support.FPUtil.basic_operations libc.src.__support.FPUtil.fp_bits ) @@ -2650,7 +2648,19 @@ add_fp_unittest( RemQuoTest.h DEPENDS libc.src.math.remquol - libc.src.__support.FPUtil.basic_operations + libc.src.__support.FPUtil.fp_bits +) + +add_fp_unittest( + remquof16_test + SUITE + libc-math-smoke-tests + SRCS + remquof16_test.cpp + HDRS + RemQuoTest.h + DEPENDS + libc.src.math.remquof16 libc.src.__support.FPUtil.fp_bits ) diff --git a/libc/test/src/math/smoke/RemQuoTest.h b/libc/test/src/math/smoke/RemQuoTest.h index 43eee3d38e4495..e9263263dfb247 100644 --- a/libc/test/src/math/smoke/RemQuoTest.h +++ b/libc/test/src/math/smoke/RemQuoTest.h @@ -9,8 +9,6 @@ #ifndef LLVM_LIBC_TEST_SRC_MATH_REMQUOTEST_H #define LLVM_LIBC_TEST_SRC_MATH_REMQUOTEST_H -#include "hdr/math_macros.h" -#include "src/__support/FPUtil/BasicOperations.h" #include "src/__support/FPUtil/FPBits.h" #include "test/UnitTest/FEnvSafeTest.h" #include "test/UnitTest/FPMatcher.h" diff --git a/libc/test/src/math/smoke/remquof16_test.cpp b/libc/test/src/math/smoke/remquof16_test.cpp new file mode 100644 index 00000000000000..18f2aba71aabe3 --- /dev/null +++ b/libc/test/src/math/smoke/remquof16_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for remquof16 -------------------------------------------===// +// +// 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 "RemQuoTest.h" + +#include "src/math/remquof16.h" + +LIST_REMQUO_TESTS(float16, LIBC_NAMESPACE::remquof16)