| 
6 | 6 | //  | 
7 | 7 | //===----------------------------------------------------------------------===//  | 
8 | 8 | 
 
  | 
 | 9 | +#include <clc/misc/clc_shuffle.h>  | 
9 | 10 | #include <libspirv/spirv.h>  | 
10 | 11 | 
 
  | 
11 |  | -#define _CLC_ELEMENT_CASES2(VAR)                                               \  | 
12 |  | -  case 0:                                                                      \  | 
13 |  | -    return VAR.s0;                                                             \  | 
14 |  | -  case 1:                                                                      \  | 
15 |  | -    return VAR.s1;  | 
 | 12 | +#define FUNCTION __spirv_ocl_shuffle  | 
 | 13 | +#define __CLC_FUNCTION(x) __clc_shuffle  | 
16 | 14 | 
 
  | 
17 |  | -#define _CLC_ELEMENT_CASES4(VAR)                                               \  | 
18 |  | -  _CLC_ELEMENT_CASES2(VAR)                                                     \  | 
19 |  | -  case 2:                                                                      \  | 
20 |  | -    return VAR.s2;                                                             \  | 
21 |  | -  case 3:                                                                      \  | 
22 |  | -    return VAR.s3;  | 
 | 15 | +#define __CLC_BODY <clc/misc/shuffle_def.inc>  | 
 | 16 | +#include <clc/integer/gentype.inc>  | 
23 | 17 | 
 
  | 
