Add foreach_active iteration statement.

Issue #298.
This commit is contained in:
Matt Pharr
2012-06-22 10:35:43 -07:00
parent ed13dd066b
commit b4a078e2f6
15 changed files with 644 additions and 279 deletions

View File

@@ -421,7 +421,7 @@ static inline void memcpy(void * varying dst, void * varying src,
da[programIndex] = dst;
sa[programIndex] = src;
__foreach_active (i) {
foreach_active (i) {
void * uniform d = da[i], * uniform s = sa[i];
__memcpy32((int8 * uniform)d, (int8 * uniform)s, extract(count, i));
}
@@ -435,7 +435,7 @@ static inline void memcpy64(void * varying dst, void * varying src,
da[programIndex] = dst;
sa[programIndex] = src;
__foreach_active (i) {
foreach_active (i) {
void * uniform d = da[i], * uniform s = sa[i];
__memcpy64((int8 * uniform)d, (int8 * uniform)s, extract(count, i));
}
@@ -459,7 +459,7 @@ static inline void memmove(void * varying dst, void * varying src,
da[programIndex] = dst;
sa[programIndex] = src;
__foreach_active (i) {
foreach_active (i) {
void * uniform d = da[i], * uniform s = sa[i];
__memmove32((int8 * uniform)d, (int8 * uniform)s, extract(count, i));
}
@@ -473,7 +473,7 @@ static inline void memmove64(void * varying dst, void * varying src,
da[programIndex] = dst;
sa[programIndex] = src;
__foreach_active (i) {
foreach_active (i) {
void * uniform d = da[i], * uniform s = sa[i];
__memmove64((int8 * uniform)d, (int8 * uniform)s, extract(count, i));
}
@@ -493,7 +493,7 @@ static inline void memset(void * varying ptr, int8 val, int32 count) {
void * uniform pa[programCount];
pa[programIndex] = ptr;
__foreach_active (i) {
foreach_active (i) {
__memset32((int8 * uniform)pa[i], extract(val, i), extract(count, i));
}
}
@@ -502,7 +502,7 @@ static inline void memset64(void * varying ptr, int8 val, int64 count) {
void * uniform pa[programCount];
pa[programIndex] = ptr;
__foreach_active (i) {
foreach_active (i) {
__memset64((int8 * uniform)pa[i], extract(val, i), extract(count, i));
}
}
@@ -711,7 +711,7 @@ static inline void prefetch_l1(const void * varying ptr) {
const void * uniform ptrArray[programCount];
ptrArray[programIndex] = ptr;
__foreach_active (i) {
foreach_active (i) {
const void * uniform p = ptrArray[i];
prefetch_l1(p);
}
@@ -721,7 +721,7 @@ static inline void prefetch_l2(const void * varying ptr) {
const void * uniform ptrArray[programCount];
ptrArray[programIndex] = ptr;
__foreach_active (i) {
foreach_active (i) {
const void * uniform p = ptrArray[i];
prefetch_l2(p);
}
@@ -731,7 +731,7 @@ static inline void prefetch_l3(const void * varying ptr) {
const void * uniform ptrArray[programCount];
ptrArray[programIndex] = ptr;
__foreach_active (i) {
foreach_active (i) {
const void * uniform p = ptrArray[i];
prefetch_l3(p);
}
@@ -741,7 +741,7 @@ static inline void prefetch_nt(const void * varying ptr) {
const void * uniform ptrArray[programCount];
ptrArray[programIndex] = ptr;
__foreach_active (i) {
foreach_active (i) {
const void * uniform p = ptrArray[i];
prefetch_nt(p);
}
@@ -1621,7 +1621,7 @@ static inline TA atomic_##OPA##_global(uniform TA * varying ptr, TA value) { \
uniform TA * uniform ptrArray[programCount]; \
ptrArray[programIndex] = ptr; \
TA ret; \
__foreach_active (i) { \
foreach_active (i) { \
uniform TA * uniform p = ptrArray[i]; \
uniform TA v = extract(value, i); \
uniform TA r = __atomic_##OPB##_uniform_##TB##_global(p, v); \
@@ -1672,7 +1672,7 @@ static inline TA atomic_swap_global(uniform TA * varying ptr, TA value) { \
uniform TA * uniform ptrArray[programCount]; \
ptrArray[programIndex] = ptr; \
TA ret; \
__foreach_active (i) { \
foreach_active (i) { \
uniform TA * uniform p = ptrArray[i]; \
uniform TA v = extract(value, i); \
uniform TA r = __atomic_swap_uniform_##TB##_global(p, v); \
@@ -1699,7 +1699,7 @@ static inline TA atomic_##OPA##_global(uniform TA * varying ptr, \
uniform TA * uniform ptrArray[programCount]; \
ptrArray[programIndex] = ptr; \
TA ret; \
__foreach_active (i) { \
foreach_active (i) { \
uniform TA * uniform p = ptrArray[i]; \
uniform TA v = extract(value, i); \
uniform TA r = __atomic_##OPB##_uniform_##TB##_global(p, v); \
@@ -1774,7 +1774,7 @@ static inline TA atomic_compare_exchange_global( \
uniform TA * uniform ptrArray[programCount]; \
ptrArray[programIndex] = ptr; \
TA ret; \
__foreach_active (i) { \
foreach_active (i) { \
uniform TA r = \
__atomic_compare_exchange_uniform_##TB##_global(ptrArray[i], \
extract(oldval, i), \
@@ -1848,7 +1848,7 @@ static inline uniform TYPE atomic_##NAME##_local(uniform TYPE * uniform ptr, \
} \
static inline TYPE atomic_##NAME##_local(uniform TYPE * uniform ptr, TYPE value) { \
TYPE ret; \
__foreach_active (i) { \
foreach_active (i) { \
ret = insert(ret, i, *ptr); \
*ptr = OPFUNC(*ptr, extract(value, i)); \
} \
@@ -1858,7 +1858,7 @@ static inline TYPE atomic_##NAME##_local(uniform TYPE * p, TYPE value) { \
TYPE ret; \
uniform TYPE * uniform ptrs[programCount]; \
ptrs[programIndex] = p; \
__foreach_active (i) { \
foreach_active (i) { \
ret = insert(ret, i, *ptrs[i]); \
*ptrs[i] = OPFUNC(*ptrs[i], extract(value, i)); \
} \
@@ -1975,7 +1975,7 @@ static inline uniform TYPE atomic_compare_exchange_local(uniform TYPE * uniform
static inline TYPE atomic_compare_exchange_local(uniform TYPE * uniform ptr, \
TYPE cmp, TYPE update) { \
TYPE ret; \
__foreach_active (i) { \
foreach_active (i) { \
uniform TYPE old = *ptr; \
if (old == extract(cmp, i)) \
*ptr = extract(update, i); \
@@ -1988,7 +1988,7 @@ static inline TYPE atomic_compare_exchange_local(uniform TYPE * varying p, \
uniform TYPE * uniform ptrs[programCount]; \
ptrs[programIndex] = p; \
TYPE ret; \
__foreach_active (i) { \
foreach_active (i) { \
uniform TYPE old = *ptrs[i]; \
if (old == extract(cmp, i)) \
*ptrs[i] = extract(update, i); \
@@ -2127,7 +2127,7 @@ static inline float sin(float x_full) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_sinf(extract(x_full, i));
ret = insert(ret, i, r);
}
@@ -2259,7 +2259,7 @@ static inline float asin(float x) {
if (__math_lib == __math_lib_svml ||
__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_asinf(extract(x, i));
ret = insert(ret, i, r);
}
@@ -2364,7 +2364,7 @@ static inline float cos(float x_full) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_cosf(extract(x_full, i));
ret = insert(ret, i, r);
}
@@ -2502,7 +2502,7 @@ static inline void sincos(float x_full, varying float * uniform sin_result,
__svml_sincos(x_full, sin_result, cos_result);
}
else if (__math_lib == __math_lib_system) {
__foreach_active (i) {
foreach_active (i) {
uniform float s, c;
__stdlib_sincosf(extract(x_full, i), &s, &c);
*sin_result = insert(*sin_result, i, s);
@@ -2635,7 +2635,7 @@ static inline float tan(float x_full) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_tanf(extract(x_full, i));
ret = insert(ret, i, r);
}
@@ -2786,7 +2786,7 @@ static inline float atan(float x_full) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_atanf(extract(x_full, i));
ret = insert(ret, i, r);
}
@@ -2881,7 +2881,7 @@ static inline float atan2(float y, float x) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_atan2f(extract(y, i), extract(x, i));
ret = insert(ret, i, r);
}
@@ -2944,7 +2944,7 @@ static inline float exp(float x_full) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_expf(extract(x_full, i));
ret = insert(ret, i, r);
}
@@ -3151,7 +3151,7 @@ static inline float log(float x_full) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_logf(extract(x_full, i));
ret = insert(ret, i, r);
}
@@ -3326,7 +3326,7 @@ static inline float pow(float a, float b) {
}
else if (__math_lib == __math_lib_system) {
float ret;
__foreach_active (i) {
foreach_active (i) {
uniform float r = __stdlib_powf(extract(a, i), extract(b, i));
ret = insert(ret, i, r);
}
@@ -3416,7 +3416,7 @@ static inline double sin(double x) {
return sin((float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_sin(extract(x, i));
ret = insert(ret, i, r);
}
@@ -3438,7 +3438,7 @@ static inline double cos(double x) {
return cos((float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_cos(extract(x, i));
ret = insert(ret, i, r);
}
@@ -3464,7 +3464,7 @@ static inline void sincos(double x, varying double * uniform sin_result,
*cos_result = cr;
}
else {
__foreach_active (i) {
foreach_active (i) {
uniform double sr, cr;
__stdlib_sincos(extract(x, i), &sr, &cr);
*sin_result = insert(*sin_result, i, sr);
@@ -3492,7 +3492,7 @@ static inline double tan(double x) {
return tan((float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_tan(extract(x, i));
ret = insert(ret, i, r);
}
@@ -3514,7 +3514,7 @@ static inline double atan(double x) {
return atan((float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_atan(extract(x, i));
ret = insert(ret, i, r);
}
@@ -3536,7 +3536,7 @@ static inline double atan2(double y, double x) {
return atan2((float)y, (float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_atan2(extract(y, i), extract(x, i));
ret = insert(ret, i, r);
}
@@ -3558,7 +3558,7 @@ static inline double exp(double x) {
return exp((float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_exp(extract(x, i));
ret = insert(ret, i, r);
}
@@ -3580,7 +3580,7 @@ static inline double log(double x) {
return log((float)x);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_log(extract(x, i));
ret = insert(ret, i, r);
}
@@ -3602,7 +3602,7 @@ static inline double pow(double a, double b) {
return pow((float)a, (float)b);
else {
double ret;
__foreach_active (i) {
foreach_active (i) {
uniform double r = __stdlib_pow(extract(a, i), extract(b, i));
ret = insert(ret, i, r);
}