[Libclc-dev] [PATCH 9/9] Add __clc_ prefix to functions in sincos_helpers.cl
Tom Stellard
thomas.stellard at amd.com
Thu Mar 12 13:11:46 PDT 2015
This will help avoid naming conflicts with functions defined in
kernels linking with libclc.
---
generic/lib/math/cos.cl | 6 +++---
generic/lib/math/sin.cl | 6 +++---
generic/lib/math/sincos_helpers.cl | 34 +++++++++++++++-------------------
generic/lib/math/sincos_helpers.h | 6 +++---
4 files changed, 24 insertions(+), 28 deletions(-)
diff --git a/generic/lib/math/cos.cl b/generic/lib/math/cos.cl
index bbd96b4..cbf7d59 100644
--- a/generic/lib/math/cos.cl
+++ b/generic/lib/math/cos.cl
@@ -33,10 +33,10 @@ _CLC_OVERLOAD _CLC_DEF float cos(float x)
float dx = as_float(ax);
float r0, r1;
- int regn = argReductionS(&r0, &r1, dx);
+ int regn = __clc_argReductionS(&r0, &r1, dx);
- float ss = -sinf_piby4(r0, r1);
- float cc = cosf_piby4(r0, r1);
+ float ss = -__clc_sinf_piby4(r0, r1);
+ float cc = __clc_cosf_piby4(r0, r1);
float c = (regn & 1) != 0 ? ss : cc;
c = as_float(as_int(c) ^ ((regn > 1) << 31));
diff --git a/generic/lib/math/sin.cl b/generic/lib/math/sin.cl
index ffc4dd1..50684e4 100644
--- a/generic/lib/math/sin.cl
+++ b/generic/lib/math/sin.cl
@@ -33,10 +33,10 @@ _CLC_OVERLOAD _CLC_DEF float sin(float x)
float dx = as_float(ax);
float r0, r1;
- int regn = argReductionS(&r0, &r1, dx);
+ int regn = __clc_argReductionS(&r0, &r1, dx);
- float ss = sinf_piby4(r0, r1);
- float cc = cosf_piby4(r0, r1);
+ float ss = __clc_sinf_piby4(r0, r1);
+ float cc = __clc_cosf_piby4(r0, r1);
float s = (regn & 1) != 0 ? cc : ss;
s = as_float(as_int(s) ^ ((regn > 1) << 31) ^ (ix ^ ax));
diff --git a/generic/lib/math/sincos_helpers.cl b/generic/lib/math/sincos_helpers.cl
index 1a5f10c..8619b34 100644
--- a/generic/lib/math/sincos_helpers.cl
+++ b/generic/lib/math/sincos_helpers.cl
@@ -25,13 +25,10 @@
#include "math.h"
#include "sincos_helpers.h"
-uint bitalign(uint hi, uint lo, uint shift)
-{
- return (hi << (32 - shift)) | (lo >> shift);
-}
+#define bitalign(hi, lo, shift) \
+ ((hi) << (32 - (shift))) | ((lo) >> (shift));
-float sinf_piby4(float x, float y)
-{
+_CLC_DEF float __clc_sinf_piby4(float x, float y) {
// Taylor series for sin(x) is x - x^3/3! + x^5/5! - x^7/7! ...
// = x * (1 - x^2/3! + x^4/5! - x^6/7! ...
// = x * f(w)
@@ -54,8 +51,7 @@ float sinf_piby4(float x, float y)
return ret;
}
-float cosf_piby4(float x, float y)
-{
+_CLC_DEF float __clc_cosf_piby4(float x, float y) {
// Taylor series for cos(x) is 1 - x^2/2! + x^4/4! - x^6/6! ...
// = f(w)
// where w = x*x and f(w) = (1 - w/2! + w^2/4! - w^3/6! ...
@@ -90,7 +86,7 @@ float cosf_piby4(float x, float y)
return ret;
}
-void fullMulS(float *hi, float *lo, float a, float b, float bh, float bt)
+_CLC_DEF void __clc_fullMulS(float *hi, float *lo, float a, float b, float bh, float bt)
{
if (HAVE_HW_FMA32()) {
float ph = a * b;
@@ -106,7 +102,7 @@ void fullMulS(float *hi, float *lo, float a, float b, float bh, float bt)
}
}
-float removePi2S(float *hi, float *lo, float x)
+_CLC_DEF float __clc_removePi2S(float *hi, float *lo, float x)
{
// 72 bits of pi/2
const float fpiby2_1 = (float) 0xC90FDA / 0x1.0p+23f;
@@ -127,17 +123,17 @@ float removePi2S(float *hi, float *lo, float x)
// subtract n * pi/2 from x
float rhead, rtail;
- fullMulS(&rhead, &rtail, fnpi2, fpiby2_1, fpiby2_1_h, fpiby2_1_t);
+ __clc_fullMulS(&rhead, &rtail, fnpi2, fpiby2_1, fpiby2_1_h, fpiby2_1_t);
float v = x - rhead;
float rem = v + (((x - v) - rhead) - rtail);
float rhead2, rtail2;
- fullMulS(&rhead2, &rtail2, fnpi2, fpiby2_2, fpiby2_2_h, fpiby2_2_t);
+ __clc_fullMulS(&rhead2, &rtail2, fnpi2, fpiby2_2, fpiby2_2_h, fpiby2_2_t);
v = rem - rhead2;
rem = v + (((rem - v) - rhead2) - rtail2);
float rhead3, rtail3;
- fullMulS(&rhead3, &rtail3, fnpi2, fpiby2_3, fpiby2_3_h, fpiby2_3_t);
+ __clc_fullMulS(&rhead3, &rtail3, fnpi2, fpiby2_3, fpiby2_3_h, fpiby2_3_t);
v = rem - rhead3;
*hi = v + ((rem - v) - rhead3);
@@ -145,9 +141,9 @@ float removePi2S(float *hi, float *lo, float x)
return fnpi2;
}
-int argReductionSmallS(float *r, float *rr, float x)
+_CLC_DEF int __clc_argReductionSmallS(float *r, float *rr, float x)
{
- float fnpi2 = removePi2S(r, rr, x);
+ float fnpi2 = __clc_removePi2S(r, rr, x);
return (int)fnpi2 & 0x3;
}
@@ -160,7 +156,7 @@ int argReductionSmallS(float *r, float *rr, float x)
HI = mul_hi(A, B); \
HI += LO < C
-int argReductionLargeS(float *r, float *rr, float x)
+_CLC_DEF int __clc_argReductionLargeS(float *r, float *rr, float x)
{
int xe = (int)(as_uint(x) >> 23) - 127;
uint xm = 0x00800000U | (as_uint(x) & 0x7fffffU);
@@ -298,11 +294,11 @@ int argReductionLargeS(float *r, float *rr, float x)
return ((i >> 1) + (i & 1)) & 0x3;
}
-int argReductionS(float *r, float *rr, float x)
+_CLC_DEF int __clc_argReductionS(float *r, float *rr, float x)
{
if (x < 0x1.0p+23f)
- return argReductionSmallS(r, rr, x);
+ return __clc_argReductionSmallS(r, rr, x);
else
- return argReductionLargeS(r, rr, x);
+ return __clc_argReductionLargeS(r, rr, x);
}
diff --git a/generic/lib/math/sincos_helpers.h b/generic/lib/math/sincos_helpers.h
index f89c19f..f936d66 100644
--- a/generic/lib/math/sincos_helpers.h
+++ b/generic/lib/math/sincos_helpers.h
@@ -20,6 +20,6 @@
* THE SOFTWARE.
*/
-float sinf_piby4(float x, float y);
-float cosf_piby4(float x, float y);
-int argReductionS(float *r, float *rr, float x);
+_CLC_DECL float __clc_sinf_piby4(float x, float y);
+_CLC_DECL float __clc_cosf_piby4(float x, float y);
+_CLC_DECL int __clc_argReductionS(float *r, float *rr, float x);
--
2.0.4
More information about the Libclc-dev
mailing list