@@ -239,6 +239,10 @@ template <typename T, typename R>
239
239
using is_float_to_float =
240
240
std::integral_constant<bool , detail::is_floating_point<T>::value &&
241
241
detail::is_floating_point<R>::value>;
242
+ template <typename T>
243
+ using is_standart_type =
244
+ std::integral_constant<bool , detail::is_sgentype<T>::value &&
245
+ !std::is_same<T, long long >::value && !std::is_same<T, unsigned long long >::value>;
242
246
243
247
template <typename T, typename R, rounding_mode roundingMode, typename OpenCLT, typename OpenCLR>
244
248
detail::enable_if_t <std::is_same<T, R>::value, R> convertImpl (T Value) {
@@ -326,7 +330,7 @@ using Rtn = detail::bool_constant<Mode == rounding_mode::rtn>;
326
330
(std::is_same<OpenCLR, DestType>::value || \
327
331
std::is_same<OpenCLR, signed char >::value && \
328
332
std::is_same<DestType, char >::value) && \
329
- !std::is_same<OpenCLT, OpenCLR>::value, \
333
+ !std::is_same<OpenCLT, OpenCLR>::value, \
330
334
R> \
331
335
convertImpl (T Value) { \
332
336
OpenCLT OpValue = cl::sycl::detail::convertDataToType<T, OpenCLT>(Value); \
@@ -337,6 +341,7 @@ __SYCL_GENERATE_CONVERT_IMPL(char)
337
341
__SYCL_GENERATE_CONVERT_IMPL(short )
338
342
__SYCL_GENERATE_CONVERT_IMPL(int )
339
343
__SYCL_GENERATE_CONVERT_IMPL(long )
344
+ __SYCL_GENERATE_CONVERT_IMPL(longlong)
340
345
341
346
#undef __SYCL_GENERATE_CONVERT_IMPL
342
347
@@ -466,6 +471,14 @@ __SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE(rtn, Rtn)
466
471
#undef __SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE
467
472
#undef __SYCL_GENERATE_CONVERT_IMPL
468
473
474
+ template <typename T, typename R, rounding_mode roundingMode, typename OpenCLT, typename OpenCLR>
475
+ detail::enable_if_t <
476
+ !is_standart_type<OpenCLT>::value || !is_standart_type<OpenCLR>::value,
477
+ R>
478
+ convertImpl (T Value) {
479
+ return static_cast <R>(Value);
480
+ }
481
+
469
482
#endif // __SYCL_DEVICE_ONLY__
470
483
471
484
} // namespace detail
0 commit comments