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