|
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