/* 
 *     Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.
 *
 * NVIDIA CORPORATION and its licensors retain all intellectual property
 * and proprietary rights in and to this software, related documentation
 * and any modifications thereto.  Any use, reproduction, disclosure or
 * distribution of this software and related documentation without an express
 * license agreement from NVIDIA CORPORATION is strictly prohibited.
 *
 */

#ifndef _PGI_CMATH_HEADER
#define _PGI_CMATH_HEADER

#define _PGI_CMATH_INCLUDE_IN_PROGRESS

#include_next <cmath>

#undef _PGI_CMATH_INCLUDE_IN_PROGRESS

#ifndef _PGI_MATH_LIBM_PRAGMAS
#define _PGI_MATH_LIBM_PRAGMAS
/* #pragma libm marks these routines for special handling in OpenACC regions */
#pragma libm (acosf, acoshf, asinf, asinhf, atanhf, atan2f)
#pragma libm (cbrtf, ceilf, copysignf, cosf, coshf)
#pragma libm (erff, erfcf, expf, exp2f, exp10f, expm1f)
#pragma libm (fabsf, floorf, fmaf, fminf, fmaxf)
#pragma libm (ilogbf)
#pragma libm (ldexpf, lgammaf, llrintf, llroundf, logbf, log1pf, logf, log2f, log10f, lrintf, lroundf)
#pragma libm (modff)
#pragma libm (nanf, nearbyintf, nextafterf)
#pragma libm (powf)
#pragma libm (remainderf, remquof, rintf, roundf, rsqrtf)
#pragma libm (scalblnf, scalbnf, sinf, sinhf, sqrtf)
#pragma libm (tanf, tanhf, tgammaf, truncf)
#pragma libm (abs, acos, acosh, asin, asinh, atanh, atan2)
#pragma libm (cbrt, ceil, copysign, cos, cosh)
#pragma libm (erf, erfc, exp, exp2, exp10, expm1)
#pragma libm (fabs, floor, fma, fmin, fmax)
#pragma libm (ilogb, isinf, isfinite, isnan)
#pragma libm (ldexp, lgamma, llrint, llround, logb, log1p, log, log2, log10, lrint, lround)
#pragma libm (modf)
#pragma libm (nan, nearbyint, nextafter)
#pragma libm (pow)
#pragma libm (remainder, remquo, rint, round, rsqrt)
#pragma libm (scalbln, scalbn, sin, sinh, sqrt)
#pragma libm (tan, tanh, tgamma, trunc)
#pragma libm (llabs)
#pragma libm (cyl_bessel_i0f,cyl_bessel_i1f)
#pragma libm (erfcinvf,erfcxf,erfinvf)
#pragma libm (erfcinv,erfcx,erfinv)
#pragma libm (fdim,fdimf)
#pragma libm (normf,norm3df,norm4df,normcdff,normcdfinvf)
#pragma libm (norm,norm3d,norm4d,normcdf,normcdfinv)
#pragma libm (rnormf,rnorm3df,rnorm4df,rhypotf,rcbrtf)
#pragma libm (rnorm,rnorm3d,rnorm4d,rhypot,rcbrt)
#pragma libm (ynf,y1f,y0f)
#pragma libm (yn,y1,y0)
#pragma libm (jnf,j1f,j0f)
#pragma libm (jn,j1,j0)
#endif

#endif 
