| 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) |
| 14 | extern "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__ |