@@ -77,14 +77,19 @@ class simd : public detail::simd_obj_impl<
77
77
}
78
78
79
79
// Implicit conversion constructor from sycl::ext::oneapi::experimental::simd
80
- template <
81
- int N1 = N, class Ty1 = Ty,
82
- class SFINAE = std:: enable_if_t <
83
- (N1 == N) && (N1 <= std::experimental::simd_abi::max_fixed_size<
84
- Ty>)&& !detail::is_wrapper_elem_type_v<Ty1>>>
80
+ template <int N1 = N, class Ty1 = Ty,
81
+ class SFINAE = std:: enable_if_t <
82
+ (N1 == N) &&
83
+ (N1 <= std::experimental::simd_abi::max_fixed_size<Ty>) &&
84
+ !detail::is_wrapper_elem_type_v<Ty1>>>
85
85
simd (const sycl::ext::oneapi::experimental::simd<Ty, N1> &v)
86
86
: simd(static_cast <raw_vector_type>(v)) {}
87
87
88
+ // Implicit conversion constructor from 1D simd_view
89
+ template <typename BaseTy, int Stride>
90
+ simd (simd_view<BaseTy, region_base<false , Ty, 1 , 1 , N, Stride>> &v)
91
+ : simd(v.read()) {}
92
+
88
93
// / Broadcast constructor with conversion. Converts given value to
89
94
// / #element_type and replicates it in all elements.
90
95
// / Available when \c T1 is a valid simd element type.
@@ -113,11 +118,11 @@ class simd : public detail::simd_obj_impl<
113
118
// / object. Available when the number of elements does not exceed maximum
114
119
// / fixed size of the oneapi's simd_abi and (TODO, temporary limitation) the
115
120
// / element type is a primitive type (e.g. can't be sycl::half).
116
- template <
117
- int N1, class Ty1 = Ty,
118
- class SFINAE = std:: enable_if_t <
119
- (N1 == N) && (N1 <= std::experimental::simd_abi::max_fixed_size<
120
- Ty>)&& !detail::is_wrapper_elem_type_v<Ty1>>>
121
+ template <int N1, class Ty1 = Ty,
122
+ class SFINAE = std:: enable_if_t <
123
+ (N1 == N) &&
124
+ (N1 <= std::experimental::simd_abi::max_fixed_size<Ty>) &&
125
+ !detail::is_wrapper_elem_type_v<Ty1>>>
121
126
operator sycl::ext::oneapi::experimental::simd<Ty, N1>() {
122
127
return sycl::ext::oneapi::experimental::simd<Ty, N1>(base_type::data ());
123
128
}
@@ -210,7 +215,8 @@ template <int N> using simd_mask = detail::simd_mask_type<N>;
210
215
template <typename Ty, int N>
211
216
std::ostream &operator <<(std::ostream &OS, const __ESIMD_NS::simd<Ty, N> &V)
212
217
#ifdef __SYCL_DEVICE_ONLY__
213
- {}
218
+ {
219
+ }
214
220
#else
215
221
{
216
222
__ESIMD_UNSUPPORTED_ON_HOST;
0 commit comments