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

Proposed by Erik Schnetter
Status: Merged
Merged at revision: 75
Proposed branch: lp:~schnetter/pocl/main
Merge into: lp:~pocl/pocl/trunk
Diff against target: 3359 lines (+377/-1782)
7 files modified
include/_kernel.h (+258/-1039)
lib/kernel/Makefile.am (+1/-1)
lib/kernel/arm/Makefile.am (+1/-1)
lib/kernel/sources.mk (+1/-2)
lib/kernel/tce/Makefile.am (+1/-1)
lib/kernel/templates.h (+114/-737)
lib/kernel/x86_64/Makefile.am (+1/-1)
To merge this branch: bzr merge lp:~schnetter/pocl/main
Reviewer Review Type Date Requested Status
Pekka Jääskeläinen Needs Fixing
Review via email: mp+81503@code.launchpad.net

Description of the change

I have replaced many #ifdefs that test for cl_khr_int64 and cl_khr_fp64 with corresponding __IF_INT64 and __IF_FP64 macros to shorten the code.

To post a comment you must log in.
Revision history for this message
Pekka Jääskeläinen (pekka-jaaskelainen) wrote :

Please do not assume that the target has either both or none of int64&double support. For example, ARM NEON accelerator supports 64 bit integers but only single precision floats. And the TCE target is completely customizable, that is, the TTAs designed with TCE can (in the future, at least when 64 bit words are supported) have whatever combinations of instruction set support.

review: Needs Fixing
Revision history for this message
Erik Schnetter (schnetter) wrote :

The dependency between double and long isn't introduced by this patch; this patch only simplifies the existing #ifdef statements, and adds a corresponding check (that could be removed again). Should I?

Clang has currently a problem, in that all 3 operands of the ?: operator need to have the same type to prevent an internal compiler error complaining about types in a binary (!) operator. My current solution for e.g. long ? double : double is to re-interpret the doubles as longs before calling the ?: operator, and to re-interpret them back to double afterwards. See e.g. lib/kernel/select.cl. Similar work-arounds exist in some other run-time functions.

Certain run-time functions that use only double in their signature thus also use long in their implementation, and these are currently only enabled if both double and long are supported.

Using long without double is not a problem.

Revision history for this message
Carlos Sánchez de La Lama (csanchezdll) wrote :

Hi Erik,

in the select() it is clear both doubles are long are required (the prototype is
double select(double, double, long)
so it could not be otherwise). However, some calls require only doubles (for example, bitselect, all the trigonometric functions for double, ...) and those can be there even if the machine does not support 64-bit integers (longs).

Look for example at sin.cl; it is using BUILTIN_V_V template, and when I added the macros I changed the template so double versions are only defined if cl_khr_fp64 is defined. But AFAIU there is no real dependency with long there (please correct me if I am mistaken) so this should be done regardless of the cl_khr_int64 status.

BR

Carlos

Revision history for this message
Erik Schnetter (schnetter) wrote :

Regarding select: This is just an example where the implementation needs to re-interpret a double as a long to circumvent a compiler problem that currently exists. I assume that this will go away in the (near) future. Maybe double max(double,double) is a better example -- this function does not depend on long in its signature, but its implementation currently does use long because it uses the ?: operator: Since (int ? double : double) doesn't work, it uses (long ? long : long) instead.

Regarding sin.cl: I agree. The #ifdef only checks whether double is available, and my patch doesn't change this, it uses only __IF_FP64 and not __IF_INT64.

lp:~schnetter/pocl/main updated
80. By Erik Schnetter

Remove warning about "double" requiring "long".
Enable more run-time functions if double is supported but long is not.

81. By Erik Schnetter

C files do not depend on templates.h.
templates.h is not a source file.

82. By Erik Schnetter

Merge

83. By Erik Schnetter

Merge

84. By Erik Schnetter

Merge

85. By Erik Schnetter

