From c2d1eef7b4176d05c624ce8703e9f7b5968a66e6 Mon Sep 17 00:00:00 2001 From: Brian Sumner Date: Tue, 26 May 2020 16:42:01 -0700 Subject: [PATCH] Split feature into separate function Change-Id: Ie72e145b6f1c35b93519e8b46072376fcaa88d79 (cherry picked from commit 0e58ba2a876d6fd91aee5b1c32726f38940e4e65) --- ockl/src/gaaf.cl | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/ockl/src/gaaf.cl b/ockl/src/gaaf.cl index cb5ed822..2821aeaa 100644 --- a/ockl/src/gaaf.cl +++ b/ockl/src/gaaf.cl @@ -17,16 +17,28 @@ extern void __llvm_amdgcn_global_atomic_fadd_p1f32_f32(__global float *, float) __asm("llvm.amdgcn.global.atomic.fadd.p1f32.f32"); +__attribute__((target("atomic-fadd-insts"))) static void +global_atomic_fadd(__global float *p, float v) +{ + __llvm_amdgcn_global_atomic_fadd_p1f32_f32(p, v); +} + +static void +generic_atomic_fadd(float *p, float v) +{ + atomic_uint *t = (atomic_uint *)p; + uint e = AL(t, memory_order_relaxed, memory_scope_device); + while (!AC(t, &e, AS_UINT(v + AS_FLOAT(e)), memory_order_relaxed, memory_order_relaxed, memory_scope_device)) + ; +} + void __ockl_atomic_add_noret_f32(float *p, float v) { if (__oclc_ISA_version == 9008 && !__ockl_is_local_addr(p) && !__ockl_is_private_addr(p)) { - __llvm_amdgcn_global_atomic_fadd_p1f32_f32((__global float *)p, v); + global_atomic_fadd((__global float *)p, v); } else { - atomic_uint *t = (atomic_uint *)p; - uint e = AL(t, memory_order_relaxed, memory_scope_device); - while (!AC(t, &e, AS_UINT(v + AS_FLOAT(e)), memory_order_relaxed, memory_order_relaxed, memory_scope_device)) - ; + generic_atomic_fadd(p, v); } }