xref: /llvm-project/libcxx/include/__math/hyperbolic_functions.h (revision f3589d25fe09a9ec5d05d9ac389109a94f3f6187)
16553608aSNikolas Klauser //===----------------------------------------------------------------------===//
26553608aSNikolas Klauser //
36553608aSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
46553608aSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
56553608aSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66553608aSNikolas Klauser //
76553608aSNikolas Klauser //===----------------------------------------------------------------------===//
86553608aSNikolas Klauser 
96553608aSNikolas Klauser #ifndef _LIBCPP___MATH_HYPERBOLIC_FUNCTIONS_H
106553608aSNikolas Klauser #define _LIBCPP___MATH_HYPERBOLIC_FUNCTIONS_H
116553608aSNikolas Klauser 
126553608aSNikolas Klauser #include <__config>
136553608aSNikolas Klauser #include <__type_traits/enable_if.h>
146553608aSNikolas Klauser #include <__type_traits/is_integral.h>
156553608aSNikolas Klauser 
166553608aSNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
176553608aSNikolas Klauser #  pragma GCC system_header
186553608aSNikolas Klauser #endif
196553608aSNikolas Klauser 
206553608aSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD
216553608aSNikolas Klauser 
226553608aSNikolas Klauser namespace __math {
236553608aSNikolas Klauser 
246553608aSNikolas Klauser // cosh
256553608aSNikolas Klauser 
cosh(float __x)266553608aSNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI float cosh(float __x) _NOEXCEPT { return __builtin_coshf(__x); }
276553608aSNikolas Klauser 
286553608aSNikolas Klauser template <class = int>
cosh(double __x)296553608aSNikolas Klauser _LIBCPP_HIDE_FROM_ABI double cosh(double __x) _NOEXCEPT {
306553608aSNikolas Klauser   return __builtin_cosh(__x);
316553608aSNikolas Klauser }
326553608aSNikolas Klauser 
cosh(long double __x)336553608aSNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI long double cosh(long double __x) _NOEXCEPT { return __builtin_coshl(__x); }
346553608aSNikolas Klauser 
35*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0>
cosh(_A1 __x)36*f3589d25SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI double cosh(_A1 __x) _NOEXCEPT {
370e4d812fSNikolas Klauser   return __builtin_cosh((double)__x);
380e4d812fSNikolas Klauser }
396553608aSNikolas Klauser 
406553608aSNikolas Klauser // sinh
416553608aSNikolas Klauser 
sinh(float __x)426553608aSNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI float sinh(float __x) _NOEXCEPT { return __builtin_sinhf(__x); }
436553608aSNikolas Klauser 
446553608aSNikolas Klauser template <class = int>
sinh(double __x)456553608aSNikolas Klauser _LIBCPP_HIDE_FROM_ABI double sinh(double __x) _NOEXCEPT {
466553608aSNikolas Klauser   return __builtin_sinh(__x);
476553608aSNikolas Klauser }
486553608aSNikolas Klauser 
sinh(long double __x)496553608aSNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI long double sinh(long double __x) _NOEXCEPT { return __builtin_sinhl(__x); }
506553608aSNikolas Klauser 
51*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0>
sinh(_A1 __x)52*f3589d25SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI double sinh(_A1 __x) _NOEXCEPT {
530e4d812fSNikolas Klauser   return __builtin_sinh((double)__x);
540e4d812fSNikolas Klauser }
556553608aSNikolas Klauser 
566553608aSNikolas Klauser // tanh
576553608aSNikolas Klauser 
tanh(float __x)586553608aSNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI float tanh(float __x) _NOEXCEPT { return __builtin_tanhf(__x); }
596553608aSNikolas Klauser 
606553608aSNikolas Klauser template <class = int>
tanh(double __x)616553608aSNikolas Klauser _LIBCPP_HIDE_FROM_ABI double tanh(double __x) _NOEXCEPT {
626553608aSNikolas Klauser   return __builtin_tanh(__x);
636553608aSNikolas Klauser }
646553608aSNikolas Klauser 
tanh(long double __x)656553608aSNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI long double tanh(long double __x) _NOEXCEPT { return __builtin_tanhl(__x); }
666553608aSNikolas Klauser 
67*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0>
tanh(_A1 __x)68*f3589d25SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI double tanh(_A1 __x) _NOEXCEPT {
690e4d812fSNikolas Klauser   return __builtin_tanh((double)__x);
700e4d812fSNikolas Klauser }
716553608aSNikolas Klauser 
726553608aSNikolas Klauser } // namespace __math
736553608aSNikolas Klauser 
746553608aSNikolas Klauser _LIBCPP_END_NAMESPACE_STD
756553608aSNikolas Klauser 
766553608aSNikolas Klauser #endif // _LIBCPP___MATH_HYPERBOLIC_FUNCTIONS_H
77