19 #ifdef __SYCL_DEVICE_ONLY__
25 #endif // __SYCL_DEVICE_ONLY__
58 template <
typename Ty1,
int N1,
typename Ty2,
int N2,
typename Ty3,
int N3,
60 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty1, N1>
61 __esimd_raw_sends2(uint8_t modifier, uint8_t execSize,
62 __ESIMD_DNS::simd_mask_storage_t<N> pred, uint8_t numSrc0,
63 uint8_t numSrc1, uint8_t numDst, uint8_t sfid,
64 uint32_t exDesc, uint32_t msgDesc,
65 __ESIMD_DNS::vector_type_t<Ty2, N2> msgSrc0,
66 __ESIMD_DNS::vector_type_t<Ty3, N3> msgSrc1,
67 __ESIMD_DNS::vector_type_t<Ty1, N1> msgDst)
68 #ifdef __SYCL_DEVICE_ONLY__
72 __ESIMD_UNSUPPORTED_ON_HOST;
74 #endif // __SYCL_DEVICE_ONLY__
102 template <
typename Ty1,
int N1,
typename Ty2,
int N2,
int N = 16>
103 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty1, N1>
104 __esimd_raw_send2(uint8_t modifier, uint8_t execSize,
105 __ESIMD_DNS::simd_mask_storage_t<N> pred, uint8_t numSrc0,
106 uint8_t numDst, uint8_t sfid, uint32_t exDesc,
107 uint32_t msgDesc, __ESIMD_DNS::vector_type_t<Ty2, N2> msgSrc0,
108 __ESIMD_DNS::vector_type_t<Ty1, N1> msgDst)
109 #ifdef __SYCL_DEVICE_ONLY__
113 __ESIMD_UNSUPPORTED_ON_HOST;
115 #endif // __SYCL_DEVICE_ONLY__
141 template <
typename Ty1,
int N1,
typename Ty2,
int N2,
int N = 16>
143 __esimd_raw_sends2_noresult(uint8_t modifier, uint8_t execSize,
144 __ESIMD_DNS::simd_mask_storage_t<N> pred,
145 uint8_t numSrc0, uint8_t numSrc1, uint8_t sfid,
146 uint32_t exDesc, uint32_t msgDesc,
147 __ESIMD_DNS::vector_type_t<Ty1, N1> msgSrc0,
148 __ESIMD_DNS::vector_type_t<Ty2, N2> msgSrc1)
149 #ifdef __SYCL_DEVICE_ONLY__
153 __ESIMD_UNSUPPORTED_ON_HOST;
155 #endif // __SYCL_DEVICE_ONLY__
176 template <
typename Ty1,
int N1,
int N = 16>
178 __esimd_raw_send2_noresult(uint8_t modifier, uint8_t execSize,
179 __ESIMD_DNS::simd_mask_storage_t<N> pred,
180 uint8_t numSrc0, uint8_t sfid, uint32_t exDesc,
182 __ESIMD_DNS::vector_type_t<Ty1, N1> msgSrc0)
183 #ifdef __SYCL_DEVICE_ONLY__
187 __ESIMD_UNSUPPORTED_ON_HOST;
189 #endif // __SYCL_DEVICE_ONLY__
199 __ESIMD_INTRIN
void __esimd_nbarrier(uint8_t
mode, uint8_t
id,
200 uint8_t thread_count)
201 #ifdef __SYCL_DEVICE_ONLY__
203 #else // __SYCL_DEVICE_ONLY__
205 __ESIMD_UNSUPPORTED_ON_HOST;
207 #endif // __SYCL_DEVICE_ONLY__
213 __ESIMD_INTRIN
void __esimd_nbarrier_init(uint8_t count)
214 #ifdef __SYCL_DEVICE_ONLY__
216 #else // __SYCL_DEVICE_ONLY__
218 __ESIMD_UNSUPPORTED_ON_HOST;
220 #endif // __SYCL_DEVICE_ONLY__
237 template <
typename Ty,
int N>
238 __ESIMD_INTRIN
void __esimd_raw_send_nbarrier_signal(
239 uint32_t is_sendc, uint32_t extended_descriptor, uint32_t descriptor,
240 __ESIMD_DNS::vector_type_t<Ty, N> msg_var, uint16_t pred = 1)
241 #ifdef __SYCL_DEVICE_ONLY__
243 #else // __SYCL_DEVICE_ONLY__
245 __ESIMD_UNSUPPORTED_ON_HOST;
247 #endif // __SYCL_DEVICE_ONLY__
249 #ifndef __SYCL_DEVICE_ONLY__
254 template <
typename Ty, __ESIMD_ENS::lsc_data_size DS>
255 constexpr uint32_t rawAddressIncrement() {
256 if constexpr (DS == __ESIMD_ENS::lsc_data_size::u8u32) {
258 }
else if constexpr (DS == __ESIMD_ENS::lsc_data_size::u16u32) {
261 return (uint32_t)
sizeof(Ty);
266 template <
int N, __ESIMD_EDNS::lsc_data_order _Transposed>
267 constexpr
int vectorIndexIncrement() {
268 if constexpr (_Transposed == __ESIMD_EDNS::lsc_data_order::transpose) {
286 constexpr
unsigned loadstoreAlignMask() {
288 __ESIMD_EDNS::finalize_data_size<Ty, DS>();
290 if constexpr (VS == __ESIMD_EDNS::lsc_vector_size::n1) {
291 static_assert(((_DS == __ESIMD_ENS::lsc_data_size::u32) ||
292 (_DS == __ESIMD_ENS::lsc_data_size::u64) ||
293 (_DS == __ESIMD_ENS::lsc_data_size::u8) ||
294 (_DS == __ESIMD_ENS::lsc_data_size::u16) ||
295 (_DS == __ESIMD_ENS::lsc_data_size::u8u32) ||
296 (_DS == __ESIMD_ENS::lsc_data_size::u16u32)) &&
297 "Wrong __ESIMD_EDNS::lsc_data_size for "
298 "__ESIMD_EDNS::lsc_vector_size == 1\n"
299 "(loadstoreAlignMask)");
301 }
else if constexpr ((VS == __ESIMD_EDNS::lsc_vector_size::n2) ||
302 (VS == __ESIMD_EDNS::lsc_vector_size::n3) ||
303 (VS == __ESIMD_EDNS::lsc_vector_size::n4) ||
304 (VS == __ESIMD_EDNS::lsc_vector_size::n8)) {
306 ((_DS == __ESIMD_ENS::lsc_data_size::u32) ||
307 (_DS == __ESIMD_ENS::lsc_data_size::u64)) &&
308 "Wrong Data Size for __ESIMD_EDNS::lsc_vector_size == 2/3/4/8\n"
309 "(loadstoreAlignMask)");
311 if constexpr (_DS == __ESIMD_ENS::lsc_data_size::u32)
315 }
else if constexpr ((VS == __ESIMD_EDNS::lsc_vector_size::n16) ||
316 (VS == __ESIMD_EDNS::lsc_vector_size::n32) ||
317 (VS == __ESIMD_EDNS::lsc_vector_size::n64)) {
320 "Unsupported Size for __ESIMD_EDNS::lsc_vector_size = 16/32/64\n"
321 "(loadstoreAlignMask)");
323 if constexpr (_DS == __ESIMD_ENS::lsc_data_size::u32)
328 static_assert((N != N) &&
"Wrong Vector Size!!");
334 template <
typename Ty, uint16_t AddressScale,
int ImmOffset,
337 auto __esimd_emu_lsc_offset_read(
338 __ESIMD_DNS::simd_mask_storage_t<N> Pred,
339 __ESIMD_DNS::vector_type_t<uint32_t, N> Offsets,
char *ReadBase,
340 int BufByteWidth = INT_MAX) {
342 static_assert(AddressScale == 1);
343 static_assert(ImmOffset == 0);
344 static_assert(DS != __ESIMD_ENS::lsc_data_size::u16u32h);
346 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> Output = 0;
348 constexpr
int ChanlCount = __ESIMD_EDNS::to_int<VS>();
350 for (
int OffsetIdx = 0; OffsetIdx < N; OffsetIdx += 1) {
351 if (Pred[OffsetIdx] == 0) {
357 assert(((Offsets[OffsetIdx] & MASK)) == 0 &&
"Offset Alignment Error!!");
360 int ByteDistance = Offsets[OffsetIdx];
362 for (
int ChanelIdx = 0, VecIdx = OffsetIdx; ChanelIdx < ChanlCount;
363 ChanelIdx += 1, ByteDistance += rawAddressIncrement<Ty, DS>(),
364 VecIdx += vectorIndexIncrement<N, _Transposed>()) {
366 if ((ByteDistance >= 0) && (ByteDistance < BufByteWidth)) {
367 Output[VecIdx] = *((Ty *)(ReadBase + ByteDistance));
376 template <
typename Ty, uint16_t AddressScale,
int ImmOffset,
379 void __esimd_emu_lsc_offset_write(
380 __ESIMD_DNS::simd_mask_storage_t<N> Pred,
381 __ESIMD_DNS::vector_type_t<uint32_t, N> Offsets,
382 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> vals,
383 char *WriteBase,
int BufByteWidth = INT_MAX) {
385 static_assert(AddressScale == 1);
386 static_assert(ImmOffset == 0);
387 static_assert(DS != __ESIMD_ENS::lsc_data_size::u16u32h);
390 DS == __ESIMD_ENS::lsc_data_size::u8, uint8_t,
392 DS == __ESIMD_ENS::lsc_data_size::u16, uint16_t,
394 DS == __ESIMD_ENS::lsc_data_size::u32, uint32_t,
396 DS == __ESIMD_ENS::lsc_data_size::u64, uint64_t,
398 DS == __ESIMD_ENS::lsc_data_size::u8u32, uint8_t,
400 __ESIMD_ENS::lsc_data_size::u16u32,
401 uint16_t,
void>>>>>>;
403 for (
int OffsetIdx = 0; OffsetIdx < N; OffsetIdx += 1) {
404 if (Pred[OffsetIdx] == 0) {
410 assert(((Offsets[OffsetIdx] & MASK)) == 0 &&
"Offset Alignment Error!!");
413 int ByteDistance = Offsets[OffsetIdx];
414 constexpr
int ChanlCount = __ESIMD_EDNS::to_int<VS>();
416 for (
int ChanelIdx = 0, VecIdx = OffsetIdx; ChanelIdx < ChanlCount;
417 ChanelIdx += 1, ByteDistance += rawAddressIncrement<Ty, DS>(),
418 VecIdx += vectorIndexIncrement<N, _Transposed>()) {
420 if ((ByteDistance >= 0) && (ByteDistance < BufByteWidth)) {
421 *((StoreType *)(WriteBase + ByteDistance)) = vals[VecIdx];
429 template <
typename Ty,
int N>
430 __ESIMD_DNS::vector_type_t<Ty, N>
431 __esimd_emu_read_2d(__ESIMD_DNS::simd_mask_storage_t<N> Pred, uintptr_t Ptr,
432 unsigned SurfaceWidth,
unsigned SurfaceHeight,
433 unsigned SurfacePitch,
int X,
int Y,
int Width,
int Height,
436 assert(SurfaceHeight >= 0);
437 assert(SurfaceWidth >= 0);
438 assert(SurfaceWidth <= SurfacePitch);
444 constexpr
unsigned sizeofTy =
sizeof(Ty);
446 __ESIMD_DNS::vector_type_t<Ty, N> Output = 0;
448 char *buff = (
char *)Ptr;
449 assert(buff != NULL);
454 for (
int xBase = X * sizeofTy; blkCount < NBlks; xBase += sizeofTy * Width) {
455 if (Transformed ==
true) {
456 constexpr
int elems_per_DW = (sizeofTy == 1) ? 4 : 2;
457 int yRead = Y * SurfacePitch;
458 for (
int u = 0; u < Height;
459 u += elems_per_DW, yRead += SurfacePitch * elems_per_DW) {
462 if ((yRead < 0) || (yRead >= SurfacePitch * SurfaceHeight)) {
464 vecIdx += Width * elems_per_DW;
469 for (
int v = 0; v < Width; v += 1, xRead += sizeofTy) {
470 if ((xRead < 0) || (xRead >= SurfaceWidth)) {
472 vecIdx += elems_per_DW;
476 char *base = buff + xRead;
478 for (
int k = 0; k < elems_per_DW; k++, vecIdx += 1) {
479 if (Pred[vecIdx] != 0) {
480 if (offset >= 0 && offset < SurfacePitch * SurfaceHeight) {
481 Output[vecIdx] = *((Ty *)(base + offset));
485 offset += SurfacePitch;
490 else if (_Transposed == __ESIMD_EDNS::lsc_data_order::transpose) {
492 for (
int v = 0; v < Width; v += 1, xRead += sizeofTy) {
493 if ((xRead < 0) || (xRead >= SurfaceWidth)) {
499 int yRead = Y * SurfacePitch;
500 for (
int u = 0; u < Height;
501 u += 1, yRead += SurfacePitch, vecIdx += 1) {
502 if (Pred[vecIdx] != 0) {
503 if ((yRead >= 0) && (yRead < SurfacePitch * SurfaceHeight)) {
504 Output[vecIdx] = *((Ty *)(buff + yRead + xRead));
511 int yRead = Y * SurfacePitch;
512 for (
int u = 0; u < Height; u += 1, yRead += SurfacePitch) {
513 if ((yRead < 0) || (yRead >= SurfacePitch * SurfaceHeight)) {
520 for (
int v = 0; v < Width; v += 1, xRead += sizeofTy, vecIdx += 1) {
521 if (Pred[vecIdx] != 0) {
522 if ((xRead >= 0) && (xRead < SurfaceWidth)) {
523 Output[vecIdx] = *((Ty *)(buff + yRead + xRead));
538 template <
typename Ty,
int N>
539 void __esimd_emu_write_2d(__ESIMD_DNS::simd_mask_storage_t<N> Pred,
540 uintptr_t Ptr,
unsigned SurfaceWidth,
541 unsigned SurfaceHeight,
unsigned SurfacePitch,
int X,
542 int Y, __ESIMD_DNS::vector_type_t<Ty, N> vals,
543 int Width,
int Height) {
544 assert(SurfaceHeight >= 0);
545 assert(SurfaceWidth >= 0);
546 assert(SurfaceWidth <= SurfacePitch);
552 constexpr
unsigned sizeofTy =
sizeof(Ty);
554 char *buff = (
char *)Ptr;
555 assert(buff != NULL);
559 for (
int yWrite = Y * SurfacePitch; rowCount < Height;
560 yWrite += SurfacePitch) {
561 if (yWrite == SurfacePitch * SurfaceHeight) {
566 for (
int xWrite = X * sizeofTy; writeCount < Width;
567 xWrite += sizeofTy, vecIdx += 1, writeCount += 1) {
568 if (xWrite >= 0 && xWrite < SurfaceWidth && Pred[vecIdx] != 0) {
569 *((Ty *)(buff + yWrite + xWrite)) = vals[vecIdx];
600 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
601 __esimd_lsc_load_slm(__ESIMD_DNS::simd_mask_storage_t<N> pred,
602 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets)
603 #ifdef __SYCL_DEVICE_ONLY__
605 #else // __SYCL_DEVICE_ONLY__
607 sycl::detail::ESIMDDeviceInterface *I =
610 return __esimd_emu_lsc_offset_read<Ty, AddressScale, ImmOffset, DS, VS,
612 loadstoreAlignMask<Ty, VS, DS, N>()>(
613 pred, offsets, I->__cm_emu_get_slm_ptr());
615 #endif // __SYCL_DEVICE_ONLY__
641 typename SurfIndAliasTy>
642 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
643 __esimd_lsc_load_bti(__ESIMD_DNS::simd_mask_storage_t<N> pred,
644 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
645 SurfIndAliasTy surf_ind)
646 #ifdef __SYCL_DEVICE_ONLY__
648 #else // __SYCL_DEVICE_ONLY__
652 std::mutex *mutexLock;
654 sycl::detail::ESIMDDeviceInterface *I =
657 I->sycl_get_cm_buffer_params_ptr(surf_ind, &readBase, &width, &mutexLock);
659 std::lock_guard<std::mutex> lock(*mutexLock);
661 return __esimd_emu_lsc_offset_read<Ty, AddressScale, ImmOffset, DS, VS,
663 loadstoreAlignMask<Ty, VS, DS, N>()>(
664 pred, offsets, readBase, width);
666 #endif // __SYCL_DEVICE_ONLY__
690 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
691 __esimd_lsc_load_stateless(__ESIMD_DNS::simd_mask_storage_t<N> pred,
692 __ESIMD_DNS::vector_type_t<uintptr_t, N> addrs)
693 #ifdef __SYCL_DEVICE_ONLY__
695 #else // __SYCL_DEVICE_ONLY__
698 static_assert(AddressScale == 1);
699 static_assert(ImmOffset == 0);
700 static_assert(DS != __ESIMD_ENS::lsc_data_size::u16u32h);
702 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> Output = 0;
704 for (
int AddrIdx = 0; AddrIdx < N; AddrIdx += 1) {
705 if (pred[AddrIdx] == 0) {
711 constexpr
uint MASK = loadstoreAlignMask<Ty, VS, DS, N>();
712 constexpr
int ChanlCount = __ESIMD_EDNS::to_int<VS>();
714 int ByteDistance = 0;
715 uintptr_t BaseAddr = addrs[AddrIdx];
717 assert(((BaseAddr & MASK)) == 0 &&
"Address Alignment Error!!");
719 for (
int ChanelIdx = 0, VecIdx = AddrIdx; ChanelIdx < ChanlCount;
720 ChanelIdx += 1, ByteDistance += rawAddressIncrement<Ty, DS>(),
721 VecIdx += vectorIndexIncrement<N, _Transposed>()) {
723 Output[VecIdx] = *((Ty *)(BaseAddr + ByteDistance));
728 #endif // __SYCL_DEVICE_ONLY__
752 typename SurfIndAliasTy>
754 __esimd_lsc_prefetch_bti(__ESIMD_DNS::simd_mask_storage_t<N> pred,
755 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
756 SurfIndAliasTy surf_ind)
757 #ifdef __SYCL_DEVICE_ONLY__
759 #else // __SYCL_DEVICE_ONLY__
764 #endif // __SYCL_DEVICE_ONLY__
787 __esimd_lsc_prefetch_stateless(__ESIMD_DNS::simd_mask_storage_t<N> pred,
788 __ESIMD_DNS::vector_type_t<uintptr_t, N> addrs)
789 #ifdef __SYCL_DEVICE_ONLY__
791 #else // __SYCL_DEVICE_ONLY__
796 #endif // __SYCL_DEVICE_ONLY__
819 __ESIMD_INTRIN
void __esimd_lsc_store_slm(
820 __ESIMD_DNS::simd_mask_storage_t<N> pred,
821 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
822 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> vals)
823 #ifdef __SYCL_DEVICE_ONLY__
825 #else // __SYCL_DEVICE_ONLY__
827 sycl::detail::ESIMDDeviceInterface *I =
830 __esimd_emu_lsc_offset_write<Ty, AddressScale, ImmOffset, DS, VS, _Transposed,
831 N, loadstoreAlignMask<Ty, VS, DS, N>()>(
832 pred, offsets, vals, I->__cm_emu_get_slm_ptr());
834 #endif // __SYCL_DEVICE_ONLY__
859 typename SurfIndAliasTy>
860 __ESIMD_INTRIN
void __esimd_lsc_store_bti(
861 __ESIMD_DNS::simd_mask_storage_t<N> pred,
862 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
863 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> vals,
864 SurfIndAliasTy surf_ind)
865 #ifdef __SYCL_DEVICE_ONLY__
867 #else // __SYCL_DEVICE_ONLY__
871 std::mutex *mutexLock;
873 sycl::detail::ESIMDDeviceInterface *I =
876 I->sycl_get_cm_buffer_params_ptr(surf_ind, &writeBase, &width, &mutexLock);
878 std::lock_guard<std::mutex> lock(*mutexLock);
880 __esimd_emu_lsc_offset_write<Ty, AddressScale, ImmOffset, DS, VS, _Transposed,
881 N, loadstoreAlignMask<Ty, VS, DS, N>()>(
882 pred, offsets, vals, writeBase, width);
884 #endif // __SYCL_DEVICE_ONLY__
907 __ESIMD_INTRIN
void __esimd_lsc_store_stateless(
908 __ESIMD_DNS::simd_mask_storage_t<N> pred,
909 __ESIMD_DNS::vector_type_t<uintptr_t, N> addrs,
910 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> vals)
911 #ifdef __SYCL_DEVICE_ONLY__
913 #else // __SYCL_DEVICE_ONLY__
916 static_assert(AddressScale == 1);
917 static_assert(ImmOffset == 0);
918 static_assert(DS != __ESIMD_ENS::lsc_data_size::u16u32h);
921 DS == __ESIMD_ENS::lsc_data_size::u8, uint8_t,
923 DS == __ESIMD_ENS::lsc_data_size::u16, uint16_t,
925 DS == __ESIMD_ENS::lsc_data_size::u32, uint32_t,
927 DS == __ESIMD_ENS::lsc_data_size::u64, uint64_t,
929 DS == __ESIMD_ENS::lsc_data_size::u8u32, uint8_t,
931 __ESIMD_ENS::lsc_data_size::u16u32,
932 uint16_t,
void>>>>>>;
934 for (
int AddrIdx = 0; AddrIdx < N; AddrIdx += 1) {
935 if (pred[AddrIdx] == 0) {
941 constexpr
uint MASK = loadstoreAlignMask<Ty, VS, DS, N>();
942 constexpr
int ChanlCount = __ESIMD_EDNS::to_int<VS>();
944 int ByteDistance = 0;
945 uintptr_t BaseAddr = addrs[AddrIdx];
947 assert(((BaseAddr & MASK)) == 0 &&
"Address Alignment Error!!");
949 for (
int ChanelIdx = 0, VecIdx = AddrIdx; ChanelIdx < ChanlCount;
950 ChanelIdx += 1, ByteDistance += rawAddressIncrement<Ty, DS>(),
951 VecIdx += vectorIndexIncrement<N, _Transposed>()) {
952 *((StoreType *)(BaseAddr + ByteDistance)) = vals[VecIdx];
956 #endif // __SYCL_DEVICE_ONLY__
991 int BlockWidth,
int BlockHeight,
bool Transformed,
int N>
992 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N>
993 __esimd_lsc_load2d_stateless(__ESIMD_DNS::simd_mask_storage_t<N> Pred,
994 uintptr_t Ptr,
int SurfaceWidth,
int SurfaceHeight,
995 int SurfacePitch,
int X,
int Y)
996 #ifdef __SYCL_DEVICE_ONLY__
998 #else // __SYCL_DEVICE_ONLY__
1002 return __esimd_emu_read_2d<Ty, N>(Pred, Ptr, SurfaceWidth, SurfaceHeight,
1003 SurfacePitch, X, Y, BlockWidth, BlockHeight,
1004 NBlocks, _Transposed, Transformed);
1006 #endif // __SYCL_DEVICE_ONLY__
1035 int BlockWidth,
int BlockHeight,
bool Transformed,
int N>
1036 __ESIMD_INTRIN
void __esimd_lsc_prefetch2d_stateless(
1037 __ESIMD_DNS::simd_mask_storage_t<N> Pred, uintptr_t Ptr,
int SurfaceWidth,
1038 int SurfaceHeight,
int SurfacePitch,
int X,
int Y)
1039 #ifdef __SYCL_DEVICE_ONLY__
1041 #else // __SYCL_DEVICE_ONLY__
1046 #endif // __SYCL_DEVICE_ONLY__
1080 int BlockWidth,
int BlockHeight,
bool Transformed,
int N>
1082 __esimd_lsc_store2d_stateless(__ESIMD_DNS::simd_mask_storage_t<N> Pred,
1083 uintptr_t Ptr,
int SurfaceWidth,
1084 int SurfaceHeight,
int SurfacePitch,
int X,
int Y,
1085 __ESIMD_DNS::vector_type_t<Ty, N> vals)
1086 #ifdef __SYCL_DEVICE_ONLY__
1088 #else // __SYCL_DEVICE_ONLY__
1092 __esimd_emu_write_2d<Ty, N>(Pred, Ptr, SurfaceWidth, SurfaceHeight,
1093 SurfacePitch, X, Y, vals, BlockWidth,
1096 #endif // __SYCL_DEVICE_ONLY__
1118 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1119 __esimd_lsc_xatomic_slm_0(__ESIMD_DNS::simd_mask_storage_t<N> pred,
1120 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets)
1121 #ifdef __SYCL_DEVICE_ONLY__
1123 #else // __SYCL_DEVICE_ONLY__
1125 __ESIMD_UNSUPPORTED_ON_HOST;
1128 #endif // __SYCL_DEVICE_ONLY__
1151 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1152 __esimd_lsc_xatomic_slm_1(
1153 __ESIMD_DNS::simd_mask_storage_t<N> pred,
1154 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
1155 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src0)
1156 #ifdef __SYCL_DEVICE_ONLY__
1158 #else // __SYCL_DEVICE_ONLY__
1160 __ESIMD_UNSUPPORTED_ON_HOST;
1163 #endif // __SYCL_DEVICE_ONLY__
1187 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1188 __esimd_lsc_xatomic_slm_2(
1189 __ESIMD_DNS::simd_mask_storage_t<N> pred,
1190 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
1191 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src0,
1192 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src1)
1193 #ifdef __SYCL_DEVICE_ONLY__
1195 #else // __SYCL_DEVICE_ONLY__
1197 __ESIMD_UNSUPPORTED_ON_HOST;
1200 #endif // __SYCL_DEVICE_ONLY__
1224 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1225 __esimd_lsc_xatomic_bti_0(__ESIMD_DNS::simd_mask_storage_t<N> pred,
1226 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
1227 SurfIndAliasTy surf_ind)
1228 #ifdef __SYCL_DEVICE_ONLY__
1230 #else // __SYCL_DEVICE_ONLY__
1232 __ESIMD_UNSUPPORTED_ON_HOST;
1235 #endif // __SYCL_DEVICE_ONLY__
1260 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1261 __esimd_lsc_xatomic_bti_1(
1262 __ESIMD_DNS::simd_mask_storage_t<N> pred,
1263 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
1264 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src0,
1265 SurfIndAliasTy surf_ind)
1266 #ifdef __SYCL_DEVICE_ONLY__
1268 #else // __SYCL_DEVICE_ONLY__
1270 __ESIMD_UNSUPPORTED_ON_HOST;
1273 #endif // __SYCL_DEVICE_ONLY__
1299 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1300 __esimd_lsc_xatomic_bti_2(
1301 __ESIMD_DNS::simd_mask_storage_t<N> pred,
1302 __ESIMD_DNS::vector_type_t<uint32_t, N> offsets,
1303 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src0,
1304 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src1,
1305 SurfIndAliasTy surf_ind)
1306 #ifdef __SYCL_DEVICE_ONLY__
1308 #else // __SYCL_DEVICE_ONLY__
1310 __ESIMD_UNSUPPORTED_ON_HOST;
1313 #endif // __SYCL_DEVICE_ONLY__
1335 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1336 __esimd_lsc_xatomic_stateless_0(__ESIMD_DNS::simd_mask_storage_t<N> pred,
1337 __ESIMD_DNS::vector_type_t<uintptr_t, N> addrs)
1338 #ifdef __SYCL_DEVICE_ONLY__
1340 #else // __SYCL_DEVICE_ONLY__
1342 __ESIMD_UNSUPPORTED_ON_HOST;
1345 #endif // __SYCL_DEVICE_ONLY__
1369 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1370 __esimd_lsc_xatomic_stateless_1(
1371 __ESIMD_DNS::simd_mask_storage_t<N> pred,
1372 __ESIMD_DNS::vector_type_t<uintptr_t, N> addrs,
1373 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src0)
1374 #ifdef __SYCL_DEVICE_ONLY__
1376 #else // __SYCL_DEVICE_ONLY__
1378 __ESIMD_UNSUPPORTED_ON_HOST;
1381 #endif // __SYCL_DEVICE_ONLY__
1405 __ESIMD_INTRIN __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()>
1406 __esimd_lsc_xatomic_stateless_2(
1407 __ESIMD_DNS::simd_mask_storage_t<N> pred,
1408 __ESIMD_DNS::vector_type_t<uintptr_t, N> addrs,
1409 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src0,
1410 __ESIMD_DNS::vector_type_t<Ty, N * __ESIMD_EDNS::to_int<VS>()> src1)
1411 #ifdef __SYCL_DEVICE_ONLY__
1413 #else // __SYCL_DEVICE_ONLY__
1415 __ESIMD_UNSUPPORTED_ON_HOST;
1418 #endif // __SYCL_DEVICE_ONLY__
1430 __ESIMD_INTRIN
void __esimd_lsc_fence(__ESIMD_DNS::simd_mask_storage_t<N> pred)
1431 #ifdef __SYCL_DEVICE_ONLY__
1433 #else // __SYCL_DEVICE_ONLY__
1435 __ESIMD_UNSUPPORTED_ON_HOST;
1437 #endif // __SYCL_DEVICE_ONLY__