[libc][math] Refactor ldexpf128 implementation to header-only in src/__support/math folder. (#147895)
Part of #147386 in preparation for: https://discourse.llvm.org/t/rfc-make-clang-builtin-math-functions-constexpr-with-llvm-libc-to-support-c-23-constexpr-math-functions/86450
This commit is contained in:
parent
e074044a12
commit
0ad2574de7
@ -16,5 +16,6 @@
|
||||
#include "math/frexpf.h"
|
||||
#include "math/frexpf128.h"
|
||||
#include "math/frexpf16.h"
|
||||
#include "math/ldexpf128.h"
|
||||
|
||||
#endif // LLVM_LIBC_SHARED_MATH_H
|
||||
|
||||
29
libc/shared/math/ldexpf128.h
Normal file
29
libc/shared/math/ldexpf128.h
Normal file
@ -0,0 +1,29 @@
|
||||
//===-- Shared ldexpf128 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_LDEXPF128_H
|
||||
#define LLVM_LIBC_SHARED_MATH_LDEXPF128_H
|
||||
|
||||
#include "include/llvm-libc-types/float128.h"
|
||||
|
||||
#ifdef LIBC_TYPES_HAS_FLOAT128
|
||||
|
||||
#include "shared/libc_common.h"
|
||||
#include "src/__support/math/ldexpf128.h"
|
||||
|
||||
namespace LIBC_NAMESPACE_DECL {
|
||||
namespace shared {
|
||||
|
||||
using math::ldexpf128;
|
||||
|
||||
} // namespace shared
|
||||
} // namespace LIBC_NAMESPACE_DECL
|
||||
|
||||
#endif // LIBC_TYPES_HAS_FLOAT128
|
||||
|
||||
#endif // LLVM_LIBC_SHARED_MATH_LDEXPF128_H
|
||||
@ -82,3 +82,13 @@ add_header_library(
|
||||
DEPENDS
|
||||
libc.src.__support.FPUtil.manipulation_functions
|
||||
)
|
||||
|
||||
add_header_library(
|
||||
ldexpf128
|
||||
HDRS
|
||||
ldexpf128.h
|
||||
DEPENDS
|
||||
libc.src.__support.macros.properties.types
|
||||
libc.src.__support.FPUtil.manipulation_functions
|
||||
libc.include.llvm-libc-types.float128
|
||||
)
|
||||
|
||||
34
libc/src/__support/math/ldexpf128.h
Normal file
34
libc/src/__support/math/ldexpf128.h
Normal file
@ -0,0 +1,34 @@
|
||||
//===-- Implementation header for ldexpf ------------------------*- 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_LDEXPF128_H
|
||||
#define LLVM_LIBC_SRC___SUPPORT_MATH_LDEXPF128_H
|
||||
|
||||
#include "include/llvm-libc-types/float128.h"
|
||||
|
||||
#ifdef LIBC_TYPES_HAS_FLOAT128
|
||||
|
||||
#include "src/__support/FPUtil/ManipulationFunctions.h"
|
||||
#include "src/__support/common.h"
|
||||
#include "src/__support/macros/config.h"
|
||||
|
||||
namespace LIBC_NAMESPACE_DECL {
|
||||
|
||||
namespace math {
|
||||
|
||||
static constexpr float128 ldexpf128(float128 x, int exp) {
|
||||
return fputil::ldexp(x, exp);
|
||||
}
|
||||
|
||||
} // namespace math
|
||||
|
||||
} // namespace LIBC_NAMESPACE_DECL
|
||||
|
||||
#endif // LIBC_TYPES_HAS_FLOAT128
|
||||
|
||||
#endif // LLVM_LIBC_SRC___SUPPORT_MATH_LDEXPF128_H
|
||||
@ -1944,8 +1944,7 @@ add_entrypoint_object(
|
||||
HDRS
|
||||
../ldexpf128.h
|
||||
DEPENDS
|
||||
libc.src.__support.macros.properties.types
|
||||
libc.src.__support.FPUtil.manipulation_functions
|
||||
libc.src.__support.math.ldexpf128
|
||||
)
|
||||
|
||||
add_object_library(
|
||||
|
||||
@ -7,14 +7,13 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "src/math/ldexpf128.h"
|
||||
#include "src/__support/FPUtil/ManipulationFunctions.h"
|
||||
#include "src/__support/common.h"
|
||||
#include "src/__support/macros/config.h"
|
||||
|
||||
#include "src/__support/math/ldexpf128.h"
|
||||
|
||||
namespace LIBC_NAMESPACE_DECL {
|
||||
|
||||
LLVM_LIBC_FUNCTION(float128, ldexpf128, (float128 x, int exp)) {
|
||||
return fputil::ldexp(x, exp);
|
||||
return math::ldexpf128(x, exp);
|
||||
}
|
||||
|
||||
} // namespace LIBC_NAMESPACE_DECL
|
||||
|
||||
@ -2177,6 +2177,16 @@ libc_support_library(
|
||||
],
|
||||
)
|
||||
|
||||
libc_support_library(
|
||||
name = "__support_math_ldexpf128",
|
||||
hdrs = ["src/__support/math/ldexpf128.h"],
|
||||
deps = [
|
||||
":__support_fputil_manipulation_functions",
|
||||
":__support_macros_properties_types",
|
||||
":llvm_libc_types_float128"
|
||||
],
|
||||
)
|
||||
|
||||
############################### complex targets ################################
|
||||
|
||||
libc_function(
|
||||
@ -3330,7 +3340,12 @@ libc_math_function(name = "ldexpf")
|
||||
|
||||
libc_math_function(name = "ldexpl")
|
||||
|
||||
libc_math_function(name = "ldexpf128")
|
||||
libc_math_function(
|
||||
name = "ldexpf128",
|
||||
additional_deps = [
|
||||
":__support_math_ldexpf128",
|
||||
],
|
||||
)
|
||||
|
||||
libc_math_function(name = "ldexpf16")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user