Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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