return 1;
return powr(x, n);
}
-INLINE_OVERLOADABLE float rootn(float x, int n) {
+
+INLINE_OVERLOADABLE float internal_rootn(float x, int n, const bool isFastpath)
+{
float ax,re;
int sign = 0;
if( n == 0 )return NAN;
ax = __gen_ocl_fabs(x);
if(x <0.0f && (n&1))
sign = 1;
- re = __gen_ocl_internal_pow(ax,1.f/n);
+ if (isFastpath)
+ re = __gen_ocl_pow(ax,1.f/n);
+ else
+ re = __gen_ocl_internal_pow(ax,1.f/n);
if(sign)
re = -re;
return re;
}
+INLINE_OVERLOADABLE float rootn(float x, int n) {
+ return internal_rootn(x, n, 0);
+}
+
/////////////////////////////////////////////////////////////////////////////
// Geometric functions (see 6.11.5 of OCL 1.1 spec)
/////////////////////////////////////////////////////////////////////////////
INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_rootn(float x, int n)
{
- return __gen_ocl_pow(x, 1.f / n);
+ return internal_rootn(x, n, 1);
}
INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_sin (float x)