Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions clang/lib/Driver/ToolChains/Clang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4086,6 +4086,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// We want to compile sycl kernels.
CmdArgs.push_back("-fsycl");
CmdArgs.push_back("-fsycl-is-device");
CmdArgs.push_back("-fdeclare-spirv-builtins");
// Pass the triple of host when doing SYCL
auto AuxT = llvm::Triple(llvm::sys::getProcessTriple());
std::string NormalizedTriple = AuxT.normalize();
Expand Down
1 change: 1 addition & 0 deletions libclc/generic/include/func.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
#define _CLC_DECL
#define _CLC_DEF __attribute__((always_inline))
#define _CLC_INLINE __attribute__((always_inline)) inline
#define _CLC_CONVERGENT __attribute__((convergent))

#endif // CLC_FUNC
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
//
//===----------------------------------------------------------------------===//

#define FN_NAME __CLC_XCONCAT(_Z22__spirv_GroupAsyncCopyI, __SPIRV_GENTYPE_MANGLED, E9ocl_eventN5__spv5ScopeEPU3, __SPIRV_DST_ADDR_SPACE_MANGLED, T_PU3, __SPIRV_SRC_ADDR_SPACE_MANGLED, S3_mmS0_)
_CLC_DECL event_t FN_NAME (
enum Scope scope,
__SPIRV_DST_ADDR_SPACE __SPIRV_GENTYPE *dst,
const __SPIRV_SRC_ADDR_SPACE __SPIRV_GENTYPE *src,
size_t num_elements,
size_t stride,
event_t event);
_CLC_OVERLOAD _CLC_DECL event_t __spirv_GroupAsyncCopy(
unsigned int scope, __SPIRV_DST_ADDR_SPACE __SPIRV_GENTYPE *dst,
const __SPIRV_SRC_ADDR_SPACE __SPIRV_GENTYPE *src, size_t num_elements,
size_t stride, event_t event);
6 changes: 3 additions & 3 deletions libclc/generic/include/spirv/async/wait_group_events.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
//
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DEF void _Z23__spirv_GroupWaitEventsN5__spv5ScopeEjP9ocl_event(
enum Scope scope, int num_events, event_t *event_list);
_CLC_OVERLOAD _CLC_DEF void __spirv_GroupWaitEvents(unsigned int scope,
int num_events,
event_t *event_list);
48 changes: 32 additions & 16 deletions libclc/generic/include/spirv/atomic/atomic_cmpxchg.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,38 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DECL int _Z29__spirv_AtomicCompareExchangePU3AS3iN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ii(
volatile local int *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, int, int);
_CLC_DECL int _Z29__spirv_AtomicCompareExchangePU3AS1iN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ii(
volatile global int *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, int, int);
_CLC_DECL uint _Z29__spirv_AtomicCompareExchangePU3AS3jN5__spv5ScopeENS1_19MemorySemanticsMaskES3_jj(
volatile local uint *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, uint, uint);
_CLC_DECL uint _Z29__spirv_AtomicCompareExchangePU3AS1jN5__spv5ScopeENS1_19MemorySemanticsMaskES3_jj(
volatile global uint *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, uint, uint);
_CLC_DECL int
_Z29__spirv_AtomicCompareExchangePU3AS3iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ii(
volatile local int *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, int, int);
_CLC_DECL int
_Z29__spirv_AtomicCompareExchangePU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ii(
volatile global int *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, int, int);
_CLC_DECL uint
_Z29__spirv_AtomicCompareExchangePU3AS3jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_jj(
volatile local uint *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, uint, uint);
_CLC_DECL uint
_Z29__spirv_AtomicCompareExchangePU3AS1jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_jj(
volatile global uint *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, uint, uint);

#ifdef cl_khr_int64_base_atomics
_CLC_DECL long _Z29__spirv_AtomicCompareExchangePU3AS3lN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ll(
volatile local long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, long, long);
_CLC_DECL long _Z29__spirv_AtomicCompareExchangePU3AS1lN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ll(
volatile global long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, long, long);
_CLC_DECL unsigned long _Z29__spirv_AtomicCompareExchangePU3AS3mN5__spv5ScopeENS1_19MemorySemanticsMaskES3_mm(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, unsigned long, unsigned long);
_CLC_DECL unsigned long _Z29__spirv_AtomicCompareExchangePU3AS1mN5__spv5ScopeENS1_19MemorySemanticsMaskES3_mm(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, unsigned long, unsigned long);
_CLC_DECL long
_Z29__spirv_AtomicCompareExchangePU3AS3lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ll(
volatile local long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, long, long);
_CLC_DECL long
_Z29__spirv_AtomicCompareExchangePU3AS1lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ll(
volatile global long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, long, long);
_CLC_DECL unsigned long
_Z29__spirv_AtomicCompareExchangePU3AS3mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_mm(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, unsigned long, unsigned long);
_CLC_DECL unsigned long
_Z29__spirv_AtomicCompareExchangePU3AS1mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_mm(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, unsigned long, unsigned long);
#endif
24 changes: 16 additions & 8 deletions libclc/generic/include/spirv/atomic/atomic_dec.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,30 @@
//
//===----------------------------------------------------------------------===//

