From 325f73948214f313240d8e1a8af21d32817404c2 Mon Sep 17 00:00:00 2001 From: gejin Date: Fri, 2 Apr 2021 11:44:30 +0800 Subject: [PATCH 1/3] Add all devicelib function to builtins Signed-off-by: gejin --- sycl/include/CL/sycl/builtins.hpp | 81 +++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/sycl/include/CL/sycl/builtins.hpp b/sycl/include/CL/sycl/builtins.hpp index 3ab22fef648e3..5a471278e76a8 100644 --- a/sycl/include/CL/sycl/builtins.hpp +++ b/sycl/include/CL/sycl/builtins.hpp @@ -1552,11 +1552,92 @@ extern SYCL_EXTERNAL long long int llabs(long long int x); extern SYCL_EXTERNAL div_t div(int x, int y); extern SYCL_EXTERNAL ldiv_t ldiv(long int x, long int y); extern SYCL_EXTERNAL lldiv_t lldiv(long long int x, long long int y); +extern SYCL_EXTERNAL float scalbnf(float x, int n); +extern SYCL_EXTERNAL double scalbn(double x, int n); +extern SYCL_EXTERNAL float logf(float x); +extern SYCL_EXTERNAL double log(double x); +extern SYCL_EXTERNAL float expf(float x); +extern SYCL_EXTERNAL double exp(double x); +extern SYCL_EXTERNAL float log10f(float x); +extern SYCL_EXTERNAL double log10(double x); +extern SYCL_EXTERNAL float modff(float x, float *intpart); +extern SYCL_EXTERNAL double modf(double x, double *intpart); +extern SYCL_EXTERNAL float exp2f(float x); +extern SYCL_EXTERNAL double exp2(double x); +extern SYCL_EXTERNAL float expm1f(float x); +extern SYCL_EXTERNAL double expm1(double x); +extern SYCL_EXTERNAL int ilogbf(float x); +extern SYCL_EXTERNAL int ilogb(double x); +extern SYCL_EXTERNAL float log1pf(float x); +extern SYCL_EXTERNAL double log1p(double x); +extern SYCL_EXTERNAL float log2f(float x); +extern SYCL_EXTERNAL double log2(double x); +extern SYCL_EXTERNAL float logbf(float x); +extern SYCL_EXTERNAL double logb(double x); +extern SYCL_EXTERNAL float sqrtf(float x); +extern SYCL_EXTERNAL double sqrt(double x); +extern SYCL_EXTERNAL float cbrtf(float x); +extern SYCL_EXTERNAL double cbrt(double x); +extern SYCL_EXTERNAL float erff(float x); +extern SYCL_EXTERNAL double erf(double x); +extern SYCL_EXTERNAL float erfcf(float x); +extern SYCL_EXTERNAL double erfc(double x); +extern SYCL_EXTERNAL float tgammaf(float x); +extern SYCL_EXTERNAL double tgamma(double x); +extern SYCL_EXTERNAL float lgammaf(float x); +extern SYCL_EXTERNAL double lgamma(double x); +extern SYCL_EXTERNAL float fmodf(float x, float y); +extern SYCL_EXTERNAL double fmod(double x, double y); +extern SYCL_EXTERNAL float remainderf(float x, float y); +extern SYCL_EXTERNAL double remainder(double x, double y); +extern SYCL_EXTERNAL float remquof(float x, float y, int *q); +extern SYCL_EXTERNAL double remquo(double x, double y, int *q); +extern SYCL_EXTERNAL float nextafterf(float x, float y); +extern SYCL_EXTERNAL double nextafter(double x, double y); +extern SYCL_EXTERNAL float fdimf(float x, float y); +extern SYCL_EXTERNAL double fdim(double x, double y); +extern SYCL_EXTERNAL float fmaf(float x, float y, float z); +extern SYCL_EXTERNAL double fma(double x, double y, double z); +extern SYCL_EXTERNAL float sinf(float x); +extern SYCL_EXTERNAL double sin(double x); +extern SYCL_EXTERNAL float cosf(float x); +extern SYCL_EXTERNAL double cos(double x); +extern SYCL_EXTERNAL float tanf(float x); +extern SYCL_EXTERNAL double tan(double x); +extern SYCL_EXTERNAL float asinf(float x); +extern SYCL_EXTERNAL double asin(double x); +extern SYCL_EXTERNAL float acosf(float x); +extern SYCL_EXTERNAL double acos(double x); +extern SYCL_EXTERNAL float atanf(float x); +extern SYCL_EXTERNAL double atan(double x); +extern SYCL_EXTERNAL float powf(float x, float y); +extern SYCL_EXTERNAL double pow(double x, double y); +extern SYCL_EXTERNAL float atan2f(float x, float y); +extern SYCL_EXTERNAL double atan2(double x, double y); + +extern SYCL_EXTERNAL float sinhf(float x); +extern SYCL_EXTERNAL double sinh(double x); +extern SYCL_EXTERNAL float coshf(float x); +extern SYCL_EXTERNAL double cosh(double x); +extern SYCL_EXTERNAL float tanhf(float x); +extern SYCL_EXTERNAL double tanh(double x); +extern SYCL_EXTERNAL float asinhf(float x); +extern SYCL_EXTERNAL double asinh(double x); +extern SYCL_EXTERNAL float acoshf(float x); +extern SYCL_EXTERNAL double acosh(double x); +extern SYCL_EXTERNAL float atanhf(float x); +extern SYCL_EXTERNAL double atanh(double x); +extern SYCL_EXTERNAL double frexp(double x, int *exp); +extern SYCL_EXTERNAL double ldexp(double x, int exp); +extern SYCL_EXTERNAL double hypot(double x, double y); } #ifdef __GLIBC__ extern "C" { extern SYCL_EXTERNAL void __assert_fail(const char *expr, const char *file, unsigned int line, const char *func); +extern SYCL_EXTERNAL float frexpf(float x, int *exp); +extern SYCL_EXTERNAL float ldexpf(float x, int exp); +extern SYCL_EXTERNAL float hypotf(float x, float y); } #elif defined(_WIN32) extern "C" { From 48da54ecccf05ea8dfd15231f552288183871b5a Mon Sep 17 00:00:00 2001 From: gejin Date: Fri, 2 Apr 2021 14:17:29 +0800 Subject: [PATCH 2/3] add c99 complex API to builtins Signed-off-by: gejin --- sycl/include/CL/sycl/builtins.hpp | 53 +++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/sycl/include/CL/sycl/builtins.hpp b/sycl/include/CL/sycl/builtins.hpp index 5a471278e76a8..45ad2b04bad98 100644 --- a/sycl/include/CL/sycl/builtins.hpp +++ b/sycl/include/CL/sycl/builtins.hpp @@ -1630,6 +1630,51 @@ extern SYCL_EXTERNAL double atanh(double x); extern SYCL_EXTERNAL double frexp(double x, int *exp); extern SYCL_EXTERNAL double ldexp(double x, int exp); extern SYCL_EXTERNAL double hypot(double x, double y); + +extern SYCL_EXTERNAL float cimagf(float __complex__ z); +extern SYCL_EXTERNAL double cimag(double __complex__ z); +extern SYCL_EXTERNAL float crealf(float __complex__ z); +extern SYCL_EXTERNAL double creal(double __complex__ z); +extern SYCL_EXTERNAL float cargf(float __complex__ z); +extern SYCL_EXTERNAL double carg(double __complex__ z); +extern SYCL_EXTERNAL float cabsf(float __complex__ z); +extern SYCL_EXTERNAL double cabs(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ cprojf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ cproj(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ cexpf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ cexp(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ clogf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ clog(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ cpowf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ cpow(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ csqrtf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ csqrt(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ csinhf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ csinh(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ ccoshf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ ccosh(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ ctanhf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ ctanh(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ csinf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ csin(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ ccosf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ ccos(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ ctanf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ ctan(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ cacosf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ cacos(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ cacoshf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ cacosh(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ casinf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ casin(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ casinhf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ casinh(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ catanf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ catan(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ catanhf(float __complex__ z); +extern SYCL_EXTERNAL double __complex__ catanh(double __complex__ z); +extern SYCL_EXTERNAL float __complex__ cpolarf(float rho, float theta); +extern SYCL_EXTERNAL double __complex__ cpolar(double rho, double theta); } #ifdef __GLIBC__ extern "C" { @@ -1638,6 +1683,14 @@ extern SYCL_EXTERNAL void __assert_fail(const char *expr, const char *file, extern SYCL_EXTERNAL float frexpf(float x, int *exp); extern SYCL_EXTERNAL float ldexpf(float x, int exp); extern SYCL_EXTERNAL float hypotf(float x, float y); +extern SYCL_EXTERNAL float __complex__ __mulsc3(float a, float b, float c, + float d); +extern SYCL_EXTERNAL double __complex__ __muldc3(double a, double b, double c, + double d); +extern SYCL_EXTERNAL float __complex__ __divsc3(float a, float b, float c, + float d); +extern SYCL_EXTERNAL double __complex__ __divdc3(float a, float b, float c, + float d); } #elif defined(_WIN32) extern "C" { From ae155dbf42a6b4fc2653bbb55ca57b5c0282e139 Mon Sep 17 00:00:00 2001 From: gejin Date: Fri, 2 Apr 2021 14:59:21 +0800 Subject: [PATCH 3/3] c99 complex API is not available in MS Signed-off-by: gejin --- sycl/include/CL/sycl/builtins.hpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/sycl/include/CL/sycl/builtins.hpp b/sycl/include/CL/sycl/builtins.hpp index 45ad2b04bad98..7780341c9af03 100644 --- a/sycl/include/CL/sycl/builtins.hpp +++ b/sycl/include/CL/sycl/builtins.hpp @@ -1630,7 +1630,17 @@ extern SYCL_EXTERNAL double atanh(double x); extern SYCL_EXTERNAL double frexp(double x, int *exp); extern SYCL_EXTERNAL double ldexp(double x, int exp); extern SYCL_EXTERNAL double hypot(double x, double y); +} +#ifdef __GLIBC__ +extern "C" { +extern SYCL_EXTERNAL void __assert_fail(const char *expr, const char *file, + unsigned int line, const char *func); +extern SYCL_EXTERNAL float frexpf(float x, int *exp); +extern SYCL_EXTERNAL float ldexpf(float x, int exp); +extern SYCL_EXTERNAL float hypotf(float x, float y); +// MS UCRT supports most of the C standard library but is +// an exception. extern SYCL_EXTERNAL float cimagf(float __complex__ z); extern SYCL_EXTERNAL double cimag(double __complex__ z); extern SYCL_EXTERNAL float crealf(float __complex__ z); @@ -1675,14 +1685,6 @@ extern SYCL_EXTERNAL float __complex__ catanhf(float __complex__ z); extern SYCL_EXTERNAL double __complex__ catanh(double __complex__ z); extern SYCL_EXTERNAL float __complex__ cpolarf(float rho, float theta); extern SYCL_EXTERNAL double __complex__ cpolar(double rho, double theta); -} -#ifdef __GLIBC__ -extern "C" { -extern SYCL_EXTERNAL void __assert_fail(const char *expr, const char *file, - unsigned int line, const char *func); -extern SYCL_EXTERNAL float frexpf(float x, int *exp); -extern SYCL_EXTERNAL float ldexpf(float x, int exp); -extern SYCL_EXTERNAL float hypotf(float x, float y); extern SYCL_EXTERNAL float __complex__ __mulsc3(float a, float b, float c, float d); extern SYCL_EXTERNAL double __complex__ __muldc3(double a, double b, double c,