@@ -277,11 +277,14 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
277
277
278
278
#undef __ESIMD_DEF_UNARY_OP
279
279
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>>>
282
283
auto operator !() {
284
+ using MaskVecT = typename simd_mask_type<length>::vector_type;
283
285
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 )};
285
288
}
286
289
287
290
// / @{
@@ -290,9 +293,12 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
290
293
return write (Other.read ());
291
294
}
292
295
296
+ Derived &operator =(const Derived &Other) { return write (Other.read ()); }
297
+
293
298
Derived &operator =(const value_type &Val) { return write (Val); }
294
299
295
300
// / Move assignment operator.
301
+ Derived &operator =(Derived &&Other) { return write (Other.read ()); }
296
302
simd_view_impl &operator =(simd_view_impl &&Other) {
297
303
return write (Other.read ());
298
304
}
@@ -406,7 +412,7 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
406
412
// / \return replicated simd instance.
407
413
template <int Rep, int W>
408
414
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);
410
416
}
411
417
412
418
// / \tparam Rep is number of times region has to be replicated.
@@ -417,7 +423,7 @@ template <typename BaseTy, typename RegionTy> class simd_view_impl {
417
423
template <int Rep, int W>
418
424
get_simd_t <element_type, Rep * W> replicate (uint16_t OffsetY,
419
425
uint16_t OffsetX) {
420
- return replicate<Rep, 1 , W>(OffsetY, OffsetX);
426
+ return replicate<Rep, 0 , W>(OffsetY, OffsetX);
421
427
}
422
428
423
429
// / \tparam Rep is number of times region has to be replicated.
0 commit comments