Commit | Line | Data |
---|---|---|
d42e7319 JB |
1 | /********************************************************************************** |
2 | * Copyright (c) 2008-2010 The Khronos Group Inc. | |
3 | * | |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | |
5 | * copy of this software and/or associated documentation files (the | |
6 | * "Materials"), to deal in the Materials without restriction, including | |
7 | * without limitation the rights to use, copy, modify, merge, publish, | |
8 | * distribute, sublicense, and/or sell copies of the Materials, and to | |
9 | * permit persons to whom the Materials are furnished to do so, subject to | |
10 | * the following conditions: | |
11 | * | |
12 | * The above copyright notice and this permission notice shall be included | |
13 | * in all copies or substantial portions of the Materials. | |
14 | * | |
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | |
22 | **********************************************************************************/ | |
23 | ||
24 | /* $Revision: 11803 $ on $Date: 2010-06-25 10:02:12 -0700 (Fri, 25 Jun 2010) $ */ | |
25 | ||
26 | #ifndef __CL_PLATFORM_H | |
27 | #define __CL_PLATFORM_H | |
28 | ||
29 | #ifdef __APPLE__ | |
30 | /* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */ | |
31 | #include <AvailabilityMacros.h> | |
32 | #endif | |
33 | ||
34 | #ifdef __cplusplus | |
35 | extern "C" { | |
36 | #endif | |
37 | ||
38 | #if defined(_WIN32) | |
39 | #define CL_API_ENTRY | |
40 | #define CL_API_CALL __stdcall | |
41 | #define CL_CALLBACK __stdcall | |
42 | #else | |
43 | #define CL_API_ENTRY | |
44 | #define CL_API_CALL | |
45 | #define CL_CALLBACK | |
46 | #endif | |
47 | ||
48 | #ifdef __APPLE__ | |
49 | #define CL_EXTENSION_WEAK_LINK __attribute__((weak_import)) | |
50 | #define CL_API_SUFFIX__VERSION_1_0 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER | |
51 | #define CL_EXT_SUFFIX__VERSION_1_0 CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER | |
52 | #define CL_API_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK | |
53 | #define CL_EXT_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK | |
54 | #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER | |
55 | #else | |
56 | #define CL_EXTENSION_WEAK_LINK | |
57 | #define CL_API_SUFFIX__VERSION_1_0 | |
58 | #define CL_EXT_SUFFIX__VERSION_1_0 | |
59 | #define CL_API_SUFFIX__VERSION_1_1 | |
60 | #define CL_EXT_SUFFIX__VERSION_1_1 | |
61 | #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED | |
62 | #endif | |
63 | ||
64 | #if (defined (_WIN32) && defined(_MSC_VER)) | |
65 | ||
66 | /* scalar types */ | |
67 | typedef signed __int8 cl_char; | |
68 | typedef unsigned __int8 cl_uchar; | |
69 | typedef signed __int16 cl_short; | |
70 | typedef unsigned __int16 cl_ushort; | |
71 | typedef signed __int32 cl_int; | |
72 | typedef unsigned __int32 cl_uint; | |
73 | typedef signed __int64 cl_long; | |
74 | typedef unsigned __int64 cl_ulong; | |
75 | ||
76 | typedef unsigned __int16 cl_half; | |
77 | typedef float cl_float; | |
78 | typedef double cl_double; | |
79 | ||
80 | /* Macro names and corresponding values defined by OpenCL */ | |
81 | #define CL_CHAR_BIT 8 | |
82 | #define CL_SCHAR_MAX 127 | |
83 | #define CL_SCHAR_MIN (-127-1) | |
84 | #define CL_CHAR_MAX CL_SCHAR_MAX | |
85 | #define CL_CHAR_MIN CL_SCHAR_MIN | |
86 | #define CL_UCHAR_MAX 255 | |
87 | #define CL_SHRT_MAX 32767 | |
88 | #define CL_SHRT_MIN (-32767-1) | |
89 | #define CL_USHRT_MAX 65535 | |
90 | #define CL_INT_MAX 2147483647 | |
91 | #define CL_INT_MIN (-2147483647-1) | |
92 | #define CL_UINT_MAX 0xffffffffU | |
93 | #define CL_LONG_MAX ((cl_long) 0x7FFFFFFFFFFFFFFFLL) | |
94 | #define CL_LONG_MIN ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL) | |
95 | #define CL_ULONG_MAX ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL) | |
96 | ||
97 | #define CL_FLT_DIG 6 | |
98 | #define CL_FLT_MANT_DIG 24 | |
99 | #define CL_FLT_MAX_10_EXP +38 | |
100 | #define CL_FLT_MAX_EXP +128 | |
101 | #define CL_FLT_MIN_10_EXP -37 | |
102 | #define CL_FLT_MIN_EXP -125 | |
103 | #define CL_FLT_RADIX 2 | |
104 | #define CL_FLT_MAX 340282346638528859811704183484516925440.0f | |
105 | #define CL_FLT_MIN 1.175494350822287507969e-38f | |
106 | #define CL_FLT_EPSILON 0x1.0p-23f | |
107 | ||
108 | #define CL_DBL_DIG 15 | |
109 | #define CL_DBL_MANT_DIG 53 | |
110 | #define CL_DBL_MAX_10_EXP +308 | |
111 | #define CL_DBL_MAX_EXP +1024 | |
112 | #define CL_DBL_MIN_10_EXP -307 | |
113 | #define CL_DBL_MIN_EXP -1021 | |
114 | #define CL_DBL_RADIX 2 | |
115 | #define CL_DBL_MAX 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0 | |
116 | #define CL_DBL_MIN 2.225073858507201383090e-308 | |
117 | #define CL_DBL_EPSILON 2.220446049250313080847e-16 | |
118 | ||
119 | #define CL_M_E 2.718281828459045090796 | |
120 | #define CL_M_LOG2E 1.442695040888963387005 | |
121 | #define CL_M_LOG10E 0.434294481903251816668 | |
122 | #define CL_M_LN2 0.693147180559945286227 | |
123 | #define CL_M_LN10 2.302585092994045901094 | |
124 | #define CL_M_PI 3.141592653589793115998 | |
125 | #define CL_M_PI_2 1.570796326794896557999 | |
126 | #define CL_M_PI_4 0.785398163397448278999 | |
127 | #define CL_M_1_PI 0.318309886183790691216 | |
128 | #define CL_M_2_PI 0.636619772367581382433 | |
129 | #define CL_M_2_SQRTPI 1.128379167095512558561 | |
130 | #define CL_M_SQRT2 1.414213562373095145475 | |
131 | #define CL_M_SQRT1_2 0.707106781186547572737 | |
132 | ||
133 | #define CL_M_E_F 2.71828174591064f | |
134 | #define CL_M_LOG2E_F 1.44269502162933f | |
135 | #define CL_M_LOG10E_F 0.43429449200630f | |
136 | #define CL_M_LN2_F 0.69314718246460f | |
137 | #define CL_M_LN10_F 2.30258512496948f | |
138 | #define CL_M_PI_F 3.14159274101257f | |
139 | #define CL_M_PI_2_F 1.57079637050629f | |
140 | #define CL_M_PI_4_F 0.78539818525314f | |
141 | #define CL_M_1_PI_F 0.31830987334251f | |
142 | #define CL_M_2_PI_F 0.63661974668503f | |
143 | #define CL_M_2_SQRTPI_F 1.12837922573090f | |
144 | #define CL_M_SQRT2_F 1.41421353816986f | |
145 | #define CL_M_SQRT1_2_F 0.70710676908493f | |
146 | ||
147 | #define CL_NAN (CL_INFINITY - CL_INFINITY) | |
148 | #define CL_HUGE_VALF ((cl_float) 1e50) | |
149 | #define CL_HUGE_VAL ((cl_double) 1e500) | |
150 | #define CL_MAXFLOAT CL_FLT_MAX | |
151 | #define CL_INFINITY CL_HUGE_VALF | |
152 | ||
153 | #else | |
154 | ||
155 | #include <stdint.h> | |
156 | ||
157 | /* scalar types */ | |
158 | typedef int8_t cl_char; | |
159 | typedef uint8_t cl_uchar; | |
160 | typedef int16_t cl_short __attribute__((aligned(2))); | |
161 | typedef uint16_t cl_ushort __attribute__((aligned(2))); | |
162 | typedef int32_t cl_int __attribute__((aligned(4))); | |
163 | typedef uint32_t cl_uint __attribute__((aligned(4))); | |
164 | typedef int64_t cl_long __attribute__((aligned(8))); | |
165 | typedef uint64_t cl_ulong __attribute__((aligned(8))); | |
166 | ||
167 | typedef uint16_t cl_half __attribute__((aligned(2))); | |
168 | typedef float cl_float __attribute__((aligned(4))); | |
169 | typedef double cl_double __attribute__((aligned(8))); | |
170 | ||
171 | /* Macro names and corresponding values defined by OpenCL */ | |
172 | #define CL_CHAR_BIT 8 | |
173 | #define CL_SCHAR_MAX 127 | |
174 | #define CL_SCHAR_MIN (-127-1) | |
175 | #define CL_CHAR_MAX CL_SCHAR_MAX | |
176 | #define CL_CHAR_MIN CL_SCHAR_MIN | |
177 | #define CL_UCHAR_MAX 255 | |
178 | #define CL_SHRT_MAX 32767 | |
179 | #define CL_SHRT_MIN (-32767-1) | |
180 | #define CL_USHRT_MAX 65535 | |
181 | #define CL_INT_MAX 2147483647 | |
182 | #define CL_INT_MIN (-2147483647-1) | |
183 | #define CL_UINT_MAX 0xffffffffU | |
184 | #define CL_LONG_MAX ((cl_long) 0x7FFFFFFFFFFFFFFFLL) | |
185 | #define CL_LONG_MIN ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL) | |
186 | #define CL_ULONG_MAX ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL) | |
187 | ||
188 | #define CL_FLT_DIG 6 | |
189 | #define CL_FLT_MANT_DIG 24 | |
190 | #define CL_FLT_MAX_10_EXP +38 | |
191 | #define CL_FLT_MAX_EXP +128 | |
192 | #define CL_FLT_MIN_10_EXP -37 | |
193 | #define CL_FLT_MIN_EXP -125 | |
194 | #define CL_FLT_RADIX 2 | |
195 | #define CL_FLT_MAX 0x1.fffffep127f | |
196 | #define CL_FLT_MIN 0x1.0p-126f | |
197 | #define CL_FLT_EPSILON 0x1.0p-23f | |
198 | ||
199 | #define CL_DBL_DIG 15 | |
200 | #define CL_DBL_MANT_DIG 53 | |
201 | #define CL_DBL_MAX_10_EXP +308 | |
202 | #define CL_DBL_MAX_EXP +1024 | |
203 | #define CL_DBL_MIN_10_EXP -307 | |
204 | #define CL_DBL_MIN_EXP -1021 | |
205 | #define CL_DBL_RADIX 2 | |
206 | #define CL_DBL_MAX 0x1.fffffffffffffp1023 | |
207 | #define CL_DBL_MIN 0x1.0p-1022 | |
208 | #define CL_DBL_EPSILON 0x1.0p-52 | |
209 | ||
210 | #define CL_M_E 2.718281828459045090796 | |
211 | #define CL_M_LOG2E 1.442695040888963387005 | |
212 | #define CL_M_LOG10E 0.434294481903251816668 | |
213 | #define CL_M_LN2 0.693147180559945286227 | |
214 | #define CL_M_LN10 2.302585092994045901094 | |
215 | #define CL_M_PI 3.141592653589793115998 | |
216 | #define CL_M_PI_2 1.570796326794896557999 | |
217 | #define CL_M_PI_4 0.785398163397448278999 | |
218 | #define CL_M_1_PI 0.318309886183790691216 | |
219 | #define CL_M_2_PI 0.636619772367581382433 | |
220 | #define CL_M_2_SQRTPI 1.128379167095512558561 | |
221 | #define CL_M_SQRT2 1.414213562373095145475 | |
222 | #define CL_M_SQRT1_2 0.707106781186547572737 | |
223 | ||
224 | #define CL_M_E_F 2.71828174591064f | |
225 | #define CL_M_LOG2E_F 1.44269502162933f | |
226 | #define CL_M_LOG10E_F 0.43429449200630f | |
227 | #define CL_M_LN2_F 0.69314718246460f | |
228 | #define CL_M_LN10_F 2.30258512496948f | |
229 | #define CL_M_PI_F 3.14159274101257f | |
230 | #define CL_M_PI_2_F 1.57079637050629f | |
231 | #define CL_M_PI_4_F 0.78539818525314f | |
232 | #define CL_M_1_PI_F 0.31830987334251f | |
233 | #define CL_M_2_PI_F 0.63661974668503f | |
234 | #define CL_M_2_SQRTPI_F 1.12837922573090f | |
235 | #define CL_M_SQRT2_F 1.41421353816986f | |
236 | #define CL_M_SQRT1_2_F 0.70710676908493f | |
237 | ||
238 | #if defined( __GNUC__ ) | |
239 | #define CL_HUGE_VALF __builtin_huge_valf() | |
240 | #define CL_HUGE_VAL __builtin_huge_val() | |
241 | #define CL_NAN __builtin_nanf( "" ) | |
242 | #else | |
243 | #define CL_HUGE_VALF ((cl_float) 1e50) | |
244 | #define CL_HUGE_VAL ((cl_double) 1e500) | |
245 | float nanf( const char * ); | |
246 | #define CL_NAN nanf( "" ) | |
247 | #endif | |
248 | #define CL_MAXFLOAT CL_FLT_MAX | |
249 | #define CL_INFINITY CL_HUGE_VALF | |
250 | ||
251 | #endif | |
252 | ||
253 | #include <stddef.h> | |
254 | ||
255 | /* Mirror types to GL types. Mirror types allow us to avoid deciding which headers to load based on whether we are using GL or GLES here. */ | |
256 | typedef unsigned int cl_GLuint; | |
257 | typedef int cl_GLint; | |
258 | typedef unsigned int cl_GLenum; | |
259 | ||
260 | /* | |
261 | * Vector types | |
262 | * | |
263 | * Note: OpenCL requires that all types be naturally aligned. | |
264 | * This means that vector types must be naturally aligned. | |
265 | * For example, a vector of four floats must be aligned to | |
266 | * a 16 byte boundary (calculated as 4 * the natural 4-byte | |
267 | * alignment of the float). The alignment qualifiers here | |
268 | * will only function properly if your compiler supports them | |
269 | * and if you don't actively work to defeat them. For example, | |
270 | * in order for a cl_float4 to be 16 byte aligned in a struct, | |
271 | * the start of the struct must itself be 16-byte aligned. | |
272 | * | |
273 | * Maintaining proper alignment is the user's responsibility. | |
274 | */ | |
275 | ||
276 | /* Define basic vector types */ | |
277 | #if defined( __VEC__ ) | |
278 | #include <altivec.h> /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */ | |
279 | typedef vector unsigned char __cl_uchar16; | |
280 | typedef vector signed char __cl_char16; | |
281 | typedef vector unsigned short __cl_ushort8; | |
282 | typedef vector signed short __cl_short8; | |
283 | typedef vector unsigned int __cl_uint4; | |
284 | typedef vector signed int __cl_int4; | |
285 | typedef vector float __cl_float4; | |
286 | #define __CL_UCHAR16__ 1 | |
287 | #define __CL_CHAR16__ 1 | |
288 | #define __CL_USHORT8__ 1 | |
289 | #define __CL_SHORT8__ 1 | |
290 | #define __CL_UINT4__ 1 | |
291 | #define __CL_INT4__ 1 | |
292 | #define __CL_FLOAT4__ 1 | |
293 | #endif | |
294 | ||
295 | #if defined( __SSE__ ) | |
296 | #if defined( __MINGW64__ ) | |
297 | #include <intrin.h> | |
298 | #else | |
299 | #include <xmmintrin.h> | |
300 | #endif | |
301 | #if defined( __GNUC__ ) | |
302 | typedef float __cl_float4 __attribute__((vector_size(16))); | |
303 | #else | |
304 | typedef __m128 __cl_float4; | |
305 | #endif | |
306 | #define __CL_FLOAT4__ 1 | |
307 | #endif | |
308 | ||
309 | #if defined( __SSE2__ ) | |
310 | #if defined( __MINGW64__ ) | |
311 | #include <intrin.h> | |
312 | #else | |
313 | #include <emmintrin.h> | |
314 | #endif | |
315 | #if defined( __GNUC__ ) | |
316 | typedef cl_uchar __cl_uchar16 __attribute__((vector_size(16))); | |
317 | typedef cl_char __cl_char16 __attribute__((vector_size(16))); | |
318 | typedef cl_ushort __cl_ushort8 __attribute__((vector_size(16))); | |
319 | typedef cl_short __cl_short8 __attribute__((vector_size(16))); | |
320 | typedef cl_uint __cl_uint4 __attribute__((vector_size(16))); | |
321 | typedef cl_int __cl_int4 __attribute__((vector_size(16))); | |
322 | typedef cl_ulong __cl_ulong2 __attribute__((vector_size(16))); | |
323 | typedef cl_long __cl_long2 __attribute__((vector_size(16))); | |
324 | typedef cl_double __cl_double2 __attribute__((vector_size(16))); | |
325 | #else | |
326 | typedef __m128i __cl_uchar16; | |
327 | typedef __m128i __cl_char16; | |
328 | typedef __m128i __cl_ushort8; | |
329 | typedef __m128i __cl_short8; | |
330 | typedef __m128i __cl_uint4; | |
331 | typedef __m128i __cl_int4; | |
332 | typedef __m128i __cl_ulong2; | |
333 | typedef __m128i __cl_long2; | |
334 | typedef __m128d __cl_double2; | |
335 | #endif | |
336 | #define __CL_UCHAR16__ 1 | |
337 | #define __CL_CHAR16__ 1 | |
338 | #define __CL_USHORT8__ 1 | |
339 | #define __CL_SHORT8__ 1 | |
340 | #define __CL_INT4__ 1 | |
341 | #define __CL_UINT4__ 1 | |
342 | #define __CL_ULONG2__ 1 | |
343 | #define __CL_LONG2__ 1 | |
344 | #define __CL_DOUBLE2__ 1 | |
345 | #endif | |
346 | ||
347 | #if defined( __MMX__ ) | |
348 | #include <mmintrin.h> | |
349 | #if defined( __GNUC__ ) | |
350 | typedef cl_uchar __cl_uchar8 __attribute__((vector_size(8))); | |
351 | typedef cl_char __cl_char8 __attribute__((vector_size(8))); | |
352 | typedef cl_ushort __cl_ushort4 __attribute__((vector_size(8))); | |
353 | typedef cl_short __cl_short4 __attribute__((vector_size(8))); | |
354 | typedef cl_uint __cl_uint2 __attribute__((vector_size(8))); | |
355 | typedef cl_int __cl_int2 __attribute__((vector_size(8))); | |
356 | typedef cl_ulong __cl_ulong1 __attribute__((vector_size(8))); | |
357 | typedef cl_long __cl_long1 __attribute__((vector_size(8))); | |
358 | typedef cl_float __cl_float2 __attribute__((vector_size(8))); | |
359 | #else | |
360 | typedef __m64 __cl_uchar8; | |
361 | typedef __m64 __cl_char8; | |
362 | typedef __m64 __cl_ushort4; | |
363 | typedef __m64 __cl_short4; | |
364 | typedef __m64 __cl_uint2; | |
365 | typedef __m64 __cl_int2; | |
366 | typedef __m64 __cl_ulong1; | |
367 | typedef __m64 __cl_long1; | |
368 | typedef __m64 __cl_float2; | |
369 | #endif | |
370 | #define __CL_UCHAR8__ 1 | |
371 | #define __CL_CHAR8__ 1 | |
372 | #define __CL_USHORT4__ 1 | |
373 | #define __CL_SHORT4__ 1 | |
374 | #define __CL_INT2__ 1 | |
375 | #define __CL_UINT2__ 1 | |
376 | #define __CL_ULONG1__ 1 | |
377 | #define __CL_LONG1__ 1 | |
378 | #define __CL_FLOAT2__ 1 | |
379 | #endif | |
380 | ||
381 | #if defined( __AVX__ ) | |
382 | #if defined( __MINGW64__ ) | |
383 | #include <intrin.h> | |
384 | #else | |
385 | #include <immintrin.h> | |
386 | #endif | |
387 | #if defined( __GNUC__ ) | |
388 | typedef cl_float __cl_float8 __attribute__((vector_size(32))); | |
389 | typedef cl_double __cl_double4 __attribute__((vector_size(32))); | |
390 | #else | |
391 | typedef __m256 __cl_float8; | |
392 | typedef __m256d __cl_double4; | |
393 | #endif | |
394 | #define __CL_FLOAT8__ 1 | |
395 | #define __CL_DOUBLE4__ 1 | |
396 | #endif | |
397 | ||
398 | /* Define alignment keys */ | |
399 | #if defined( __GNUC__ ) | |
400 | #define CL_ALIGNED(_x) __attribute__ ((aligned(_x))) | |
401 | #elif defined( _WIN32) && (_MSC_VER) | |
402 | /* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements */ | |
403 | /* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx */ | |
404 | /* #include <crtdefs.h> */ | |
405 | /* #define CL_ALIGNED(_x) _CRT_ALIGN(_x) */ | |
406 | #define CL_ALIGNED(_x) | |
407 | #else | |
408 | #warning Need to implement some method to align data here | |
409 | #define CL_ALIGNED(_x) | |
410 | #endif | |
411 | ||
412 | /* Indicate whether .xyzw, .s0123 and .hi.lo are supported */ | |
413 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
414 | /* .xyzw and .s0123...{f|F} are supported */ | |
415 | #define CL_HAS_NAMED_VECTOR_FIELDS 1 | |
416 | /* .hi and .lo are supported */ | |
417 | #define CL_HAS_HI_LO_VECTOR_FIELDS 1 | |
418 | #endif | |
419 | ||
420 | /* Define cl_vector types */ | |
421 | ||
422 | /* ---- cl_charn ---- */ | |
423 | typedef union | |
424 | { | |
425 | cl_char CL_ALIGNED(2) s[2]; | |
426 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
427 | __extension__ struct{ cl_char x, y; }; | |
428 | __extension__ struct{ cl_char s0, s1; }; | |
429 | __extension__ struct{ cl_char lo, hi; }; | |
430 | #endif | |
431 | #if defined( __CL_CHAR2__) | |
432 | __cl_char2 v2; | |
433 | #endif | |
434 | }cl_char2; | |
435 | ||
436 | typedef union | |
437 | { | |
438 | cl_char CL_ALIGNED(4) s[4]; | |
439 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
440 | __extension__ struct{ cl_char x, y, z, w; }; | |
441 | __extension__ struct{ cl_char s0, s1, s2, s3; }; | |
442 | __extension__ struct{ cl_char2 lo, hi; }; | |
443 | #endif | |
444 | #if defined( __CL_CHAR2__) | |
445 | __cl_char2 v2[2]; | |
446 | #endif | |
447 | #if defined( __CL_CHAR4__) | |
448 | __cl_char4 v4; | |
449 | #endif | |
450 | }cl_char4; | |
451 | ||
452 | /* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */ | |
453 | typedef cl_char4 cl_char3; | |
454 | ||
455 | typedef union | |
456 | { | |
457 | cl_char CL_ALIGNED(8) s[8]; | |
458 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
459 | __extension__ struct{ cl_char x, y, z, w; }; | |
460 | __extension__ struct{ cl_char s0, s1, s2, s3, s4, s5, s6, s7; }; | |
461 | __extension__ struct{ cl_char4 lo, hi; }; | |
462 | #endif | |
463 | #if defined( __CL_CHAR2__) | |
464 | __cl_char2 v2[4]; | |
465 | #endif | |
466 | #if defined( __CL_CHAR4__) | |
467 | __cl_char4 v4[2]; | |
468 | #endif | |
469 | #if defined( __CL_CHAR8__ ) | |
470 | __cl_char8 v8; | |
471 | #endif | |
472 | }cl_char8; | |
473 | ||
474 | typedef union | |
475 | { | |
476 | cl_char CL_ALIGNED(16) s[16]; | |
477 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
478 | __extension__ struct{ cl_char x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
479 | __extension__ struct{ cl_char s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
480 | __extension__ struct{ cl_char8 lo, hi; }; | |
481 | #endif | |
482 | #if defined( __CL_CHAR2__) | |
483 | __cl_char2 v2[8]; | |
484 | #endif | |
485 | #if defined( __CL_CHAR4__) | |
486 | __cl_char4 v4[4]; | |
487 | #endif | |
488 | #if defined( __CL_CHAR8__ ) | |
489 | __cl_char8 v8[2]; | |
490 | #endif | |
491 | #if defined( __CL_CHAR16__ ) | |
492 | __cl_char16 v16; | |
493 | #endif | |
494 | }cl_char16; | |
495 | ||
496 | ||
497 | /* ---- cl_ucharn ---- */ | |
498 | typedef union | |
499 | { | |
500 | cl_uchar CL_ALIGNED(2) s[2]; | |
501 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
502 | __extension__ struct{ cl_uchar x, y; }; | |
503 | __extension__ struct{ cl_uchar s0, s1; }; | |
504 | __extension__ struct{ cl_uchar lo, hi; }; | |
505 | #endif | |
506 | #if defined( __cl_uchar2__) | |
507 | __cl_uchar2 v2; | |
508 | #endif | |
509 | }cl_uchar2; | |
510 | ||
511 | typedef union | |
512 | { | |
513 | cl_uchar CL_ALIGNED(4) s[4]; | |
514 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
515 | __extension__ struct{ cl_uchar x, y, z, w; }; | |
516 | __extension__ struct{ cl_uchar s0, s1, s2, s3; }; | |
517 | __extension__ struct{ cl_uchar2 lo, hi; }; | |
518 | #endif | |
519 | #if defined( __CL_UCHAR2__) | |
520 | __cl_uchar2 v2[2]; | |
521 | #endif | |
522 | #if defined( __CL_UCHAR4__) | |
523 | __cl_uchar4 v4; | |
524 | #endif | |
525 | }cl_uchar4; | |
526 | ||
527 | /* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */ | |
528 | typedef cl_uchar4 cl_uchar3; | |
529 | ||
530 | typedef union | |
531 | { | |
532 | cl_uchar CL_ALIGNED(8) s[8]; | |
533 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
534 | __extension__ struct{ cl_uchar x, y, z, w; }; | |
535 | __extension__ struct{ cl_uchar s0, s1, s2, s3, s4, s5, s6, s7; }; | |
536 | __extension__ struct{ cl_uchar4 lo, hi; }; | |
537 | #endif | |
538 | #if defined( __CL_UCHAR2__) | |
539 | __cl_uchar2 v2[4]; | |
540 | #endif | |
541 | #if defined( __CL_UCHAR4__) | |
542 | __cl_uchar4 v4[2]; | |
543 | #endif | |
544 | #if defined( __CL_UCHAR8__ ) | |
545 | __cl_uchar8 v8; | |
546 | #endif | |
547 | }cl_uchar8; | |
548 | ||
549 | typedef union | |
550 | { | |
551 | cl_uchar CL_ALIGNED(16) s[16]; | |
552 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
553 | __extension__ struct{ cl_uchar x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
554 | __extension__ struct{ cl_uchar s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
555 | __extension__ struct{ cl_uchar8 lo, hi; }; | |
556 | #endif | |
557 | #if defined( __CL_UCHAR2__) | |
558 | __cl_uchar2 v2[8]; | |
559 | #endif | |
560 | #if defined( __CL_UCHAR4__) | |
561 | __cl_uchar4 v4[4]; | |
562 | #endif | |
563 | #if defined( __CL_UCHAR8__ ) | |
564 | __cl_uchar8 v8[2]; | |
565 | #endif | |
566 | #if defined( __CL_UCHAR16__ ) | |
567 | __cl_uchar16 v16; | |
568 | #endif | |
569 | }cl_uchar16; | |
570 | ||
571 | ||
572 | /* ---- cl_shortn ---- */ | |
573 | typedef union | |
574 | { | |
575 | cl_short CL_ALIGNED(4) s[2]; | |
576 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
577 | __extension__ struct{ cl_short x, y; }; | |
578 | __extension__ struct{ cl_short s0, s1; }; | |
579 | __extension__ struct{ cl_short lo, hi; }; | |
580 | #endif | |
581 | #if defined( __CL_SHORT2__) | |
582 | __cl_short2 v2; | |
583 | #endif | |
584 | }cl_short2; | |
585 | ||
586 | typedef union | |
587 | { | |
588 | cl_short CL_ALIGNED(8) s[4]; | |
589 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
590 | __extension__ struct{ cl_short x, y, z, w; }; | |
591 | __extension__ struct{ cl_short s0, s1, s2, s3; }; | |
592 | __extension__ struct{ cl_short2 lo, hi; }; | |
593 | #endif | |
594 | #if defined( __CL_SHORT2__) | |
595 | __cl_short2 v2[2]; | |
596 | #endif | |
597 | #if defined( __CL_SHORT4__) | |
598 | __cl_short4 v4; | |
599 | #endif | |
600 | }cl_short4; | |
601 | ||
602 | /* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */ | |
603 | typedef cl_short4 cl_short3; | |
604 | ||
605 | typedef union | |
606 | { | |
607 | cl_short CL_ALIGNED(16) s[8]; | |
608 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
609 | __extension__ struct{ cl_short x, y, z, w; }; | |
610 | __extension__ struct{ cl_short s0, s1, s2, s3, s4, s5, s6, s7; }; | |
611 | __extension__ struct{ cl_short4 lo, hi; }; | |
612 | #endif | |
613 | #if defined( __CL_SHORT2__) | |
614 | __cl_short2 v2[4]; | |
615 | #endif | |
616 | #if defined( __CL_SHORT4__) | |
617 | __cl_short4 v4[2]; | |
618 | #endif | |
619 | #if defined( __CL_SHORT8__ ) | |
620 | __cl_short8 v8; | |
621 | #endif | |
622 | }cl_short8; | |
623 | ||
624 | typedef union | |
625 | { | |
626 | cl_short CL_ALIGNED(32) s[16]; | |
627 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
628 | __extension__ struct{ cl_short x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
629 | __extension__ struct{ cl_short s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
630 | __extension__ struct{ cl_short8 lo, hi; }; | |
631 | #endif | |
632 | #if defined( __CL_SHORT2__) | |
633 | __cl_short2 v2[8]; | |
634 | #endif | |
635 | #if defined( __CL_SHORT4__) | |
636 | __cl_short4 v4[4]; | |
637 | #endif | |
638 | #if defined( __CL_SHORT8__ ) | |
639 | __cl_short8 v8[2]; | |
640 | #endif | |
641 | #if defined( __CL_SHORT16__ ) | |
642 | __cl_short16 v16; | |
643 | #endif | |
644 | }cl_short16; | |
645 | ||
646 | ||
647 | /* ---- cl_ushortn ---- */ | |
648 | typedef union | |
649 | { | |
650 | cl_ushort CL_ALIGNED(4) s[2]; | |
651 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
652 | __extension__ struct{ cl_ushort x, y; }; | |
653 | __extension__ struct{ cl_ushort s0, s1; }; | |
654 | __extension__ struct{ cl_ushort lo, hi; }; | |
655 | #endif | |
656 | #if defined( __CL_USHORT2__) | |
657 | __cl_ushort2 v2; | |
658 | #endif | |
659 | }cl_ushort2; | |
660 | ||
661 | typedef union | |
662 | { | |
663 | cl_ushort CL_ALIGNED(8) s[4]; | |
664 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
665 | __extension__ struct{ cl_ushort x, y, z, w; }; | |
666 | __extension__ struct{ cl_ushort s0, s1, s2, s3; }; | |
667 | __extension__ struct{ cl_ushort2 lo, hi; }; | |
668 | #endif | |
669 | #if defined( __CL_USHORT2__) | |
670 | __cl_ushort2 v2[2]; | |
671 | #endif | |
672 | #if defined( __CL_USHORT4__) | |
673 | __cl_ushort4 v4; | |
674 | #endif | |
675 | }cl_ushort4; | |
676 | ||
677 | /* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */ | |
678 | typedef cl_ushort4 cl_ushort3; | |
679 | ||
680 | typedef union | |
681 | { | |
682 | cl_ushort CL_ALIGNED(16) s[8]; | |
683 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
684 | __extension__ struct{ cl_ushort x, y, z, w; }; | |
685 | __extension__ struct{ cl_ushort s0, s1, s2, s3, s4, s5, s6, s7; }; | |
686 | __extension__ struct{ cl_ushort4 lo, hi; }; | |
687 | #endif | |
688 | #if defined( __CL_USHORT2__) | |
689 | __cl_ushort2 v2[4]; | |
690 | #endif | |
691 | #if defined( __CL_USHORT4__) | |
692 | __cl_ushort4 v4[2]; | |
693 | #endif | |
694 | #if defined( __CL_USHORT8__ ) | |
695 | __cl_ushort8 v8; | |
696 | #endif | |
697 | }cl_ushort8; | |
698 | ||
699 | typedef union | |
700 | { | |
701 | cl_ushort CL_ALIGNED(32) s[16]; | |
702 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
703 | __extension__ struct{ cl_ushort x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
704 | __extension__ struct{ cl_ushort s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
705 | __extension__ struct{ cl_ushort8 lo, hi; }; | |
706 | #endif | |
707 | #if defined( __CL_USHORT2__) | |
708 | __cl_ushort2 v2[8]; | |
709 | #endif | |
710 | #if defined( __CL_USHORT4__) | |
711 | __cl_ushort4 v4[4]; | |
712 | #endif | |
713 | #if defined( __CL_USHORT8__ ) | |
714 | __cl_ushort8 v8[2]; | |
715 | #endif | |
716 | #if defined( __CL_USHORT16__ ) | |
717 | __cl_ushort16 v16; | |
718 | #endif | |
719 | }cl_ushort16; | |
720 | ||
721 | /* ---- cl_intn ---- */ | |
722 | typedef union | |
723 | { | |
724 | cl_int CL_ALIGNED(8) s[2]; | |
725 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
726 | __extension__ struct{ cl_int x, y; }; | |
727 | __extension__ struct{ cl_int s0, s1; }; | |
728 | __extension__ struct{ cl_int lo, hi; }; | |
729 | #endif | |
730 | #if defined( __CL_INT2__) | |
731 | __cl_int2 v2; | |
732 | #endif | |
733 | }cl_int2; | |
734 | ||
735 | typedef union | |
736 | { | |
737 | cl_int CL_ALIGNED(16) s[4]; | |
738 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
739 | __extension__ struct{ cl_int x, y, z, w; }; | |
740 | __extension__ struct{ cl_int s0, s1, s2, s3; }; | |
741 | __extension__ struct{ cl_int2 lo, hi; }; | |
742 | #endif | |
743 | #if defined( __CL_INT2__) | |
744 | __cl_int2 v2[2]; | |
745 | #endif | |
746 | #if defined( __CL_INT4__) | |
747 | __cl_int4 v4; | |
748 | #endif | |
749 | }cl_int4; | |
750 | ||
751 | /* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */ | |
752 | typedef cl_int4 cl_int3; | |
753 | ||
754 | typedef union | |
755 | { | |
756 | cl_int CL_ALIGNED(32) s[8]; | |
757 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
758 | __extension__ struct{ cl_int x, y, z, w; }; | |
759 | __extension__ struct{ cl_int s0, s1, s2, s3, s4, s5, s6, s7; }; | |
760 | __extension__ struct{ cl_int4 lo, hi; }; | |
761 | #endif | |
762 | #if defined( __CL_INT2__) | |
763 | __cl_int2 v2[4]; | |
764 | #endif | |
765 | #if defined( __CL_INT4__) | |
766 | __cl_int4 v4[2]; | |
767 | #endif | |
768 | #if defined( __CL_INT8__ ) | |
769 | __cl_int8 v8; | |
770 | #endif | |
771 | }cl_int8; | |
772 | ||
773 | typedef union | |
774 | { | |
775 | cl_int CL_ALIGNED(64) s[16]; | |
776 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
777 | __extension__ struct{ cl_int x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
778 | __extension__ struct{ cl_int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
779 | __extension__ struct{ cl_int8 lo, hi; }; | |
780 | #endif | |
781 | #if defined( __CL_INT2__) | |
782 | __cl_int2 v2[8]; | |
783 | #endif | |
784 | #if defined( __CL_INT4__) | |
785 | __cl_int4 v4[4]; | |
786 | #endif | |
787 | #if defined( __CL_INT8__ ) | |
788 | __cl_int8 v8[2]; | |
789 | #endif | |
790 | #if defined( __CL_INT16__ ) | |
791 | __cl_int16 v16; | |
792 | #endif | |
793 | }cl_int16; | |
794 | ||
795 | ||
796 | /* ---- cl_uintn ---- */ | |
797 | typedef union | |
798 | { | |
799 | cl_uint CL_ALIGNED(8) s[2]; | |
800 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
801 | __extension__ struct{ cl_uint x, y; }; | |
802 | __extension__ struct{ cl_uint s0, s1; }; | |
803 | __extension__ struct{ cl_uint lo, hi; }; | |
804 | #endif | |
805 | #if defined( __CL_UINT2__) | |
806 | __cl_uint2 v2; | |
807 | #endif | |
808 | }cl_uint2; | |
809 | ||
810 | typedef union | |
811 | { | |
812 | cl_uint CL_ALIGNED(16) s[4]; | |
813 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
814 | __extension__ struct{ cl_uint x, y, z, w; }; | |
815 | __extension__ struct{ cl_uint s0, s1, s2, s3; }; | |
816 | __extension__ struct{ cl_uint2 lo, hi; }; | |
817 | #endif | |
818 | #if defined( __CL_UINT2__) | |
819 | __cl_uint2 v2[2]; | |
820 | #endif | |
821 | #if defined( __CL_UINT4__) | |
822 | __cl_uint4 v4; | |
823 | #endif | |
824 | }cl_uint4; | |
825 | ||
826 | /* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */ | |
827 | typedef cl_uint4 cl_uint3; | |
828 | ||
829 | typedef union | |
830 | { | |
831 | cl_uint CL_ALIGNED(32) s[8]; | |
832 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
833 | __extension__ struct{ cl_uint x, y, z, w; }; | |
834 | __extension__ struct{ cl_uint s0, s1, s2, s3, s4, s5, s6, s7; }; | |
835 | __extension__ struct{ cl_uint4 lo, hi; }; | |
836 | #endif | |
837 | #if defined( __CL_UINT2__) | |
838 | __cl_uint2 v2[4]; | |
839 | #endif | |
840 | #if defined( __CL_UINT4__) | |
841 | __cl_uint4 v4[2]; | |
842 | #endif | |
843 | #if defined( __CL_UINT8__ ) | |
844 | __cl_uint8 v8; | |
845 | #endif | |
846 | }cl_uint8; | |
847 | ||
848 | typedef union | |
849 | { | |
850 | cl_uint CL_ALIGNED(64) s[16]; | |
851 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
852 | __extension__ struct{ cl_uint x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
853 | __extension__ struct{ cl_uint s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
854 | __extension__ struct{ cl_uint8 lo, hi; }; | |
855 | #endif | |
856 | #if defined( __CL_UINT2__) | |
857 | __cl_uint2 v2[8]; | |
858 | #endif | |
859 | #if defined( __CL_UINT4__) | |
860 | __cl_uint4 v4[4]; | |
861 | #endif | |
862 | #if defined( __CL_UINT8__ ) | |
863 | __cl_uint8 v8[2]; | |
864 | #endif | |
865 | #if defined( __CL_UINT16__ ) | |
866 | __cl_uint16 v16; | |
867 | #endif | |
868 | }cl_uint16; | |
869 | ||
870 | /* ---- cl_longn ---- */ | |
871 | typedef union | |
872 | { | |
873 | cl_long CL_ALIGNED(16) s[2]; | |
874 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
875 | __extension__ struct{ cl_long x, y; }; | |
876 | __extension__ struct{ cl_long s0, s1; }; | |
877 | __extension__ struct{ cl_long lo, hi; }; | |
878 | #endif | |
879 | #if defined( __CL_LONG2__) | |
880 | __cl_long2 v2; | |
881 | #endif | |
882 | }cl_long2; | |
883 | ||
884 | typedef union | |
885 | { | |
886 | cl_long CL_ALIGNED(32) s[4]; | |
887 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
888 | __extension__ struct{ cl_long x, y, z, w; }; | |
889 | __extension__ struct{ cl_long s0, s1, s2, s3; }; | |
890 | __extension__ struct{ cl_long2 lo, hi; }; | |
891 | #endif | |
892 | #if defined( __CL_LONG2__) | |
893 | __cl_long2 v2[2]; | |
894 | #endif | |
895 | #if defined( __CL_LONG4__) | |
896 | __cl_long4 v4; | |
897 | #endif | |
898 | }cl_long4; | |
899 | ||
900 | /* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */ | |
901 | typedef cl_long4 cl_long3; | |
902 | ||
903 | typedef union | |
904 | { | |
905 | cl_long CL_ALIGNED(64) s[8]; | |
906 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
907 | __extension__ struct{ cl_long x, y, z, w; }; | |
908 | __extension__ struct{ cl_long s0, s1, s2, s3, s4, s5, s6, s7; }; | |
909 | __extension__ struct{ cl_long4 lo, hi; }; | |
910 | #endif | |
911 | #if defined( __CL_LONG2__) | |
912 | __cl_long2 v2[4]; | |
913 | #endif | |
914 | #if defined( __CL_LONG4__) | |
915 | __cl_long4 v4[2]; | |
916 | #endif | |
917 | #if defined( __CL_LONG8__ ) | |
918 | __cl_long8 v8; | |
919 | #endif | |
920 | }cl_long8; | |
921 | ||
922 | typedef union | |
923 | { | |
924 | cl_long CL_ALIGNED(128) s[16]; | |
925 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
926 | __extension__ struct{ cl_long x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
927 | __extension__ struct{ cl_long s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
928 | __extension__ struct{ cl_long8 lo, hi; }; | |
929 | #endif | |
930 | #if defined( __CL_LONG2__) | |
931 | __cl_long2 v2[8]; | |
932 | #endif | |
933 | #if defined( __CL_LONG4__) | |
934 | __cl_long4 v4[4]; | |
935 | #endif | |
936 | #if defined( __CL_LONG8__ ) | |
937 | __cl_long8 v8[2]; | |
938 | #endif | |
939 | #if defined( __CL_LONG16__ ) | |
940 | __cl_long16 v16; | |
941 | #endif | |
942 | }cl_long16; | |
943 | ||
944 | ||
945 | /* ---- cl_ulongn ---- */ | |
946 | typedef union | |
947 | { | |
948 | cl_ulong CL_ALIGNED(16) s[2]; | |
949 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
950 | __extension__ struct{ cl_ulong x, y; }; | |
951 | __extension__ struct{ cl_ulong s0, s1; }; | |
952 | __extension__ struct{ cl_ulong lo, hi; }; | |
953 | #endif | |
954 | #if defined( __CL_ULONG2__) | |
955 | __cl_ulong2 v2; | |
956 | #endif | |
957 | }cl_ulong2; | |
958 | ||
959 | typedef union | |
960 | { | |
961 | cl_ulong CL_ALIGNED(32) s[4]; | |
962 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
963 | __extension__ struct{ cl_ulong x, y, z, w; }; | |
964 | __extension__ struct{ cl_ulong s0, s1, s2, s3; }; | |
965 | __extension__ struct{ cl_ulong2 lo, hi; }; | |
966 | #endif | |
967 | #if defined( __CL_ULONG2__) | |
968 | __cl_ulong2 v2[2]; | |
969 | #endif | |
970 | #if defined( __CL_ULONG4__) | |
971 | __cl_ulong4 v4; | |
972 | #endif | |
973 | }cl_ulong4; | |
974 | ||
975 | /* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */ | |
976 | typedef cl_ulong4 cl_ulong3; | |
977 | ||
978 | typedef union | |
979 | { | |
980 | cl_ulong CL_ALIGNED(64) s[8]; | |
981 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
982 | __extension__ struct{ cl_ulong x, y, z, w; }; | |
983 | __extension__ struct{ cl_ulong s0, s1, s2, s3, s4, s5, s6, s7; }; | |
984 | __extension__ struct{ cl_ulong4 lo, hi; }; | |
985 | #endif | |
986 | #if defined( __CL_ULONG2__) | |
987 | __cl_ulong2 v2[4]; | |
988 | #endif | |
989 | #if defined( __CL_ULONG4__) | |
990 | __cl_ulong4 v4[2]; | |
991 | #endif | |
992 | #if defined( __CL_ULONG8__ ) | |
993 | __cl_ulong8 v8; | |
994 | #endif | |
995 | }cl_ulong8; | |
996 | ||
997 | typedef union | |
998 | { | |
999 | cl_ulong CL_ALIGNED(128) s[16]; | |
1000 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1001 | __extension__ struct{ cl_ulong x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
1002 | __extension__ struct{ cl_ulong s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
1003 | __extension__ struct{ cl_ulong8 lo, hi; }; | |
1004 | #endif | |
1005 | #if defined( __CL_ULONG2__) | |
1006 | __cl_ulong2 v2[8]; | |
1007 | #endif | |
1008 | #if defined( __CL_ULONG4__) | |
1009 | __cl_ulong4 v4[4]; | |
1010 | #endif | |
1011 | #if defined( __CL_ULONG8__ ) | |
1012 | __cl_ulong8 v8[2]; | |
1013 | #endif | |
1014 | #if defined( __CL_ULONG16__ ) | |
1015 | __cl_ulong16 v16; | |
1016 | #endif | |
1017 | }cl_ulong16; | |
1018 | ||
1019 | ||
1020 | /* --- cl_floatn ---- */ | |
1021 | ||
1022 | typedef union | |
1023 | { | |
1024 | cl_float CL_ALIGNED(8) s[2]; | |
1025 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1026 | __extension__ struct{ cl_float x, y; }; | |
1027 | __extension__ struct{ cl_float s0, s1; }; | |
1028 | __extension__ struct{ cl_float lo, hi; }; | |
1029 | #endif | |
1030 | #if defined( __CL_FLOAT2__) | |
1031 | __cl_float2 v2; | |
1032 | #endif | |
1033 | }cl_float2; | |
1034 | ||
1035 | typedef union | |
1036 | { | |
1037 | cl_float CL_ALIGNED(16) s[4]; | |
1038 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1039 | __extension__ struct{ cl_float x, y, z, w; }; | |
1040 | __extension__ struct{ cl_float s0, s1, s2, s3; }; | |
1041 | __extension__ struct{ cl_float2 lo, hi; }; | |
1042 | #endif | |
1043 | #if defined( __CL_FLOAT2__) | |
1044 | __cl_float2 v2[2]; | |
1045 | #endif | |
1046 | #if defined( __CL_FLOAT4__) | |
1047 | __cl_float4 v4; | |
1048 | #endif | |
1049 | }cl_float4; | |
1050 | ||
1051 | /* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */ | |
1052 | typedef cl_float4 cl_float3; | |
1053 | ||
1054 | typedef union | |
1055 | { | |
1056 | cl_float CL_ALIGNED(32) s[8]; | |
1057 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1058 | __extension__ struct{ cl_float x, y, z, w; }; | |
1059 | __extension__ struct{ cl_float s0, s1, s2, s3, s4, s5, s6, s7; }; | |
1060 | __extension__ struct{ cl_float4 lo, hi; }; | |
1061 | #endif | |
1062 | #if defined( __CL_FLOAT2__) | |
1063 | __cl_float2 v2[4]; | |
1064 | #endif | |
1065 | #if defined( __CL_FLOAT4__) | |
1066 | __cl_float4 v4[2]; | |
1067 | #endif | |
1068 | #if defined( __CL_FLOAT8__ ) | |
1069 | __cl_float8 v8; | |
1070 | #endif | |
1071 | }cl_float8; | |
1072 | ||
1073 | typedef union | |
1074 | { | |
1075 | cl_float CL_ALIGNED(64) s[16]; | |
1076 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1077 | __extension__ struct{ cl_float x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
1078 | __extension__ struct{ cl_float s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
1079 | __extension__ struct{ cl_float8 lo, hi; }; | |
1080 | #endif | |
1081 | #if defined( __CL_FLOAT2__) | |
1082 | __cl_float2 v2[8]; | |
1083 | #endif | |
1084 | #if defined( __CL_FLOAT4__) | |
1085 | __cl_float4 v4[4]; | |
1086 | #endif | |
1087 | #if defined( __CL_FLOAT8__ ) | |
1088 | __cl_float8 v8[2]; | |
1089 | #endif | |
1090 | #if defined( __CL_FLOAT16__ ) | |
1091 | __cl_float16 v16; | |
1092 | #endif | |
1093 | }cl_float16; | |
1094 | ||
1095 | /* --- cl_doublen ---- */ | |
1096 | ||
1097 | typedef union | |
1098 | { | |
1099 | cl_double CL_ALIGNED(16) s[2]; | |
1100 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1101 | __extension__ struct{ cl_double x, y; }; | |
1102 | __extension__ struct{ cl_double s0, s1; }; | |
1103 | __extension__ struct{ cl_double lo, hi; }; | |
1104 | #endif | |
1105 | #if defined( __CL_DOUBLE2__) | |
1106 | __cl_double2 v2; | |
1107 | #endif | |
1108 | }cl_double2; | |
1109 | ||
1110 | typedef union | |
1111 | { | |
1112 | cl_double CL_ALIGNED(32) s[4]; | |
1113 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1114 | __extension__ struct{ cl_double x, y, z, w; }; | |
1115 | __extension__ struct{ cl_double s0, s1, s2, s3; }; | |
1116 | __extension__ struct{ cl_double2 lo, hi; }; | |
1117 | #endif | |
1118 | #if defined( __CL_DOUBLE2__) | |
1119 | __cl_double2 v2[2]; | |
1120 | #endif | |
1121 | #if defined( __CL_DOUBLE4__) | |
1122 | __cl_double4 v4; | |
1123 | #endif | |
1124 | }cl_double4; | |
1125 | ||
1126 | /* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */ | |
1127 | typedef cl_double4 cl_double3; | |
1128 | ||
1129 | typedef union | |
1130 | { | |
1131 | cl_double CL_ALIGNED(64) s[8]; | |
1132 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1133 | __extension__ struct{ cl_double x, y, z, w; }; | |
1134 | __extension__ struct{ cl_double s0, s1, s2, s3, s4, s5, s6, s7; }; | |
1135 | __extension__ struct{ cl_double4 lo, hi; }; | |
1136 | #endif | |
1137 | #if defined( __CL_DOUBLE2__) | |
1138 | __cl_double2 v2[4]; | |
1139 | #endif | |
1140 | #if defined( __CL_DOUBLE4__) | |
1141 | __cl_double4 v4[2]; | |
1142 | #endif | |
1143 | #if defined( __CL_DOUBLE8__ ) | |
1144 | __cl_double8 v8; | |
1145 | #endif | |
1146 | }cl_double8; | |
1147 | ||
1148 | typedef union | |
1149 | { | |
1150 | cl_double CL_ALIGNED(128) s[16]; | |
1151 | #if defined( __GNUC__) && ! defined( __STRICT_ANSI__ ) | |
1152 | __extension__ struct{ cl_double x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; | |
1153 | __extension__ struct{ cl_double s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; | |
1154 | __extension__ struct{ cl_double8 lo, hi; }; | |
1155 | #endif | |
1156 | #if defined( __CL_DOUBLE2__) | |
1157 | __cl_double2 v2[8]; | |
1158 | #endif | |
1159 | #if defined( __CL_DOUBLE4__) | |
1160 | __cl_double4 v4[4]; | |
1161 | #endif | |
1162 | #if defined( __CL_DOUBLE8__ ) | |
1163 | __cl_double8 v8[2]; | |
1164 | #endif | |
1165 | #if defined( __CL_DOUBLE16__ ) | |
1166 | __cl_double16 v16; | |
1167 | #endif | |
1168 | }cl_double16; | |
1169 | ||
1170 | /* Macro to facilitate debugging | |
1171 | * Usage: | |
1172 | * Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source. | |
1173 | * The first line ends with: CL_PROGRAM_STRING_BEGIN \" | |
1174 | * Each line thereafter of OpenCL C source must end with: \n\ | |
1175 | * The last line ends in "; | |
1176 | * | |
1177 | * Example: | |
1178 | * | |
1179 | * const char *my_program = CL_PROGRAM_STRING_BEGIN "\ | |
1180 | * kernel void foo( int a, float * b ) \n\ | |
1181 | * { \n\ | |
1182 | * // my comment \n\ | |
1183 | * *b[ get_global_id(0)] = a; \n\ | |
1184 | * } \n\ | |
1185 | * "; | |
1186 | * | |
1187 | * This should correctly set up the line, (column) and file information for your source | |
1188 | * string so you can do source level debugging. | |
1189 | */ | |
1190 | #define __CL_STRINGIFY( _x ) # _x | |
1191 | #define _CL_STRINGIFY( _x ) __CL_STRINGIFY( _x ) | |
1192 | #define CL_PROGRAM_STRING_DEBUG_INFO "#line " _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n" | |
1193 | ||
1194 | #ifdef __cplusplus | |
1195 | } | |
1196 | #endif | |
1197 | ||
1198 | #endif /* __CL_PLATFORM_H */ |