9#ifndef __CLANG_SPIRV_MATH_H__
10#define __CLANG_SPIRV_MATH_H__
12#if !defined(__SPIRV__) && !defined(__OPENMP_SPIRV__)
13#error "This file is for SPIRV and OpenMP SPIRV device compilation only."
18#ifndef __CLANG_GPU_DISABLE_MATH_WRAPPERS
23#pragma push_macro("__DEVICE__")
24#ifdef __OPENMP_SPIRV__
25#if defined(__cplusplus)
26#define __DEVICE__ static constexpr __attribute__((always_inline, nothrow))
28#define __DEVICE__ static __attribute__((always_inline, nothrow))
31#define __DEVICE__ static __device__ __forceinline__
43 float sum = __x +
__y;
59 float res = __x /
__y;
76 float res = __x *
__y + __z;
97 float res = __x *
__y;
141 float res = __x -
__y;
166void __sincosf(
float __x,
float *__sinptr,
float *__cosptr) {
194int __signbit(
double __x) {
return __builtin_signbit(__x); }
198 double sum = __x +
__y;
214 double res = __x /
__y;
231 double res = __x *
__y;
278 double res = __x -
__y;
295 double res = __x *
__y + __z;
577 return __a > 0 ? 0.0 : -0.0;
584 return __a > 0 ? 0.f : -0.f;
618 unsigned long long __b) {
622 unsigned long long __b) {
632#if !defined(__cplusplus) && __STDC_VERSION__ >= 201112L
633#define isfinite(__x) _Generic((__x), float: __finitef, double: __finite)(__x)
634#define isinf(__x) _Generic((__x), float: __isinff, double: __isinf)(__x)
635#define isnan(__x) _Generic((__x), float: __isnanf, double: __isnan)(__x)
636#define signbit(__x) _Generic((__x), float: __signbitf, double: __signbit)(__x)
641 unsigned long __r = 0;
642 while (*__tagp !=
'\0') {
643 char __tmp = *__tagp;
645 if (__tmp >=
'0' && __tmp <=
'7')
646 __r = (__r * 8u) + __tmp -
'0';
658 unsigned long __r = 0;
659 while (*__tagp !=
'\0') {
660 char __tmp = *__tagp;
662 if (__tmp >=
'0' && __tmp <=
'9')
663 __r = (__r * 10u) + __tmp -
'0';
675 unsigned long __r = 0;
676 while (*__tagp !=
'\0') {
677 char __tmp = *__tagp;
679 if (__tmp >=
'0' && __tmp <=
'9')
680 __r = (__r * 16u) + __tmp -
'0';
681 else if (__tmp >=
'a' && __tmp <=
'f')
682 __r = (__r * 16u) + __tmp -
'a' + 10;
683 else if (__tmp >=
'A' && __tmp <=
'F')
684 __r = (__r * 16u) + __tmp -
'A' + 10;
698 if (*__tagp ==
'0') {
701 if (*__tagp ==
'x' || *__tagp ==
'X')
710float nanf(
const char *__tagp) {
713double nan(
const char *__tagp) {
717#pragma pop_macro("__DEVICE__")
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_ldexp(float, int)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_modf(float, float *)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmax(float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_ceil(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fclamp(float, float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cbrt(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_remainder(float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_pow(float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fabs(float)
_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_u_max(unsigned int, unsigned int)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sqrt(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atanh(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_remquo(float, float, int *)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_tgamma(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sin(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cos(float)
_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsNan(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_expm1(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log1p(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fma(float, float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log2(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atan(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_copysign(float, float)
_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_u_min(unsigned int, unsigned int)
_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_s_max(int, int)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sincos(float, float *)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_frexp(float, int *)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_nan(int)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_lgamma(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_acos(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_rsqrt(float)
_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_ilogb(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_acosh(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_round(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fdim(float, float)
_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_s_abs(int)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log10(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sinh(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_erf(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_hypot(float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_nextafter(float, float)
_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_s_min(int, int)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_logb(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cospi(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_trunc(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cosh(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp10(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmin(float, float)
_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsInf(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_floor(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmod(float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_asinh(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp2(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_tanh(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_erfc(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_tan(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atan2(float, float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_sinpi(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_asin(float)
_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_rint(float)
__DEVICE__ unsigned long __make_mantissa_base10(const char *__tagp)
__DEVICE__ double __dsub_rn(double __x, double __y)
__DEVICE__ double powi(double __a, int __b)
__DEVICE__ float fabsf(float __a)
__DEVICE__ double rhypot(double __a, double __b)
__DEVICE__ float fmodf(float __a, float __b)
__DEVICE__ float remainderf(float __a, float __b)
__DEVICE__ float exp2f(float __a)
__DEVICE__ float __fsqrt_rd(float __x)
__DEVICE__ float rsqrtf(float __a)
__DEVICE__ float acosf(float __a)
__DEVICE__ double __fma_ru(double __x, double __y, double __z)
__DEVICE__ float fmaf(float __a, float __b, float __c)
__DEVICE__ double __ddiv_rz(double __x, double __y)
__DEVICE__ float __fmaf_rz(float __x, float __y, float __z)
__DEVICE__ float cbrtf(float __a)
__DEVICE__ float __fdiv_rn(float __x, float __y)
__DEVICE__ float remquof(float __a, float __b, int *__c)
__DEVICE__ void sincospi(double __a, double *__s, double *__c)
__DEVICE__ double __drcp_rd(double __x)
__DEVICE__ float tanf(float __a)
__DEVICE__ long labs(long __a)
__DEVICE__ float nextafterf(float __a, float __b)
__DEVICE__ void sincos(double __a, double *__s, double *__c)
__DEVICE__ float fmaxf(float __a, float __b)
__DEVICE__ double __ddiv_ru(double __x, double __y)
__DEVICE__ double __dsqrt_rn(double __x)
__DEVICE__ float __sinf(float __x)
__DEVICE__ float __fmaf_rd(float __x, float __y, float __z)
__DEVICE__ long long llabs(long long __a)
__DEVICE__ float __fadd_ru(float __x, float __y)
__DEVICE__ float fminf(float __a, float __b)
__DEVICE__ float log2f(float __a)
__DEVICE__ double normcdf(double __a)
__DEVICE__ double __dsub_rd(double __x, double __y)
__DEVICE__ float norm3df(float __a, float __b, float __c)
__DEVICE__ float __fadd_rz(float __x, float __y)
__DEVICE__ float copysignf(float __a, float __b)
__DEVICE__ float truncf(float __a)
__DEVICE__ float fdimf(float __a, float __b)
__DEVICE__ float rcbrtf(float __a)
__DEVICE__ long lrintf(float __a)
__DEVICE__ long long llrintf(float __a)
__DEVICE__ float cosf(float __a)
__DEVICE__ float rnormf(int __dim, const float *__a)
__DEVICE__ double fdivide(double __a, double __b)
__DEVICE__ float __fsub_rz(float __x, float __y)
__DEVICE__ float __cosf(float __x)
__DEVICE__ float __fdiv_ru(float __x, float __y)
__DEVICE__ float sinf(float __a)
__DEVICE__ float sinpif(float __a)
__DEVICE__ double norm(int __dim, const double *__a)
__DEVICE__ double __dmul_rz(double __x, double __y)
__DEVICE__ double __fma_rz(double __x, double __y, double __z)
__DEVICE__ float logf(float __a)
__DEVICE__ int min(int __a, int __b)
__DEVICE__ float __fmul_ru(float __x, float __y)
__DEVICE__ float erff(float __a)
__DEVICE__ float floorf(float __f)
__DEVICE__ float __fdividef(float __x, float __y)
__DEVICE__ float __frsqrt_rn(float __x)
__DEVICE__ float __log2f(float __x)
__DEVICE__ float ceilf(float __a)
__DEVICE__ float nearbyintf(float __a)
__DEVICE__ float atanf(float __a)
__DEVICE__ float __fdiv_rd(float __x, float __y)
__DEVICE__ float rnorm4df(float __a, float __b, float __c, float __d)
__DEVICE__ float atanhf(float __a)
__DEVICE__ long long llmin(long long __a, long long __b)
__DEVICE__ float tanhf(float __a)
__DEVICE__ float __exp10f(float __x)
__DEVICE__ double rnorm4d(double __a, double __b, double __c, double __d)
__DEVICE__ double __dsqrt_rz(double __x)
__DEVICE__ float __frcp_rn(float __x)
__DEVICE__ long long llmax(long long __a, long long __b)
__DEVICE__ float rhypotf(float __a, float __b)
__DEVICE__ float exp10f(float __a)
__DEVICE__ float __fsub_rn(float __x, float __y)
__DEVICE__ double __dmul_ru(double __x, double __y)
__DEVICE__ double rcbrt(double __a)
__DEVICE__ float rintf(float __a)
__DEVICE__ float atan2f(float __a, float __b)
__DEVICE__ double __dadd_rn(double __x, double __y)
__DEVICE__ float sinhf(float __a)
__DEVICE__ unsigned long long ullmin(unsigned long long __a, unsigned long long __b)
__DEVICE__ float __fsub_rd(float __x, float __y)
__DEVICE__ double __dadd_rz(double __x, double __y)
__DEVICE__ float acoshf(float __a)
__DEVICE__ float __fadd_rd(float __x, float __y)
__DEVICE__ float __tanf(float __x)
__DEVICE__ unsigned long long ullmax(unsigned long long __a, unsigned long long __b)
__DEVICE__ double __fma_rd(double __x, double __y, double __z)
__DEVICE__ float __fsqrt_rn(float __x)
__DEVICE__ float __fsqrt_ru(float __x)
__DEVICE__ float log10f(float __a)
__DEVICE__ float __fmaf_rn(float __x, float __y, float __z)
float nanf(const char *__tagp)
__DEVICE__ int abs(int __a)
__DEVICE__ float ldexpf(float __a, int __b)
__DEVICE__ double __drcp_ru(double __x)
__DEVICE__ int __finitef(float __x)
__DEVICE__ int __isnan(double __x)
__DEVICE__ double __dmul_rd(double __x, double __y)
__DEVICE__ double __dsub_ru(double __x, double __y)
__DEVICE__ double __dsqrt_rd(double __x)
__DEVICE__ float __fadd_rn(float __x, float __y)
__DEVICE__ float normcdff(float __a)
__DEVICE__ float __fdiv_rz(float __x, float __y)
__DEVICE__ double cospi(double __a)
__DEVICE__ int __isnanf(float __x)
__DEVICE__ float __frcp_rd(float __x)
__DEVICE__ double __dadd_ru(double __x, double __y)
__DEVICE__ void sincosf(float __a, float *__s, float *__c)
__DEVICE__ double sinpi(double __a)
__DEVICE__ float modff(float __a, float *__b)
__DEVICE__ float erfcxf(float __a)
__DEVICE__ float __fmul_rz(float __x, float __y)
__DEVICE__ float logbf(float __a)
__DEVICE__ float __expf(float __x)
__DEVICE__ float __fmaf_ru(float __x, float __y, float __z)
__DEVICE__ float __logf(float __x)
__DEVICE__ double __fma_rn(double __x, double __y, double __z)
__DEVICE__ double rnorm(int __dim, const double *__a)
__DEVICE__ int __isinff(float __x)
__DEVICE__ float powif(float __a, int __b)
__DEVICE__ float coshf(float __a)
__DEVICE__ float asinhf(float __a)
__DEVICE__ float roundf(float __a)
__DEVICE__ double __dadd_rd(double __x, double __y)
__DEVICE__ float __frcp_rz(float __x)
__DEVICE__ long lroundf(float __a)
__DEVICE__ int __finite(double __x)
__DEVICE__ float norm4df(float __a, float __b, float __c, float __d)
__DEVICE__ float scalbnf(float __a, int __b)
__DEVICE__ void __sincosf(float __x, float *__sinptr, float *__cosptr)
__DEVICE__ float erfcf(float __a)
__DEVICE__ double modf(double __a, double *__b)
__DEVICE__ double __ddiv_rn(double __x, double __y)
__DEVICE__ double __ddiv_rd(double __x, double __y)
__DEVICE__ int ilogbf(float __a)
__DEVICE__ double norm3d(double __a, double __b, double __c)
__DEVICE__ float __fmul_rd(float __x, float __y)
__DEVICE__ float powf(float __a, float __b)
__DEVICE__ void sincospif(float __a, float *__s, float *__c)
__DEVICE__ double norm4d(double __a, double __b, double __c, double __d)
__DEVICE__ unsigned long __make_mantissa(const char *__tagp)
__DEVICE__ int __signbitf(float __x)
__DEVICE__ double __dmul_rn(double __x, double __y)
__DEVICE__ float normf(int __dim, const float *__a)
__DEVICE__ unsigned int umin(unsigned int __a, unsigned int __b)
__DEVICE__ float rnorm3df(float __a, float __b, float __c)
__DEVICE__ float cospif(float __a)
__DEVICE__ float frexpf(float __a, int *__b)
__DEVICE__ double erfcx(double __a)
__DEVICE__ float sqrtf(float __a)
__DEVICE__ unsigned int umax(unsigned int __a, unsigned int __b)
__DEVICE__ double __dsub_rz(double __x, double __y)
__DEVICE__ unsigned long __make_mantissa_base8(const char *__tagp)
__DEVICE__ double __drcp_rn(double __x)
__DEVICE__ double exp10(double __a)
__DEVICE__ unsigned long __make_mantissa_base16(const char *__tagp)
__DEVICE__ float fdividef(float __a, float __b)
__DEVICE__ float expf(float __a)
__DEVICE__ float __frcp_ru(float __x)
__DEVICE__ int __signbit(double __x)
__DEVICE__ float expm1f(float __a)
__DEVICE__ float __fsub_ru(float __x, float __y)
__DEVICE__ float scalblnf(float __a, long __b)
__DEVICE__ int max(int __a, int __b)
__DEVICE__ float tgammaf(float __a)
__DEVICE__ double rsqrt(double __a)
__DEVICE__ double __dsqrt_ru(double __x)
__DEVICE__ float log1pf(float __a)
__DEVICE__ double __drcp_rz(double __x)
__DEVICE__ float __log10f(float __x)
__DEVICE__ float lgammaf(float __a)
__DEVICE__ float __fsqrt_rz(float __x)
__DEVICE__ float __fmul_rn(float __x, float __y)
double nan(const char *__tagp)
__DEVICE__ long long llroundf(float __a)
__DEVICE__ int __isinf(double __x)
__DEVICE__ double rnorm3d(double __a, double __b, double __c)
__DEVICE__ float hypotf(float __a, float __b)
__DEVICE__ float __saturatef(float __x)
__DEVICE__ float __powf(float __x, float __y)
__DEVICE__ float asinf(float __a)
static __inline__ vector float vector float vector float __c
static __inline__ vector float vector float __b
static __inline__ uint32_t uint32_t __y
static __inline__ void int __a
#define HUGE_VALF
A positive float constant expression.
#define HUGE_VAL
A positive double constant expression.
#define scalbln(__x, __y)
#define copysign(__x, __y)
#define remquo(__x, __y, __z)
#define nextafter(__x, __y)
#define remainder(__x, __y)
#define fma(__x, __y, __z)