@@ -57,7 +57,12 @@ struct FloorDivideFunctor
57
57
58
58
resT operator ()(const argT1 &in1, const argT2 &in2)
59
59
{
60
- if constexpr (std::is_integral_v<argT1> || std::is_integral_v<argT2>) {
60
+ if constexpr (std::is_same_v<argT1, bool > &&
61
+ std::is_same_v<argT2, bool >) {
62
+ return (in2) ? static_cast <resT>(in1) : resT (0 );
63
+ }
64
+ else if constexpr (std::is_integral_v<argT1> ||
65
+ std::is_integral_v<argT2>) {
61
66
if (in2 == argT2 (0 )) {
62
67
return resT (0 );
63
68
}
@@ -81,7 +86,16 @@ struct FloorDivideFunctor
81
86
sycl::vec<resT, vec_sz> operator ()(const sycl::vec<argT1, vec_sz> &in1,
82
87
const sycl::vec<argT2, vec_sz> &in2)
83
88
{
84
- if constexpr (std::is_integral_v<resT>) {
89
+ if constexpr (std::is_same_v<argT1, bool > &&
90
+ std::is_same_v<argT2, bool >) {
91
+ sycl::vec<resT, vec_sz> res;
92
+ #pragma unroll
93
+ for (int i = 0 ; i < vec_sz; ++i) {
94
+ res[i] = (in2[i]) ? static_cast <resT>(in1[i]) : resT (0 );
95
+ }
96
+ return res;
97
+ }
98
+ else if constexpr (std::is_integral_v<resT>) {
85
99
sycl::vec<resT, vec_sz> res;
86
100
#pragma unroll
87
101
for (int i = 0 ; i < vec_sz; ++i) {
0 commit comments