_CLC_DECL int _Z24__spirv_AtomicIDecrementPU3AS3iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIDecrementPU3AS3iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL int _Z24__spirv_AtomicIDecrementPU3AS1iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIDecrementPU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIDecrementPU3AS3jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIDecrementPU3AS3jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local uint *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIDecrementPU3AS1jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIDecrementPU3AS1jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global uint *, enum Scope, enum MemorySemanticsMask);

#ifdef cl_khr_int64_base_atomics
_CLC_DECL long _Z24__spirv_AtomicIDecrementPU3AS3lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIDecrementPU3AS3lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL long _Z24__spirv_AtomicIDecrementPU3AS1lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIDecrementPU3AS1lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIDecrementPU3AS3mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIDecrementPU3AS3mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIDecrementPU3AS1mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIDecrementPU3AS1mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask);
#endif
8 changes: 6 additions & 2 deletions libclc/generic/include/spirv/atomic/atomic_decl.inc
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
#define __CLC_DECLARE_ATOMIC(ADDRSPACE, ADDRSPACE_MANGLED, TYPE, TYPE_MANGLED, NAME, NAME_LEN) \
_CLC_DECL TYPE _Z##NAME_LEN##NAME##PU3##ADDRSPACE_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED (volatile ADDRSPACE TYPE *, enum Scope, enum MemorySemanticsMask, TYPE);
#define __CLC_DECLARE_ATOMIC(ADDRSPACE, ADDRSPACE_MANGLED, TYPE, TYPE_MANGLED, \
NAME, NAME_LEN) \
_CLC_DECL TYPE \
_Z##NAME_LEN##NAME##PU3##ADDRSPACE_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
volatile ADDRSPACE TYPE *, enum Scope, enum MemorySemanticsMask, \
TYPE);

#define __CLC_DECLARE_ATOMIC_ADDRSPACE(TYPE, TYPE_MANGLED, NAME, NAME_LEN) \
__CLC_DECLARE_ATOMIC(global, AS1, TYPE, TYPE_MANGLED, NAME, NAME_LEN) \
Expand Down
24 changes: 16 additions & 8 deletions libclc/generic/include/spirv/atomic/atomic_inc.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,30 @@
//
//===----------------------------------------------------------------------===//

_CLC_DECL int _Z24__spirv_AtomicIIncrementPU3AS3iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIIncrementPU3AS3iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL int _Z24__spirv_AtomicIIncrementPU3AS1iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIIncrementPU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIIncrementPU3AS3jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIIncrementPU3AS3jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local uint *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIIncrementPU3AS1jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIIncrementPU3AS1jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global uint *, enum Scope, enum MemorySemanticsMask);

#ifdef cl_khr_int64_base_atomics
_CLC_DECL long _Z24__spirv_AtomicIIncrementPU3AS3lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIIncrementPU3AS3lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL long _Z24__spirv_AtomicIIncrementPU3AS1lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIIncrementPU3AS1lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIIncrementPU3AS3mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIIncrementPU3AS3mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIIncrementPU3AS1mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIIncrementPU3AS1mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask);
#endif
7 changes: 4 additions & 3 deletions libclc/generic/include/spirv/atomic/atomic_load.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL TYPE _Z18__spirv_AtomicLoadPU3##AS_MANGLED##K##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE( \
volatile AS const TYPE *, enum Scope, enum MemorySemanticsMask);
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL TYPE \
_Z18__spirv_AtomicLoadPU3##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \
volatile AS const TYPE *, enum Scope, enum MemorySemanticsMask);

#define DECL_AS(TYPE, TYPE_MANGLED) \
DECL(TYPE, TYPE_MANGLED, global, AS1) \
Expand Down
7 changes: 4 additions & 3 deletions libclc/generic/include/spirv/atomic/atomic_store.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL void _Z19__spirv_AtomicStorePU3##AS_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED( \
volatile AS TYPE *, enum Scope, enum MemorySemanticsMask, TYPE);
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL void \
_Z19__spirv_AtomicStorePU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
volatile AS TYPE *, enum Scope, enum MemorySemanticsMask, TYPE);

