Skip to content

Commit 80498d1

Browse files
author
Pavel Chupin
authored
[SYCL][libclc] Replace clcmacro.h symlink with a copy (#6845)
Symlinks are producing problems on Windows. Replacing it with a real copy as a quick workaround.
1 parent 2fb1d0e commit 80498d1

File tree

1 file changed

+211
-1
lines changed

1 file changed

+211
-1
lines changed

libclc/generic/lib/clcmacro.h

Lines changed: 0 additions & 1 deletion
This file was deleted.

libclc/generic/lib/clcmacro.h

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef __CLC_MACRO_H
10+
#define __CLC_MACRO_H
11+
12+
#define _CLC_UNARY_VECTORIZE_HAVE2(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE) \
13+
DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x) { \
14+
return (RET_TYPE##3)(FUNCTION(x.x), FUNCTION(x.y), FUNCTION(x.z)); \
15+
} \
16+
\
17+
DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x) { \
18+
return (RET_TYPE##4)(FUNCTION(x.lo), FUNCTION(x.hi)); \
19+
} \
20+
\
21+
DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x) { \
22+
return (RET_TYPE##8)(FUNCTION(x.lo), FUNCTION(x.hi)); \
23+
} \
24+
\
25+
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x) { \
26+
return (RET_TYPE##16)(FUNCTION(x.lo), FUNCTION(x.hi)); \
27+
}
28+
29+
#define _CLC_UNARY_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE) \
30+
DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x) { \
31+
return (RET_TYPE##2)(FUNCTION(x.x), FUNCTION(x.y)); \
32+
} \
33+
_CLC_UNARY_VECTORIZE_HAVE2(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE)
34+
35+
#define _CLC_BINARY_VECTORIZE_HAVE2(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
36+
ARG2_TYPE) \
37+
DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y) { \
38+
return (RET_TYPE##3)(FUNCTION(x.x, y.x), FUNCTION(x.y, y.y), \
39+
FUNCTION(x.z, y.z)); \
40+
} \
41+
\
42+
DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y) { \
43+
return (RET_TYPE##4)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
44+
} \
45+
\
46+
DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y) { \
47+
return (RET_TYPE##8)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
48+
} \
49+
\
50+
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y) { \
51+
return (RET_TYPE##16)(FUNCTION(x.lo, y.lo), FUNCTION(x.hi, y.hi)); \
52+
}
53+
54+
#define _CLC_BINARY_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
55+
ARG2_TYPE) \
56+
DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y) { \
57+
return (RET_TYPE##2)(FUNCTION(x.x, y.x), FUNCTION(x.y, y.y)); \
58+
} \
59+
_CLC_BINARY_VECTORIZE_HAVE2(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
60+
ARG2_TYPE)
61+
62+
#define _CLC_V_S_V_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
63+
ARG2_TYPE) \
64+
DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE x, ARG2_TYPE##2 y) { \
65+
return (RET_TYPE##2)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
66+
} \
67+
\
68+
DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE x, ARG2_TYPE##3 y) { \
69+
return (RET_TYPE##3)(FUNCTION(x, y.x), FUNCTION(x, y.y), \
70+
FUNCTION(x, y.z)); \
71+
} \
72+
\
73+
DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE x, ARG2_TYPE##4 y) { \
74+
return (RET_TYPE##4)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
75+
} \
76+
\
77+
DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE x, ARG2_TYPE##8 y) { \
78+
return (RET_TYPE##8)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
79+
} \
80+
\
81+
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE x, ARG2_TYPE##16 y) { \
82+
return (RET_TYPE##16)(FUNCTION(x, y.lo), FUNCTION(x, y.hi)); \
83+
}
84+
85+
#define _CLC_TERNARY_VECTORIZE_HAVE2(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
86+
ARG2_TYPE, ARG3_TYPE) \
87+
DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y, \
88+
ARG3_TYPE##3 z) { \
89+
return (RET_TYPE##3)(FUNCTION(x.x, y.x, z.x), FUNCTION(x.y, y.y, z.y), \
90+
FUNCTION(x.z, y.z, z.z)); \
91+
} \
92+
\
93+
DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y, \
94+
ARG3_TYPE##4 z) { \
95+
return (RET_TYPE##4)(FUNCTION(x.lo, y.lo, z.lo), \
96+
FUNCTION(x.hi, y.hi, z.hi)); \
97+
} \
98+
\
99+
DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y, \
100+
ARG3_TYPE##8 z) { \
101+
return (RET_TYPE##8)(FUNCTION(x.lo, y.lo, z.lo), \
102+
FUNCTION(x.hi, y.hi, z.hi)); \
103+
} \
104+
\
105+
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, ARG2_TYPE##16 y, \
106+
ARG3_TYPE##16 z) { \
107+
return (RET_TYPE##16)(FUNCTION(x.lo, y.lo, z.lo), \
108+
FUNCTION(x.hi, y.hi, z.hi)); \
109+
}
110+
111+
#define _CLC_TERNARY_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
112+
ARG2_TYPE, ARG3_TYPE) \
113+
DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y, \
114+
ARG3_TYPE##2 z) { \
115+
return (RET_TYPE##2)(FUNCTION(x.x, y.x, z.x), FUNCTION(x.y, y.y, z.y)); \
116+
} \
117+
_CLC_TERNARY_VECTORIZE_HAVE2(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
118+
ARG2_TYPE, ARG3_TYPE)
119+
120+
#define _CLC_V_S_S_V_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
121+
ARG2_TYPE, ARG3_TYPE) \
122+
DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE x, ARG2_TYPE y, ARG3_TYPE##2 z) { \
123+
return (RET_TYPE##2)(FUNCTION(x, y, z.lo), FUNCTION(x, y, z.hi)); \
124+
} \
125+
\
126+
DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE x, ARG2_TYPE y, ARG3_TYPE##3 z) { \
127+
return (RET_TYPE##3)(FUNCTION(x, y, z.x), FUNCTION(x, y, z.y), \
128+
FUNCTION(x, y, z.z)); \
129+
} \
130+
\
131+
DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE x, ARG2_TYPE y, ARG3_TYPE##4 z) { \
132+
return (RET_TYPE##4)(FUNCTION(x, y, z.lo), FUNCTION(x, y, z.hi)); \
133+
} \
134+
\
135+
DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE x, ARG2_TYPE y, ARG3_TYPE##8 z) { \
136+
return (RET_TYPE##8)(FUNCTION(x, y, z.lo), FUNCTION(x, y, z.hi)); \
137+
} \
138+
\
139+
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE x, ARG2_TYPE y, ARG3_TYPE##16 z) { \
140+
return (RET_TYPE##16)(FUNCTION(x, y, z.lo), FUNCTION(x, y, z.hi)); \
141+
}
142+
143+
#define _CLC_V_V_VP_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
144+
ADDR_SPACE, ARG2_TYPE) \
145+
DECLSPEC RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ADDR_SPACE ARG2_TYPE##2 * y) { \
146+
return (RET_TYPE##2)( \
147+
FUNCTION(x.x, (ADDR_SPACE ARG2_TYPE *)y), \
148+
FUNCTION(x.y, \
149+
(ADDR_SPACE ARG2_TYPE *)((ADDR_SPACE ARG2_TYPE *)y + 1))); \
150+
} \
151+
\
152+
DECLSPEC RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ADDR_SPACE ARG2_TYPE##3 * y) { \
153+
return (RET_TYPE##3)( \
154+
FUNCTION(x.x, (ADDR_SPACE ARG2_TYPE *)y), \
155+
FUNCTION(x.y, \
156+
(ADDR_SPACE ARG2_TYPE *)((ADDR_SPACE ARG2_TYPE *)y + 1)), \
157+
FUNCTION(x.z, \
158+
(ADDR_SPACE ARG2_TYPE *)((ADDR_SPACE ARG2_TYPE *)y + 2))); \
159+
} \
160+
\
161+
DECLSPEC RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ADDR_SPACE ARG2_TYPE##4 * y) { \
162+
return (RET_TYPE##4)( \
163+
FUNCTION(x.lo, (ADDR_SPACE ARG2_TYPE##2 *)y), \
164+
FUNCTION(x.hi, \
165+
(ADDR_SPACE ARG2_TYPE##2 *)((ADDR_SPACE ARG2_TYPE *)y + 2))); \
166+
} \
167+
\
168+
DECLSPEC RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ADDR_SPACE ARG2_TYPE##8 * y) { \
169+
return (RET_TYPE##8)( \
170+
FUNCTION(x.lo, (ADDR_SPACE ARG2_TYPE##4 *)y), \
171+
FUNCTION(x.hi, \
172+
(ADDR_SPACE ARG2_TYPE##4 *)((ADDR_SPACE ARG2_TYPE *)y + 4))); \
173+
} \
174+
\
175+
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, \
176+
ADDR_SPACE ARG2_TYPE##16 * y) { \
177+
return (RET_TYPE##16)( \
178+
FUNCTION(x.lo, (ADDR_SPACE ARG2_TYPE##8 *)y), \
179+
FUNCTION(x.hi, \
180+
(ADDR_SPACE ARG2_TYPE##8 *)((ADDR_SPACE ARG2_TYPE *)y + 8))); \
181+
}
182+
183+
#define _CLC_DEFINE_TERNARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \
184+
ARG2_TYPE, ARG3_TYPE) \
185+
_CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y, \
186+
ARG3_TYPE z) { \
187+
return BUILTIN(x, y, z); \
188+
} \
189+
_CLC_TERNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, \
190+
ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)
191+
192+
#define _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \
193+
ARG2_TYPE) \
194+
_CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \
195+
return BUILTIN(x, y); \
196+
} \
197+
_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, \
198+
ARG2_TYPE)
199+
200+
#define _CLC_DEFINE_BINARY_BUILTIN_WITH_SCALAR_SECOND_ARG( \
201+
RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, ARG2_TYPE) \
202+
_CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \
203+
ARG2_TYPE) \
204+
_CLC_BINARY_VECTORIZE_SCALAR_SECOND_ARG(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, \
205+
FUNCTION, ARG1_TYPE, ARG2_TYPE)
206+
207+
#define _CLC_DEFINE_UNARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE) \
208+
_CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x) { return BUILTIN(x); } \
209+
_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE)
210+
211+
#endif // !__CLC_MACRO_H

0 commit comments

Comments
 (0)