SWDEV-293408 Add atomicInc_system and atomicDec_system

- Also revise the implementation of atomicInc/atomicDec based on clang
  builtins.

Change-Id: Ia5e06e88c7be1da5f8fc7ac70037a120c604e343


[ROCm/clr commit: 45205c5e53]
This commit is contained in:
Michael LIAO
2021-07-06 16:08:12 -04:00
committed by Michael Hong Bin Liao
vanhempi 58cbab41ef
commit 5ea09794fc
@@ -281,34 +281,28 @@ __device__
inline
unsigned int atomicInc(unsigned int* address, unsigned int val)
{
__device__
extern
unsigned int __builtin_amdgcn_atomic_inc(
unsigned int*,
unsigned int,
unsigned int,
unsigned int,
bool) __asm("llvm.amdgcn.atomic.inc.i32.p0i32");
return __builtin_amdgcn_atomic_inc(
address, val, __ATOMIC_RELAXED, 1 /* Device scope */, false);
return __builtin_amdgcn_atomic_inc32(address, val, __ATOMIC_RELAXED, "agent");
}
__device__
inline
unsigned int atomicDec(unsigned int* address, unsigned int val)
{
__device__
extern
unsigned int __builtin_amdgcn_atomic_dec(
unsigned int*,
unsigned int,
unsigned int,
unsigned int,
bool) __asm("llvm.amdgcn.atomic.dec.i32.p0i32");
return __builtin_amdgcn_atomic_dec32(address, val, __ATOMIC_RELAXED, "agent");
}
return __builtin_amdgcn_atomic_dec(
address, val, __ATOMIC_RELAXED, 1 /* Device scope */, false);
__device__
inline
unsigned int atomicInc_system(unsigned int* address, unsigned int val)
{
return __builtin_amdgcn_atomic_inc32(address, val, __ATOMIC_RELAXED, "one-as");
}
__device__
inline
unsigned int atomicDec_system(unsigned int* address, unsigned int val)
{
return __builtin_amdgcn_atomic_dec32(address, val, __ATOMIC_RELAXED, "one-as");
}
__device__