Merge lp:~schnetter/pocl/main into lp:~pocl/pocl/trunk

Proposed by Erik Schnetter
Status: Merged
Merge reported by: Pekka Jääskeläinen
Merged at revision: not available
Proposed branch: lp:~schnetter/pocl/main
Merge into: lp:~pocl/pocl/trunk
Diff against target: 1318 lines (+318/-749)
10 files modified
include/_kernel.h (+80/-163)
include/arm/types.h (+7/-7)
include/tce/types.h (+7/-7)
include/types.h (+15/-15)
include/x86_64/types.h (+8/-8)
lib/kernel/as_type.cl (+73/-192)
lib/kernel/convert_type.cl (+114/-356)
lib/kernel/sources.mk (+2/-1)
lib/kernel/vload.cl (+6/-0)
lib/kernel/vstore.cl (+6/-0)
To merge this branch: bzr merge lp:~schnetter/pocl/main
Reviewer Review Type Date Requested Status
Pekka Jääskeläinen Pending
Review via email: mp+84163@code.launchpad.net

Description of the change

Cleanup

Simplify #ifdef and #defines in many spots; reduce code size.

To post a comment you must log in.
lp:~schnetter/pocl/main updated
93. By Erik Schnetter

Remove vec_step, which is already a Clang intrinsic

94. By Erik Schnetter

