@@ -277,11 +277,14 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
277277
278278#undef __ESIMD_DEF_UNARY_OP
279279
280- template <class T = element_type, class SimdT = BaseTy,
281- class = std::enable_if_t <is_simd_mask_type_v<SimdT>>>
280+ // / Unary logical negeation operator. Applies only to integer element types.
281+ template <class T = element_type,
282+ class = std::enable_if_t <std::is_integral_v<T>>>
282283 auto operator !() {
284+ using MaskVecT = typename simd_mask_type<length>::vector_type;
283285 auto V = read ().data () == 0 ;
284- return get_simd_t <element_type, length>(V);
286+ return simd_mask_type<length>{__builtin_convertvector (V, MaskVecT) &
287+ MaskVecT (1 )};
285288 }
286289
287290 // / @{
@@ -290,9 +293,12 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
290293 return write (Other.read ());
291294 }
292295
296+ Derived &operator =(const Derived &Other) { return write (Other.read ()); }
297+
293298 Derived &operator =(const value_type &Val) { return write (Val); }
294299
295300 // / Move assignment operator.
301+ Derived &operator =(Derived &&Other) { return write (Other.read ()); }
296302 simd_view_impl &operator =(simd_view_impl &&Other) {
297303 return write (Other.read ());
298304 }
@@ -406,7 +412,7 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
406412 // / \return replicated simd instance.
407413 template <int Rep, int W>
408414 get_simd_t <element_type, Rep * W> replicate (uint16_t OffsetX) {
409- return replicate<Rep, 1 , W>(0 , OffsetX);
415+ return replicate<Rep, 0 , W>(0 , OffsetX);
410416 }
411417
412418 // / \tparam Rep is number of times region has to be replicated.
@@ -417,7 +423,7 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
417423 template <int Rep, int W>
418424 get_simd_t <element_type, Rep * W> replicate (uint16_t OffsetY,
419425 uint16_t OffsetX) {
420- return replicate<Rep, 1 , W>(OffsetY, OffsetX);
426+ return replicate<Rep, 0 , W>(OffsetY, OffsetX);
421427 }
422428
423429 // / \tparam Rep is number of times region has to be replicated.
0 commit comments