@@ -1377,6 +1377,45 @@ detail::common_rel_ret_t<T> signbit(T x) __NOEXC {
1377
1377
__sycl_std::__invoke_SignBitSet<detail::internal_rel_ret_t <T>>(x));
1378
1378
}
1379
1379
1380
+ // marray relational functions
1381
+
1382
+ #define __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (NAME ) \
1383
+ template <typename T, \
1384
+ typename = std::enable_if_t <detail::is_mgenfloat<T>::value>> \
1385
+ sycl::marray<bool , T::size ()> NAME (T x, T y) __NOEXC { \
1386
+ sycl::marray<bool , T::size ()> res; \
1387
+ for (int i = 0 ; i < x.size (); i++) { \
1388
+ res[i] = NAME (x[i], y[i]); \
1389
+ } \
1390
+ return res; \
1391
+ }
1392
+
1393
+ #define __SYCL_MARRAY_RELATIONAL_FUNCTION_UNOP_OVERLOAD (NAME ) \
1394
+ template <typename T, \
1395
+ typename = std::enable_if_t <detail::is_mgenfloat<T>::value>> \
1396
+ sycl::marray<bool , T::size ()> NAME (T x) __NOEXC { \
1397
+ sycl::marray<bool , T::size ()> res; \
1398
+ for (int i = 0 ; i < x.size (); i++) { \
1399
+ res[i] = NAME (x[i]); \
1400
+ } \
1401
+ return res; \
1402
+ }
1403
+
1404
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isequal)
1405
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isnotequal)
1406
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isgreater)
1407
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isgreaterequal)
1408
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isless)
1409
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (islessequal)
1410
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (islessgreater)
1411
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_UNOP_OVERLOAD (isfinite)
1412
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_UNOP_OVERLOAD (isinf)
1413
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_UNOP_OVERLOAD (isnan)
1414
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_UNOP_OVERLOAD (isnormal)
1415
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isordered)
1416
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_BINOP_OVERLOAD (isunordered)
1417
+ __SYCL_MARRAY_RELATIONAL_FUNCTION_UNOP_OVERLOAD (signbit)
1418
+
1380
1419
namespace detail {
1381
1420
#if defined(SYCL2020_CONFORMANT_APIS) && SYCL_LANGUAGE_VERSION >= 202001
1382
1421
using anyall_ret_t = bool ;
@@ -1431,6 +1470,18 @@ detail::enable_if_t<detail::is_sgentype<T>::value, T> select(T a, T b,
1431
1470
return __sycl_std::__invoke_select<T>(a, b, static_cast <int >(c));
1432
1471
}
1433
1472
1473
+ // mgentype select (mgentype a, mgentype b, marray<bool, { N }> c)
1474
+ template <typename T,
1475
+ typename = std::enable_if_t <detail::is_mgenfloat<T>::value>>
1476
+ sycl::marray<detail::marray_element_type<T>, T::size ()>
1477
+ select (T a, T b, sycl::marray<bool , T::size ()> c) __NOEXC {
1478
+ sycl::marray<detail::marray_element_type<T>, T::size ()> res;
1479
+ for (int i = 0 ; i < a.size (); i++) {
1480
+ res[i] = select (a[i], b[i], c[i]);
1481
+ }
1482
+ return res;
1483
+ }
1484
+
1434
1485
// geninteger select (geninteger a, geninteger b, igeninteger c)
1435
1486
template <typename T, typename T2>
1436
1487
detail::enable_if_t <
0 commit comments