FTK change. Added native Linux atomic ops on PPC.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@753 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
ahodgkinson
2006-08-08 23:12:02 +00:00
parent 1996f05292
commit 65ec01a749
3 changed files with 81 additions and 0 deletions

View File

@@ -1352,6 +1352,57 @@ void sparc_asm_code( void)
}
#endif
/****************************************************************************
Desc:
****************************************************************************/
#if defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
FLMATOMIC ppc_atomic_add(
FLMATOMIC * piTarget,
FLMINT32 iDelta)
{
long result;
__asm__ __volatile__(
"sync\n"
"1:\n"
"lwarx %0, 0, %2\n"
"addc %0, %0, %3\n"
"stwcx. %0, 0, %2\n"
"bne- 1b\n"
"isync"
: "=&b" (result), "=m" (*piTarget)
: "b" (piTarget), "r" (iDelta)
: "cr0", "memory");
return( result);
}
#endif
/****************************************************************************
Desc:
****************************************************************************/
#if defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
FLMATOMIC ppc_atomic_xchg(
FLMATOMIC * piTarget,
FLMATOMIC iNewValue)
{
long iOldVal;
__asm__ __volatile__(
"sync\n"
"1:\n"
"lwarx %0, 0, %2\n"
"stwcx. %3, 0, %2\n"
"bne- 1b\n"
"isync"
: "=&b" (iOldVal), "=m" (*piTarget)
: "b" (piTarget), "r" (iNewValue)
: "cr0", "memory");
return( iOldVal);
}
#endif
/****************************************************************************
Desc:
****************************************************************************/