24 |  | -#define _CLC_ELEMENT_CASES8(VAR)                                               \  | 
25 |  | -  _CLC_ELEMENT_CASES4(VAR)                                                     \  | 
26 |  | -  case 4:                                                                      \  | 
27 |  | -    return VAR.s4;                                                             \  | 
28 |  | -  case 5:                                                                      \  | 
29 |  | -    return VAR.s5;                                                             \  | 
30 |  | -  case 6:                                                                      \  | 
31 |  | -    return VAR.s6;                                                             \  | 
32 |  | -  case 7:                                                                      \  | 
33 |  | -    return VAR.s7;  | 
34 |  | - | 
35 |  | -#define _CLC_ELEMENT_CASES16(VAR)                                              \  | 
36 |  | -  _CLC_ELEMENT_CASES8(VAR)                                                     \  | 
37 |  | -  case 8:                                                                      \  | 
38 |  | -    return VAR.s8;                                                             \  | 
39 |  | -  case 9:                                                                      \  | 
40 |  | -    return VAR.s9;                                                             \  | 
41 |  | -  case 10:                                                                     \  | 
42 |  | -    return VAR.sA;                                                             \  | 
43 |  | -  case 11:                                                                     \  | 
44 |  | -    return VAR.sB;                                                             \  | 
45 |  | -  case 12:                                                                     \  | 
46 |  | -    return VAR.sC;                                                             \  | 
47 |  | -  case 13:                                                                     \  | 
48 |  | -    return VAR.sD;                                                             \  | 
49 |  | -  case 14:                                                                     \  | 
50 |  | -    return VAR.sE;                                                             \  | 
51 |  | -  case 15:                                                                     \  | 
52 |  | -    return VAR.sF;  | 
53 |  | - | 
54 |  | -#define _CLC_GET_ELEMENT_DEFINE(ARGTYPE, ARGSIZE, IDXTYPE)                     \  | 
55 |  | -  inline ARGTYPE __clc_get_el_##ARGTYPE##ARGSIZE##_##IDXTYPE(                  \  | 
56 |  | -      ARGTYPE##ARGSIZE x, IDXTYPE idx) {                                       \  | 
57 |  | -    switch (idx) { _CLC_ELEMENT_CASES##ARGSIZE(x) default : return 0; }        \  | 
58 |  | -  }  | 
59 |  | - | 
60 |  | -#define _CLC_SHUFFLE_SET_ONE_ELEMENT(ARGTYPE, ARGSIZE, INDEX, MASKTYPE)        \  | 
61 |  | -  ret_val.s##INDEX =                                                           \  | 
62 |  | -      __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s##INDEX);  | 
63 |  | - | 
64 |  | -#define _CLC_SHUFFLE_SET_2_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                \  | 
65 |  | -  ret_val.s0 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s0);       \  | 
66 |  | -  ret_val.s1 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s1);  | 
67 |  | - | 
68 |  | -#define _CLC_SHUFFLE_SET_4_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                \  | 
69 |  | -  _CLC_SHUFFLE_SET_2_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                      \  | 
70 |  | -  ret_val.s2 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s2);       \  | 
71 |  | -  ret_val.s3 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s3);  | 
72 |  | - | 
73 |  | -#define _CLC_SHUFFLE_SET_8_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                \  | 
74 |  | -  _CLC_SHUFFLE_SET_4_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                      \  | 
75 |  | -  ret_val.s4 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s4);       \  | 
76 |  | -  ret_val.s5 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s5);       \  | 
77 |  | -  ret_val.s6 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s6);       \  | 
78 |  | -  ret_val.s7 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s7);  | 
79 |  | - | 
80 |  | -#define _CLC_SHUFFLE_SET_16_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)               \  | 
81 |  | -  _CLC_SHUFFLE_SET_8_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                      \  | 
82 |  | -  ret_val.s8 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s8);       \  | 
83 |  | -  ret_val.s9 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s9);       \  | 
84 |  | -  ret_val.sA = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sA);       \  | 
85 |  | -  ret_val.sB = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sB);       \  | 
86 |  | -  ret_val.sC = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sC);       \  | 
87 |  | -  ret_val.sD = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sD);       \  | 
88 |  | -  ret_val.sE = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sE);       \  | 
89 |  | -  ret_val.sF = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sF);  | 
90 |  | - | 
91 |  | -#define _CLC_SHUFFLE_DEFINE2(ARGTYPE, ARGSIZE, MASKTYPE)                       \  | 
92 |  | -  _CLC_DEF _CLC_OVERLOAD ARGTYPE##2 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x,    \  | 
93 |  | -                                                        MASKTYPE##2 mask) {    \  | 
94 |  | -    ARGTYPE##2 ret_val;                                                        \  | 
95 |  | -    mask &= (MASKTYPE##2)(ARGSIZE - 1);                                        \  | 
96 |  | -    _CLC_SHUFFLE_SET_2_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                    \  | 
97 |  | -    return ret_val;                                                            \  | 
98 |  | -  }  | 
99 |  | - | 
100 |  | -#define _CLC_SHUFFLE_DEFINE4(ARGTYPE, ARGSIZE, MASKTYPE)                       \  | 
101 |  | -  _CLC_DEF _CLC_OVERLOAD ARGTYPE##4 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x,    \  | 
102 |  | -                                                        MASKTYPE##4 mask) {    \  | 
103 |  | -    ARGTYPE##4 ret_val;                                                        \  | 
104 |  | -    mask &= (MASKTYPE##4)(ARGSIZE - 1);                                        \  | 
105 |  | -    _CLC_SHUFFLE_SET_4_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                    \  | 
106 |  | -    return ret_val;                                                            \  | 
107 |  | -  }  | 
108 |  | - | 
109 |  | -#define _CLC_SHUFFLE_DEFINE8(ARGTYPE, ARGSIZE, MASKTYPE)                       \  | 
110 |  | -  _CLC_DEF _CLC_OVERLOAD ARGTYPE##8 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x,    \  | 
111 |  | -                                                        MASKTYPE##8 mask) {    \  | 
112 |  | -    ARGTYPE##8 ret_val;                                                        \  | 
113 |  | -    mask &= (MASKTYPE##8)(ARGSIZE - 1);                                        \  | 
114 |  | -    _CLC_SHUFFLE_SET_8_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                    \  | 
115 |  | -    return ret_val;                                                            \  | 
116 |  | -  }  | 
117 |  | - | 
118 |  | -#define _CLC_SHUFFLE_DEFINE16(ARGTYPE, ARGSIZE, MASKTYPE)                      \  | 
119 |  | -  _CLC_DEF _CLC_OVERLOAD ARGTYPE##16 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x,   \  | 
120 |  | -                                                         MASKTYPE##16 mask) {  \  | 
121 |  | -    ARGTYPE##16 ret_val;                                                       \  | 
122 |  | -    mask &= (MASKTYPE##16)(ARGSIZE - 1);                                       \  | 
123 |  | -    _CLC_SHUFFLE_SET_16_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE)                   \  | 
124 |  | -    return ret_val;                                                            \  | 
125 |  | -  }  | 
126 |  | - | 
127 |  | -#define _CLC_VECTOR_SHUFFLE_MASKSIZE(INTYPE, ARGSIZE, MASKTYPE)                \  | 
128 |  | -  _CLC_GET_ELEMENT_DEFINE(INTYPE, ARGSIZE, MASKTYPE)                           \  | 
129 |  | -  _CLC_SHUFFLE_DEFINE2(INTYPE, ARGSIZE, MASKTYPE)                              \  | 
130 |  | -  _CLC_SHUFFLE_DEFINE4(INTYPE, ARGSIZE, MASKTYPE)                              \  | 
131 |  | -  _CLC_SHUFFLE_DEFINE8(INTYPE, ARGSIZE, MASKTYPE)                              \  | 
132 |  | -  _CLC_SHUFFLE_DEFINE16(INTYPE, ARGSIZE, MASKTYPE)  | 
133 |  | - | 
134 |  | -#define _CLC_VECTOR_SHUFFLE_INSIZE(TYPE, MASKTYPE)                             \  | 
135 |  | -  _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 2, MASKTYPE)                              \  | 
136 |  | -  _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 4, MASKTYPE)                              \  | 
137 |  | -  _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 8, MASKTYPE)                              \  | 
138 |  | -  _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 16, MASKTYPE)  | 
139 |  | - | 
140 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(char, uchar)  | 
141 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(schar, uchar)  | 
142 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(short, ushort)  | 
143 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(int, uint)  | 
144 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(long, ulong)  | 
145 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(uchar, uchar)  | 
146 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(ushort, ushort)  | 
147 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(uint, uint)  | 
148 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(ulong, ulong)  | 
149 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(float, uint)  | 
150 |  | -#ifdef cl_khr_fp64  | 
151 |  | -#pragma OPENCL EXTENSION cl_khr_fp64 : enable  | 
152 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(double, ulong)  | 
153 |  | -#endif  | 
154 |  | -#ifdef cl_khr_fp16  | 
155 |  | -#pragma OPENCL EXTENSION cl_khr_fp16 : enable  | 
156 |  | -_CLC_VECTOR_SHUFFLE_INSIZE(half, ushort)  | 
157 |  | -#endif  | 
158 |  | - | 
159 |  | -#undef _CLC_ELEMENT_CASES2  | 
160 |  | -#undef _CLC_ELEMENT_CASES4  | 
161 |  | -#undef _CLC_ELEMENT_CASES8  | 
162 |  | -#undef _CLC_ELEMENT_CASES16  | 
163 |  | -#undef _CLC_GET_ELEMENT_DEFINE  | 
164 |  | -#undef _CLC_SHUFFLE_SET_ONE_ELEMENT  | 
165 |  | -#undef _CLC_SHUFFLE_SET_2_ELEMENTS  | 
166 |  | -#undef _CLC_SHUFFLE_SET_4_ELEMENTS  | 
167 |  | -#undef _CLC_SHUFFLE_SET_8_ELEMENTS  | 
168 |  | -#undef _CLC_SHUFFLE_SET_16_ELEMENTS  | 
169 |  | -#undef _CLC_SHUFFLE_DEFINE2  | 
170 |  | -#undef _CLC_SHUFFLE_DEFINE4  | 
171 |  | -#undef _CLC_SHUFFLE_DEFINE8  | 
172 |  | -#undef _CLC_SHUFFLE_DEFINE16  | 
173 |  | -#undef _CLC_VECTOR_SHUFFLE_MASKSIZE  | 
174 |  | -#undef _CLC_VECTOR_SHUFFLE_INSIZE  | 
 | 18 | +#define __CLC_BODY <clc/misc/shuffle_def.inc>  | 
 | 19 | +#include <clc/math/gentype.inc>  | 
0 commit comments