diff --git a/libclc/generic/libspirv/atomic/atomic_load.cl b/libclc/generic/libspirv/atomic/atomic_load.cl index 8fd849e72a181..b235700e1e92a 100644 --- a/libclc/generic/libspirv/atomic/atomic_load.cl +++ b/libclc/generic/libspirv/atomic/atomic_load.cl @@ -32,8 +32,7 @@ TYPE __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_##MEM_ORDER(volatile AS c #define IMPL_AS(TYPE, TYPE_MANGLED, PREFIX, BYTE_SIZE) \ IMPL(TYPE, TYPE_MANGLED, global, U3AS1, PREFIX, BYTE_SIZE) \ - IMPL(TYPE, TYPE_MANGLED, local, U3AS3, PREFIX, BYTE_SIZE) \ - IMPL(TYPE, TYPE_MANGLED, , , PREFIX, BYTE_SIZE) + IMPL(TYPE, TYPE_MANGLED, local, U3AS3, PREFIX, BYTE_SIZE) IMPL_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4) @@ -43,6 +42,21 @@ IMPL_AS(long, l, , 8) IMPL_AS(unsigned long, m, u, 8) #endif +#if _CLC_GENERIC_AS_SUPPORTED + +#define IMPL_GENERIC(TYPE, TYPE_MANGLED, PREFIX, BYTE_SIZE) \ + IMPL(TYPE, TYPE_MANGLED, , , PREFIX, BYTE_SIZE) + +IMPL_GENERIC(int, i, , 4) +IMPL_GENERIC(unsigned int, j, u, 4) + +#ifdef cl_khr_int64_base_atomics +IMPL_GENERIC(long, l, , 8) +IMPL_GENERIC(unsigned long, m, u, 8) +#endif + +#endif //_CLC_GENERIC_AS_SUPPORTED + #undef FDECL #undef IMPL_AS #undef IMPL diff --git a/libclc/generic/libspirv/atomic/atomic_store.cl b/libclc/generic/libspirv/atomic/atomic_store.cl index d24672957ddc4..cba8c5c8f02cf 100644 --- a/libclc/generic/libspirv/atomic/atomic_store.cl +++ b/libclc/generic/libspirv/atomic/atomic_store.cl @@ -29,26 +29,26 @@ _Z19__spirv_AtomicStorePU3AS3fN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE #define FDECL(TYPE, PREFIX, AS, BYTE_SIZE, MEM_ORDER) \ TYPE __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_##MEM_ORDER(volatile AS const TYPE *, TYPE); -#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED, PREFIX, BYTE_SIZE) \ - FDECL(TYPE, PREFIX, AS, BYTE_SIZE, unordered) \ - FDECL(TYPE, PREFIX, AS, BYTE_SIZE, release) \ - FDECL(TYPE, PREFIX, AS, BYTE_SIZE, seq_cst) \ - _CLC_DEF void \ - _Z19__spirv_AtomicStorePU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \ - volatile AS TYPE *p, enum Scope scope, \ - enum MemorySemanticsMask semantics, TYPE val) { \ - if (semantics == Release) { \ - __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_release(p, val); \ - } else if (semantics == SequentiallyConsistent) { \ - __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_seq_cst(p, val); \ - } else { \ - __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_unordered(p, val); \ - } \ +#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED, SUB, PREFIX, BYTE_SIZE) \ + FDECL(TYPE, PREFIX, AS, BYTE_SIZE, unordered) \ + FDECL(TYPE, PREFIX, AS, BYTE_SIZE, release) \ + FDECL(TYPE, PREFIX, AS, BYTE_SIZE, seq_cst) \ + _CLC_DEF void \ + _Z19__spirv_AtomicStoreP##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS##SUB##_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \ + volatile AS TYPE *p, enum Scope scope, \ + enum MemorySemanticsMask semantics, TYPE val) { \ + if (semantics == Release) { \ + __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_release(p, val); \ + } else if (semantics == SequentiallyConsistent) { \ + __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_seq_cst(p, val); \ + } else { \ + __clc__atomic_##PREFIX##store_##AS##_##BYTE_SIZE##_unordered(p, val); \ + } \ } -#define IMPL_AS(TYPE, TYPE_MANGLED, PREFIX, BYTE_SIZE) \ -IMPL(TYPE, TYPE_MANGLED, global, AS1, PREFIX, BYTE_SIZE) \ -IMPL(TYPE, TYPE_MANGLED, local, AS3, PREFIX, BYTE_SIZE) +#define IMPL_AS(TYPE, TYPE_MANGLED, PREFIX, BYTE_SIZE) \ + IMPL(TYPE, TYPE_MANGLED, global, U3AS1, 1, PREFIX, BYTE_SIZE) \ + IMPL(TYPE, TYPE_MANGLED, local, U3AS3, 1, PREFIX, BYTE_SIZE) IMPL_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4) @@ -58,6 +58,21 @@ IMPL_AS(long, l, , 8) IMPL_AS(unsigned long, m, u, 8) #endif +#if _CLC_GENERIC_AS_SUPPORTED + +#define IMPL_GENERIC(TYPE, TYPE_MANGLED, PREFIX, BYTE_SIZE) \ + IMPL(TYPE, TYPE_MANGLED, , , 0, PREFIX, BYTE_SIZE) + +IMPL_GENERIC(int, i, , 4) +IMPL_GENERIC(unsigned int, j, u, 4) + +#ifdef cl_khr_int64_base_atomics +IMPL_GENERIC(long, l, , 8) +IMPL_GENERIC(unsigned long, m, u, 8) +#endif + +#endif //_CLC_GENERIC_AS_SUPPORTED + #undef FDECL #undef IMPL_AS #undef IMPL