64
64
//
65
65
template <typename T, int N, int M, int VStride, int Width, int Stride,
66
66
int ParentWidth = 0 >
67
- __ESIMD_INTRIN __ESIMD_DNS::vector_type_t <T, M>
67
+ __ESIMD_INTRIN __ESIMD_INTRIN std::enable_if_t <(Width > 0 ) && M % Width == 0 ,
68
+ __ESIMD_DNS::vector_type_t <T, M>>
68
69
__esimd_rdregion (__ESIMD_DNS::vector_type_t <T, N> Input, uint16_t Offset);
69
70
70
71
template <typename T, int N, int M, int ParentWidth = 0 >
@@ -121,13 +122,14 @@ __esimd_rdindirect(__ESIMD_DNS::vector_type_t<T, N> Input,
121
122
//
122
123
template <typename T, int N, int M, int VStride, int Width, int Stride,
123
124
int ParentWidth = 0 >
124
- __ESIMD_INTRIN __ESIMD_DNS::vector_type_t <T, N>
125
+ __ESIMD_INTRIN std::enable_if_t <M <= N && (Width > 0 ) && M % Width == 0 ,
126
+ __ESIMD_DNS::vector_type_t <T, N>>
125
127
__esimd_wrregion (__ESIMD_DNS::vector_type_t <T, N> OldVal,
126
128
__ESIMD_DNS::vector_type_t <T, M> NewVal, uint16_t Offset,
127
129
__ESIMD_DNS::simd_mask_storage_t <M> Mask = 1 );
128
130
129
131
template <typename T, int N, int M, int ParentWidth = 0 >
130
- __ESIMD_INTRIN __ESIMD_DNS::vector_type_t <T, N>
132
+ __ESIMD_INTRIN std:: enable_if_t <M <= N, __ESIMD_DNS::vector_type_t <T, N> >
131
133
__esimd_wrindirect (__ESIMD_DNS::vector_type_t <T, N> OldVal,
132
134
__ESIMD_DNS::vector_type_t <T, M> NewVal,
133
135
__ESIMD_DNS::vector_type_t <uint16_t , M> Offset,
@@ -262,7 +264,8 @@ __ESIMD_INTRIN uint16_t __esimd_all(__ESIMD_DNS::vector_type_t<T, N> src)
262
264
// Implementations of ESIMD intrinsics for the SYCL host device
263
265
template <typename T, int N, int M, int VStride, int Width, int Stride,
264
266
int ParentWidth>
265
- __ESIMD_INTRIN __ESIMD_DNS::vector_type_t <T, M>
267
+ __ESIMD_INTRIN __ESIMD_INTRIN std::enable_if_t <(Width > 0 ) && M % Width == 0 ,
268
+ __ESIMD_DNS::vector_type_t <T, M>>
266
269
__esimd_rdregion (__ESIMD_DNS::vector_type_t <T, N> Input, uint16_t Offset) {
267
270
uint16_t EltOffset = Offset / sizeof (T);
268
271
assert (Offset % sizeof (T) == 0 );
@@ -296,7 +299,8 @@ __esimd_rdindirect(__ESIMD_DNS::vector_type_t<T, N> Input,
296
299
297
300
template <typename T, int N, int M, int VStride, int Width, int Stride,
298
301
int ParentWidth>
299
- __ESIMD_INTRIN __ESIMD_DNS::vector_type_t <T, N>
302
+ __ESIMD_INTRIN std::enable_if_t <M <= N && (Width > 0 ) && M % Width == 0 ,
303
+ __ESIMD_DNS::vector_type_t <T, N>>
300
304
__esimd_wrregion (__ESIMD_DNS::vector_type_t <T, N> OldVal,
301
305
__ESIMD_DNS::vector_type_t <T, M> NewVal, uint16_t Offset,
302
306
__ESIMD_DNS::simd_mask_storage_t <M> Mask) {
@@ -319,7 +323,7 @@ __esimd_wrregion(__ESIMD_DNS::vector_type_t<T, N> OldVal,
319
323
}
320
324
321
325
template <typename T, int N, int M, int ParentWidth>
322
- __ESIMD_INTRIN __ESIMD_DNS::vector_type_t <T, N>
326
+ __ESIMD_INTRIN std:: enable_if_t <M <= N, __ESIMD_DNS::vector_type_t <T, N> >
323
327
__esimd_wrindirect (__ESIMD_DNS::vector_type_t <T, N> OldVal,
324
328
__ESIMD_DNS::vector_type_t <T, M> NewVal,
325
329
__ESIMD_DNS::vector_type_t <uint16_t , M> Offset,
0 commit comments