File: short-vec-bool3.ispc

package info (click to toggle)
ispc 1.28.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 97,620 kB
  • sloc: cpp: 77,067; python: 8,303; yacc: 3,337; lex: 1,126; ansic: 631; sh: 475; makefile: 17
file content (83 lines) | stat: -rw-r--r-- 3,359 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "test_static.isph"
typedef bool<3> bool3;


// a[] = { 1, 2, 3, ... };
task void f_f(uniform float RET[], uniform float a[]) {
    RET[programIndex] = 0;
    int int_var = ((int)a[programIndex]) % 3;

    bool var1 = int_var == 0;
    bool var2 = int_var == 1;
    bool var3 = int_var == 2;

    bool3 bool3_vec1 = {var1, var2, var2};
    bool3 bool3_vec2 = {var1, var3, var2};

    // Extract from vector and check.
    bool var = bool3_vec1.z;
    if (var != var2)
        RET[programIndex] = -1;

    // Insert value in vector and check.
    bool3_vec1.z = var3;
    if (bool3_vec1[2] != var3)
        RET[programIndex] = -1;

    // Logical OR
    bool3 bool3_vec = bool3_vec1 || bool3_vec2;
    // Check result of Logical OR when both operands are short vectors.
    if ((bool3_vec.x != (var1 || var1)) || (bool3_vec.y != (var2 || var3)) || (bool3_vec.z != (var3 || var2)))
        RET[programIndex] = -1;

    bool3_vec = var2 || bool3_vec1;
    // Check result of Logical OR when only one operand is a short vector.
    if ((bool3_vec.x != (var2 || var1)) || (bool3_vec.y != (var2 || var2)) || (bool3_vec.z != (var2 || var3)))
        RET[programIndex] = -1;

    // Logical AND
    bool3_vec = bool3_vec1 && bool3_vec2;
    // Check result of Logical AND when both operands are short vectors.
    if ((bool3_vec.x != (var1 && var1)) || (bool3_vec.y != (var2 && var3)) || (bool3_vec.z != (var3 && var2)))
        RET[programIndex] = -1;

    bool3_vec = var2 && bool3_vec1;
    // Check result of Logical AND when only one operand is a short vector.
    if ((bool3_vec.x != (var2 && var1)) || (bool3_vec.y != (var2 && var2)) || (bool3_vec.z != (var2 && var3)))
        RET[programIndex] = -1;

    // Bitwise OR
    bool3_vec = bool3_vec1 | bool3_vec2;
    // Check result of Bitwise OR when both operands are short vectors.
    if ((bool3_vec.x != (var1 | var1)) || (bool3_vec.y != (var2 | var3)) || (bool3_vec.z != (var3 | var2)))
        RET[programIndex] = -1;

    bool3_vec = var2 | bool3_vec1;
    // Check result of Bitwise OR when only one operand is a short vector.
    if ((bool3_vec.x != (var2 | var1)) || (bool3_vec.y != (var2 | var2)) || (bool3_vec.z != (var2 | var3)))
        RET[programIndex] = -1;

    // Bitwise AND
    bool3_vec = bool3_vec1 & bool3_vec2;
    // Check result of Bitwise AND when both operands are short vectors.
    if ((bool3_vec.x != (var1 & var1)) || (bool3_vec.y != (var2 & var3)) || (bool3_vec.z != (var3 & var2)))
        RET[programIndex] = -1;

    bool3_vec = var2 & bool3_vec1;
    // Check result of Bitwise AND when only one operand is a short vector.
    if ((bool3_vec.x != (var2 & var1)) || (bool3_vec.y != (var2 & var2)) || (bool3_vec.z != (var2 & var3)))
        RET[programIndex] = -1;

    // Comparison Operations
    bool3_vec = (bool3_vec1 == bool3_vec2);
    // Check result of == when both operands are short vectors.
    if ((bool3_vec.x != (var1 == var1)) || (bool3_vec.y != (var2 == var3)) || (bool3_vec.z != (var3 == var2)))
        RET[programIndex] = -1;

    bool3_vec = (bool3_vec1 != bool3_vec2);
    // Check result of != when both operands are short vectors.
    if ((bool3_vec.x != (var1 != var1)) || (bool3_vec.y != (var2 != var3)) || (bool3_vec.z != (var3 != var2)))
        RET[programIndex] = -1;
}

task void result(uniform float ret[]) { ret[programIndex] = 0; }