#define DECL_AS(TYPE, TYPE_MANGLED) \
DECL(TYPE, TYPE_MANGLED, global, AS1) \
Expand Down
6 changes: 4 additions & 2 deletions libclc/generic/include/spirv/atomic/atomic_xchg.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
#define __SPIRV_INT64_BASE

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DECL float _Z22__spirv_AtomicExchangePU3AS3fN5__spv5ScopeENS1_19MemorySemanticsMaskEf(
_CLC_DECL float
_Z22__spirv_AtomicExchangePU3AS3fN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagEf(
volatile local float *, enum Scope, enum MemorySemanticsMask, float);
_CLC_DECL float _Z22__spirv_AtomicExchangePU3AS1fN5__spv5ScopeENS1_19MemorySemanticsMaskEf(
_CLC_DECL float
_Z22__spirv_AtomicExchangePU3AS1fN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagEf(
volatile global float *, enum Scope, enum MemorySemanticsMask, float);
#include <spirv/atomic/atomic_decl.inc>
8 changes: 5 additions & 3 deletions libclc/generic/include/spirv/synchronization/barrier.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DECL void _Z22__spirv_ControlBarrierN5__spv5ScopeES0_j(enum Scope scope, enum Scope memory, unsigned int semantics);
_CLC_DECL void _Z21__spirv_MemoryBarrierN5__spv5ScopeEj(enum Scope scope, unsigned int semantics);
_CLC_OVERLOAD _CLC_DECL void __spirv_ControlBarrier(unsigned int scope,
unsigned int memory,
unsigned int semantics);
_CLC_OVERLOAD _CLC_DECL void __spirv_MemoryBarrier(unsigned int scope,
unsigned int semantics);
6 changes: 4 additions & 2 deletions libclc/generic/lib/async/async_work_group_strided_copy.inc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ _CLC_OVERLOAD _CLC_DEF event_t async_work_group_strided_copy(
size_t stride,
event_t event) {

return __CLC_XCONCAT(_Z22__spirv_GroupAsyncCopyI, __CLC_GENTYPE_MANGLED, E9ocl_eventN5__spv5ScopeEPU3AS1T_PU3AS3S3_mmS0_)(Workgroup, dst, src, num_gentypes, stride, event);
return __spirv_GroupAsyncCopy(Workgroup, dst, src, num_gentypes, stride,
event);
}

_CLC_OVERLOAD _CLC_DEF event_t async_work_group_strided_copy(
Expand All @@ -17,7 +18,8 @@ _CLC_OVERLOAD _CLC_DEF event_t async_work_group_strided_copy(
size_t num_gentypes,
size_t stride,
event_t event) {
return __CLC_XCONCAT(_Z22__spirv_GroupAsyncCopyI, __CLC_GENTYPE_MANGLED, E9ocl_eventN5__spv5ScopeEPU3AS3T_PU3AS1S3_mmS0_)(Workgroup, dst, src, num_gentypes, stride, event);
return __spirv_GroupAsyncCopy(Workgroup, dst, src, num_gentypes, stride,
event);
}

#undef __CLC_XCONCAT
Expand Down
2 changes: 1 addition & 1 deletion libclc/generic/lib/async/wait_group_events.cl
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
#include <clc/clc.h>

_CLC_DEF void wait_group_events(int num_events, event_t *event_list) {
_Z23__spirv_GroupWaitEventsN5__spv5ScopeEjP9ocl_event(Workgroup, num_events, event_list);
__spirv_GroupWaitEvents(Workgroup, num_events, event_list);
}
13 changes: 7 additions & 6 deletions libclc/generic/lib/atomic/atomic_add.cl
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#include <clc/clc.h>
#include <spirv/spirv.h>

#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_add(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling. */ \
return _Z18__spirv_AtomicIAddPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}
#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_add(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the \
* exact mangling. */ \
return _Z18__spirv_AtomicIAddPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}

IMPL(int, i, global, AS1)
IMPL(unsigned int, j, global, AS1)
Expand Down
13 changes: 7 additions & 6 deletions libclc/generic/lib/atomic/atomic_and.cl
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#include <clc/clc.h>
#include <spirv/spirv.h>

#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_and(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling. */ \
return _Z17__spirv_AtomicAndPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}
#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_and(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the \
* exact mangling. */ \
return _Z17__spirv_AtomicAndPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}

IMPL(int, i, global, AS1)
IMPL(unsigned int, j, global, AS1)
Expand Down
Loading