1/*===-- __clang_spirv_libdevice_declares.h - decls for libdevice functions --===
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
10#ifndef __CLANG_SPIRV_LIBDEVICE_DECLARES_H__
11#define __CLANG_SPIRV_LIBDEVICE_DECLARES_H__
12
13#if defined(__cplusplus)
14extern "C" {
15#else
16_Pragma("push_macro(\"bool\")");
17#define bool _Bool
18#endif
19
20#define _CLC_OVERLOAD [[clang::overloadable]]
21#define _CLC_CONSTFN [[gnu::const]]
22// TODO: Add vector versions of the API in case it is required.
23_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_s_abs(int);
24_CLC_OVERLOAD _CLC_CONSTFN unsigned long __spirv_ocl_s_abs(long);
25_CLC_OVERLOAD _CLC_CONSTFN unsigned long long __spirv_ocl_s_abs(long long);
26_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_s_max(int, int);
27_CLC_OVERLOAD _CLC_CONSTFN long __spirv_ocl_s_max(long, long);
28_CLC_OVERLOAD _CLC_CONSTFN long long __spirv_ocl_s_max(long long, long long);
29_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_s_min(int, int);
30_CLC_OVERLOAD _CLC_CONSTFN long __spirv_ocl_s_min(long, long);
31_CLC_OVERLOAD _CLC_CONSTFN long long __spirv_ocl_s_min(long long, long long);
32_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_u_max(unsigned int,
33 unsigned int);
34_CLC_OVERLOAD _CLC_CONSTFN unsigned long __spirv_ocl_u_max(unsigned long,
35 unsigned long);
36_CLC_OVERLOAD _CLC_CONSTFN unsigned long long
37__spirv_ocl_u_max(unsigned long long, unsigned long long);
38_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_u_min(unsigned int,
39 unsigned int);
40_CLC_OVERLOAD _CLC_CONSTFN unsigned long __spirv_ocl_u_min(unsigned long,
41 unsigned long);
42_CLC_OVERLOAD _CLC_CONSTFN unsigned long long
43__spirv_ocl_u_min(unsigned long long, unsigned long long);
44_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_acos(float);
45_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_acos(double);
46_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_acosh(float);
47_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_acosh(double);
48_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_asin(float);
49_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_asin(double);
50_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_asinh(float);
51_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_asinh(double);
52_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atan(float);
53_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_atan(double);
54_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atan2(float, float);
55_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_atan2(double, double);
56_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atanh(float);
57_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_atanh(double);
58_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cbrt(float);
59_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cbrt(double);
60_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_ceil(float);
61_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_ceil(double);
62_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cos(float);
63_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cos(double);
64_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cosh(float);
65_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cosh(double);
66_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cospi(float);
67_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cospi(double);
68_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_erf(float);
69_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_erf(double);
70_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_erfc(float);
71_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_erfc(double);
72_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp(float);
73_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_exp(double);
74_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp2(float);
75_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_exp2(double);
76_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp10(float);
77_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_exp10(double);
78_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_expm1(float);
79_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_expm1(double);
80_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsNan(float);
81_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsNan(double);
82_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsInf(float);
83_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsInf(double);
84_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsFinite(float);
85_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsFinite(double);
86_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_copysign(float, float);
87_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_copysign(double, double);
88_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_ldexp(float, int);
89_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_ldexp(double, int);
90_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fabs(float);
91_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fabs(double);
92_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_logb(float);
93_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_logb(double);
94_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmax(float, float);
95_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fmax(double, double);
96_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmin(float, float);
97_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fmin(double, double);
98_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fdim(float, float);
99_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fdim(double, double);
100_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_floor(float);
101_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_floor(double);
102_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fma(float, float, float);
103_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fma(double, double, double);
104_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmod(float, float);
105_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fmod(double, double);
106_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_frexp(float, int *);
107_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_frexp(double, int *);
108_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_hypot(float, float);
109_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_hypot(double, double);
110_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_ilogb(float);
111_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_ilogb(double);
112_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_lgamma(float);
113_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_lgamma(double);
114_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_round(float);
115_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_round(double);
116_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log(float);
117_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log(double);
118_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log10(float);
119_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log10(double);
120_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log1p(float);
121_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log1p(double);
122_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log2(float);
123_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log2(double);
124_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_modf(float, float *);
125_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_modf(double, double *);
126_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_nan(int);
127_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_nan(unsigned int);
128_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_nan(long);
129_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_nan(unsigned long);
130_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_nextafter(float, float);
131_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_nextafter(double, double);
132_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sqrt(float);
133_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_sqrt(double);
134_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_rsqrt(float);
135_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_rsqrt(double);
136_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_pow(float, float);
137_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_pow(double, double);
138_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_pown(float, int);
139_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_pown(double, int);
140_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_remainder(float, float);
141_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_remainder(double, double);
142_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_remquo(float, float, int *);
143_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_remquo(double, double, int *);
144_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sin(float);
145_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_sin(double);
146_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sincos(float, float *);
147_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_sincos(double, double *);
148_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sinh(float);
149_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_sinh(double);
150_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sinpi(float);
151_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_sinpi(double);
152_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_tan(float);
153_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_tan(double);
154_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_tanh(float);
155_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_tanh(double);
156_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_tgamma(float);
157_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_tgamma(double);
158_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_trunc(float);
159_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_trunc(double);
160_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_rint(float);
161_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_rint(double);
162_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fclamp(float, float, float);
163_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fclamp(double, double, double);
164
165#if defined(__cplusplus)
166} // extern "C"
167#else
168_Pragma("pop_macro(\"bool\")");
169#endif
170#endif // __CLANG_SPIRV_LIBDEVICE_DECLARES_H__