1
- #include <clc/clc.h>
2
- #include <utils.h>
3
-
4
- #define _CLC_UNARY_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE ) \
5
- DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x) { \
6
- return (RET_TYPE##2)(FUNCTION(x.x), FUNCTION(x.y)); \
7
- } \
8
- \
9
- DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x) { \
10
- return (RET_TYPE##3)(FUNCTION(x.x), FUNCTION(x.y), FUNCTION(x.z)); \
11
- } \
12
- \
13
- DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x) { \
14
- return (RET_TYPE##4)(FUNCTION(x.lo), FUNCTION(x.hi)); \
15
- } \
16
- \
17
- DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x) { \
18
- return (RET_TYPE##8)(FUNCTION(x.lo), FUNCTION(x.hi)); \
19
- } \
20
- \
21
- DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x) { \
22
- return (RET_TYPE##16)(FUNCTION(x.lo), FUNCTION(x.hi)); \
1
+ #ifndef __CLC_CLCMACRO_H__
2
+ #define __CLC_CLCMACRO_H__
3
+
4
+ #include <clc/internal/clc.h>
5
+ #include <clc/utils.h>
6
+
7
+ #define _CLC_UNARY_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE ) \
8
+ DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x) { \
9
+ return (RET_TYPE##2)(FUNCTION(x.x), FUNCTION(x.y)); \
10
+ } \
11
+ \
12
+ DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x) { \
13
+ return (RET_TYPE##3)(FUNCTION(x.x), FUNCTION(x.y), FUNCTION(x.z)); \
14
+ } \
15
+ \
16
+ DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x) { \
17
+ return (RET_TYPE##4)(FUNCTION(x.lo), FUNCTION(x.hi)); \
18
+ } \
19
+ \
20
+ DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x) { \
21
+ return (RET_TYPE##8)(FUNCTION(x.lo), FUNCTION(x.hi)); \
22
+ } \
23
+ \
24
+ DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x) { \
25
+ return (RET_TYPE##16)(FUNCTION(x.lo), FUNCTION(x.hi)); \
23
26
}
24
27
25
- #define _CLC_BINARY_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , ARG2_TYPE ) \
26
- DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y) { \
27
- return (RET_TYPE##2)(FUNCTION(x.x, y.x), FUNCTION(x.y, y.y)); \
28
- } \
29
- \
30
- DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y) { \
31
- return (RET_TYPE##3)(FUNCTION(x.x, y.x), FUNCTION(x.y, y.y), \
32
- FUNCTION(x.z, y.z)); \
33
- } \
34
- \
35
- DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y) { \
36
- return (RET_TYPE##4)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
37
- } \
38
- \
39
- DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y) { \
40
- return (RET_TYPE##8)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
41
- } \
42
- \
43
- DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y) { \
44
- return (RET_TYPE##16)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
28
+ #define _CLC_BINARY_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , \
29
+ ARG2_TYPE ) \
30
+ DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y) { \
31
+ return (RET_TYPE##2)(FUNCTION(x.x, y.x), FUNCTION(x.y, y.y)); \
32
+ } \
33
+ \
34
+ DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y) { \
35
+ return (RET_TYPE##3)(FUNCTION(x.x, y.x), FUNCTION(x.y, y.y), \
36
+ FUNCTION(x.z, y.z)); \
37
+ } \
38
+ \
39
+ DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y) { \
40
+ return (RET_TYPE##4)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
41
+ } \
42
+ \
43
+ DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y) { \
44
+ return (RET_TYPE##8)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
45
+ } \
46
+ \
47
+ DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y) { \
48
+ return (RET_TYPE##16)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
45
49
}
46
50
47
- #define _CLC_V_S_V_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , ARG2_TYPE ) \
48
- DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE x, ARG2_TYPE##2 y) { \
49
- return (RET_TYPE##2)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
50
- } \
51
- \
52
- DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE x, ARG2_TYPE##3 y) { \
53
- return (RET_TYPE##3)(FUNCTION(x, y.x), FUNCTION(x, y.y), \
54
- FUNCTION(x, y.z)); \
55
- } \
56
- \
57
- DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE x, ARG2_TYPE##4 y) { \
58
- return (RET_TYPE##4)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
59
- } \
60
- \
61
- DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE x, ARG2_TYPE##8 y) { \
62
- return (RET_TYPE##8)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
63
- } \
64
- \
65
- DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE x, ARG2_TYPE##16 y) { \
66
- return (RET_TYPE##16)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
67
- } \
68
- \
69
-
70
- #define _CLC_TERNARY_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , ARG2_TYPE , ARG3_TYPE ) \
71
- DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y, ARG3_TYPE##2 z) { \
72
- return (RET_TYPE##2)(FUNCTION(x.x, y.x, z.x), FUNCTION(x.y, y.y, z.y)); \
73
- } \
74
- \
75
- DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y, ARG3_TYPE##3 z) { \
76
- return (RET_TYPE##3)(FUNCTION(x.x, y.x, z.x), FUNCTION(x.y, y.y, z.y), \
77
- FUNCTION(x.z, y.z, z.z)); \
78
- } \
79
- \
80
- DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y, ARG3_TYPE##4 z) { \
81
- return (RET_TYPE##4)(FUNCTION(x.lo, y.lo, z.lo), FUNCTION(x.hi, y.hi, z.hi)); \
82
- } \
83
- \
84
- DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y, ARG3_TYPE##8 z) { \
85
- return (RET_TYPE##8)(FUNCTION(x.lo, y.lo, z.lo), FUNCTION(x.hi, y.hi, z.hi)); \
86
- } \
87
- \
88
- DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y, ARG3_TYPE##16 z) { \
89
- return (RET_TYPE##16)(FUNCTION(x.lo, y.lo, z.lo), FUNCTION(x.hi, y.hi, z.hi)); \
51
+ #define _CLC_V_S_V_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , \
52
+ ARG2_TYPE ) \
53
+ DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE x, ARG2_TYPE##2 y) { \
54
+ return (RET_TYPE##2)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
55
+ } \
56
+ \
57
+ DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE x, ARG2_TYPE##3 y) { \
58
+ return (RET_TYPE##3)(FUNCTION(x, y.x), FUNCTION(x, y.y), \
59
+ FUNCTION(x, y.z)); \
60
+ } \
61
+ \
62
+ DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE x, ARG2_TYPE##4 y) { \
63
+ return (RET_TYPE##4)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
64
+ } \
65
+ \
66
+ DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE x, ARG2_TYPE##8 y) { \
67
+ return (RET_TYPE##8)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
68
+ } \
69
+ \
70
+ DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE x, ARG2_TYPE##16 y) { \
71
+ return (RET_TYPE##16)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
72
+ }
73
+
74
+ #define _CLC_TERNARY_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , \
75
+ ARG2_TYPE , ARG3_TYPE ) \
76
+ DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y, \
77
+ ARG3_TYPE##2 z) { \
78
+ return (RET_TYPE##2)(FUNCTION(x.x, y.x, z.x), FUNCTION(x.y, y.y, z.y)); \
79
+ } \
80
+ \
81
+ DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y, \
82
+ ARG3_TYPE##3 z) { \
83
+ return (RET_TYPE##3)(FUNCTION(x.x, y.x, z.x), FUNCTION(x.y, y.y, z.y), \
84
+ FUNCTION(x.z, y.z, z.z)); \
85
+ } \
86
+ \
87
+ DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y, \
88
+ ARG3_TYPE##4 z) { \
89
+ return (RET_TYPE##4)(FUNCTION(x.lo, y.lo, z.lo), \
90
+ FUNCTION(x.hi, y.hi, z.hi)); \
91
+ } \
92
+ \
93
+ DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y, \
94
+ ARG3_TYPE##8 z) { \
95
+ return (RET_TYPE##8)(FUNCTION(x.lo, y.lo, z.lo), \
96
+ FUNCTION(x.hi, y.hi, z.hi)); \
97
+ } \
98
+ \
99
+ DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y, \
100
+ ARG3_TYPE##16 z) { \
101
+ return (RET_TYPE##16)(FUNCTION(x.lo, y.lo, z.lo), \
102
+ FUNCTION(x.hi, y.hi, z.hi)); \
90
103
}
91
104
92
105
#define _CLC_V_S_S_V_VECTORIZE (DECLSPEC , RET_TYPE , FUNCTION , ARG1_TYPE , \
161
174
ARG2_TYPE, 8) *)((ADDR_SPACE ARG2_TYPE *)y + 8))); \
162
175
}
163
176
164
- #define _CLC_DEFINE_BINARY_BUILTIN (RET_TYPE , FUNCTION , BUILTIN , ARG1_TYPE , ARG2_TYPE ) \
165
- _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \
166
- return BUILTIN(x, y); \
167
- } \
168
- _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, ARG2_TYPE)
177
+ #define _CLC_DEFINE_BINARY_BUILTIN (RET_TYPE , FUNCTION , BUILTIN , ARG1_TYPE , \
178
+ ARG2_TYPE ) \
179
+ _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \
180
+ return BUILTIN(x, y); \
181
+ } \
182
+ _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, \
183
+ ARG2_TYPE)
169
184
170
- #define _CLC_DEFINE_BINARY_BUILTIN_WITH_SCALAR_SECOND_ARG (RET_TYPE , FUNCTION , BUILTIN , ARG1_TYPE , ARG2_TYPE ) \
171
- _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, ARG2_TYPE) \
172
- _CLC_BINARY_VECTORIZE_SCALAR_SECOND_ARG(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, ARG2_TYPE)
185
+ #define _CLC_DEFINE_BINARY_BUILTIN_WITH_SCALAR_SECOND_ARG ( \
186
+ RET_TYPE , FUNCTION , BUILTIN , ARG1_TYPE , ARG2_TYPE ) \
187
+ _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \
188
+ ARG2_TYPE) \
189
+ _CLC_BINARY_VECTORIZE_SCALAR_SECOND_ARG(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, \
190
+ FUNCTION, ARG1_TYPE, ARG2_TYPE)
173
191
174
- #define _CLC_DEFINE_UNARY_BUILTIN (RET_TYPE , FUNCTION , BUILTIN , ARG1_TYPE ) \
175
- _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x) { \
176
- return BUILTIN(x); \
177
- } \
178
- _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE)
192
+ #define _CLC_DEFINE_UNARY_BUILTIN (RET_TYPE , FUNCTION , BUILTIN , ARG1_TYPE ) \
193
+ _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x) { return BUILTIN(x); } \
194
+ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE)
179
195
180
196
#ifdef cl_khr_fp16
181
197
@@ -199,3 +215,5 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE)
199
215
#define _CLC_DEFINE_BINARY_BUILTIN_FP16 (FUNCTION )
200
216
201
217
#endif
218
+
219
+ #endif // __CLC_CLCMACRO_H__
0 commit comments