77// ===----------------------------------------------------------------------===//
88#pragma once
99
10+ #include " sanitizer_defs.hpp"
1011#include " spirv_vars.h"
1112
1213#if defined(__SPIR__) || defined(__SPIRV__)
1314
14- static inline size_t WorkGroupLinearId () {
15+ inline size_t WorkGroupLinearId () {
1516 return __spirv_BuiltInWorkgroupId.x * __spirv_BuiltInNumWorkgroups.y *
1617 __spirv_BuiltInNumWorkgroups.z +
1718 __spirv_BuiltInWorkgroupId.y * __spirv_BuiltInNumWorkgroups.z +
@@ -26,15 +27,54 @@ static inline size_t LocalLinearId() {
2627}
2728
2829// For GPU device, each sub group is a hardware thread
29- static inline size_t SubGroupLinearId () {
30+ inline size_t SubGroupLinearId () {
3031 return __spirv_BuiltInGlobalLinearId / __spirv_BuiltInSubgroupSize;
3132}
3233
33- static inline void SubGroupBarrier () {
34+ inline void SubGroupBarrier () {
3435 __spirv_ControlBarrier (__spv::Scope::Subgroup, __spv::Scope::Subgroup,
3536 __spv::MemorySemanticsMask::SequentiallyConsistent |
3637 __spv::MemorySemanticsMask::CrossWorkgroupMemory |
3738 __spv::MemorySemanticsMask::WorkgroupMemory);
3839}
3940
41+ inline __SYCL_GLOBAL__ void *ToGlobal (void *ptr) {
42+ return __spirv_GenericCastToPtrExplicit_ToGlobal (ptr, 5 );
43+ }
44+ inline __SYCL_LOCAL__ void *ToLocal (void *ptr) {
45+ return __spirv_GenericCastToPtrExplicit_ToLocal (ptr, 4 );
46+ }
47+ inline __SYCL_PRIVATE__ void *ToPrivate (void *ptr) {
48+ return __spirv_GenericCastToPtrExplicit_ToPrivate (ptr, 7 );
49+ }
50+
51+ template <typename T> T Memset (T ptr, int value, size_t size) {
52+ for (size_t i = 0 ; i < size; i++) {
53+ ptr[i] = value;
54+ }
55+ return ptr;
56+ }
57+
58+ template <typename DstT, typename SrcT>
59+ DstT Memcpy (DstT dst, SrcT src, size_t size) {
60+ for (size_t i = 0 ; i < size; i++) {
61+ dst[i] = src[i];
62+ }
63+ return dst;
64+ }
65+
66+ template <typename DstT, typename SrcT>
67+ DstT Memmove (DstT dst, SrcT src, size_t size) {
68+ if ((uptr)dst < (uptr)src) {
69+ for (size_t i = 0 ; i < size; i++) {
70+ dst[i] = src[i];
71+ }
72+ } else {
73+ for (size_t i = size; i > 0 ; i--) {
74+ dst[i - 1 ] = src[i - 1 ];
75+ }
76+ }
77+ return dst;
78+ }
79+
4080#endif // __SPIR__ || __SPIRV__
0 commit comments