Merge from trunk

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/_kernel.h'
--- include/_kernel.h 2011-11-29 16:59:14 +0000
+++ include/_kernel.h 2011-12-04 22:04:24 +0000
@@ -48,6 +48,9 @@
48# define __IF_FP64(x)48# define __IF_FP64(x)
49#endif49#endif
5050
51/* A static assert statement to catch inconsistencies at build time */
52#define _cl_static_assert(_t, _x) typedef int ai##_t[(_x) ? 1 : -1]
53
51#define __global __attribute__ ((address_space(3)))54#define __global __attribute__ ((address_space(3)))
52#define __local __attribute__ ((address_space(4)))55#define __local __attribute__ ((address_space(4)))
53#define __constant __attribute__ ((address_space(5)))56#define __constant __attribute__ ((address_space(5)))
@@ -64,6 +67,18 @@
6467
6568
66/* Data types */69/* Data types */
6770
71/* Disable undefined datatypes */
72#ifndef cles_khr_int64
73typedef struct error_undefined_type_long error_undefined_type_long;
74# define long error_undefined_type_long
75typedef struct error_undefined_type_ulong error_undefined_type_ulong;
76# define ulong error_undefined_type_ulong
77#endif
78#ifndef cl_khr_fp64
79typedef struct error_undefined_type_double error_undefined_type_double;
80# define double error_undefined_type_double
81#endif
82
68// We align the 3-vectors, so that their sizeof is correct. Is there a83// We align the 3-vectors, so that their sizeof is correct. Is there a
69// better way? Should we also align the other vectors?84// better way? Should we also align the other vectors?
7085
@@ -115,10 +130,6 @@
115typedef ulong ulong4 __attribute__((__ext_vector_type__(4)));130typedef ulong ulong4 __attribute__((__ext_vector_type__(4)));
116typedef ulong ulong8 __attribute__((__ext_vector_type__(8)));131typedef ulong ulong8 __attribute__((__ext_vector_type__(8)));
117typedef ulong ulong16 __attribute__((__ext_vector_type__(16)));132typedef ulong ulong16 __attribute__((__ext_vector_type__(16)));
118#else
119/* Disable datatype */
120struct error_undefined_type_long;
121#define long struct error_undefined_type_long
122#endif133#endif
123134
124typedef float float2 __attribute__((__ext_vector_type__(2)));135typedef float float2 __attribute__((__ext_vector_type__(2)));
@@ -133,15 +144,9 @@
133typedef double double4 __attribute__((__ext_vector_type__(4)));144typedef double double4 __attribute__((__ext_vector_type__(4)));
134typedef double double8 __attribute__((__ext_vector_type__(8)));145typedef double double8 __attribute__((__ext_vector_type__(8)));
135typedef double double16 __attribute__((__ext_vector_type__(16)));146typedef double double16 __attribute__((__ext_vector_type__(16)));
136#else
137/* Disable datatype */
138struct error_undefined_type_double;
139#define double struct error_undefined_type_double
140#endif147#endif
141148
142/* Ensure the data types have the right sizes */149/* Ensure the data types have the right sizes */
143#define _cl_static_assert(_t, _x) typedef int ai##_t[(_x) ? 1 : -1]
144
145_cl_static_assert(char , sizeof(char ) == 1);150_cl_static_assert(char , sizeof(char ) == 1);
146_cl_static_assert(char2 , sizeof(char2 ) == 2 *sizeof(char));151_cl_static_assert(char2 , sizeof(char2 ) == 2 *sizeof(char));
147_cl_static_assert(char3 , sizeof(char3 ) == 4 *sizeof(char));152_cl_static_assert(char3 , sizeof(char3 ) == 4 *sizeof(char));
@@ -354,146 +359,62 @@
354__IF_INT64(_CL_DECLARE_AS_TYPE_128(ulong16))359__IF_INT64(_CL_DECLARE_AS_TYPE_128(ulong16))
355__IF_FP64(_CL_DECLARE_AS_TYPE_128(double16))360__IF_FP64(_CL_DECLARE_AS_TYPE_128(double16))
356361
357#define _CL_DECLARE_CONVERT_TYPE(SRC, DST) \362#define _CL_DECLARE_CONVERT_TYPE(SRC, DST, SIZE, INTSUFFIX, FLOATSUFFIX) \
358 DST _cl_overloadable convert_##DST(SRC a);363 DST##SIZE _cl_overloadable \
359364 convert_##DST##SIZE##INTSUFFIX##FLOATSUFFIX(SRC##SIZE a);
360/* 1 element */365
361#define _CL_DECLARE_CONVERT_TYPE_1(SRC) \366/* conversions to int may have a suffix: _sat */
362 _CL_DECLARE_CONVERT_TYPE(SRC, char) \367#define _CL_DECLARE_CONVERT_TYPE_DST(SRC, SIZE, FLOATSUFFIX) \
363 _CL_DECLARE_CONVERT_TYPE(SRC, uchar) \368 _CL_DECLARE_CONVERT_TYPE(SRC, char , SIZE, , FLOATSUFFIX) \
364 _CL_DECLARE_CONVERT_TYPE(SRC, short) \369 _CL_DECLARE_CONVERT_TYPE(SRC, char , SIZE, _sat, FLOATSUFFIX) \
365 _CL_DECLARE_CONVERT_TYPE(SRC, ushort) \370 _CL_DECLARE_CONVERT_TYPE(SRC, uchar , SIZE, , FLOATSUFFIX) \
366 _CL_DECLARE_CONVERT_TYPE(SRC, int) \371 _CL_DECLARE_CONVERT_TYPE(SRC, uchar , SIZE, _sat, FLOATSUFFIX) \
367 _CL_DECLARE_CONVERT_TYPE(SRC, uint) \372 _CL_DECLARE_CONVERT_TYPE(SRC, short , SIZE, , FLOATSUFFIX) \
368 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long)) \373 _CL_DECLARE_CONVERT_TYPE(SRC, short , SIZE, _sat, FLOATSUFFIX) \
369 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong)) \374 _CL_DECLARE_CONVERT_TYPE(SRC, ushort, SIZE, , FLOATSUFFIX) \
370 _CL_DECLARE_CONVERT_TYPE(SRC, float) \375 _CL_DECLARE_CONVERT_TYPE(SRC, ushort, SIZE, _sat, FLOATSUFFIX) \
371 __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double))376 _CL_DECLARE_CONVERT_TYPE(SRC, int , SIZE, , FLOATSUFFIX) \
372_CL_DECLARE_CONVERT_TYPE_1(char)377 _CL_DECLARE_CONVERT_TYPE(SRC, int , SIZE, _sat, FLOATSUFFIX) \
373_CL_DECLARE_CONVERT_TYPE_1(uchar)378 _CL_DECLARE_CONVERT_TYPE(SRC, uint , SIZE, , FLOATSUFFIX) \
374_CL_DECLARE_CONVERT_TYPE_1(short)379 _CL_DECLARE_CONVERT_TYPE(SRC, uint , SIZE, _sat, FLOATSUFFIX) \
375_CL_DECLARE_CONVERT_TYPE_1(ushort)380 __IF_INT64( \
376_CL_DECLARE_CONVERT_TYPE_1(int)381 _CL_DECLARE_CONVERT_TYPE(SRC, long , SIZE, , FLOATSUFFIX) \
377_CL_DECLARE_CONVERT_TYPE_1(uint)382 _CL_DECLARE_CONVERT_TYPE(SRC, long , SIZE, _sat, FLOATSUFFIX) \
378__IF_INT64(_CL_DECLARE_CONVERT_TYPE_1(long))383 _CL_DECLARE_CONVERT_TYPE(SRC, ulong , SIZE, , FLOATSUFFIX) \
379__IF_INT64(_CL_DECLARE_CONVERT_TYPE_1(ulong))384 _CL_DECLARE_CONVERT_TYPE(SRC, ulong , SIZE, _sat, FLOATSUFFIX)) \
380_CL_DECLARE_CONVERT_TYPE_1(float)385 _CL_DECLARE_CONVERT_TYPE(SRC, float , SIZE, , FLOATSUFFIX) \
381__IF_FP64(_CL_DECLARE_CONVERT_TYPE_1(double))386 __IF_FP64( \
382387 _CL_DECLARE_CONVERT_TYPE(SRC, double, SIZE, , FLOATSUFFIX))
383/* 2 elements */388
384#define _CL_DECLARE_CONVERT_TYPE_2(SRC) \389/* conversions from float may have a suffix: _rte _rtz _rtp _rtn */
385 _CL_DECLARE_CONVERT_TYPE(SRC, char2) \390#define _CL_DECLARE_CONVERT_TYPE_SRC_DST(SIZE) \
386 _CL_DECLARE_CONVERT_TYPE(SRC, uchar2) \391 _CL_DECLARE_CONVERT_TYPE_DST(char , SIZE, ) \
387 _CL_DECLARE_CONVERT_TYPE(SRC, short2) \392 _CL_DECLARE_CONVERT_TYPE_DST(uchar , SIZE, ) \
388 _CL_DECLARE_CONVERT_TYPE(SRC, ushort2) \393 _CL_DECLARE_CONVERT_TYPE_DST(short , SIZE, ) \
389 _CL_DECLARE_CONVERT_TYPE(SRC, int2) \394 _CL_DECLARE_CONVERT_TYPE_DST(ushort, SIZE, ) \
390 _CL_DECLARE_CONVERT_TYPE(SRC, uint2) \395 _CL_DECLARE_CONVERT_TYPE_DST(int , SIZE, ) \
391 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long2)) \396 _CL_DECLARE_CONVERT_TYPE_DST(uint , SIZE, ) \
392 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong2)) \397 __IF_INT64( \
393 _CL_DECLARE_CONVERT_TYPE(SRC, float2) \398 _CL_DECLARE_CONVERT_TYPE_DST(long , SIZE, ) \
394 __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double2))399 _CL_DECLARE_CONVERT_TYPE_DST(ulong , SIZE, )) \
395_CL_DECLARE_CONVERT_TYPE_2(char2)400 _CL_DECLARE_CONVERT_TYPE_DST(float , SIZE, ) \
396_CL_DECLARE_CONVERT_TYPE_2(uchar2)401 _CL_DECLARE_CONVERT_TYPE_DST(float , SIZE, _rte) \
397_CL_DECLARE_CONVERT_TYPE_2(short2)402 _CL_DECLARE_CONVERT_TYPE_DST(float , SIZE, _rtz) \
398_CL_DECLARE_CONVERT_TYPE_2(ushort2)403 _CL_DECLARE_CONVERT_TYPE_DST(float , SIZE, _rtp) \
399_CL_DECLARE_CONVERT_TYPE_2(int2)404 _CL_DECLARE_CONVERT_TYPE_DST(float , SIZE, _rtn) \
400_CL_DECLARE_CONVERT_TYPE_2(uint2)405 __IF_FP64( \
401__IF_INT64(_CL_DECLARE_CONVERT_TYPE_2(long2))406 _CL_DECLARE_CONVERT_TYPE_DST(double, SIZE, ) \
402__IF_INT64(_CL_DECLARE_CONVERT_TYPE_2(ulong2))407 _CL_DECLARE_CONVERT_TYPE_DST(double, SIZE, _rte) \
403_CL_DECLARE_CONVERT_TYPE_2(float2)408 _CL_DECLARE_CONVERT_TYPE_DST(double, SIZE, _rtz) \
404__IF_FP64(_CL_DECLARE_CONVERT_TYPE_2(double2))409 _CL_DECLARE_CONVERT_TYPE_DST(double, SIZE, _rtp) \
405410 _CL_DECLARE_CONVERT_TYPE_DST(double, SIZE, _rtn))
406/* 3 elements */411
407#define _CL_DECLARE_CONVERT_TYPE_3(SRC) \412_CL_DECLARE_CONVERT_TYPE_SRC_DST( )
408 _CL_DECLARE_CONVERT_TYPE(SRC, char3) \413_CL_DECLARE_CONVERT_TYPE_SRC_DST( 2)
409 _CL_DECLARE_CONVERT_TYPE(SRC, uchar3) \414_CL_DECLARE_CONVERT_TYPE_SRC_DST( 3)
410 _CL_DECLARE_CONVERT_TYPE(SRC, short3) \415_CL_DECLARE_CONVERT_TYPE_SRC_DST( 4)
411 _CL_DECLARE_CONVERT_TYPE(SRC, ushort3) \416_CL_DECLARE_CONVERT_TYPE_SRC_DST( 8)
412 _CL_DECLARE_CONVERT_TYPE(SRC, int3) \417_CL_DECLARE_CONVERT_TYPE_SRC_DST(16)
413 _CL_DECLARE_CONVERT_TYPE(SRC, uint3) \
414 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long3)) \
415 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong3)) \
416 _CL_DECLARE_CONVERT_TYPE(SRC, float3) \
417 __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double3))
418_CL_DECLARE_CONVERT_TYPE_3(char3)
419_CL_DECLARE_CONVERT_TYPE_3(uchar3)
420_CL_DECLARE_CONVERT_TYPE_3(short3)
421_CL_DECLARE_CONVERT_TYPE_3(ushort3)
422_CL_DECLARE_CONVERT_TYPE_3(int3)
423_CL_DECLARE_CONVERT_TYPE_3(uint3)
424__IF_INT64(_CL_DECLARE_CONVERT_TYPE_3(long3))
425__IF_INT64(_CL_DECLARE_CONVERT_TYPE_3(ulong3))
426_CL_DECLARE_CONVERT_TYPE_3(float3)
427__IF_FP64(_CL_DECLARE_CONVERT_TYPE_3(double3))
428
429/* 4 elements */
430#define _CL_DECLARE_CONVERT_TYPE_4(SRC) \
431 _CL_DECLARE_CONVERT_TYPE(SRC, char4) \
432 _CL_DECLARE_CONVERT_TYPE(SRC, uchar4) \
433 _CL_DECLARE_CONVERT_TYPE(SRC, short4) \
434 _CL_DECLARE_CONVERT_TYPE(SRC, ushort4) \
435 _CL_DECLARE_CONVERT_TYPE(SRC, int4) \
436 _CL_DECLARE_CONVERT_TYPE(SRC, uint4) \
437 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long4)) \
438 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong4)) \
439 _CL_DECLARE_CONVERT_TYPE(SRC, float4) \
440 __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double4))
441_CL_DECLARE_CONVERT_TYPE_4(char4)
442_CL_DECLARE_CONVERT_TYPE_4(uchar4)
443_CL_DECLARE_CONVERT_TYPE_4(short4)
444_CL_DECLARE_CONVERT_TYPE_4(ushort4)
445_CL_DECLARE_CONVERT_TYPE_4(int4)
446_CL_DECLARE_CONVERT_TYPE_4(uint4)
447__IF_INT64(_CL_DECLARE_CONVERT_TYPE_4(long4))
448__IF_INT64(_CL_DECLARE_CONVERT_TYPE_4(ulong4))
449_CL_DECLARE_CONVERT_TYPE_4(float4)
450__IF_FP64(_CL_DECLARE_CONVERT_TYPE_4(double4))
451
452/* 8 elements */
453#define _CL_DECLARE_CONVERT_TYPE_8(SRC) \
454 _CL_DECLARE_CONVERT_TYPE(SRC, char8) \
455 _CL_DECLARE_CONVERT_TYPE(SRC, uchar8) \
456 _CL_DECLARE_CONVERT_TYPE(SRC, short8) \
457 _CL_DECLARE_CONVERT_TYPE(SRC, ushort8) \
458 _CL_DECLARE_CONVERT_TYPE(SRC, int8) \
459 _CL_DECLARE_CONVERT_TYPE(SRC, uint8) \
460 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long8)) \
461 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong8)) \
462 _CL_DECLARE_CONVERT_TYPE(SRC, float8) \
463 __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double8))
464_CL_DECLARE_CONVERT_TYPE_8(char8)
465_CL_DECLARE_CONVERT_TYPE_8(uchar8)
466_CL_DECLARE_CONVERT_TYPE_8(short8)
467_CL_DECLARE_CONVERT_TYPE_8(ushort8)
468_CL_DECLARE_CONVERT_TYPE_8(int8)
469_CL_DECLARE_CONVERT_TYPE_8(uint8)
470__IF_INT64(_CL_DECLARE_CONVERT_TYPE_8(long8))
471__IF_INT64(_CL_DECLARE_CONVERT_TYPE_8(ulong8))
472_CL_DECLARE_CONVERT_TYPE_8(float8)
473__IF_FP64(_CL_DECLARE_CONVERT_TYPE_8(double8))
474
475/* 16 elements */
476#define _CL_DECLARE_CONVERT_TYPE_16(SRC) \
477 _CL_DECLARE_CONVERT_TYPE(SRC, char16) \
478 _CL_DECLARE_CONVERT_TYPE(SRC, uchar16) \
479 _CL_DECLARE_CONVERT_TYPE(SRC, short16) \
480 _CL_DECLARE_CONVERT_TYPE(SRC, ushort16) \
481 _CL_DECLARE_CONVERT_TYPE(SRC, int16) \
482 _CL_DECLARE_CONVERT_TYPE(SRC, uint16) \
483 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long16)) \
484 __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong16)) \
485 _CL_DECLARE_CONVERT_TYPE(SRC, float16) \
486 __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double16))
487_CL_DECLARE_CONVERT_TYPE_16(char16)
488_CL_DECLARE_CONVERT_TYPE_16(uchar16)
489_CL_DECLARE_CONVERT_TYPE_16(short16)
490_CL_DECLARE_CONVERT_TYPE_16(ushort16)
491_CL_DECLARE_CONVERT_TYPE_16(int16)
492_CL_DECLARE_CONVERT_TYPE_16(uint16)
493__IF_INT64(_CL_DECLARE_CONVERT_TYPE_16(long16))
494__IF_INT64(_CL_DECLARE_CONVERT_TYPE_16(ulong16))
495_CL_DECLARE_CONVERT_TYPE_16(float16)
496__IF_FP64(_CL_DECLARE_CONVERT_TYPE_16(double16))
497418
498419
499420
500/* Work-Item Functions */421/* Work-Item Functions */
@@ -668,13 +589,13 @@
668 float4 _cl_overloadable NAME(float4 , float4 , int4 ); \589 float4 _cl_overloadable NAME(float4 , float4 , int4 ); \
669 float8 _cl_overloadable NAME(float8 , float8 , int8 ); \590 float8 _cl_overloadable NAME(float8 , float8 , int8 ); \
670 float16 _cl_overloadable NAME(float16 , float16 , int16 ); \591 float16 _cl_overloadable NAME(float16 , float16 , int16 ); \
671 __IF_INT64(__IF_FP64( \592 __IF_FP64( \
672 double _cl_overloadable NAME(double , double , long ); \593 double _cl_overloadable NAME(double , double , long ); \
673 double2 _cl_overloadable NAME(double2 , double2 , long2 ); \594 double2 _cl_overloadable NAME(double2 , double2 , long2 ); \
674 double3 _cl_overloadable NAME(double3 , double3 , long3 ); \595 double3 _cl_overloadable NAME(double3 , double3 , long3 ); \
675 double4 _cl_overloadable NAME(double4 , double4 , long4 ); \596 double4 _cl_overloadable NAME(double4 , double4 , long4 ); \
676 double8 _cl_overloadable NAME(double8 , double8 , long8 ); \597 double8 _cl_overloadable NAME(double8 , double8 , long8 ); \
677 double16 _cl_overloadable NAME(double16, double16, long16);))598 double16 _cl_overloadable NAME(double16, double16, long16);)
678#define _CL_DECLARE_FUNC_V_U(NAME) \599#define _CL_DECLARE_FUNC_V_U(NAME) \
679 float _cl_overloadable NAME(uint ); \600 float _cl_overloadable NAME(uint ); \
680 float2 _cl_overloadable NAME(uint2 ); \601 float2 _cl_overloadable NAME(uint2 ); \
@@ -682,13 +603,13 @@
682 float4 _cl_overloadable NAME(uint4 ); \603 float4 _cl_overloadable NAME(uint4 ); \
683 float8 _cl_overloadable NAME(uint8 ); \604 float8 _cl_overloadable NAME(uint8 ); \
684 float16 _cl_overloadable NAME(uint16 ); \605 float16 _cl_overloadable NAME(uint16 ); \
685 __IF_INT64(__IF_FP64( \606 __IF_FP64( \
686 double _cl_overloadable NAME(ulong ); \607 double _cl_overloadable NAME(ulong ); \
687 double2 _cl_overloadable NAME(ulong2 ); \608 double2 _cl_overloadable NAME(ulong2 ); \
688 double3 _cl_overloadable NAME(ulong3 ); \609 double3 _cl_overloadable NAME(ulong3 ); \
689 double4 _cl_overloadable NAME(ulong4 ); \610 double4 _cl_overloadable NAME(ulong4 ); \
690 double8 _cl_overloadable NAME(ulong8 ); \611 double8 _cl_overloadable NAME(ulong8 ); \
691 double16 _cl_overloadable NAME(ulong16);))612 double16 _cl_overloadable NAME(ulong16);)
692#define _CL_DECLARE_FUNC_V_VS(NAME) \613#define _CL_DECLARE_FUNC_V_VS(NAME) \
693 float2 _cl_overloadable NAME(float2 , float ); \614 float2 _cl_overloadable NAME(float2 , float ); \
694 float3 _cl_overloadable NAME(float3 , float ); \615 float3 _cl_overloadable NAME(float3 , float ); \
@@ -724,12 +645,11 @@
724 int16 _cl_overloadable NAME(float16 , float16 ); \645 int16 _cl_overloadable NAME(float16 , float16 ); \
725 __IF_FP64( \646 __IF_FP64( \
726 int _cl_overloadable NAME(double , double ); \647 int _cl_overloadable NAME(double , double ); \
727 __IF_INT64( \
728 long2 _cl_overloadable NAME(double2 , double2 ); \648 long2 _cl_overloadable NAME(double2 , double2 ); \
729 long3 _cl_overloadable NAME(double3 , double3 ); \649 long3 _cl_overloadable NAME(double3 , double3 ); \
730 long4 _cl_overloadable NAME(double4 , double4 ); \650 long4 _cl_overloadable NAME(double4 , double4 ); \
731 long8 _cl_overloadable NAME(double8 , double8 ); \651 long8 _cl_overloadable NAME(double8 , double8 ); \
732 long16 _cl_overloadable NAME(double16, double16);))652 long16 _cl_overloadable NAME(double16, double16);)
733#define _CL_DECLARE_FUNC_V_VI(NAME) \653#define _CL_DECLARE_FUNC_V_VI(NAME) \
734 float2 _cl_overloadable NAME(float2 , int); \654 float2 _cl_overloadable NAME(float2 , int); \
735 float3 _cl_overloadable NAME(float3 , int); \655 float3 _cl_overloadable NAME(float3 , int); \
@@ -1572,13 +1492,6 @@
15721492
15731493
1574/* Miscellaneous Vector Functions */1494/* Miscellaneous Vector Functions */
15751495
1576// convert a vector type to a scalar type
1577_CL_DECLARE_FUNC_I_IG(_cl_scalar)
1578_CL_DECLARE_FUNC_S_V(_cl_scalar)
1579#define vec_step(a) (sizeof(a) / sizeof(_cl_scalar(a)))
1580
1581
1582
1583// This code leads to an ICE in Clang1496// This code leads to an ICE in Clang
15841497
1585// #define _CL_DECLARE_SHUFFLE_2(GTYPE, UGTYPE, STYPE, M) \1498// #define _CL_DECLARE_SHUFFLE_2(GTYPE, UGTYPE, STYPE, M) \
@@ -1693,3 +1606,7 @@
1693// _CL_DECLARE_SHUFFLE(double, ulong , double, 16)1606// _CL_DECLARE_SHUFFLE(double, ulong , double, 16)
16941607
1695// shuffle21608// shuffle2
1609
1610
16961611
1612/* printf */
1613// int printf(constant char * restrict format, ...);
16971614
=== modified file 'include/arm/types.h'
--- include/arm/types.h 2011-11-29 16:59:14 +0000
+++ include/arm/types.h 2011-12-04 22:04:24 +0000
@@ -1,12 +1,12 @@
1#define uchar unsigned char1typedef unsigned char uchar;
2#define ushort unsigned short2typedef unsigned short ushort;
3#define uint unsigned int3typedef unsigned int uint;
44
5#define __EMBEDDED_PROFILE__ 15#define __EMBEDDED_PROFILE__ 1
6#undef cles_khr_int646#undef cles_khr_int64
7#undef cl_khr_fp647#undef cl_khr_fp64
88
9#define size_t uint9typedef uint size_t;
10#define ptrdiff_t int10typedef int ptrdiff_t;
11#define intptr_t int11typedef int intptr_t;
12#define uintptr_t uint12typedef uint uintptr_t;
1313
=== modified file 'include/tce/types.h'
--- include/tce/types.h 2011-11-29 16:59:14 +0000
+++ include/tce/types.h 2011-12-04 22:04:24 +0000
@@ -1,12 +1,12 @@
1#define uchar unsigned char1typedef unsigned char uchar;
2#define ushort unsigned short2typedef unsigned short ushort;
3#define uint unsigned int3typedef unsigned int uint;
44
5#define __EMBEDDED_PROFILE__ 15#define __EMBEDDED_PROFILE__ 1
6#undef cles_khr_int646#undef cles_khr_int64
7#undef cl_khr_fp647#undef cl_khr_fp64
88
9#define size_t uint9typedef uint size_t;
10#define ptrdiff_t int10typedef int ptrdiff_t;
11#define intptr_t int11typedef int intptr_t;
12#define uintptr_t uint12typedef uint uintptr_t;
1313
=== modified file 'include/types.h'
--- include/types.h 2011-11-29 19:13:26 +0000
+++ include/types.h 2011-12-04 22:04:24 +0000
@@ -6,23 +6,23 @@
66
7#include "clconfig.h"7#include "clconfig.h"
88
9#define uchar unsigned char9typedef unsigned char uchar;
10#define ushort unsigned short10typedef unsigned short ushort;
11#define uint unsigned int11typedef unsigned int uint;
12#define ulong unsigned long12typedef unsigned long ulong;
1313
14#if SIZEOF_LONG == 814#if SIZEOF_LONG == 8
15#define cles_khr_int6415# define cles_khr_int64
16#if SIZEOF_DOUBLE == 816# if SIZEOF_DOUBLE == 8
17#define cl_khr_fp6417# define cl_khr_fp64
18#else18# else
19#undef cl_khr_fp6419# undef cl_khr_fp64
20#endif20# endif
21#else /* SIZEOF_LONG == 8 */21#else /* SIZEOF_LONG != 8 */
22#define __EMBEDDED_PROFILE__ 122# define __EMBEDDED_PROFILE__ 1
23#undef cles_khr_int6423# undef cles_khr_int64
24#undef cl_khr_fp6424# undef cl_khr_fp64
25#endif /* SIZEOF_LONG == 8 */25#endif /* SIZEOF_LONG != 8 */
2626
27#if SIZEOF_VOID_P == 827#if SIZEOF_VOID_P == 8
28typedef ulong size_t;28typedef ulong size_t;
2929
=== modified file 'include/x86_64/types.h'
--- include/x86_64/types.h 2011-11-29 16:59:14 +0000
+++ include/x86_64/types.h 2011-12-04 22:04:24 +0000
@@ -1,12 +1,12 @@
1#define uchar unsigned char1typedef unsigned char uchar;
2#define ushort unsigned short2typedef unsigned shor ushort;
3#define uint unsigned int3typedef unsigned int uint;
4#define ulong unsigned long4typedef unsigned long ulong;
55
6#define cles_khr_int646#define cles_khr_int64
7#define cl_khr_fp647#define cl_khr_fp64
88
9#define size_t ulong9typedef ulong size_t;
10#define ptrdiff_t long10typedef long ptrdiff_t;
11#define intptr_t long11typedef long intptr_t;
12#define uintptr_t ulong12typedef ulong uintptr_t;
1313
=== modified file 'lib/kernel/as_type.cl'
--- lib/kernel/as_type.cl 2011-11-24 15:56:10 +0000
+++ lib/kernel/as_type.cl 2011-12-04 22:04:24 +0000
@@ -22,7 +22,7 @@
22*/22*/
2323
24#define DEFINE_AS_TYPE(SRC, DST) \24#define DEFINE_AS_TYPE(SRC, DST) \
25 DST __attribute__ ((__overloadable__)) \25 DST __attribute__ ((__overloadable__)) \
26 as_##DST(SRC a) \26 as_##DST(SRC a) \
27 { \27 { \
28 return *(DST*)&a; \28 return *(DST*)&a; \
@@ -72,49 +72,19 @@
7272
73/* 8 bytes */73/* 8 bytes */
7474
75#if defined(cles_khr_int64) && defined(cl_khr_fp64)75#define DEFINE_AS_TYPE_8(DST) \
76#define DEFINE_AS_TYPE_8(DST) \76 DEFINE_AS_TYPE(DST, char8) \
77 DEFINE_AS_TYPE(DST, char8) \77 DEFINE_AS_TYPE(DST, uchar8) \
78 DEFINE_AS_TYPE(DST, uchar8) \78 DEFINE_AS_TYPE(DST, short4) \
79 DEFINE_AS_TYPE(DST, short4) \79 DEFINE_AS_TYPE(DST, ushort4) \
80 DEFINE_AS_TYPE(DST, ushort4) \80 DEFINE_AS_TYPE(DST, int2) \
81 DEFINE_AS_TYPE(DST, int2) \81 DEFINE_AS_TYPE(DST, uint2) \
82 DEFINE_AS_TYPE(DST, uint2) \82 __IF_INT64( \
83 DEFINE_AS_TYPE(DST, long) \83 DEFINE_AS_TYPE(DST, long) \
84 DEFINE_AS_TYPE(DST, ulong) \84 DEFINE_AS_TYPE(DST, ulong)) \
85 DEFINE_AS_TYPE(DST, float2) \85 DEFINE_AS_TYPE(DST, float2) \
86 DEFINE_AS_TYPE(DST, double)86 __IF_FP64( \
87#elif defined(cles_khr_int64)87 DEFINE_AS_TYPE(DST, double))
88#define DEFINE_AS_TYPE_8(DST) \
89 DEFINE_AS_TYPE(DST, char8) \
90 DEFINE_AS_TYPE(DST, uchar8) \
91 DEFINE_AS_TYPE(DST, short4) \
92 DEFINE_AS_TYPE(DST, ushort4) \
93 DEFINE_AS_TYPE(DST, int2) \
94 DEFINE_AS_TYPE(DST, uint2) \
95 DEFINE_AS_TYPE(DST, long) \
96 DEFINE_AS_TYPE(DST, ulong) \
97 DEFINE_AS_TYPE(DST, float2)
98#elif defined(cl_khr_fp64)
99#define DEFINE_AS_TYPE_8(DST) \
100 DEFINE_AS_TYPE(DST, char8) \
101 DEFINE_AS_TYPE(DST, uchar8) \
102 DEFINE_AS_TYPE(DST, short4) \
103 DEFINE_AS_TYPE(DST, ushort4) \
104 DEFINE_AS_TYPE(DST, int2) \
105 DEFINE_AS_TYPE(DST, uint2) \
106 DEFINE_AS_TYPE(DST, float2) \
107 DEFINE_AS_TYPE(DST, double)
108#else
109#define DEFINE_AS_TYPE_8(DST) \
110 DEFINE_AS_TYPE(DST, char8) \
111 DEFINE_AS_TYPE(DST, uchar8) \
112 DEFINE_AS_TYPE(DST, short4) \
113 DEFINE_AS_TYPE(DST, ushort4) \
114 DEFINE_AS_TYPE(DST, int2) \
115 DEFINE_AS_TYPE(DST, uint2) \
116 DEFINE_AS_TYPE(DST, float2)
117#endif
11888
119DEFINE_AS_TYPE_8(char8)89DEFINE_AS_TYPE_8(char8)
120DEFINE_AS_TYPE_8(uchar8)90DEFINE_AS_TYPE_8(uchar8)
@@ -122,60 +92,28 @@
122DEFINE_AS_TYPE_8(ushort4)92DEFINE_AS_TYPE_8(ushort4)
123DEFINE_AS_TYPE_8(int2)93DEFINE_AS_TYPE_8(int2)
124DEFINE_AS_TYPE_8(uint2)94DEFINE_AS_TYPE_8(uint2)
125#ifdef cles_khr_int6495__IF_INT64(
126DEFINE_AS_TYPE_8(long)96DEFINE_AS_TYPE_8(long)
127DEFINE_AS_TYPE_8(ulong)97DEFINE_AS_TYPE_8(ulong))
128#endif
129DEFINE_AS_TYPE_8(float2)98DEFINE_AS_TYPE_8(float2)
130#ifdef cl_khr_fp6499__IF_FP64(
131DEFINE_AS_TYPE_8(double)100DEFINE_AS_TYPE_8(double))
132#endif
133101
134/* 16 bytes */102/* 16 bytes */
135103
136#if defined(cles_khr_int64) && defined(cl_khr_fp64)104#define DEFINE_AS_TYPE_16(DST) \
137#define DEFINE_AS_TYPE_16(DST) \105 DEFINE_AS_TYPE(DST, char16) \
138 DEFINE_AS_TYPE(DST, char16) \106 DEFINE_AS_TYPE(DST, uchar16) \
139 DEFINE_AS_TYPE(DST, uchar16) \107 DEFINE_AS_TYPE(DST, short8) \
140 DEFINE_AS_TYPE(DST, short8) \108 DEFINE_AS_TYPE(DST, ushort8) \
141 DEFINE_AS_TYPE(DST, ushort8) \109 DEFINE_AS_TYPE(DST, int4) \
142 DEFINE_AS_TYPE(DST, int4) \110 DEFINE_AS_TYPE(DST, uint4) \
143 DEFINE_AS_TYPE(DST, uint4) \111 __IF_INT64( \
144 DEFINE_AS_TYPE(DST, long2) \112 DEFINE_AS_TYPE(DST, long2) \
145 DEFINE_AS_TYPE(DST, ulong2) \113 DEFINE_AS_TYPE(DST, ulong2)) \
146 DEFINE_AS_TYPE(DST, float4) \114 DEFINE_AS_TYPE(DST, float4) \
147 DEFINE_AS_TYPE(DST, double2)115 __IF_FP64( \
148#elif defined(cles_khr_int64)116 DEFINE_AS_TYPE(DST, double2))
149#define DEFINE_AS_TYPE_16(DST) \
150 DEFINE_AS_TYPE(DST, char16) \
151 DEFINE_AS_TYPE(DST, uchar16) \
152 DEFINE_AS_TYPE(DST, short8) \
153 DEFINE_AS_TYPE(DST, ushort8) \
154 DEFINE_AS_TYPE(DST, int4) \
155 DEFINE_AS_TYPE(DST, uint4) \
156 DEFINE_AS_TYPE(DST, long2) \
157 DEFINE_AS_TYPE(DST, ulong2) \
158 DEFINE_AS_TYPE(DST, float4)
159#elif defined(cl_khr_fp64)
160#define DEFINE_AS_TYPE_16(DST) \
161 DEFINE_AS_TYPE(DST, char16) \
162 DEFINE_AS_TYPE(DST, uchar16) \
163 DEFINE_AS_TYPE(DST, short8) \
164 DEFINE_AS_TYPE(DST, ushort8) \
165 DEFINE_AS_TYPE(DST, int4) \
166 DEFINE_AS_TYPE(DST, uint4) \
167 DEFINE_AS_TYPE(DST, float4) \
168 DEFINE_AS_TYPE(DST, double2)
169#else
170#define DEFINE_AS_TYPE_16(DST) \
171 DEFINE_AS_TYPE(DST, char16) \
172 DEFINE_AS_TYPE(DST, uchar16) \
173 DEFINE_AS_TYPE(DST, short8) \
174 DEFINE_AS_TYPE(DST, ushort8) \
175 DEFINE_AS_TYPE(DST, int4) \
176 DEFINE_AS_TYPE(DST, uint4) \
177 DEFINE_AS_TYPE(DST, float4)
178#endif
179117
180DEFINE_AS_TYPE_16(char16)118DEFINE_AS_TYPE_16(char16)
181DEFINE_AS_TYPE_16(uchar16)119DEFINE_AS_TYPE_16(uchar16)
@@ -183,127 +121,70 @@
183DEFINE_AS_TYPE_16(ushort8)121DEFINE_AS_TYPE_16(ushort8)
184DEFINE_AS_TYPE_16(int4)122DEFINE_AS_TYPE_16(int4)
185DEFINE_AS_TYPE_16(uint4)123DEFINE_AS_TYPE_16(uint4)
186#ifdef cles_khr_int64124__IF_INT64(
187DEFINE_AS_TYPE_16(long2)125DEFINE_AS_TYPE_16(long2)
188DEFINE_AS_TYPE_16(ulong2)126DEFINE_AS_TYPE_16(ulong2))
189#endif
190DEFINE_AS_TYPE_16(float4)127DEFINE_AS_TYPE_16(float4)
191#ifdef cl_khr_fp64128__IF_FP64(
192DEFINE_AS_TYPE_16(double2)129DEFINE_AS_TYPE_16(double2))
193#endif
194130
195/* 32 bytes */131/* 32 bytes */
196132
197#if defined(cles_khr_int64) && defined(cl_khr_fp64)133#define DEFINE_AS_TYPE_32(DST) \
198#define DEFINE_AS_TYPE_32(DST) \134 DEFINE_AS_TYPE(DST, short16) \
199 DEFINE_AS_TYPE(DST, short16) \135 DEFINE_AS_TYPE(DST, ushort16) \
200 DEFINE_AS_TYPE(DST, ushort16) \136 DEFINE_AS_TYPE(DST, int8) \
201 DEFINE_AS_TYPE(DST, int8) \137 DEFINE_AS_TYPE(DST, uint8) \
202 DEFINE_AS_TYPE(DST, uint8) \138 __IF_INT64( \
203 DEFINE_AS_TYPE(DST, long4) \139 DEFINE_AS_TYPE(DST, long4) \
204 DEFINE_AS_TYPE(DST, ulong4) \140 DEFINE_AS_TYPE(DST, ulong4)) \
205 DEFINE_AS_TYPE(DST, float8) \141 DEFINE_AS_TYPE(DST, float8) \
206 DEFINE_AS_TYPE(DST, double4)142 __IF_FP64( \
207#elif defined(cles_khr_int64)143 DEFINE_AS_TYPE(DST, double4))
208#define DEFINE_AS_TYPE_32(DST) \
209 DEFINE_AS_TYPE(DST, short16) \
210 DEFINE_AS_TYPE(DST, ushort16) \
211 DEFINE_AS_TYPE(DST, int8) \
212 DEFINE_AS_TYPE(DST, uint8) \
213 DEFINE_AS_TYPE(DST, long4) \
214 DEFINE_AS_TYPE(DST, ulong4) \
215 DEFINE_AS_TYPE(DST, float8)
216#elif defined(cl_khr_fp64)
217#define DEFINE_AS_TYPE_32(DST) \
218 DEFINE_AS_TYPE(DST, short16) \
219 DEFINE_AS_TYPE(DST, ushort16) \
220 DEFINE_AS_TYPE(DST, int8) \
221 DEFINE_AS_TYPE(DST, uint8) \
222 DEFINE_AS_TYPE(DST, float8) \
223 DEFINE_AS_TYPE(DST, double4)
224#else
225#define DEFINE_AS_TYPE_32(DST) \
226 DEFINE_AS_TYPE(DST, short16) \
227 DEFINE_AS_TYPE(DST, ushort16) \
228 DEFINE_AS_TYPE(DST, int8) \
229 DEFINE_AS_TYPE(DST, uint8) \
230 DEFINE_AS_TYPE(DST, float8)
231#endif
232144
233DEFINE_AS_TYPE_32(short16)145DEFINE_AS_TYPE_32(short16)
234DEFINE_AS_TYPE_32(ushort16)146DEFINE_AS_TYPE_32(ushort16)
235DEFINE_AS_TYPE_32(int8)147DEFINE_AS_TYPE_32(int8)
236DEFINE_AS_TYPE_32(uint8)148DEFINE_AS_TYPE_32(uint8)
237#ifdef cles_khr_int64149__IF_INT64(
238DEFINE_AS_TYPE_32(long4)150DEFINE_AS_TYPE_32(long4)
239DEFINE_AS_TYPE_32(ulong4)151DEFINE_AS_TYPE_32(ulong4))
240#endif
241DEFINE_AS_TYPE_32(float8)152DEFINE_AS_TYPE_32(float8)
242#ifdef cl_khr_fp64153__IF_FP64(
243DEFINE_AS_TYPE_32(double4)154DEFINE_AS_TYPE_32(double4))
244#endif
245155
246/* 64 bytes */156/* 64 bytes */
247157
248#if defined(cles_khr_int64) && defined(cl_khr_fp64)158#define DEFINE_AS_TYPE_64(DST) \
249#define DEFINE_AS_TYPE_64(DST) \159 DEFINE_AS_TYPE(DST, int16) \
250 DEFINE_AS_TYPE(DST, int16) \160 DEFINE_AS_TYPE(DST, uint16) \
251 DEFINE_AS_TYPE(DST, uint16) \161 __IF_INT64( \
252 DEFINE_AS_TYPE(DST, long8) \162 DEFINE_AS_TYPE(DST, long8) \
253 DEFINE_AS_TYPE(DST, ulong8) \163 DEFINE_AS_TYPE(DST, ulong8)) \
254 DEFINE_AS_TYPE(DST, float16) \164 DEFINE_AS_TYPE(DST, float16) \
255 DEFINE_AS_TYPE(DST, double8)165 __IF_FP64( \
256#elif defined(cles_khr_int64)166 DEFINE_AS_TYPE(DST, double8))
257#define DEFINE_AS_TYPE_64(DST) \
258 DEFINE_AS_TYPE(DST, int16) \
259 DEFINE_AS_TYPE(DST, uint16) \
260 DEFINE_AS_TYPE(DST, long8) \
261 DEFINE_AS_TYPE(DST, ulong8) \
262 DEFINE_AS_TYPE(DST, float16)
263#elif defined(cl_khr_fp64)
264#define DEFINE_AS_TYPE_64(DST) \
265 DEFINE_AS_TYPE(DST, int16) \
266 DEFINE_AS_TYPE(DST, uint16) \
267 DEFINE_AS_TYPE(DST, float16) \
268 DEFINE_AS_TYPE(DST, double8)
269#else
270#define DEFINE_AS_TYPE_64(DST) \
271 DEFINE_AS_TYPE(DST, int16) \
272 DEFINE_AS_TYPE(DST, uint16) \
273 DEFINE_AS_TYPE(DST, float16)
274#endif
275167
276DEFINE_AS_TYPE_64(int16)168DEFINE_AS_TYPE_64(int16)
277DEFINE_AS_TYPE_64(uint16)169DEFINE_AS_TYPE_64(uint16)
278#ifdef cles_khr_int64170__IF_INT64(
279DEFINE_AS_TYPE_64(long8)171DEFINE_AS_TYPE_64(long8)
280DEFINE_AS_TYPE_64(ulong8)172DEFINE_AS_TYPE_64(ulong8))
281#endif
282DEFINE_AS_TYPE_64(float16)173DEFINE_AS_TYPE_64(float16)
283#ifdef cl_khr_fp64174__IF_FP64(
284DEFINE_AS_TYPE_64(double8)175DEFINE_AS_TYPE_64(double8))
285#endif
286176
287/* 128 bytes */177/* 128 bytes */
288178
289#if defined(cles_khr_int64) && defined(cl_khr_fp64)179#define DEFINE_AS_TYPE_128(DST) \
290#define DEFINE_AS_TYPE_128(DST) \180 __IF_INT64( \
291 DEFINE_AS_TYPE(DST, long16) \181 DEFINE_AS_TYPE(DST, long16) \
292 DEFINE_AS_TYPE(DST, ulong16) \182 DEFINE_AS_TYPE(DST, ulong16)) \
293 DEFINE_AS_TYPE(DST, double16)183 __IF_FP64( \
294#elif defined(cles_khr_int64)184 DEFINE_AS_TYPE(DST, double16))
295#define DEFINE_AS_TYPE_128(DST) \
296 DEFINE_AS_TYPE(DST, long16) \
297 DEFINE_AS_TYPE(DST, ulong16)
298#elif defined(cl_khr_fp64)
299#define DEFINE_AS_TYPE_128(DST) \
300 DEFINE_AS_TYPE(DST, double16)
301#endif
302185
303#ifdef cles_khr_int64186__IF_INT64(
304DEFINE_AS_TYPE_128(long16)187DEFINE_AS_TYPE_128(long16)
305DEFINE_AS_TYPE_128(ulong16)188DEFINE_AS_TYPE_128(ulong16))
306#endif189__IF_FP64(
307#ifdef cl_khr_fp64190DEFINE_AS_TYPE_128(double16))
308DEFINE_AS_TYPE_128(double16)
309#endif
310191
=== modified file 'lib/kernel/convert_type.cl'
--- lib/kernel/convert_type.cl 2011-11-24 15:56:10 +0000
+++ lib/kernel/convert_type.cl 2011-12-04 22:04:24 +0000
@@ -23,374 +23,132 @@
2323
24#include "templates.h"24#include "templates.h"
2525
26/* SRC and DST must be scalars */
26#define DEFINE_CONVERT_TYPE(SRC, DST) \27#define DEFINE_CONVERT_TYPE(SRC, DST) \
27 DST __attribute__ ((__overloadable__)) convert_##DST(SRC a) \28 DST __attribute__ ((__overloadable__)) convert_##DST(SRC a) \
28 { \29 { \
29 return (DST)a; \30 return (DST)a; \
30 }31 }
3132
33/* implementing vector SRC and DST in terms of scalars */
32#define DEFINE_CONVERT_TYPE_HALF(SRC, DST, HALFDST) \34#define DEFINE_CONVERT_TYPE_HALF(SRC, DST, HALFDST) \
33 DST __attribute__ ((__overloadable__)) convert_##DST(SRC a) \35 DST __attribute__ ((__overloadable__)) convert_##DST(SRC a) \
34 { \36 { \
35 return (DST)(convert_##HALFDST(a.lo), convert_##HALFDST(a.hi)); \37 return (DST)(convert_##HALFDST(a.lo), convert_##HALFDST(a.hi)); \
36 }38 }
3739
38#define DEFINE_CONVERT_TYPE_012(SRC, DST, DST01, DST2) \40#define DEFINE_CONVERT_TYPE_012(SRC, DST, DST01, DST2) \
39 DST __attribute__ ((__overloadable__)) convert_##DST(SRC a) \41 DST __attribute__ ((__overloadable__)) convert_##DST(SRC a) \
40 { \42 { \
41 return (DST)(convert_##DST01(a.s01), convert_##DST2(a.s2)); \43 return (DST)(convert_##DST01(a.s01), convert_##DST2(a.s2)); \
42 }44 }
4345
44/* 1 element */46/* SRC and DST may be vectors */
45#if defined(cles_khr_int64) && defined(cl_khr_fp64)47#define DEFINE_CONVERT_TYPE_SAT(SRC, DST, SIZE) \
46#define DEFINE_CONVERT_TYPE_1(SRC) \48 DST##SIZE __attribute__ ((__overloadable__)) \
47 DEFINE_CONVERT_TYPE(SRC, char ) \49 convert_##DST##SIZE##_sat(SRC##SIZE a) \
48 DEFINE_CONVERT_TYPE(SRC, uchar ) \50 { \
49 DEFINE_CONVERT_TYPE(SRC, short ) \51 int const src_float = (SRC)0.1f > (SRC)0; \
50 DEFINE_CONVERT_TYPE(SRC, ushort) \52 int const src_unsigned = -(SRC)1 > (SRC)0; \
51 DEFINE_CONVERT_TYPE(SRC, int ) \53 int const dst_unsigned = -(DST)1 > (DST)0; \
52 DEFINE_CONVERT_TYPE(SRC, uint ) \54 int const src_size = sizeof(SRC); \
53 DEFINE_CONVERT_TYPE(SRC, long ) \55 int const dst_size = sizeof(DST); \
54 DEFINE_CONVERT_TYPE(SRC, ulong ) \56 if (src_float) { \
55 DEFINE_CONVERT_TYPE(SRC, float ) \57 if (dst_unsigned) { \
56 DEFINE_CONVERT_TYPE(SRC, double)58 DST const DST_MAX = (DST)0 - (DST)1; \
57#elif defined(cles_khr_int64)59 return (convert_##DST##SIZE(a > (SRC)DST_MAX) ? (DST##SIZE)DST_MAX : \
58#define DEFINE_CONVERT_TYPE_1(SRC) \60 convert_##DST##SIZE(a)); \
59 DEFINE_CONVERT_TYPE(SRC, char ) \61 } else { /* dst is signed */ \
60 DEFINE_CONVERT_TYPE(SRC, uchar ) \62 DST const DST_MIN = (DST)1 << (DST)(CHAR_BIT * dst_size - 1); \
61 DEFINE_CONVERT_TYPE(SRC, short ) \63 DST const DST_MAX = DST_MIN - (DST)1; \
62 DEFINE_CONVERT_TYPE(SRC, ushort) \64 return (convert_##DST##SIZE(a < (SRC)DST_MIN) ? (DST##SIZE)DST_MIN : \
63 DEFINE_CONVERT_TYPE(SRC, int ) \65 convert_##DST##SIZE(a > (SRC)DST_MAX) ? (DST##SIZE)DST_MAX : \
64 DEFINE_CONVERT_TYPE(SRC, uint ) \66 convert_##DST##SIZE(a)); \
65 DEFINE_CONVERT_TYPE(SRC, long ) \67 } \
66 DEFINE_CONVERT_TYPE(SRC, ulong ) \68 } else if (src_unsigned) { \
67 DEFINE_CONVERT_TYPE(SRC, float )69 if (dst_unsigned) { \
68#elif defined(cl_khr_fp64)70 if (dst_size >= src_size) return convert_##DST##SIZE(a); \
69#define DEFINE_CONVERT_TYPE_1(SRC) \71 DST const DST_MAX = (DST)0 - (DST)1; \
70 DEFINE_CONVERT_TYPE(SRC, char ) \72 return (convert_##DST##SIZE(a > (SRC)DST_MAX) ? (DST##SIZE)DST_MAX : \
71 DEFINE_CONVERT_TYPE(SRC, uchar ) \73 convert_##DST##SIZE(a)); \
72 DEFINE_CONVERT_TYPE(SRC, short ) \74 } else { /* dst is signed */ \
73 DEFINE_CONVERT_TYPE(SRC, ushort) \75 if (dst_size > src_size) return convert_##DST##SIZE(a); \
74 DEFINE_CONVERT_TYPE(SRC, int ) \76 DST const DST_MAX = (DST)1 << (DST)(CHAR_BIT * dst_size); \
75 DEFINE_CONVERT_TYPE(SRC, uint ) \77 return (convert_##DST##SIZE(a > (SRC)DST_MAX) ? (DST##SIZE)DST_MAX : \
76 DEFINE_CONVERT_TYPE(SRC, float ) \78 convert_##DST##SIZE(a)); \
77 DEFINE_CONVERT_TYPE(SRC, double)79 } \
78#else80 } else { /* src is signed */ \
79#define DEFINE_CONVERT_TYPE_1(SRC) \81 if (dst_unsigned) { \
80 DEFINE_CONVERT_TYPE(SRC, char ) \82 if (dst_size >= src_size) { \
81 DEFINE_CONVERT_TYPE(SRC, uchar ) \83 return (convert_##DST##SIZE(a < (SRC)0) ? (DST##SIZE)0 : \
82 DEFINE_CONVERT_TYPE(SRC, short ) \84 convert_##DST##SIZE(a)); \
83 DEFINE_CONVERT_TYPE(SRC, ushort) \85 } \
84 DEFINE_CONVERT_TYPE(SRC, int ) \86 DST const DST_MAX = (DST)0 - (DST)1; \
85 DEFINE_CONVERT_TYPE(SRC, uint ) \87 return (convert_##DST##SIZE(a < (SRC)0 ) ? (DST##SIZE)0 : \
86 DEFINE_CONVERT_TYPE(SRC, float )88 convert_##DST##SIZE(a > (SRC)DST_MAX) ? (DST##SIZE)DST_MAX : \
87#endif89 convert_##DST##SIZE(a)); \
88DEFINE_CONVERT_TYPE_1(char )90 } else { /* dst is signed */ \
89DEFINE_CONVERT_TYPE_1(uchar )91 if (dst_size >= src_size) return convert_##DST##SIZE(a); \
90DEFINE_CONVERT_TYPE_1(short )92 DST const DST_MIN = (DST)1 << (DST)(CHAR_BIT * dst_size - 1); \
91DEFINE_CONVERT_TYPE_1(ushort)93 DST const DST_MAX = DST_MIN - (DST)1; \
92DEFINE_CONVERT_TYPE_1(int )94 return (convert_##DST##SIZE(a < (SRC)DST_MIN) ? (DST##SIZE)DST_MIN : \
93DEFINE_CONVERT_TYPE_1(uint )95 convert_##DST##SIZE(a > (SRC)DST_MAX) ? (DST##SIZE)DST_MAX : \
94#ifdef cles_khr_int6496 convert_##DST##SIZE(a)); \
95DEFINE_CONVERT_TYPE_1(long )97 } \
96DEFINE_CONVERT_TYPE_1(ulong )98 } \
97#endif99 }
98DEFINE_CONVERT_TYPE_1(float )100
99#ifdef cl_khr_fp64101
100DEFINE_CONVERT_TYPE_1(double)102
101#endif103#define DEFINE_CONVERT_TYPE_ALL(SRC, DST) \
102104 DEFINE_CONVERT_TYPE (SRC , DST ) \
103/* 2 elements */105 DEFINE_CONVERT_TYPE_HALF(SRC##2 , DST##2 , DST) \
104#if defined(cles_khr_int64) && defined(cl_khr_fp64)106 DEFINE_CONVERT_TYPE_012 (SRC##3 , DST##3 , DST##2, DST) \
105#define DEFINE_CONVERT_TYPE_2(SRC) \107 DEFINE_CONVERT_TYPE_HALF(SRC##4 , DST##4 , DST##2) \
106 DEFINE_CONVERT_TYPE_HALF(SRC, char2 , char ) \108 DEFINE_CONVERT_TYPE_HALF(SRC##8 , DST##8 , DST##4) \
107 DEFINE_CONVERT_TYPE_HALF(SRC, uchar2 , uchar ) \109 DEFINE_CONVERT_TYPE_HALF(SRC##16, DST##16, DST##8)
108 DEFINE_CONVERT_TYPE_HALF(SRC, short2 , short ) \110
109 DEFINE_CONVERT_TYPE_HALF(SRC, ushort2, ushort) \111#define DEFINE_CONVERT_TYPE_SAT_ALL(SRC, DST) \
110 DEFINE_CONVERT_TYPE_HALF(SRC, int2 , int ) \112 DEFINE_CONVERT_TYPE_SAT(SRC, DST, ) \
111 DEFINE_CONVERT_TYPE_HALF(SRC, uint2 , uint ) \113 DEFINE_CONVERT_TYPE_SAT(SRC, DST, 2) \
112 DEFINE_CONVERT_TYPE_HALF(SRC, long2 , long ) \114 DEFINE_CONVERT_TYPE_SAT(SRC, DST, 3) \
113 DEFINE_CONVERT_TYPE_HALF(SRC, ulong2 , ulong ) \115 DEFINE_CONVERT_TYPE_SAT(SRC, DST, 4) \
114 DEFINE_CONVERT_TYPE_HALF(SRC, float2 , float ) \116 DEFINE_CONVERT_TYPE_SAT(SRC, DST, 8) \
115 DEFINE_CONVERT_TYPE_HALF(SRC, double2, double)117 DEFINE_CONVERT_TYPE_SAT(SRC, DST, 16)
116#elif defined(cles_khr_int64)118
117#define DEFINE_CONVERT_TYPE_2(SRC) \119
118 DEFINE_CONVERT_TYPE_HALF(SRC, char2 , char ) \120
119 DEFINE_CONVERT_TYPE_HALF(SRC, uchar2 , uchar ) \121#define DEFINE_CONVERT_TYPE_ALL_DST(SRC) \
120 DEFINE_CONVERT_TYPE_HALF(SRC, short2 , short ) \122 DEFINE_CONVERT_TYPE_ALL (SRC, uchar ) \
121 DEFINE_CONVERT_TYPE_HALF(SRC, ushort2, ushort) \123 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, uchar ) \
122 DEFINE_CONVERT_TYPE_HALF(SRC, int2 , int ) \124 DEFINE_CONVERT_TYPE_ALL (SRC, char ) \
123 DEFINE_CONVERT_TYPE_HALF(SRC, uint2 , uint ) \125 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, char ) \
124 DEFINE_CONVERT_TYPE_HALF(SRC, long2 , long ) \126 DEFINE_CONVERT_TYPE_ALL (SRC, ushort) \
125 DEFINE_CONVERT_TYPE_HALF(SRC, ulong2 , ulong ) \127 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, ushort) \
126 DEFINE_CONVERT_TYPE_HALF(SRC, float2 , float )128 DEFINE_CONVERT_TYPE_ALL (SRC, short ) \
127#elif defined(cl_khr_fp64)129 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, short ) \
128#define DEFINE_CONVERT_TYPE_2(SRC) \130 DEFINE_CONVERT_TYPE_ALL (SRC, uint ) \
129 DEFINE_CONVERT_TYPE_HALF(SRC, char2 , char ) \131 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, uint ) \
130 DEFINE_CONVERT_TYPE_HALF(SRC, uchar2 , uchar ) \132 DEFINE_CONVERT_TYPE_ALL (SRC, int ) \
131 DEFINE_CONVERT_TYPE_HALF(SRC, short2 , short ) \133 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, int ) \
132 DEFINE_CONVERT_TYPE_HALF(SRC, ushort2, ushort) \134 __IF_INT64( \
133 DEFINE_CONVERT_TYPE_HALF(SRC, int2 , int ) \135 DEFINE_CONVERT_TYPE_ALL (SRC, ulong ) \
134 DEFINE_CONVERT_TYPE_HALF(SRC, uint2 , uint ) \136 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, ulong ) \
135 DEFINE_CONVERT_TYPE_HALF(SRC, float2 , float ) \137 DEFINE_CONVERT_TYPE_ALL (SRC, long ) \
136 DEFINE_CONVERT_TYPE_HALF(SRC, double2, double)138 DEFINE_CONVERT_TYPE_SAT_ALL(SRC, long )) \
137#else139 DEFINE_CONVERT_TYPE_ALL (SRC, float ) \
138#define DEFINE_CONVERT_TYPE_2(SRC) \140 __IF_FP64( \
139 DEFINE_CONVERT_TYPE_HALF(SRC, char2 , char ) \141 DEFINE_CONVERT_TYPE_ALL (SRC, double))
140 DEFINE_CONVERT_TYPE_HALF(SRC, uchar2 , uchar ) \142
141 DEFINE_CONVERT_TYPE_HALF(SRC, short2 , short ) \143DEFINE_CONVERT_TYPE_ALL_DST(uchar )
142 DEFINE_CONVERT_TYPE_HALF(SRC, ushort2, ushort) \144DEFINE_CONVERT_TYPE_ALL_DST(char )
143 DEFINE_CONVERT_TYPE_HALF(SRC, int2 , int ) \145DEFINE_CONVERT_TYPE_ALL_DST(ushort)
144 DEFINE_CONVERT_TYPE_HALF(SRC, uint2 , uint ) \146DEFINE_CONVERT_TYPE_ALL_DST(short )
145 DEFINE_CONVERT_TYPE_HALF(SRC, float2 , float )147DEFINE_CONVERT_TYPE_ALL_DST(uint )
146#endif148DEFINE_CONVERT_TYPE_ALL_DST(int )
147DEFINE_CONVERT_TYPE_2(char2 )149__IF_INT64(
148DEFINE_CONVERT_TYPE_2(uchar2 )150DEFINE_CONVERT_TYPE_ALL_DST(ulong )
149DEFINE_CONVERT_TYPE_2(short2 )151DEFINE_CONVERT_TYPE_ALL_DST(long ))
150DEFINE_CONVERT_TYPE_2(ushort2)152DEFINE_CONVERT_TYPE_ALL_DST(float )
151DEFINE_CONVERT_TYPE_2(int2 )153__IF_FP64(
152DEFINE_CONVERT_TYPE_2(uint2 )154DEFINE_CONVERT_TYPE_ALL_DST(double))
153#ifdef cl_kht_int64
154DEFINE_CONVERT_TYPE_2(long2 )
155DEFINE_CONVERT_TYPE_2(ulong2 )
156#endif
157DEFINE_CONVERT_TYPE_2(float2 )
158#ifdef cl_khr_fp64
159DEFINE_CONVERT_TYPE_2(double2)
160#endif
161
162/* 3 elements */
163#if defined(cles_khr_int64) && defined(cl_khr_fp64)
164#define DEFINE_CONVERT_TYPE_3(SRC) \
165 DEFINE_CONVERT_TYPE_012(SRC, char3 , char2 , char ) \
166 DEFINE_CONVERT_TYPE_012(SRC, uchar3 , uchar2 , uchar ) \
167 DEFINE_CONVERT_TYPE_012(SRC, short3 , short2 , short ) \
168 DEFINE_CONVERT_TYPE_012(SRC, ushort3, ushort2, ushort) \
169 DEFINE_CONVERT_TYPE_012(SRC, int3 , int2 , int ) \
170 DEFINE_CONVERT_TYPE_012(SRC, uint3 , uint2 , uint ) \
171 DEFINE_CONVERT_TYPE_012(SRC, long3 , long2 , long ) \
172 DEFINE_CONVERT_TYPE_012(SRC, ulong3 , ulong2 , ulong ) \
173 DEFINE_CONVERT_TYPE_012(SRC, float3 , float2 , float ) \
174 DEFINE_CONVERT_TYPE_012(SRC, double3, double2, double)
175#elif defined(cles_khr_int64)
176#define DEFINE_CONVERT_TYPE_3(SRC) \
177 DEFINE_CONVERT_TYPE_012(SRC, char3 , char2 , char ) \
178 DEFINE_CONVERT_TYPE_012(SRC, uchar3 , uchar2 , uchar ) \
179 DEFINE_CONVERT_TYPE_012(SRC, short3 , short2 , short ) \
180 DEFINE_CONVERT_TYPE_012(SRC, ushort3, ushort2, ushort) \
181 DEFINE_CONVERT_TYPE_012(SRC, int3 , int2 , int ) \
182 DEFINE_CONVERT_TYPE_012(SRC, uint3 , uint2 , uint ) \
183 DEFINE_CONVERT_TYPE_012(SRC, long3 , long2 , long ) \
184 DEFINE_CONVERT_TYPE_012(SRC, ulong3 , ulong2 , ulong ) \
185 DEFINE_CONVERT_TYPE_012(SRC, float3 , float2 , float )
186#elif defined(cl_khr_fp64)
187#define DEFINE_CONVERT_TYPE_3(SRC) \
188 DEFINE_CONVERT_TYPE_012(SRC, char3 , char2 , char ) \
189 DEFINE_CONVERT_TYPE_012(SRC, uchar3 , uchar2 , uchar ) \
190 DEFINE_CONVERT_TYPE_012(SRC, short3 , short2 , short ) \
191 DEFINE_CONVERT_TYPE_012(SRC, ushort3, ushort2, ushort) \
192 DEFINE_CONVERT_TYPE_012(SRC, int3 , int2 , int ) \
193 DEFINE_CONVERT_TYPE_012(SRC, uint3 , uint2 , uint ) \
194 DEFINE_CONVERT_TYPE_012(SRC, float3 , float2 , float ) \
195 DEFINE_CONVERT_TYPE_012(SRC, double3, double2, double)
196#else
197#define DEFINE_CONVERT_TYPE_3(SRC) \
198 DEFINE_CONVERT_TYPE_012(SRC, char3 , char2 , char ) \
199 DEFINE_CONVERT_TYPE_012(SRC, uchar3 , uchar2 , uchar ) \
200 DEFINE_CONVERT_TYPE_012(SRC, short3 , short2 , short ) \
201 DEFINE_CONVERT_TYPE_012(SRC, ushort3, ushort2, ushort) \
202 DEFINE_CONVERT_TYPE_012(SRC, int3 , int2 , int ) \
203 DEFINE_CONVERT_TYPE_012(SRC, uint3 , uint2 , uint ) \
204 DEFINE_CONVERT_TYPE_012(SRC, float3 , float2 , float )
205#endif
206DEFINE_CONVERT_TYPE_3(char3 )
207DEFINE_CONVERT_TYPE_3(uchar3 )
208DEFINE_CONVERT_TYPE_3(short3 )
209DEFINE_CONVERT_TYPE_3(ushort3)
210DEFINE_CONVERT_TYPE_3(int3 )
211DEFINE_CONVERT_TYPE_3(uint3 )
212#ifdef cl_kht_int64
213DEFINE_CONVERT_TYPE_3(long3 )
214DEFINE_CONVERT_TYPE_3(ulong3 )
215#endif
216DEFINE_CONVERT_TYPE_3(float3 )
217#ifdef cl_khr_fp64
218DEFINE_CONVERT_TYPE_3(double3)
219#endif
220
221/* 4 elements */
222#if defined(cles_khr_int64) && defined(cl_khr_fp64)
223#define DEFINE_CONVERT_TYPE_4(SRC) \
224 DEFINE_CONVERT_TYPE_HALF(SRC, char4 , char2 ) \
225 DEFINE_CONVERT_TYPE_HALF(SRC, uchar4 , uchar2 ) \
226 DEFINE_CONVERT_TYPE_HALF(SRC, short4 , short2 ) \
227 DEFINE_CONVERT_TYPE_HALF(SRC, ushort4, ushort2) \
228 DEFINE_CONVERT_TYPE_HALF(SRC, int4 , int2 ) \
229 DEFINE_CONVERT_TYPE_HALF(SRC, uint4 , uint2 ) \
230 DEFINE_CONVERT_TYPE_HALF(SRC, long4 , long2 ) \
231 DEFINE_CONVERT_TYPE_HALF(SRC, ulong4 , ulong2 ) \
232 DEFINE_CONVERT_TYPE_HALF(SRC, float4 , float2 ) \
233 DEFINE_CONVERT_TYPE_HALF(SRC, double4, double2)
234#elif defined(cles_khr_int64)
235#define DEFINE_CONVERT_TYPE_4(SRC) \
236 DEFINE_CONVERT_TYPE_HALF(SRC, char4 , char2 ) \
237 DEFINE_CONVERT_TYPE_HALF(SRC, uchar4 , uchar2 ) \
238 DEFINE_CONVERT_TYPE_HALF(SRC, short4 , short2 ) \
239 DEFINE_CONVERT_TYPE_HALF(SRC, ushort4, ushort2) \
240 DEFINE_CONVERT_TYPE_HALF(SRC, int4 , int2 ) \
241 DEFINE_CONVERT_TYPE_HALF(SRC, uint4 , uint2 ) \
242 DEFINE_CONVERT_TYPE_HALF(SRC, long4 , long2 ) \
243 DEFINE_CONVERT_TYPE_HALF(SRC, ulong4 , ulong2 ) \
244 DEFINE_CONVERT_TYPE_HALF(SRC, float4 , float2 )
245#elif defined(cl_khr_fp64)
246#define DEFINE_CONVERT_TYPE_4(SRC) \
247 DEFINE_CONVERT_TYPE_HALF(SRC, char4 , char2 ) \
248 DEFINE_CONVERT_TYPE_HALF(SRC, uchar4 , uchar2 ) \
249 DEFINE_CONVERT_TYPE_HALF(SRC, short4 , short2 ) \
250 DEFINE_CONVERT_TYPE_HALF(SRC, ushort4, ushort2) \
251 DEFINE_CONVERT_TYPE_HALF(SRC, int4 , int2 ) \
252 DEFINE_CONVERT_TYPE_HALF(SRC, uint4 , uint2 ) \
253 DEFINE_CONVERT_TYPE_HALF(SRC, float4 , float2 ) \
254 DEFINE_CONVERT_TYPE_HALF(SRC, double4, double2)
255#else
256#define DEFINE_CONVERT_TYPE_4(SRC) \
257 DEFINE_CONVERT_TYPE_HALF(SRC, char4 , char2 ) \
258 DEFINE_CONVERT_TYPE_HALF(SRC, uchar4 , uchar2 ) \
259 DEFINE_CONVERT_TYPE_HALF(SRC, short4 , short2 ) \
260 DEFINE_CONVERT_TYPE_HALF(SRC, ushort4, ushort2) \
261 DEFINE_CONVERT_TYPE_HALF(SRC, int4 , int2 ) \
262 DEFINE_CONVERT_TYPE_HALF(SRC, uint4 , uint2 ) \
263 DEFINE_CONVERT_TYPE_HALF(SRC, float4 , float2 )
264#endif
265DEFINE_CONVERT_TYPE_4(char4 )
266DEFINE_CONVERT_TYPE_4(uchar4 )
267DEFINE_CONVERT_TYPE_4(short4 )
268DEFINE_CONVERT_TYPE_4(ushort4)
269DEFINE_CONVERT_TYPE_4(int4 )
270DEFINE_CONVERT_TYPE_4(uint4 )
271#ifdef cl_kht_int64
272DEFINE_CONVERT_TYPE_4(long4 )
273DEFINE_CONVERT_TYPE_4(ulong4 )
274#endif
275DEFINE_CONVERT_TYPE_4(float4 )
276#ifdef cl_khr_fp64
277DEFINE_CONVERT_TYPE_4(double4)
278#endif
279
280/* 8 elements */
281#if defined(cles_khr_int64) && defined(cl_khr_fp64)
282#define DEFINE_CONVERT_TYPE_8(SRC) \
283 DEFINE_CONVERT_TYPE_HALF(SRC, char8 , char4 ) \
284 DEFINE_CONVERT_TYPE_HALF(SRC, uchar8 , uchar4 ) \
285 DEFINE_CONVERT_TYPE_HALF(SRC, short8 , short4 ) \
286 DEFINE_CONVERT_TYPE_HALF(SRC, ushort8, ushort4) \
287 DEFINE_CONVERT_TYPE_HALF(SRC, int8 , int4 ) \
288 DEFINE_CONVERT_TYPE_HALF(SRC, uint8 , uint4 ) \
289 DEFINE_CONVERT_TYPE_HALF(SRC, long8 , long4 ) \
290 DEFINE_CONVERT_TYPE_HALF(SRC, ulong8 , ulong4 ) \
291 DEFINE_CONVERT_TYPE_HALF(SRC, float8 , float4 ) \
292 DEFINE_CONVERT_TYPE_HALF(SRC, double8, double4)
293#elif defined(cles_khr_int64)
294#define DEFINE_CONVERT_TYPE_8(SRC) \
295 DEFINE_CONVERT_TYPE_HALF(SRC, char8 , char4 ) \
296 DEFINE_CONVERT_TYPE_HALF(SRC, uchar8 , uchar4 ) \
297 DEFINE_CONVERT_TYPE_HALF(SRC, short8 , short4 ) \
298 DEFINE_CONVERT_TYPE_HALF(SRC, ushort8, ushort4) \
299 DEFINE_CONVERT_TYPE_HALF(SRC, int8 , int4 ) \
300 DEFINE_CONVERT_TYPE_HALF(SRC, uint8 , uint4 ) \
301 DEFINE_CONVERT_TYPE_HALF(SRC, long8 , long4 ) \
302 DEFINE_CONVERT_TYPE_HALF(SRC, ulong8 , ulong4 ) \
303 DEFINE_CONVERT_TYPE_HALF(SRC, float8 , float4 )
304#elif defined(cl_khr_fp64)
305#define DEFINE_CONVERT_TYPE_8(SRC) \
306 DEFINE_CONVERT_TYPE_HALF(SRC, char8 , char4 ) \
307 DEFINE_CONVERT_TYPE_HALF(SRC, uchar8 , uchar4 ) \
308 DEFINE_CONVERT_TYPE_HALF(SRC, short8 , short4 ) \
309 DEFINE_CONVERT_TYPE_HALF(SRC, ushort8, ushort4) \
310 DEFINE_CONVERT_TYPE_HALF(SRC, int8 , int4 ) \
311 DEFINE_CONVERT_TYPE_HALF(SRC, uint8 , uint4 ) \
312 DEFINE_CONVERT_TYPE_HALF(SRC, float8 , float4 ) \
313 DEFINE_CONVERT_TYPE_HALF(SRC, double8, double4)
314#else
315#define DEFINE_CONVERT_TYPE_8(SRC) \
316 DEFINE_CONVERT_TYPE_HALF(SRC, char8 , char4 ) \
317 DEFINE_CONVERT_TYPE_HALF(SRC, uchar8 , uchar4 ) \
318 DEFINE_CONVERT_TYPE_HALF(SRC, short8 , short4 ) \
319 DEFINE_CONVERT_TYPE_HALF(SRC, ushort8, ushort4) \
320 DEFINE_CONVERT_TYPE_HALF(SRC, int8 , int4 ) \
321 DEFINE_CONVERT_TYPE_HALF(SRC, uint8 , uint4 ) \
322 DEFINE_CONVERT_TYPE_HALF(SRC, float8 , float4 )
323#endif
324DEFINE_CONVERT_TYPE_8(char8 )
325DEFINE_CONVERT_TYPE_8(uchar8 )
326DEFINE_CONVERT_TYPE_8(short8 )
327DEFINE_CONVERT_TYPE_8(ushort8)
328DEFINE_CONVERT_TYPE_8(int8 )
329DEFINE_CONVERT_TYPE_8(uint8 )
330#ifdef cl_kht_int64
331DEFINE_CONVERT_TYPE_8(long8 )
332DEFINE_CONVERT_TYPE_8(ulong8 )
333#endif
334DEFINE_CONVERT_TYPE_8(float8 )
335#ifdef cl_khr_fp64
336DEFINE_CONVERT_TYPE_8(double8)
337#endif
338
339/* 16 elements */
340#if defined(cles_khr_int64) && defined(cl_khr_fp64)
341#define DEFINE_CONVERT_TYPE_16(SRC) \
342 DEFINE_CONVERT_TYPE_HALF(SRC, char16 , char8 ) \
343 DEFINE_CONVERT_TYPE_HALF(SRC, uchar16 , uchar8 ) \
344 DEFINE_CONVERT_TYPE_HALF(SRC, short16 , short8 ) \
345 DEFINE_CONVERT_TYPE_HALF(SRC, ushort16, ushort8) \
346 DEFINE_CONVERT_TYPE_HALF(SRC, int16 , int8 ) \
347 DEFINE_CONVERT_TYPE_HALF(SRC, uint16 , uint8 ) \
348 DEFINE_CONVERT_TYPE_HALF(SRC, long16 , long8 ) \
349 DEFINE_CONVERT_TYPE_HALF(SRC, ulong16 , ulong8 ) \
350 DEFINE_CONVERT_TYPE_HALF(SRC, float16 , float8 ) \
351 DEFINE_CONVERT_TYPE_HALF(SRC, double16, double8)
352#elif defined(cles_khr_int64)
353#define DEFINE_CONVERT_TYPE_16(SRC) \
354 DEFINE_CONVERT_TYPE_HALF(SRC, char16 , char8 ) \
355 DEFINE_CONVERT_TYPE_HALF(SRC, uchar16 , uchar8 ) \
356 DEFINE_CONVERT_TYPE_HALF(SRC, short16 , short8 ) \
357 DEFINE_CONVERT_TYPE_HALF(SRC, ushort16, ushort8) \
358 DEFINE_CONVERT_TYPE_HALF(SRC, int16 , int8 ) \
359 DEFINE_CONVERT_TYPE_HALF(SRC, uint16 , uint8 ) \
360 DEFINE_CONVERT_TYPE_HALF(SRC, long16 , long8 ) \
361 DEFINE_CONVERT_TYPE_HALF(SRC, ulong16 , ulong8 ) \
362 DEFINE_CONVERT_TYPE_HALF(SRC, float16 , float8 )
363#elif defined(cl_khr_fp64)
364#define DEFINE_CONVERT_TYPE_16(SRC) \
365 DEFINE_CONVERT_TYPE_HALF(SRC, char16 , char8 ) \
366 DEFINE_CONVERT_TYPE_HALF(SRC, uchar16 , uchar8 ) \
367 DEFINE_CONVERT_TYPE_HALF(SRC, short16 , short8 ) \
368 DEFINE_CONVERT_TYPE_HALF(SRC, ushort16, ushort8) \
369 DEFINE_CONVERT_TYPE_HALF(SRC, int16 , int8 ) \
370 DEFINE_CONVERT_TYPE_HALF(SRC, uint16 , uint8 ) \
371 DEFINE_CONVERT_TYPE_HALF(SRC, float16 , float8 ) \
372 DEFINE_CONVERT_TYPE_HALF(SRC, double16, double8)
373#else
374#define DEFINE_CONVERT_TYPE_16(SRC) \
375 DEFINE_CONVERT_TYPE_HALF(SRC, char16 , char8 ) \
376 DEFINE_CONVERT_TYPE_HALF(SRC, uchar16 , uchar8 ) \
377 DEFINE_CONVERT_TYPE_HALF(SRC, short16 , short8 ) \
378 DEFINE_CONVERT_TYPE_HALF(SRC, ushort16, ushort8) \
379 DEFINE_CONVERT_TYPE_HALF(SRC, int16 , int8 ) \
380 DEFINE_CONVERT_TYPE_HALF(SRC, uint16 , uint8 ) \
381 DEFINE_CONVERT_TYPE_HALF(SRC, float16 , float8 )
382#endif
383DEFINE_CONVERT_TYPE_16(char16 )
384DEFINE_CONVERT_TYPE_16(uchar16 )
385DEFINE_CONVERT_TYPE_16(short16 )
386DEFINE_CONVERT_TYPE_16(ushort16)
387DEFINE_CONVERT_TYPE_16(int16 )
388DEFINE_CONVERT_TYPE_16(uint16 )
389#ifdef cl_kht_int64
390DEFINE_CONVERT_TYPE_16(long16 )
391DEFINE_CONVERT_TYPE_16(ulong16 )
392#endif
393DEFINE_CONVERT_TYPE_16(float16 )
394#ifdef cl_khr_fp64
395DEFINE_CONVERT_TYPE_16(double16)
396#endif
397155
=== modified file 'lib/kernel/sources.mk'
--- lib/kernel/sources.mk 2011-11-08 18:34:25 +0000
+++ lib/kernel/sources.mk 2011-12-04 22:04:24 +0000
@@ -1,4 +1,5 @@
1libkernel_a_SOURCES = barrier.c \1libkernel_a_SOURCES = templates.h \
2 barrier.c \
2 get_global_size.c \3 get_global_size.c \
3 get_global_id.c \4 get_global_id.c \
4 get_local_id.c \5 get_local_id.c \
56
=== modified file 'lib/kernel/vload.cl'
--- lib/kernel/vload.cl 2011-11-24 15:56:10 +0000
+++ lib/kernel/vload.cl 2011-12-04 22:04:24 +0000
@@ -108,11 +108,17 @@
108IMPLEMENT_VLOAD(char , __private)108IMPLEMENT_VLOAD(char , __private)
109IMPLEMENT_VLOAD(short , __private)109IMPLEMENT_VLOAD(short , __private)
110IMPLEMENT_VLOAD(int , __private)110IMPLEMENT_VLOAD(int , __private)
111#if defined(cles_khr_int64)
111IMPLEMENT_VLOAD(long , __private)112IMPLEMENT_VLOAD(long , __private)
113#endif
112IMPLEMENT_VLOAD(uchar , __private)114IMPLEMENT_VLOAD(uchar , __private)
113IMPLEMENT_VLOAD(ushort, __private)115IMPLEMENT_VLOAD(ushort, __private)
114IMPLEMENT_VLOAD(uint , __private)116IMPLEMENT_VLOAD(uint , __private)
117#if defined(cles_khr_int64)
115IMPLEMENT_VLOAD(ulong , __private)118IMPLEMENT_VLOAD(ulong , __private)
119#endif
116IMPLEMENT_VLOAD(float , __private)120IMPLEMENT_VLOAD(float , __private)
121#if defined(cl_khr_fp64)
117IMPLEMENT_VLOAD(double, __private)122IMPLEMENT_VLOAD(double, __private)
123#endif
118*/124*/
119125
=== modified file 'lib/kernel/vstore.cl'
--- lib/kernel/vstore.cl 2011-11-24 15:56:10 +0000
+++ lib/kernel/vstore.cl 2011-12-04 22:04:24 +0000
@@ -98,11 +98,17 @@
98IMPLEMENT_VSTORE(char , __private)98IMPLEMENT_VSTORE(char , __private)
99IMPLEMENT_VSTORE(short , __private)99IMPLEMENT_VSTORE(short , __private)
100IMPLEMENT_VSTORE(int , __private)100IMPLEMENT_VSTORE(int , __private)
101#if defined(cles_khr_int64)
101IMPLEMENT_VSTORE(long , __private)102IMPLEMENT_VSTORE(long , __private)
103#endif
102IMPLEMENT_VSTORE(uchar , __private)104IMPLEMENT_VSTORE(uchar , __private)
103IMPLEMENT_VSTORE(ushort, __private)105IMPLEMENT_VSTORE(ushort, __private)
104IMPLEMENT_VSTORE(uint , __private)106IMPLEMENT_VSTORE(uint , __private)
107#if defined(cles_khr_int64)
105IMPLEMENT_VSTORE(ulong , __private)108IMPLEMENT_VSTORE(ulong , __private)
109#endif
106IMPLEMENT_VSTORE(float , __private)110IMPLEMENT_VSTORE(float , __private)
111#if defined(cl_khr_fpt64)
107IMPLEMENT_VSTORE(double, __private)112IMPLEMENT_VSTORE(double, __private)
113#endif
108*/114*/