diff --git a/tests/acos.ispc b/tests/acos.ispc index 45173782..225fda97 100644 --- a/tests/acos.ispc +++ b/tests/acos.ispc @@ -6,14 +6,14 @@ bool ok(float x, float ref) { return (abs(x - ref) < 1e-6) || abs((x-ref)/ref) < export void f_v(uniform float RET[]) { uniform float vals[8] = { 0, 1, 0.5, -1, -.87, -.25, 1e-3, -.99999999 }; - uniform float r[8]; + uniform float r[programCount]; foreach (i = 0 ... 8) - r[i] = cos(acos(vals[i])); + r[i] = cos(acos(vals[i % 8])); int errors = 0; for (uniform int i = 0; i < 8; ++i) { - if (ok(r[i], vals[i]) == false) { - print("error @ %: got %, expected %\n", i, r[i], vals[i]); + if (ok(r[i], vals[i%8]) == false) { + print("error @ %: got %, expected %\n", i, r[i], vals[i%8]); ++errors; } } diff --git a/tests/aossoa-1.ispc b/tests/aossoa-1.ispc index 6323d80f..59964d6d 100644 --- a/tests/aossoa-1.ispc +++ b/tests/aossoa-1.ispc @@ -3,7 +3,9 @@ export uniform int width() { return programCount; } export void f_v(uniform float RET[]) { #define width 3 -#define maxProgramCount 16 +#define maxProgramCount 64 + assert(programCount <= maxProgramCount); + //CO const uniform int width = 3; //CO const uniform int maxProgramCount = 16; uniform float a[width*maxProgramCount], r[width*maxProgramCount]; diff --git a/tests/aossoa-2.ispc b/tests/aossoa-2.ispc index b23a25e4..9ff82226 100644 --- a/tests/aossoa-2.ispc +++ b/tests/aossoa-2.ispc @@ -3,7 +3,9 @@ export uniform int width() { return programCount; } export void f_v(uniform float RET[]) { #define width 4 -#define maxProgramCount 16 +#define maxProgramCount 64 + assert(programCount <= maxProgramCount); + //CO const uniform int width = 4; //CO const uniform int maxProgramCount = 16; uniform float a[width*maxProgramCount], r[width*maxProgramCount]; diff --git a/tests/aossoa-5.ispc b/tests/aossoa-5.ispc index 883786c0..eb4fed3a 100644 --- a/tests/aossoa-5.ispc +++ b/tests/aossoa-5.ispc @@ -3,7 +3,9 @@ export uniform int width() { return programCount; } export void f_v(uniform float RET[]) { #define width 3 -#define maxProgramCount 16 +#define maxProgramCount 64 + assert(programCount <= maxProgramCount); + //CO const uniform int width = 3; //CO const uniform int maxProgramCount = 16; uniform int a[width*maxProgramCount], r[width*maxProgramCount]; diff --git a/tests/aossoa-6.ispc b/tests/aossoa-6.ispc index 34d35348..b64cd10b 100644 --- a/tests/aossoa-6.ispc +++ b/tests/aossoa-6.ispc @@ -3,7 +3,9 @@ export uniform int width() { return programCount; } export void f_v(uniform float RET[]) { #define width 4 -#define maxProgramCount 16 +#define maxProgramCount 64 + assert(programCount <= maxProgramCount); + //CO const uniform int width = 4; //CO const uniform int maxProgramCount = 16; uniform int a[width*maxProgramCount], r[width*maxProgramCount]; diff --git a/tests/array-gather-ifs.ispc b/tests/array-gather-ifs.ispc index d635e10f..626d7c3b 100644 --- a/tests/array-gather-ifs.ispc +++ b/tests/array-gather-ifs.ispc @@ -5,9 +5,9 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[45]; + uniform float x[programCount+15]; uniform int i; - for (i = 0; i < 45; ++i) + for (i = 0; i < programCount+15; ++i) x[i] = i; float ret; diff --git a/tests/array-gather-multi-unif.ispc b/tests/array-gather-multi-unif.ispc index d876f314..016ecbfd 100644 --- a/tests/array-gather-multi-unif.ispc +++ b/tests/array-gather-multi-unif.ispc @@ -10,7 +10,8 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { for (uniform int i = 0; i < 29+b; ++i) for (uniform int j = 0; j < 29+b; ++j) x[i][j] = 0; - x[a][a] = a; + if (a < 34) + x[a][a] = a; RET[programIndex] = x[4][4] + x[1][1] + x[b][b] + x[0][0]; } diff --git a/tests/array-gather-simple.ispc b/tests/array-gather-simple.ispc index 8835b2f0..5abc7f97 100644 --- a/tests/array-gather-simple.ispc +++ b/tests/array-gather-simple.ispc @@ -12,8 +12,10 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { } export void result(uniform float RET[]) { - RET[0] = 1; RET[4] = 5; RET[8] = 9; RET[12] = 13; - RET[1] = RET[5] = RET[9] = RET[13] = 0; - RET[2] = 6; RET[6] = 14; RET[10] = 22; RET[14] = 30; - RET[3] = RET[7] = RET[11] = RET[15] = 3; + for (uniform int i = 0; i < programCount; i += 4) { + RET[i] = i+1; + RET[i+1] = 0; + RET[i+2] = 2 * (i+3); + RET[i+3] = 3; + } } diff --git a/tests/array-gather-unif-runflags.ispc b/tests/array-gather-unif-runflags.ispc index f2936f05..c13f5c29 100644 --- a/tests/array-gather-unif-runflags.ispc +++ b/tests/array-gather-unif-runflags.ispc @@ -4,9 +4,9 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[45]; + uniform float x[programCount+5]; uniform int i; - for (i = 0; i < 45; ++i) + for (i = 0; i < programCount+5; ++i) x[i] = i+b; a -= 1; if (a == 3) a = 0; diff --git a/tests/array-gather-unif.ispc b/tests/array-gather-unif.ispc index 3e040ad3..7ff35c9d 100644 --- a/tests/array-gather-unif.ispc +++ b/tests/array-gather-unif.ispc @@ -4,9 +4,9 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[45]; + uniform float x[programCount+5]; uniform int i; - for (i = 0; i < 45; ++i) + for (i = 0; i < programCount+5; ++i) x[i] = i+b; RET[programIndex] = x[a]; } diff --git a/tests/array-gather-vary.ispc b/tests/array-gather-vary.ispc index bbbdd85d..6e8c2f5e 100644 --- a/tests/array-gather-vary.ispc +++ b/tests/array-gather-vary.ispc @@ -4,14 +4,14 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - float x[55]; + float x[programCount+10]; uniform int i; - for (i = 0; i < 45; ++i) + for (i = 0; i < programCount+10; ++i) x[i] = a+b; RET[programIndex] = x[a]; } export void result(uniform float RET[]) { - RET[programIndex] = 6 + programIndex;; + RET[programIndex] = 6 + programIndex; } diff --git a/tests/array-mixed-unif-vary-indexing-2.ispc b/tests/array-mixed-unif-vary-indexing-2.ispc index edd53c84..8143ca29 100644 --- a/tests/array-mixed-unif-vary-indexing-2.ispc +++ b/tests/array-mixed-unif-vary-indexing-2.ispc @@ -15,6 +15,9 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { x[a][b-1] = 0; else x[a][b-1] = 1; + + a = min(a, 46); + RET[programIndex] = x[3][a]; } diff --git a/tests/array-mixed-unif-vary-indexing-3.ispc b/tests/array-mixed-unif-vary-indexing-3.ispc index 686f121e..ab3a7a7c 100644 --- a/tests/array-mixed-unif-vary-indexing-3.ispc +++ b/tests/array-mixed-unif-vary-indexing-3.ispc @@ -4,9 +4,10 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[47][47]; - for (uniform int i = 0; i < 47; ++i) - for (uniform int j = 0; j < 47; ++j) + assert(programCount <= 64); + uniform float x[70][70]; + for (uniform int i = 0; i < 70; ++i) + for (uniform int j = 0; j < 70; ++j) x[i][j] = 2+b-5; // all are 2 except (4,2) = 0, (4,...) = 1, (4,programCount-1)=2 diff --git a/tests/array-mixed-unif-vary-indexing.ispc b/tests/array-mixed-unif-vary-indexing.ispc index ebe932ad..96fc0870 100644 --- a/tests/array-mixed-unif-vary-indexing.ispc +++ b/tests/array-mixed-unif-vary-indexing.ispc @@ -10,6 +10,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { for (uniform int j = 0; j < 47; ++j) x[i][j] = 2+b-5; + a = min(a,46); x[a][b-1] = 0; RET[programIndex] = x[2][a]; } diff --git a/tests/array-multidim-gather-scatter.ispc b/tests/array-multidim-gather-scatter.ispc index 8a2f3947..1528b070 100644 --- a/tests/array-multidim-gather-scatter.ispc +++ b/tests/array-multidim-gather-scatter.ispc @@ -11,7 +11,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { uniform int index[4] = { 0, 1, 2, 4 }; float v = index[programIndex & 0x3]; - x[a][v] = 0; + x[min(a,39)][v] = 0; RET[programIndex] = x[v+1][v]; } diff --git a/tests/array-scatter-unif-2.ispc b/tests/array-scatter-unif-2.ispc index ef0c659b..89181be6 100644 --- a/tests/array-scatter-unif-2.ispc +++ b/tests/array-scatter-unif-2.ispc @@ -4,9 +4,8 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[100]; - // HACK to avoid @llvm.memset... - for (uniform int i = 0; i < b*20; ++i) + uniform float x[2*programCount]; + for (uniform int i = 0; i < 2*programCount; ++i) x[i] = 0; x[2*(a-1)] = b; diff --git a/tests/array-scatter-unif-3.ispc b/tests/array-scatter-unif-3.ispc index 8aad3110..703af6fa 100644 --- a/tests/array-scatter-unif-3.ispc +++ b/tests/array-scatter-unif-3.ispc @@ -4,9 +4,8 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[100]; - // HACK to avoid @llvm.memset... - for (uniform int i = 0; i < b*20; ++i) + uniform float x[2*programCount]; + for (uniform int i = 0; i < 2*programCount; ++i) x[i] = 0; x[2*(a-1)] = b; diff --git a/tests/array-scatter-unif.ispc b/tests/array-scatter-unif.ispc index a553d703..6b5e75d0 100644 --- a/tests/array-scatter-unif.ispc +++ b/tests/array-scatter-unif.ispc @@ -5,8 +5,8 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - uniform float x[40]; - for (uniform int i = 0; i < 40; ++i) + uniform float x[programCount+5]; + for (uniform int i = 0; i < programCount+5; ++i) x[i] = 0.; x[a] = 2; RET[programIndex] = x[4] + x[0] + x[5]; diff --git a/tests/array-scatter-vary.ispc b/tests/array-scatter-vary.ispc index 07527519..d9d9bc37 100644 --- a/tests/array-scatter-vary.ispc +++ b/tests/array-scatter-vary.ispc @@ -4,9 +4,8 @@ export uniform int width() { return programCount; } export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; - float x[30]; - // HACK to avoid @llvm.memset... - for (uniform int i = 0; i < b*6; ++i) + float x[2*programCount]; + for (uniform int i = 0; i < 2*programCount; ++i) x[i] = 0; x[a] = a; RET[programIndex] = x[4] + x[0] + x[5]; diff --git a/tests/array-struct-gather.ispc b/tests/array-struct-gather.ispc index 7a18acba..d3799800 100644 --- a/tests/array-struct-gather.ispc +++ b/tests/array-struct-gather.ispc @@ -4,14 +4,14 @@ export uniform int width() { return programCount; } struct Foo { - uniform float x[17]; + uniform float x[programCount+1]; }; export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; uniform Foo foo; uniform int i; - for (i = 0; i < 17; ++i) + for (i = 0; i < programCount+1; ++i) foo.x[i] = i; if ((int)a & 1) diff --git a/tests/asin.ispc b/tests/asin.ispc index a6839b09..4ad23b3a 100644 --- a/tests/asin.ispc +++ b/tests/asin.ispc @@ -8,12 +8,12 @@ export void f_v(uniform float RET[]) { uniform float vals[8] = { 0, 1, 0.5, -1, -.87, -.25, 1e-3, -.99999999 }; uniform float r[8]; foreach (i = 0 ... 8) - r[i] = sin(asin(vals[i])); + r[i] = sin(asin(vals[i%8])); int errors = 0; for (uniform int i = 0; i < 8; ++i) { - if (ok(r[i], vals[i]) == false) { - print("error @ %: got %, expected %\n", i, r[i], vals[i]); + if (ok(r[i], vals[i%8]) == false) { + print("error @ %: got %, expected %\n", i, r[i], vals[i%8]); ++errors; } } diff --git a/tests/atomics-12.ispc b/tests/atomics-12.ispc index 0596a85f..c27ad99c 100644 --- a/tests/atomics-12.ispc +++ b/tests/atomics-12.ispc @@ -6,14 +6,14 @@ uniform unsigned int32 s = 0; export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; float b = 0; - if (programIndex & 1) + if (programIndex < 30 && programIndex & 1) b = atomic_or_global(&s, (1 << programIndex)); RET[programIndex] = s; } export void result(uniform float RET[]) { uniform int sum = 0; - for (uniform int i = 0; i < programCount; ++i) + for (uniform int i = 0; i < min(30, programCount); ++i) if (i & 1) sum += (1 << i); RET[programIndex] = sum; diff --git a/tests/atomics-13.ispc b/tests/atomics-13.ispc index fe9a5d1e..86faaddb 100644 --- a/tests/atomics-13.ispc +++ b/tests/atomics-13.ispc @@ -5,12 +5,12 @@ uniform unsigned int32 s = 0; export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; - float b = 0; - if (programIndex & 1) + int32 b = 0; + if (programIndex < 32 && programIndex & 1) b = atomic_or_global(&s, (1 << programIndex)); RET[programIndex] = popcnt(reduce_max((int32)b)); } export void result(uniform float RET[]) { - RET[programIndex] = programCount == 1 ? 0 : ((programCount/2) - 1); + RET[programIndex] = programCount == 1 ? 0 : ((min(32, programCount)/2) - 1); } diff --git a/tests/atomics-14.ispc b/tests/atomics-14.ispc index c4551039..7beb3e75 100644 --- a/tests/atomics-14.ispc +++ b/tests/atomics-14.ispc @@ -7,14 +7,14 @@ export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; float b = 0; if (programIndex & 1) - b = atomic_or_global(&s, (1 << programIndex)); + b = atomic_or_global(&s, (1ull << programIndex)); RET[programIndex] = (s>>20); } export void result(uniform float RET[]) { - uniform int sum = 0; + uniform int64 sum = 0; for (uniform int i = 0; i < programCount; ++i) if (i & 1) - sum += (1 << i); + sum += (1ull << i); RET[programIndex] = ((unsigned int64)(0xffffffffff000000 | sum)) >> 20; } diff --git a/tests/atomics-4.ispc b/tests/atomics-4.ispc index 83e9fbf0..30b343d1 100644 --- a/tests/atomics-4.ispc +++ b/tests/atomics-4.ispc @@ -5,10 +5,10 @@ uniform int32 s = 0; export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; - float b = atomic_or_global(&s, (1< 0) { + if ((programIndex & 1) == 0 && programIndex > 0 && programIndex < 32) { int val = 0xffffffff; for (int i = 0; i < programIndex-1; i += 2) val &= ~(1<>20); } export void result(uniform float RET[]) { uniform int sum = 0; - for (uniform int i = 0; i < programCount; ++i) + for (uniform int i = 0; i < min(32, programCount); ++i) if (i & 1) sum += (1 << i); RET[programIndex] = ((unsigned int64)(0xffffffffff000000 | sum)) >> 20; diff --git a/tests/local-atomics-4.ispc b/tests/local-atomics-4.ispc index 651cf4c6..f7f6a04a 100644 --- a/tests/local-atomics-4.ispc +++ b/tests/local-atomics-4.ispc @@ -5,10 +5,12 @@ uniform int32 s = 0; export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; - float b = atomic_or_local(&s, (1< int3; export void f_fu(uniform float ret[], uniform float aa[], uniform float b) { float a = aa[programIndex]; - uniform int3 array[32]; - for (uniform int i = 0; i < 6*b + 2; ++i) { + uniform int3 array[programCount]; + for (uniform int i = 0; i < programCount + 5 - b; ++i) { for (uniform int j = 0; j < 3; ++j) array[i][j] = i+100*j; } diff --git a/tests/masked-struct-scatter-varying.ispc b/tests/masked-struct-scatter-varying.ispc index 928197a3..8211aa67 100644 --- a/tests/masked-struct-scatter-varying.ispc +++ b/tests/masked-struct-scatter-varying.ispc @@ -5,8 +5,8 @@ struct Foo { float x; float y; }; export void f_fu(uniform float ret[], uniform float aa[], uniform float b) { float a = aa[programIndex]; - Foo foo[32]; - for (uniform int i = 0; i < 32; ++i) + Foo foo[programCount+1]; + for (uniform int i = 0; i < programCount+1; ++i) foo[i].x = i; varying Foo fv = foo[a]; fv.x += 1000; diff --git a/tests/max-int-1.ispc b/tests/max-int-1.ispc index 7ad02713..f1492b8b 100644 --- a/tests/max-int-1.ispc +++ b/tests/max-int-1.ispc @@ -6,8 +6,8 @@ export uniform int width() { return programCount; } export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; int i = (int)a; - RET[programIndex] = max((int)20, i); + RET[programIndex] = max((int)200, i); } -export void result(uniform float RET[]) { RET[programIndex] = 20.; } +export void result(uniform float RET[]) { RET[programIndex] = 200.; } diff --git a/tests/min-float.ispc b/tests/min-float.ispc index 3577daab..caedd962 100644 --- a/tests/min-float.ispc +++ b/tests/min-float.ispc @@ -5,7 +5,7 @@ export uniform int width() { return programCount; } export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; - RET[programIndex] = min(a, 20.f); + RET[programIndex] = min(a, 200.f); } export void result(uniform float RET[]) { RET[programIndex] = 1+programIndex; } diff --git a/tests/min-int.ispc b/tests/min-int.ispc index 50df3e19..483b9b41 100644 --- a/tests/min-int.ispc +++ b/tests/min-int.ispc @@ -6,7 +6,7 @@ export uniform int width() { return programCount; } export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; int i = (int)a; - RET[programIndex] = min((int)20, i); + RET[programIndex] = min((int)200, i); } export void result(uniform float RET[]) { RET[programIndex] = 1+programIndex; } diff --git a/tests/min-uint-2.ispc b/tests/min-uint-2.ispc index e8f0e8c9..9338aeb0 100644 --- a/tests/min-uint-2.ispc +++ b/tests/min-uint-2.ispc @@ -3,7 +3,7 @@ export uniform int width() { return programCount; } export void f_f(uniform float r[], uniform float a[]) { unsigned int i = (unsigned int)a[programIndex]; - r[programIndex] = min((unsigned int)20, i); + r[programIndex] = min((unsigned int)200, i); } export void result(uniform float r[]) { diff --git a/tests/nested-structs-2.ispc b/tests/nested-structs-2.ispc index cb58e588..fd30c7ef 100644 --- a/tests/nested-structs-2.ispc +++ b/tests/nested-structs-2.ispc @@ -4,7 +4,7 @@ export uniform int width() { return programCount; } struct Foo { - float f[18]; + float f[129]; }; struct Bar { @@ -15,7 +15,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; uniform Bar bar; for (uniform int i = 0; i < 6; ++i) - for (uniform int j = 0; j < 18; ++j) + for (uniform int j = 0; j < 129; ++j) bar.foo[i].f[j] = 2.+b-5; bar.foo[5].f[a] = a; diff --git a/tests/pass-varying-lvalue-to-ref.ispc b/tests/pass-varying-lvalue-to-ref.ispc index 4089b9d9..68beba1c 100644 --- a/tests/pass-varying-lvalue-to-ref.ispc +++ b/tests/pass-varying-lvalue-to-ref.ispc @@ -4,8 +4,8 @@ export uniform int width() { return programCount; } void inc(uniform float * varying v) { ++(*v); } export void f_fu(uniform float ret[], uniform float aa[], uniform float b) { - uniform float foo[32]; - for (uniform int i = 0; i < 32; ++i) + uniform float foo[2*programCount]; + for (uniform int i = 0; i < 2*programCount; ++i) foo[i] = 10+i; int a = (int)aa[programIndex]; inc(&foo[a]); diff --git a/tests/phi-opts-1.ispc b/tests/phi-opts-1.ispc index d4265681..fb0a5282 100644 --- a/tests/phi-opts-1.ispc +++ b/tests/phi-opts-1.ispc @@ -3,8 +3,9 @@ export uniform int width() { return programCount; } export void f_f(uniform float RET[], uniform float aFOO[]) { float sum = 0; - for (int i = 0; i < 16; i += programCount) - sum += aFOO[i+programIndex]; + for (int i = programIndex; i < 16; i += programCount) { + sum += aFOO[i]; + } RET[programIndex] = reduce_add(sum); } diff --git a/tests/popcnt-1.ispc b/tests/popcnt-1.ispc index 9a64c113..98139ea7 100644 --- a/tests/popcnt-1.ispc +++ b/tests/popcnt-1.ispc @@ -8,11 +8,18 @@ export void f_f(uniform float RET[], uniform float aFOO[]) { RET[programIndex] = popcnt((int)a); } -export void result(uniform float RET[]) { - uniform int pc[16] = { 1, 1, 2, 1, - 2, 2, 3, 1, - 2, 2, 3, 2, - 3, 3, 4, 1 }; - RET[programIndex] = pc[programIndex]; +static int manualpc(int v) { + int count = 0; + while (v != 0) { + if (v & 1) + ++count; + v >>= 1; + } + return count; +} + +export void result(uniform float RET[]) { + assert(programCount <= 64); + RET[programIndex] = manualpc(programIndex+1); } diff --git a/tests/popcnt-2.ispc b/tests/popcnt-2.ispc index f792dde0..9a48fb7e 100644 --- a/tests/popcnt-2.ispc +++ b/tests/popcnt-2.ispc @@ -18,9 +18,11 @@ export void f_f(uniform float RET[], uniform float aFOO[]) { RET[programIndex] = popcnt(int4(0xf0f0f0f0, 0xff, 0x10, 0)); } -export void result(uniform float RET[]) { - RET[0] = RET[4] = RET[8] = RET[12] = 16; - RET[1] = RET[5] = RET[9] = RET[13] = 8; - RET[2] = RET[6] = RET[10] = RET[14] = 1; - RET[3] = RET[7] = RET[11] = RET[15] = 0; +export void result(uniform float RET[]) { + for (uniform int i = 0; i < programCount; i += 4) { + RET[i] = 16; + RET[i+1] = 8; + RET[i+2] = 1; + RET[i+3] = 0; + } } diff --git a/tests/popcnt-3.ispc b/tests/popcnt-3.ispc index 110bf5e4..4ac8fa18 100644 --- a/tests/popcnt-3.ispc +++ b/tests/popcnt-3.ispc @@ -3,9 +3,9 @@ export uniform int width() { return programCount; } -export void f_f(uniform float RET[4], uniform float aFOO[]) { +export void f_f(uniform float RET[], uniform float aFOO[]) { float a = aFOO[programIndex]; RET[programIndex] = popcnt(a < 3); } -export void result(uniform float RET[]) { RET[programIndex] = programCount == 1 ? 1 : 2; } +export void result(uniform float RET[]) { RET[programIndex] = (programCount == 1) ? 1 : 2; } diff --git a/tests/typedef-2.ispc b/tests/typedef-2.ispc index 9217ff2c..e8117dd4 100644 --- a/tests/typedef-2.ispc +++ b/tests/typedef-2.ispc @@ -19,7 +19,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { for (uniform int i = 0; i < 16; ++i) for (uniform int j = 0; j < 16; ++j) bar.foo[i].x[j] = b; - RET[programIndex] = bar.foo[a-1].x[a-1]; + RET[programIndex] = bar.foo[min(15, a-1)].x[min(15, a-1)]; } export void result(uniform float RET[]) { RET[programIndex] = 5; } diff --git a/tests/varying-struct-3.ispc b/tests/varying-struct-3.ispc index 1691e855..af64878c 100644 --- a/tests/varying-struct-3.ispc +++ b/tests/varying-struct-3.ispc @@ -15,7 +15,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { RET[programIndex] = g.x; } -export void result(uniform float RET[4]) { +export void result(uniform float RET[]) { RET[programIndex] = 15; RET[0] = RET[1] = 10; } diff --git a/tests/varying-struct-6.ispc b/tests/varying-struct-6.ispc index 450e76e6..08bba06c 100644 --- a/tests/varying-struct-6.ispc +++ b/tests/varying-struct-6.ispc @@ -18,4 +18,4 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { RET[programIndex] = bar.uf.x + bar.vf.y; } -export void result(uniform float RET[4]) { RET[programIndex] = 6+programIndex; } +export void result(uniform float RET[]) { RET[programIndex] = 6+programIndex; }