1// 2// Copyright (c) 2020 The Khronos Group Inc. 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17#include <inttypes.h> 18#include <stdio.h> 19 20#include "CL/cl.h" 21 22int test_char() 23{ 24/* char */ 25 /* Constructor */ 26 cl_char a = 0; 27 cl_char2 a2 = {{ 0, 1 }}; 28 cl_char4 a4 = {{ 0, 1, 2, 3 }}; 29 cl_char8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 30 cl_char16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 31 32 /* assignment */ 33 cl_char b = a; 34 cl_char2 b2 = a2; 35 cl_char4 b4 = a4; 36 cl_char8 b8 = a8; 37 cl_char16 b16 = a16; 38 39 printf("\nVerifying assignment:\n" ); 40 printf("b: %d\n", b ); 41 printf("b2: %d %d \n", b2.s[0], b2.s[1] ); 42 printf("b4: %d %d %d %d\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 43 printf("b8: %d %d %d %d %d %d %d %d\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 44 printf("b16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 45 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 46 47 /* vector access */ 48 printf("\nVerifying vector access:\n" ); 49#if defined( __CL_CHAR2__ ) 50 __cl_char2 v2 = b2.v2; 51 printf("__cl_char2: %d %d \n", ((cl_char*)&v2)[0], ((cl_char*)&v2)[1] ); 52#else 53 printf( "__cl_char2 SIMD vectors not supported on this architecture.\n" ); 54#endif 55 56#if defined( __CL_CHAR4__ ) 57 __cl_char4 v4 = b4.v4; 58 printf("__cl_char4: %d %d %d %d \n", ((cl_char*)&v4)[0], ((cl_char*)&v4)[1], ((cl_char*)&v4)[2], ((cl_char*)&v4)[3] ); 59#else 60 printf( "__cl_char4 SIMD vectors not supported on this architecture.\n" ); 61#endif 62 63#if defined( __CL_CHAR8__ ) 64 __cl_char8 v8 = b8.v8; 65 printf("__cl_char8: %d %d %d %d %d %d %d %d \n", ((cl_char*)&v8)[0], ((cl_char*)&v8)[1], ((cl_char*)&v8)[2], ((cl_char*)&v8)[3], ((cl_char*)&v8)[4], ((cl_char*)&v8)[5], ((cl_char*)&v8)[6], ((cl_char*)&v8)[7] ); 66#else 67 printf( "__cl_char8 SIMD vectors not supported on this architecture.\n" ); 68#endif 69 70#if defined( __CL_CHAR16__ ) 71 __cl_char16 v16 = b16.v16; 72 printf("__cl_char16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", ((cl_char*)&v16)[0], ((cl_char*)&v16)[1], ((cl_char*)&v16)[2], ((cl_char*)&v16)[3], ((cl_char*)&v16)[4], ((cl_char*)&v16)[5], ((cl_char*)&v16)[6], ((cl_char*)&v16)[7], 73 ((cl_char*)&v16)[8], ((cl_char*)&v16)[9], ((cl_char*)&v16)[10], ((cl_char*)&v16)[11], ((cl_char*)&v16)[12], ((cl_char*)&v16)[13], ((cl_char*)&v16)[14], ((cl_char*)&v16)[15]); 74#else 75 printf( "__cl_char16 SIMD vectors not supported on this architecture.\n" ); 76#endif 77 78 printf( "\n" ); 79 return 0; 80} 81 82int test_uchar() 83{ 84/* uchar */ 85 /* Constructor */ 86 cl_uchar a = 0; 87 cl_uchar2 a2 = {{ 0, 1 }}; 88 cl_uchar4 a4 = {{ 0, 1, 2, 3 }}; 89 cl_uchar8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 90 cl_uchar16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 91 92 /* assignment */ 93 cl_uchar b = a; 94 cl_uchar2 b2 = a2; 95 cl_uchar4 b4 = a4; 96 cl_uchar8 b8 = a8; 97 cl_uchar16 b16 = a16; 98 99 printf("\nVerifying assignment:\n" ); 100 printf("b: %d\n", b ); 101 printf("b2: %d %d \n", b2.s[0], b2.s[1] ); 102 printf("b4: %d %d %d %d\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 103 printf("b8: %d %d %d %d %d %d %d %d\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 104 printf("b16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 105 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 106 107 /* vector access */ 108 printf("\nVerifying vector access:\n" ); 109#if defined( __CL_UCHAR2__ ) 110 __cl_uchar2 v2 = b2.v2; 111 printf("__cl_uchar2: %d %d \n", ((uchar*)&v2)[0], ((cl_uchar*)&v2)[1] ); 112#else 113 printf( "__cl_uchar2 SIMD vectors not supported on this architecture.\n" ); 114#endif 115 116#if defined( __CL_UCHAR4__ ) 117 __cl_uchar4 v4 = b4.v4; 118 printf("__cl_uchar4: %d %d %d %d \n", ((uchar*)&v4)[0], ((cl_uchar*)&v4)[1], ((cl_uchar*)&v4)[2], ((cl_uchar*)&v4)[3] ); 119#else 120 printf( "__cl_uchar4 SIMD vectors not supported on this architecture.\n" ); 121#endif 122 123#if defined( __CL_UCHAR8__ ) 124 __cl_uchar8 v8 = b8.v8; 125 printf("__cl_uchar8: %d %d %d %d %d %d %d %d \n", ((cl_uchar*)&v8)[0], ((cl_uchar*)&v8)[1], ((cl_uchar*)&v8)[2], ((cl_uchar*)&v8)[3], ((cl_uchar*)&v8)[4], ((cl_uchar*)&v8)[5], ((cl_uchar*)&v8)[6], ((cl_uchar*)&v8)[7] ); 126#else 127 printf( "__cl_uchar8 SIMD vectors not supported on this architecture.\n" ); 128#endif 129 130#if defined( __CL_UCHAR16__ ) 131 __cl_uchar16 v16 = b16.v16; 132 printf("__cl_uchar16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", ((cl_uchar*)&v16)[0], ((cl_uchar*)&v16)[1], ((cl_uchar*)&v16)[2], ((cl_uchar*)&v16)[3], ((cl_uchar*)&v16)[4], ((cl_uchar*)&v16)[5], ((cl_uchar*)&v16)[6], ((cl_uchar*)&v16)[7], 133 ((cl_uchar*)&v16)[8], ((cl_uchar*)&v16)[9], ((cl_uchar*)&v16)[10], ((cl_uchar*)&v16)[11], ((cl_uchar*)&v16)[12], ((cl_uchar*)&v16)[13], ((cl_uchar*)&v16)[14], ((cl_uchar*)&v16)[15]); 134#else 135 printf( "__cl_uchar16 SIMD vectors not supported on this architecture.\n" ); 136#endif 137 138 printf( "\n" ); 139 return 0; 140} 141 142int test_short() 143{ 144/* short */ 145 /* Constructor */ 146 cl_short a = 0; 147 cl_short2 a2 = {{ 0, 1 }}; 148 cl_short4 a4 = {{ 0, 1, 2, 3 }}; 149 cl_short8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 150 cl_short16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 151 152 /* assignment */ 153 cl_short b = a; 154 cl_short2 b2 = a2; 155 cl_short4 b4 = a4; 156 cl_short8 b8 = a8; 157 cl_short16 b16 = a16; 158 159 printf("\nVerifying assignment:\n" ); 160 printf("b: %d\n", b ); 161 printf("b2: %d %d \n", b2.s[0], b2.s[1] ); 162 printf("b4: %d %d %d %d\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 163 printf("b8: %d %d %d %d %d %d %d %d\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 164 printf("b16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 165 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 166 167 /* vector access */ 168 printf("\nVerifying vector access:\n" ); 169#if defined( __CL_SHORT2__ ) 170 __cl_short2 v2 = b2.v2; 171 printf("__cl_short2: %d %d \n", ((cl_short*)&v2)[0], ((cl_short*)&v2)[1] ); 172#else 173 printf( "__cl_short2 SIMD vectors not supported on this architecture.\n" ); 174#endif 175 176#if defined( __CL_SHORT4__ ) 177 __cl_short4 v4 = b4.v4; 178 printf("__cl_short4: %d %d %d %d \n", ((cl_short*)&v4)[0], ((cl_short*)&v4)[1], ((cl_short*)&v4)[2], ((cl_short*)&v4)[3] ); 179#else 180 printf( "__cl_short4 SIMD vectors not supported on this architecture.\n" ); 181#endif 182 183#if defined( __CL_SHORT8__ ) 184 __cl_short8 v8 = b8.v8; 185 printf("__cl_short8: %d %d %d %d %d %d %d %d \n", ((cl_short*)&v8)[0], ((cl_short*)&v8)[1], ((cl_short*)&v8)[2], ((cl_short*)&v8)[3], ((cl_short*)&v8)[4], ((cl_short*)&v8)[5], ((cl_short*)&v8)[6], ((cl_short*)&v8)[7] ); 186#else 187 printf( "__cl_short8 SIMD vectors not supported on this architecture.\n" ); 188#endif 189 190#if defined( __CL_SHORT16__ ) 191 __cl_short16 v16 = b16.v16; 192 printf("__cl_short16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", ((cl_short*)&v16)[0], ((cl_short*)&v16)[1], ((cl_short*)&v16)[2], ((cl_short*)&v16)[3], ((cl_short*)&v16)[4], ((cl_short*)&v16)[5], ((cl_short*)&v16)[6], ((cl_short*)&v16)[7], 193 ((cl_short*)&v16)[8], ((cl_short*)&v16)[9], ((cl_short*)&v16)[10], ((cl_short*)&v16)[11], ((cl_short*)&v16)[12], ((cl_short*)&v16)[13], ((cl_short*)&v16)[14], ((cl_short*)&v16)[15]); 194#else 195 printf( "__cl_short16 SIMD vectors not supported on this architecture.\n" ); 196#endif 197 198 printf( "\n" ); 199 return 0; 200} 201 202int test_ushort() 203{ 204/* ushort */ 205 /* Constructor */ 206 cl_ushort a = 0; 207 cl_ushort2 a2 = {{ 0, 1 }}; 208 cl_ushort4 a4 = {{ 0, 1, 2, 3 }}; 209 cl_ushort8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 210 cl_ushort16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 211 212 /* assignment */ 213 cl_ushort b = a; 214 cl_ushort2 b2 = a2; 215 cl_ushort4 b4 = a4; 216 cl_ushort8 b8 = a8; 217 cl_ushort16 b16 = a16; 218 219 printf("\nVerifying assignment:\n" ); 220 printf("b: %d\n", b ); 221 printf("b2: %d %d \n", b2.s[0], b2.s[1] ); 222 printf("b4: %d %d %d %d\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 223 printf("b8: %d %d %d %d %d %d %d %d\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 224 printf("b16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 225 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 226 227 /* vector access */ 228 printf("\nVerifying vector access:\n" ); 229#if defined( __CL_USHORT2__ ) 230 __cl_ushort2 v2 = b2.v2; 231 printf("__cl_ushort2: %d %d \n", ((unsigned short*)&v2)[0], ((unsigned short*)&v2)[1] ); 232#else 233 printf( "__cl_ushort2 SIMD vectors not supported on this architecture.\n" ); 234#endif 235 236#if defined( __CL_USHORT4__ ) 237 __cl_ushort4 v4 = b4.v4; 238 printf("__cl_ushort4: %d %d %d %d \n", ((unsigned short*)&v4)[0], ((unsigned short*)&v4)[1], ((unsigned short*)&v4)[2], ((unsigned short*)&v4)[3] ); 239#else 240 printf( "__cl_ushort4 SIMD vectors not supported on this architecture.\n" ); 241#endif 242 243#if defined( __CL_USHORT8__ ) 244 __cl_ushort8 v8 = b8.v8; 245 printf("__cl_ushort8: %d %d %d %d %d %d %d %d \n", ((unsigned short*)&v8)[0], ((unsigned short*)&v8)[1], ((unsigned short*)&v8)[2], ((unsigned short*)&v8)[3], ((unsigned short*)&v8)[4], ((unsigned short*)&v8)[5], ((unsigned short*)&v8)[6], ((unsigned short*)&v8)[7] ); 246#else 247 printf( "__cl_ushort8 SIMD vectors not supported on this architecture.\n" ); 248#endif 249 250#if defined( __CL_USHORT16__ ) 251 __cl_ushort16 v16 = b16.v16; 252 printf("__cl_ushort16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", ((unsigned short*)&v16)[0], ((unsigned short*)&v16)[1], ((unsigned short*)&v16)[2], ((unsigned short*)&v16)[3], ((unsigned short*)&v16)[4], ((unsigned short*)&v16)[5], ((unsigned short*)&v16)[6], ((unsigned short*)&v16)[7], 253 ((unsigned short*)&v16)[8], ((unsigned short*)&v16)[9], ((unsigned short*)&v16)[10], ((unsigned short*)&v16)[11], ((unsigned short*)&v16)[12], ((unsigned short*)&v16)[13], ((unsigned short*)&v16)[14], ((unsigned short*)&v16)[15]); 254#else 255 printf( "__cl_ushort16 SIMD vectors not supported on this architecture.\n" ); 256#endif 257 258 printf( "\n" ); 259 return 0; 260} 261 262int test_int() 263{ 264/* int */ 265 /* Constructor */ 266 cl_int a = 0; 267 cl_int2 a2 = {{ 0, 1 }}; 268 cl_int4 a4 = {{ 0, 1, 2, 3 }}; 269 cl_int8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 270 cl_int16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 271 272 /* assignment */ 273 cl_int b = a; 274 cl_int2 b2 = a2; 275 cl_int4 b4 = a4; 276 cl_int8 b8 = a8; 277 cl_int16 b16 = a16; 278 279 printf("\nVerifying assignment:\n" ); 280 printf("b: %d\n", b ); 281 printf("b2: %d %d \n", b2.s[0], b2.s[1] ); 282 printf("b4: %d %d %d %d\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 283 printf("b8: %d %d %d %d %d %d %d %d\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 284 printf("b16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 285 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 286 287 /* vector access */ 288 printf("\nVerifying vector access:\n" ); 289#if defined( __CL_INT2__ ) 290 __cl_int2 v2 = b2.v2; 291 printf("__cl_int2: %d %d \n", ((cl_int*)&v2)[0], ((cl_int*)&v2)[1] ); 292#else 293 printf( "__cl_int2 SIMD vectors not supported on this architecture.\n" ); 294#endif 295 296#if defined( __CL_INT4__ ) 297 __cl_int4 v4 = b4.v4; 298 printf("__cl_int4: %d %d %d %d \n", ((cl_int*)&v4)[0], ((cl_int*)&v4)[1], ((cl_int*)&v4)[2], ((cl_int*)&v4)[3] ); 299#else 300 printf( "__cl_int4 SIMD vectors not supported on this architecture.\n" ); 301#endif 302 303#if defined( __CL_INT8__ ) 304 __cl_int8 v8 = b8.v8; 305 printf("__cl_int8: %d %d %d %d %d %d %d %d \n", ((cl_int*)&v8)[0], ((cl_int*)&v8)[1], ((cl_int*)&v8)[2], ((cl_int*)&v8)[3], ((cl_int*)&v8)[4], ((cl_int*)&v8)[5], ((cl_int*)&v8)[6], ((cl_int*)&v8)[7] ); 306#else 307 printf( "__cl_int8 SIMD vectors not supported on this architecture.\n" ); 308#endif 309 310#if defined( __CL_INT16__ ) 311 __cl_int16 v16 = b16.v16; 312 printf("__cl_int16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", ((cl_int*)&v16)[0], ((cl_int*)&v16)[1], ((cl_int*)&v16)[2], ((cl_int*)&v16)[3], ((cl_int*)&v16)[4], ((cl_int*)&v16)[5], ((cl_int*)&v16)[6], ((cl_int*)&v16)[7], 313 ((cl_int*)&v16)[8], ((cl_int*)&v16)[9], ((cl_int*)&v16)[10], ((cl_int*)&v16)[11], ((cl_int*)&v16)[12], ((cl_int*)&v16)[13], ((cl_int*)&v16)[14], ((cl_int*)&v16)[15]); 314#else 315 printf( "__cl_int16 SIMD vectors not supported on this architecture.\n" ); 316#endif 317 318 printf( "\n" ); 319 return 0; 320} 321 322int test_uint() 323{ 324/* uint */ 325 /* Constructor */ 326 cl_uint a = 0; 327 cl_uint2 a2 = {{ 0, 1 }}; 328 cl_uint4 a4 = {{ 0, 1, 2, 3 }}; 329 cl_uint8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 330 cl_uint16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 331 332 /* assignment */ 333 cl_uint b = a; 334 cl_uint2 b2 = a2; 335 cl_uint4 b4 = a4; 336 cl_uint8 b8 = a8; 337 cl_uint16 b16 = a16; 338 339 printf("\nVerifying assignment:\n" ); 340 printf("b: %d\n", b ); 341 printf("b2: %d %d \n", b2.s[0], b2.s[1] ); 342 printf("b4: %d %d %d %d\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 343 printf("b8: %d %d %d %d %d %d %d %d\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 344 printf("b16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 345 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 346 347 /* vector access */ 348 printf("\nVerifying vector access:\n" ); 349#if defined( __CL_UINT2__ ) 350 __cl_uint2 v2 = b2.v2; 351 printf("__cl_uint2: %d %d \n", ((cl_uint*)&v2)[0], ((cl_uint*)&v2)[1] ); 352#else 353 printf( "__cl_uint2 SIMD vectors not supported on this architecture.\n" ); 354#endif 355 356#if defined( __CL_UINT4__ ) 357 __cl_uint4 v4 = b4.v4; 358 printf("__cl_uint4: %d %d %d %d \n", ((cl_uint*)&v4)[0], ((cl_uint*)&v4)[1], ((cl_uint*)&v4)[2], ((cl_uint*)&v4)[3] ); 359#else 360 printf( "__cl_uint4 SIMD vectors not supported on this architecture.\n" ); 361#endif 362 363#if defined( __CL_UINT8__ ) 364 __cl_uint8 v8 = b8.v8; 365 printf("__cl_uint8: %d %d %d %d %d %d %d %d \n", ((cl_uint*)&v8)[0], ((cl_uint*)&v8)[1], ((cl_uint*)&v8)[2], ((cl_uint*)&v8)[3], ((cl_uint*)&v8)[4], ((cl_uint*)&v8)[5], ((cl_uint*)&v8)[6], ((cl_uint*)&v8)[7] ); 366#else 367 printf( "__cl_uint8 SIMD vectors not supported on this architecture.\n" ); 368#endif 369 370#if defined( __CL_UINT16__ ) 371 __cl_uint16 v16 = b16.v16; 372 printf("__cl_uint16: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", ((cl_uint*)&v16)[0], ((cl_uint*)&v16)[1], ((cl_uint*)&v16)[2], ((cl_uint*)&v16)[3], ((cl_uint*)&v16)[4], ((cl_uint*)&v16)[5], ((cl_uint*)&v16)[6], ((cl_uint*)&v16)[7], 373 ((cl_uint*)&v16)[8], ((cl_uint*)&v16)[9], ((cl_uint*)&v16)[10], ((cl_uint*)&v16)[11], ((cl_uint*)&v16)[12], ((cl_uint*)&v16)[13], ((cl_uint*)&v16)[14], ((cl_uint*)&v16)[15]); 374#else 375 printf( "__cl_uint16 SIMD vectors not supported on this architecture.\n" ); 376#endif 377 378 printf( "\n" ); 379 return 0; 380} 381 382int test_long() 383{ 384/* long */ 385 /* Constructor */ 386 cl_long a = 0; 387 cl_long2 a2 = {{ 0, 1 }}; 388 cl_long4 a4 = {{ 0, 1, 2, 3 }}; 389 cl_long8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 390 cl_long16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 391 392 /* assignment */ 393 cl_long b = a; 394 cl_long2 b2 = a2; 395 cl_long4 b4 = a4; 396 cl_long8 b8 = a8; 397 cl_long16 b16 = a16; 398 399 printf("\nVerifying assignment:\n" ); 400 printf("b: %" PRId64 "\n", b ); 401 printf("b2: %" PRId64 " %" PRId64 " \n", b2.s[0], b2.s[1] ); 402 printf("b4: %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 "\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 403 printf("b8: %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 "\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 404 printf("b16: %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 "\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 405 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 406 407 /* vector access */ 408 printf("\nVerifying vector access:\n" ); 409#if defined( __CL_LONG2__ ) 410 __cl_long2 v2 = b2.v2; 411 printf("__cl_long2: %" PRId64 " %" PRId64 " \n", ((cl_long*)&v2)[0], ((cl_long*)&v2)[1] ); 412#else 413 printf( "__cl_long2 SIMD vectors not supported on this architecture.\n" ); 414#endif 415 416#if defined( __CL_LONG4__ ) 417 __cl_long4 v4 = b4.v4; 418 printf("__cl_long4: %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " \n", ((cl_long*)&v4)[0], ((cl_long*)&v4)[1], ((cl_long*)&v4)[2], ((cl_long*)&v4)[3] ); 419#else 420 printf( "__cl_long4 SIMD vectors not supported on this architecture.\n" ); 421#endif 422 423#if defined( __CL_LONG8__ ) 424 __cl_long8 v8 = b8.v8; 425 printf("__cl_long8: %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " \n", ((cl_long*)&v8)[0], ((cl_long*)&v8)[1], ((cl_long*)&v8)[2], ((cl_long*)&v8)[3], ((cl_long*)&v8)[4], ((cl_long*)&v8)[5], ((cl_long*)&v8)[6], ((cl_long*)&v8)[7] ); 426#else 427 printf( "__cl_long8 SIMD vectors not supported on this architecture.\n" ); 428#endif 429 430#if defined( __CL_LONG16__ ) 431 __cl_long16 v16 = b16.v16; 432 printf("__cl_long16: %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " \n", ((cl_long*)&v16)[0], ((cl_long*)&v16)[1], ((cl_long*)&v16)[2], ((cl_long*)&v16)[3], ((cl_long*)&v16)[4], ((cl_long*)&v16)[5], ((cl_long*)&v16)[6], ((cl_long*)&v16)[7], 433 ((cl_long*)&v16)[8], ((cl_long*)&v16)[9], ((cl_long*)&v16)[10], ((cl_long*)&v16)[11], ((cl_long*)&v16)[12], ((cl_long*)&v16)[13], ((cl_long*)&v16)[14], ((cl_long*)&v16)[15]); 434#else 435 printf( "__cl_long16 SIMD vectors not supported on this architecture.\n" ); 436#endif 437 438 printf( "\n" ); 439 return 0; 440} 441 442int test_ulong() 443{ 444/* ulong */ 445 /* Constructor */ 446 cl_ulong a = 0; 447 cl_ulong2 a2 = {{ 0, 1 }}; 448 cl_ulong4 a4 = {{ 0, 1, 2, 3 }}; 449 cl_ulong8 a8 = {{ 0, 1, 2, 3, 4, 5, 6, 7 }}; 450 cl_ulong16 a16 = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }}; 451 452 /* assignment */ 453 cl_ulong b = a; 454 cl_ulong2 b2 = a2; 455 cl_ulong4 b4 = a4; 456 cl_ulong8 b8 = a8; 457 cl_ulong16 b16 = a16; 458 459 printf("\nVerifying assignment:\n" ); 460 printf("b: %" PRIu64 "\n", b ); 461 printf("b2: %" PRIu64 " %" PRIu64 " \n", b2.s[0], b2.s[1] ); 462 printf("b4: %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 "\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 463 printf("b8: %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 "\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 464 printf("b16: %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 "\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 465 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 466 467 /* vector access */ 468 printf("\nVerifying vector access:\n" ); 469#if defined( __CL_ULONG2__ ) 470 __cl_ulong2 v2 = b2.v2; 471 printf("__cl_ulong2: %" PRIu64 " %" PRIu64 " \n", ((cl_ulong*)&v2)[0], ((cl_ulong*)&v2)[1] ); 472#else 473 printf( "__cl_ulong2 SIMD vectors not supported on this architecture.\n" ); 474#endif 475 476#if defined( __CL_ULONG4__ ) 477 __cl_ulong4 v4 = b4.v4; 478 printf("__cl_ulong4: %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " \n", ((cl_ulong*)&v4)[0], ((cl_ulong*)&v4)[1], ((cl_ulong*)&v4)[2], ((cl_ulong*)&v4)[3] ); 479#else 480 printf( "__cl_ulong4 SIMD vectors not supported on this architecture.\n" ); 481#endif 482 483#if defined( __CL_ULONG8__ ) 484 __cl_ulong8 v8 = b8.v8; 485 printf("__cl_ulong8: %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " \n", ((cl_ulong*)&v8)[0], ((cl_ulong*)&v8)[1], ((cl_ulong*)&v8)[2], ((cl_ulong*)&v8)[3], ((cl_ulong*)&v8)[4], ((cl_ulong*)&v8)[5], ((cl_ulong*)&v8)[6], ((cl_ulong*)&v8)[7] ); 486#else 487 printf( "__cl_ulong8 SIMD vectors not supported on this architecture.\n" ); 488#endif 489 490#if defined( __CL_ULONG16__ ) 491 __cl_ulong16 v16 = b16.v16; 492 printf("__cl_ulong16: %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " \n", ((cl_ulong*)&v16)[0], ((cl_ulong*)&v16)[1], ((cl_ulong*)&v16)[2], ((cl_ulong*)&v16)[3], ((cl_ulong*)&v16)[4], ((cl_ulong*)&v16)[5], ((cl_ulong*)&v16)[6], ((cl_ulong*)&v16)[7], 493 ((cl_ulong*)&v16)[8], ((cl_ulong*)&v16)[9], ((cl_ulong*)&v16)[10], ((cl_ulong*)&v16)[11], ((cl_ulong*)&v16)[12], ((cl_ulong*)&v16)[13], ((cl_ulong*)&v16)[14], ((cl_ulong*)&v16)[15]); 494#else 495 printf( "__cl_ulong16 SIMD vectors not supported on this architecture.\n" ); 496#endif 497 498 printf( "\n" ); 499 return 0; 500} 501 502int test_float() 503{ 504/* float */ 505 /* Constructor */ 506 cl_float a = 0.0f; 507 cl_float2 a2 = {{ 0.0f, 1.0f }}; 508 cl_float4 a4 = {{ 0.0f, 1.0f, 2.0f, 3.0f }}; 509 cl_float8 a8 = {{ 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f }}; 510 cl_float16 a16 = {{ 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f }}; 511 512 /* assignment */ 513 cl_float b = a; 514 cl_float2 b2 = a2; 515 cl_float4 b4 = a4; 516 cl_float8 b8 = a8; 517 cl_float16 b16 = a16; 518 519 printf("\nVerifying assignment:\n" ); 520 printf("b: %f\n", b ); 521 printf("b2: %f %f \n", b2.s[0], b2.s[1] ); 522 printf("b4: %f %f %f %f\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 523 printf("b8: %f %f %f %f %f %f %f %f\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 524 printf("b16: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 525 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 526 527 /* vector access */ 528 printf("\nVerifying vector access:\n" ); 529#if defined( __CL_FLOAT2__ ) 530 __cl_float2 v2 = b2.v2; 531 printf("__cl_float2: %f %f \n", ((cl_float*)&v2)[0], ((cl_float*)&v2)[1] ); 532#else 533 printf( "__cl_float2 SIMD vectors not supported on this architecture.\n" ); 534#endif 535 536#if defined( __CL_FLOAT4__ ) 537 { 538 __cl_float4 v4 = b4.v4; 539 printf("__cl_float4: %f %f %f %f \n", ((cl_float*)&v4)[0], ((cl_float*)&v4)[1], ((cl_float*)&v4)[2], ((cl_float*)&v4)[3] ); 540 } 541#else 542 printf( "__cl_float4 SIMD vectors not supported on this architecture.\n" ); 543#endif 544 545#if defined( __CL_FLOAT8__ ) 546 __cl_float8 v8 = b8.v8; 547 printf("__cl_float8: %f %f %f %f %f %f %f %f \n", ((cl_float*)&v8)[0], ((cl_float*)&v8)[1], ((cl_float*)&v8)[2], ((cl_float*)&v8)[3], ((cl_float*)&v8)[4], ((cl_float*)&v8)[5], ((cl_float*)&v8)[6], ((cl_float*)&v8)[7] ); 548#else 549 printf( "__cl_float8 SIMD vectors not supported on this architecture.\n" ); 550#endif 551 552#if defined( __CL_FLOAT16__ ) 553 __cl_float16 v16 = b16.v16; 554 printf("__cl_float16: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f \n", ((cl_float*)&v16)[0], ((cl_float*)&v16)[1], ((cl_float*)&v16)[2], ((cl_float*)&v16)[3], ((cl_float*)&v16)[4], ((cl_float*)&v16)[5], ((cl_float*)&v16)[6], ((cl_float*)&v16)[7], 555 ((cl_float*)&v16)[8], ((cl_float*)&v16)[9], ((cl_float*)&v16)[10], ((cl_float*)&v16)[11], ((cl_float*)&v16)[12], ((cl_float*)&v16)[13], ((cl_float*)&v16)[14], ((cl_float*)&v16)[15]); 556#else 557 printf( "__cl_float16 SIMD vectors not supported on this architecture.\n" ); 558#endif 559 560 printf( "\n" ); 561 return 0; 562} 563 564int test_double() 565{ 566/* double */ 567 /* Constructor */ 568 cl_double a = 0.0f; 569 cl_double2 a2 = {{ 0.0f, 1.0f }}; 570 cl_double4 a4 = {{ 0.0f, 1.0f, 2.0f, 3.0f }}; 571 cl_double8 a8 = {{ 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f }}; 572 cl_double16 a16 = {{ 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f }}; 573 574 /* assignment */ 575 cl_double b = a; 576 cl_double2 b2 = a2; 577 cl_double4 b4 = a4; 578 cl_double8 b8 = a8; 579 cl_double16 b16 = a16; 580 581 printf("\nVerifying assignment:\n" ); 582 printf("b: %f\n", b ); 583 printf("b2: %f %f \n", b2.s[0], b2.s[1] ); 584 printf("b4: %f %f %f %f\n", b4.s[0], b4.s[1], b4.s[2], b4.s[3] ); 585 printf("b8: %f %f %f %f %f %f %f %f\n", b8.s[0], b8.s[1], b8.s[2], b8.s[3], b8.s[4], b8.s[5], b8.s[6], b8.s[7] ); 586 printf("b16: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n", b16.s[0], b16.s[1], b16.s[2], b16.s[3], b16.s[4], b16.s[5], b16.s[6], b16.s[7], 587 b16.s[8], b16.s[9], b16.s[10], b16.s[11], b16.s[12], b16.s[13], b16.s[14], b16.s[15]); 588 589 /* vector access */ 590 printf("\nVerifying vector access:\n" ); 591#if defined( __CL_DOUBLE2__ ) 592 __cl_double2 v2 = b2.v2; 593 printf("__cl_double2: %f %f \n", ((cl_double*)&v2)[0], ((cl_double*)&v2)[1] ); 594#else 595 printf( "__cl_double2 SIMD vectors not supported on this architecture.\n" ); 596#endif 597 598#if defined( __CL_DOUBLE4__ ) 599 __cl_double4 v4 = b4.v4; 600 printf("__cl_double4: %f %f %f %f \n", ((cl_double*)&v4)[0], ((cl_double*)&v4)[1], ((cl_double*)&v4)[2], ((cl_double*)&v4)[3] ); 601#else 602 printf( "__cl_double4 SIMD vectors not supported on this architecture.\n" ); 603#endif 604 605#if defined( __CL_DOUBLE8__ ) 606 __cl_double8 v8 = b8.v8; 607 printf("__cl_double8: %f %f %f %f %f %f %f %f \n", ((cl_double*)&v8)[0], ((cl_double*)&v8)[1], ((cl_double*)&v8)[2], ((cl_double*)&v8)[3], ((cl_double*)&v8)[4], ((cl_double*)&v8)[5], ((cl_double*)&v8)[6], ((cl_double*)&v8)[7] ); 608#else 609 printf( "__cl_double8 SIMD vectors not supported on this architecture.\n" ); 610#endif 611 612#if defined( __CL_DOUBLE16__ ) 613 __cl_double16 v16 = b16.v16; 614 printf("__cl_double16: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f \n", ((cl_double*)&v16)[0], ((cl_double*)&v16)[1], ((cl_double*)&v16)[2], ((cl_double*)&v16)[3], ((cl_double*)&v16)[4], ((cl_double*)&v16)[5], ((cl_double*)&v16)[6], ((cl_double*)&v16)[7], 615 ((cl_double*)&v16)[8], ((cl_double*)&v16)[9], ((cl_double*)&v16)[10], ((cl_double*)&v16)[11], ((cl_double*)&v16)[12], ((cl_double*)&v16)[13], ((cl_double*)&v16)[14], ((cl_double*)&v16)[15]); 616#else 617 printf( "__cl_double16 SIMD vectors not supported on this architecture.\n" ); 618#endif 619 620 printf( "\n" ); 621 return 0; 622} 623 624int main(void) 625{ 626 printf( "\nChecking operations on cl_types.\nNumbers, where presented, should walk upward from 0, with step of 1:\n" ); 627 628 test_char(); 629 test_uchar(); 630 test_short(); 631 test_ushort(); 632 test_long(); 633 test_ulong(); 634 test_float(); 635 test_double(); 636 637 return 0; 638} 639