21 #ifndef EIGEN_MATH_FUNCTIONS_SYCL_H
22 #define EIGEN_MATH_FUNCTIONS_SYCL_H
30 #if defined(SYCL_DEVICE_ONLY)
31 #define SYCL_PLOG(packet_type) \
33 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type plog<packet_type>( \
34 const packet_type& a) { \
35 return cl::sycl::log(a); \
38 SYCL_PLOG(cl::sycl::cl_float4)
39 SYCL_PLOG(cl::sycl::cl_double2)
42 #define SYCL_PLOG1P(packet_type) \
44 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type plog1p<packet_type>( \
45 const packet_type& a) { \
46 return cl::sycl::log1p(a); \
49 SYCL_PLOG1P(cl::sycl::cl_float4)
50 SYCL_PLOG1P(cl::sycl::cl_double2)
53 #define SYCL_PLOG10(packet_type) \
55 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type plog10<packet_type>( \
56 const packet_type& a) { \
57 return cl::sycl::log10(a); \
60 SYCL_PLOG10(cl::sycl::cl_float4)
61 SYCL_PLOG10(cl::sycl::cl_double2)
64 #define SYCL_PEXP(packet_type) \
66 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pexp<packet_type>( \
67 const packet_type& a) { \
68 return cl::sycl::exp(a); \
71 SYCL_PEXP(cl::sycl::cl_float4)
72 SYCL_PEXP(cl::sycl::cl_float)
73 SYCL_PEXP(cl::sycl::cl_double2)
76 #define SYCL_PEXPM1(packet_type) \
78 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pexpm1<packet_type>( \
79 const packet_type& a) { \
80 return cl::sycl::expm1(a); \
83 SYCL_PEXPM1(cl::sycl::cl_float4)
84 SYCL_PEXPM1(cl::sycl::cl_double2)
87 #define SYCL_PSQRT(packet_type) \
89 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type psqrt<packet_type>( \
90 const packet_type& a) { \
91 return cl::sycl::sqrt(a); \
94 SYCL_PSQRT(cl::sycl::cl_float4)
95 SYCL_PSQRT(cl::sycl::cl_double2)
98 #define SYCL_PRSQRT(packet_type) \
100 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type prsqrt<packet_type>( \
101 const packet_type& a) { \
102 return cl::sycl::rsqrt(a); \
105 SYCL_PRSQRT(cl::sycl::cl_float4)
106 SYCL_PRSQRT(cl::sycl::cl_double2)
110 #define SYCL_PSIN(packet_type) \
112 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type psin<packet_type>( \
113 const packet_type& a) { \
114 return cl::sycl::sin(a); \
117 SYCL_PSIN(cl::sycl::cl_float4)
118 SYCL_PSIN(cl::sycl::cl_double2)
122 #define SYCL_PCOS(packet_type) \
124 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pcos<packet_type>( \
125 const packet_type& a) { \
126 return cl::sycl::cos(a); \
129 SYCL_PCOS(cl::sycl::cl_float4)
130 SYCL_PCOS(cl::sycl::cl_double2)
134 #define SYCL_PTAN(packet_type) \
136 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type ptan<packet_type>( \
137 const packet_type& a) { \
138 return cl::sycl::tan(a); \
141 SYCL_PTAN(cl::sycl::cl_float4)
142 SYCL_PTAN(cl::sycl::cl_double2)
146 #define SYCL_PASIN(packet_type) \
148 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pasin<packet_type>( \
149 const packet_type& a) { \
150 return cl::sycl::asin(a); \
153 SYCL_PASIN(cl::sycl::cl_float4)
154 SYCL_PASIN(cl::sycl::cl_double2)
158 #define SYCL_PACOS(packet_type) \
160 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pacos<packet_type>( \
161 const packet_type& a) { \
162 return cl::sycl::acos(a); \
165 SYCL_PACOS(cl::sycl::cl_float4)
166 SYCL_PACOS(cl::sycl::cl_double2)
170 #define SYCL_PATAN(packet_type) \
172 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type patan<packet_type>( \
173 const packet_type& a) { \
174 return cl::sycl::atan(a); \
177 SYCL_PATAN(cl::sycl::cl_float4)
178 SYCL_PATAN(cl::sycl::cl_double2)
182 #define SYCL_PSINH(packet_type) \
184 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type psinh<packet_type>( \
185 const packet_type& a) { \
186 return cl::sycl::sinh(a); \
189 SYCL_PSINH(cl::sycl::cl_float4)
190 SYCL_PSINH(cl::sycl::cl_double2)
194 #define SYCL_PCOSH(packet_type) \
196 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pcosh<packet_type>( \
197 const packet_type& a) { \
198 return cl::sycl::cosh(a); \
201 SYCL_PCOSH(cl::sycl::cl_float4)
202 SYCL_PCOSH(cl::sycl::cl_double2)
206 #define SYCL_PTANH(packet_type) \
208 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type ptanh<packet_type>( \
209 const packet_type& a) { \
210 return cl::sycl::tanh(a); \
213 SYCL_PTANH(cl::sycl::cl_float4)
214 SYCL_PTANH(cl::sycl::cl_double2)
217 #define SYCL_PCEIL(packet_type) \
219 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pceil<packet_type>( \
220 const packet_type& a) { \
221 return cl::sycl::ceil(a); \
224 SYCL_PCEIL(cl::sycl::cl_float4)
225 SYCL_PCEIL(cl::sycl::cl_double2)
228 #define SYCL_PROUND(packet_type) \
230 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pround<packet_type>( \
231 const packet_type& a) { \
232 return cl::sycl::round(a); \
235 SYCL_PROUND(cl::sycl::cl_float4)
236 SYCL_PROUND(cl::sycl::cl_double2)
239 #define SYCL_PRINT(packet_type) \
241 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type print<packet_type>( \
242 const packet_type& a) { \
243 return cl::sycl::rint(a); \
246 SYCL_PRINT(cl::sycl::cl_float4)
247 SYCL_PRINT(cl::sycl::cl_double2)
250 #define SYCL_FLOOR(packet_type) \
252 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pfloor<packet_type>( \
253 const packet_type& a) { \
254 return cl::sycl::floor(a); \
257 SYCL_FLOOR(cl::sycl::cl_float4)
258 SYCL_FLOOR(cl::sycl::cl_double2)
261 #define SYCL_PMIN(packet_type, expr) \
263 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pmin<packet_type>( \
264 const packet_type& a, const packet_type& b) { \
272 #define SYCL_PMAX(packet_type, expr) \
274 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pmax<packet_type>( \
275 const packet_type& a, const packet_type& b) { \
283 #define SYCL_PLDEXP(packet_type) \
285 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pldexp( \
286 const packet_type& a, const packet_type& exponent) { \
287 return cl::sycl::ldexp( \
288 a, exponent.template convert<cl::sycl::cl_int, \
289 cl::sycl::rounding_mode::automatic>()); \
292 SYCL_PLDEXP(cl::sycl::cl_float4)
293 SYCL_PLDEXP(cl::sycl::cl_double2)
301 #endif // EIGEN_MATH_FUNCTIONS_SYCL_H