|
12 | 12 | #include <clc/internal/clc.h> |
13 | 13 | #include <clc/utils.h> |
14 | 14 |
|
15 | | -#define _CLC_UNARY_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE) \ |
16 | | - DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x) { \ |
17 | | - return (RET_TYPE##2)(FUNCTION(x.s0), FUNCTION(x.s1)); \ |
18 | | - } \ |
19 | | - \ |
20 | | - DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x) { \ |
21 | | - return (RET_TYPE##3)(FUNCTION(x.s0), FUNCTION(x.s1), FUNCTION(x.s2)); \ |
22 | | - } \ |
23 | | - \ |
24 | | - DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x) { \ |
25 | | - return (RET_TYPE##4)(FUNCTION(x.s0), FUNCTION(x.s1), FUNCTION(x.s2), \ |
26 | | - FUNCTION(x.s3)); \ |
27 | | - } \ |
28 | | - \ |
29 | | - DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x) { \ |
30 | | - return (RET_TYPE##8)(FUNCTION(x.s0), FUNCTION(x.s1), FUNCTION(x.s2), \ |
31 | | - FUNCTION(x.s3), FUNCTION(x.s4), FUNCTION(x.s5), \ |
32 | | - FUNCTION(x.s6), FUNCTION(x.s7)); \ |
33 | | - } \ |
34 | | - \ |
35 | | - DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x) { \ |
36 | | - return (RET_TYPE##16)( \ |
37 | | - FUNCTION(x.s0), FUNCTION(x.s1), FUNCTION(x.s2), FUNCTION(x.s3), \ |
38 | | - FUNCTION(x.s4), FUNCTION(x.s5), FUNCTION(x.s6), FUNCTION(x.s7), \ |
39 | | - FUNCTION(x.s8), FUNCTION(x.s9), FUNCTION(x.sa), FUNCTION(x.sb), \ |
40 | | - FUNCTION(x.sc), FUNCTION(x.sd), FUNCTION(x.se), FUNCTION(x.sf)); \ |
41 | | - } |
42 | | - |
43 | | -#define _CLC_BINARY_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \ |
44 | | - ARG2_TYPE) \ |
45 | | - DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y) { \ |
46 | | - return (RET_TYPE##2)(FUNCTION(x.s0, y.s0), FUNCTION(x.s1, y.s1)); \ |
47 | | - } \ |
48 | | - \ |
49 | | - DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y) { \ |
50 | | - return (RET_TYPE##3)(FUNCTION(x.s0, y.s0), FUNCTION(x.s1, y.s1), \ |
51 | | - FUNCTION(x.s2, y.s2)); \ |
52 | | - } \ |
53 | | - \ |
54 | | - DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y) { \ |
55 | | - return (RET_TYPE##4)(FUNCTION(x.s0, y.s0), FUNCTION(x.s1, y.s1), \ |
56 | | - FUNCTION(x.s2, y.s2), FUNCTION(x.s3, y.s3)); \ |
57 | | - } \ |
58 | | - \ |
59 | | - DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y) { \ |
60 | | - return (RET_TYPE##8)(FUNCTION(x.s0, y.s0), FUNCTION(x.s1, y.s1), \ |
61 | | - FUNCTION(x.s2, y.s2), FUNCTION(x.s3, y.s3), \ |
62 | | - FUNCTION(x.s4, y.s4), FUNCTION(x.s5, y.s5), \ |
63 | | - FUNCTION(x.s6, y.s6), FUNCTION(x.s7, y.s7)); \ |
64 | | - } \ |
65 | | - \ |
66 | | - DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y) { \ |
67 | | - return (RET_TYPE##16)( \ |
68 | | - FUNCTION(x.s0, y.s0), FUNCTION(x.s1, y.s1), FUNCTION(x.s2, y.s2), \ |
69 | | - FUNCTION(x.s3, y.s3), FUNCTION(x.s4, y.s4), FUNCTION(x.s5, y.s5), \ |
70 | | - FUNCTION(x.s6, y.s6), FUNCTION(x.s7, y.s7), FUNCTION(x.s8, y.s8), \ |
71 | | - FUNCTION(x.s9, y.s9), FUNCTION(x.sa, y.sa), FUNCTION(x.sb, y.sb), \ |
72 | | - FUNCTION(x.sc, y.sc), FUNCTION(x.sd, y.sd), FUNCTION(x.se, y.se), \ |
73 | | - FUNCTION(x.sf, y.sf)); \ |
74 | | - } |
75 | | - |
76 | | -#define _CLC_TERNARY_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \ |
77 | | - ARG2_TYPE, ARG3_TYPE) \ |
78 | | - DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y, \ |
79 | | - ARG3_TYPE##2 z) { \ |
80 | | - return (RET_TYPE##2)(FUNCTION(x.s0, y.s0, z.s0), \ |
81 | | - FUNCTION(x.s1, y.s1, z.s1)); \ |
82 | | - } \ |
83 | | - \ |
84 | | - DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y, \ |
85 | | - ARG3_TYPE##3 z) { \ |
86 | | - return (RET_TYPE##3)(FUNCTION(x.s0, y.s0, z.s0), \ |
87 | | - FUNCTION(x.s1, y.s1, z.s1), \ |
88 | | - FUNCTION(x.s2, y.s2, z.s2)); \ |
89 | | - } \ |
90 | | - \ |
91 | | - DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y, \ |
92 | | - ARG3_TYPE##4 z) { \ |
93 | | - return (RET_TYPE##4)( \ |
94 | | - FUNCTION(x.s0, y.s0, z.s0), FUNCTION(x.s1, y.s1, z.s1), \ |
95 | | - FUNCTION(x.s2, y.s2, z.s2), FUNCTION(x.s3, y.s3, z.s3)); \ |
96 | | - } \ |
97 | | - \ |
98 | | - DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y, \ |
99 | | - ARG3_TYPE##8 z) { \ |
100 | | - return (RET_TYPE##8)( \ |
101 | | - FUNCTION(x.s0, y.s0, z.s0), FUNCTION(x.s1, y.s1, z.s1), \ |
102 | | - FUNCTION(x.s2, y.s2, z.s2), FUNCTION(x.s3, y.s3, z.s3), \ |
103 | | - FUNCTION(x.s4, y.s4, z.s4), FUNCTION(x.s5, y.s5, z.s5), \ |
104 | | - FUNCTION(x.s6, y.s6, z.s6), FUNCTION(x.s7, y.s7, z.s7)); \ |
105 | | - } \ |
106 | | - \ |
107 | | - DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y, \ |
108 | | - ARG3_TYPE##16 z) { \ |
109 | | - return (RET_TYPE##16)( \ |
110 | | - FUNCTION(x.s0, y.s0, z.s0), FUNCTION(x.s1, y.s1, z.s1), \ |
111 | | - FUNCTION(x.s2, y.s2, z.s2), FUNCTION(x.s3, y.s3, z.s3), \ |
112 | | - FUNCTION(x.s4, y.s4, z.s4), FUNCTION(x.s5, y.s5, z.s5), \ |
113 | | - FUNCTION(x.s6, y.s6, z.s6), FUNCTION(x.s7, y.s7, z.s7), \ |
114 | | - FUNCTION(x.s8, y.s8, z.s8), FUNCTION(x.s9, y.s9, z.s9), \ |
115 | | - FUNCTION(x.sa, y.sa, z.sa), FUNCTION(x.sb, y.sb, z.sb), \ |
116 | | - FUNCTION(x.sc, y.sc, z.sc), FUNCTION(x.sd, y.sd, z.sd), \ |
117 | | - FUNCTION(x.se, y.se, z.se), FUNCTION(x.sf, y.sf, z.sf)); \ |
118 | | - } |
119 | | - |
120 | 15 | #define _CLC_V_V_VP_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \ |
121 | 16 | ADDR_SPACE, ARG2_TYPE) \ |
122 | 17 | DECLSPEC __CLC_XCONCAT(RET_TYPE, 2) \ |
|
171 | 66 | FUNCTION(x.sf, ptr + 15)); \ |
172 | 67 | } |
173 | 68 |
|
174 | | -#define _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \ |
175 | | - ARG2_TYPE) \ |
176 | | - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \ |
177 | | - return BUILTIN(x, y); \ |
178 | | - } \ |
179 | | - _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, \ |
180 | | - ARG2_TYPE) |
181 | | - |
182 | 69 | #endif // __CLC_CLCMACRO_H__ |
0 commit comments