From 3427c73bdf68d31ddac5aad17b98b365628d14ff Mon Sep 17 00:00:00 2001 From: PietroGhg Date: Mon, 18 Mar 2024 16:39:19 +0000 Subject: [PATCH 1/5] [wip] no addrspace in generic libclc --- libclc/generic/libspirv/atomic/atomic_load.cl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libclc/generic/libspirv/atomic/atomic_load.cl b/libclc/generic/libspirv/atomic/atomic_load.cl index 6d8b1447261b5..4699fefbe8ce2 100644 --- a/libclc/generic/libspirv/atomic/atomic_load.cl +++ b/libclc/generic/libspirv/atomic/atomic_load.cl @@ -13,12 +13,12 @@ #define FDECL(TYPE, PREFIX, AS, BYTE_SIZE, MEM_ORDER) \ TYPE __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_##MEM_ORDER(volatile AS const TYPE *); -#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED, PREFIX, BYTE_SIZE) \ +#define IMPL(TYPE, TYPE_MANGLED, AS_PRE, AS, AS_MANGLED, PREFIX, BYTE_SIZE) \ FDECL(TYPE, PREFIX, AS, BYTE_SIZE, unordered) \ FDECL(TYPE, PREFIX, AS, BYTE_SIZE, acquire) \ FDECL(TYPE, PREFIX, AS, BYTE_SIZE, seq_cst) \ _CLC_DEF TYPE \ - _Z18__spirv_AtomicLoadPU3##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \ + _Z18__spirv_AtomicLoadP##AS_PRE##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \ volatile AS const TYPE *p, enum Scope scope, \ enum MemorySemanticsMask semantics) { \ if (semantics & Acquire) { \ @@ -31,12 +31,14 @@ 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, AS1, PREFIX, BYTE_SIZE) \ -IMPL(TYPE, TYPE_MANGLED, local, AS3, PREFIX, BYTE_SIZE) +IMPL(TYPE, TYPE_MANGLED, U3, global, AS1, PREFIX, BYTE_SIZE) \ +IMPL(TYPE, TYPE_MANGLED, U3, local, AS3, PREFIX, BYTE_SIZE) IMPL_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4) +IMPL(unsigned int, j, , global, , u, 4) + #ifdef cl_khr_int64_base_atomics IMPL_AS(long, l, , 8) IMPL_AS(unsigned long, m, u, 8) From f64cdaeed33eafa980cfade82ffedd471cb663e9 Mon Sep 17 00:00:00 2001 From: PietroGhg Date: Tue, 2 Apr 2024 10:06:06 +0100 Subject: [PATCH 2/5] Add impl for int --- libclc/generic/libspirv/atomic/atomic_load.cl | 1 + 1 file changed, 1 insertion(+) diff --git a/libclc/generic/libspirv/atomic/atomic_load.cl b/libclc/generic/libspirv/atomic/atomic_load.cl index 4699fefbe8ce2..f9da85186ec13 100644 --- a/libclc/generic/libspirv/atomic/atomic_load.cl +++ b/libclc/generic/libspirv/atomic/atomic_load.cl @@ -38,6 +38,7 @@ IMPL_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4) IMPL(unsigned int, j, , global, , u, 4) +IMPL(int, i, , global, , , 4) #ifdef cl_khr_int64_base_atomics IMPL_AS(long, l, , 8) From 67c002fbf751ac534d641b5352888fd6aa200445 Mon Sep 17 00:00:00 2001 From: PietroGhg Date: Tue, 2 Apr 2024 10:18:57 +0100 Subject: [PATCH 3/5] add prefix in mangled as --- libclc/generic/libspirv/atomic/atomic_load.cl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libclc/generic/libspirv/atomic/atomic_load.cl b/libclc/generic/libspirv/atomic/atomic_load.cl index f9da85186ec13..d81c6031533aa 100644 --- a/libclc/generic/libspirv/atomic/atomic_load.cl +++ b/libclc/generic/libspirv/atomic/atomic_load.cl @@ -13,12 +13,12 @@ #define FDECL(TYPE, PREFIX, AS, BYTE_SIZE, MEM_ORDER) \ TYPE __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_##MEM_ORDER(volatile AS const TYPE *); -#define IMPL(TYPE, TYPE_MANGLED, AS_PRE, AS, AS_MANGLED, PREFIX, BYTE_SIZE) \ +#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED, PREFIX, BYTE_SIZE) \ FDECL(TYPE, PREFIX, AS, BYTE_SIZE, unordered) \ FDECL(TYPE, PREFIX, AS, BYTE_SIZE, acquire) \ FDECL(TYPE, PREFIX, AS, BYTE_SIZE, seq_cst) \ _CLC_DEF TYPE \ - _Z18__spirv_AtomicLoadP##AS_PRE##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \ + _Z18__spirv_AtomicLoadP##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \ volatile AS const TYPE *p, enum Scope scope, \ enum MemorySemanticsMask semantics) { \ if (semantics & Acquire) { \ @@ -31,14 +31,14 @@ 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, U3, global, AS1, PREFIX, BYTE_SIZE) \ -IMPL(TYPE, TYPE_MANGLED, U3, local, AS3, PREFIX, BYTE_SIZE) +IMPL(TYPE, TYPE_MANGLED, global, U3AS1, PREFIX, BYTE_SIZE) \ +IMPL(TYPE, TYPE_MANGLED, local, U3AS3, PREFIX, BYTE_SIZE) IMPL_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4) -IMPL(unsigned int, j, , global, , u, 4) -IMPL(int, i, , global, , , 4) +IMPL(unsigned int, j, global, , u, 4) +IMPL(int, i, global, , , 4) #ifdef cl_khr_int64_base_atomics IMPL_AS(long, l, , 8) From f23686576460b30cdd30ae3d6ca4d5e34fb6f0cc Mon Sep 17 00:00:00 2001 From: PietroGhg Date: Wed, 3 Apr 2024 09:31:35 +0100 Subject: [PATCH 4/5] use generic as in impl --- libclc/generic/libspirv/atomic/atomic_load.cl | 6 +-- .../atomic/loadstore_helpers_acquire.ll | 23 +++++++++ .../atomic/loadstore_helpers_release.ll | 24 ++++++++++ .../atomic/loadstore_helpers_seq_cst.ll | 48 +++++++++++++++++++ .../atomic/loadstore_helpers_unordered.ll | 48 +++++++++++++++++++ 5 files changed, 145 insertions(+), 4 deletions(-) diff --git a/libclc/generic/libspirv/atomic/atomic_load.cl b/libclc/generic/libspirv/atomic/atomic_load.cl index d81c6031533aa..ad500bd38b8f8 100644 --- a/libclc/generic/libspirv/atomic/atomic_load.cl +++ b/libclc/generic/libspirv/atomic/atomic_load.cl @@ -32,14 +32,12 @@ 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, local, U3AS3, PREFIX, BYTE_SIZE) \ +IMPL(TYPE, TYPE_MANGLED, , , PREFIX, BYTE_SIZE) IMPL_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4) -IMPL(unsigned int, j, global, , u, 4) -IMPL(int, i, global, , , 4) - #ifdef cl_khr_int64_base_atomics IMPL_AS(long, l, , 8) IMPL_AS(unsigned long, m, u, 8) diff --git a/libclc/generic/libspirv/atomic/loadstore_helpers_acquire.ll b/libclc/generic/libspirv/atomic/loadstore_helpers_acquire.ll index 46418d5d35c2a..8ab75c6ca3ee3 100644 --- a/libclc/generic/libspirv/atomic/loadstore_helpers_acquire.ll +++ b/libclc/generic/libspirv/atomic/loadstore_helpers_acquire.ll @@ -20,6 +20,12 @@ entry: unreachable } +define i32 @__clc__atomic_load__4_acquire(i32 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define i64 @__clc__atomic_load_global_8_acquire(i64 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -32,6 +38,12 @@ entry: unreachable } +define i64 @__clc__atomic_load__8_acquire(i64 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define i32 @__clc__atomic_uload_global_4_acquire(i32 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: %0 = load atomic volatile i32, i32 addrspace(1)* %ptr acquire, align 4 @@ -44,6 +56,12 @@ entry: unreachable } +define i32 @__clc__atomic_uload__4_acquire(i32 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + %0 = load atomic volatile i32, i32 addrspace(0)* %ptr acquire, align 4 + ret i32 %0 +} + define i64 @__clc__atomic_uload_global_8_acquire(i64 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -56,3 +74,8 @@ entry: unreachable } +define i64 @__clc__atomic_uload__8_acquire(i64 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} diff --git a/libclc/generic/libspirv/atomic/loadstore_helpers_release.ll b/libclc/generic/libspirv/atomic/loadstore_helpers_release.ll index c10d96eb19f6c..da70542a4de30 100644 --- a/libclc/generic/libspirv/atomic/loadstore_helpers_release.ll +++ b/libclc/generic/libspirv/atomic/loadstore_helpers_release.ll @@ -20,6 +20,12 @@ entry: unreachable } +define void @__clc__atomic_store__4_release(i32 addrspace(0)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_store_global_8_release(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -32,6 +38,12 @@ entry: unreachable } +define void @__clc__atomic_store__8_release(i64 addrspace(0)* nocapture %ptr, i64 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_ustore_global_4_release(i32 addrspace(1)* nocapture %ptr, i32 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -44,6 +56,12 @@ entry: unreachable } +define void @__clc__atomic_ustore__4_release(i32 addrspace(0)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_ustore_global_8_release(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -56,3 +74,9 @@ entry: unreachable } +define void @__clc__atomic_ustore__8_release(i64 addrspace(0)* nocapture %ptr, i64 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + diff --git a/libclc/generic/libspirv/atomic/loadstore_helpers_seq_cst.ll b/libclc/generic/libspirv/atomic/loadstore_helpers_seq_cst.ll index c996862619c0e..7d24e2f89e768 100644 --- a/libclc/generic/libspirv/atomic/loadstore_helpers_seq_cst.ll +++ b/libclc/generic/libspirv/atomic/loadstore_helpers_seq_cst.ll @@ -20,6 +20,12 @@ entry: unreachable } +define i32 @__clc__atomic_load__4_seq_cst(i32 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define i64 @__clc__atomic_load_global_8_seq_cst(i64 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -32,6 +38,12 @@ entry: unreachable } +define i64 @__clc__atomic_load__8_seq_cst(i64 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define i32 @__clc__atomic_uload_global_4_seq_cst(i32 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: %0 = load atomic volatile i32, i32 addrspace(1)* %ptr seq_cst, align 4 @@ -44,6 +56,12 @@ entry: unreachable } +define i32 @__clc__atomic_uload__4_seq_cst(i32 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define i64 @__clc__atomic_uload_global_8_seq_cst(i64 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -56,6 +74,12 @@ entry: unreachable } +define i64 @__clc__atomic_uload__8_seq_cst(i64 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_store_global_4_seq_cst(i32 addrspace(1)* nocapture %ptr, i32 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -68,6 +92,12 @@ entry: unreachable } +define void @__clc__atomic_store__4_seq_cst(i32 addrspace(0)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_store_global_8_seq_cst(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -80,6 +110,12 @@ entry: unreachable } +define void @__clc__atomic_store__8_seq_cst(i64 addrspace(0)* nocapture %ptr, i64 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_ustore_global_4_seq_cst(i32 addrspace(1)* nocapture %ptr, i32 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -92,6 +128,12 @@ entry: unreachable } +define void @__clc__atomic_ustore__4_seq_cst(i32 addrspace(0)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} + define void @__clc__atomic_ustore_global_8_seq_cst(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { entry: tail call void @llvm.trap() @@ -103,3 +145,9 @@ entry: tail call void @llvm.trap() unreachable } + +define void @__clc__atomic_ustore__8_seq_cst(i64 addrspace(0)* nocapture %ptr, i64 %value) nounwind alwaysinline { +entry: + tail call void @llvm.trap() + unreachable +} diff --git a/libclc/generic/libspirv/atomic/loadstore_helpers_unordered.ll b/libclc/generic/libspirv/atomic/loadstore_helpers_unordered.ll index f31df6390163f..2316346e0feff 100644 --- a/libclc/generic/libspirv/atomic/loadstore_helpers_unordered.ll +++ b/libclc/generic/libspirv/atomic/loadstore_helpers_unordered.ll @@ -20,6 +20,12 @@ entry: ret i32 %0 } +define i32 @__clc__atomic_load__4_unordered(i32 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + %0 = load atomic volatile i32, i32 addrspace(0)* %ptr unordered, align 4 + ret i32 %0 +} + define i64 @__clc__atomic_load_global_8_unordered(i64 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: %0 = load atomic volatile i64, i64 addrspace(1)* %ptr unordered, align 8 @@ -32,6 +38,12 @@ entry: ret i64 %0 } +define i64 @__clc__atomic_load__8_unordered(i64 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + %0 = load atomic volatile i64, i64 addrspace(0)* %ptr unordered, align 8 + ret i64 %0 +} + define i32 @__clc__atomic_uload_global_4_unordered(i32 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: %0 = load atomic volatile i32, i32 addrspace(1)* %ptr unordered, align 4 @@ -44,6 +56,12 @@ entry: ret i32 %0 } +define i32 @__clc__atomic_uload__4_unordered(i32 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + %0 = load atomic volatile i32, i32 addrspace(0)* %ptr unordered, align 4 + ret i32 %0 +} + define i64 @__clc__atomic_uload_global_8_unordered(i64 addrspace(1)* nocapture %ptr) nounwind alwaysinline { entry: %0 = load atomic volatile i64, i64 addrspace(1)* %ptr unordered, align 8 @@ -56,6 +74,12 @@ entry: ret i64 %0 } +define i64 @__clc__atomic_uload__8_unordered(i64 addrspace(0)* nocapture %ptr) nounwind alwaysinline { +entry: + %0 = load atomic volatile i64, i64 addrspace(0)* %ptr unordered, align 8 + ret i64 %0 +} + define void @__clc__atomic_store_global_4_unordered(i32 addrspace(1)* nocapture %ptr, i32 %value) nounwind alwaysinline { entry: store atomic volatile i32 %value, i32 addrspace(1)* %ptr unordered, align 4 @@ -68,6 +92,12 @@ entry: ret void } +define void @__clc__atomic_store__4_unordered(i32 addrspace(0)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + store atomic volatile i32 %value, i32 addrspace(0)* %ptr unordered, align 4 + ret void +} + define void @__clc__atomic_store_global_8_unordered(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { entry: store atomic volatile i64 %value, i64 addrspace(1)* %ptr unordered, align 8 @@ -80,6 +110,12 @@ entry: ret void } +define void @__clc__atomic_store__8_unordered(i64 addrspace(0)* nocapture %ptr, i64 %value) nounwind alwaysinline { +entry: + store atomic volatile i64 %value, i64 addrspace(0)* %ptr unordered, align 8 + ret void +} + define void @__clc__atomic_ustore_global_4_unordered(i32 addrspace(1)* nocapture %ptr, i32 %value) nounwind alwaysinline { entry: store atomic volatile i32 %value, i32 addrspace(1)* %ptr unordered, align 4 @@ -92,6 +128,12 @@ entry: ret void } +define void @__clc__atomic_ustore__4_unordered(i32 addrspace(0)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + store atomic volatile i32 %value, i32 addrspace(0)* %ptr unordered, align 4 + ret void +} + define void @__clc__atomic_ustore_global_8_unordered(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { entry: store atomic volatile i64 %value, i64 addrspace(1)* %ptr unordered, align 8 @@ -104,3 +146,9 @@ entry: ret void } +define void @__clc__atomic_ustore__8_unordered(i64 addrspace(0)* nocapture %ptr, i64 %value) nounwind alwaysinline { +entry: + store atomic volatile i64 %value, i64 addrspace(0)* %ptr unordered, align 8 + ret void +} + From a0c112db09fe8738cc361f1e9f84c6ab86a18819 Mon Sep 17 00:00:00 2001 From: PietroGhg Date: Wed, 10 Apr 2024 10:56:04 +0100 Subject: [PATCH 5/5] formatting --- libclc/generic/libspirv/atomic/atomic_load.cl | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/libclc/generic/libspirv/atomic/atomic_load.cl b/libclc/generic/libspirv/atomic/atomic_load.cl index ad500bd38b8f8..8fd849e72a181 100644 --- a/libclc/generic/libspirv/atomic/atomic_load.cl +++ b/libclc/generic/libspirv/atomic/atomic_load.cl @@ -13,27 +13,27 @@ #define FDECL(TYPE, PREFIX, AS, BYTE_SIZE, MEM_ORDER) \ TYPE __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_##MEM_ORDER(volatile AS const 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, acquire) \ - FDECL(TYPE, PREFIX, AS, BYTE_SIZE, seq_cst) \ - _CLC_DEF 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, acquire) \ + FDECL(TYPE, PREFIX, AS, BYTE_SIZE, seq_cst) \ + _CLC_DEF TYPE \ _Z18__spirv_AtomicLoadP##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \ - volatile AS const TYPE *p, enum Scope scope, \ - enum MemorySemanticsMask semantics) { \ - if (semantics & Acquire) { \ - return __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_acquire(p); \ - } \ - if (semantics & SequentiallyConsistent) { \ - return __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_seq_cst(p); \ - } \ - return __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_unordered(p); \ + volatile AS const TYPE *p, enum Scope scope, \ + enum MemorySemanticsMask semantics) { \ + if (semantics & Acquire) { \ + return __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_acquire(p); \ + } \ + if (semantics & SequentiallyConsistent) { \ + return __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_seq_cst(p); \ + } \ + return __clc__atomic_##PREFIX##load_##AS##_##BYTE_SIZE##_unordered(p); \ } -#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) +#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_AS(int, i, , 4) IMPL_AS(unsigned int, j, u, 4)