Add templates.h to sources again

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/_kernel.h'
2--- include/_kernel.h 2011-11-05 00:10:25 +0000
3+++ include/_kernel.h 2011-11-14 18:40:38 +0000
4@@ -61,7 +61,19 @@
5 define the macro and the pragma is conditionally enabled.
6 */
7 #ifdef cl_khr_fp64
8-#pragma OPENCL EXTENSION cl_khr_fp64: enable
9+# pragma OPENCL EXTENSION cl_khr_fp64: enable
10+#endif
11+
12+/* Define some feature macros to help write generic code */
13+#ifdef cl_khr_int64
14+# define __IF_INT64(x) x
15+#else
16+# define __IF_INT64(x)
17+#endif
18+#ifdef cl_khr_fp64
19+# define __IF_FP64(x) x
20+#else
21+# define __IF_FP64(x)
22 #endif
23
24 #define __global __attribute__ ((address_space(3)))
25@@ -135,6 +147,10 @@
26 typedef ulong ulong4 __attribute__((__ext_vector_type__(4)));
27 typedef ulong ulong8 __attribute__((__ext_vector_type__(8)));
28 typedef ulong ulong16 __attribute__((__ext_vector_type__(16)));
29+#else
30+/* Disable datatype */
31+struct error_undefined_type_long;
32+#define long struct error_undefined_type_long
33 #endif
34
35 typedef float float2 __attribute__((__ext_vector_type__(2)));
36@@ -149,6 +165,10 @@
37 typedef double double4 __attribute__((__ext_vector_type__(4)));
38 typedef double double8 __attribute__((__ext_vector_type__(8)));
39 typedef double double16 __attribute__((__ext_vector_type__(16)));
40+#else
41+/* Disable datatype */
42+struct error_undefined_type_double;
43+#define double struct error_undefined_type_double
44 #endif
45
46 #if (__ADDRESS_BITS__ == 32)
47@@ -294,589 +314,234 @@
48 _CL_DECLARE_AS_TYPE_4(float)
49
50 /* 8 bytes */
51-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
52-#define _CL_DECLARE_AS_TYPE_8(SRC) \
53- _CL_DECLARE_AS_TYPE(SRC, char8) \
54- _CL_DECLARE_AS_TYPE(SRC, uchar8) \
55- _CL_DECLARE_AS_TYPE(SRC, short4) \
56- _CL_DECLARE_AS_TYPE(SRC, ushort4) \
57- _CL_DECLARE_AS_TYPE(SRC, int2) \
58- _CL_DECLARE_AS_TYPE(SRC, uint2) \
59- _CL_DECLARE_AS_TYPE(SRC, long) \
60- _CL_DECLARE_AS_TYPE(SRC, ulong) \
61- _CL_DECLARE_AS_TYPE(SRC, float2) \
62- _CL_DECLARE_AS_TYPE(SRC, double)
63-#elif defined(cl_khr_int64)
64-#define _CL_DECLARE_AS_TYPE_8(SRC) \
65- _CL_DECLARE_AS_TYPE(SRC, char8) \
66- _CL_DECLARE_AS_TYPE(SRC, uchar8) \
67- _CL_DECLARE_AS_TYPE(SRC, short4) \
68- _CL_DECLARE_AS_TYPE(SRC, ushort4) \
69- _CL_DECLARE_AS_TYPE(SRC, int2) \
70- _CL_DECLARE_AS_TYPE(SRC, uint2) \
71- _CL_DECLARE_AS_TYPE(SRC, long) \
72- _CL_DECLARE_AS_TYPE(SRC, ulong) \
73- _CL_DECLARE_AS_TYPE(SRC, float2)
74-#elif defined(cl_khr_fp64)
75-#define _CL_DECLARE_AS_TYPE_8(SRC) \
76- _CL_DECLARE_AS_TYPE(SRC, char8) \
77- _CL_DECLARE_AS_TYPE(SRC, uchar8) \
78- _CL_DECLARE_AS_TYPE(SRC, short4) \
79- _CL_DECLARE_AS_TYPE(SRC, ushort4) \
80- _CL_DECLARE_AS_TYPE(SRC, int2) \
81- _CL_DECLARE_AS_TYPE(SRC, uint2) \
82- _CL_DECLARE_AS_TYPE(SRC, float2) \
83- _CL_DECLARE_AS_TYPE(SRC, double)
84-#else
85-#define _CL_DECLARE_AS_TYPE_8(SRC) \
86- _CL_DECLARE_AS_TYPE(SRC, char8) \
87- _CL_DECLARE_AS_TYPE(SRC, uchar8) \
88- _CL_DECLARE_AS_TYPE(SRC, short4) \
89- _CL_DECLARE_AS_TYPE(SRC, ushort4) \
90- _CL_DECLARE_AS_TYPE(SRC, int2) \
91- _CL_DECLARE_AS_TYPE(SRC, uint2) \
92- _CL_DECLARE_AS_TYPE(SRC, float2)
93-#endif
94+#define _CL_DECLARE_AS_TYPE_8(SRC) \
95+ _CL_DECLARE_AS_TYPE(SRC, char8) \
96+ _CL_DECLARE_AS_TYPE(SRC, uchar8) \
97+ _CL_DECLARE_AS_TYPE(SRC, short4) \
98+ _CL_DECLARE_AS_TYPE(SRC, ushort4) \
99+ _CL_DECLARE_AS_TYPE(SRC, int2) \
100+ _CL_DECLARE_AS_TYPE(SRC, uint2) \
101+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, long)) \
102+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, ulong)) \
103+ _CL_DECLARE_AS_TYPE(SRC, float2) \
104+ __IF_FP64(_CL_DECLARE_AS_TYPE(SRC, double))
105 _CL_DECLARE_AS_TYPE_8(char8)
106 _CL_DECLARE_AS_TYPE_8(uchar8)
107 _CL_DECLARE_AS_TYPE_8(short4)
108 _CL_DECLARE_AS_TYPE_8(ushort4)
109 _CL_DECLARE_AS_TYPE_8(int2)
110 _CL_DECLARE_AS_TYPE_8(uint2)
111-#ifdef cl_khr_int64
112-_CL_DECLARE_AS_TYPE_8(long)
113-_CL_DECLARE_AS_TYPE_8(ulong)
114-#endif
115+__IF_INT64(_CL_DECLARE_AS_TYPE_8(long))
116+__IF_INT64(_CL_DECLARE_AS_TYPE_8(ulong))
117 _CL_DECLARE_AS_TYPE_8(float2)
118-#ifdef cl_khr_fp64
119-_CL_DECLARE_AS_TYPE_8(double)
120-#endif
121+__IF_FP64(_CL_DECLARE_AS_TYPE_8(double))
122
123 /* 16 bytes */
124-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
125-#define _CL_DECLARE_AS_TYPE_16(SRC) \
126- _CL_DECLARE_AS_TYPE(SRC, char16) \
127- _CL_DECLARE_AS_TYPE(SRC, uchar16) \
128- _CL_DECLARE_AS_TYPE(SRC, short8) \
129- _CL_DECLARE_AS_TYPE(SRC, ushort8) \
130- _CL_DECLARE_AS_TYPE(SRC, int4) \
131- _CL_DECLARE_AS_TYPE(SRC, uint4) \
132- _CL_DECLARE_AS_TYPE(SRC, long2) \
133- _CL_DECLARE_AS_TYPE(SRC, ulong2) \
134- _CL_DECLARE_AS_TYPE(SRC, float4) \
135- _CL_DECLARE_AS_TYPE(SRC, double2)
136-#elif defined(cl_khr_int64)
137-#define _CL_DECLARE_AS_TYPE_16(SRC) \
138- _CL_DECLARE_AS_TYPE(SRC, char16) \
139- _CL_DECLARE_AS_TYPE(SRC, uchar16) \
140- _CL_DECLARE_AS_TYPE(SRC, short8) \
141- _CL_DECLARE_AS_TYPE(SRC, ushort8) \
142- _CL_DECLARE_AS_TYPE(SRC, int4) \
143- _CL_DECLARE_AS_TYPE(SRC, uint4) \
144- _CL_DECLARE_AS_TYPE(SRC, long2) \
145- _CL_DECLARE_AS_TYPE(SRC, ulong2) \
146- _CL_DECLARE_AS_TYPE(SRC, float4)
147-#elif defined(cl_khr_fp64)
148-#define _CL_DECLARE_AS_TYPE_16(SRC) \
149- _CL_DECLARE_AS_TYPE(SRC, char16) \
150- _CL_DECLARE_AS_TYPE(SRC, uchar16) \
151- _CL_DECLARE_AS_TYPE(SRC, short8) \
152- _CL_DECLARE_AS_TYPE(SRC, ushort8) \
153- _CL_DECLARE_AS_TYPE(SRC, int4) \
154- _CL_DECLARE_AS_TYPE(SRC, uint4) \
155- _CL_DECLARE_AS_TYPE(SRC, float4) \
156- _CL_DECLARE_AS_TYPE(SRC, double2)
157-#else
158-#define _CL_DECLARE_AS_TYPE_16(SRC) \
159- _CL_DECLARE_AS_TYPE(SRC, char16) \
160- _CL_DECLARE_AS_TYPE(SRC, uchar16) \
161- _CL_DECLARE_AS_TYPE(SRC, short8) \
162- _CL_DECLARE_AS_TYPE(SRC, ushort8) \
163- _CL_DECLARE_AS_TYPE(SRC, int4) \
164- _CL_DECLARE_AS_TYPE(SRC, uint4) \
165- _CL_DECLARE_AS_TYPE(SRC, float4)
166-#endif
167+#define _CL_DECLARE_AS_TYPE_16(SRC) \
168+ _CL_DECLARE_AS_TYPE(SRC, char16) \
169+ _CL_DECLARE_AS_TYPE(SRC, uchar16) \
170+ _CL_DECLARE_AS_TYPE(SRC, short8) \
171+ _CL_DECLARE_AS_TYPE(SRC, ushort8) \
172+ _CL_DECLARE_AS_TYPE(SRC, int4) \
173+ _CL_DECLARE_AS_TYPE(SRC, uint4) \
174+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, long2)) \
175+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, ulong2)) \
176+ _CL_DECLARE_AS_TYPE(SRC, float4) \
177+ __IF_FP64(_CL_DECLARE_AS_TYPE(SRC, double2))
178 _CL_DECLARE_AS_TYPE_16(char16)
179 _CL_DECLARE_AS_TYPE_16(uchar16)
180 _CL_DECLARE_AS_TYPE_16(short8)
181 _CL_DECLARE_AS_TYPE_16(ushort8)
182 _CL_DECLARE_AS_TYPE_16(int4)
183 _CL_DECLARE_AS_TYPE_16(uint4)
184-#ifdef cl_khr_int64
185-_CL_DECLARE_AS_TYPE_16(long2)
186-_CL_DECLARE_AS_TYPE_16(ulong2)
187-#endif
188+__IF_INT64(_CL_DECLARE_AS_TYPE_16(long2))
189+__IF_INT64(_CL_DECLARE_AS_TYPE_16(ulong2))
190 _CL_DECLARE_AS_TYPE_16(float4)
191-#ifdef cl_khr_fp64
192-_CL_DECLARE_AS_TYPE_16(double2)
193-#endif
194+__IF_FP64(_CL_DECLARE_AS_TYPE_16(double2))
195
196 /* 32 bytes */
197-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
198-#define _CL_DECLARE_AS_TYPE_32(SRC) \
199- _CL_DECLARE_AS_TYPE(SRC, short16) \
200- _CL_DECLARE_AS_TYPE(SRC, ushort16) \
201- _CL_DECLARE_AS_TYPE(SRC, int8) \
202- _CL_DECLARE_AS_TYPE(SRC, uint8) \
203- _CL_DECLARE_AS_TYPE(SRC, long4) \
204- _CL_DECLARE_AS_TYPE(SRC, ulong4) \
205- _CL_DECLARE_AS_TYPE(SRC, float8) \
206- _CL_DECLARE_AS_TYPE(SRC, double4)
207-#elif defined(cl_khr_int64)
208-#define _CL_DECLARE_AS_TYPE_32(SRC) \
209- _CL_DECLARE_AS_TYPE(SRC, short16) \
210- _CL_DECLARE_AS_TYPE(SRC, ushort16) \
211- _CL_DECLARE_AS_TYPE(SRC, int8) \
212- _CL_DECLARE_AS_TYPE(SRC, uint8) \
213- _CL_DECLARE_AS_TYPE(SRC, long4) \
214- _CL_DECLARE_AS_TYPE(SRC, ulong4) \
215- _CL_DECLARE_AS_TYPE(SRC, float8)
216-#elif defined(cl_khr_fp64)
217-#define _CL_DECLARE_AS_TYPE_32(SRC) \
218- _CL_DECLARE_AS_TYPE(SRC, short16) \
219- _CL_DECLARE_AS_TYPE(SRC, ushort16) \
220- _CL_DECLARE_AS_TYPE(SRC, int8) \
221- _CL_DECLARE_AS_TYPE(SRC, uint8) \
222- _CL_DECLARE_AS_TYPE(SRC, float8) \
223- _CL_DECLARE_AS_TYPE(SRC, double4)
224-#else
225-#define _CL_DECLARE_AS_TYPE_32(SRC) \
226- _CL_DECLARE_AS_TYPE(SRC, short16) \
227- _CL_DECLARE_AS_TYPE(SRC, ushort16) \
228- _CL_DECLARE_AS_TYPE(SRC, int8) \
229- _CL_DECLARE_AS_TYPE(SRC, uint8) \
230- _CL_DECLARE_AS_TYPE(SRC, float8)
231-#endif
232+#define _CL_DECLARE_AS_TYPE_32(SRC) \
233+ _CL_DECLARE_AS_TYPE(SRC, short16) \
234+ _CL_DECLARE_AS_TYPE(SRC, ushort16) \
235+ _CL_DECLARE_AS_TYPE(SRC, int8) \
236+ _CL_DECLARE_AS_TYPE(SRC, uint8) \
237+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, long4)) \
238+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, ulong4)) \
239+ _CL_DECLARE_AS_TYPE(SRC, float8) \
240+ __IF_FP64(_CL_DECLARE_AS_TYPE(SRC, double4))
241 _CL_DECLARE_AS_TYPE_32(short16)
242 _CL_DECLARE_AS_TYPE_32(ushort16)
243 _CL_DECLARE_AS_TYPE_32(int8)
244 _CL_DECLARE_AS_TYPE_32(uint8)
245-#ifdef cl_khr_int64
246-_CL_DECLARE_AS_TYPE_32(long4)
247-_CL_DECLARE_AS_TYPE_32(ulong4)
248-#endif
249+__IF_INT64(_CL_DECLARE_AS_TYPE_32(long4))
250+__IF_INT64(_CL_DECLARE_AS_TYPE_32(ulong4))
251 _CL_DECLARE_AS_TYPE_32(float8)
252-#ifdef cl_khr_fp64
253-_CL_DECLARE_AS_TYPE_32(double4)
254-#endif
255+__IF_FP64(_CL_DECLARE_AS_TYPE_32(double4))
256
257 /* 64 bytes */
258-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
259-#define _CL_DECLARE_AS_TYPE_64(SRC) \
260- _CL_DECLARE_AS_TYPE(SRC, int16) \
261- _CL_DECLARE_AS_TYPE(SRC, uint16) \
262- _CL_DECLARE_AS_TYPE(SRC, long8) \
263- _CL_DECLARE_AS_TYPE(SRC, ulong8) \
264- _CL_DECLARE_AS_TYPE(SRC, float16) \
265- _CL_DECLARE_AS_TYPE(SRC, double8)
266-#elif defined(cl_khr_int64)
267-#define _CL_DECLARE_AS_TYPE_64(SRC) \
268- _CL_DECLARE_AS_TYPE(SRC, int16) \
269- _CL_DECLARE_AS_TYPE(SRC, uint16) \
270- _CL_DECLARE_AS_TYPE(SRC, long8) \
271- _CL_DECLARE_AS_TYPE(SRC, ulong8) \
272- _CL_DECLARE_AS_TYPE(SRC, float16)
273-#elif defined(cl_khr_fp64)
274-#define _CL_DECLARE_AS_TYPE_64(SRC) \
275- _CL_DECLARE_AS_TYPE(SRC, int16) \
276- _CL_DECLARE_AS_TYPE(SRC, uint16) \
277- _CL_DECLARE_AS_TYPE(SRC, float16) \
278- _CL_DECLARE_AS_TYPE(SRC, double8)
279-#else
280-#define _CL_DECLARE_AS_TYPE_64(SRC) \
281- _CL_DECLARE_AS_TYPE(SRC, int16) \
282- _CL_DECLARE_AS_TYPE(SRC, uint16) \
283- _CL_DECLARE_AS_TYPE(SRC, float16)
284-#endif
285+#define _CL_DECLARE_AS_TYPE_64(SRC) \
286+ _CL_DECLARE_AS_TYPE(SRC, int16) \
287+ _CL_DECLARE_AS_TYPE(SRC, uint16) \
288+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, long8)) \
289+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, ulong8)) \
290+ _CL_DECLARE_AS_TYPE(SRC, float16) \
291+ __IF_FP64(_CL_DECLARE_AS_TYPE(SRC, double8))
292 _CL_DECLARE_AS_TYPE_64(int16)
293 _CL_DECLARE_AS_TYPE_64(uint16)
294-#ifdef cl_khr_int64
295-_CL_DECLARE_AS_TYPE_64(long8)
296-_CL_DECLARE_AS_TYPE_64(ulong8)
297-#endif
298+__IF_INT64(_CL_DECLARE_AS_TYPE_64(long8))
299+__IF_INT64(_CL_DECLARE_AS_TYPE_64(ulong8))
300 _CL_DECLARE_AS_TYPE_64(float16)
301-#ifdef cl_khr_fp64
302-_CL_DECLARE_AS_TYPE_64(double8)
303-#endif
304+__IF_FP64(_CL_DECLARE_AS_TYPE_64(double8))
305
306 /* 128 bytes */
307-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
308-#define _CL_DECLARE_AS_TYPE_128(SRC) \
309- _CL_DECLARE_AS_TYPE(SRC, long16) \
310- _CL_DECLARE_AS_TYPE(SRC, ulong16) \
311- _CL_DECLARE_AS_TYPE(SRC, double16)
312-#elif defined(cl_khr_int64)
313-#define _CL_DECLARE_AS_TYPE_128(SRC) \
314- _CL_DECLARE_AS_TYPE(SRC, long16) \
315- _CL_DECLARE_AS_TYPE(SRC, ulong16)
316-#elif defined(cl_khr_fp64)
317-#define _CL_DECLARE_AS_TYPE_128(SRC) \
318- _CL_DECLARE_AS_TYPE(SRC, double16)
319-#endif
320-#ifdef cl_khr_int64
321-_CL_DECLARE_AS_TYPE_128(long16)
322-_CL_DECLARE_AS_TYPE_128(ulong16)
323-#endif
324-#ifdef cl_khr_fp64
325-_CL_DECLARE_AS_TYPE_128(double16)
326-#endif
327+#define _CL_DECLARE_AS_TYPE_128(SRC) \
328+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, long16)) \
329+ __IF_INT64(_CL_DECLARE_AS_TYPE(SRC, ulong16)) \
330+ __IF_FP64(_CL_DECLARE_AS_TYPE(SRC, double16))
331+__IF_INT64(_CL_DECLARE_AS_TYPE_128(long16))
332+__IF_INT64(_CL_DECLARE_AS_TYPE_128(ulong16))
333+__IF_FP64(_CL_DECLARE_AS_TYPE_128(double16))
334
335 #define _CL_DECLARE_CONVERT_TYPE(SRC, DST) \
336 DST _cl_overloadable convert_##DST(SRC a);
337
338 /* 1 element */
339-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
340-#define _CL_DECLARE_CONVERT_TYPE_1(SRC) \
341- _CL_DECLARE_CONVERT_TYPE(SRC, char) \
342- _CL_DECLARE_CONVERT_TYPE(SRC, uchar) \
343- _CL_DECLARE_CONVERT_TYPE(SRC, short) \
344- _CL_DECLARE_CONVERT_TYPE(SRC, ushort) \
345- _CL_DECLARE_CONVERT_TYPE(SRC, int) \
346- _CL_DECLARE_CONVERT_TYPE(SRC, uint) \
347- _CL_DECLARE_CONVERT_TYPE(SRC, long) \
348- _CL_DECLARE_CONVERT_TYPE(SRC, ulong) \
349- _CL_DECLARE_CONVERT_TYPE(SRC, float) \
350- _CL_DECLARE_CONVERT_TYPE(SRC, double)
351-#elif defined(cl_khr_int64)
352-#define _CL_DECLARE_CONVERT_TYPE_1(SRC) \
353- _CL_DECLARE_CONVERT_TYPE(SRC, char) \
354- _CL_DECLARE_CONVERT_TYPE(SRC, uchar) \
355- _CL_DECLARE_CONVERT_TYPE(SRC, short) \
356- _CL_DECLARE_CONVERT_TYPE(SRC, ushort) \
357- _CL_DECLARE_CONVERT_TYPE(SRC, int) \
358- _CL_DECLARE_CONVERT_TYPE(SRC, uint) \
359- _CL_DECLARE_CONVERT_TYPE(SRC, long) \
360- _CL_DECLARE_CONVERT_TYPE(SRC, ulong) \
361- _CL_DECLARE_CONVERT_TYPE(SRC, float)
362-#elif defined(cl_khr_fp64)
363-#define _CL_DECLARE_CONVERT_TYPE_1(SRC) \
364- _CL_DECLARE_CONVERT_TYPE(SRC, char) \
365- _CL_DECLARE_CONVERT_TYPE(SRC, uchar) \
366- _CL_DECLARE_CONVERT_TYPE(SRC, short) \
367- _CL_DECLARE_CONVERT_TYPE(SRC, ushort) \
368- _CL_DECLARE_CONVERT_TYPE(SRC, int) \
369- _CL_DECLARE_CONVERT_TYPE(SRC, uint) \
370- _CL_DECLARE_CONVERT_TYPE(SRC, float) \
371- _CL_DECLARE_CONVERT_TYPE(SRC, double)
372-#else
373-#define _CL_DECLARE_CONVERT_TYPE_1(SRC) \
374- _CL_DECLARE_CONVERT_TYPE(SRC, char) \
375- _CL_DECLARE_CONVERT_TYPE(SRC, uchar) \
376- _CL_DECLARE_CONVERT_TYPE(SRC, short) \
377- _CL_DECLARE_CONVERT_TYPE(SRC, ushort) \
378- _CL_DECLARE_CONVERT_TYPE(SRC, int) \
379- _CL_DECLARE_CONVERT_TYPE(SRC, uint) \
380- _CL_DECLARE_CONVERT_TYPE(SRC, float)
381-#endif
382+#define _CL_DECLARE_CONVERT_TYPE_1(SRC) \
383+ _CL_DECLARE_CONVERT_TYPE(SRC, char) \
384+ _CL_DECLARE_CONVERT_TYPE(SRC, uchar) \
385+ _CL_DECLARE_CONVERT_TYPE(SRC, short) \
386+ _CL_DECLARE_CONVERT_TYPE(SRC, ushort) \
387+ _CL_DECLARE_CONVERT_TYPE(SRC, int) \
388+ _CL_DECLARE_CONVERT_TYPE(SRC, uint) \
389+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long)) \
390+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong)) \
391+ _CL_DECLARE_CONVERT_TYPE(SRC, float) \
392+ __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double))
393 _CL_DECLARE_CONVERT_TYPE_1(char)
394 _CL_DECLARE_CONVERT_TYPE_1(uchar)
395 _CL_DECLARE_CONVERT_TYPE_1(short)
396 _CL_DECLARE_CONVERT_TYPE_1(ushort)
397 _CL_DECLARE_CONVERT_TYPE_1(int)
398 _CL_DECLARE_CONVERT_TYPE_1(uint)
399-#ifdef cl_khr_int64
400-_CL_DECLARE_CONVERT_TYPE_1(long)
401-_CL_DECLARE_CONVERT_TYPE_1(ulong)
402-#endif
403+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_1(long))
404+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_1(ulong))
405 _CL_DECLARE_CONVERT_TYPE_1(float)
406-#ifdef cl_khr_fp64
407-_CL_DECLARE_CONVERT_TYPE_1(double)
408-#endif
409+__IF_FP64(_CL_DECLARE_CONVERT_TYPE_1(double))
410
411 /* 2 elements */
412-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
413-#define _CL_DECLARE_CONVERT_TYPE_2(SRC) \
414- _CL_DECLARE_CONVERT_TYPE(SRC, char2) \
415- _CL_DECLARE_CONVERT_TYPE(SRC, uchar2) \
416- _CL_DECLARE_CONVERT_TYPE(SRC, short2) \
417- _CL_DECLARE_CONVERT_TYPE(SRC, ushort2) \
418- _CL_DECLARE_CONVERT_TYPE(SRC, int2) \
419- _CL_DECLARE_CONVERT_TYPE(SRC, uint2) \
420- _CL_DECLARE_CONVERT_TYPE(SRC, long2) \
421- _CL_DECLARE_CONVERT_TYPE(SRC, ulong2) \
422- _CL_DECLARE_CONVERT_TYPE(SRC, float2) \
423- _CL_DECLARE_CONVERT_TYPE(SRC, double2)
424-#elif defined(cl_khr_int64)
425-#define _CL_DECLARE_CONVERT_TYPE_2(SRC) \
426- _CL_DECLARE_CONVERT_TYPE(SRC, char2) \
427- _CL_DECLARE_CONVERT_TYPE(SRC, uchar2) \
428- _CL_DECLARE_CONVERT_TYPE(SRC, short2) \
429- _CL_DECLARE_CONVERT_TYPE(SRC, ushort2) \
430- _CL_DECLARE_CONVERT_TYPE(SRC, int2) \
431- _CL_DECLARE_CONVERT_TYPE(SRC, uint2) \
432- _CL_DECLARE_CONVERT_TYPE(SRC, long2) \
433- _CL_DECLARE_CONVERT_TYPE(SRC, ulong2) \
434- _CL_DECLARE_CONVERT_TYPE(SRC, float2)
435-#elif defined(cl_khr_fp64)
436-#define _CL_DECLARE_CONVERT_TYPE_2(SRC) \
437- _CL_DECLARE_CONVERT_TYPE(SRC, char2) \
438- _CL_DECLARE_CONVERT_TYPE(SRC, uchar2) \
439- _CL_DECLARE_CONVERT_TYPE(SRC, short2) \
440- _CL_DECLARE_CONVERT_TYPE(SRC, ushort2) \
441- _CL_DECLARE_CONVERT_TYPE(SRC, int2) \
442- _CL_DECLARE_CONVERT_TYPE(SRC, uint2) \
443- _CL_DECLARE_CONVERT_TYPE(SRC, float2) \
444- _CL_DECLARE_CONVERT_TYPE(SRC, double2)
445-#else
446-#define _CL_DECLARE_CONVERT_TYPE_2(SRC) \
447- _CL_DECLARE_CONVERT_TYPE(SRC, char2) \
448- _CL_DECLARE_CONVERT_TYPE(SRC, uchar2) \
449- _CL_DECLARE_CONVERT_TYPE(SRC, short2) \
450- _CL_DECLARE_CONVERT_TYPE(SRC, ushort2) \
451- _CL_DECLARE_CONVERT_TYPE(SRC, int2) \
452- _CL_DECLARE_CONVERT_TYPE(SRC, uint2) \
453- _CL_DECLARE_CONVERT_TYPE(SRC, float2)
454-#endif
455+#define _CL_DECLARE_CONVERT_TYPE_2(SRC) \
456+ _CL_DECLARE_CONVERT_TYPE(SRC, char2) \
457+ _CL_DECLARE_CONVERT_TYPE(SRC, uchar2) \
458+ _CL_DECLARE_CONVERT_TYPE(SRC, short2) \
459+ _CL_DECLARE_CONVERT_TYPE(SRC, ushort2) \
460+ _CL_DECLARE_CONVERT_TYPE(SRC, int2) \
461+ _CL_DECLARE_CONVERT_TYPE(SRC, uint2) \
462+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long2)) \
463+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong2)) \
464+ _CL_DECLARE_CONVERT_TYPE(SRC, float2) \
465+ __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double2))
466 _CL_DECLARE_CONVERT_TYPE_2(char2)
467 _CL_DECLARE_CONVERT_TYPE_2(uchar2)
468 _CL_DECLARE_CONVERT_TYPE_2(short2)
469 _CL_DECLARE_CONVERT_TYPE_2(ushort2)
470 _CL_DECLARE_CONVERT_TYPE_2(int2)
471 _CL_DECLARE_CONVERT_TYPE_2(uint2)
472-#ifdef cl_khr_int64
473-_CL_DECLARE_CONVERT_TYPE_2(long2)
474-_CL_DECLARE_CONVERT_TYPE_2(ulong2)
475-#endif
476+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_2(long2))
477+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_2(ulong2))
478 _CL_DECLARE_CONVERT_TYPE_2(float2)
479-#ifdef cl_khr_fp64
480-_CL_DECLARE_CONVERT_TYPE_2(double2)
481-#endif
482+__IF_FP64(_CL_DECLARE_CONVERT_TYPE_2(double2))
483
484 /* 3 elements */
485-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
486-#define _CL_DECLARE_CONVERT_TYPE_3(SRC) \
487- _CL_DECLARE_CONVERT_TYPE(SRC, char3) \
488- _CL_DECLARE_CONVERT_TYPE(SRC, uchar3) \
489- _CL_DECLARE_CONVERT_TYPE(SRC, short3) \
490- _CL_DECLARE_CONVERT_TYPE(SRC, ushort3) \
491- _CL_DECLARE_CONVERT_TYPE(SRC, int3) \
492- _CL_DECLARE_CONVERT_TYPE(SRC, uint3) \
493- _CL_DECLARE_CONVERT_TYPE(SRC, long3) \
494- _CL_DECLARE_CONVERT_TYPE(SRC, ulong3) \
495- _CL_DECLARE_CONVERT_TYPE(SRC, float3) \
496- _CL_DECLARE_CONVERT_TYPE(SRC, double3)
497-#elif defined(cl_khr_int64)
498-#define _CL_DECLARE_CONVERT_TYPE_3(SRC) \
499- _CL_DECLARE_CONVERT_TYPE(SRC, char3) \
500- _CL_DECLARE_CONVERT_TYPE(SRC, uchar3) \
501- _CL_DECLARE_CONVERT_TYPE(SRC, short3) \
502- _CL_DECLARE_CONVERT_TYPE(SRC, ushort3) \
503- _CL_DECLARE_CONVERT_TYPE(SRC, int3) \
504- _CL_DECLARE_CONVERT_TYPE(SRC, uint3) \
505- _CL_DECLARE_CONVERT_TYPE(SRC, long3) \
506- _CL_DECLARE_CONVERT_TYPE(SRC, ulong3) \
507- _CL_DECLARE_CONVERT_TYPE(SRC, float3)
508-#elif defined(cl_khr_fp64)
509-#define _CL_DECLARE_CONVERT_TYPE_3(SRC) \
510- _CL_DECLARE_CONVERT_TYPE(SRC, char3) \
511- _CL_DECLARE_CONVERT_TYPE(SRC, uchar3) \
512- _CL_DECLARE_CONVERT_TYPE(SRC, short3) \
513- _CL_DECLARE_CONVERT_TYPE(SRC, ushort3) \
514- _CL_DECLARE_CONVERT_TYPE(SRC, int3) \
515- _CL_DECLARE_CONVERT_TYPE(SRC, uint3) \
516- _CL_DECLARE_CONVERT_TYPE(SRC, float3) \
517- _CL_DECLARE_CONVERT_TYPE(SRC, double3)
518-#else
519-#define _CL_DECLARE_CONVERT_TYPE_3(SRC) \
520- _CL_DECLARE_CONVERT_TYPE(SRC, char3) \
521- _CL_DECLARE_CONVERT_TYPE(SRC, uchar3) \
522- _CL_DECLARE_CONVERT_TYPE(SRC, short3) \
523- _CL_DECLARE_CONVERT_TYPE(SRC, ushort3) \
524- _CL_DECLARE_CONVERT_TYPE(SRC, int3) \
525- _CL_DECLARE_CONVERT_TYPE(SRC, uint3) \
526- _CL_DECLARE_CONVERT_TYPE(SRC, float3)
527-#endif
528+#define _CL_DECLARE_CONVERT_TYPE_3(SRC) \
529+ _CL_DECLARE_CONVERT_TYPE(SRC, char3) \
530+ _CL_DECLARE_CONVERT_TYPE(SRC, uchar3) \
531+ _CL_DECLARE_CONVERT_TYPE(SRC, short3) \
532+ _CL_DECLARE_CONVERT_TYPE(SRC, ushort3) \
533+ _CL_DECLARE_CONVERT_TYPE(SRC, int3) \
534+ _CL_DECLARE_CONVERT_TYPE(SRC, uint3) \
535+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long3)) \
536+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong3)) \
537+ _CL_DECLARE_CONVERT_TYPE(SRC, float3) \
538+ __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double3))
539 _CL_DECLARE_CONVERT_TYPE_3(char3)
540 _CL_DECLARE_CONVERT_TYPE_3(uchar3)
541 _CL_DECLARE_CONVERT_TYPE_3(short3)
542 _CL_DECLARE_CONVERT_TYPE_3(ushort3)
543 _CL_DECLARE_CONVERT_TYPE_3(int3)
544 _CL_DECLARE_CONVERT_TYPE_3(uint3)
545-#ifdef cl_khr_int64
546-_CL_DECLARE_CONVERT_TYPE_3(long3)
547-_CL_DECLARE_CONVERT_TYPE_3(ulong3)
548-#endif
549+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_3(long3))
550+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_3(ulong3))
551 _CL_DECLARE_CONVERT_TYPE_3(float3)
552-#ifdef cl_khr_fp64
553-_CL_DECLARE_CONVERT_TYPE_3(double3)
554-#endif
555+__IF_FP64(_CL_DECLARE_CONVERT_TYPE_3(double3))
556
557 /* 4 elements */
558-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
559-#define _CL_DECLARE_CONVERT_TYPE_4(SRC) \
560- _CL_DECLARE_CONVERT_TYPE(SRC, char4) \
561- _CL_DECLARE_CONVERT_TYPE(SRC, uchar4) \
562- _CL_DECLARE_CONVERT_TYPE(SRC, short4) \
563- _CL_DECLARE_CONVERT_TYPE(SRC, ushort4) \
564- _CL_DECLARE_CONVERT_TYPE(SRC, int4) \
565- _CL_DECLARE_CONVERT_TYPE(SRC, uint4) \
566- _CL_DECLARE_CONVERT_TYPE(SRC, long4) \
567- _CL_DECLARE_CONVERT_TYPE(SRC, ulong4) \
568- _CL_DECLARE_CONVERT_TYPE(SRC, float4) \
569- _CL_DECLARE_CONVERT_TYPE(SRC, double4)
570-#elif defined(cl_khr_int64)
571-#define _CL_DECLARE_CONVERT_TYPE_4(SRC) \
572- _CL_DECLARE_CONVERT_TYPE(SRC, char4) \
573- _CL_DECLARE_CONVERT_TYPE(SRC, uchar4) \
574- _CL_DECLARE_CONVERT_TYPE(SRC, short4) \
575- _CL_DECLARE_CONVERT_TYPE(SRC, ushort4) \
576- _CL_DECLARE_CONVERT_TYPE(SRC, int4) \
577- _CL_DECLARE_CONVERT_TYPE(SRC, uint4) \
578- _CL_DECLARE_CONVERT_TYPE(SRC, long4) \
579- _CL_DECLARE_CONVERT_TYPE(SRC, ulong4) \
580- _CL_DECLARE_CONVERT_TYPE(SRC, float4)
581-#elif defined(cl_khr_fp64)
582-#define _CL_DECLARE_CONVERT_TYPE_4(SRC) \
583- _CL_DECLARE_CONVERT_TYPE(SRC, char4) \
584- _CL_DECLARE_CONVERT_TYPE(SRC, uchar4) \
585- _CL_DECLARE_CONVERT_TYPE(SRC, short4) \
586- _CL_DECLARE_CONVERT_TYPE(SRC, ushort4) \
587- _CL_DECLARE_CONVERT_TYPE(SRC, int4) \
588- _CL_DECLARE_CONVERT_TYPE(SRC, uint4) \
589- _CL_DECLARE_CONVERT_TYPE(SRC, float4) \
590- _CL_DECLARE_CONVERT_TYPE(SRC, double4)
591-#else
592-#define _CL_DECLARE_CONVERT_TYPE_4(SRC) \
593- _CL_DECLARE_CONVERT_TYPE(SRC, char4) \
594- _CL_DECLARE_CONVERT_TYPE(SRC, uchar4) \
595- _CL_DECLARE_CONVERT_TYPE(SRC, short4) \
596- _CL_DECLARE_CONVERT_TYPE(SRC, ushort4) \
597- _CL_DECLARE_CONVERT_TYPE(SRC, int4) \
598- _CL_DECLARE_CONVERT_TYPE(SRC, uint4) \
599- _CL_DECLARE_CONVERT_TYPE(SRC, float4)
600-#endif
601+#define _CL_DECLARE_CONVERT_TYPE_4(SRC) \
602+ _CL_DECLARE_CONVERT_TYPE(SRC, char4) \
603+ _CL_DECLARE_CONVERT_TYPE(SRC, uchar4) \
604+ _CL_DECLARE_CONVERT_TYPE(SRC, short4) \
605+ _CL_DECLARE_CONVERT_TYPE(SRC, ushort4) \
606+ _CL_DECLARE_CONVERT_TYPE(SRC, int4) \
607+ _CL_DECLARE_CONVERT_TYPE(SRC, uint4) \
608+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long4)) \
609+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong4)) \
610+ _CL_DECLARE_CONVERT_TYPE(SRC, float4) \
611+ __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double4))
612 _CL_DECLARE_CONVERT_TYPE_4(char4)
613 _CL_DECLARE_CONVERT_TYPE_4(uchar4)
614 _CL_DECLARE_CONVERT_TYPE_4(short4)
615 _CL_DECLARE_CONVERT_TYPE_4(ushort4)
616 _CL_DECLARE_CONVERT_TYPE_4(int4)
617 _CL_DECLARE_CONVERT_TYPE_4(uint4)
618-#ifdef cl_khr_int64
619-_CL_DECLARE_CONVERT_TYPE_4(long4)
620-_CL_DECLARE_CONVERT_TYPE_4(ulong4)
621-#endif
622+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_4(long4))
623+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_4(ulong4))
624 _CL_DECLARE_CONVERT_TYPE_4(float4)
625-#ifdef cl_khr_fp64
626-_CL_DECLARE_CONVERT_TYPE_4(double4)
627-#endif
628+__IF_FP64(_CL_DECLARE_CONVERT_TYPE_4(double4))
629
630 /* 8 elements */
631-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
632-#define _CL_DECLARE_CONVERT_TYPE_8(SRC) \
633- _CL_DECLARE_CONVERT_TYPE(SRC, char8) \
634- _CL_DECLARE_CONVERT_TYPE(SRC, uchar8) \
635- _CL_DECLARE_CONVERT_TYPE(SRC, short8) \
636- _CL_DECLARE_CONVERT_TYPE(SRC, ushort8) \
637- _CL_DECLARE_CONVERT_TYPE(SRC, int8) \
638- _CL_DECLARE_CONVERT_TYPE(SRC, uint8) \
639- _CL_DECLARE_CONVERT_TYPE(SRC, long8) \
640- _CL_DECLARE_CONVERT_TYPE(SRC, ulong8) \
641- _CL_DECLARE_CONVERT_TYPE(SRC, float8) \
642- _CL_DECLARE_CONVERT_TYPE(SRC, double8)
643-#elif defined(cl_khr_int64)
644-#define _CL_DECLARE_CONVERT_TYPE_8(SRC) \
645- _CL_DECLARE_CONVERT_TYPE(SRC, char8) \
646- _CL_DECLARE_CONVERT_TYPE(SRC, uchar8) \
647- _CL_DECLARE_CONVERT_TYPE(SRC, short8) \
648- _CL_DECLARE_CONVERT_TYPE(SRC, ushort8) \
649- _CL_DECLARE_CONVERT_TYPE(SRC, int8) \
650- _CL_DECLARE_CONVERT_TYPE(SRC, uint8) \
651- _CL_DECLARE_CONVERT_TYPE(SRC, long8) \
652- _CL_DECLARE_CONVERT_TYPE(SRC, ulong8) \
653- _CL_DECLARE_CONVERT_TYPE(SRC, float8)
654-#elif defined(cl_khr_fp64)
655-#define _CL_DECLARE_CONVERT_TYPE_8(SRC) \
656- _CL_DECLARE_CONVERT_TYPE(SRC, char8) \
657- _CL_DECLARE_CONVERT_TYPE(SRC, uchar8) \
658- _CL_DECLARE_CONVERT_TYPE(SRC, short8) \
659- _CL_DECLARE_CONVERT_TYPE(SRC, ushort8) \
660- _CL_DECLARE_CONVERT_TYPE(SRC, int8) \
661- _CL_DECLARE_CONVERT_TYPE(SRC, uint8) \
662- _CL_DECLARE_CONVERT_TYPE(SRC, float8) \
663- _CL_DECLARE_CONVERT_TYPE(SRC, double8)
664-#else
665-#define _CL_DECLARE_CONVERT_TYPE_8(SRC) \
666- _CL_DECLARE_CONVERT_TYPE(SRC, char8) \
667- _CL_DECLARE_CONVERT_TYPE(SRC, uchar8) \
668- _CL_DECLARE_CONVERT_TYPE(SRC, short8) \
669- _CL_DECLARE_CONVERT_TYPE(SRC, ushort8) \
670- _CL_DECLARE_CONVERT_TYPE(SRC, int8) \
671- _CL_DECLARE_CONVERT_TYPE(SRC, uint8) \
672- _CL_DECLARE_CONVERT_TYPE(SRC, float8)
673-#endif
674+#define _CL_DECLARE_CONVERT_TYPE_8(SRC) \
675+ _CL_DECLARE_CONVERT_TYPE(SRC, char8) \
676+ _CL_DECLARE_CONVERT_TYPE(SRC, uchar8) \
677+ _CL_DECLARE_CONVERT_TYPE(SRC, short8) \
678+ _CL_DECLARE_CONVERT_TYPE(SRC, ushort8) \
679+ _CL_DECLARE_CONVERT_TYPE(SRC, int8) \
680+ _CL_DECLARE_CONVERT_TYPE(SRC, uint8) \
681+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long8)) \
682+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong8)) \
683+ _CL_DECLARE_CONVERT_TYPE(SRC, float8) \
684+ __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double8))
685 _CL_DECLARE_CONVERT_TYPE_8(char8)
686 _CL_DECLARE_CONVERT_TYPE_8(uchar8)
687 _CL_DECLARE_CONVERT_TYPE_8(short8)
688 _CL_DECLARE_CONVERT_TYPE_8(ushort8)
689 _CL_DECLARE_CONVERT_TYPE_8(int8)
690 _CL_DECLARE_CONVERT_TYPE_8(uint8)
691-#ifdef cl_khr_int64
692-_CL_DECLARE_CONVERT_TYPE_8(long8)
693-_CL_DECLARE_CONVERT_TYPE_8(ulong8)
694-#endif
695+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_8(long8))
696+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_8(ulong8))
697 _CL_DECLARE_CONVERT_TYPE_8(float8)
698-#ifdef cl_khr_fp64
699-_CL_DECLARE_CONVERT_TYPE_8(double8)
700-#endif
701+__IF_FP64(_CL_DECLARE_CONVERT_TYPE_8(double8))
702
703 /* 16 elements */
704-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
705-#define _CL_DECLARE_CONVERT_TYPE_16(SRC) \
706- _CL_DECLARE_CONVERT_TYPE(SRC, char16) \
707- _CL_DECLARE_CONVERT_TYPE(SRC, uchar16) \
708- _CL_DECLARE_CONVERT_TYPE(SRC, short16) \
709- _CL_DECLARE_CONVERT_TYPE(SRC, ushort16) \
710- _CL_DECLARE_CONVERT_TYPE(SRC, int16) \
711- _CL_DECLARE_CONVERT_TYPE(SRC, uint16) \
712- _CL_DECLARE_CONVERT_TYPE(SRC, long16) \
713- _CL_DECLARE_CONVERT_TYPE(SRC, ulong16) \
714- _CL_DECLARE_CONVERT_TYPE(SRC, float16) \
715- _CL_DECLARE_CONVERT_TYPE(SRC, double16)
716-#elif defined(cl_khr_int64)
717-#define _CL_DECLARE_CONVERT_TYPE_16(SRC) \
718- _CL_DECLARE_CONVERT_TYPE(SRC, char16) \
719- _CL_DECLARE_CONVERT_TYPE(SRC, uchar16) \
720- _CL_DECLARE_CONVERT_TYPE(SRC, short16) \
721- _CL_DECLARE_CONVERT_TYPE(SRC, ushort16) \
722- _CL_DECLARE_CONVERT_TYPE(SRC, int16) \
723- _CL_DECLARE_CONVERT_TYPE(SRC, uint16) \
724- _CL_DECLARE_CONVERT_TYPE(SRC, long16) \
725- _CL_DECLARE_CONVERT_TYPE(SRC, ulong16) \
726- _CL_DECLARE_CONVERT_TYPE(SRC, float16)
727-#elif defined(cl_khr_fp64)
728-#define _CL_DECLARE_CONVERT_TYPE_16(SRC) \
729- _CL_DECLARE_CONVERT_TYPE(SRC, char16) \
730- _CL_DECLARE_CONVERT_TYPE(SRC, uchar16) \
731- _CL_DECLARE_CONVERT_TYPE(SRC, short16) \
732- _CL_DECLARE_CONVERT_TYPE(SRC, ushort16) \
733- _CL_DECLARE_CONVERT_TYPE(SRC, int16) \
734- _CL_DECLARE_CONVERT_TYPE(SRC, uint16) \
735- _CL_DECLARE_CONVERT_TYPE(SRC, float16) \
736- _CL_DECLARE_CONVERT_TYPE(SRC, double16)
737-#else
738-#define _CL_DECLARE_CONVERT_TYPE_16(SRC) \
739- _CL_DECLARE_CONVERT_TYPE(SRC, char16) \
740- _CL_DECLARE_CONVERT_TYPE(SRC, uchar16) \
741- _CL_DECLARE_CONVERT_TYPE(SRC, short16) \
742- _CL_DECLARE_CONVERT_TYPE(SRC, ushort16) \
743- _CL_DECLARE_CONVERT_TYPE(SRC, int16) \
744- _CL_DECLARE_CONVERT_TYPE(SRC, uint16) \
745- _CL_DECLARE_CONVERT_TYPE(SRC, float16)
746-#endif
747+#define _CL_DECLARE_CONVERT_TYPE_16(SRC) \
748+ _CL_DECLARE_CONVERT_TYPE(SRC, char16) \
749+ _CL_DECLARE_CONVERT_TYPE(SRC, uchar16) \
750+ _CL_DECLARE_CONVERT_TYPE(SRC, short16) \
751+ _CL_DECLARE_CONVERT_TYPE(SRC, ushort16) \
752+ _CL_DECLARE_CONVERT_TYPE(SRC, int16) \
753+ _CL_DECLARE_CONVERT_TYPE(SRC, uint16) \
754+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, long16)) \
755+ __IF_INT64(_CL_DECLARE_CONVERT_TYPE(SRC, ulong16)) \
756+ _CL_DECLARE_CONVERT_TYPE(SRC, float16) \
757+ __IF_FP64(_CL_DECLARE_CONVERT_TYPE(SRC, double16))
758 _CL_DECLARE_CONVERT_TYPE_16(char16)
759 _CL_DECLARE_CONVERT_TYPE_16(uchar16)
760 _CL_DECLARE_CONVERT_TYPE_16(short16)
761 _CL_DECLARE_CONVERT_TYPE_16(ushort16)
762 _CL_DECLARE_CONVERT_TYPE_16(int16)
763 _CL_DECLARE_CONVERT_TYPE_16(uint16)
764-#ifdef cl_khr_int64
765-_CL_DECLARE_CONVERT_TYPE_16(long16)
766-_CL_DECLARE_CONVERT_TYPE_16(ulong16)
767-#endif
768+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_16(long16))
769+__IF_INT64(_CL_DECLARE_CONVERT_TYPE_16(ulong16))
770 _CL_DECLARE_CONVERT_TYPE_16(float16)
771-#ifdef cl_khr_fp64
772-_CL_DECLARE_CONVERT_TYPE_16(double16)
773-#endif
774+__IF_FP64(_CL_DECLARE_CONVERT_TYPE_16(double16))
775
776
777
778 /* Work-Item Functions */
779@@ -966,7 +631,6 @@
780 * V: vector of float or double
781 */
782
783-#ifdef cl_khr_fp64
784 #define _CL_DECLARE_FUNC_V_V(NAME) \
785 float _cl_overloadable NAME(float ); \
786 float2 _cl_overloadable NAME(float2 ); \
787@@ -974,22 +638,13 @@
788 float4 _cl_overloadable NAME(float4 ); \
789 float8 _cl_overloadable NAME(float8 ); \
790 float16 _cl_overloadable NAME(float16 ); \
791+ __IF_FP64( \
792 double _cl_overloadable NAME(double ); \
793 double2 _cl_overloadable NAME(double2 ); \
794 double3 _cl_overloadable NAME(double3 ); \
795 double4 _cl_overloadable NAME(double4 ); \
796 double8 _cl_overloadable NAME(double8 ); \
797- double16 _cl_overloadable NAME(double16);
798-#else
799-#define _CL_DECLARE_FUNC_V_V(NAME) \
800- float _cl_overloadable NAME(float ); \
801- float2 _cl_overloadable NAME(float2 ); \
802- float3 _cl_overloadable NAME(float3 ); \
803- float4 _cl_overloadable NAME(float4 ); \
804- float8 _cl_overloadable NAME(float8 ); \
805- float16 _cl_overloadable NAME(float16 );
806-#endif
807-#ifdef cl_khr_fp64
808+ double16 _cl_overloadable NAME(double16);)
809 #define _CL_DECLARE_FUNC_V_VV(NAME) \
810 float _cl_overloadable NAME(float , float ); \
811 float2 _cl_overloadable NAME(float2 , float2 ); \
812@@ -997,105 +652,63 @@
813 float4 _cl_overloadable NAME(float4 , float4 ); \
814 float8 _cl_overloadable NAME(float8 , float8 ); \
815 float16 _cl_overloadable NAME(float16 , float16 ); \
816+ __IF_FP64( \
817 double _cl_overloadable NAME(double , double ); \
818 double2 _cl_overloadable NAME(double2 , double2 ); \
819 double3 _cl_overloadable NAME(double3 , double3 ); \
820 double4 _cl_overloadable NAME(double4 , double4 ); \
821 double8 _cl_overloadable NAME(double8 , double8 ); \
822- double16 _cl_overloadable NAME(double16, double16);
823-#else
824-#define _CL_DECLARE_FUNC_V_VV(NAME) \
825- float _cl_overloadable NAME(float , float ); \
826- float2 _cl_overloadable NAME(float2 , float2 ); \
827- float3 _cl_overloadable NAME(float3 , float3 ); \
828- float4 _cl_overloadable NAME(float4 , float4 ); \
829- float8 _cl_overloadable NAME(float8 , float8 ); \
830- float16 _cl_overloadable NAME(float16 , float16 );
831-#endif
832-#ifdef cl_khr_fp64
833-#define _CL_DECLARE_FUNC_V_VVV(NAME) \
834- float _cl_overloadable NAME(float , float , float ); \
835- float2 _cl_overloadable NAME(float2 , float2 , float2 ); \
836- float3 _cl_overloadable NAME(float3 , float3 , float3 ); \
837- float4 _cl_overloadable NAME(float4 , float4 , float4 ); \
838- float8 _cl_overloadable NAME(float8 , float8 , float8 ); \
839- float16 _cl_overloadable NAME(float16 , float16 , float16 ); \
840- double _cl_overloadable NAME(double , double , double ); \
841- double2 _cl_overloadable NAME(double2 , double2 , double2 ); \
842- double3 _cl_overloadable NAME(double3 , double3 , double3 ); \
843- double4 _cl_overloadable NAME(double4 , double4 , double4 ); \
844- double8 _cl_overloadable NAME(double8 , double8 , double8 ); \
845- double16 _cl_overloadable NAME(double16, double16, double16);
846-#else
847-#define _CL_DECLARE_FUNC_V_VVV(NAME) \
848- float _cl_overloadable NAME(float , float , float ); \
849- float2 _cl_overloadable NAME(float2 , float2 , float2 ); \
850- float3 _cl_overloadable NAME(float3 , float3 , float3 ); \
851- float4 _cl_overloadable NAME(float4 , float4 , float4 ); \
852- float8 _cl_overloadable NAME(float8 , float8 , float8 ); \
853- float16 _cl_overloadable NAME(float16 , float16 , float16 );
854-#endif
855-#ifdef cl_khr_fp64
856+ double16 _cl_overloadable NAME(double16, double16);)
857+#define _CL_DECLARE_FUNC_V_VVV(NAME) \
858+ float _cl_overloadable NAME(float , float , float ); \
859+ float2 _cl_overloadable NAME(float2 , float2 , float2 ); \
860+ float3 _cl_overloadable NAME(float3 , float3 , float3 ); \
861+ float4 _cl_overloadable NAME(float4 , float4 , float4 ); \
862+ float8 _cl_overloadable NAME(float8 , float8 , float8 ); \
863+ float16 _cl_overloadable NAME(float16 , float16 , float16 ); \
864+ __IF_FP64( \
865+ double _cl_overloadable NAME(double , double , double ); \
866+ double2 _cl_overloadable NAME(double2 , double2 , double2 ); \
867+ double3 _cl_overloadable NAME(double3 , double3 , double3 ); \
868+ double4 _cl_overloadable NAME(double4 , double4 , double4 ); \
869+ double8 _cl_overloadable NAME(double8 , double8 , double8 ); \
870+ double16 _cl_overloadable NAME(double16, double16, double16);)
871 #define _CL_DECLARE_FUNC_V_VVS(NAME) \
872 float2 _cl_overloadable NAME(float2 , float2 , float ); \
873 float3 _cl_overloadable NAME(float3 , float3 , float ); \
874 float4 _cl_overloadable NAME(float4 , float4 , float ); \
875 float8 _cl_overloadable NAME(float8 , float8 , float ); \
876 float16 _cl_overloadable NAME(float16 , float16 , float ); \
877+ __IF_FP64( \
878 double2 _cl_overloadable NAME(double2 , double2 , double); \
879 double3 _cl_overloadable NAME(double3 , double3 , double); \
880 double4 _cl_overloadable NAME(double4 , double4 , double); \
881 double8 _cl_overloadable NAME(double8 , double8 , double); \
882- double16 _cl_overloadable NAME(double16, double16, double);
883-#else
884-#define _CL_DECLARE_FUNC_V_VVS(NAME) \
885- float2 _cl_overloadable NAME(float2 , float2 , float ); \
886- float3 _cl_overloadable NAME(float3 , float3 , float ); \
887- float4 _cl_overloadable NAME(float4 , float4 , float ); \
888- float8 _cl_overloadable NAME(float8 , float8 , float ); \
889- float16 _cl_overloadable NAME(float16 , float16 , float );
890-#endif
891-#ifdef cl_khr_fp64
892+ double16 _cl_overloadable NAME(double16, double16, double);)
893 #define _CL_DECLARE_FUNC_V_VSS(NAME) \
894 float2 _cl_overloadable NAME(float2 , float , float ); \
895 float3 _cl_overloadable NAME(float3 , float , float ); \
896 float4 _cl_overloadable NAME(float4 , float , float ); \
897 float8 _cl_overloadable NAME(float8 , float , float ); \
898 float16 _cl_overloadable NAME(float16 , float , float ); \
899+ __IF_FP64( \
900 double2 _cl_overloadable NAME(double2 , double, double); \
901 double3 _cl_overloadable NAME(double3 , double, double); \
902 double4 _cl_overloadable NAME(double4 , double, double); \
903 double8 _cl_overloadable NAME(double8 , double, double); \
904- double16 _cl_overloadable NAME(double16, double, double);
905-#else
906-#define _CL_DECLARE_FUNC_V_VSS(NAME) \
907- float2 _cl_overloadable NAME(float2 , float , float ); \
908- float3 _cl_overloadable NAME(float3 , float , float ); \
909- float4 _cl_overloadable NAME(float4 , float , float ); \
910- float8 _cl_overloadable NAME(float8 , float , float ); \
911- float16 _cl_overloadable NAME(float16 , float , float );
912-#endif
913-#ifdef cl_khr_fp64
914+ double16 _cl_overloadable NAME(double16, double, double);)
915 #define _CL_DECLARE_FUNC_V_SSV(NAME) \
916 float2 _cl_overloadable NAME(float , float , float2 ); \
917 float3 _cl_overloadable NAME(float , float , float3 ); \
918 float4 _cl_overloadable NAME(float , float , float4 ); \
919 float8 _cl_overloadable NAME(float , float , float8 ); \
920 float16 _cl_overloadable NAME(float , float , float16 ); \
921+ __IF_FP64( \
922 double2 _cl_overloadable NAME(double, double, double2 ); \
923 double3 _cl_overloadable NAME(double, double, double3 ); \
924 double4 _cl_overloadable NAME(double, double, double4 ); \
925 double8 _cl_overloadable NAME(double, double, double8 ); \
926- double16 _cl_overloadable NAME(double, double, double16);
927-#else
928-#define _CL_DECLARE_FUNC_V_SSV(NAME) \
929- float2 _cl_overloadable NAME(float , float , float2 ); \
930- float3 _cl_overloadable NAME(float , float , float3 ); \
931- float4 _cl_overloadable NAME(float , float , float4 ); \
932- float8 _cl_overloadable NAME(float , float , float8 ); \
933- float16 _cl_overloadable NAME(float , float , float16 );
934-#endif
935-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
936+ double16 _cl_overloadable NAME(double, double, double16);)
937 #define _CL_DECLARE_FUNC_V_VVJ(NAME) \
938 float _cl_overloadable NAME(float , float , int ); \
939 float2 _cl_overloadable NAME(float2 , float2 , int2 ); \
940@@ -1103,22 +716,13 @@
941 float4 _cl_overloadable NAME(float4 , float4 , int4 ); \
942 float8 _cl_overloadable NAME(float8 , float8 , int8 ); \
943 float16 _cl_overloadable NAME(float16 , float16 , int16 ); \
944+ __IF_INT64(__IF_FP64( \
945 double _cl_overloadable NAME(double , double , long ); \
946 double2 _cl_overloadable NAME(double2 , double2 , long2 ); \
947 double3 _cl_overloadable NAME(double3 , double3 , long3 ); \
948 double4 _cl_overloadable NAME(double4 , double4 , long4 ); \
949 double8 _cl_overloadable NAME(double8 , double8 , long8 ); \
950- double16 _cl_overloadable NAME(double16, double16, long16);
951-#else
952-#define _CL_DECLARE_FUNC_V_VVJ(NAME) \
953- float _cl_overloadable NAME(float , float , int ); \
954- float2 _cl_overloadable NAME(float2 , float2 , int2 ); \
955- float3 _cl_overloadable NAME(float3 , float3 , int3 ); \
956- float4 _cl_overloadable NAME(float4 , float4 , int4 ); \
957- float8 _cl_overloadable NAME(float8 , float8 , int8 ); \
958- float16 _cl_overloadable NAME(float16 , float16 , int16 );
959-#endif
960-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
961+ double16 _cl_overloadable NAME(double16, double16, long16);))
962 #define _CL_DECLARE_FUNC_V_U(NAME) \
963 float _cl_overloadable NAME(uint ); \
964 float2 _cl_overloadable NAME(uint2 ); \
965@@ -1126,42 +730,25 @@
966 float4 _cl_overloadable NAME(uint4 ); \
967 float8 _cl_overloadable NAME(uint8 ); \
968 float16 _cl_overloadable NAME(uint16 ); \
969+ __IF_INT64(__IF_FP64( \
970 double _cl_overloadable NAME(ulong ); \
971 double2 _cl_overloadable NAME(ulong2 ); \
972 double3 _cl_overloadable NAME(ulong3 ); \
973 double4 _cl_overloadable NAME(ulong4 ); \
974 double8 _cl_overloadable NAME(ulong8 ); \
975- double16 _cl_overloadable NAME(ulong16);
976-#else
977-#define _CL_DECLARE_FUNC_V_U(NAME) \
978- float _cl_overloadable NAME(uint ); \
979- float2 _cl_overloadable NAME(uint2 ); \
980- float3 _cl_overloadable NAME(uint3 ); \
981- float4 _cl_overloadable NAME(uint4 ); \
982- float8 _cl_overloadable NAME(uint8 ); \
983- float16 _cl_overloadable NAME(uint16 );
984-#endif
985-#ifdef cl_khr_fp64
986+ double16 _cl_overloadable NAME(ulong16);))
987 #define _CL_DECLARE_FUNC_V_VS(NAME) \
988 float2 _cl_overloadable NAME(float2 , float ); \
989 float3 _cl_overloadable NAME(float3 , float ); \
990 float4 _cl_overloadable NAME(float4 , float ); \
991 float8 _cl_overloadable NAME(float8 , float ); \
992 float16 _cl_overloadable NAME(float16 , float ); \
993+ __IF_FP64( \
994 double2 _cl_overloadable NAME(double2 , double); \
995 double3 _cl_overloadable NAME(double3 , double); \
996 double4 _cl_overloadable NAME(double4 , double); \
997 double8 _cl_overloadable NAME(double8 , double); \
998- double16 _cl_overloadable NAME(double16, double);
999-#else
1000-#define _CL_DECLARE_FUNC_V_VS(NAME) \
1001- float2 _cl_overloadable NAME(float2 , float ); \
1002- float3 _cl_overloadable NAME(float3 , float ); \
1003- float4 _cl_overloadable NAME(float4 , float ); \
1004- float8 _cl_overloadable NAME(float8 , float ); \
1005- float16 _cl_overloadable NAME(float16 , float );
1006-#endif
1007-#ifdef cl_khr_fp64
1008+ double16 _cl_overloadable NAME(double16, double);)
1009 #define _CL_DECLARE_FUNC_V_VJ(NAME) \
1010 float _cl_overloadable NAME(float , int ); \
1011 float2 _cl_overloadable NAME(float2 , int2 ); \
1012@@ -1169,22 +756,13 @@
1013 float4 _cl_overloadable NAME(float4 , int4 ); \
1014 float8 _cl_overloadable NAME(float8 , int8 ); \
1015 float16 _cl_overloadable NAME(float16 , int16); \
1016+ __IF_FP64( \
1017 double _cl_overloadable NAME(double , int ); \
1018 double2 _cl_overloadable NAME(double2 , int2 ); \
1019 double3 _cl_overloadable NAME(double3 , int3 ); \
1020 double4 _cl_overloadable NAME(double4 , int4 ); \
1021 double8 _cl_overloadable NAME(double8 , int8 ); \
1022- double16 _cl_overloadable NAME(double16, int16);
1023-#else
1024-#define _CL_DECLARE_FUNC_V_VJ(NAME) \
1025- float _cl_overloadable NAME(float , int ); \
1026- float2 _cl_overloadable NAME(float2 , int2 ); \
1027- float3 _cl_overloadable NAME(float3 , int3 ); \
1028- float4 _cl_overloadable NAME(float4 , int4 ); \
1029- float8 _cl_overloadable NAME(float8 , int8 ); \
1030- float16 _cl_overloadable NAME(float16 , int16);
1031-#endif
1032-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
1033+ double16 _cl_overloadable NAME(double16, int16);)
1034 #define _CL_DECLARE_FUNC_J_VV(NAME) \
1035 int _cl_overloadable NAME(float , float ); \
1036 int2 _cl_overloadable NAME(float2 , float2 ); \
1037@@ -1192,51 +770,26 @@
1038 int4 _cl_overloadable NAME(float4 , float4 ); \
1039 int8 _cl_overloadable NAME(float8 , float8 ); \
1040 int16 _cl_overloadable NAME(float16 , float16 ); \
1041+ __IF_FP64( \
1042 int _cl_overloadable NAME(double , double ); \
1043+ __IF_INT64( \
1044 long2 _cl_overloadable NAME(double2 , double2 ); \
1045 long3 _cl_overloadable NAME(double3 , double3 ); \
1046 long4 _cl_overloadable NAME(double4 , double4 ); \
1047 long8 _cl_overloadable NAME(double8 , double8 ); \
1048- long16 _cl_overloadable NAME(double16, double16);
1049-#elif defined(cl_khr_fp64)
1050-#define _CL_DECLARE_FUNC_J_VV(NAME) \
1051- int _cl_overloadable NAME(float , float ); \
1052- int2 _cl_overloadable NAME(float2 , float2 ); \
1053- int3 _cl_overloadable NAME(float3 , float3 ); \
1054- int4 _cl_overloadable NAME(float4 , float4 ); \
1055- int8 _cl_overloadable NAME(float8 , float8 ); \
1056- int16 _cl_overloadable NAME(float16 , float16 ); \
1057- int _cl_overloadable NAME(double , double );
1058-#else
1059-#define _CL_DECLARE_FUNC_J_VV(NAME) \
1060- int _cl_overloadable NAME(float , float ); \
1061- int2 _cl_overloadable NAME(float2 , float2 ); \
1062- int3 _cl_overloadable NAME(float3 , float3 ); \
1063- int4 _cl_overloadable NAME(float4 , float4 ); \
1064- int8 _cl_overloadable NAME(float8 , float8 ); \
1065- int16 _cl_overloadable NAME(float16 , float16 );
1066-#endif
1067-#ifdef cl_khr_fp64
1068+ long16 _cl_overloadable NAME(double16, double16);))
1069 #define _CL_DECLARE_FUNC_V_VI(NAME) \
1070 float2 _cl_overloadable NAME(float2 , int); \
1071 float3 _cl_overloadable NAME(float3 , int); \
1072 float4 _cl_overloadable NAME(float4 , int); \
1073 float8 _cl_overloadable NAME(float8 , int); \
1074 float16 _cl_overloadable NAME(float16 , int); \
1075+ __IF_FP64( \
1076 double2 _cl_overloadable NAME(double2 , int); \
1077 double3 _cl_overloadable NAME(double3 , int); \
1078 double4 _cl_overloadable NAME(double4 , int); \
1079 double8 _cl_overloadable NAME(double8 , int); \
1080- double16 _cl_overloadable NAME(double16, int);
1081-#else
1082-#define _CL_DECLARE_FUNC_V_VI(NAME) \
1083- float2 _cl_overloadable NAME(float2 , int); \
1084- float3 _cl_overloadable NAME(float3 , int); \
1085- float4 _cl_overloadable NAME(float4 , int); \
1086- float8 _cl_overloadable NAME(float8 , int); \
1087- float16 _cl_overloadable NAME(float16 , int);
1088-#endif
1089-#ifdef cl_khr_fp64
1090+ double16 _cl_overloadable NAME(double16, int);)
1091 #define _CL_DECLARE_FUNC_V_VPV(NAME) \
1092 float _cl_overloadable NAME(float , __global float *); \
1093 float2 _cl_overloadable NAME(float2 , __global float2 *); \
1094@@ -1244,24 +797,26 @@
1095 float4 _cl_overloadable NAME(float4 , __global float4 *); \
1096 float8 _cl_overloadable NAME(float8 , __global float8 *); \
1097 float16 _cl_overloadable NAME(float16 , __global float16 *); \
1098+ __IF_FP64( \
1099 double _cl_overloadable NAME(double , __global double *); \
1100 double2 _cl_overloadable NAME(double2 , __global double2 *); \
1101 double3 _cl_overloadable NAME(double3 , __global double3 *); \
1102 double4 _cl_overloadable NAME(double4 , __global double4 *); \
1103 double8 _cl_overloadable NAME(double8 , __global double8 *); \
1104- double16 _cl_overloadable NAME(double16, __global double16*); \
1105+ double16 _cl_overloadable NAME(double16, __global double16*);) \
1106 float _cl_overloadable NAME(float , __local float *); \
1107 float2 _cl_overloadable NAME(float2 , __local float2 *); \
1108 float3 _cl_overloadable NAME(float3 , __local float3 *); \
1109 float4 _cl_overloadable NAME(float4 , __local float4 *); \
1110 float8 _cl_overloadable NAME(float8 , __local float8 *); \
1111 float16 _cl_overloadable NAME(float16 , __local float16 *); \
1112+ __IF_FP64( \
1113 double _cl_overloadable NAME(double , __local double *); \
1114 double2 _cl_overloadable NAME(double2 , __local double2 *); \
1115 double3 _cl_overloadable NAME(double3 , __local double3 *); \
1116 double4 _cl_overloadable NAME(double4 , __local double4 *); \
1117 double8 _cl_overloadable NAME(double8 , __local double8 *); \
1118- double16 _cl_overloadable NAME(double16, __local double16*); \
1119+ double16 _cl_overloadable NAME(double16, __local double16*);) \
1120 /* __private is not supported yet \
1121 float _cl_overloadable NAME(float , __private float *); \
1122 float2 _cl_overloadable NAME(float2 , __private float2 *); \
1123@@ -1269,57 +824,26 @@
1124 float4 _cl_overloadable NAME(float4 , __private float4 *); \
1125 float8 _cl_overloadable NAME(float8 , __private float8 *); \
1126 float16 _cl_overloadable NAME(float16 , __private float16 *); \
1127+ __IF_FP64( \
1128 double _cl_overloadable NAME(double , __private double *); \
1129 double2 _cl_overloadable NAME(double2 , __private double2 *); \
1130 double3 _cl_overloadable NAME(double3 , __private double3 *); \
1131 double4 _cl_overloadable NAME(double4 , __private double4 *); \
1132 double8 _cl_overloadable NAME(double8 , __private double8 *); \
1133- double16 _cl_overloadable NAME(double16, __private double16*); \
1134- */
1135-#else
1136-#define _CL_DECLARE_FUNC_V_VPV(NAME) \
1137- float _cl_overloadable NAME(float , __global float *); \
1138- float2 _cl_overloadable NAME(float2 , __global float2 *); \
1139- float3 _cl_overloadable NAME(float3 , __global float3 *); \
1140- float4 _cl_overloadable NAME(float4 , __global float4 *); \
1141- float8 _cl_overloadable NAME(float8 , __global float8 *); \
1142- float16 _cl_overloadable NAME(float16 , __global float16 *); \
1143- float _cl_overloadable NAME(float , __local float *); \
1144- float2 _cl_overloadable NAME(float2 , __local float2 *); \
1145- float3 _cl_overloadable NAME(float3 , __local float3 *); \
1146- float4 _cl_overloadable NAME(float4 , __local float4 *); \
1147- float8 _cl_overloadable NAME(float8 , __local float8 *); \
1148- float16 _cl_overloadable NAME(float16 , __local float16 *); \
1149- /* __private is not supported yet \
1150- float _cl_overloadable NAME(float , __private float *); \
1151- float2 _cl_overloadable NAME(float2 , __private float2 *); \
1152- float3 _cl_overloadable NAME(float3 , __private float3 *); \
1153- float4 _cl_overloadable NAME(float4 , __private float4 *); \
1154- float8 _cl_overloadable NAME(float8 , __private float8 *); \
1155- float16 _cl_overloadable NAME(float16 , __private float16 *); \
1156- */
1157-#endif
1158-#ifdef cl_khr_fp64
1159+ double16 _cl_overloadable NAME(double16, __private double16*);) \
1160+ */
1161 #define _CL_DECLARE_FUNC_V_SV(NAME) \
1162 float2 _cl_overloadable NAME(float , float2 ); \
1163 float3 _cl_overloadable NAME(float , float3 ); \
1164 float4 _cl_overloadable NAME(float , float4 ); \
1165 float8 _cl_overloadable NAME(float , float8 ); \
1166 float16 _cl_overloadable NAME(float , float16 ); \
1167+ __IF_FP64( \
1168 double2 _cl_overloadable NAME(double, double2 ); \
1169 double3 _cl_overloadable NAME(double, double3 ); \
1170 double4 _cl_overloadable NAME(double, double4 ); \
1171 double8 _cl_overloadable NAME(double, double8 ); \
1172- double16 _cl_overloadable NAME(double, double16);
1173-#else
1174-#define _CL_DECLARE_FUNC_V_SV(NAME) \
1175- float2 _cl_overloadable NAME(float , float2 ); \
1176- float3 _cl_overloadable NAME(float , float3 ); \
1177- float4 _cl_overloadable NAME(float , float4 ); \
1178- float8 _cl_overloadable NAME(float , float8 ); \
1179- float16 _cl_overloadable NAME(float , float16 );
1180-#endif
1181-#ifdef cl_khr_fp64
1182+ double16 _cl_overloadable NAME(double, double16);)
1183 #define _CL_DECLARE_FUNC_J_V(NAME) \
1184 int _cl_overloadable NAME(float ); \
1185 int2 _cl_overloadable NAME(float2 ); \
1186@@ -1327,22 +851,13 @@
1187 int4 _cl_overloadable NAME(float4 ); \
1188 int8 _cl_overloadable NAME(float8 ); \
1189 int16 _cl_overloadable NAME(float16 ); \
1190+ __IF_FP64( \
1191 int _cl_overloadable NAME(double ); \
1192 int2 _cl_overloadable NAME(double2 ); \
1193 int3 _cl_overloadable NAME(double3 ); \
1194 int4 _cl_overloadable NAME(double4 ); \
1195 int8 _cl_overloadable NAME(double8 ); \
1196- int16 _cl_overloadable NAME(double16);
1197-#else
1198-#define _CL_DECLARE_FUNC_J_V(NAME) \
1199- int _cl_overloadable NAME(float ); \
1200- int2 _cl_overloadable NAME(float2 ); \
1201- int3 _cl_overloadable NAME(float3 ); \
1202- int4 _cl_overloadable NAME(float4 ); \
1203- int8 _cl_overloadable NAME(float8 ); \
1204- int16 _cl_overloadable NAME(float16 );
1205-#endif
1206-#ifdef cl_khr_fp64
1207+ int16 _cl_overloadable NAME(double16);)
1208 #define _CL_DECLARE_FUNC_K_V(NAME) \
1209 int _cl_overloadable NAME(float ); \
1210 int2 _cl_overloadable NAME(float2 ); \
1211@@ -1350,22 +865,13 @@
1212 int4 _cl_overloadable NAME(float4 ); \
1213 int8 _cl_overloadable NAME(float8 ); \
1214 int16 _cl_overloadable NAME(float16 ); \
1215+ __IF_FP64( \
1216 int _cl_overloadable NAME(double ); \
1217 long2 _cl_overloadable NAME(double2 ); \
1218 long3 _cl_overloadable NAME(double3 ); \
1219 long4 _cl_overloadable NAME(double4 ); \
1220 long8 _cl_overloadable NAME(double8 ); \
1221- long16 _cl_overloadable NAME(double16);
1222-#else
1223-#define _CL_DECLARE_FUNC_K_V(NAME) \
1224- int _cl_overloadable NAME(float ); \
1225- int2 _cl_overloadable NAME(float2 ); \
1226- int3 _cl_overloadable NAME(float3 ); \
1227- int4 _cl_overloadable NAME(float4 ); \
1228- int8 _cl_overloadable NAME(float8 ); \
1229- int16 _cl_overloadable NAME(float16 );
1230-#endif
1231-#ifdef cl_khr_fp64
1232+ long16 _cl_overloadable NAME(double16);)
1233 #define _CL_DECLARE_FUNC_S_V(NAME) \
1234 float _cl_overloadable NAME(float ); \
1235 float _cl_overloadable NAME(float2 ); \
1236@@ -1373,22 +879,13 @@
1237 float _cl_overloadable NAME(float4 ); \
1238 float _cl_overloadable NAME(float8 ); \
1239 float _cl_overloadable NAME(float16 ); \
1240+ __IF_FP64( \
1241 double _cl_overloadable NAME(double ); \
1242 double _cl_overloadable NAME(double2 ); \
1243 double _cl_overloadable NAME(double3 ); \
1244 double _cl_overloadable NAME(double4 ); \
1245 double _cl_overloadable NAME(double8 ); \
1246- double _cl_overloadable NAME(double16);
1247-#else
1248-#define _CL_DECLARE_FUNC_S_V(NAME) \
1249- float _cl_overloadable NAME(float ); \
1250- float _cl_overloadable NAME(float2 ); \
1251- float _cl_overloadable NAME(float3 ); \
1252- float _cl_overloadable NAME(float4 ); \
1253- float _cl_overloadable NAME(float8 ); \
1254- float _cl_overloadable NAME(float16 );
1255-#endif
1256-#ifdef cl_khr_fp64
1257+ double _cl_overloadable NAME(double16);)
1258 #define _CL_DECLARE_FUNC_S_VV(NAME) \
1259 float _cl_overloadable NAME(float , float ); \
1260 float _cl_overloadable NAME(float2 , float2 ); \
1261@@ -1396,21 +893,13 @@
1262 float _cl_overloadable NAME(float4 , float4 ); \
1263 float _cl_overloadable NAME(float8 , float8 ); \
1264 float _cl_overloadable NAME(float16 , float16 ); \
1265+ __IF_FP64( \
1266 double _cl_overloadable NAME(double , double ); \
1267 double _cl_overloadable NAME(double2 , double2 ); \
1268 double _cl_overloadable NAME(double3 , double3 ); \
1269 double _cl_overloadable NAME(double4 , double4 ); \
1270 double _cl_overloadable NAME(double8 , double8 ); \
1271- double _cl_overloadable NAME(double16, double16);
1272-#else
1273-#define _CL_DECLARE_FUNC_S_VV(NAME) \
1274- float _cl_overloadable NAME(float , float ); \
1275- float _cl_overloadable NAME(float2 , float2 ); \
1276- float _cl_overloadable NAME(float3 , float3 ); \
1277- float _cl_overloadable NAME(float4 , float4 ); \
1278- float _cl_overloadable NAME(float8 , float8 ); \
1279- float _cl_overloadable NAME(float16 , float16 );
1280-#endif
1281+ double _cl_overloadable NAME(double16, double16);)
1282
1283 /* Move built-in declarations out of the way. (There should be a
1284 better way of doing so.) These five functions are built-in math
1285@@ -1519,8 +1008,10 @@
1286 #define CHAR_MIN SCHAR_MIN
1287 #define INT_MAX 2147483647
1288 #define INT_MIN (-2147483647 - 1)
1289+#ifdef cl_khr_int64
1290 #define LONG_MAX 0x7fffffffffffffffL
1291 #define LONG_MIN (-0x7fffffffffffffffL - 1)
1292+#endif
1293 #define SCHAR_MAX 127
1294 #define SCHAR_MIN (-127 - 1)
1295 #define SHRT_MAX 32767
1296@@ -1528,11 +1019,12 @@
1297 #define UCHAR_MAX 255
1298 #define USHRT_MAX 65535
1299 #define UINT_MAX 0xffffffff
1300+#ifdef cl_khr_int64
1301 #define ULONG_MAX 0xffffffffffffffffUL
1302+#endif
1303
1304
1305
1306 /* Integer Functions */
1307-#ifdef cl_khr_int64
1308 #define _CL_DECLARE_FUNC_G_G(NAME) \
1309 char _cl_overloadable NAME(char ); \
1310 char2 _cl_overloadable NAME(char2 ); \
1311@@ -1570,6 +1062,7 @@
1312 uint4 _cl_overloadable NAME(uint4 ); \
1313 uint8 _cl_overloadable NAME(uint8 ); \
1314 uint16 _cl_overloadable NAME(uint16 ); \
1315+ __IF_INT64( \
1316 long _cl_overloadable NAME(long ); \
1317 long2 _cl_overloadable NAME(long2 ); \
1318 long3 _cl_overloadable NAME(long3 ); \
1319@@ -1581,47 +1074,7 @@
1320 ulong3 _cl_overloadable NAME(ulong3 ); \
1321 ulong4 _cl_overloadable NAME(ulong4 ); \
1322 ulong8 _cl_overloadable NAME(ulong8 ); \
1323- ulong16 _cl_overloadable NAME(ulong16 );
1324-#else
1325-#define _CL_DECLARE_FUNC_G_G(NAME) \
1326- char _cl_overloadable NAME(char ); \
1327- char2 _cl_overloadable NAME(char2 ); \
1328- char3 _cl_overloadable NAME(char3 ); \
1329- char4 _cl_overloadable NAME(char4 ); \
1330- char8 _cl_overloadable NAME(char8 ); \
1331- char16 _cl_overloadable NAME(char16 ); \
1332- uchar _cl_overloadable NAME(uchar ); \
1333- uchar2 _cl_overloadable NAME(uchar2 ); \
1334- uchar3 _cl_overloadable NAME(uchar3 ); \
1335- uchar4 _cl_overloadable NAME(uchar4 ); \
1336- uchar8 _cl_overloadable NAME(uchar8 ); \
1337- uchar16 _cl_overloadable NAME(uchar16 ); \
1338- short _cl_overloadable NAME(short ); \
1339- short2 _cl_overloadable NAME(short2 ); \
1340- short3 _cl_overloadable NAME(short3 ); \
1341- short4 _cl_overloadable NAME(short4 ); \
1342- short8 _cl_overloadable NAME(short8 ); \
1343- short16 _cl_overloadable NAME(short16 ); \
1344- ushort _cl_overloadable NAME(ushort ); \
1345- ushort2 _cl_overloadable NAME(ushort2 ); \
1346- ushort3 _cl_overloadable NAME(ushort3 ); \
1347- ushort4 _cl_overloadable NAME(ushort4 ); \
1348- ushort8 _cl_overloadable NAME(ushort8 ); \
1349- ushort16 _cl_overloadable NAME(ushort16); \
1350- int _cl_overloadable NAME(int ); \
1351- int2 _cl_overloadable NAME(int2 ); \
1352- int3 _cl_overloadable NAME(int3 ); \
1353- int4 _cl_overloadable NAME(int4 ); \
1354- int8 _cl_overloadable NAME(int8 ); \
1355- int16 _cl_overloadable NAME(int16 ); \
1356- uint _cl_overloadable NAME(uint ); \
1357- uint2 _cl_overloadable NAME(uint2 ); \
1358- uint3 _cl_overloadable NAME(uint3 ); \
1359- uint4 _cl_overloadable NAME(uint4 ); \
1360- uint8 _cl_overloadable NAME(uint8 ); \
1361- uint16 _cl_overloadable NAME(uint16 );
1362-#endif
1363-#ifdef cl_khr_int64
1364+ ulong16 _cl_overloadable NAME(ulong16 );)
1365 #define _CL_DECLARE_FUNC_G_GG(NAME) \
1366 char _cl_overloadable NAME(char , char ); \
1367 char2 _cl_overloadable NAME(char2 , char2 ); \
1368@@ -1659,6 +1112,7 @@
1369 uint4 _cl_overloadable NAME(uint4 , uint4 ); \
1370 uint8 _cl_overloadable NAME(uint8 , uint8 ); \
1371 uint16 _cl_overloadable NAME(uint16 , uint16 ); \
1372+ __IF_INT64( \
1373 long _cl_overloadable NAME(long , long ); \
1374 long2 _cl_overloadable NAME(long2 , long2 ); \
1375 long3 _cl_overloadable NAME(long3 , long3 ); \
1376@@ -1670,47 +1124,7 @@
1377 ulong3 _cl_overloadable NAME(ulong3 , ulong3 ); \
1378 ulong4 _cl_overloadable NAME(ulong4 , ulong4 ); \
1379 ulong8 _cl_overloadable NAME(ulong8 , ulong8 ); \
1380- ulong16 _cl_overloadable NAME(ulong16 , ulong16 );
1381-#else
1382-#define _CL_DECLARE_FUNC_G_GG(NAME) \
1383- char _cl_overloadable NAME(char , char ); \
1384- char2 _cl_overloadable NAME(char2 , char2 ); \
1385- char3 _cl_overloadable NAME(char3 , char3 ); \
1386- char4 _cl_overloadable NAME(char4 , char4 ); \
1387- char8 _cl_overloadable NAME(char8 , char8 ); \
1388- char16 _cl_overloadable NAME(char16 , char16 ); \
1389- uchar _cl_overloadable NAME(uchar , uchar ); \
1390- uchar2 _cl_overloadable NAME(uchar2 , uchar2 ); \
1391- uchar3 _cl_overloadable NAME(uchar3 , uchar3 ); \
1392- uchar4 _cl_overloadable NAME(uchar4 , uchar4 ); \
1393- uchar8 _cl_overloadable NAME(uchar8 , uchar8 ); \
1394- uchar16 _cl_overloadable NAME(uchar16 , uchar16 ); \
1395- short _cl_overloadable NAME(short , short ); \
1396- short2 _cl_overloadable NAME(short2 , short2 ); \
1397- short3 _cl_overloadable NAME(short3 , short3 ); \
1398- short4 _cl_overloadable NAME(short4 , short4 ); \
1399- short8 _cl_overloadable NAME(short8 , short8 ); \
1400- short16 _cl_overloadable NAME(short16 , short16 ); \
1401- ushort _cl_overloadable NAME(ushort , ushort ); \
1402- ushort2 _cl_overloadable NAME(ushort2 , ushort2 ); \
1403- ushort3 _cl_overloadable NAME(ushort3 , ushort3 ); \
1404- ushort4 _cl_overloadable NAME(ushort4 , ushort4 ); \
1405- ushort8 _cl_overloadable NAME(ushort8 , ushort8 ); \
1406- ushort16 _cl_overloadable NAME(ushort16, ushort16); \
1407- int _cl_overloadable NAME(int , int ); \
1408- int2 _cl_overloadable NAME(int2 , int2 ); \
1409- int3 _cl_overloadable NAME(int3 , int3 ); \
1410- int4 _cl_overloadable NAME(int4 , int4 ); \
1411- int8 _cl_overloadable NAME(int8 , int8 ); \
1412- int16 _cl_overloadable NAME(int16 , int16 ); \
1413- uint _cl_overloadable NAME(uint , uint ); \
1414- uint2 _cl_overloadable NAME(uint2 , uint2 ); \
1415- uint3 _cl_overloadable NAME(uint3 , uint3 ); \
1416- uint4 _cl_overloadable NAME(uint4 , uint4 ); \
1417- uint8 _cl_overloadable NAME(uint8 , uint8 ); \
1418- uint16 _cl_overloadable NAME(uint16 , uint16 );
1419-#endif
1420-#ifdef cl_khr_int64
1421+ ulong16 _cl_overloadable NAME(ulong16 , ulong16 );)
1422 #define _CL_DECLARE_FUNC_G_GGG(NAME) \
1423 char _cl_overloadable NAME(char , char , char ); \
1424 char2 _cl_overloadable NAME(char2 , char2 , char2 ); \
1425@@ -1748,6 +1162,7 @@
1426 uint4 _cl_overloadable NAME(uint4 , uint4 , uint4 ); \
1427 uint8 _cl_overloadable NAME(uint8 , uint8 , uint8 ); \
1428 uint16 _cl_overloadable NAME(uint16 , uint16 , uint16 ); \
1429+ __IF_INT64( \
1430 long _cl_overloadable NAME(long , long , long ); \
1431 long2 _cl_overloadable NAME(long2 , long2 , long2 ); \
1432 long3 _cl_overloadable NAME(long3 , long3 , long3 ); \
1433@@ -1759,47 +1174,7 @@
1434 ulong3 _cl_overloadable NAME(ulong3 , ulong3 , ulong3 ); \
1435 ulong4 _cl_overloadable NAME(ulong4 , ulong4 , ulong4 ); \
1436 ulong8 _cl_overloadable NAME(ulong8 , ulong8 , ulong8 ); \
1437- ulong16 _cl_overloadable NAME(ulong16 , ulong16 , ulong16 );
1438-#else
1439-#define _CL_DECLARE_FUNC_G_GGG(NAME) \
1440- char _cl_overloadable NAME(char , char , char ); \
1441- char2 _cl_overloadable NAME(char2 , char2 , char2 ); \
1442- char3 _cl_overloadable NAME(char3 , char3 , char3 ); \
1443- char4 _cl_overloadable NAME(char4 , char4 , char4 ); \
1444- char8 _cl_overloadable NAME(char8 , char8 , char8 ); \
1445- char16 _cl_overloadable NAME(char16 , char16 , char16 ); \
1446- uchar _cl_overloadable NAME(uchar , uchar , uchar ); \
1447- uchar2 _cl_overloadable NAME(uchar2 , uchar2 , uchar2 ); \
1448- uchar3 _cl_overloadable NAME(uchar3 , uchar3 , uchar3 ); \
1449- uchar4 _cl_overloadable NAME(uchar4 , uchar4 , uchar4 ); \
1450- uchar8 _cl_overloadable NAME(uchar8 , uchar8 , uchar8 ); \
1451- uchar16 _cl_overloadable NAME(uchar16 , uchar16 , uchar16 ); \
1452- short _cl_overloadable NAME(short , short , short ); \
1453- short2 _cl_overloadable NAME(short2 , short2 , short2 ); \
1454- short3 _cl_overloadable NAME(short3 , short3 , short3 ); \
1455- short4 _cl_overloadable NAME(short4 , short4 , short4 ); \
1456- short8 _cl_overloadable NAME(short8 , short8 , short8 ); \
1457- short16 _cl_overloadable NAME(short16 , short16 , short16 ); \
1458- ushort _cl_overloadable NAME(ushort , ushort , ushort ); \
1459- ushort2 _cl_overloadable NAME(ushort2 , ushort2 , ushort2 ); \
1460- ushort3 _cl_overloadable NAME(ushort3 , ushort3 , ushort3 ); \
1461- ushort4 _cl_overloadable NAME(ushort4 , ushort4 , ushort4 ); \
1462- ushort8 _cl_overloadable NAME(ushort8 , ushort8 , ushort8 ); \
1463- ushort16 _cl_overloadable NAME(ushort16, ushort16, ushort16); \
1464- int _cl_overloadable NAME(int , int , int ); \
1465- int2 _cl_overloadable NAME(int2 , int2 , int2 ); \
1466- int3 _cl_overloadable NAME(int3 , int3 , int3 ); \
1467- int4 _cl_overloadable NAME(int4 , int4 , int4 ); \
1468- int8 _cl_overloadable NAME(int8 , int8 , int8 ); \
1469- int16 _cl_overloadable NAME(int16 , int16 , int16 ); \
1470- uint _cl_overloadable NAME(uint , uint , uint ); \
1471- uint2 _cl_overloadable NAME(uint2 , uint2 , uint2 ); \
1472- uint3 _cl_overloadable NAME(uint3 , uint3 , uint3 ); \
1473- uint4 _cl_overloadable NAME(uint4 , uint4 , uint4 ); \
1474- uint8 _cl_overloadable NAME(uint8 , uint8 , uint8 ); \
1475- uint16 _cl_overloadable NAME(uint16 , uint16 , uint16 );
1476-#endif
1477-#ifdef cl_khr_int64
1478+ ulong16 _cl_overloadable NAME(ulong16 , ulong16 , ulong16 );)
1479 #define _CL_DECLARE_FUNC_G_GS(NAME) \
1480 char2 _cl_overloadable NAME(char2 , char ); \
1481 char3 _cl_overloadable NAME(char3 , char ); \
1482@@ -1831,6 +1206,7 @@
1483 uint4 _cl_overloadable NAME(uint4 , uint ); \
1484 uint8 _cl_overloadable NAME(uint8 , uint ); \
1485 uint16 _cl_overloadable NAME(uint16 , uint ); \
1486+ __IF_INT64( \
1487 long2 _cl_overloadable NAME(long2 , long ); \
1488 long3 _cl_overloadable NAME(long3 , long ); \
1489 long4 _cl_overloadable NAME(long4 , long ); \
1490@@ -1840,41 +1216,7 @@
1491 ulong3 _cl_overloadable NAME(ulong3 , ulong ); \
1492 ulong4 _cl_overloadable NAME(ulong4 , ulong ); \
1493 ulong8 _cl_overloadable NAME(ulong8 , ulong ); \
1494- ulong16 _cl_overloadable NAME(ulong16 , ulong );
1495-#else
1496-#define _CL_DECLARE_FUNC_G_GS(NAME) \
1497- char2 _cl_overloadable NAME(char2 , char ); \
1498- char3 _cl_overloadable NAME(char3 , char ); \
1499- char4 _cl_overloadable NAME(char4 , char ); \
1500- char8 _cl_overloadable NAME(char8 , char ); \
1501- char16 _cl_overloadable NAME(char16 , char ); \
1502- uchar2 _cl_overloadable NAME(uchar2 , uchar ); \
1503- uchar3 _cl_overloadable NAME(uchar3 , uchar ); \
1504- uchar4 _cl_overloadable NAME(uchar4 , uchar ); \
1505- uchar8 _cl_overloadable NAME(uchar8 , uchar ); \
1506- uchar16 _cl_overloadable NAME(uchar16 , uchar ); \
1507- short2 _cl_overloadable NAME(short2 , short ); \
1508- short3 _cl_overloadable NAME(short3 , short ); \
1509- short4 _cl_overloadable NAME(short4 , short ); \
1510- short8 _cl_overloadable NAME(short8 , short ); \
1511- short16 _cl_overloadable NAME(short16 , short ); \
1512- ushort2 _cl_overloadable NAME(ushort2 , ushort); \
1513- ushort3 _cl_overloadable NAME(ushort3 , ushort); \
1514- ushort4 _cl_overloadable NAME(ushort4 , ushort); \
1515- ushort8 _cl_overloadable NAME(ushort8 , ushort); \
1516- ushort16 _cl_overloadable NAME(ushort16, ushort); \
1517- int2 _cl_overloadable NAME(int2 , int ); \
1518- int3 _cl_overloadable NAME(int3 , int ); \
1519- int4 _cl_overloadable NAME(int4 , int ); \
1520- int8 _cl_overloadable NAME(int8 , int ); \
1521- int16 _cl_overloadable NAME(int16 , int ); \
1522- uint2 _cl_overloadable NAME(uint2 , uint ); \
1523- uint3 _cl_overloadable NAME(uint3 , uint ); \
1524- uint4 _cl_overloadable NAME(uint4 , uint ); \
1525- uint8 _cl_overloadable NAME(uint8 , uint ); \
1526- uint16 _cl_overloadable NAME(uint16 , uint );
1527-#endif
1528-#ifdef cl_khr_int64
1529+ ulong16 _cl_overloadable NAME(ulong16 , ulong );)
1530 #define _CL_DECLARE_FUNC_UG_G(NAME) \
1531 uchar _cl_overloadable NAME(char ); \
1532 uchar2 _cl_overloadable NAME(char2 ); \
1533@@ -1894,12 +1236,13 @@
1534 uint4 _cl_overloadable NAME(int4 ); \
1535 uint8 _cl_overloadable NAME(int8 ); \
1536 uint16 _cl_overloadable NAME(int16 ); \
1537+ __IF_INT64( \
1538 ulong _cl_overloadable NAME(long ); \
1539 ulong2 _cl_overloadable NAME(long2 ); \
1540 ulong3 _cl_overloadable NAME(long3 ); \
1541 ulong4 _cl_overloadable NAME(long4 ); \
1542 ulong8 _cl_overloadable NAME(long8 ); \
1543- ulong16 _cl_overloadable NAME(long16 ); \
1544+ ulong16 _cl_overloadable NAME(long16 );) \
1545 uchar _cl_overloadable NAME(uchar ); \
1546 uchar2 _cl_overloadable NAME(uchar2 ); \
1547 uchar3 _cl_overloadable NAME(uchar3 ); \
1548@@ -1918,52 +1261,13 @@
1549 uint4 _cl_overloadable NAME(uint4 ); \
1550 uint8 _cl_overloadable NAME(uint8 ); \
1551 uint16 _cl_overloadable NAME(uint16 ); \
1552+ __IF_INT64( \
1553 ulong _cl_overloadable NAME(ulong ); \
1554 ulong2 _cl_overloadable NAME(ulong2 ); \
1555 ulong3 _cl_overloadable NAME(ulong3 ); \
1556 ulong4 _cl_overloadable NAME(ulong4 ); \
1557 ulong8 _cl_overloadable NAME(ulong8 ); \
1558- ulong16 _cl_overloadable NAME(ulong16 );
1559-#else
1560-#define _CL_DECLARE_FUNC_UG_G(NAME) \
1561- uchar _cl_overloadable NAME(char ); \
1562- uchar2 _cl_overloadable NAME(char2 ); \
1563- uchar3 _cl_overloadable NAME(char3 ); \
1564- uchar4 _cl_overloadable NAME(char4 ); \
1565- uchar8 _cl_overloadable NAME(char8 ); \
1566- uchar16 _cl_overloadable NAME(char16 ); \
1567- ushort _cl_overloadable NAME(short ); \
1568- ushort2 _cl_overloadable NAME(short2 ); \
1569- ushort3 _cl_overloadable NAME(short3 ); \
1570- ushort4 _cl_overloadable NAME(short4 ); \
1571- ushort8 _cl_overloadable NAME(short8 ); \
1572- ushort16 _cl_overloadable NAME(short16 ); \
1573- uint _cl_overloadable NAME(int ); \
1574- uint2 _cl_overloadable NAME(int2 ); \
1575- uint3 _cl_overloadable NAME(int3 ); \
1576- uint4 _cl_overloadable NAME(int4 ); \
1577- uint8 _cl_overloadable NAME(int8 ); \
1578- uint16 _cl_overloadable NAME(int16 ); \
1579- uchar _cl_overloadable NAME(uchar ); \
1580- uchar2 _cl_overloadable NAME(uchar2 ); \
1581- uchar3 _cl_overloadable NAME(uchar3 ); \
1582- uchar4 _cl_overloadable NAME(uchar4 ); \
1583- uchar8 _cl_overloadable NAME(uchar8 ); \
1584- uchar16 _cl_overloadable NAME(uchar16 ); \
1585- ushort _cl_overloadable NAME(ushort ); \
1586- ushort2 _cl_overloadable NAME(ushort2 ); \
1587- ushort3 _cl_overloadable NAME(ushort3 ); \
1588- ushort4 _cl_overloadable NAME(ushort4 ); \
1589- ushort8 _cl_overloadable NAME(ushort8 ); \
1590- ushort16 _cl_overloadable NAME(ushort16); \
1591- uint _cl_overloadable NAME(uint ); \
1592- uint2 _cl_overloadable NAME(uint2 ); \
1593- uint3 _cl_overloadable NAME(uint3 ); \
1594- uint4 _cl_overloadable NAME(uint4 ); \
1595- uint8 _cl_overloadable NAME(uint8 ); \
1596- uint16 _cl_overloadable NAME(uint16 );
1597-#endif
1598-#ifdef cl_khr_int64
1599+ ulong16 _cl_overloadable NAME(ulong16 );)
1600 #define _CL_DECLARE_FUNC_UG_GG(NAME) \
1601 uchar _cl_overloadable NAME(char , char ); \
1602 uchar2 _cl_overloadable NAME(char2 , char2 ); \
1603@@ -1983,12 +1287,13 @@
1604 uint4 _cl_overloadable NAME(int4 , int4 ); \
1605 uint8 _cl_overloadable NAME(int8 , int8 ); \
1606 uint16 _cl_overloadable NAME(int16 , int16 ); \
1607+ __IF_INT64( \
1608 ulong _cl_overloadable NAME(long , long ); \
1609 ulong2 _cl_overloadable NAME(long2 , long2 ); \
1610 ulong3 _cl_overloadable NAME(long3 , long3 ); \
1611 ulong4 _cl_overloadable NAME(long4 , long4 ); \
1612 ulong8 _cl_overloadable NAME(long8 , long8 ); \
1613- ulong16 _cl_overloadable NAME(long16 , long16 ); \
1614+ ulong16 _cl_overloadable NAME(long16 , long16 );) \
1615 uchar _cl_overloadable NAME(uchar , uchar ); \
1616 uchar2 _cl_overloadable NAME(uchar2 , uchar2 ); \
1617 uchar3 _cl_overloadable NAME(uchar3 , uchar3 ); \
1618@@ -2007,59 +1312,20 @@
1619 uint4 _cl_overloadable NAME(uint4 , uint4 ); \
1620 uint8 _cl_overloadable NAME(uint8 , uint8 ); \
1621 uint16 _cl_overloadable NAME(uint16 , uint16 ); \
1622+ __IF_INT64( \
1623 ulong _cl_overloadable NAME(ulong , ulong ); \
1624 ulong2 _cl_overloadable NAME(ulong2 , ulong2 ); \
1625 ulong3 _cl_overloadable NAME(ulong3 , ulong3 ); \
1626 ulong4 _cl_overloadable NAME(ulong4 , ulong4 ); \
1627 ulong8 _cl_overloadable NAME(ulong8 , ulong8 ); \
1628- ulong16 _cl_overloadable NAME(ulong16 , ulong16 );
1629-#else
1630-#define _CL_DECLARE_FUNC_UG_GG(NAME) \
1631- uchar _cl_overloadable NAME(char , char ); \
1632- uchar2 _cl_overloadable NAME(char2 , char2 ); \
1633- uchar3 _cl_overloadable NAME(char3 , char3 ); \
1634- uchar4 _cl_overloadable NAME(char4 , char4 ); \
1635- uchar8 _cl_overloadable NAME(char8 , char8 ); \
1636- uchar16 _cl_overloadable NAME(char16 , char16 ); \
1637- ushort _cl_overloadable NAME(short , short ); \
1638- ushort2 _cl_overloadable NAME(short2 , short2 ); \
1639- ushort3 _cl_overloadable NAME(short3 , short3 ); \
1640- ushort4 _cl_overloadable NAME(short4 , short4 ); \
1641- ushort8 _cl_overloadable NAME(short8 , short8 ); \
1642- ushort16 _cl_overloadable NAME(short16 , short16 ); \
1643- uint _cl_overloadable NAME(int , int ); \
1644- uint2 _cl_overloadable NAME(int2 , int2 ); \
1645- uint3 _cl_overloadable NAME(int3 , int3 ); \
1646- uint4 _cl_overloadable NAME(int4 , int4 ); \
1647- uint8 _cl_overloadable NAME(int8 , int8 ); \
1648- uint16 _cl_overloadable NAME(int16 , int16 ); \
1649- uchar _cl_overloadable NAME(uchar , uchar ); \
1650- uchar2 _cl_overloadable NAME(uchar2 , uchar2 ); \
1651- uchar3 _cl_overloadable NAME(uchar3 , uchar3 ); \
1652- uchar4 _cl_overloadable NAME(uchar4 , uchar4 ); \
1653- uchar8 _cl_overloadable NAME(uchar8 , uchar8 ); \
1654- uchar16 _cl_overloadable NAME(uchar16 , uchar16 ); \
1655- ushort _cl_overloadable NAME(ushort , ushort ); \
1656- ushort2 _cl_overloadable NAME(ushort2 , ushort2 ); \
1657- ushort3 _cl_overloadable NAME(ushort3 , ushort3 ); \
1658- ushort4 _cl_overloadable NAME(ushort4 , ushort4 ); \
1659- ushort8 _cl_overloadable NAME(ushort8 , ushort8 ); \
1660- ushort16 _cl_overloadable NAME(ushort16, ushort16); \
1661- uint _cl_overloadable NAME(uint , uint ); \
1662- uint2 _cl_overloadable NAME(uint2 , uint2 ); \
1663- uint3 _cl_overloadable NAME(uint3 , uint3 ); \
1664- uint4 _cl_overloadable NAME(uint4 , uint4 ); \
1665- uint8 _cl_overloadable NAME(uint8 , uint8 ); \
1666- uint16 _cl_overloadable NAME(uint16 , uint16 );
1667-#endif
1668-#ifdef cl_khr_int64
1669+ ulong16 _cl_overloadable NAME(ulong16 , ulong16 );)
1670 #define _CL_DECLARE_FUNC_LG_GUG(NAME) \
1671- short _cl_overloadable NAME(char , uchar ); \
1672- short2 _cl_overloadable NAME(char2 , uchar2 ); \
1673- short3 _cl_overloadable NAME(char3 , uchar3 ); \
1674- short4 _cl_overloadable NAME(char4 , uchar4 ); \
1675- short8 _cl_overloadable NAME(char8 , uchar8 ); \
1676- short16 _cl_overloadable NAME(char16 , uchar16 ); \
1677+ short _cl_overloadable NAME(char , uchar ); \
1678+ short2 _cl_overloadable NAME(char2 , uchar2 ); \
1679+ short3 _cl_overloadable NAME(char3 , uchar3 ); \
1680+ short4 _cl_overloadable NAME(char4 , uchar4 ); \
1681+ short8 _cl_overloadable NAME(char8 , uchar8 ); \
1682+ short16 _cl_overloadable NAME(char16 , uchar16 ); \
1683 ushort _cl_overloadable NAME(uchar , uchar ); \
1684 ushort2 _cl_overloadable NAME(uchar2 , uchar2 ); \
1685 ushort3 _cl_overloadable NAME(uchar3 , uchar3 ); \
1686@@ -2072,52 +1338,25 @@
1687 uint4 _cl_overloadable NAME(ushort4 , ushort4 ); \
1688 uint8 _cl_overloadable NAME(ushort8 , ushort8 ); \
1689 uint16 _cl_overloadable NAME(ushort16, ushort16); \
1690- int _cl_overloadable NAME(short , ushort ); \
1691- int2 _cl_overloadable NAME(short2 , ushort2 ); \
1692- int3 _cl_overloadable NAME(short3 , ushort3 ); \
1693- int4 _cl_overloadable NAME(short4 , ushort4 ); \
1694- int8 _cl_overloadable NAME(short8 , ushort8 ); \
1695- int16 _cl_overloadable NAME(short16 , ushort16 ); \
1696- long _cl_overloadable NAME(int , uint ); \
1697- long2 _cl_overloadable NAME(int2 , uint2 ); \
1698- long3 _cl_overloadable NAME(int3 , uint3 ); \
1699- long4 _cl_overloadable NAME(int4 , uint4 ); \
1700- long8 _cl_overloadable NAME(int8 , uint8 ); \
1701- long16 _cl_overloadable NAME(int16 , uint16 ); \
1702+ int _cl_overloadable NAME(short , ushort ); \
1703+ int2 _cl_overloadable NAME(short2 , ushort2 ); \
1704+ int3 _cl_overloadable NAME(short3 , ushort3 ); \
1705+ int4 _cl_overloadable NAME(short4 , ushort4 ); \
1706+ int8 _cl_overloadable NAME(short8 , ushort8 ); \
1707+ int16 _cl_overloadable NAME(short16 , ushort16); \
1708+ __IF_INT64( \
1709+ long _cl_overloadable NAME(int , uint ); \
1710+ long2 _cl_overloadable NAME(int2 , uint2 ); \
1711+ long3 _cl_overloadable NAME(int3 , uint3 ); \
1712+ long4 _cl_overloadable NAME(int4 , uint4 ); \
1713+ long8 _cl_overloadable NAME(int8 , uint8 ); \
1714+ long16 _cl_overloadable NAME(int16 , uint16 ); \
1715 ulong _cl_overloadable NAME(uint , uint ); \
1716 ulong2 _cl_overloadable NAME(uint2 , uint2 ); \
1717 ulong3 _cl_overloadable NAME(uint3 , uint3 ); \
1718 ulong4 _cl_overloadable NAME(uint4 , uint4 ); \
1719 ulong8 _cl_overloadable NAME(uint8 , uint8 ); \
1720- ulong16 _cl_overloadable NAME(uint16 , uint16 );
1721-#else
1722-#define _CL_DECLARE_FUNC_LG_GUG(NAME) \
1723- short _cl_overloadable NAME(char , uchar ); \
1724- short2 _cl_overloadable NAME(char2 , uchar2 ); \
1725- short3 _cl_overloadable NAME(char3 , uchar3 ); \
1726- short4 _cl_overloadable NAME(char4 , uchar4 ); \
1727- short8 _cl_overloadable NAME(char8 , uchar8 ); \
1728- short16 _cl_overloadable NAME(char16 , uchar16 ); \
1729- ushort _cl_overloadable NAME(uchar , uchar ); \
1730- ushort2 _cl_overloadable NAME(uchar2 , uchar2 ); \
1731- ushort3 _cl_overloadable NAME(uchar3 , uchar3 ); \
1732- ushort4 _cl_overloadable NAME(uchar4 , uchar4 ); \
1733- ushort8 _cl_overloadable NAME(uchar8 , uchar8 ); \
1734- ushort16 _cl_overloadable NAME(uchar16 , uchar16 ); \
1735- uint _cl_overloadable NAME(ushort , ushort ); \
1736- uint2 _cl_overloadable NAME(ushort2 , ushort2 ); \
1737- uint3 _cl_overloadable NAME(ushort3 , ushort3 ); \
1738- uint4 _cl_overloadable NAME(ushort4 , ushort4 ); \
1739- uint8 _cl_overloadable NAME(ushort8 , ushort8 ); \
1740- uint16 _cl_overloadable NAME(ushort16, ushort16); \
1741- int _cl_overloadable NAME(short , ushort ); \
1742- int2 _cl_overloadable NAME(short2 , ushort2 ); \
1743- int3 _cl_overloadable NAME(short3 , ushort3 ); \
1744- int4 _cl_overloadable NAME(short4 , ushort4 ); \
1745- int8 _cl_overloadable NAME(short8 , ushort8 ); \
1746- int16 _cl_overloadable NAME(short16 , ushort16 );
1747-#endif
1748-#ifdef cl_khr_int64
1749+ ulong16 _cl_overloadable NAME(uint16 , uint16 );)
1750 #define _CL_DECLARE_FUNC_I_IG(NAME) \
1751 int _cl_overloadable NAME(char ); \
1752 int _cl_overloadable NAME(char2 ); \
1753@@ -2137,33 +1376,13 @@
1754 int _cl_overloadable NAME(int4 ); \
1755 int _cl_overloadable NAME(int8 ); \
1756 int _cl_overloadable NAME(int16 ); \
1757+ __IF_INT64( \
1758 int _cl_overloadable NAME(long ); \
1759 int _cl_overloadable NAME(long2 ); \
1760 int _cl_overloadable NAME(long3 ); \
1761 int _cl_overloadable NAME(long4 ); \
1762 int _cl_overloadable NAME(long8 ); \
1763- int _cl_overloadable NAME(long16 );
1764-#else
1765-#define _CL_DECLARE_FUNC_I_IG(NAME) \
1766- int _cl_overloadable NAME(char ); \
1767- int _cl_overloadable NAME(char2 ); \
1768- int _cl_overloadable NAME(char3 ); \
1769- int _cl_overloadable NAME(char4 ); \
1770- int _cl_overloadable NAME(char8 ); \
1771- int _cl_overloadable NAME(char16 ); \
1772- int _cl_overloadable NAME(short ); \
1773- int _cl_overloadable NAME(short2 ); \
1774- int _cl_overloadable NAME(short3 ); \
1775- int _cl_overloadable NAME(short4 ); \
1776- int _cl_overloadable NAME(short8 ); \
1777- int _cl_overloadable NAME(short16); \
1778- int _cl_overloadable NAME(int ); \
1779- int _cl_overloadable NAME(int2 ); \
1780- int _cl_overloadable NAME(int3 ); \
1781- int _cl_overloadable NAME(int4 ); \
1782- int _cl_overloadable NAME(int8 ); \
1783- int _cl_overloadable NAME(int16 );
1784-#endif
1785+ int _cl_overloadable NAME(long16 );)
1786 #define _CL_DECLARE_FUNC_J_JJ(NAME) \
1787 int _cl_overloadable NAME(int , int ); \
1788 int2 _cl_overloadable NAME(int2 , int2 ); \
1789
1790=== modified file 'lib/kernel/Makefile.am'
1791--- lib/kernel/Makefile.am 2011-11-08 13:38:46 +0000
1792+++ lib/kernel/Makefile.am 2011-11-14 18:40:38 +0000
1793@@ -42,5 +42,5 @@
1794 .ll.o:
1795 $(LLVM_AS) -o $@ $<
1796
1797-$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h templates.h
1798+$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h
1799 $(libkernel_a_SOURCES:.cl=.o): $(top_srcdir)/include/_kernel.h templates.h
1800
1801=== modified file 'lib/kernel/arm/Makefile.am'
1802--- lib/kernel/arm/Makefile.am 2011-11-09 15:30:32 +0000
1803+++ lib/kernel/arm/Makefile.am 2011-11-14 18:40:38 +0000
1804@@ -47,5 +47,5 @@
1805 .c.o:
1806 $(CLANG) $(AM_CPPFLAGS) $(CLANGFLAGS) $(ARM_CLANG_FLAGS) -c -emit-llvm -include $(top_srcdir)/include/_kernel.h -o $@ $<
1807
1808-$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h ../templates.h
1809+$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h
1810 $(libkernel_a_SOURCES:.cl=.o): $(top_srcdir)/include/_kernel.h ../templates.h
1811
1812=== modified file 'lib/kernel/sources.mk'
1813--- lib/kernel/sources.mk 2011-11-07 18:06:12 +0000
1814+++ lib/kernel/sources.mk 2011-11-14 18:40:38 +0000
1815@@ -1,5 +1,4 @@
1816-libkernel_a_SOURCES = templates.h \
1817- barrier.c \
1818+libkernel_a_SOURCES = barrier.c \
1819 get_global_size.c \
1820 get_global_id.c \
1821 get_local_id.c \
1822
1823=== modified file 'lib/kernel/tce/Makefile.am'
1824--- lib/kernel/tce/Makefile.am 2011-11-07 18:06:12 +0000
1825+++ lib/kernel/tce/Makefile.am 2011-11-14 18:40:38 +0000
1826@@ -42,5 +42,5 @@
1827 .c.o:
1828 $(CLANG) $(AM_CPPFLAGS) $(CLANGFLAGS) -ccc-host-triple tce-tut-llvm -c -emit-llvm -include $(top_srcdir)/include/_kernel.h -o $@ $<
1829
1830-$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h ../templates.h
1831+$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h
1832 $(libkernel_a_SOURCES:.cl=.o): $(top_srcdir)/include/_kernel.h ../templates.h
1833
1834=== modified file 'lib/kernel/templates.h'
1835--- lib/kernel/templates.h 2011-11-05 00:10:25 +0000
1836+++ lib/kernel/templates.h 2011-11-14 18:40:38 +0000
1837@@ -27,41 +27,28 @@
1838 { \
1839 return (VTYPE)(NAME(a.LO), NAME(a.HI)); \
1840 }
1841-#ifdef cl_khr_fp64
1842 #define DEFINE_BUILTIN_V_V(NAME) \
1843 float __attribute__ ((overloadable)) \
1844 NAME(float a) \
1845 { \
1846 return __builtin_##NAME##f(a); \
1847 } \
1848+ IMPLEMENT_BUILTIN_V_V(NAME, float2 , lo, hi) \
1849+ IMPLEMENT_BUILTIN_V_V(NAME, float4 , lo, hi) \
1850+ IMPLEMENT_BUILTIN_V_V(NAME, float3 , lo, s2) \
1851+ IMPLEMENT_BUILTIN_V_V(NAME, float8 , lo, hi) \
1852+ IMPLEMENT_BUILTIN_V_V(NAME, float16 , lo, hi) \
1853+ __IF_FP64( \
1854 double __attribute__ ((overloadable)) \
1855 NAME(double a) \
1856 { \
1857 return __builtin_##NAME(a); \
1858 } \
1859- IMPLEMENT_BUILTIN_V_V(NAME, float2 , lo, hi) \
1860- IMPLEMENT_BUILTIN_V_V(NAME, float4 , lo, hi) \
1861- IMPLEMENT_BUILTIN_V_V(NAME, float3 , lo, s2) \
1862- IMPLEMENT_BUILTIN_V_V(NAME, float8 , lo, hi) \
1863- IMPLEMENT_BUILTIN_V_V(NAME, float16 , lo, hi) \
1864 IMPLEMENT_BUILTIN_V_V(NAME, double2 , lo, hi) \
1865 IMPLEMENT_BUILTIN_V_V(NAME, double3 , lo, s2) \
1866 IMPLEMENT_BUILTIN_V_V(NAME, double4 , lo, hi) \
1867 IMPLEMENT_BUILTIN_V_V(NAME, double8 , lo, hi) \
1868- IMPLEMENT_BUILTIN_V_V(NAME, double16, lo, hi)
1869-#else
1870-#define DEFINE_BUILTIN_V_V(NAME) \
1871- float __attribute__ ((overloadable)) \
1872- NAME(float a) \
1873- { \
1874- return __builtin_##NAME##f(a); \
1875- } \
1876- IMPLEMENT_BUILTIN_V_V(NAME, float2 , lo, hi) \
1877- IMPLEMENT_BUILTIN_V_V(NAME, float4 , lo, hi) \
1878- IMPLEMENT_BUILTIN_V_V(NAME, float3 , lo, s2) \
1879- IMPLEMENT_BUILTIN_V_V(NAME, float8 , lo, hi) \
1880- IMPLEMENT_BUILTIN_V_V(NAME, float16 , lo, hi)
1881-#endif
1882+ IMPLEMENT_BUILTIN_V_V(NAME, double16, lo, hi))
1883
1884 #define IMPLEMENT_BUILTIN_V_VV(NAME, VTYPE, LO, HI) \
1885 VTYPE __attribute__ ((overloadable)) \
1886@@ -69,41 +56,28 @@
1887 { \
1888 return (VTYPE)(NAME(a.LO, b.LO), NAME(a.HI, b.HI)); \
1889 }
1890-#ifdef cl_khr_fp64
1891 #define DEFINE_BUILTIN_V_VV(NAME) \
1892 float __attribute__ ((overloadable)) \
1893 NAME(float a, float b) \
1894 { \
1895 return __builtin_##NAME##f(a, b); \
1896 } \
1897+ IMPLEMENT_BUILTIN_V_VV(NAME, float2 , lo, hi) \
1898+ IMPLEMENT_BUILTIN_V_VV(NAME, float3 , lo, s2) \
1899+ IMPLEMENT_BUILTIN_V_VV(NAME, float4 , lo, hi) \
1900+ IMPLEMENT_BUILTIN_V_VV(NAME, float8 , lo, hi) \
1901+ IMPLEMENT_BUILTIN_V_VV(NAME, float16 , lo, hi) \
1902+ __IF_FP64( \
1903 double __attribute__ ((overloadable)) \
1904 NAME(double a, double b) \
1905 { \
1906 return __builtin_##NAME(a, b); \
1907 } \
1908- IMPLEMENT_BUILTIN_V_VV(NAME, float2 , lo, hi) \
1909- IMPLEMENT_BUILTIN_V_VV(NAME, float3 , lo, s2) \
1910- IMPLEMENT_BUILTIN_V_VV(NAME, float4 , lo, hi) \
1911- IMPLEMENT_BUILTIN_V_VV(NAME, float8 , lo, hi) \
1912- IMPLEMENT_BUILTIN_V_VV(NAME, float16 , lo, hi) \
1913 IMPLEMENT_BUILTIN_V_VV(NAME, double2 , lo, hi) \
1914 IMPLEMENT_BUILTIN_V_VV(NAME, double3 , lo, s2) \
1915 IMPLEMENT_BUILTIN_V_VV(NAME, double4 , lo, hi) \
1916 IMPLEMENT_BUILTIN_V_VV(NAME, double8 , lo, hi) \
1917- IMPLEMENT_BUILTIN_V_VV(NAME, double16, lo, hi)
1918-#else
1919-#define DEFINE_BUILTIN_V_VV(NAME) \
1920- float __attribute__ ((overloadable)) \
1921- NAME(float a, float b) \
1922- { \
1923- return __builtin_##NAME##f(a, b); \
1924- } \
1925- IMPLEMENT_BUILTIN_V_VV(NAME, float2 , lo, hi) \
1926- IMPLEMENT_BUILTIN_V_VV(NAME, float3 , lo, s2) \
1927- IMPLEMENT_BUILTIN_V_VV(NAME, float4 , lo, hi) \
1928- IMPLEMENT_BUILTIN_V_VV(NAME, float8 , lo, hi) \
1929- IMPLEMENT_BUILTIN_V_VV(NAME, float16 , lo, hi)
1930-#endif
1931+ IMPLEMENT_BUILTIN_V_VV(NAME, double16, lo, hi))
1932
1933 #define IMPLEMENT_BUILTIN_V_VVV(NAME, VTYPE, LO, HI) \
1934 VTYPE __attribute__ ((overloadable)) \
1935@@ -111,41 +85,28 @@
1936 { \
1937 return (VTYPE)(NAME(a.LO, b.LO, c.LO), NAME(a.HI, b.HI, c.HI)); \
1938 }
1939-#ifdef cl_khr_fp64
1940 #define DEFINE_BUILTIN_V_VVV(NAME) \
1941 float __attribute__ ((overloadable)) \
1942 NAME(float a, float b, float c) \
1943 { \
1944 return __builtin_##NAME##f(a, b, c); \
1945 } \
1946+ IMPLEMENT_BUILTIN_V_VVV(NAME, float2 , lo, hi) \
1947+ IMPLEMENT_BUILTIN_V_VVV(NAME, float3 , lo, s2) \
1948+ IMPLEMENT_BUILTIN_V_VVV(NAME, float4 , lo, hi) \
1949+ IMPLEMENT_BUILTIN_V_VVV(NAME, float8 , lo, hi) \
1950+ IMPLEMENT_BUILTIN_V_VVV(NAME, float16 , lo, hi) \
1951+ __IF_FP64( \
1952 double __attribute__ ((overloadable)) \
1953 NAME(double a, double b, double c) \
1954 { \
1955 return __builtin_##NAME(a, b, c); \
1956 } \
1957- IMPLEMENT_BUILTIN_V_VVV(NAME, float2 , lo, hi) \
1958- IMPLEMENT_BUILTIN_V_VVV(NAME, float3 , lo, s2) \
1959- IMPLEMENT_BUILTIN_V_VVV(NAME, float4 , lo, hi) \
1960- IMPLEMENT_BUILTIN_V_VVV(NAME, float8 , lo, hi) \
1961- IMPLEMENT_BUILTIN_V_VVV(NAME, float16 , lo, hi) \
1962 IMPLEMENT_BUILTIN_V_VVV(NAME, double2 , lo, hi) \
1963 IMPLEMENT_BUILTIN_V_VVV(NAME, double3 , lo, s2) \
1964 IMPLEMENT_BUILTIN_V_VVV(NAME, double4 , lo, hi) \
1965 IMPLEMENT_BUILTIN_V_VVV(NAME, double8 , lo, hi) \
1966- IMPLEMENT_BUILTIN_V_VVV(NAME, double16, lo, hi)
1967-#else
1968-#define DEFINE_BUILTIN_V_VVV(NAME) \
1969- float __attribute__ ((overloadable)) \
1970- NAME(float a, float b, float c) \
1971- { \
1972- return __builtin_##NAME##f(a, b, c); \
1973- } \
1974- IMPLEMENT_BUILTIN_V_VVV(NAME, float2 , lo, hi) \
1975- IMPLEMENT_BUILTIN_V_VVV(NAME, float3 , lo, s2) \
1976- IMPLEMENT_BUILTIN_V_VVV(NAME, float4 , lo, hi) \
1977- IMPLEMENT_BUILTIN_V_VVV(NAME, float8 , lo, hi) \
1978- IMPLEMENT_BUILTIN_V_VVV(NAME, float16 , lo, hi)
1979-#endif
1980+ IMPLEMENT_BUILTIN_V_VVV(NAME, double16, lo, hi))
1981
1982 #define IMPLEMENT_BUILTIN_V_U(NAME, VTYPE, UTYPE, LO, HI) \
1983 VTYPE __attribute__ ((overloadable)) \
1984@@ -153,41 +114,28 @@
1985 { \
1986 return (VTYPE)(NAME(a.LO), NAME(a.HI)); \
1987 }
1988-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
1989 #define DEFINE_BUILTIN_V_U(NAME) \
1990 float __attribute__ ((overloadable)) \
1991 NAME(uint a) \
1992 { \
1993 return __builtin_##NAME##f(a); \
1994 } \
1995+ IMPLEMENT_BUILTIN_V_U(NAME, float2 , uint2 , lo, hi) \
1996+ IMPLEMENT_BUILTIN_V_U(NAME, float3 , uint3 , lo, s2) \
1997+ IMPLEMENT_BUILTIN_V_U(NAME, float4 , uint4 , lo, hi) \
1998+ IMPLEMENT_BUILTIN_V_U(NAME, float8 , uint8 , lo, hi) \
1999+ IMPLEMENT_BUILTIN_V_U(NAME, float16 , uint16 , lo, hi) \
2000+ __IF_FP64( \
2001 double __attribute__ ((overloadable)) \
2002 NAME(ulong a) \
2003 { \
2004 return __builtin_##NAME(a); \
2005 } \
2006- IMPLEMENT_BUILTIN_V_U(NAME, float2 , uint2 , lo, hi) \
2007- IMPLEMENT_BUILTIN_V_U(NAME, float3 , uint3 , lo, s2) \
2008- IMPLEMENT_BUILTIN_V_U(NAME, float4 , uint4 , lo, hi) \
2009- IMPLEMENT_BUILTIN_V_U(NAME, float8 , uint8 , lo, hi) \
2010- IMPLEMENT_BUILTIN_V_U(NAME, float16 , uint16 , lo, hi) \
2011 IMPLEMENT_BUILTIN_V_U(NAME, double2 , ulong2 , lo, hi) \
2012 IMPLEMENT_BUILTIN_V_U(NAME, double3 , ulong3 , lo, s2) \
2013 IMPLEMENT_BUILTIN_V_U(NAME, double4 , ulong4 , lo, hi) \
2014 IMPLEMENT_BUILTIN_V_U(NAME, double8 , ulong8 , lo, hi) \
2015- IMPLEMENT_BUILTIN_V_U(NAME, double16, ulong16, lo, hi)
2016-#else
2017-#define DEFINE_BUILTIN_V_U(NAME) \
2018- float __attribute__ ((overloadable)) \
2019- NAME(uint a) \
2020- { \
2021- return __builtin_##NAME##f(a); \
2022- } \
2023- IMPLEMENT_BUILTIN_V_U(NAME, float2 , uint2 , lo, hi) \
2024- IMPLEMENT_BUILTIN_V_U(NAME, float3 , uint3 , lo, s2) \
2025- IMPLEMENT_BUILTIN_V_U(NAME, float4 , uint4 , lo, hi) \
2026- IMPLEMENT_BUILTIN_V_U(NAME, float8 , uint8 , lo, hi) \
2027- IMPLEMENT_BUILTIN_V_U(NAME, float16 , uint16 , lo, hi)
2028-#endif
2029+ IMPLEMENT_BUILTIN_V_U(NAME, double16, ulong16, lo, hi))
2030
2031 #define IMPLEMENT_BUILTIN_J_VV(NAME, VTYPE, JTYPE, LO, HI) \
2032 JTYPE __attribute__ ((overloadable)) \
2033@@ -195,58 +143,29 @@
2034 { \
2035 return (JTYPE)(NAME(a.LO, b.LO), NAME(a.HI, b.HI)); \
2036 }
2037-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
2038 #define DEFINE_BUILTIN_J_VV(NAME) \
2039 int __attribute__ ((overloadable)) \
2040 NAME(float a, float b) \
2041 { \
2042 return __builtin_##NAME##f(a, b); \
2043 } \
2044- int __attribute__ ((overloadable)) \
2045- NAME(double a, double b) \
2046- { \
2047- return __builtin_##NAME(a, b); \
2048- } \
2049 IMPLEMENT_BUILTIN_J_VV(NAME, float2 , int2 , lo, hi) \
2050 IMPLEMENT_BUILTIN_J_VV(NAME, float3 , int3 , lo, s2) \
2051 IMPLEMENT_BUILTIN_J_VV(NAME, float4 , int4 , lo, hi) \
2052 IMPLEMENT_BUILTIN_J_VV(NAME, float8 , int8 , lo, hi) \
2053 IMPLEMENT_BUILTIN_J_VV(NAME, float16 , int16 , lo, hi) \
2054+ __IF_FP64( \
2055+ int __attribute__ ((overloadable)) \
2056+ NAME(double a, double b) \
2057+ { \
2058+ return __builtin_##NAME(a, b); \
2059+ } \
2060+ __IF_INT64( \
2061 IMPLEMENT_BUILTIN_J_VV(NAME, double2 , long2 , lo, hi) \
2062 IMPLEMENT_BUILTIN_J_VV(NAME, double3 , long3 , lo, s2) \
2063 IMPLEMENT_BUILTIN_J_VV(NAME, double4 , long4 , lo, hi) \
2064 IMPLEMENT_BUILTIN_J_VV(NAME, double8 , long8 , lo, hi) \
2065- IMPLEMENT_BUILTIN_J_VV(NAME, double16, long16, lo, hi)
2066-#elif defined(cl_khr_fp64)
2067-#define DEFINE_BUILTIN_J_VV(NAME) \
2068- int __attribute__ ((overloadable)) \
2069- NAME(float a, float b) \
2070- { \
2071- return __builtin_##NAME##f(a, b); \
2072- } \
2073- int __attribute__ ((overloadable)) \
2074- NAME(double a, double b) \
2075- { \
2076- return __builtin_##NAME(a, b); \
2077- } \
2078- IMPLEMENT_BUILTIN_J_VV(NAME, float2 , int2 , lo, hi) \
2079- IMPLEMENT_BUILTIN_J_VV(NAME, float3 , int3 , lo, s2) \
2080- IMPLEMENT_BUILTIN_J_VV(NAME, float4 , int4 , lo, hi) \
2081- IMPLEMENT_BUILTIN_J_VV(NAME, float8 , int8 , lo, hi) \
2082- IMPLEMENT_BUILTIN_J_VV(NAME, float16 , int16 , lo, hi)
2083-#else
2084-#define DEFINE_BUILTIN_J_VV(NAME) \
2085- int __attribute__ ((overloadable)) \
2086- NAME(float a, float b) \
2087- { \
2088- return __builtin_##NAME##f(a, b); \
2089- } \
2090- IMPLEMENT_BUILTIN_J_VV(NAME, float2 , int2 , lo, hi) \
2091- IMPLEMENT_BUILTIN_J_VV(NAME, float3 , int3 , lo, s2) \
2092- IMPLEMENT_BUILTIN_J_VV(NAME, float4 , int4 , lo, hi) \
2093- IMPLEMENT_BUILTIN_J_VV(NAME, float8 , int8 , lo, hi) \
2094- IMPLEMENT_BUILTIN_J_VV(NAME, float16 , int16 , lo, hi)
2095-#endif
2096+ IMPLEMENT_BUILTIN_J_VV(NAME, double16, long16, lo, hi)))
2097
2098 #define IMPLEMENT_BUILTIN_V_VJ(NAME, VTYPE, JTYPE, LO, HI) \
2099 VTYPE __attribute__ ((overloadable)) \
2100@@ -254,41 +173,28 @@
2101 { \
2102 return (VTYPE)(NAME(a.LO, b.LO), NAME(a.HI, b.HI)); \
2103 }
2104-#ifdef cl_khr_fp64
2105 #define DEFINE_BUILTIN_V_VJ(NAME) \
2106 float __attribute__ ((overloadable)) \
2107 NAME(float a, int b) \
2108 { \
2109 return __builtin_##NAME##f(a, b); \
2110 } \
2111+ IMPLEMENT_BUILTIN_V_VJ(NAME, float2 , int2 , lo, hi) \
2112+ IMPLEMENT_BUILTIN_V_VJ(NAME, float3 , int3 , lo, s2) \
2113+ IMPLEMENT_BUILTIN_V_VJ(NAME, float4 , int4 , lo, hi) \
2114+ IMPLEMENT_BUILTIN_V_VJ(NAME, float8 , int8 , lo, hi) \
2115+ IMPLEMENT_BUILTIN_V_VJ(NAME, float16 , int16, lo, hi) \
2116+ __IF_FP64( \
2117 double __attribute__ ((overloadable)) \
2118 NAME(double a, int b) \
2119 { \
2120 return __builtin_##NAME(a, b); \
2121 } \
2122- IMPLEMENT_BUILTIN_V_VJ(NAME, float2 , int2 , lo, hi) \
2123- IMPLEMENT_BUILTIN_V_VJ(NAME, float3 , int3 , lo, s2) \
2124- IMPLEMENT_BUILTIN_V_VJ(NAME, float4 , int4 , lo, hi) \
2125- IMPLEMENT_BUILTIN_V_VJ(NAME, float8 , int8 , lo, hi) \
2126- IMPLEMENT_BUILTIN_V_VJ(NAME, float16 , int16, lo, hi) \
2127 IMPLEMENT_BUILTIN_V_VJ(NAME, double2 , int2 , lo, hi) \
2128 IMPLEMENT_BUILTIN_V_VJ(NAME, double3 , int3 , lo, s2) \
2129 IMPLEMENT_BUILTIN_V_VJ(NAME, double4 , int4 , lo, hi) \
2130 IMPLEMENT_BUILTIN_V_VJ(NAME, double8 , int8 , lo, hi) \
2131- IMPLEMENT_BUILTIN_V_VJ(NAME, double16, int16, lo, hi)
2132-#else
2133-#define DEFINE_BUILTIN_V_VJ(NAME) \
2134- float __attribute__ ((overloadable)) \
2135- NAME(float a, int b) \
2136- { \
2137- return __builtin_##NAME##f(a, b); \
2138- } \
2139- IMPLEMENT_BUILTIN_V_VJ(NAME, float2 , int2 , lo, hi) \
2140- IMPLEMENT_BUILTIN_V_VJ(NAME, float3 , int3 , lo, s2) \
2141- IMPLEMENT_BUILTIN_V_VJ(NAME, float4 , int4 , lo, hi) \
2142- IMPLEMENT_BUILTIN_V_VJ(NAME, float8 , int8 , lo, hi) \
2143- IMPLEMENT_BUILTIN_V_VJ(NAME, float16 , int16, lo, hi)
2144-#endif
2145+ IMPLEMENT_BUILTIN_V_VJ(NAME, double16, int16, lo, hi))
2146
2147 #define IMPLEMENT_BUILTIN_V_VI(NAME, VTYPE, ITYPE, LO, HI) \
2148 VTYPE __attribute__ ((overloadable)) \
2149@@ -296,26 +202,18 @@
2150 { \
2151 return (VTYPE)(NAME(a.LO, b), NAME(a.HI, b)); \
2152 }
2153-#ifdef cl_khr_fp64
2154 #define DEFINE_BUILTIN_V_VI(NAME) \
2155 IMPLEMENT_BUILTIN_V_VI(NAME, float2 , int, lo, hi) \
2156 IMPLEMENT_BUILTIN_V_VI(NAME, float3 , int, lo, s2) \
2157 IMPLEMENT_BUILTIN_V_VI(NAME, float4 , int, lo, hi) \
2158 IMPLEMENT_BUILTIN_V_VI(NAME, float8 , int, lo, hi) \
2159 IMPLEMENT_BUILTIN_V_VI(NAME, float16 , int, lo, hi) \
2160+ __IF_FP64( \
2161 IMPLEMENT_BUILTIN_V_VI(NAME, double2 , int, lo, hi) \
2162 IMPLEMENT_BUILTIN_V_VI(NAME, double3 , int, lo, s2) \
2163 IMPLEMENT_BUILTIN_V_VI(NAME, double4 , int, lo, hi) \
2164 IMPLEMENT_BUILTIN_V_VI(NAME, double8 , int, lo, hi) \
2165- IMPLEMENT_BUILTIN_V_VI(NAME, double16, int, lo, hi)
2166-#else
2167-#define DEFINE_BUILTIN_V_VI(NAME) \
2168- IMPLEMENT_BUILTIN_V_VI(NAME, float2 , int, lo, hi) \
2169- IMPLEMENT_BUILTIN_V_VI(NAME, float3 , int, lo, s2) \
2170- IMPLEMENT_BUILTIN_V_VI(NAME, float4 , int, lo, hi) \
2171- IMPLEMENT_BUILTIN_V_VI(NAME, float8 , int, lo, hi) \
2172- IMPLEMENT_BUILTIN_V_VI(NAME, float16 , int, lo, hi)
2173-#endif
2174+ IMPLEMENT_BUILTIN_V_VI(NAME, double16, int, lo, hi))
2175
2176 #define IMPLEMENT_BUILTIN_J_V(NAME, JTYPE, VTYPE, LO, HI) \
2177 JTYPE __attribute__ ((overloadable)) \
2178@@ -323,41 +221,28 @@
2179 { \
2180 return (JTYPE)(NAME(a.LO), NAME(a.HI)); \
2181 }
2182-#ifdef cl_khr_fp64
2183 #define DEFINE_BUILTIN_J_V(NAME) \
2184 int __attribute__ ((overloadable)) \
2185 NAME(float a) \
2186 { \
2187 return __builtin_##NAME##f(a); \
2188 } \
2189- int __attribute__ ((overloadable)) \
2190- NAME(double a) \
2191- { \
2192- return __builtin_##NAME(a); \
2193- } \
2194 IMPLEMENT_BUILTIN_J_V(NAME, int2 , float2 , lo, hi) \
2195 IMPLEMENT_BUILTIN_J_V(NAME, int3 , float3 , lo, s2) \
2196 IMPLEMENT_BUILTIN_J_V(NAME, int4 , float4 , lo, hi) \
2197 IMPLEMENT_BUILTIN_J_V(NAME, int8 , float8 , lo, hi) \
2198 IMPLEMENT_BUILTIN_J_V(NAME, int16, float16 , lo, hi) \
2199+ __IF_FP64( \
2200+ int __attribute__ ((overloadable)) \
2201+ NAME(double a) \
2202+ { \
2203+ return __builtin_##NAME(a); \
2204+ } \
2205 IMPLEMENT_BUILTIN_J_V(NAME, int2 , double2 , lo, hi) \
2206 IMPLEMENT_BUILTIN_J_V(NAME, int3 , double3 , lo, s2) \
2207 IMPLEMENT_BUILTIN_J_V(NAME, int4 , double4 , lo, hi) \
2208 IMPLEMENT_BUILTIN_J_V(NAME, int8 , double8 , lo, hi) \
2209- IMPLEMENT_BUILTIN_J_V(NAME, int16, double16, lo, hi)
2210-#else
2211-#define DEFINE_BUILTIN_J_V(NAME) \
2212- int __attribute__ ((overloadable)) \
2213- NAME(float a) \
2214- { \
2215- return __builtin_##NAME##f(a); \
2216- } \
2217- IMPLEMENT_BUILTIN_J_V(NAME, int2 , float2 , lo, hi) \
2218- IMPLEMENT_BUILTIN_J_V(NAME, int3 , float3 , lo, s2) \
2219- IMPLEMENT_BUILTIN_J_V(NAME, int4 , float4 , lo, hi) \
2220- IMPLEMENT_BUILTIN_J_V(NAME, int8 , float8 , lo, hi) \
2221- IMPLEMENT_BUILTIN_J_V(NAME, int16, float16 , lo, hi)
2222-#endif
2223+ IMPLEMENT_BUILTIN_J_V(NAME, int16, double16, lo, hi))
2224
2225 #define IMPLEMENT_BUILTIN_K_V(NAME, JTYPE, VTYPE, LO, HI) \
2226 JTYPE __attribute__ ((overloadable)) \
2227@@ -365,41 +250,31 @@
2228 { \
2229 return (JTYPE)(NAME(a.LO), NAME(a.HI)); \
2230 }
2231-#ifdef cl_khr_fp64
2232 #define DEFINE_BUILTIN_K_V(NAME) \
2233 int __attribute__ ((overloadable)) \
2234 NAME(float a) \
2235 { \
2236 return __builtin_##NAME##f(a); \
2237 } \
2238- int __attribute__ ((overloadable)) \
2239- NAME(double a) \
2240- { \
2241- return __builtin_##NAME(a); \
2242- } \
2243 IMPLEMENT_BUILTIN_K_V(NAME, int2 , float2 , lo, hi) \
2244 IMPLEMENT_BUILTIN_K_V(NAME, int3 , float3 , lo, s2) \
2245 IMPLEMENT_BUILTIN_K_V(NAME, int4 , float4 , lo, hi) \
2246 IMPLEMENT_BUILTIN_K_V(NAME, int8 , float8 , lo, hi) \
2247 IMPLEMENT_BUILTIN_K_V(NAME, int16 , float16 , lo, hi) \
2248+ __IF_FP64( \
2249+ int __attribute__ ((overloadable)) \
2250+ NAME(double a) \
2251+ { \
2252+ return __builtin_##NAME(a); \
2253+ } \
2254+ __IF_INT64( \
2255 IMPLEMENT_BUILTIN_K_V(NAME, long2 , double2 , lo, hi) \
2256 IMPLEMENT_BUILTIN_K_V(NAME, long3 , double3 , lo, s2) \
2257 IMPLEMENT_BUILTIN_K_V(NAME, long4 , double4 , lo, hi) \
2258 IMPLEMENT_BUILTIN_K_V(NAME, long8 , double8 , lo, hi) \
2259- IMPLEMENT_BUILTIN_K_V(NAME, long16, double16, lo, hi)
2260-#else
2261-#define DEFINE_BUILTIN_K_V(NAME) \
2262- int __attribute__ ((overloadable)) \
2263- NAME(float a) \
2264- { \
2265- return __builtin_##NAME##f(a); \
2266- } \
2267- IMPLEMENT_BUILTIN_K_V(NAME, int2 , float2 , lo, hi) \
2268- IMPLEMENT_BUILTIN_K_V(NAME, int3 , float3 , lo, s2) \
2269- IMPLEMENT_BUILTIN_K_V(NAME, int4 , float4 , lo, hi) \
2270- IMPLEMENT_BUILTIN_K_V(NAME, int8 , float8 , lo, hi) \
2271- IMPLEMENT_BUILTIN_K_V(NAME, int16, float16 , lo, hi)
2272-#endif
2273+ IMPLEMENT_BUILTIN_K_V(NAME, long16, double16, lo, hi)))
2274+
2275+/******************************************************************************/
2276
2277 #define IMPLEMENT_EXPR_V_V(NAME, EXPR, VTYPE, STYPE) \
2278 VTYPE __attribute__ ((overloadable)) \
2279@@ -409,7 +284,6 @@
2280 typedef STYPE stype; \
2281 return EXPR; \
2282 }
2283-#ifdef cl_khr_fp64
2284 #define DEFINE_EXPR_V_V(NAME, EXPR) \
2285 IMPLEMENT_EXPR_V_V(NAME, EXPR, float , float ) \
2286 IMPLEMENT_EXPR_V_V(NAME, EXPR, float2 , float ) \
2287@@ -417,21 +291,13 @@
2288 IMPLEMENT_EXPR_V_V(NAME, EXPR, float4 , float ) \
2289 IMPLEMENT_EXPR_V_V(NAME, EXPR, float8 , float ) \
2290 IMPLEMENT_EXPR_V_V(NAME, EXPR, float16 , float ) \
2291+ __IF_FP64( \
2292 IMPLEMENT_EXPR_V_V(NAME, EXPR, double , double) \
2293 IMPLEMENT_EXPR_V_V(NAME, EXPR, double2 , double) \
2294 IMPLEMENT_EXPR_V_V(NAME, EXPR, double3 , double) \
2295 IMPLEMENT_EXPR_V_V(NAME, EXPR, double4 , double) \
2296 IMPLEMENT_EXPR_V_V(NAME, EXPR, double8 , double) \
2297- IMPLEMENT_EXPR_V_V(NAME, EXPR, double16, double)
2298-#else
2299-#define DEFINE_EXPR_V_V(NAME, EXPR) \
2300- IMPLEMENT_EXPR_V_V(NAME, EXPR, float , float ) \
2301- IMPLEMENT_EXPR_V_V(NAME, EXPR, float2 , float ) \
2302- IMPLEMENT_EXPR_V_V(NAME, EXPR, float3 , float ) \
2303- IMPLEMENT_EXPR_V_V(NAME, EXPR, float4 , float ) \
2304- IMPLEMENT_EXPR_V_V(NAME, EXPR, float8 , float ) \
2305- IMPLEMENT_EXPR_V_V(NAME, EXPR, float16 , float )
2306-#endif
2307+ IMPLEMENT_EXPR_V_V(NAME, EXPR, double16, double))
2308
2309 #define IMPLEMENT_EXPR_V_VV(NAME, EXPR, VTYPE, STYPE, JTYPE) \
2310 VTYPE __attribute__ ((overloadable)) \
2311@@ -442,7 +308,6 @@
2312 typedef JTYPE jtype; \
2313 return EXPR; \
2314 }
2315-#ifdef cl_khr_fp64
2316 #define DEFINE_EXPR_V_VV(NAME, EXPR) \
2317 IMPLEMENT_EXPR_V_VV(NAME, EXPR, float , float , int ) \
2318 IMPLEMENT_EXPR_V_VV(NAME, EXPR, float2 , float , int2 ) \
2319@@ -450,21 +315,13 @@
2320 IMPLEMENT_EXPR_V_VV(NAME, EXPR, float4 , float , int4 ) \
2321 IMPLEMENT_EXPR_V_VV(NAME, EXPR, float8 , float , int8 ) \
2322 IMPLEMENT_EXPR_V_VV(NAME, EXPR, float16 , float , int16 ) \
2323+ __IF_FP64( \
2324 IMPLEMENT_EXPR_V_VV(NAME, EXPR, double , double, long ) \
2325 IMPLEMENT_EXPR_V_VV(NAME, EXPR, double2 , double, long2 ) \
2326 IMPLEMENT_EXPR_V_VV(NAME, EXPR, double3 , double, long3 ) \
2327 IMPLEMENT_EXPR_V_VV(NAME, EXPR, double4 , double, long4 ) \
2328 IMPLEMENT_EXPR_V_VV(NAME, EXPR, double8 , double, long8 ) \
2329- IMPLEMENT_EXPR_V_VV(NAME, EXPR, double16, double, long16)
2330-#else
2331-#define DEFINE_EXPR_V_VV(NAME, EXPR) \
2332- IMPLEMENT_EXPR_V_VV(NAME, EXPR, float , float , int ) \
2333- IMPLEMENT_EXPR_V_VV(NAME, EXPR, float2 , float , int2 ) \
2334- IMPLEMENT_EXPR_V_VV(NAME, EXPR, float3 , float , int3 ) \
2335- IMPLEMENT_EXPR_V_VV(NAME, EXPR, float4 , float , int4 ) \
2336- IMPLEMENT_EXPR_V_VV(NAME, EXPR, float8 , float , int8 ) \
2337- IMPLEMENT_EXPR_V_VV(NAME, EXPR, float16 , float , int16 )
2338-#endif
2339+ IMPLEMENT_EXPR_V_VV(NAME, EXPR, double16, double, long16))
2340
2341 #define IMPLEMENT_EXPR_V_VVV(NAME, EXPR, VTYPE, STYPE, JTYPE) \
2342 VTYPE __attribute__ ((overloadable)) \
2343@@ -475,7 +332,6 @@
2344 typedef JTYPE jtype; \
2345 return EXPR; \
2346 }
2347-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
2348 #define DEFINE_EXPR_V_VVV(NAME, EXPR) \
2349 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float , float , int ) \
2350 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float2 , float , int2 ) \
2351@@ -483,21 +339,13 @@
2352 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float4 , float , int4 ) \
2353 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float8 , float , int8 ) \
2354 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float16 , float , int16 ) \
2355+ __IF_FP64( \
2356 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double , double, long ) \
2357 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double2 , double, long2 ) \
2358 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double3 , double, long3 ) \
2359 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double4 , double, long4 ) \
2360 IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double8 , double, long8 ) \
2361- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double16, double, long16)
2362-#else
2363-#define DEFINE_EXPR_V_VVV(NAME, EXPR) \
2364- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float , float , int ) \
2365- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float2 , float , int2 ) \
2366- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float3 , float , int3 ) \
2367- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float4 , float , int4 ) \
2368- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float8 , float , int8 ) \
2369- IMPLEMENT_EXPR_V_VVV(NAME, EXPR, float16 , float , int16 )
2370-#endif
2371+ IMPLEMENT_EXPR_V_VVV(NAME, EXPR, double16, double, long16))
2372
2373 #define IMPLEMENT_EXPR_S_VV(NAME, EXPR, VTYPE, STYPE, JTYPE) \
2374 STYPE __attribute__ ((overloadable)) \
2375@@ -508,7 +356,6 @@
2376 typedef JTYPE jtype; \
2377 return EXPR; \
2378 }
2379-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
2380 #define DEFINE_EXPR_S_VV(NAME, EXPR) \
2381 IMPLEMENT_EXPR_S_VV(NAME, EXPR, float , float , int ) \
2382 IMPLEMENT_EXPR_S_VV(NAME, EXPR, float2 , float , int2 ) \
2383@@ -516,21 +363,13 @@
2384 IMPLEMENT_EXPR_S_VV(NAME, EXPR, float4 , float , int4 ) \
2385 IMPLEMENT_EXPR_S_VV(NAME, EXPR, float8 , float , int8 ) \
2386 IMPLEMENT_EXPR_S_VV(NAME, EXPR, float16 , float , int16 ) \
2387+ __IF_FP64( \
2388 IMPLEMENT_EXPR_S_VV(NAME, EXPR, double , double, long ) \
2389 IMPLEMENT_EXPR_S_VV(NAME, EXPR, double2 , double, long2 ) \
2390 IMPLEMENT_EXPR_S_VV(NAME, EXPR, double3 , double, long3 ) \
2391 IMPLEMENT_EXPR_S_VV(NAME, EXPR, double4 , double, long4 ) \
2392 IMPLEMENT_EXPR_S_VV(NAME, EXPR, double8 , double, long8 ) \
2393- IMPLEMENT_EXPR_S_VV(NAME, EXPR, double16, double, long16)
2394-#else
2395-#define DEFINE_EXPR_S_VV(NAME, EXPR) \
2396- IMPLEMENT_EXPR_S_VV(NAME, EXPR, float , float , int ) \
2397- IMPLEMENT_EXPR_S_VV(NAME, EXPR, float2 , float , int2 ) \
2398- IMPLEMENT_EXPR_S_VV(NAME, EXPR, float3 , float , int3 ) \
2399- IMPLEMENT_EXPR_S_VV(NAME, EXPR, float4 , float , int4 ) \
2400- IMPLEMENT_EXPR_S_VV(NAME, EXPR, float8 , float , int8 ) \
2401- IMPLEMENT_EXPR_S_VV(NAME, EXPR, float16 , float , int16 )
2402-#endif
2403+ IMPLEMENT_EXPR_S_VV(NAME, EXPR, double16, double, long16))
2404
2405 #define IMPLEMENT_EXPR_V_VVS(NAME, EXPR, VTYPE, STYPE) \
2406 VTYPE __attribute__ ((overloadable)) \
2407@@ -540,26 +379,18 @@
2408 typedef STYPE stype; \
2409 return EXPR; \
2410 }
2411-#ifdef cl_khr_fp64
2412 #define DEFINE_EXPR_V_VVS(NAME, EXPR) \
2413 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float2 , float ) \
2414 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float3 , float ) \
2415 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float4 , float ) \
2416 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float8 , float ) \
2417 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float16 , float ) \
2418+ __IF_FP64( \
2419 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, double2 , double) \
2420 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, double3 , double) \
2421 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, double4 , double) \
2422 IMPLEMENT_EXPR_V_VVS(NAME, EXPR, double8 , double) \
2423- IMPLEMENT_EXPR_V_VVS(NAME, EXPR, double16, double)
2424-#else
2425-#define DEFINE_EXPR_V_VVS(NAME, EXPR) \
2426- IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float2 , float ) \
2427- IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float3 , float ) \
2428- IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float4 , float ) \
2429- IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float8 , float ) \
2430- IMPLEMENT_EXPR_V_VVS(NAME, EXPR, float16 , float )
2431-#endif
2432+ IMPLEMENT_EXPR_V_VVS(NAME, EXPR, double16, double))
2433
2434 #define IMPLEMENT_EXPR_V_VSS(NAME, EXPR, VTYPE, STYPE) \
2435 VTYPE __attribute__ ((overloadable)) \
2436@@ -569,26 +400,18 @@
2437 typedef STYPE stype; \
2438 return EXPR; \
2439 }
2440-#ifdef cl_khr_fp64
2441 #define DEFINE_EXPR_V_VSS(NAME, EXPR) \
2442 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float2 , float ) \
2443 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float3 , float ) \
2444 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float4 , float ) \
2445 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float8 , float ) \
2446 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float16 , float ) \
2447+ __IF_FP64( \
2448 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, double2 , double) \
2449 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, double3 , double) \
2450 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, double4 , double) \
2451 IMPLEMENT_EXPR_V_VSS(NAME, EXPR, double8 , double) \
2452- IMPLEMENT_EXPR_V_VSS(NAME, EXPR, double16, double)
2453-#else
2454-#define DEFINE_EXPR_V_VSS(NAME, EXPR) \
2455- IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float2 , float ) \
2456- IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float3 , float ) \
2457- IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float4 , float ) \
2458- IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float8 , float ) \
2459- IMPLEMENT_EXPR_V_VSS(NAME, EXPR, float16 , float )
2460-#endif
2461+ IMPLEMENT_EXPR_V_VSS(NAME, EXPR, double16, double))
2462
2463 #define IMPLEMENT_EXPR_V_SSV(NAME, EXPR, VTYPE, STYPE) \
2464 VTYPE __attribute__ ((overloadable)) \
2465@@ -598,26 +421,18 @@
2466 typedef STYPE stype; \
2467 return EXPR; \
2468 }
2469-#ifdef cl_khr_fp64
2470 #define DEFINE_EXPR_V_SSV(NAME, EXPR) \
2471 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float2 , float ) \
2472 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float3 , float ) \
2473 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float4 , float ) \
2474 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float8 , float ) \
2475 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float16 , float ) \
2476+ __IF_FP64( \
2477 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, double2 , double) \
2478 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, double3 , double) \
2479 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, double4 , double) \
2480 IMPLEMENT_EXPR_V_SSV(NAME, EXPR, double8 , double) \
2481- IMPLEMENT_EXPR_V_SSV(NAME, EXPR, double16, double)
2482-#else
2483-#define DEFINE_EXPR_V_SSV(NAME, EXPR) \
2484- IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float2 , float ) \
2485- IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float3 , float ) \
2486- IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float4 , float ) \
2487- IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float8 , float ) \
2488- IMPLEMENT_EXPR_V_SSV(NAME, EXPR, float16 , float )
2489-#endif
2490+ IMPLEMENT_EXPR_V_SSV(NAME, EXPR, double16, double))
2491
2492 #define IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, VTYPE, STYPE, JTYPE) \
2493 VTYPE __attribute__ ((overloadable)) \
2494@@ -628,7 +443,6 @@
2495 typedef JTYPE jtype; \
2496 return EXPR; \
2497 }
2498-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
2499 #define DEFINE_EXPR_V_VVJ(NAME, EXPR) \
2500 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float , float , int ) \
2501 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float2 , float , int2 ) \
2502@@ -636,21 +450,13 @@
2503 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float4 , float , int4 ) \
2504 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float8 , float , int8 ) \
2505 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float16 , float , int16 ) \
2506+ __IF_INT64(__IF_FP64( \
2507 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double , double, long ) \
2508 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double2 , double, long2 ) \
2509 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double3 , double, long3 ) \
2510 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double4 , double, long4 ) \
2511 IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double8 , double, long8 ) \
2512- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double16, double, long16)
2513-#else
2514-#define DEFINE_EXPR_V_VVJ(NAME, EXPR) \
2515- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float , float , int ) \
2516- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float2 , float , int2 ) \
2517- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float3 , float , int3 ) \
2518- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float4 , float , int4 ) \
2519- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float8 , float , int8 ) \
2520- IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, float16 , float , int16 )
2521-#endif
2522+ IMPLEMENT_EXPR_V_VVJ(NAME, EXPR, double16, double, long16)))
2523
2524 #define IMPLEMENT_EXPR_V_U(NAME, EXPR, VTYPE, STYPE, UTYPE) \
2525 VTYPE __attribute__ ((overloadable)) \
2526@@ -661,7 +467,6 @@
2527 typedef UTYPE utype; \
2528 return EXPR; \
2529 }
2530-#if defined(cl_khr_int64) && defined(cl_khr_fp64)
2531 #define DEFINE_EXPR_V_U(NAME, EXPR) \
2532 IMPLEMENT_EXPR_V_U(NAME, EXPR, float , float , uint ) \
2533 IMPLEMENT_EXPR_V_U(NAME, EXPR, float2 , float , uint2 ) \
2534@@ -669,21 +474,13 @@
2535 IMPLEMENT_EXPR_V_U(NAME, EXPR, float4 , float , uint4 ) \
2536 IMPLEMENT_EXPR_V_U(NAME, EXPR, float8 , float , uint8 ) \
2537 IMPLEMENT_EXPR_V_U(NAME, EXPR, float16 , float , uint16 ) \
2538+ __IF_INT64(__IF_FP64( \
2539 IMPLEMENT_EXPR_V_U(NAME, EXPR, double , double, ulong ) \
2540 IMPLEMENT_EXPR_V_U(NAME, EXPR, double2 , double, ulong2 ) \
2541 IMPLEMENT_EXPR_V_U(NAME, EXPR, double3 , double, ulong3 ) \
2542 IMPLEMENT_EXPR_V_U(NAME, EXPR, double4 , double, ulong4 ) \
2543 IMPLEMENT_EXPR_V_U(NAME, EXPR, double8 , double, ulong8 ) \
2544- IMPLEMENT_EXPR_V_U(NAME, EXPR, double16, double, ulong16)
2545-#else
2546-#define DEFINE_EXPR_V_U(NAME, EXPR) \
2547- IMPLEMENT_EXPR_V_U(NAME, EXPR, float , float , uint ) \
2548- IMPLEMENT_EXPR_V_U(NAME, EXPR, float2 , float , uint2 ) \
2549- IMPLEMENT_EXPR_V_U(NAME, EXPR, float3 , float , uint3 ) \
2550- IMPLEMENT_EXPR_V_U(NAME, EXPR, float4 , float , uint4 ) \
2551- IMPLEMENT_EXPR_V_U(NAME, EXPR, float8 , float , uint8 ) \
2552- IMPLEMENT_EXPR_V_U(NAME, EXPR, float16 , float , uint16 )
2553-#endif
2554+ IMPLEMENT_EXPR_V_U(NAME, EXPR, double16, double, ulong16)))
2555
2556 #define IMPLEMENT_EXPR_V_VS(NAME, EXPR, VTYPE, STYPE) \
2557 VTYPE __attribute__ ((overloadable)) \
2558@@ -693,26 +490,18 @@
2559 typedef STYPE stype; \
2560 return EXPR; \
2561 }
2562-#ifdef cl_khr_fp64
2563 #define DEFINE_EXPR_V_VS(NAME, EXPR) \
2564 IMPLEMENT_EXPR_V_VS(NAME, EXPR, float2 , float ) \
2565 IMPLEMENT_EXPR_V_VS(NAME, EXPR, float3 , float ) \
2566 IMPLEMENT_EXPR_V_VS(NAME, EXPR, float4 , float ) \
2567 IMPLEMENT_EXPR_V_VS(NAME, EXPR, float8 , float ) \
2568 IMPLEMENT_EXPR_V_VS(NAME, EXPR, float16 , float ) \
2569+ __IF_FP64( \
2570 IMPLEMENT_EXPR_V_VS(NAME, EXPR, double2 , double) \
2571 IMPLEMENT_EXPR_V_VS(NAME, EXPR, double3 , double) \
2572 IMPLEMENT_EXPR_V_VS(NAME, EXPR, double4 , double) \
2573 IMPLEMENT_EXPR_V_VS(NAME, EXPR, double8 , double) \
2574- IMPLEMENT_EXPR_V_VS(NAME, EXPR, double16, double)
2575-#else
2576-#define DEFINE_EXPR_V_VS(NAME, EXPR) \
2577- IMPLEMENT_EXPR_V_VS(NAME, EXPR, float2 , float ) \
2578- IMPLEMENT_EXPR_V_VS(NAME, EXPR, float3 , float ) \
2579- IMPLEMENT_EXPR_V_VS(NAME, EXPR, float4 , float ) \
2580- IMPLEMENT_EXPR_V_VS(NAME, EXPR, float8 , float ) \
2581- IMPLEMENT_EXPR_V_VS(NAME, EXPR, float16 , float )
2582-#endif
2583+ IMPLEMENT_EXPR_V_VS(NAME, EXPR, double16, double))
2584
2585 #define IMPLEMENT_EXPR_V_VJ(NAME, EXPR, VTYPE, STYPE, JTYPE) \
2586 VTYPE __attribute__ ((overloadable)) \
2587@@ -723,7 +512,6 @@
2588 typedef JTYPE jtype; \
2589 return EXPR; \
2590 }
2591-#ifdef cl_khr_fp64
2592 #define DEFINE_EXPR_V_VJ(NAME, EXPR) \
2593 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float , float , int ) \
2594 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float2 , float , int2 ) \
2595@@ -731,21 +519,13 @@
2596 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float4 , float , int4 ) \
2597 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float8 , float , int8 ) \
2598 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float16 , float , int16) \
2599+ __IF_FP64( \
2600 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double , double, int ) \
2601 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double2 , double, int2 ) \
2602 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double3 , double, int3 ) \
2603 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double4 , double, int4 ) \
2604 IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double8 , double, int8 ) \
2605- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double16, double, int16)
2606-#else
2607-#define DEFINE_EXPR_V_VJ(NAME, EXPR) \
2608- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float , float , int ) \
2609- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float2 , float , int2 ) \
2610- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float3 , float , int3 ) \
2611- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float4 , float , int4 ) \
2612- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float8 , float , int8 ) \
2613- IMPLEMENT_EXPR_V_VJ(NAME, EXPR, float16 , float , int16)
2614-#endif
2615+ IMPLEMENT_EXPR_V_VJ(NAME, EXPR, double16, double, int16))
2616
2617 #define IMPLEMENT_EXPR_V_VI(NAME, EXPR, VTYPE, STYPE, ITYPE) \
2618 VTYPE __attribute__ ((overloadable)) \
2619@@ -756,26 +536,18 @@
2620 typedef ITYPE itype; \
2621 return EXPR; \
2622 }
2623-#ifdef cl_khr_fp64
2624 #define DEFINE_EXPR_V_VI(NAME, EXPR) \
2625 IMPLEMENT_EXPR_V_VI(NAME, EXPR, float2 , float , int) \
2626 IMPLEMENT_EXPR_V_VI(NAME, EXPR, float3 , float , int) \
2627 IMPLEMENT_EXPR_V_VI(NAME, EXPR, float4 , float , int) \
2628 IMPLEMENT_EXPR_V_VI(NAME, EXPR, float8 , float , int) \
2629 IMPLEMENT_EXPR_V_VI(NAME, EXPR, float16 , float , int) \
2630- IMPLEMENT_EXPR_V_VI(NAME, EXPR, double2 , double , int) \
2631+ __IF_FP64( \
2632+ IMPLEMENT_EXPR_V_VI(NAME, EXPR, double2 , double, int) \
2633 IMPLEMENT_EXPR_V_VI(NAME, EXPR, double3 , double, int) \
2634 IMPLEMENT_EXPR_V_VI(NAME, EXPR, double4 , double, int) \
2635 IMPLEMENT_EXPR_V_VI(NAME, EXPR, double8 , double, int) \
2636- IMPLEMENT_EXPR_V_VI(NAME, EXPR, double16, double, int)
2637-#else
2638-#define DEFINE_EXPR_V_VI(NAME, EXPR) \
2639- IMPLEMENT_EXPR_V_VI(NAME, EXPR, float2 , float , int) \
2640- IMPLEMENT_EXPR_V_VI(NAME, EXPR, float3 , float , int) \
2641- IMPLEMENT_EXPR_V_VI(NAME, EXPR, float4 , float , int) \
2642- IMPLEMENT_EXPR_V_VI(NAME, EXPR, float8 , float , int) \
2643- IMPLEMENT_EXPR_V_VI(NAME, EXPR, float16 , float , int)
2644-#endif
2645+ IMPLEMENT_EXPR_V_VI(NAME, EXPR, double16, double, int))
2646
2647 #define IMPLEMENT_EXPR_V_VPV(NAME, EXPR, VTYPE, STYPE) \
2648 VTYPE __attribute__ ((overloadable)) \
2649@@ -801,7 +573,6 @@
2650 return EXPR; \
2651 } \
2652 */
2653-#ifdef cl_khr_fp64
2654 #define DEFINE_EXPR_V_VPV(NAME, EXPR) \
2655 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float , float ) \
2656 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float2 , float ) \
2657@@ -809,21 +580,13 @@
2658 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float4 , float ) \
2659 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float8 , float ) \
2660 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float16 , float ) \
2661+ __IF_FP64( \
2662 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double , double) \
2663 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double2 , double) \
2664 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double3 , double) \
2665 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double4 , double) \
2666 IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double8 , double) \
2667- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double16, double)
2668-#else
2669-#define DEFINE_EXPR_V_VPV(NAME, EXPR) \
2670- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float , float ) \
2671- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float2 , float ) \
2672- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float3 , float ) \
2673- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float4 , float ) \
2674- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float8 , float ) \
2675- IMPLEMENT_EXPR_V_VPV(NAME, EXPR, float16 , float )
2676-#endif
2677+ IMPLEMENT_EXPR_V_VPV(NAME, EXPR, double16, double))
2678
2679 #define IMPLEMENT_EXPR_V_SV(NAME, EXPR, VTYPE, STYPE) \
2680 VTYPE __attribute__ ((overloadable)) \
2681@@ -833,26 +596,19 @@
2682 typedef STYPE stype; \
2683 return EXPR; \
2684 }
2685-#ifdef cl_khr_fp64
2686 #define DEFINE_EXPR_V_SV(NAME, EXPR) \
2687 IMPLEMENT_EXPR_V_SV(NAME, EXPR, float2 , float ) \
2688 IMPLEMENT_EXPR_V_SV(NAME, EXPR, float3 , float ) \
2689 IMPLEMENT_EXPR_V_SV(NAME, EXPR, float4 , float ) \
2690 IMPLEMENT_EXPR_V_SV(NAME, EXPR, float8 , float ) \
2691 IMPLEMENT_EXPR_V_SV(NAME, EXPR, float16 , float ) \
2692+ __IF_FP64( \
2693 IMPLEMENT_EXPR_V_SV(NAME, EXPR, double2 , double) \
2694 IMPLEMENT_EXPR_V_SV(NAME, EXPR, double3 , double) \
2695 IMPLEMENT_EXPR_V_SV(NAME, EXPR, double4 , double) \
2696 IMPLEMENT_EXPR_V_SV(NAME, EXPR, double8 , double) \
2697- IMPLEMENT_EXPR_V_SV(NAME, EXPR, double16, double)
2698-#else
2699-#define DEFINE_EXPR_V_SV(NAME, EXPR) \
2700- IMPLEMENT_EXPR_V_SV(NAME, EXPR, float2 , float ) \
2701- IMPLEMENT_EXPR_V_SV(NAME, EXPR, float3 , float ) \
2702- IMPLEMENT_EXPR_V_SV(NAME, EXPR, float4 , float ) \
2703- IMPLEMENT_EXPR_V_SV(NAME, EXPR, float8 , float ) \
2704- IMPLEMENT_EXPR_V_SV(NAME, EXPR, float16 , float )
2705-#endif
2706+ IMPLEMENT_EXPR_V_SV(NAME, EXPR, double16, double))
2707+
2708
2709
2710 #define IMPLEMENT_BUILTIN_G_G(NAME, GTYPE, UGTYPE, LO, HI) \
2711@@ -861,7 +617,6 @@
2712 { \
2713 return (GTYPE)(NAME(a.LO), NAME(a.HI)); \
2714 }
2715-#ifdef cl_khr_int64
2716 #define DEFINE_BUILTIN_G_G(NAME) \
2717 char __attribute__ ((overloadable)) \
2718 NAME(char a) \
2719@@ -893,6 +648,7 @@
2720 { \
2721 return __builtin_##NAME##u(a); \
2722 } \
2723+ __IF_INT64( \
2724 long __attribute__ ((overloadable)) \
2725 NAME(long a) \
2726 { \
2727@@ -902,7 +658,7 @@
2728 NAME(ulong a) \
2729 { \
2730 return __builtin_##NAME##ul(a); \
2731- } \
2732+ }) \
2733 IMPLEMENT_BUILTIN_G_G(NAME, char2 , uchar2 , lo, hi) \
2734 IMPLEMENT_BUILTIN_G_G(NAME, char3 , uchar3 , lo, s2) \
2735 IMPLEMENT_BUILTIN_G_G(NAME, char4 , uchar4 , lo, hi) \
2736@@ -933,6 +689,7 @@
2737 IMPLEMENT_BUILTIN_G_G(NAME, uint4 , uint4 , lo, hi) \
2738 IMPLEMENT_BUILTIN_G_G(NAME, uint8 , uint8 , lo, hi) \
2739 IMPLEMENT_BUILTIN_G_G(NAME, uint16 , uint16 , lo, hi) \
2740+ __IF_INT64( \
2741 IMPLEMENT_BUILTIN_G_G(NAME, long2 , ulong2 , lo, hi) \
2742 IMPLEMENT_BUILTIN_G_G(NAME, long3 , ulong3 , lo, s2) \
2743 IMPLEMENT_BUILTIN_G_G(NAME, long4 , ulong4 , lo, hi) \
2744@@ -942,70 +699,7 @@
2745 IMPLEMENT_BUILTIN_G_G(NAME, ulong3 , ulong3 , lo, s2) \
2746 IMPLEMENT_BUILTIN_G_G(NAME, ulong4 , ulong4 , lo, hi) \
2747 IMPLEMENT_BUILTIN_G_G(NAME, ulong8 , ulong8 , lo, hi) \
2748- IMPLEMENT_BUILTIN_G_G(NAME, ulong16 , ulong16 , lo, hi)
2749-#else
2750-#define DEFINE_BUILTIN_G_G(NAME) \
2751- char __attribute__ ((overloadable)) \
2752- NAME(char a) \
2753- { \
2754- return __builtin_##NAME##hh(a); \
2755- } \
2756- uchar __attribute__ ((overloadable)) \
2757- NAME(uchar a) \
2758- { \
2759- return __builtin_##NAME##uhh(a); \
2760- } \
2761- short __attribute__ ((overloadable)) \
2762- NAME(short a) \
2763- { \
2764- return __builtin_##NAME##h(a); \
2765- } \
2766- ushort __attribute__ ((overloadable)) \
2767- NAME(ushort a) \
2768- { \
2769- return __builtin_##NAME##uh(a); \
2770- } \
2771- int __attribute__ ((overloadable)) \
2772- NAME(int a) \
2773- { \
2774- return __builtin_##NAME(a); \
2775- } \
2776- uint __attribute__ ((overloadable)) \
2777- NAME(uint a) \
2778- { \
2779- return __builtin_##NAME##u(a); \
2780- } \
2781- IMPLEMENT_BUILTIN_G_G(NAME, char2 , uchar2 , lo, hi) \
2782- IMPLEMENT_BUILTIN_G_G(NAME, char3 , uchar3 , lo, s2) \
2783- IMPLEMENT_BUILTIN_G_G(NAME, char4 , uchar4 , lo, hi) \
2784- IMPLEMENT_BUILTIN_G_G(NAME, char8 , uchar8 , lo, hi) \
2785- IMPLEMENT_BUILTIN_G_G(NAME, char16 , uchar16 , lo, hi) \
2786- IMPLEMENT_BUILTIN_G_G(NAME, uchar2 , uchar2 , lo, hi) \
2787- IMPLEMENT_BUILTIN_G_G(NAME, uchar3 , uchar3 , lo, s2) \
2788- IMPLEMENT_BUILTIN_G_G(NAME, uchar4 , uchar4 , lo, hi) \
2789- IMPLEMENT_BUILTIN_G_G(NAME, uchar8 , uchar8 , lo, hi) \
2790- IMPLEMENT_BUILTIN_G_G(NAME, uchar16 , uchar16 , lo, hi) \
2791- IMPLEMENT_BUILTIN_G_G(NAME, short2 , ushort2 , lo, hi) \
2792- IMPLEMENT_BUILTIN_G_G(NAME, short3 , ushort3 , lo, s2) \
2793- IMPLEMENT_BUILTIN_G_G(NAME, short4 , ushort4 , lo, hi) \
2794- IMPLEMENT_BUILTIN_G_G(NAME, short8 , ushort8 , lo, hi) \
2795- IMPLEMENT_BUILTIN_G_G(NAME, short16 , ushort16, lo, hi) \
2796- IMPLEMENT_BUILTIN_G_G(NAME, ushort2 , ushort2 , lo, hi) \
2797- IMPLEMENT_BUILTIN_G_G(NAME, ushort3 , ushort3 , lo, s2) \
2798- IMPLEMENT_BUILTIN_G_G(NAME, ushort4 , ushort4 , lo, hi) \
2799- IMPLEMENT_BUILTIN_G_G(NAME, ushort8 , ushort8 , lo, hi) \
2800- IMPLEMENT_BUILTIN_G_G(NAME, ushort16, ushort16, lo, hi) \
2801- IMPLEMENT_BUILTIN_G_G(NAME, int2 , uint2 , lo, hi) \
2802- IMPLEMENT_BUILTIN_G_G(NAME, int3 , uint3 , lo, s2) \
2803- IMPLEMENT_BUILTIN_G_G(NAME, int4 , uint4 , lo, hi) \
2804- IMPLEMENT_BUILTIN_G_G(NAME, int8 , uint8 , lo, hi) \
2805- IMPLEMENT_BUILTIN_G_G(NAME, int16 , uint16 , lo, hi) \
2806- IMPLEMENT_BUILTIN_G_G(NAME, uint2 , uint2 , lo, hi) \
2807- IMPLEMENT_BUILTIN_G_G(NAME, uint3 , uint3 , lo, s2) \
2808- IMPLEMENT_BUILTIN_G_G(NAME, uint4 , uint4 , lo, hi) \
2809- IMPLEMENT_BUILTIN_G_G(NAME, uint8 , uint8 , lo, hi) \
2810- IMPLEMENT_BUILTIN_G_G(NAME, uint16 , uint16 , lo, hi)
2811-#endif
2812+ IMPLEMENT_BUILTIN_G_G(NAME, ulong16 , ulong16 , lo, hi))
2813
2814 #define IMPLEMENT_BUILTIN_UG_G(NAME, GTYPE, UGTYPE, LO, HI) \
2815 UGTYPE __attribute__ ((overloadable)) \
2816@@ -1013,7 +707,6 @@
2817 { \
2818 return (UGTYPE)(NAME(a.LO), NAME(a.HI)); \
2819 }
2820-#ifdef cl_khr_int64
2821 #define DEFINE_BUILTIN_UG_G(NAME) \
2822 uchar __attribute__ ((overloadable)) \
2823 NAME(char a) \
2824@@ -1045,6 +738,7 @@
2825 { \
2826 return __builtin_##NAME##u(a); \
2827 } \
2828+ __IF_INT64( \
2829 ulong __attribute__ ((overloadable)) \
2830 NAME(long a) \
2831 { \
2832@@ -1054,7 +748,7 @@
2833 NAME(ulong a) \
2834 { \
2835 return __builtin_##NAME##ul(a); \
2836- } \
2837+ }) \
2838 IMPLEMENT_BUILTIN_UG_G(NAME, char2 , uchar2 , lo, hi) \
2839 IMPLEMENT_BUILTIN_UG_G(NAME, char3 , uchar3 , lo, s2) \
2840 IMPLEMENT_BUILTIN_UG_G(NAME, char4 , uchar4 , lo, hi) \
2841@@ -1085,6 +779,7 @@
2842 IMPLEMENT_BUILTIN_UG_G(NAME, uint4 , uint4 , lo, hi) \
2843 IMPLEMENT_BUILTIN_UG_G(NAME, uint8 , uint8 , lo, hi) \
2844 IMPLEMENT_BUILTIN_UG_G(NAME, uint16 , uint16 , lo, hi) \
2845+ __IF_INT64( \
2846 IMPLEMENT_BUILTIN_UG_G(NAME, long2 , ulong2 , lo, hi) \
2847 IMPLEMENT_BUILTIN_UG_G(NAME, long3 , ulong3 , lo, s2) \
2848 IMPLEMENT_BUILTIN_UG_G(NAME, long4 , ulong4 , lo, hi) \
2849@@ -1094,70 +789,7 @@
2850 IMPLEMENT_BUILTIN_UG_G(NAME, ulong3 , ulong3 , lo, s2) \
2851 IMPLEMENT_BUILTIN_UG_G(NAME, ulong4 , ulong4 , lo, hi) \
2852 IMPLEMENT_BUILTIN_UG_G(NAME, ulong8 , ulong8 , lo, hi) \
2853- IMPLEMENT_BUILTIN_UG_G(NAME, ulong16 , ulong16 , lo, hi)
2854-#else
2855-#define DEFINE_BUILTIN_UG_G(NAME) \
2856- uchar __attribute__ ((overloadable)) \
2857- NAME(char a) \
2858- { \
2859- return __builtin_##NAME##h(a); \
2860- } \
2861- uchar __attribute__ ((overloadable)) \
2862- NAME(uchar a) \
2863- { \
2864- return __builtin_##NAME##uhh(a); \
2865- } \
2866- ushort __attribute__ ((overloadable)) \
2867- NAME(short a) \
2868- { \
2869- return __builtin_##NAME##h(a); \
2870- } \
2871- ushort __attribute__ ((overloadable)) \
2872- NAME(ushort a) \
2873- { \
2874- return __builtin_##NAME##uh(a); \
2875- } \
2876- uint __attribute__ ((overloadable)) \
2877- NAME(int a) \
2878- { \
2879- return __builtin_##NAME(a); \
2880- } \
2881- uint __attribute__ ((overloadable)) \
2882- NAME(uint a) \
2883- { \
2884- return __builtin_##NAME##u(a); \
2885- } \
2886- IMPLEMENT_BUILTIN_UG_G(NAME, char2 , uchar2 , lo, hi) \
2887- IMPLEMENT_BUILTIN_UG_G(NAME, char3 , uchar3 , lo, s2) \
2888- IMPLEMENT_BUILTIN_UG_G(NAME, char4 , uchar4 , lo, hi) \
2889- IMPLEMENT_BUILTIN_UG_G(NAME, char8 , uchar8 , lo, hi) \
2890- IMPLEMENT_BUILTIN_UG_G(NAME, char16 , uchar16 , lo, hi) \
2891- IMPLEMENT_BUILTIN_UG_G(NAME, uchar2 , uchar2 , lo, hi) \
2892- IMPLEMENT_BUILTIN_UG_G(NAME, uchar3 , uchar3 , lo, s2) \
2893- IMPLEMENT_BUILTIN_UG_G(NAME, uchar4 , uchar4 , lo, hi) \
2894- IMPLEMENT_BUILTIN_UG_G(NAME, uchar8 , uchar8 , lo, hi) \
2895- IMPLEMENT_BUILTIN_UG_G(NAME, uchar16 , uchar16 , lo, hi) \
2896- IMPLEMENT_BUILTIN_UG_G(NAME, short2 , ushort2 , lo, hi) \
2897- IMPLEMENT_BUILTIN_UG_G(NAME, short3 , ushort3 , lo, s2) \
2898- IMPLEMENT_BUILTIN_UG_G(NAME, short4 , ushort4 , lo, hi) \
2899- IMPLEMENT_BUILTIN_UG_G(NAME, short8 , ushort8 , lo, hi) \
2900- IMPLEMENT_BUILTIN_UG_G(NAME, short16 , ushort16, lo, hi) \
2901- IMPLEMENT_BUILTIN_UG_G(NAME, ushort2 , ushort2 , lo, hi) \
2902- IMPLEMENT_BUILTIN_UG_G(NAME, ushort3 , ushort3 , lo, s2) \
2903- IMPLEMENT_BUILTIN_UG_G(NAME, ushort4 , ushort4 , lo, hi) \
2904- IMPLEMENT_BUILTIN_UG_G(NAME, ushort8 , ushort8 , lo, hi) \
2905- IMPLEMENT_BUILTIN_UG_G(NAME, ushort16, ushort16, lo, hi) \
2906- IMPLEMENT_BUILTIN_UG_G(NAME, int2 , uint2 , lo, hi) \
2907- IMPLEMENT_BUILTIN_UG_G(NAME, int3 , uint3 , lo, s2) \
2908- IMPLEMENT_BUILTIN_UG_G(NAME, int4 , uint4 , lo, hi) \
2909- IMPLEMENT_BUILTIN_UG_G(NAME, int8 , uint8 , lo, hi) \
2910- IMPLEMENT_BUILTIN_UG_G(NAME, int16 , uint16 , lo, hi) \
2911- IMPLEMENT_BUILTIN_UG_G(NAME, uint2 , uint2 , lo, hi) \
2912- IMPLEMENT_BUILTIN_UG_G(NAME, uint3 , uint3 , lo, s2) \
2913- IMPLEMENT_BUILTIN_UG_G(NAME, uint4 , uint4 , lo, hi) \
2914- IMPLEMENT_BUILTIN_UG_G(NAME, uint8 , uint8 , lo, hi) \
2915- IMPLEMENT_BUILTIN_UG_G(NAME, uint16 , uint16 , lo, hi)
2916-#endif
2917+ IMPLEMENT_BUILTIN_UG_G(NAME, ulong16 , ulong16 , lo, hi))
2918
2919 #define IMPLEMENT_EXPR_G_G(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, SUGTYPE) \
2920 GTYPE __attribute__ ((overloadable)) \
2921@@ -1169,7 +801,6 @@
2922 typedef SUGTYPE sugtype; \
2923 return EXPR; \
2924 }
2925-#ifdef cl_khr_int64
2926 #define DEFINE_EXPR_G_G(NAME, EXPR) \
2927 IMPLEMENT_EXPR_G_G(NAME, EXPR, char , char , uchar , uchar ) \
2928 IMPLEMENT_EXPR_G_G(NAME, EXPR, char2 , char , uchar2 , uchar ) \
2929@@ -1207,6 +838,7 @@
2930 IMPLEMENT_EXPR_G_G(NAME, EXPR, uint4 , uint , uint4 , uint ) \
2931 IMPLEMENT_EXPR_G_G(NAME, EXPR, uint8 , uint , uint8 , uint ) \
2932 IMPLEMENT_EXPR_G_G(NAME, EXPR, uint16 , uint , uint16 , uint ) \
2933+ __IF_INT64( \
2934 IMPLEMENT_EXPR_G_G(NAME, EXPR, long , long , ulong , ulong ) \
2935 IMPLEMENT_EXPR_G_G(NAME, EXPR, long2 , long , ulong2 , ulong ) \
2936 IMPLEMENT_EXPR_G_G(NAME, EXPR, long3 , long , ulong3 , ulong ) \
2937@@ -1218,46 +850,7 @@
2938 IMPLEMENT_EXPR_G_G(NAME, EXPR, ulong3 , ulong , ulong3 , ulong ) \
2939 IMPLEMENT_EXPR_G_G(NAME, EXPR, ulong4 , ulong , ulong4 , ulong ) \
2940 IMPLEMENT_EXPR_G_G(NAME, EXPR, ulong8 , ulong , ulong8 , ulong ) \
2941- IMPLEMENT_EXPR_G_G(NAME, EXPR, ulong16 , ulong , ulong16 , ulong )
2942-#else
2943-#define DEFINE_EXPR_G_G(NAME, EXPR) \
2944- IMPLEMENT_EXPR_G_G(NAME, EXPR, char , char , uchar , uchar ) \
2945- IMPLEMENT_EXPR_G_G(NAME, EXPR, char2 , char , uchar2 , uchar ) \
2946- IMPLEMENT_EXPR_G_G(NAME, EXPR, char3 , char , uchar3 , uchar ) \
2947- IMPLEMENT_EXPR_G_G(NAME, EXPR, char4 , char , uchar4 , uchar ) \
2948- IMPLEMENT_EXPR_G_G(NAME, EXPR, char8 , char , uchar8 , uchar ) \
2949- IMPLEMENT_EXPR_G_G(NAME, EXPR, char16 , char , uchar16 , uchar ) \
2950- IMPLEMENT_EXPR_G_G(NAME, EXPR, uchar , uchar , uchar , uchar ) \
2951- IMPLEMENT_EXPR_G_G(NAME, EXPR, uchar2 , uchar , uchar2 , uchar ) \
2952- IMPLEMENT_EXPR_G_G(NAME, EXPR, uchar3 , uchar , uchar3 , uchar ) \
2953- IMPLEMENT_EXPR_G_G(NAME, EXPR, uchar4 , uchar , uchar4 , uchar ) \
2954- IMPLEMENT_EXPR_G_G(NAME, EXPR, uchar8 , uchar , uchar8 , uchar ) \
2955- IMPLEMENT_EXPR_G_G(NAME, EXPR, uchar16 , uchar , uchar16 , uchar ) \
2956- IMPLEMENT_EXPR_G_G(NAME, EXPR, short , short , ushort , ushort) \
2957- IMPLEMENT_EXPR_G_G(NAME, EXPR, short2 , short , ushort2 , ushort) \
2958- IMPLEMENT_EXPR_G_G(NAME, EXPR, short3 , short , ushort3 , ushort) \
2959- IMPLEMENT_EXPR_G_G(NAME, EXPR, short4 , short , ushort4 , ushort) \
2960- IMPLEMENT_EXPR_G_G(NAME, EXPR, short8 , short , ushort8 , ushort) \
2961- IMPLEMENT_EXPR_G_G(NAME, EXPR, short16 , short , ushort16, ushort) \
2962- IMPLEMENT_EXPR_G_G(NAME, EXPR, ushort , ushort, ushort , ushort) \
2963- IMPLEMENT_EXPR_G_G(NAME, EXPR, ushort2 , ushort, ushort2 , ushort) \
2964- IMPLEMENT_EXPR_G_G(NAME, EXPR, ushort3 , ushort, ushort3 , ushort) \
2965- IMPLEMENT_EXPR_G_G(NAME, EXPR, ushort4 , ushort, ushort4 , ushort) \
2966- IMPLEMENT_EXPR_G_G(NAME, EXPR, ushort8 , ushort, ushort8 , ushort) \
2967- IMPLEMENT_EXPR_G_G(NAME, EXPR, ushort16, ushort, ushort16, ushort) \
2968- IMPLEMENT_EXPR_G_G(NAME, EXPR, int , int , uint , uint ) \
2969- IMPLEMENT_EXPR_G_G(NAME, EXPR, int2 , int , uint2 , uint ) \
2970- IMPLEMENT_EXPR_G_G(NAME, EXPR, int3 , int , uint3 , uint ) \
2971- IMPLEMENT_EXPR_G_G(NAME, EXPR, int4 , int , uint4 , uint ) \
2972- IMPLEMENT_EXPR_G_G(NAME, EXPR, int8 , int , uint8 , uint ) \
2973- IMPLEMENT_EXPR_G_G(NAME, EXPR, int16 , int , uint16 , uint ) \
2974- IMPLEMENT_EXPR_G_G(NAME, EXPR, uint , uint , uint , uint ) \
2975- IMPLEMENT_EXPR_G_G(NAME, EXPR, uint2 , uint , uint2 , uint ) \
2976- IMPLEMENT_EXPR_G_G(NAME, EXPR, uint3 , uint , uint3 , uint ) \
2977- IMPLEMENT_EXPR_G_G(NAME, EXPR, uint4 , uint , uint4 , uint ) \
2978- IMPLEMENT_EXPR_G_G(NAME, EXPR, uint8 , uint , uint8 , uint ) \
2979- IMPLEMENT_EXPR_G_G(NAME, EXPR, uint16 , uint , uint16 , uint )
2980-#endif
2981+ IMPLEMENT_EXPR_G_G(NAME, EXPR, ulong16 , ulong , ulong16 , ulong ))
2982
2983 #define IMPLEMENT_EXPR_UG_G(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, SUGTYPE) \
2984 UGTYPE __attribute__ ((overloadable)) \
2985@@ -1269,7 +862,6 @@
2986 typedef SUGTYPE sugtype; \
2987 return EXPR; \
2988 }
2989-#ifdef cl_khr_int64
2990 #define DEFINE_EXPR_UG_G(NAME, EXPR) \
2991 IMPLEMENT_EXPR_UG_G(NAME, EXPR, char , char , uchar , uchar ) \
2992 IMPLEMENT_EXPR_UG_G(NAME, EXPR, char2 , char , uchar2 , uchar ) \
2993@@ -1307,6 +899,7 @@
2994 IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint4 , uint , uint4 , uint ) \
2995 IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint8 , uint , uint8 , uint ) \
2996 IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint16 , uint , uint16 , uint ) \
2997+ __IF_INT64( \
2998 IMPLEMENT_EXPR_UG_G(NAME, EXPR, long , long , ulong , ulong ) \
2999 IMPLEMENT_EXPR_UG_G(NAME, EXPR, long2 , long , ulong2 , ulong ) \
3000 IMPLEMENT_EXPR_UG_G(NAME, EXPR, long3 , long , ulong3 , ulong ) \
3001@@ -1318,46 +911,7 @@
3002 IMPLEMENT_EXPR_UG_G(NAME, EXPR, ulong3 , ulong , ulong3 , ulong ) \
3003 IMPLEMENT_EXPR_UG_G(NAME, EXPR, ulong4 , ulong , ulong4 , ulong ) \
3004 IMPLEMENT_EXPR_UG_G(NAME, EXPR, ulong8 , ulong , ulong8 , ulong ) \
3005- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ulong16 , ulong , ulong16 , ulong )
3006-#else
3007-#define DEFINE_EXPR_UG_G(NAME, EXPR) \
3008- IMPLEMENT_EXPR_UG_G(NAME, EXPR, char , char , uchar , uchar ) \
3009- IMPLEMENT_EXPR_UG_G(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3010- IMPLEMENT_EXPR_UG_G(NAME, EXPR, char3 , char , uchar3 , uchar ) \
3011- IMPLEMENT_EXPR_UG_G(NAME, EXPR, char4 , char , uchar4 , uchar ) \
3012- IMPLEMENT_EXPR_UG_G(NAME, EXPR, char8 , char , uchar8 , uchar ) \
3013- IMPLEMENT_EXPR_UG_G(NAME, EXPR, char16 , char , uchar16 , uchar ) \
3014- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uchar , uchar , uchar , uchar ) \
3015- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uchar2 , uchar , uchar2 , uchar ) \
3016- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uchar3 , uchar , uchar3 , uchar ) \
3017- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uchar4 , uchar , uchar4 , uchar ) \
3018- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uchar8 , uchar , uchar8 , uchar ) \
3019- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uchar16 , uchar , uchar16 , uchar ) \
3020- IMPLEMENT_EXPR_UG_G(NAME, EXPR, short , short , ushort , ushort) \
3021- IMPLEMENT_EXPR_UG_G(NAME, EXPR, short2 , short , ushort2 , ushort) \
3022- IMPLEMENT_EXPR_UG_G(NAME, EXPR, short3 , short , ushort3 , ushort) \
3023- IMPLEMENT_EXPR_UG_G(NAME, EXPR, short4 , short , ushort4 , ushort) \
3024- IMPLEMENT_EXPR_UG_G(NAME, EXPR, short8 , short , ushort8 , ushort) \
3025- IMPLEMENT_EXPR_UG_G(NAME, EXPR, short16 , short , ushort16, ushort) \
3026- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ushort , ushort, ushort , ushort) \
3027- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ushort2 , ushort, ushort2 , ushort) \
3028- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ushort3 , ushort, ushort3 , ushort) \
3029- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ushort4 , ushort, ushort4 , ushort) \
3030- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ushort8 , ushort, ushort8 , ushort) \
3031- IMPLEMENT_EXPR_UG_G(NAME, EXPR, ushort16, ushort, ushort16, ushort) \
3032- IMPLEMENT_EXPR_UG_G(NAME, EXPR, int , int , uint , uint ) \
3033- IMPLEMENT_EXPR_UG_G(NAME, EXPR, int2 , int , uint2 , uint ) \
3034- IMPLEMENT_EXPR_UG_G(NAME, EXPR, int3 , int , uint3 , uint ) \
3035- IMPLEMENT_EXPR_UG_G(NAME, EXPR, int4 , int , uint4 , uint ) \
3036- IMPLEMENT_EXPR_UG_G(NAME, EXPR, int8 , int , uint8 , uint ) \
3037- IMPLEMENT_EXPR_UG_G(NAME, EXPR, int16 , int , uint16 , uint ) \
3038- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint , uint , uint , uint ) \
3039- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint2 , uint , uint2 , uint ) \
3040- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint3 , uint , uint3 , uint ) \
3041- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3042- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3043- IMPLEMENT_EXPR_UG_G(NAME, EXPR, uint16 , uint , uint16 , uint )
3044-#endif
3045+ IMPLEMENT_EXPR_UG_G(NAME, EXPR, ulong16 , ulong , ulong16 , ulong ))
3046
3047 #define IMPLEMENT_EXPR_G_GG(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, SUGTYPE) \
3048 GTYPE __attribute__ ((overloadable)) \
3049@@ -1369,7 +923,6 @@
3050 typedef SUGTYPE sugtype; \
3051 return EXPR; \
3052 }
3053-#ifdef cl_khr_int64
3054 #define DEFINE_EXPR_G_GG(NAME, EXPR) \
3055 IMPLEMENT_EXPR_G_GG(NAME, EXPR, char , char , uchar , uchar ) \
3056 IMPLEMENT_EXPR_G_GG(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3057@@ -1407,6 +960,7 @@
3058 IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3059 IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3060 IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint16 , uint , uint16 , uint ) \
3061+ __IF_INT64( \
3062 IMPLEMENT_EXPR_G_GG(NAME, EXPR, long , long , ulong , ulong ) \
3063 IMPLEMENT_EXPR_G_GG(NAME, EXPR, long2 , long , ulong2 , ulong ) \
3064 IMPLEMENT_EXPR_G_GG(NAME, EXPR, long3 , long , ulong3 , ulong ) \
3065@@ -1418,46 +972,7 @@
3066 IMPLEMENT_EXPR_G_GG(NAME, EXPR, ulong3 , ulong , ulong3 , ulong ) \
3067 IMPLEMENT_EXPR_G_GG(NAME, EXPR, ulong4 , ulong , ulong4 , ulong ) \
3068 IMPLEMENT_EXPR_G_GG(NAME, EXPR, ulong8 , ulong , ulong8 , ulong ) \
3069- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ulong16 , ulong , ulong16 , ulong )
3070-#else
3071-#define DEFINE_EXPR_G_GG(NAME, EXPR) \
3072- IMPLEMENT_EXPR_G_GG(NAME, EXPR, char , char , uchar , uchar ) \
3073- IMPLEMENT_EXPR_G_GG(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3074- IMPLEMENT_EXPR_G_GG(NAME, EXPR, char3 , char , uchar3 , uchar ) \
3075- IMPLEMENT_EXPR_G_GG(NAME, EXPR, char4 , char , uchar4 , uchar ) \
3076- IMPLEMENT_EXPR_G_GG(NAME, EXPR, char8 , char , uchar8 , uchar ) \
3077- IMPLEMENT_EXPR_G_GG(NAME, EXPR, char16 , char , uchar16 , uchar ) \
3078- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uchar , uchar , uchar , uchar ) \
3079- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uchar2 , uchar , uchar2 , uchar ) \
3080- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uchar3 , uchar , uchar3 , uchar ) \
3081- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uchar4 , uchar , uchar4 , uchar ) \
3082- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uchar8 , uchar , uchar8 , uchar ) \
3083- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uchar16 , uchar , uchar16 , uchar ) \
3084- IMPLEMENT_EXPR_G_GG(NAME, EXPR, short , short , ushort , ushort) \
3085- IMPLEMENT_EXPR_G_GG(NAME, EXPR, short2 , short , ushort2 , ushort) \
3086- IMPLEMENT_EXPR_G_GG(NAME, EXPR, short3 , short , ushort3 , ushort) \
3087- IMPLEMENT_EXPR_G_GG(NAME, EXPR, short4 , short , ushort4 , ushort) \
3088- IMPLEMENT_EXPR_G_GG(NAME, EXPR, short8 , short , ushort8 , ushort) \
3089- IMPLEMENT_EXPR_G_GG(NAME, EXPR, short16 , short , ushort16, ushort) \
3090- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ushort , ushort, ushort , ushort) \
3091- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ushort2 , ushort, ushort2 , ushort) \
3092- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ushort3 , ushort, ushort3 , ushort) \
3093- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ushort4 , ushort, ushort4 , ushort) \
3094- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ushort8 , ushort, ushort8 , ushort) \
3095- IMPLEMENT_EXPR_G_GG(NAME, EXPR, ushort16, ushort, ushort16, ushort) \
3096- IMPLEMENT_EXPR_G_GG(NAME, EXPR, int , int , uint , uint ) \
3097- IMPLEMENT_EXPR_G_GG(NAME, EXPR, int2 , int , uint2 , uint ) \
3098- IMPLEMENT_EXPR_G_GG(NAME, EXPR, int3 , int , uint3 , uint ) \
3099- IMPLEMENT_EXPR_G_GG(NAME, EXPR, int4 , int , uint4 , uint ) \
3100- IMPLEMENT_EXPR_G_GG(NAME, EXPR, int8 , int , uint8 , uint ) \
3101- IMPLEMENT_EXPR_G_GG(NAME, EXPR, int16 , int , uint16 , uint ) \
3102- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint , uint , uint , uint ) \
3103- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint2 , uint , uint2 , uint ) \
3104- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint3 , uint , uint3 , uint ) \
3105- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3106- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3107- IMPLEMENT_EXPR_G_GG(NAME, EXPR, uint16 , uint , uint16 , uint )
3108-#endif
3109+ IMPLEMENT_EXPR_G_GG(NAME, EXPR, ulong16 , ulong , ulong16 , ulong ))
3110
3111 #define IMPLEMENT_EXPR_G_GGG(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, SUGTYPE) \
3112 GTYPE __attribute__ ((overloadable)) \
3113@@ -1469,7 +984,6 @@
3114 typedef SUGTYPE sugtype; \
3115 return EXPR; \
3116 }
3117-#ifdef cl_khr_int64
3118 #define DEFINE_EXPR_G_GGG(NAME, EXPR) \
3119 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char , char , uchar , uchar ) \
3120 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3121@@ -1507,6 +1021,7 @@
3122 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3123 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3124 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint16 , uint , uint16 , uint ) \
3125+ __IF_INT64( \
3126 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, long , long , ulong , ulong ) \
3127 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, long2 , long , ulong2 , ulong ) \
3128 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, long3 , long , ulong3 , ulong ) \
3129@@ -1518,46 +1033,7 @@
3130 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ulong3 , ulong , ulong3 , ulong ) \
3131 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ulong4 , ulong , ulong4 , ulong ) \
3132 IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ulong8 , ulong , ulong8 , ulong ) \
3133- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ulong16 , ulong , ulong16 , ulong )
3134-#else
3135-#define DEFINE_EXPR_G_GGG(NAME, EXPR) \
3136- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char , char , uchar , uchar ) \
3137- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3138- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char3 , char , uchar3 , uchar ) \
3139- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char4 , char , uchar4 , uchar ) \
3140- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char8 , char , uchar8 , uchar ) \
3141- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, char16 , char , uchar16 , uchar ) \
3142- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uchar , uchar , uchar , uchar ) \
3143- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uchar2 , uchar , uchar2 , uchar ) \
3144- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uchar3 , uchar , uchar3 , uchar ) \
3145- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uchar4 , uchar , uchar4 , uchar ) \
3146- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uchar8 , uchar , uchar8 , uchar ) \
3147- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uchar16 , uchar , uchar16 , uchar ) \
3148- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, short , short , ushort , ushort) \
3149- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, short2 , short , ushort2 , ushort) \
3150- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, short3 , short , ushort3 , ushort) \
3151- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, short4 , short , ushort4 , ushort) \
3152- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, short8 , short , ushort8 , ushort) \
3153- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, short16 , short , ushort16, ushort) \
3154- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ushort , ushort, ushort , ushort) \
3155- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ushort2 , ushort, ushort2 , ushort) \
3156- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ushort3 , ushort, ushort3 , ushort) \
3157- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ushort4 , ushort, ushort4 , ushort) \
3158- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ushort8 , ushort, ushort8 , ushort) \
3159- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ushort16, ushort, ushort16, ushort) \
3160- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, int , int , uint , uint ) \
3161- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, int2 , int , uint2 , uint ) \
3162- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, int3 , int , uint3 , uint ) \
3163- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, int4 , int , uint4 , uint ) \
3164- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, int8 , int , uint8 , uint ) \
3165- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, int16 , int , uint16 , uint ) \
3166- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint , uint , uint , uint ) \
3167- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint2 , uint , uint2 , uint ) \
3168- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint3 , uint , uint3 , uint ) \
3169- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3170- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3171- IMPLEMENT_EXPR_G_GGG(NAME, EXPR, uint16 , uint , uint16 , uint )
3172-#endif
3173+ IMPLEMENT_EXPR_G_GGG(NAME, EXPR, ulong16 , ulong , ulong16 , ulong ))
3174
3175 #define IMPLEMENT_EXPR_G_GS(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, SUGTYPE) \
3176 GTYPE __attribute__ ((overloadable)) \
3177@@ -1569,7 +1045,6 @@
3178 typedef SUGTYPE sugtype; \
3179 return EXPR; \
3180 }
3181-#ifdef cl_khr_int64
3182 #define DEFINE_EXPR_G_GS(NAME, EXPR) \
3183 IMPLEMENT_EXPR_G_GS(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3184 IMPLEMENT_EXPR_G_GS(NAME, EXPR, char3 , char , uchar3 , uchar ) \
3185@@ -1601,6 +1076,7 @@
3186 IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3187 IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3188 IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint16 , uint , uint16 , uint ) \
3189+ __IF_INT64( \
3190 IMPLEMENT_EXPR_G_GS(NAME, EXPR, long2 , long , ulong2 , ulong ) \
3191 IMPLEMENT_EXPR_G_GS(NAME, EXPR, long3 , long , ulong3 , ulong ) \
3192 IMPLEMENT_EXPR_G_GS(NAME, EXPR, long4 , long , ulong4 , ulong ) \
3193@@ -1610,40 +1086,7 @@
3194 IMPLEMENT_EXPR_G_GS(NAME, EXPR, ulong3 , ulong , ulong3 , ulong ) \
3195 IMPLEMENT_EXPR_G_GS(NAME, EXPR, ulong4 , ulong , ulong4 , ulong ) \
3196 IMPLEMENT_EXPR_G_GS(NAME, EXPR, ulong8 , ulong , ulong8 , ulong ) \
3197- IMPLEMENT_EXPR_G_GS(NAME, EXPR, ulong16 , ulong , ulong16 , ulong )
3198-#else
3199-#define DEFINE_EXPR_G_GS(NAME, EXPR) \
3200- IMPLEMENT_EXPR_G_GS(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3201- IMPLEMENT_EXPR_G_GS(NAME, EXPR, char3 , char , uchar3 , uchar ) \
3202- IMPLEMENT_EXPR_G_GS(NAME, EXPR, char4 , char , uchar4 , uchar ) \
3203- IMPLEMENT_EXPR_G_GS(NAME, EXPR, char8 , char , uchar8 , uchar ) \
3204- IMPLEMENT_EXPR_G_GS(NAME, EXPR, char16 , char , uchar16 , uchar ) \
3205- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uchar2 , uchar , uchar2 , uchar ) \
3206- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uchar3 , uchar , uchar3 , uchar ) \
3207- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uchar4 , uchar , uchar4 , uchar ) \
3208- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uchar8 , uchar , uchar8 , uchar ) \
3209- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uchar16 , uchar , uchar16 , uchar ) \
3210- IMPLEMENT_EXPR_G_GS(NAME, EXPR, short2 , short , ushort2 , ushort) \
3211- IMPLEMENT_EXPR_G_GS(NAME, EXPR, short3 , short , ushort3 , ushort) \
3212- IMPLEMENT_EXPR_G_GS(NAME, EXPR, short4 , short , ushort4 , ushort) \
3213- IMPLEMENT_EXPR_G_GS(NAME, EXPR, short8 , short , ushort8 , ushort) \
3214- IMPLEMENT_EXPR_G_GS(NAME, EXPR, short16 , short , ushort16, ushort) \
3215- IMPLEMENT_EXPR_G_GS(NAME, EXPR, ushort2 , ushort, ushort2 , ushort) \
3216- IMPLEMENT_EXPR_G_GS(NAME, EXPR, ushort3 , ushort, ushort3 , ushort) \
3217- IMPLEMENT_EXPR_G_GS(NAME, EXPR, ushort4 , ushort, ushort4 , ushort) \
3218- IMPLEMENT_EXPR_G_GS(NAME, EXPR, ushort8 , ushort, ushort8 , ushort) \
3219- IMPLEMENT_EXPR_G_GS(NAME, EXPR, ushort16, ushort, ushort16, ushort) \
3220- IMPLEMENT_EXPR_G_GS(NAME, EXPR, int2 , int , uint2 , uint ) \
3221- IMPLEMENT_EXPR_G_GS(NAME, EXPR, int3 , int , uint3 , uint ) \
3222- IMPLEMENT_EXPR_G_GS(NAME, EXPR, int4 , int , uint4 , uint ) \
3223- IMPLEMENT_EXPR_G_GS(NAME, EXPR, int8 , int , uint8 , uint ) \
3224- IMPLEMENT_EXPR_G_GS(NAME, EXPR, int16 , int , uint16 , uint ) \
3225- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint2 , uint , uint2 , uint ) \
3226- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint3 , uint , uint3 , uint ) \
3227- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3228- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3229- IMPLEMENT_EXPR_G_GS(NAME, EXPR, uint16 , uint , uint16 , uint )
3230-#endif
3231+ IMPLEMENT_EXPR_G_GS(NAME, EXPR, ulong16 , ulong , ulong16 , ulong ))
3232
3233 #define IMPLEMENT_EXPR_UG_GG(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, SUGTYPE) \
3234 UGTYPE __attribute__ ((overloadable)) \
3235@@ -1655,7 +1098,6 @@
3236 typedef SUGTYPE sugtype; \
3237 return EXPR; \
3238 }
3239-#ifdef cl_khr_int64
3240 #define DEFINE_EXPR_UG_GG(NAME, EXPR) \
3241 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char , char , uchar , uchar ) \
3242 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3243@@ -1693,6 +1135,7 @@
3244 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3245 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3246 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint16 , uint , uint16 , uint ) \
3247+ __IF_INT64( \
3248 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, long , long , ulong , ulong ) \
3249 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, long2 , long , ulong2 , ulong ) \
3250 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, long3 , long , ulong3 , ulong ) \
3251@@ -1704,46 +1147,7 @@
3252 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ulong3 , ulong , ulong3 , ulong ) \
3253 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ulong4 , ulong , ulong4 , ulong ) \
3254 IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ulong8 , ulong , ulong8 , ulong ) \
3255- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ulong16 , ulong , ulong16 , ulong )
3256-#else
3257-#define DEFINE_EXPR_UG_GG(NAME, EXPR) \
3258- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char , char , uchar , uchar ) \
3259- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char2 , char , uchar2 , uchar ) \
3260- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char3 , char , uchar3 , uchar ) \
3261- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char4 , char , uchar4 , uchar ) \
3262- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char8 , char , uchar8 , uchar ) \
3263- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, char16 , char , uchar16 , uchar ) \
3264- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uchar , uchar , uchar , uchar ) \
3265- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uchar2 , uchar , uchar2 , uchar ) \
3266- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uchar3 , uchar , uchar3 , uchar ) \
3267- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uchar4 , uchar , uchar4 , uchar ) \
3268- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uchar8 , uchar , uchar8 , uchar ) \
3269- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uchar16 , uchar , uchar16 , uchar ) \
3270- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, short , short , ushort , ushort) \
3271- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, short2 , short , ushort2 , ushort) \
3272- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, short3 , short , ushort3 , ushort) \
3273- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, short4 , short , ushort4 , ushort) \
3274- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, short8 , short , ushort8 , ushort) \
3275- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, short16 , short , ushort16, ushort) \
3276- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ushort , ushort, ushort , ushort) \
3277- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ushort2 , ushort, ushort2 , ushort) \
3278- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ushort3 , ushort, ushort3 , ushort) \
3279- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ushort4 , ushort, ushort4 , ushort) \
3280- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ushort8 , ushort, ushort8 , ushort) \
3281- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ushort16, ushort, ushort16, ushort) \
3282- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, int , int , uint , uint ) \
3283- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, int2 , int , uint2 , uint ) \
3284- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, int3 , int , uint3 , uint ) \
3285- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, int4 , int , uint4 , uint ) \
3286- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, int8 , int , uint8 , uint ) \
3287- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, int16 , int , uint16 , uint ) \
3288- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint , uint , uint , uint ) \
3289- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint2 , uint , uint2 , uint ) \
3290- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint3 , uint , uint3 , uint ) \
3291- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint4 , uint , uint4 , uint ) \
3292- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint8 , uint , uint8 , uint ) \
3293- IMPLEMENT_EXPR_UG_GG(NAME, EXPR, uint16 , uint , uint16 , uint )
3294-#endif
3295+ IMPLEMENT_EXPR_UG_GG(NAME, EXPR, ulong16 , ulong , ulong16 , ulong ))
3296
3297 #define IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, GTYPE, SGTYPE, UGTYPE, LGTYPE) \
3298 LGTYPE __attribute__ ((overloadable)) \
3299@@ -1755,7 +1159,6 @@
3300 typedef LGTYPE lgtype; \
3301 return EXPR; \
3302 }
3303-#ifdef cl_khr_int64
3304 #define DEFINE_EXPR_LG_GUG(NAME, EXPR) \
3305 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char , char , uchar , short ) \
3306 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char2 , char , uchar2 , short2 ) \
3307@@ -1781,6 +1184,7 @@
3308 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort4 , ushort, ushort4 , uint4 ) \
3309 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort8 , ushort, ushort8 , uint8 ) \
3310 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort16, ushort, ushort16, uint16 ) \
3311+ __IF_INT64( \
3312 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, int , int , uint , long ) \
3313 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, int2 , int , uint2 , long2 ) \
3314 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, int3 , int , uint3 , long3 ) \
3315@@ -1792,34 +1196,7 @@
3316 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uint3 , uint , uint3 , ulong3 ) \
3317 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uint4 , uint , uint4 , ulong4 ) \
3318 IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uint8 , uint , uint8 , ulong8 ) \
3319- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uint16 , uint , uint16 , ulong16 )
3320-#else
3321-#define DEFINE_EXPR_LG_GUG(NAME, EXPR) \
3322- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char , char , uchar , short ) \
3323- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char2 , char , uchar2 , short2 ) \
3324- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char3 , char , uchar3 , short3 ) \
3325- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char4 , char , uchar4 , short4 ) \
3326- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char8 , char , uchar8 , short8 ) \
3327- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, char16 , char , uchar16 , short16 ) \
3328- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uchar , uchar , uchar , ushort ) \
3329- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uchar2 , uchar , uchar2 , ushort2 ) \
3330- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uchar3 , uchar , uchar3 , ushort3 ) \
3331- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uchar4 , uchar , uchar4 , ushort4 ) \
3332- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uchar8 , uchar , uchar8 , ushort8 ) \
3333- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uchar16 , uchar , uchar16 , ushort16) \
3334- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, short , short , ushort , int ) \
3335- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, short2 , short , ushort2 , int2 ) \
3336- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, short3 , short , ushort3 , int3 ) \
3337- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, short4 , short , ushort4 , int4 ) \
3338- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, short8 , short , ushort8 , int8 ) \
3339- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, short16 , short , ushort16, int16 ) \
3340- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort , ushort, ushort , uint ) \
3341- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort2 , ushort, ushort2 , uint2 ) \
3342- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort3 , ushort, ushort3 , uint3 ) \
3343- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort4 , ushort, ushort4 , uint4 ) \
3344- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort8 , ushort, ushort8 , uint8 ) \
3345- IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, ushort16, ushort, ushort16, uint16 )
3346-#endif
3347+ IMPLEMENT_EXPR_LG_GUG(NAME, EXPR, uint16 , uint , uint16 , ulong16 ))
3348
3349 #define IMPLEMENT_EXPR_J_JJ(NAME, EXPR, JTYPE, SJTYPE, UJTYPE, SUJTYPE) \
3350 JTYPE __attribute__ ((overloadable)) \
3351
3352=== modified file 'lib/kernel/x86_64/Makefile.am'
3353--- lib/kernel/x86_64/Makefile.am 2011-11-09 15:30:32 +0000
3354+++ lib/kernel/x86_64/Makefile.am 2011-11-14 18:40:38 +0000
3355@@ -43,5 +43,5 @@
3356 .ll.o:
3357 $(LLVM_AS) -o $@ $<
3358
3359-$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h ../templates.h
3360+$(libkernel_a_SOURCES:.c=.o): $(top_srcdir)/include/_kernel.h
3361 $(libkernel_a_SOURCES:.cl=.o): $(top_srcdir)/include/_kernel.h ../templates.h