@@ -266,7 +266,7 @@ __ESIMD_API void scatter(Tx *p, simd_view<Toffset, RegionTy> offsets,
266
266
// / @param mask The access mask, defaults to all 1s.
267
267
// /
268
268
template <typename Tx, int N, typename Toffset>
269
- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset>>
269
+ __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> && N == 1 >
270
270
scatter (Tx *p, Toffset offset, simd<Tx, N> vals, simd_mask<N> mask = 1 ) {
271
271
scatter<Tx, N>(p, simd<Toffset, N>(offset), vals, mask);
272
272
}
@@ -794,7 +794,7 @@ scatter_rgba(T *p, simd_view<Toffset, RegionTy> offsets,
794
794
// /
795
795
template <rgba_channel_mask RGBAMask = rgba_channel_mask::ABGR, typename T,
796
796
int N, typename Toffset>
797
- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset>>
797
+ __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> && N == 1 >
798
798
scatter_rgba (T *p, Toffset offset,
799
799
simd<T, N * get_num_channels_enabled (RGBAMask)> vals,
800
800
simd_mask<N> mask = 1) {
@@ -1040,7 +1040,10 @@ __ESIMD_API simd<Tx, N> atomic_update(Tx *p,
1040
1040
// / update.
1041
1041
// /
1042
1042
template <atomic_op Op, typename Tx, int N, typename Toffset>
1043
- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset>, simd<Tx, N>>
1043
+ __ESIMD_API std::enable_if_t <
1044
+ std::is_integral_v<Toffset> &&
1045
+ ((Op != atomic_op::store && Op != atomic_op::xchg) || N == 1),
1046
+ simd<Tx, N>>
1044
1047
atomic_update(Tx *p, Toffset offset, simd<Tx, N> src0, simd_mask<N> mask) {
1045
1048
return atomic_update<Op, Tx, N>(p, simd<Toffset, N>(offset), src0, mask);
1046
1049
}
0 commit comments