diff --git a/libclc/r600/lib/SOURCES b/libclc/r600/lib/SOURCES --- a/libclc/r600/lib/SOURCES +++ b/libclc/r600/lib/SOURCES @@ -1,5 +1,7 @@ math/fmax.cl math/fmin.cl +math/native_rsqrt.cl +math/rsqrt.cl synchronization/barrier.cl workitem/get_global_offset.cl workitem/get_group_id.cl diff --git a/libclc/r600/lib/math/native_rsqrt.cl b/libclc/r600/lib/math/native_rsqrt.cl new file mode 100644 --- /dev/null +++ b/libclc/r600/lib/math/native_rsqrt.cl @@ -0,0 +1,10 @@ +#include + +#include "../../../generic/lib/clcmacro.h" + +_CLC_OVERLOAD _CLC_DEF float native_rsqrt(float x) +{ + return __builtin_r600_recipsqrt_ieeef(x); +} + +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, native_rsqrt, float); diff --git a/libclc/r600/lib/math/rsqrt.cl b/libclc/r600/lib/math/rsqrt.cl new file mode 100644 --- /dev/null +++ b/libclc/r600/lib/math/rsqrt.cl @@ -0,0 +1,23 @@ +#include + +#include "../../../generic/lib/clcmacro.h" + +_CLC_OVERLOAD _CLC_DEF float rsqrt(float x) +{ + return __builtin_r600_recipsqrt_ieeef(x); +} + +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, rsqrt, float); + +#ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +_CLC_OVERLOAD _CLC_DEF double rsqrt(double x) +{ + return __builtin_r600_recipsqrt_ieee(x); +} + +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, rsqrt, double); + +#endif