Linux premium71.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
LiteSpeed
Server IP : 198.187.29.8 & Your IP : 216.73.216.95
Domains :
Cant Read [ /etc/named.conf ]
User : cleahvkv
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
lib64 /
llvm17 /
lib /
clang /
17 /
include /
Delete
Unzip
Name
Size
Permission
Date
Action
cuda_wrappers
[ DIR ]
drwxr-xr-x
2025-06-02 12:56
llvm_libc_wrappers
[ DIR ]
drwxr-xr-x
2025-06-02 12:56
openmp_wrappers
[ DIR ]
drwxr-xr-x
2025-06-02 12:56
ppc_wrappers
[ DIR ]
drwxr-xr-x
2025-06-02 12:56
__clang_cuda_builtin_vars.h
4.78
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_cmath.h
18.06
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_complex_builtins.h
9.36
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_device_functions.h
56.68
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_intrinsics.h
29.93
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_libdevice_declares.h
21.87
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_math.h
15.99
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_math_forward_declares.h
8.27
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_runtime_wrapper.h
17.61
KB
-rw-r--r--
2023-11-28 08:52
__clang_cuda_texture_intrinsics.h
31.86
KB
-rw-r--r--
2023-11-28 08:52
__clang_hip_cmath.h
26.34
KB
-rw-r--r--
2023-11-28 08:52
__clang_hip_libdevice_declares.h
19.87
KB
-rw-r--r--
2023-11-28 08:52
__clang_hip_math.h
31.96
KB
-rw-r--r--
2023-11-28 08:52
__clang_hip_runtime_wrapper.h
4.65
KB
-rw-r--r--
2023-11-28 08:52
__clang_hip_stdlib.h
1.19
KB
-rw-r--r--
2023-11-28 08:52
__stddef_max_align_t.h
857
B
-rw-r--r--
2023-11-28 08:52
__wmmintrin_aes.h
5.15
KB
-rw-r--r--
2023-11-28 08:52
__wmmintrin_pclmul.h
1.99
KB
-rw-r--r--
2023-11-28 08:52
adxintrin.h
7.37
KB
-rw-r--r--
2023-11-28 08:52
altivec.h
697.32
KB
-rw-r--r--
2023-11-28 08:52
ammintrin.h
7.54
KB
-rw-r--r--
2023-11-28 08:52
amxcomplexintrin.h
6.81
KB
-rw-r--r--
2023-11-28 08:52
amxfp16intrin.h
1.82
KB
-rw-r--r--
2023-11-28 08:52
amxintrin.h
21.12
KB
-rw-r--r--
2023-11-28 08:52
arm64intr.h
993
B
-rw-r--r--
2023-11-28 08:52
arm_acle.h
25.66
KB
-rw-r--r--
2023-11-28 08:52
arm_bf16.h
548
B
-rw-r--r--
2024-11-06 08:03
arm_cde.h
32.67
KB
-rw-r--r--
2024-11-06 08:03
arm_cmse.h
6.21
KB
-rw-r--r--
2023-11-28 08:52
arm_fp16.h
16.92
KB
-rw-r--r--
2024-11-06 08:03
arm_mve.h
1.48
MB
-rw-r--r--
2024-11-06 08:03
arm_neon.h
2.45
MB
-rw-r--r--
2024-11-06 08:03
arm_neon_sve_bridge.h
9.48
KB
-rw-r--r--
2023-11-28 08:52
arm_sme_draft_spec_subject_to_change.h
60.2
KB
-rw-r--r--
2024-11-06 08:03
arm_sve.h
1.51
MB
-rw-r--r--
2024-11-06 08:03
armintr.h
843
B
-rw-r--r--
2023-11-28 08:52
avx2intrin.h
186.96
KB
-rw-r--r--
2023-11-28 08:52
avx512bf16intrin.h
10.51
KB
-rw-r--r--
2023-11-28 08:52
avx512bitalgintrin.h
2.41
KB
-rw-r--r--
2023-11-28 08:52
avx512bwintrin.h
75.33
KB
-rw-r--r--
2023-11-28 08:52
avx512cdintrin.h
4.12
KB
-rw-r--r--
2023-11-28 08:52
avx512dqintrin.h
58.75
KB
-rw-r--r--
2023-11-28 08:52
avx512erintrin.h
11.83
KB
-rw-r--r--
2023-11-28 08:52
avx512fintrin.h
382.64
KB
-rw-r--r--
2023-11-28 08:52
avx512fp16intrin.h
156.63
KB
-rw-r--r--
2023-11-28 08:52
avx512ifmaintrin.h
2.49
KB
-rw-r--r--
2023-11-28 08:52
avx512ifmavlintrin.h
4.31
KB
-rw-r--r--
2023-11-28 08:52
avx512pfintrin.h
4.53
KB
-rw-r--r--
2023-11-28 08:52
avx512vbmi2intrin.h
13.17
KB
-rw-r--r--
2023-11-28 08:52
avx512vbmiintrin.h
3.72
KB
-rw-r--r--
2023-11-28 08:52
avx512vbmivlintrin.h
6.94
KB
-rw-r--r--
2023-11-28 08:52
avx512vlbf16intrin.h
19.21
KB
-rw-r--r--
2023-11-28 08:52
avx512vlbitalgintrin.h
4.23
KB
-rw-r--r--
2023-11-28 08:52
avx512vlbwintrin.h
121.26
KB
-rw-r--r--
2023-11-28 08:52
avx512vlcdintrin.h
7.66
KB
-rw-r--r--
2023-11-28 08:52
avx512vldqintrin.h
46.41
KB
-rw-r--r--
2023-11-28 08:52
avx512vlfp16intrin.h
85.51
KB
-rw-r--r--
2023-11-28 08:52
avx512vlintrin.h
322.29
KB
-rw-r--r--
2023-11-28 08:52
avx512vlvbmi2intrin.h
25.72
KB
-rw-r--r--
2023-11-28 08:52
avx512vlvnniintrin.h
13.13
KB
-rw-r--r--
2023-11-28 08:52
avx512vlvp2intersectintrin.h
4.44
KB
-rw-r--r--
2023-11-28 08:52
avx512vnniintrin.h
4.21
KB
-rw-r--r--
2023-11-28 08:52
avx512vp2intersectintrin.h
2.9
KB
-rw-r--r--
2023-11-28 08:52
avx512vpopcntdqintrin.h
2
KB
-rw-r--r--
2023-11-28 08:52
avx512vpopcntdqvlintrin.h
3.31
KB
-rw-r--r--
2023-11-28 08:52
avxifmaintrin.h
5.75
KB
-rw-r--r--
2023-11-28 08:52
avxintrin.h
195.41
KB
-rw-r--r--
2023-11-28 08:52
avxneconvertintrin.h
14.09
KB
-rw-r--r--
2023-11-28 08:52
avxvnniint16intrin.h
17.41
KB
-rw-r--r--
2023-11-28 08:52
avxvnniint8intrin.h
18.67
KB
-rw-r--r--
2023-11-28 08:52
avxvnniintrin.h
10.44
KB
-rw-r--r--
2023-11-28 08:52
bmi2intrin.h
7.09
KB
-rw-r--r--
2023-11-28 08:52
bmiintrin.h
14.12
KB
-rw-r--r--
2023-11-28 08:52
builtins.h
741
B
-rw-r--r--
2023-11-28 08:52
cet.h
1.49
KB
-rw-r--r--
2023-11-28 08:52
cetintrin.h
3.27
KB
-rw-r--r--
2023-11-28 08:52
cldemoteintrin.h
1.18
KB
-rw-r--r--
2023-11-28 08:52
clflushoptintrin.h
1.17
KB
-rw-r--r--
2023-11-28 08:52
clwbintrin.h
1.2
KB
-rw-r--r--
2023-11-28 08:52
clzerointrin.h
1.19
KB
-rw-r--r--
2023-11-28 08:52
cmpccxaddintrin.h
2.33
KB
-rw-r--r--
2023-11-28 08:52
cpuid.h
11.01
KB
-rw-r--r--
2023-11-28 08:52
crc32intrin.h
3.27
KB
-rw-r--r--
2023-11-28 08:52
emmintrin.h
192.64
KB
-rw-r--r--
2023-11-28 08:52
enqcmdintrin.h
2.12
KB
-rw-r--r--
2023-11-28 08:52
f16cintrin.h
5.39
KB
-rw-r--r--
2023-11-28 08:52
float.h
5.63
KB
-rw-r--r--
2023-11-28 08:52
fma4intrin.h
6.82
KB
-rw-r--r--
2023-11-28 08:52
fmaintrin.h
28.4
KB
-rw-r--r--
2023-11-28 08:52
fxsrintrin.h
2.82
KB
-rw-r--r--
2023-11-28 08:52
gfniintrin.h
7.57
KB
-rw-r--r--
2023-11-28 08:52
hexagon_circ_brev_intrinsics.h
15.59
KB
-rw-r--r--
2023-11-28 08:52
hexagon_protos.h
374.42
KB
-rw-r--r--
2023-11-28 08:52
hexagon_types.h
130.33
KB
-rw-r--r--
2023-11-28 08:52
hresetintrin.h
1.36
KB
-rw-r--r--
2023-11-28 08:52
htmintrin.h
6.14
KB
-rw-r--r--
2023-11-28 08:52
htmxlintrin.h
9.01
KB
-rw-r--r--
2023-11-28 08:52
hvx_hexagon_protos.h
254.26
KB
-rw-r--r--
2023-11-28 08:52
ia32intrin.h
12.72
KB
-rw-r--r--
2023-11-28 08:52
immintrin.h
23.57
KB
-rw-r--r--
2023-11-28 08:52
intrin.h
28.22
KB
-rw-r--r--
2023-11-28 08:52
inttypes.h
2.26
KB
-rw-r--r--
2023-11-28 08:52
invpcidintrin.h
764
B
-rw-r--r--
2023-11-28 08:52
iso646.h
656
B
-rw-r--r--
2023-11-28 08:52
keylockerintrin.h
17.98
KB
-rw-r--r--
2023-11-28 08:52
larchintrin.h
7.8
KB
-rw-r--r--
2023-11-28 08:52
limits.h
3.61
KB
-rw-r--r--
2023-11-28 08:52
lwpintrin.h
5
KB
-rw-r--r--
2023-11-28 08:52
lzcntintrin.h
3.18
KB
-rw-r--r--
2023-11-28 08:52
mm3dnow.h
4.5
KB
-rw-r--r--
2023-11-28 08:52
mm_malloc.h
1.88
KB
-rw-r--r--
2023-11-28 08:52
mmintrin.h
55.98
KB
-rw-r--r--
2023-11-28 08:52
module.modulemap
3.33
KB
-rw-r--r--
2023-11-28 08:52
movdirintrin.h
1.57
KB
-rw-r--r--
2023-11-28 08:52
msa.h
25.01
KB
-rw-r--r--
2023-11-28 08:52
mwaitxintrin.h
2.19
KB
-rw-r--r--
2023-11-28 08:52
nmmintrin.h
709
B
-rw-r--r--
2023-11-28 08:52
opencl-c-base.h
30.38
KB
-rw-r--r--
2023-11-28 08:52
opencl-c.h
874.39
KB
-rw-r--r--
2023-11-28 08:52
pconfigintrin.h
1.19
KB
-rw-r--r--
2023-11-28 08:52
pkuintrin.h
934
B
-rw-r--r--
2023-11-28 08:52
pmmintrin.h
10.5
KB
-rw-r--r--
2023-11-28 08:52
popcntintrin.h
1.82
KB
-rw-r--r--
2023-11-28 08:52
prfchiintrin.h
2.02
KB
-rw-r--r--
2023-11-28 08:52
prfchwintrin.h
2.06
KB
-rw-r--r--
2023-11-28 08:52
ptwriteintrin.h
1.05
KB
-rw-r--r--
2023-11-28 08:52
raointintrin.h
6.59
KB
-rw-r--r--
2023-11-28 08:52
rdpruintrin.h
1.59
KB
-rw-r--r--
2023-11-28 08:52
rdseedintrin.h
2.85
KB
-rw-r--r--
2023-11-28 08:52
riscv_ntlh.h
855
B
-rw-r--r--
2023-11-28 08:52
rtmintrin.h
1.25
KB
-rw-r--r--
2023-11-28 08:52
s390intrin.h
604
B
-rw-r--r--
2023-11-28 08:52
serializeintrin.h
881
B
-rw-r--r--
2023-11-28 08:52
sgxintrin.h
1.77
KB
-rw-r--r--
2023-11-28 08:52
sha512intrin.h
5.95
KB
-rw-r--r--
2023-11-28 08:52
shaintrin.h
7.37
KB
-rw-r--r--
2023-11-28 08:52
sifive_vector.h
522
B
-rw-r--r--
2023-11-28 08:52
sm3intrin.h
7.29
KB
-rw-r--r--
2023-11-28 08:52
sm4intrin.h
8.2
KB
-rw-r--r--
2023-11-28 08:52
smmintrin.h
99.32
KB
-rw-r--r--
2023-11-28 08:52
stdalign.h
911
B
-rw-r--r--
2023-11-28 08:52
stdarg.h
1.66
KB
-rw-r--r--
2023-11-28 08:52
stdatomic.h
8.3
KB
-rw-r--r--
2023-11-28 08:52
stdbool.h
1.04
KB
-rw-r--r--
2023-11-28 08:52
stddef.h
4.16
KB
-rw-r--r--
2023-11-28 08:52
stdint.h
32.49
KB
-rw-r--r--
2023-11-28 08:52
stdnoreturn.h
1.17
KB
-rw-r--r--
2023-11-28 08:52
tbmintrin.h
3.15
KB
-rw-r--r--
2023-11-28 08:52
tgmath.h
29.68
KB
-rw-r--r--
2023-11-28 08:52
tmmintrin.h
29.51
KB
-rw-r--r--
2023-11-28 08:52
tsxldtrkintrin.h
1.97
KB
-rw-r--r--
2023-11-28 08:52
uintrintrin.h
4.96
KB
-rw-r--r--
2023-11-28 08:52
unwind.h
11.21
KB
-rw-r--r--
2023-11-28 08:52
vadefs.h
1.39
KB
-rw-r--r--
2023-11-28 08:52
vaesintrin.h
2.46
KB
-rw-r--r--
2023-11-28 08:52
varargs.h
477
B
-rw-r--r--
2023-11-28 08:52
vecintrin.h
360.82
KB
-rw-r--r--
2023-11-28 08:52
velintrin.h
2.1
KB
-rw-r--r--
2023-11-28 08:52
velintrin_approx.h
3.54
KB
-rw-r--r--
2023-11-28 08:52
velintrin_gen.h
69.06
KB
-rw-r--r--
2023-11-28 08:52
vpclmulqdqintrin.h
1.06
KB
-rw-r--r--
2023-11-28 08:52
waitpkgintrin.h
1.33
KB
-rw-r--r--
2023-11-28 08:52
wasm_simd128.h
76.25
KB
-rw-r--r--
2023-11-28 08:52
wbnoinvdintrin.h
749
B
-rw-r--r--
2023-11-28 08:52
wmmintrin.h
659
B
-rw-r--r--
2023-11-28 08:52
x86gprintrin.h
2.32
KB
-rw-r--r--
2023-11-28 08:52
x86intrin.h
1.81
KB
-rw-r--r--
2023-11-28 08:52
xmmintrin.h
106.73
KB
-rw-r--r--
2023-11-28 08:52
xopintrin.h
19.96
KB
-rw-r--r--
2023-11-28 08:52
xsavecintrin.h
2.51
KB
-rw-r--r--
2023-11-28 08:52
xsaveintrin.h
1.64
KB
-rw-r--r--
2023-11-28 08:52
xsaveoptintrin.h
1
KB
-rw-r--r--
2023-11-28 08:52
xsavesintrin.h
1.24
KB
-rw-r--r--
2023-11-28 08:52
xtestintrin.h
873
B
-rw-r--r--
2023-11-28 08:52
Save
Rename
/*===---- __clang_cuda_cmath.h - Device-side CUDA cmath support ------------=== * * 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 __CLANG_CUDA_CMATH_H__ #define __CLANG_CUDA_CMATH_H__ #ifndef __CUDA__ #error "This file is for CUDA compilation only." #endif #ifndef __OPENMP_NVPTX__ #include <limits> #endif // CUDA lets us use various std math functions on the device side. This file // works in concert with __clang_cuda_math_forward_declares.h to make this work. // // Specifically, the forward-declares header declares __device__ overloads for // these functions in the global namespace, then pulls them into namespace std // with 'using' statements. Then this file implements those functions, after // their implementations have been pulled in. // // It's important that we declare the functions in the global namespace and pull // them into namespace std with using statements, as opposed to simply declaring // these functions in namespace std, because our device functions need to // overload the standard library functions, which may be declared in the global // namespace or in std, depending on the degree of conformance of the stdlib // implementation. Declaring in the global namespace and pulling into namespace // std covers all of the known knowns. #ifdef __OPENMP_NVPTX__ #define __DEVICE__ static constexpr __attribute__((always_inline, nothrow)) #else #define __DEVICE__ static __device__ __inline__ __attribute__((always_inline)) #endif __DEVICE__ long long abs(long long __n) { return ::llabs(__n); } __DEVICE__ long abs(long __n) { return ::labs(__n); } __DEVICE__ float abs(float __x) { return ::fabsf(__x); } __DEVICE__ double abs(double __x) { return ::fabs(__x); } __DEVICE__ float acos(float __x) { return ::acosf(__x); } __DEVICE__ float asin(float __x) { return ::asinf(__x); } __DEVICE__ float atan(float __x) { return ::atanf(__x); } __DEVICE__ float atan2(float __x, float __y) { return ::atan2f(__x, __y); } __DEVICE__ float ceil(float __x) { return ::ceilf(__x); } __DEVICE__ float cos(float __x) { return ::cosf(__x); } __DEVICE__ float cosh(float __x) { return ::coshf(__x); } __DEVICE__ float exp(float __x) { return ::expf(__x); } __DEVICE__ float fabs(float __x) { return ::fabsf(__x); } __DEVICE__ float floor(float __x) { return ::floorf(__x); } __DEVICE__ float fmod(float __x, float __y) { return ::fmodf(__x, __y); } __DEVICE__ int fpclassify(float __x) { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x); } __DEVICE__ int fpclassify(double __x) { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x); } __DEVICE__ float frexp(float __arg, int *__exp) { return ::frexpf(__arg, __exp); } // For inscrutable reasons, the CUDA headers define these functions for us on // Windows. #if !defined(_MSC_VER) || defined(__OPENMP_NVPTX__) // For OpenMP we work around some old system headers that have non-conforming // `isinf(float)` and `isnan(float)` implementations that return an `int`. We do // this by providing two versions of these functions, differing only in the // return type. To avoid conflicting definitions we disable implicit base // function generation. That means we will end up with two specializations, one // per type, but only one has a base function defined by the system header. #if defined(__OPENMP_NVPTX__) #pragma omp begin declare variant match( \ implementation = {extension(disable_implicit_base)}) // FIXME: We lack an extension to customize the mangling of the variants, e.g., // add a suffix. This means we would clash with the names of the variants // (note that we do not create implicit base functions here). To avoid // this clash we add a new trait to some of them that is always true // (this is LLVM after all ;)). It will only influence the mangled name // of the variants inside the inner region and avoid the clash. #pragma omp begin declare variant match(implementation = {vendor(llvm)}) __DEVICE__ int isinf(float __x) { return ::__isinff(__x); } __DEVICE__ int isinf(double __x) { return ::__isinf(__x); } __DEVICE__ int isfinite(float __x) { return ::__finitef(__x); } __DEVICE__ int isfinite(double __x) { return ::__isfinited(__x); } __DEVICE__ int isnan(float __x) { return ::__isnanf(__x); } __DEVICE__ int isnan(double __x) { return ::__isnan(__x); } #pragma omp end declare variant #endif __DEVICE__ bool isinf(float __x) { return ::__isinff(__x); } __DEVICE__ bool isinf(double __x) { return ::__isinf(__x); } __DEVICE__ bool isfinite(float __x) { return ::__finitef(__x); } // For inscrutable reasons, __finite(), the double-precision version of // __finitef, does not exist when compiling for MacOS. __isfinited is available // everywhere and is just as good. __DEVICE__ bool isfinite(double __x) { return ::__isfinited(__x); } __DEVICE__ bool isnan(float __x) { return ::__isnanf(__x); } __DEVICE__ bool isnan(double __x) { return ::__isnan(__x); } #if defined(__OPENMP_NVPTX__) #pragma omp end declare variant #endif #endif __DEVICE__ bool isgreater(float __x, float __y) { return __builtin_isgreater(__x, __y); } __DEVICE__ bool isgreater(double __x, double __y) { return __builtin_isgreater(__x, __y); } __DEVICE__ bool isgreaterequal(float __x, float __y) { return __builtin_isgreaterequal(__x, __y); } __DEVICE__ bool isgreaterequal(double __x, double __y) { return __builtin_isgreaterequal(__x, __y); } __DEVICE__ bool isless(float __x, float __y) { return __builtin_isless(__x, __y); } __DEVICE__ bool isless(double __x, double __y) { return __builtin_isless(__x, __y); } __DEVICE__ bool islessequal(float __x, float __y) { return __builtin_islessequal(__x, __y); } __DEVICE__ bool islessequal(double __x, double __y) { return __builtin_islessequal(__x, __y); } __DEVICE__ bool islessgreater(float __x, float __y) { return __builtin_islessgreater(__x, __y); } __DEVICE__ bool islessgreater(double __x, double __y) { return __builtin_islessgreater(__x, __y); } __DEVICE__ bool isnormal(float __x) { return __builtin_isnormal(__x); } __DEVICE__ bool isnormal(double __x) { return __builtin_isnormal(__x); } __DEVICE__ bool isunordered(float __x, float __y) { return __builtin_isunordered(__x, __y); } __DEVICE__ bool isunordered(double __x, double __y) { return __builtin_isunordered(__x, __y); } __DEVICE__ float ldexp(float __arg, int __exp) { return ::ldexpf(__arg, __exp); } __DEVICE__ float log(float __x) { return ::logf(__x); } __DEVICE__ float log10(float __x) { return ::log10f(__x); } __DEVICE__ float modf(float __x, float *__iptr) { return ::modff(__x, __iptr); } __DEVICE__ float pow(float __base, float __exp) { return ::powf(__base, __exp); } __DEVICE__ float pow(float __base, int __iexp) { return ::powif(__base, __iexp); } __DEVICE__ double pow(double __base, int __iexp) { return ::powi(__base, __iexp); } __DEVICE__ bool signbit(float __x) { return ::__signbitf(__x); } __DEVICE__ bool signbit(double __x) { return ::__signbitd(__x); } __DEVICE__ float sin(float __x) { return ::sinf(__x); } __DEVICE__ float sinh(float __x) { return ::sinhf(__x); } __DEVICE__ float sqrt(float __x) { return ::sqrtf(__x); } __DEVICE__ float tan(float __x) { return ::tanf(__x); } __DEVICE__ float tanh(float __x) { return ::tanhf(__x); } // There was a redefinition error for this this overload in CUDA mode. // We restrict it to OpenMP mode for now, that is where it is actually needed // anyway. #ifdef __OPENMP_NVPTX__ __DEVICE__ float remquo(float __n, float __d, int *__q) { return ::remquof(__n, __d, __q); } #endif // Notably missing above is nexttoward. We omit it because // libdevice doesn't provide an implementation, and we don't want to be in the // business of implementing tricky libm functions in this header. #ifndef __OPENMP_NVPTX__ // Now we've defined everything we promised we'd define in // __clang_cuda_math_forward_declares.h. We need to do two additional things to // fix up our math functions. // // 1) Define __device__ overloads for e.g. sin(int). The CUDA headers define // only sin(float) and sin(double), which means that e.g. sin(0) is // ambiguous. // // 2) Pull the __device__ overloads of "foobarf" math functions into namespace // std. These are defined in the CUDA headers in the global namespace, // independent of everything else we've done here. // We can't use std::enable_if, because we want to be pre-C++11 compatible. But // we go ahead and unconditionally define functions that are only available when // compiling for C++11 to match the behavior of the CUDA headers. template<bool __B, class __T = void> struct __clang_cuda_enable_if {}; template <class __T> struct __clang_cuda_enable_if<true, __T> { typedef __T type; }; // Defines an overload of __fn that accepts one integral argument, calls // __fn((double)x), and returns __retty. #define __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(__retty, __fn) \ template <typename __T> \ __DEVICE__ \ typename __clang_cuda_enable_if<std::numeric_limits<__T>::is_integer, \ __retty>::type \ __fn(__T __x) { \ return ::__fn((double)__x); \ } // Defines an overload of __fn that accepts one two arithmetic arguments, calls // __fn((double)x, (double)y), and returns a double. // // Note this is different from OVERLOAD_1, which generates an overload that // accepts only *integral* arguments. #define __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(__retty, __fn) \ template <typename __T1, typename __T2> \ __DEVICE__ typename __clang_cuda_enable_if< \ std::numeric_limits<__T1>::is_specialized && \ std::numeric_limits<__T2>::is_specialized, \ __retty>::type \ __fn(__T1 __x, __T2 __y) { \ return __fn((double)__x, (double)__y); \ } __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, acos) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, acosh) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, asin) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, asinh) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, atan) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, atan2); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, atanh) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, cbrt) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, ceil) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, copysign); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, cos) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, cosh) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, erf) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, erfc) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, exp) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, exp2) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, expm1) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, fabs) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, fdim); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, floor) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, fmax); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, fmin); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, fmod); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(int, fpclassify) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, hypot); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(int, ilogb) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, isfinite) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(bool, isgreater); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(bool, isgreaterequal); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, isinf); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(bool, isless); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(bool, islessequal); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(bool, islessgreater); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, isnan); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, isnormal) __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(bool, isunordered); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, lgamma) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, log) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, log10) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, log1p) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, log2) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, logb) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(long long, llrint) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(long long, llround) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(long, lrint) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(long, lround) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, nearbyint); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, nextafter); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, pow); __CUDA_CLANG_FN_INTEGER_OVERLOAD_2(double, remainder); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, rint); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, round); __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, signbit) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, sin) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, sinh) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, sqrt) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, tan) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, tanh) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, tgamma) __CUDA_CLANG_FN_INTEGER_OVERLOAD_1(double, trunc); #undef __CUDA_CLANG_FN_INTEGER_OVERLOAD_1 #undef __CUDA_CLANG_FN_INTEGER_OVERLOAD_2 // Overloads for functions that don't match the patterns expected by // __CUDA_CLANG_FN_INTEGER_OVERLOAD_{1,2}. template <typename __T1, typename __T2, typename __T3> __DEVICE__ typename __clang_cuda_enable_if< std::numeric_limits<__T1>::is_specialized && std::numeric_limits<__T2>::is_specialized && std::numeric_limits<__T3>::is_specialized, double>::type fma(__T1 __x, __T2 __y, __T3 __z) { return std::fma((double)__x, (double)__y, (double)__z); } template <typename __T> __DEVICE__ typename __clang_cuda_enable_if<std::numeric_limits<__T>::is_integer, double>::type frexp(__T __x, int *__exp) { return std::frexp((double)__x, __exp); } template <typename __T> __DEVICE__ typename __clang_cuda_enable_if<std::numeric_limits<__T>::is_integer, double>::type ldexp(__T __x, int __exp) { return std::ldexp((double)__x, __exp); } template <typename __T1, typename __T2> __DEVICE__ typename __clang_cuda_enable_if< std::numeric_limits<__T1>::is_specialized && std::numeric_limits<__T2>::is_specialized, double>::type remquo(__T1 __x, __T2 __y, int *__quo) { return std::remquo((double)__x, (double)__y, __quo); } template <typename __T> __DEVICE__ typename __clang_cuda_enable_if<std::numeric_limits<__T>::is_integer, double>::type scalbln(__T __x, long __exp) { return std::scalbln((double)__x, __exp); } template <typename __T> __DEVICE__ typename __clang_cuda_enable_if<std::numeric_limits<__T>::is_integer, double>::type scalbn(__T __x, int __exp) { return std::scalbn((double)__x, __exp); } // We need to define these overloads in exactly the namespace our standard // library uses (including the right inline namespace), otherwise they won't be // picked up by other functions in the standard library (e.g. functions in // <complex>). Thus the ugliness below. #ifdef _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_BEGIN_NAMESPACE_STD #else namespace std { #ifdef _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif #endif // Pull the new overloads we defined above into namespace std. using ::acos; using ::acosh; using ::asin; using ::asinh; using ::atan; using ::atan2; using ::atanh; using ::cbrt; using ::ceil; using ::copysign; using ::cos; using ::cosh; using ::erf; using ::erfc; using ::exp; using ::exp2; using ::expm1; using ::fabs; using ::fdim; using ::floor; using ::fma; using ::fmax; using ::fmin; using ::fmod; using ::fpclassify; using ::frexp; using ::hypot; using ::ilogb; using ::isfinite; using ::isgreater; using ::isgreaterequal; using ::isless; using ::islessequal; using ::islessgreater; using ::isnormal; using ::isunordered; using ::ldexp; using ::lgamma; using ::llrint; using ::llround; using ::log; using ::log10; using ::log1p; using ::log2; using ::logb; using ::lrint; using ::lround; using ::nearbyint; using ::nextafter; using ::pow; using ::remainder; using ::remquo; using ::rint; using ::round; using ::scalbln; using ::scalbn; using ::signbit; using ::sin; using ::sinh; using ::sqrt; using ::tan; using ::tanh; using ::tgamma; using ::trunc; // Well this is fun: We need to pull these symbols in for libc++, but we can't // pull them in with libstdc++, because its ::isinf and ::isnan are different // than its std::isinf and std::isnan. #ifndef __GLIBCXX__ using ::isinf; using ::isnan; #endif // Finally, pull the "foobarf" functions that CUDA defines in its headers into // namespace std. using ::acosf; using ::acoshf; using ::asinf; using ::asinhf; using ::atan2f; using ::atanf; using ::atanhf; using ::cbrtf; using ::ceilf; using ::copysignf; using ::cosf; using ::coshf; using ::erfcf; using ::erff; using ::exp2f; using ::expf; using ::expm1f; using ::fabsf; using ::fdimf; using ::floorf; using ::fmaf; using ::fmaxf; using ::fminf; using ::fmodf; using ::frexpf; using ::hypotf; using ::ilogbf; using ::ldexpf; using ::lgammaf; using ::llrintf; using ::llroundf; using ::log10f; using ::log1pf; using ::log2f; using ::logbf; using ::logf; using ::lrintf; using ::lroundf; using ::modff; using ::nearbyintf; using ::nextafterf; using ::powf; using ::remainderf; using ::remquof; using ::rintf; using ::roundf; using ::scalblnf; using ::scalbnf; using ::sinf; using ::sinhf; using ::sqrtf; using ::tanf; using ::tanhf; using ::tgammaf; using ::truncf; #ifdef _LIBCPP_END_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD #else #ifdef _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION #endif } // namespace std #endif #endif // __OPENMP_NVPTX__ #undef __DEVICE__ #endif