7
7
// ===----------------------------------------------------------------------===//
8
8
#pragma once
9
9
10
+ #include " sanitizer_defs.hpp"
10
11
#include " spirv_vars.h"
11
12
12
13
#if defined(__SPIR__) || defined(__SPIRV__)
13
14
14
- static inline size_t WorkGroupLinearId () {
15
+ inline size_t WorkGroupLinearId () {
15
16
return __spirv_BuiltInWorkgroupId.x * __spirv_BuiltInNumWorkgroups.y *
16
17
__spirv_BuiltInNumWorkgroups.z +
17
18
__spirv_BuiltInWorkgroupId.y * __spirv_BuiltInNumWorkgroups.z +
@@ -26,15 +27,54 @@ static inline size_t LocalLinearId() {
26
27
}
27
28
28
29
// For GPU device, each sub group is a hardware thread
29
- static inline size_t SubGroupLinearId () {
30
+ inline size_t SubGroupLinearId () {
30
31
return __spirv_BuiltInGlobalLinearId / __spirv_BuiltInSubgroupSize;
31
32
}
32
33
33
- static inline void SubGroupBarrier () {
34
+ inline void SubGroupBarrier () {
34
35
__spirv_ControlBarrier (__spv::Scope::Subgroup, __spv::Scope::Subgroup,
35
36
__spv::MemorySemanticsMask::SequentiallyConsistent |
36
37
__spv::MemorySemanticsMask::CrossWorkgroupMemory |
37
38
__spv::MemorySemanticsMask::WorkgroupMemory);
38
39
}
39
40
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
+
40
80
#endif // __SPIR__ || __SPIRV__
0 commit comments