xref: /llvm-project/libc/src/math/nvptx/nvptx.h (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
1 //===-- NVPTX specific definitions for math support -----------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIBC_SRC_MATH_NVPTX_NVPTX_H
10 #define LLVM_LIBC_SRC_MATH_NVPTX_NVPTX_H
11 
12 #include "declarations.h"
13 
14 #include "src/__support/macros/attributes.h"
15 #include "src/__support/macros/config.h"
16 
17 namespace LIBC_NAMESPACE_DECL {
18 namespace internal {
19 LIBC_INLINE double acos(double x) { return __nv_acos(x); }
20 LIBC_INLINE float acosf(float x) { return __nv_acosf(x); }
21 LIBC_INLINE double acosh(double x) { return __nv_acosh(x); }
22 LIBC_INLINE float acoshf(float x) { return __nv_acoshf(x); }
23 LIBC_INLINE double asin(double x) { return __nv_asin(x); }
24 LIBC_INLINE float asinf(float x) { return __nv_asinf(x); }
25 LIBC_INLINE double asinh(double x) { return __nv_asinh(x); }
26 LIBC_INLINE float asinhf(float x) { return __nv_asinhf(x); }
27 LIBC_INLINE double atan2(double x, double y) { return __nv_atan2(x, y); }
28 LIBC_INLINE float atan2f(float x, float y) { return __nv_atan2f(x, y); }
29 LIBC_INLINE double atan(double x) { return __nv_atan(x); }
30 LIBC_INLINE float atanf(float x) { return __nv_atanf(x); }
31 LIBC_INLINE double atanh(double x) { return __nv_atanh(x); }
32 LIBC_INLINE float atanhf(float x) { return __nv_atanhf(x); }
33 LIBC_INLINE double cos(double x) { return __nv_cos(x); }
34 LIBC_INLINE float cosf(float x) { return __nv_cosf(x); }
35 LIBC_INLINE double cosh(double x) { return __nv_cosh(x); }
36 LIBC_INLINE float coshf(float x) { return __nv_coshf(x); }
37 LIBC_INLINE double erf(double x) { return __nv_erf(x); }
38 LIBC_INLINE float erff(float x) { return __nv_erff(x); }
39 LIBC_INLINE double exp(double x) { return __nv_exp(x); }
40 LIBC_INLINE float expf(float x) { return __nv_expf(x); }
41 LIBC_INLINE double exp2(double x) { return __nv_exp2(x); }
42 LIBC_INLINE float exp2f(float x) { return __nv_exp2f(x); }
43 LIBC_INLINE double exp10(double x) { return __nv_exp10(x); }
44 LIBC_INLINE float exp10f(float x) { return __nv_exp10f(x); }
45 LIBC_INLINE double expm1(double x) { return __nv_expm1(x); }
46 LIBC_INLINE float expm1f(float x) { return __nv_expm1f(x); }
47 LIBC_INLINE double fdim(double x, double y) { return __nv_fdim(x, y); }
48 LIBC_INLINE float fdimf(float x, float y) { return __nv_fdimf(x, y); }
49 LIBC_INLINE double hypot(double x, double y) { return __nv_hypot(x, y); }
50 LIBC_INLINE float hypotf(float x, float y) { return __nv_hypotf(x, y); }
51 LIBC_INLINE int ilogb(double x) { return __nv_ilogb(x); }
52 LIBC_INLINE int ilogbf(float x) { return __nv_ilogbf(x); }
53 LIBC_INLINE double ldexp(double x, int i) { return __nv_ldexp(x, i); }
54 LIBC_INLINE float ldexpf(float x, int i) { return __nv_ldexpf(x, i); }
55 LIBC_INLINE long long llrint(double x) { return __nv_llrint(x); }
56 LIBC_INLINE long long llrintf(float x) { return __nv_llrintf(x); }
57 LIBC_INLINE double log10(double x) { return __nv_log10(x); }
58 LIBC_INLINE float log10f(float x) { return __nv_log10f(x); }
59 LIBC_INLINE double log1p(double x) { return __nv_log1p(x); }
60 LIBC_INLINE float log1pf(float x) { return __nv_log1pf(x); }
61 LIBC_INLINE double log2(double x) { return __nv_log2(x); }
62 LIBC_INLINE float log2f(float x) { return __nv_log2f(x); }
63 LIBC_INLINE double log(double x) { return __nv_log(x); }
64 LIBC_INLINE float logf(float x) { return __nv_logf(x); }
65 LIBC_INLINE long lrint(double x) { return __nv_lrint(x); }
66 LIBC_INLINE long lrintf(float x) { return __nv_lrintf(x); }
67 LIBC_INLINE double nextafter(double x, double y) {
68   return __nv_nextafter(x, y);
69 }
70 LIBC_INLINE float nextafterf(float x, float y) { return __nv_nextafterf(x, y); }
71 LIBC_INLINE double pow(double x, double y) { return __nv_pow(x, y); }
72 LIBC_INLINE float powf(float x, float y) { return __nv_powf(x, y); }
73 LIBC_INLINE double sin(double x) { return __nv_sin(x); }
74 LIBC_INLINE float sinf(float x) { return __nv_sinf(x); }
75 LIBC_INLINE void sincos(double x, double *sinptr, double *cosptr) {
76   return __nv_sincos(x, sinptr, cosptr);
77 }
78 LIBC_INLINE void sincosf(float x, float *sinptr, float *cosptr) {
79   return __nv_sincosf(x, sinptr, cosptr);
80 }
81 LIBC_INLINE double sinh(double x) { return __nv_sinh(x); }
82 LIBC_INLINE float sinhf(float x) { return __nv_sinhf(x); }
83 LIBC_INLINE double tan(double x) { return __nv_tan(x); }
84 LIBC_INLINE float tanf(float x) { return __nv_tanf(x); }
85 LIBC_INLINE double tanh(double x) { return __nv_tanh(x); }
86 LIBC_INLINE float tanhf(float x) { return __nv_tanhf(x); }
87 LIBC_INLINE double scalbn(double x, int i) { return __nv_scalbn(x, i); }
88 LIBC_INLINE float scalbnf(float x, int i) { return __nv_scalbnf(x, i); }
89 LIBC_INLINE double frexp(double x, int *i) { return __nv_frexp(x, i); }
90 LIBC_INLINE float frexpf(float x, int *i) { return __nv_frexpf(x, i); }
91 LIBC_INLINE double remquo(double x, double y, int *i) {
92   return __nv_remquo(x, y, i);
93 }
94 LIBC_INLINE float remquof(float x, float y, int *i) {
95   return __nv_remquof(x, y, i);
96 }
97 LIBC_INLINE double tgamma(double x) { return __nv_tgamma(x); }
98 LIBC_INLINE float tgammaf(float x) { return __nv_tgammaf(x); }
99 
100 } // namespace internal
101 } // namespace LIBC_NAMESPACE_DECL
102 
103 #endif // LLVM_LIBC_SRC_MATH_NVPTX_NVPTX_H
104