diff --git a/projects/clr/hipamd/include/hcc_detail/hip_runtime.h b/projects/clr/hipamd/include/hcc_detail/hip_runtime.h index eb518cc88d..fbe1ffce15 100644 --- a/projects/clr/hipamd/include/hcc_detail/hip_runtime.h +++ b/projects/clr/hipamd/include/hcc_detail/hip_runtime.h @@ -243,7 +243,7 @@ __device__ double jn(int n, double x); __device__ double ldexp(double x, int exp); __device__ double lgamma(double x); __device__ long long llrint(double x); -__device__ long llround(double x); +__device__ long long llround(double x); __device__ double log(double x); __device__ double log10(double x); __device__ double log1p(double x); @@ -257,7 +257,7 @@ __device__ double nearbyint(double x); __device__ double nextafter(double x, double y); __device__ double norm(int dim, const double* t); __device__ double norm3d(double a, double b, double c); -__device__ double norm4d(double a, double b, double d); +__device__ double norm4d(double a, double b, double c, double d); __device__ double normcdf(double y); __device__ double normcdfinv(double y); __device__ double pow(double x, double y); @@ -275,8 +275,8 @@ __device__ double scalbln(double x, long int n); __device__ double scalbn(double x, int n); __host__ __device__ unsigned signbit(double a); __device__ double sin(double a); -__device__ double sincos(double x, double *sptr, double *cptr); -__device__ double sincospi(double x, double *sptr, double *cptr); +__device__ void sincos(double x, double *sptr, double *cptr); +__device__ void sincospi(double x, double *sptr, double *cptr); __device__ double sinh(double x); __host__ __device__ double sinpi(double x); __device__ double sqrt(double x); diff --git a/projects/clr/hipamd/src/device_util.cpp b/projects/clr/hipamd/src/device_util.cpp index 55a394f7b0..cd57e54af3 100644 --- a/projects/clr/hipamd/src/device_util.cpp +++ b/projects/clr/hipamd/src/device_util.cpp @@ -486,6 +486,16 @@ __device__ double log(double x) { return hc::precise_math::log(x); } +__device__ long long int llrint(double x) +{ + long long int y = hc::precise_math::round(x); + return y; +} +__device__ long long int llround(double x) +{ + long long int y = hc::precise_math::round(x); + return y; +} __device__ double log10(double x) { return hc::precise_math::log10(x); @@ -502,6 +512,16 @@ __device__ double logb(double x) { return hc::precise_math::logb(x); } +__device__ long int lrint(double x) +{ + long int y = hc::precise_math::round(x); + return y; +} +__device__ long int lround(double x) +{ + long int y = hc::precise_math::round(x); + return y; +} __device__ double nan(const char *tagp) { return hc::precise_math::nan((int)*tagp); @@ -510,6 +530,17 @@ __device__ double nearbyint(double x) { return hc::precise_math::nearbyint(x); } +__device__ double norm3d(double a, double b, double c) +{ + double x = a*a + b*b + c*c; + return hc::precise_math::sqrt(x); +} +__device__ double norm4d(double a, double b, double c, double d) +{ + double x = a*a + b*b; + double y = c*c + d*d; + return hc::precise_math::sqrt(x+y); +} __device__ double pow(double x, double y) { return hc::precise_math::pow(x, y); @@ -518,6 +549,31 @@ __device__ double remainder(double x, double y) { return hc::precise_math::remainder(x, y); } +__device__ double rhypot(double x, double y) +{ + return 1/hc::precise_math::sqrt(x*x + y*y); +} +__device__ double rint(double x) +{ + return hc::precise_math::round(x); +} +__device__ double rnorm3d(double a, double b, double c) +{ + return hc::precise_math::rsqrt(a*a + b*b + c*c); +} +__device__ double rnorm4d(double a, double b, double c, double d) +{ + return hc::precise_math::rsqrt(a*a + b*b + c*c + d*d); +} +__device__ double rnorm(int dim, const double* t) +{ + double x = 0.0; + for(int i=0;i