xref: /third_party/mesa3d/include/CL/cl_platform.h (revision bf215546)
1/*******************************************************************************
2 * Copyright (c) 2008-2020 The Khronos Group Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *    http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16
17#ifndef __CL_PLATFORM_H
18#define __CL_PLATFORM_H
19
20#include <CL/cl_version.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#if defined(_WIN32)
27    #define CL_API_ENTRY
28    #define CL_API_CALL     __stdcall
29    #define CL_CALLBACK     __stdcall
30#else
31    #define CL_API_ENTRY
32    #define CL_API_CALL
33    #define CL_CALLBACK
34#endif
35
36/*
37 * Deprecation flags refer to the last version of the header in which the
38 * feature was not deprecated.
39 *
40 * E.g. VERSION_1_1_DEPRECATED means the feature is present in 1.1 without
41 * deprecation but is deprecated in versions later than 1.1.
42 */
43
44#define CL_EXTENSION_WEAK_LINK
45#define CL_API_SUFFIX__VERSION_1_0
46#define CL_EXT_SUFFIX__VERSION_1_0
47#define CL_API_SUFFIX__VERSION_1_1
48#define CL_EXT_SUFFIX__VERSION_1_1
49#define CL_API_SUFFIX__VERSION_1_2
50#define CL_EXT_SUFFIX__VERSION_1_2
51#define CL_API_SUFFIX__VERSION_2_0
52#define CL_EXT_SUFFIX__VERSION_2_0
53#define CL_API_SUFFIX__VERSION_2_1
54#define CL_EXT_SUFFIX__VERSION_2_1
55#define CL_API_SUFFIX__VERSION_2_2
56#define CL_EXT_SUFFIX__VERSION_2_2
57#define CL_API_SUFFIX__VERSION_3_0
58#define CL_EXT_SUFFIX__VERSION_3_0
59#define CL_API_SUFFIX__EXPERIMENTAL
60#define CL_EXT_SUFFIX__EXPERIMENTAL
61
62
63#ifdef __GNUC__
64  #define CL_EXT_SUFFIX_DEPRECATED __attribute__((deprecated))
65  #define CL_EXT_PREFIX_DEPRECATED
66#elif defined(_WIN32)
67  #define CL_EXT_SUFFIX_DEPRECATED
68  #define CL_EXT_PREFIX_DEPRECATED __declspec(deprecated)
69#else
70  #define CL_EXT_SUFFIX_DEPRECATED
71  #define CL_EXT_PREFIX_DEPRECATED
72#endif
73
74#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
75    #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
76    #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED
77#else
78    #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
79    #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED CL_EXT_PREFIX_DEPRECATED
80#endif
81
82#ifdef CL_USE_DEPRECATED_OPENCL_1_1_APIS
83    #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
84    #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
85#else
86    #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
87    #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED CL_EXT_PREFIX_DEPRECATED
88#endif
89
90#ifdef CL_USE_DEPRECATED_OPENCL_1_2_APIS
91    #define CL_EXT_SUFFIX__VERSION_1_2_DEPRECATED
92    #define CL_EXT_PREFIX__VERSION_1_2_DEPRECATED
93#else
94    #define CL_EXT_SUFFIX__VERSION_1_2_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
95    #define CL_EXT_PREFIX__VERSION_1_2_DEPRECATED CL_EXT_PREFIX_DEPRECATED
96 #endif
97
98#ifdef CL_USE_DEPRECATED_OPENCL_2_0_APIS
99    #define CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED
100    #define CL_EXT_PREFIX__VERSION_2_0_DEPRECATED
101#else
102    #define CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
103    #define CL_EXT_PREFIX__VERSION_2_0_DEPRECATED CL_EXT_PREFIX_DEPRECATED
104#endif
105
106#ifdef CL_USE_DEPRECATED_OPENCL_2_1_APIS
107    #define CL_EXT_SUFFIX__VERSION_2_1_DEPRECATED
108    #define CL_EXT_PREFIX__VERSION_2_1_DEPRECATED
109#else
110    #define CL_EXT_SUFFIX__VERSION_2_1_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
111    #define CL_EXT_PREFIX__VERSION_2_1_DEPRECATED CL_EXT_PREFIX_DEPRECATED
112#endif
113
114#ifdef CL_USE_DEPRECATED_OPENCL_2_2_APIS
115    #define CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED
116    #define CL_EXT_PREFIX__VERSION_2_2_DEPRECATED
117#else
118    #define CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
119    #define CL_EXT_PREFIX__VERSION_2_2_DEPRECATED CL_EXT_PREFIX_DEPRECATED
120#endif
121
122#if (defined (_WIN32) && defined(_MSC_VER))
123
124/* scalar types  */
125typedef signed   __int8         cl_char;
126typedef unsigned __int8         cl_uchar;
127typedef signed   __int16        cl_short;
128typedef unsigned __int16        cl_ushort;
129typedef signed   __int32        cl_int;
130typedef unsigned __int32        cl_uint;
131typedef signed   __int64        cl_long;
132typedef unsigned __int64        cl_ulong;
133
134typedef unsigned __int16        cl_half;
135typedef float                   cl_float;
136typedef double                  cl_double;
137
138/* Macro names and corresponding values defined by OpenCL */
139#define CL_CHAR_BIT         8
140#define CL_SCHAR_MAX        127
141#define CL_SCHAR_MIN        (-127-1)
142#define CL_CHAR_MAX         CL_SCHAR_MAX
143#define CL_CHAR_MIN         CL_SCHAR_MIN
144#define CL_UCHAR_MAX        255
145#define CL_SHRT_MAX         32767
146#define CL_SHRT_MIN         (-32767-1)
147#define CL_USHRT_MAX        65535
148#define CL_INT_MAX          2147483647
149#define CL_INT_MIN          (-2147483647-1)
150#define CL_UINT_MAX         0xffffffffU
151#define CL_LONG_MAX         ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
152#define CL_LONG_MIN         ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
153#define CL_ULONG_MAX        ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
154
155#define CL_FLT_DIG          6
156#define CL_FLT_MANT_DIG     24
157#define CL_FLT_MAX_10_EXP   +38
158#define CL_FLT_MAX_EXP      +128
159#define CL_FLT_MIN_10_EXP   -37
160#define CL_FLT_MIN_EXP      -125
161#define CL_FLT_RADIX        2
162#define CL_FLT_MAX          340282346638528859811704183484516925440.0f
163#define CL_FLT_MIN          1.175494350822287507969e-38f
164#define CL_FLT_EPSILON      1.1920928955078125e-7f
165
166#define CL_HALF_DIG          3
167#define CL_HALF_MANT_DIG     11
168#define CL_HALF_MAX_10_EXP   +4
169#define CL_HALF_MAX_EXP      +16
170#define CL_HALF_MIN_10_EXP   -4
171#define CL_HALF_MIN_EXP      -13
172#define CL_HALF_RADIX        2
173#define CL_HALF_MAX          65504.0f
174#define CL_HALF_MIN          6.103515625e-05f
175#define CL_HALF_EPSILON      9.765625e-04f
176
177#define CL_DBL_DIG          15
178#define CL_DBL_MANT_DIG     53
179#define CL_DBL_MAX_10_EXP   +308
180#define CL_DBL_MAX_EXP      +1024
181#define CL_DBL_MIN_10_EXP   -307
182#define CL_DBL_MIN_EXP      -1021
183#define CL_DBL_RADIX        2
184#define CL_DBL_MAX          1.7976931348623158e+308
185#define CL_DBL_MIN          2.225073858507201383090e-308
186#define CL_DBL_EPSILON      2.220446049250313080847e-16
187
188#define CL_M_E              2.7182818284590452354
189#define CL_M_LOG2E          1.4426950408889634074
190#define CL_M_LOG10E         0.43429448190325182765
191#define CL_M_LN2            0.69314718055994530942
192#define CL_M_LN10           2.30258509299404568402
193#define CL_M_PI             3.14159265358979323846
194#define CL_M_PI_2           1.57079632679489661923
195#define CL_M_PI_4           0.78539816339744830962
196#define CL_M_1_PI           0.31830988618379067154
197#define CL_M_2_PI           0.63661977236758134308
198#define CL_M_2_SQRTPI       1.12837916709551257390
199#define CL_M_SQRT2          1.41421356237309504880
200#define CL_M_SQRT1_2        0.70710678118654752440
201
202#define CL_M_E_F            2.718281828f
203#define CL_M_LOG2E_F        1.442695041f
204#define CL_M_LOG10E_F       0.434294482f
205#define CL_M_LN2_F          0.693147181f
206#define CL_M_LN10_F         2.302585093f
207#define CL_M_PI_F           3.141592654f
208#define CL_M_PI_2_F         1.570796327f
209#define CL_M_PI_4_F         0.785398163f
210#define CL_M_1_PI_F         0.318309886f
211#define CL_M_2_PI_F         0.636619772f
212#define CL_M_2_SQRTPI_F     1.128379167f
213#define CL_M_SQRT2_F        1.414213562f
214#define CL_M_SQRT1_2_F      0.707106781f
215
216#define CL_NAN              (CL_INFINITY - CL_INFINITY)
217#define CL_HUGE_VALF        ((cl_float) 1e50)
218#define CL_HUGE_VAL         ((cl_double) 1e500)
219#define CL_MAXFLOAT         CL_FLT_MAX
220#define CL_INFINITY         CL_HUGE_VALF
221
222#else
223
224#include <stdint.h>
225
226/* scalar types  */
227typedef int8_t          cl_char;
228typedef uint8_t         cl_uchar;
229typedef int16_t         cl_short;
230typedef uint16_t        cl_ushort;
231typedef int32_t         cl_int;
232typedef uint32_t        cl_uint;
233typedef int64_t         cl_long;
234typedef uint64_t        cl_ulong;
235
236typedef uint16_t        cl_half;
237typedef float           cl_float;
238typedef double          cl_double;
239
240/* Macro names and corresponding values defined by OpenCL */
241#define CL_CHAR_BIT         8
242#define CL_SCHAR_MAX        127
243#define CL_SCHAR_MIN        (-127-1)
244#define CL_CHAR_MAX         CL_SCHAR_MAX
245#define CL_CHAR_MIN         CL_SCHAR_MIN
246#define CL_UCHAR_MAX        255
247#define CL_SHRT_MAX         32767
248#define CL_SHRT_MIN         (-32767-1)
249#define CL_USHRT_MAX        65535
250#define CL_INT_MAX          2147483647
251#define CL_INT_MIN          (-2147483647-1)
252#define CL_UINT_MAX         0xffffffffU
253#define CL_LONG_MAX         ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
254#define CL_LONG_MIN         ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
255#define CL_ULONG_MAX        ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
256
257#define CL_FLT_DIG          6
258#define CL_FLT_MANT_DIG     24
259#define CL_FLT_MAX_10_EXP   +38
260#define CL_FLT_MAX_EXP      +128
261#define CL_FLT_MIN_10_EXP   -37
262#define CL_FLT_MIN_EXP      -125
263#define CL_FLT_RADIX        2
264#define CL_FLT_MAX          340282346638528859811704183484516925440.0f
265#define CL_FLT_MIN          1.175494350822287507969e-38f
266#define CL_FLT_EPSILON      1.1920928955078125e-7f
267
268#define CL_HALF_DIG          3
269#define CL_HALF_MANT_DIG     11
270#define CL_HALF_MAX_10_EXP   +4
271#define CL_HALF_MAX_EXP      +16
272#define CL_HALF_MIN_10_EXP   -4
273#define CL_HALF_MIN_EXP      -13
274#define CL_HALF_RADIX        2
275#define CL_HALF_MAX          65504.0f
276#define CL_HALF_MIN          6.103515625e-05f
277#define CL_HALF_EPSILON      9.765625e-04f
278
279#define CL_DBL_DIG          15
280#define CL_DBL_MANT_DIG     53
281#define CL_DBL_MAX_10_EXP   +308
282#define CL_DBL_MAX_EXP      +1024
283#define CL_DBL_MIN_10_EXP   -307
284#define CL_DBL_MIN_EXP      -1021
285#define CL_DBL_RADIX        2
286#define CL_DBL_MAX          179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
287#define CL_DBL_MIN          2.225073858507201383090e-308
288#define CL_DBL_EPSILON      2.220446049250313080847e-16
289
290#define CL_M_E              2.7182818284590452354
291#define CL_M_LOG2E          1.4426950408889634074
292#define CL_M_LOG10E         0.43429448190325182765
293#define CL_M_LN2            0.69314718055994530942
294#define CL_M_LN10           2.30258509299404568402
295#define CL_M_PI             3.14159265358979323846
296#define CL_M_PI_2           1.57079632679489661923
297#define CL_M_PI_4           0.78539816339744830962
298#define CL_M_1_PI           0.31830988618379067154
299#define CL_M_2_PI           0.63661977236758134308
300#define CL_M_2_SQRTPI       1.12837916709551257390
301#define CL_M_SQRT2          1.41421356237309504880
302#define CL_M_SQRT1_2        0.70710678118654752440
303
304#define CL_M_E_F            2.718281828f
305#define CL_M_LOG2E_F        1.442695041f
306#define CL_M_LOG10E_F       0.434294482f
307#define CL_M_LN2_F          0.693147181f
308#define CL_M_LN10_F         2.302585093f
309#define CL_M_PI_F           3.141592654f
310#define CL_M_PI_2_F         1.570796327f
311#define CL_M_PI_4_F         0.785398163f
312#define CL_M_1_PI_F         0.318309886f
313#define CL_M_2_PI_F         0.636619772f
314#define CL_M_2_SQRTPI_F     1.128379167f
315#define CL_M_SQRT2_F        1.414213562f
316#define CL_M_SQRT1_2_F      0.707106781f
317
318#if defined( __GNUC__ )
319   #define CL_HUGE_VALF     __builtin_huge_valf()
320   #define CL_HUGE_VAL      __builtin_huge_val()
321   #define CL_NAN           __builtin_nanf( "" )
322#else
323   #define CL_HUGE_VALF     ((cl_float) 1e50)
324   #define CL_HUGE_VAL      ((cl_double) 1e500)
325   float nanf( const char * );
326   #define CL_NAN           nanf( "" )
327#endif
328#define CL_MAXFLOAT         CL_FLT_MAX
329#define CL_INFINITY         CL_HUGE_VALF
330
331#endif
332
333#include <stddef.h>
334
335/* Mirror types to GL types. Mirror types allow us to avoid deciding which 87s to load based on whether we are using GL or GLES here. */
336typedef unsigned int cl_GLuint;
337typedef int          cl_GLint;
338typedef unsigned int cl_GLenum;
339
340/*
341 * Vector types
342 *
343 *  Note:   OpenCL requires that all types be naturally aligned.
344 *          This means that vector types must be naturally aligned.
345 *          For example, a vector of four floats must be aligned to
346 *          a 16 byte boundary (calculated as 4 * the natural 4-byte
347 *          alignment of the float).  The alignment qualifiers here
348 *          will only function properly if your compiler supports them
349 *          and if you don't actively work to defeat them.  For example,
350 *          in order for a cl_float4 to be 16 byte aligned in a struct,
351 *          the start of the struct must itself be 16-byte aligned.
352 *
353 *          Maintaining proper alignment is the user's responsibility.
354 */
355
356/* Define basic vector types */
357#if defined( __VEC__ )
358  #if !defined(__clang__)
359     #include <altivec.h>   /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */
360  #endif
361   typedef __vector unsigned char     __cl_uchar16;
362   typedef __vector signed char       __cl_char16;
363   typedef __vector unsigned short    __cl_ushort8;
364   typedef __vector signed short      __cl_short8;
365   typedef __vector unsigned int      __cl_uint4;
366   typedef __vector signed int        __cl_int4;
367   typedef __vector float             __cl_float4;
368   #define  __CL_UCHAR16__  1
369   #define  __CL_CHAR16__   1
370   #define  __CL_USHORT8__  1
371   #define  __CL_SHORT8__   1
372   #define  __CL_UINT4__    1
373   #define  __CL_INT4__     1
374   #define  __CL_FLOAT4__   1
375#endif
376
377#if defined( __SSE__ )
378    #if defined( __MINGW64__ )
379        #include <intrin.h>
380    #else
381        #include <xmmintrin.h>
382    #endif
383    #if defined( __GNUC__ )
384        typedef float __cl_float4   __attribute__((vector_size(16)));
385    #else
386        typedef __m128 __cl_float4;
387    #endif
388    #define __CL_FLOAT4__   1
389#endif
390
391#if defined( __SSE2__ )
392    #if defined( __MINGW64__ )
393        #include <intrin.h>
394    #else
395        #include <emmintrin.h>
396    #endif
397    #if defined( __GNUC__ )
398        typedef cl_uchar    __cl_uchar16    __attribute__((vector_size(16)));
399        typedef cl_char     __cl_char16     __attribute__((vector_size(16)));
400        typedef cl_ushort   __cl_ushort8    __attribute__((vector_size(16)));
401        typedef cl_short    __cl_short8     __attribute__((vector_size(16)));
402        typedef cl_uint     __cl_uint4      __attribute__((vector_size(16)));
403        typedef cl_int      __cl_int4       __attribute__((vector_size(16)));
404        typedef cl_ulong    __cl_ulong2     __attribute__((vector_size(16)));
405        typedef cl_long     __cl_long2      __attribute__((vector_size(16)));
406        typedef cl_double   __cl_double2    __attribute__((vector_size(16)));
407    #else
408        typedef __m128i __cl_uchar16;
409        typedef __m128i __cl_char16;
410        typedef __m128i __cl_ushort8;
411        typedef __m128i __cl_short8;
412        typedef __m128i __cl_uint4;
413        typedef __m128i __cl_int4;
414        typedef __m128i __cl_ulong2;
415        typedef __m128i __cl_long2;
416        typedef __m128d __cl_double2;
417    #endif
418    #define __CL_UCHAR16__  1
419    #define __CL_CHAR16__   1
420    #define __CL_USHORT8__  1
421    #define __CL_SHORT8__   1
422    #define __CL_INT4__     1
423    #define __CL_UINT4__    1
424    #define __CL_ULONG2__   1
425    #define __CL_LONG2__    1
426    #define __CL_DOUBLE2__  1
427#endif
428
429#if defined( __MMX__ )
430    #include <mmintrin.h>
431    #if defined( __GNUC__ )
432        typedef cl_uchar    __cl_uchar8     __attribute__((vector_size(8)));
433        typedef cl_char     __cl_char8      __attribute__((vector_size(8)));
434        typedef cl_ushort   __cl_ushort4    __attribute__((vector_size(8)));
435        typedef cl_short    __cl_short4     __attribute__((vector_size(8)));
436        typedef cl_uint     __cl_uint2      __attribute__((vector_size(8)));
437        typedef cl_int      __cl_int2       __attribute__((vector_size(8)));
438        typedef cl_ulong    __cl_ulong1     __attribute__((vector_size(8)));
439        typedef cl_long     __cl_long1      __attribute__((vector_size(8)));
440        typedef cl_float    __cl_float2     __attribute__((vector_size(8)));
441    #else
442        typedef __m64       __cl_uchar8;
443        typedef __m64       __cl_char8;
444        typedef __m64       __cl_ushort4;
445        typedef __m64       __cl_short4;
446        typedef __m64       __cl_uint2;
447        typedef __m64       __cl_int2;
448        typedef __m64       __cl_ulong1;
449        typedef __m64       __cl_long1;
450        typedef __m64       __cl_float2;
451    #endif
452    #define __CL_UCHAR8__   1
453    #define __CL_CHAR8__    1
454    #define __CL_USHORT4__  1
455    #define __CL_SHORT4__   1
456    #define __CL_INT2__     1
457    #define __CL_UINT2__    1
458    #define __CL_ULONG1__   1
459    #define __CL_LONG1__    1
460    #define __CL_FLOAT2__   1
461#endif
462
463#if defined( __AVX__ )
464    #if defined( __MINGW64__ )
465        #include <intrin.h>
466    #else
467        #include <immintrin.h>
468    #endif
469    #if defined( __GNUC__ )
470        typedef cl_float    __cl_float8     __attribute__((vector_size(32)));
471        typedef cl_double   __cl_double4    __attribute__((vector_size(32)));
472    #else
473        typedef __m256      __cl_float8;
474        typedef __m256d     __cl_double4;
475    #endif
476    #define __CL_FLOAT8__   1
477    #define __CL_DOUBLE4__  1
478#endif
479
480/* Define capabilities for anonymous struct members. */
481#if !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
482#define  __CL_HAS_ANON_STRUCT__ 1
483#define  __CL_ANON_STRUCT__
484#elif defined( __GNUC__) && ! defined( __STRICT_ANSI__ )
485#define  __CL_HAS_ANON_STRUCT__ 1
486#define  __CL_ANON_STRUCT__ __extension__
487#elif defined( _WIN32) && defined(_MSC_VER) && ! defined(__STDC__)
488    #if _MSC_VER >= 1500
489   /* Microsoft Developer Studio 2008 supports anonymous structs, but
490    * complains by default. */
491    #define  __CL_HAS_ANON_STRUCT__ 1
492    #define  __CL_ANON_STRUCT__
493   /* Disable warning C4201: nonstandard extension used : nameless
494    * struct/union */
495    #pragma warning( push )
496    #pragma warning( disable : 4201 )
497    #endif
498#else
499#define  __CL_HAS_ANON_STRUCT__ 0
500#define  __CL_ANON_STRUCT__
501#endif
502
503/* Define alignment keys */
504#if defined( __GNUC__ )
505    #define CL_ALIGNED(_x)          __attribute__ ((aligned(_x)))
506#elif defined( _WIN32) && (_MSC_VER)
507    /* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements     */
508    /* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx                                                 */
509    /* #include <crtdefs.h>                                                                                             */
510    /* #define CL_ALIGNED(_x)          _CRT_ALIGN(_x)                                                                   */
511    #define CL_ALIGNED(_x)
512#else
513   #warning  Need to implement some method to align data here
514   #define  CL_ALIGNED(_x)
515#endif
516
517/* Indicate whether .xyzw, .s0123 and .hi.lo are supported */
518#if __CL_HAS_ANON_STRUCT__
519    /* .xyzw and .s0123...{f|F} are supported */
520    #define CL_HAS_NAMED_VECTOR_FIELDS 1
521    /* .hi and .lo are supported */
522    #define CL_HAS_HI_LO_VECTOR_FIELDS 1
523#endif
524
525/* Define cl_vector types */
526
527/* ---- cl_charn ---- */
528typedef union
529{
530    cl_char  CL_ALIGNED(2) s[2];
531#if __CL_HAS_ANON_STRUCT__
532   __CL_ANON_STRUCT__ struct{ cl_char  x, y; };
533   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1; };
534   __CL_ANON_STRUCT__ struct{ cl_char  lo, hi; };
535#endif
536#if defined( __CL_CHAR2__)
537    __cl_char2     v2;
538#endif
539}cl_char2;
540
541typedef union
542{
543    cl_char  CL_ALIGNED(4) s[4];
544#if __CL_HAS_ANON_STRUCT__
545   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w; };
546   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3; };
547   __CL_ANON_STRUCT__ struct{ cl_char2 lo, hi; };
548#endif
549#if defined( __CL_CHAR2__)
550    __cl_char2     v2[2];
551#endif
552#if defined( __CL_CHAR4__)
553    __cl_char4     v4;
554#endif
555}cl_char4;
556
557/* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */
558typedef  cl_char4  cl_char3;
559
560typedef union
561{
562    cl_char   CL_ALIGNED(8) s[8];
563#if __CL_HAS_ANON_STRUCT__
564   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w; };
565   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3, s4, s5, s6, s7; };
566   __CL_ANON_STRUCT__ struct{ cl_char4 lo, hi; };
567#endif
568#if defined( __CL_CHAR2__)
569    __cl_char2     v2[4];
570#endif
571#if defined( __CL_CHAR4__)
572    __cl_char4     v4[2];
573#endif
574#if defined( __CL_CHAR8__ )
575    __cl_char8     v8;
576#endif
577}cl_char8;
578
579typedef union
580{
581    cl_char  CL_ALIGNED(16) s[16];
582#if __CL_HAS_ANON_STRUCT__
583   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
584   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
585   __CL_ANON_STRUCT__ struct{ cl_char8 lo, hi; };
586#endif
587#if defined( __CL_CHAR2__)
588    __cl_char2     v2[8];
589#endif
590#if defined( __CL_CHAR4__)
591    __cl_char4     v4[4];
592#endif
593#if defined( __CL_CHAR8__ )
594    __cl_char8     v8[2];
595#endif
596#if defined( __CL_CHAR16__ )
597    __cl_char16    v16;
598#endif
599}cl_char16;
600
601
602/* ---- cl_ucharn ---- */
603typedef union
604{
605    cl_uchar  CL_ALIGNED(2) s[2];
606#if __CL_HAS_ANON_STRUCT__
607   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y; };
608   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1; };
609   __CL_ANON_STRUCT__ struct{ cl_uchar  lo, hi; };
610#endif
611#if defined( __cl_uchar2__)
612    __cl_uchar2     v2;
613#endif
614}cl_uchar2;
615
616typedef union
617{
618    cl_uchar  CL_ALIGNED(4) s[4];
619#if __CL_HAS_ANON_STRUCT__
620   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w; };
621   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3; };
622   __CL_ANON_STRUCT__ struct{ cl_uchar2 lo, hi; };
623#endif
624#if defined( __CL_UCHAR2__)
625    __cl_uchar2     v2[2];
626#endif
627#if defined( __CL_UCHAR4__)
628    __cl_uchar4     v4;
629#endif
630}cl_uchar4;
631
632/* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */
633typedef  cl_uchar4  cl_uchar3;
634
635typedef union
636{
637    cl_uchar   CL_ALIGNED(8) s[8];
638#if __CL_HAS_ANON_STRUCT__
639   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w; };
640   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3, s4, s5, s6, s7; };
641   __CL_ANON_STRUCT__ struct{ cl_uchar4 lo, hi; };
642#endif
643#if defined( __CL_UCHAR2__)
644    __cl_uchar2     v2[4];
645#endif
646#if defined( __CL_UCHAR4__)
647    __cl_uchar4     v4[2];
648#endif
649#if defined( __CL_UCHAR8__ )
650    __cl_uchar8     v8;
651#endif
652}cl_uchar8;
653
654typedef union
655{
656    cl_uchar  CL_ALIGNED(16) s[16];
657#if __CL_HAS_ANON_STRUCT__
658   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
659   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
660   __CL_ANON_STRUCT__ struct{ cl_uchar8 lo, hi; };
661#endif
662#if defined( __CL_UCHAR2__)
663    __cl_uchar2     v2[8];
664#endif
665#if defined( __CL_UCHAR4__)
666    __cl_uchar4     v4[4];
667#endif
668#if defined( __CL_UCHAR8__ )
669    __cl_uchar8     v8[2];
670#endif
671#if defined( __CL_UCHAR16__ )
672    __cl_uchar16    v16;
673#endif
674}cl_uchar16;
675
676
677/* ---- cl_shortn ---- */
678typedef union
679{
680    cl_short  CL_ALIGNED(4) s[2];
681#if __CL_HAS_ANON_STRUCT__
682   __CL_ANON_STRUCT__ struct{ cl_short  x, y; };
683   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1; };
684   __CL_ANON_STRUCT__ struct{ cl_short  lo, hi; };
685#endif
686#if defined( __CL_SHORT2__)
687    __cl_short2     v2;
688#endif
689}cl_short2;
690
691typedef union
692{
693    cl_short  CL_ALIGNED(8) s[4];
694#if __CL_HAS_ANON_STRUCT__
695   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w; };
696   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3; };
697   __CL_ANON_STRUCT__ struct{ cl_short2 lo, hi; };
698#endif
699#if defined( __CL_SHORT2__)
700    __cl_short2     v2[2];
701#endif
702#if defined( __CL_SHORT4__)
703    __cl_short4     v4;
704#endif
705}cl_short4;
706
707/* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */
708typedef  cl_short4  cl_short3;
709
710typedef union
711{
712    cl_short   CL_ALIGNED(16) s[8];
713#if __CL_HAS_ANON_STRUCT__
714   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w; };
715   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3, s4, s5, s6, s7; };
716   __CL_ANON_STRUCT__ struct{ cl_short4 lo, hi; };
717#endif
718#if defined( __CL_SHORT2__)
719    __cl_short2     v2[4];
720#endif
721#if defined( __CL_SHORT4__)
722    __cl_short4     v4[2];
723#endif
724#if defined( __CL_SHORT8__ )
725    __cl_short8     v8;
726#endif
727}cl_short8;
728
729typedef union
730{
731    cl_short  CL_ALIGNED(32) s[16];
732#if __CL_HAS_ANON_STRUCT__
733   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
734   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
735   __CL_ANON_STRUCT__ struct{ cl_short8 lo, hi; };
736#endif
737#if defined( __CL_SHORT2__)
738    __cl_short2     v2[8];
739#endif
740#if defined( __CL_SHORT4__)
741    __cl_short4     v4[4];
742#endif
743#if defined( __CL_SHORT8__ )
744    __cl_short8     v8[2];
745#endif
746#if defined( __CL_SHORT16__ )
747    __cl_short16    v16;
748#endif
749}cl_short16;
750
751
752/* ---- cl_ushortn ---- */
753typedef union
754{
755    cl_ushort  CL_ALIGNED(4) s[2];
756#if __CL_HAS_ANON_STRUCT__
757   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y; };
758   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1; };
759   __CL_ANON_STRUCT__ struct{ cl_ushort  lo, hi; };
760#endif
761#if defined( __CL_USHORT2__)
762    __cl_ushort2     v2;
763#endif
764}cl_ushort2;
765
766typedef union
767{
768    cl_ushort  CL_ALIGNED(8) s[4];
769#if __CL_HAS_ANON_STRUCT__
770   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w; };
771   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3; };
772   __CL_ANON_STRUCT__ struct{ cl_ushort2 lo, hi; };
773#endif
774#if defined( __CL_USHORT2__)
775    __cl_ushort2     v2[2];
776#endif
777#if defined( __CL_USHORT4__)
778    __cl_ushort4     v4;
779#endif
780}cl_ushort4;
781
782/* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */
783typedef  cl_ushort4  cl_ushort3;
784
785typedef union
786{
787    cl_ushort   CL_ALIGNED(16) s[8];
788#if __CL_HAS_ANON_STRUCT__
789   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w; };
790   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3, s4, s5, s6, s7; };
791   __CL_ANON_STRUCT__ struct{ cl_ushort4 lo, hi; };
792#endif
793#if defined( __CL_USHORT2__)
794    __cl_ushort2     v2[4];
795#endif
796#if defined( __CL_USHORT4__)
797    __cl_ushort4     v4[2];
798#endif
799#if defined( __CL_USHORT8__ )
800    __cl_ushort8     v8;
801#endif
802}cl_ushort8;
803
804typedef union
805{
806    cl_ushort  CL_ALIGNED(32) s[16];
807#if __CL_HAS_ANON_STRUCT__
808   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
809   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
810   __CL_ANON_STRUCT__ struct{ cl_ushort8 lo, hi; };
811#endif
812#if defined( __CL_USHORT2__)
813    __cl_ushort2     v2[8];
814#endif
815#if defined( __CL_USHORT4__)
816    __cl_ushort4     v4[4];
817#endif
818#if defined( __CL_USHORT8__ )
819    __cl_ushort8     v8[2];
820#endif
821#if defined( __CL_USHORT16__ )
822    __cl_ushort16    v16;
823#endif
824}cl_ushort16;
825
826
827/* ---- cl_halfn ---- */
828typedef union
829{
830    cl_half  CL_ALIGNED(4) s[2];
831#if __CL_HAS_ANON_STRUCT__
832    __CL_ANON_STRUCT__ struct{ cl_half  x, y; };
833    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1; };
834    __CL_ANON_STRUCT__ struct{ cl_half  lo, hi; };
835#endif
836#if defined( __CL_HALF2__)
837    __cl_half2     v2;
838#endif
839}cl_half2;
840
841typedef union
842{
843    cl_half  CL_ALIGNED(8) s[4];
844#if __CL_HAS_ANON_STRUCT__
845    __CL_ANON_STRUCT__ struct{ cl_half  x, y, z, w; };
846    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1, s2, s3; };
847    __CL_ANON_STRUCT__ struct{ cl_half2 lo, hi; };
848#endif
849#if defined( __CL_HALF2__)
850    __cl_half2     v2[2];
851#endif
852#if defined( __CL_HALF4__)
853    __cl_half4     v4;
854#endif
855}cl_half4;
856
857/* cl_half3 is identical in size, alignment and behavior to cl_half4. See section 6.1.5. */
858typedef  cl_half4  cl_half3;
859
860typedef union
861{
862    cl_half   CL_ALIGNED(16) s[8];
863#if __CL_HAS_ANON_STRUCT__
864    __CL_ANON_STRUCT__ struct{ cl_half  x, y, z, w; };
865    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1, s2, s3, s4, s5, s6, s7; };
866    __CL_ANON_STRUCT__ struct{ cl_half4 lo, hi; };
867#endif
868#if defined( __CL_HALF2__)
869    __cl_half2     v2[4];
870#endif
871#if defined( __CL_HALF4__)
872    __cl_half4     v4[2];
873#endif
874#if defined( __CL_HALF8__ )
875    __cl_half8     v8;
876#endif
877}cl_half8;
878
879typedef union
880{
881    cl_half  CL_ALIGNED(32) s[16];
882#if __CL_HAS_ANON_STRUCT__
883    __CL_ANON_STRUCT__ struct{ cl_half  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
884    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
885    __CL_ANON_STRUCT__ struct{ cl_half8 lo, hi; };
886#endif
887#if defined( __CL_HALF2__)
888    __cl_half2     v2[8];
889#endif
890#if defined( __CL_HALF4__)
891    __cl_half4     v4[4];
892#endif
893#if defined( __CL_HALF8__ )
894    __cl_half8     v8[2];
895#endif
896#if defined( __CL_HALF16__ )
897    __cl_half16    v16;
898#endif
899}cl_half16;
900
901/* ---- cl_intn ---- */
902typedef union
903{
904    cl_int  CL_ALIGNED(8) s[2];
905#if __CL_HAS_ANON_STRUCT__
906   __CL_ANON_STRUCT__ struct{ cl_int  x, y; };
907   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1; };
908   __CL_ANON_STRUCT__ struct{ cl_int  lo, hi; };
909#endif
910#if defined( __CL_INT2__)
911    __cl_int2     v2;
912#endif
913}cl_int2;
914
915typedef union
916{
917    cl_int  CL_ALIGNED(16) s[4];
918#if __CL_HAS_ANON_STRUCT__
919   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w; };
920   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3; };
921   __CL_ANON_STRUCT__ struct{ cl_int2 lo, hi; };
922#endif
923#if defined( __CL_INT2__)
924    __cl_int2     v2[2];
925#endif
926#if defined( __CL_INT4__)
927    __cl_int4     v4;
928#endif
929}cl_int4;
930
931/* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */
932typedef  cl_int4  cl_int3;
933
934typedef union
935{
936    cl_int   CL_ALIGNED(32) s[8];
937#if __CL_HAS_ANON_STRUCT__
938   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w; };
939   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3, s4, s5, s6, s7; };
940   __CL_ANON_STRUCT__ struct{ cl_int4 lo, hi; };
941#endif
942#if defined( __CL_INT2__)
943    __cl_int2     v2[4];
944#endif
945#if defined( __CL_INT4__)
946    __cl_int4     v4[2];
947#endif
948#if defined( __CL_INT8__ )
949    __cl_int8     v8;
950#endif
951}cl_int8;
952
953typedef union
954{
955    cl_int  CL_ALIGNED(64) s[16];
956#if __CL_HAS_ANON_STRUCT__
957   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
958   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
959   __CL_ANON_STRUCT__ struct{ cl_int8 lo, hi; };
960#endif
961#if defined( __CL_INT2__)
962    __cl_int2     v2[8];
963#endif
964#if defined( __CL_INT4__)
965    __cl_int4     v4[4];
966#endif
967#if defined( __CL_INT8__ )
968    __cl_int8     v8[2];
969#endif
970#if defined( __CL_INT16__ )
971    __cl_int16    v16;
972#endif
973}cl_int16;
974
975
976/* ---- cl_uintn ---- */
977typedef union
978{
979    cl_uint  CL_ALIGNED(8) s[2];
980#if __CL_HAS_ANON_STRUCT__
981   __CL_ANON_STRUCT__ struct{ cl_uint  x, y; };
982   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1; };
983   __CL_ANON_STRUCT__ struct{ cl_uint  lo, hi; };
984#endif
985#if defined( __CL_UINT2__)
986    __cl_uint2     v2;
987#endif
988}cl_uint2;
989
990typedef union
991{
992    cl_uint  CL_ALIGNED(16) s[4];
993#if __CL_HAS_ANON_STRUCT__
994   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w; };
995   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3; };
996   __CL_ANON_STRUCT__ struct{ cl_uint2 lo, hi; };
997#endif
998#if defined( __CL_UINT2__)
999    __cl_uint2     v2[2];
1000#endif
1001#if defined( __CL_UINT4__)
1002    __cl_uint4     v4;
1003#endif
1004}cl_uint4;
1005
1006/* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */
1007typedef  cl_uint4  cl_uint3;
1008
1009typedef union
1010{
1011    cl_uint   CL_ALIGNED(32) s[8];
1012#if __CL_HAS_ANON_STRUCT__
1013   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w; };
1014   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3, s4, s5, s6, s7; };
1015   __CL_ANON_STRUCT__ struct{ cl_uint4 lo, hi; };
1016#endif
1017#if defined( __CL_UINT2__)
1018    __cl_uint2     v2[4];
1019#endif
1020#if defined( __CL_UINT4__)
1021    __cl_uint4     v4[2];
1022#endif
1023#if defined( __CL_UINT8__ )
1024    __cl_uint8     v8;
1025#endif
1026}cl_uint8;
1027
1028typedef union
1029{
1030    cl_uint  CL_ALIGNED(64) s[16];
1031#if __CL_HAS_ANON_STRUCT__
1032   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
1033   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
1034   __CL_ANON_STRUCT__ struct{ cl_uint8 lo, hi; };
1035#endif
1036#if defined( __CL_UINT2__)
1037    __cl_uint2     v2[8];
1038#endif
1039#if defined( __CL_UINT4__)
1040    __cl_uint4     v4[4];
1041#endif
1042#if defined( __CL_UINT8__ )
1043    __cl_uint8     v8[2];
1044#endif
1045#if defined( __CL_UINT16__ )
1046    __cl_uint16    v16;
1047#endif
1048}cl_uint16;
1049
1050/* ---- cl_longn ---- */
1051typedef union
1052{
1053    cl_long  CL_ALIGNED(16) s[2];
1054#if __CL_HAS_ANON_STRUCT__
1055   __CL_ANON_STRUCT__ struct{ cl_long  x, y; };
1056   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1; };
1057   __CL_ANON_STRUCT__ struct{ cl_long  lo, hi; };
1058#endif
1059#if defined( __CL_LONG2__)
1060    __cl_long2     v2;
1061#endif
1062}cl_long2;
1063
1064typedef union
1065{
1066    cl_long  CL_ALIGNED(32) s[4];
1067#if __CL_HAS_ANON_STRUCT__
1068   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w; };
1069   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3; };
1070   __CL_ANON_STRUCT__ struct{ cl_long2 lo, hi; };
1071#endif
1072#if defined( __CL_LONG2__)
1073    __cl_long2     v2[2];
1074#endif
1075#if defined( __CL_LONG4__)
1076    __cl_long4     v4;
1077#endif
1078}cl_long4;
1079
1080/* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */
1081typedef  cl_long4  cl_long3;
1082
1083typedef union
1084{
1085    cl_long   CL_ALIGNED(64) s[8];
1086#if __CL_HAS_ANON_STRUCT__
1087   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w; };
1088   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3, s4, s5, s6, s7; };
1089   __CL_ANON_STRUCT__ struct{ cl_long4 lo, hi; };
1090#endif
1091#if defined( __CL_LONG2__)
1092    __cl_long2     v2[4];
1093#endif
1094#if defined( __CL_LONG4__)
1095    __cl_long4     v4[2];
1096#endif
1097#if defined( __CL_LONG8__ )
1098    __cl_long8     v8;
1099#endif
1100}cl_long8;
1101
1102typedef union
1103{
1104    cl_long  CL_ALIGNED(128) s[16];
1105#if __CL_HAS_ANON_STRUCT__
1106   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
1107   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
1108   __CL_ANON_STRUCT__ struct{ cl_long8 lo, hi; };
1109#endif
1110#if defined( __CL_LONG2__)
1111    __cl_long2     v2[8];
1112#endif
1113#if defined( __CL_LONG4__)
1114    __cl_long4     v4[4];
1115#endif
1116#if defined( __CL_LONG8__ )
1117    __cl_long8     v8[2];
1118#endif
1119#if defined( __CL_LONG16__ )
1120    __cl_long16    v16;
1121#endif
1122}cl_long16;
1123
1124
1125/* ---- cl_ulongn ---- */
1126typedef union
1127{
1128    cl_ulong  CL_ALIGNED(16) s[2];
1129#if __CL_HAS_ANON_STRUCT__
1130   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y; };
1131   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1; };
1132   __CL_ANON_STRUCT__ struct{ cl_ulong  lo, hi; };
1133#endif
1134#if defined( __CL_ULONG2__)
1135    __cl_ulong2     v2;
1136#endif
1137}cl_ulong2;
1138
1139typedef union
1140{
1141    cl_ulong  CL_ALIGNED(32) s[4];
1142#if __CL_HAS_ANON_STRUCT__
1143   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w; };
1144   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3; };
1145   __CL_ANON_STRUCT__ struct{ cl_ulong2 lo, hi; };
1146#endif
1147#if defined( __CL_ULONG2__)
1148    __cl_ulong2     v2[2];
1149#endif
1150#if defined( __CL_ULONG4__)
1151    __cl_ulong4     v4;
1152#endif
1153}cl_ulong4;
1154
1155/* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */
1156typedef  cl_ulong4  cl_ulong3;
1157
1158typedef union
1159{
1160    cl_ulong   CL_ALIGNED(64) s[8];
1161#if __CL_HAS_ANON_STRUCT__
1162   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w; };
1163   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3, s4, s5, s6, s7; };
1164   __CL_ANON_STRUCT__ struct{ cl_ulong4 lo, hi; };
1165#endif
1166#if defined( __CL_ULONG2__)
1167    __cl_ulong2     v2[4];
1168#endif
1169#if defined( __CL_ULONG4__)
1170    __cl_ulong4     v4[2];
1171#endif
1172#if defined( __CL_ULONG8__ )
1173    __cl_ulong8     v8;
1174#endif
1175}cl_ulong8;
1176
1177typedef union
1178{
1179    cl_ulong  CL_ALIGNED(128) s[16];
1180#if __CL_HAS_ANON_STRUCT__
1181   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
1182   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
1183   __CL_ANON_STRUCT__ struct{ cl_ulong8 lo, hi; };
1184#endif
1185#if defined( __CL_ULONG2__)
1186    __cl_ulong2     v2[8];
1187#endif
1188#if defined( __CL_ULONG4__)
1189    __cl_ulong4     v4[4];
1190#endif
1191#if defined( __CL_ULONG8__ )
1192    __cl_ulong8     v8[2];
1193#endif
1194#if defined( __CL_ULONG16__ )
1195    __cl_ulong16    v16;
1196#endif
1197}cl_ulong16;
1198
1199
1200/* --- cl_floatn ---- */
1201
1202typedef union
1203{
1204    cl_float  CL_ALIGNED(8) s[2];
1205#if __CL_HAS_ANON_STRUCT__
1206   __CL_ANON_STRUCT__ struct{ cl_float  x, y; };
1207   __CL_ANON_STRUCT__ struct{ cl_float  s0, s1; };
1208   __CL_ANON_STRUCT__ struct{ cl_float  lo, hi; };
1209#endif
1210#if defined( __CL_FLOAT2__)
1211    __cl_float2     v2;
1212#endif
1213}cl_float2;
1214
1215typedef union
1216{
1217    cl_float  CL_ALIGNED(16) s[4];
1218#if __CL_HAS_ANON_STRUCT__
1219   __CL_ANON_STRUCT__ struct{ cl_float   x, y, z, w; };
1220   __CL_ANON_STRUCT__ struct{ cl_float   s0, s1, s2, s3; };
1221   __CL_ANON_STRUCT__ struct{ cl_float2  lo, hi; };
1222#endif
1223#if defined( __CL_FLOAT2__)
1224    __cl_float2     v2[2];
1225#endif
1226#if defined( __CL_FLOAT4__)
1227    __cl_float4     v4;
1228#endif
1229}cl_float4;
1230
1231/* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */
1232typedef  cl_float4  cl_float3;
1233
1234typedef union
1235{
1236    cl_float   CL_ALIGNED(32) s[8];
1237#if __CL_HAS_ANON_STRUCT__
1238   __CL_ANON_STRUCT__ struct{ cl_float   x, y, z, w; };
1239   __CL_ANON_STRUCT__ struct{ cl_float   s0, s1, s2, s3, s4, s5, s6, s7; };
1240   __CL_ANON_STRUCT__ struct{ cl_float4  lo, hi; };
1241#endif
1242#if defined( __CL_FLOAT2__)
1243    __cl_float2     v2[4];
1244#endif
1245#if defined( __CL_FLOAT4__)
1246    __cl_float4     v4[2];
1247#endif
1248#if defined( __CL_FLOAT8__ )
1249    __cl_float8     v8;
1250#endif
1251}cl_float8;
1252
1253typedef union
1254{
1255    cl_float  CL_ALIGNED(64) s[16];
1256#if __CL_HAS_ANON_STRUCT__
1257   __CL_ANON_STRUCT__ struct{ cl_float  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
1258   __CL_ANON_STRUCT__ struct{ cl_float  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
1259   __CL_ANON_STRUCT__ struct{ cl_float8 lo, hi; };
1260#endif
1261#if defined( __CL_FLOAT2__)
1262    __cl_float2     v2[8];
1263#endif
1264#if defined( __CL_FLOAT4__)
1265    __cl_float4     v4[4];
1266#endif
1267#if defined( __CL_FLOAT8__ )
1268    __cl_float8     v8[2];
1269#endif
1270#if defined( __CL_FLOAT16__ )
1271    __cl_float16    v16;
1272#endif
1273}cl_float16;
1274
1275/* --- cl_doublen ---- */
1276
1277typedef union
1278{
1279    cl_double  CL_ALIGNED(16) s[2];
1280#if __CL_HAS_ANON_STRUCT__
1281   __CL_ANON_STRUCT__ struct{ cl_double  x, y; };
1282   __CL_ANON_STRUCT__ struct{ cl_double s0, s1; };
1283   __CL_ANON_STRUCT__ struct{ cl_double lo, hi; };
1284#endif
1285#if defined( __CL_DOUBLE2__)
1286    __cl_double2     v2;
1287#endif
1288}cl_double2;
1289
1290typedef union
1291{
1292    cl_double  CL_ALIGNED(32) s[4];
1293#if __CL_HAS_ANON_STRUCT__
1294   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w; };
1295   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3; };
1296   __CL_ANON_STRUCT__ struct{ cl_double2 lo, hi; };
1297#endif
1298#if defined( __CL_DOUBLE2__)
1299    __cl_double2     v2[2];
1300#endif
1301#if defined( __CL_DOUBLE4__)
1302    __cl_double4     v4;
1303#endif
1304}cl_double4;
1305
1306/* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */
1307typedef  cl_double4  cl_double3;
1308
1309typedef union
1310{
1311    cl_double   CL_ALIGNED(64) s[8];
1312#if __CL_HAS_ANON_STRUCT__
1313   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w; };
1314   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3, s4, s5, s6, s7; };
1315   __CL_ANON_STRUCT__ struct{ cl_double4 lo, hi; };
1316#endif
1317#if defined( __CL_DOUBLE2__)
1318    __cl_double2     v2[4];
1319#endif
1320#if defined( __CL_DOUBLE4__)
1321    __cl_double4     v4[2];
1322#endif
1323#if defined( __CL_DOUBLE8__ )
1324    __cl_double8     v8;
1325#endif
1326}cl_double8;
1327
1328typedef union
1329{
1330    cl_double  CL_ALIGNED(128) s[16];
1331#if __CL_HAS_ANON_STRUCT__
1332   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
1333   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
1334   __CL_ANON_STRUCT__ struct{ cl_double8 lo, hi; };
1335#endif
1336#if defined( __CL_DOUBLE2__)
1337    __cl_double2     v2[8];
1338#endif
1339#if defined( __CL_DOUBLE4__)
1340    __cl_double4     v4[4];
1341#endif
1342#if defined( __CL_DOUBLE8__ )
1343    __cl_double8     v8[2];
1344#endif
1345#if defined( __CL_DOUBLE16__ )
1346    __cl_double16    v16;
1347#endif
1348}cl_double16;
1349
1350/* Macro to facilitate debugging
1351 * Usage:
1352 *   Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source.
1353 *   The first line ends with:   CL_PROGRAM_STRING_DEBUG_INFO \"
1354 *   Each line thereafter of OpenCL C source must end with: \n\
1355 *   The last line ends in ";
1356 *
1357 *   Example:
1358 *
1359 *   const char *my_program = CL_PROGRAM_STRING_DEBUG_INFO "\
1360 *   kernel void foo( int a, float * b )             \n\
1361 *   {                                               \n\
1362 *      // my comment                                \n\
1363 *      *b[ get_global_id(0)] = a;                   \n\
1364 *   }                                               \n\
1365 *   ";
1366 *
1367 * This should correctly set up the line, (column) and file information for your source
1368 * string so you can do source level debugging.
1369 */
1370#define  __CL_STRINGIFY( _x )               # _x
1371#define  _CL_STRINGIFY( _x )                __CL_STRINGIFY( _x )
1372#define  CL_PROGRAM_STRING_DEBUG_INFO       "#line "  _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n"
1373
1374#ifdef __cplusplus
1375}
1376#endif
1377
1378#if defined( _WIN32) && defined(_MSC_VER) && ! defined(__STDC__)
1379    #if _MSC_VER >=1500
1380    #pragma warning( pop )
1381    #endif
1382#endif
1383
1384#endif  /* __CL_PLATFORM_H  */
1385