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:
@@ -1251,6 +1251,10 @@ FLMINT32 FLMAPI f_atomicInc(
|
||||
|
||||
return( i32Tmp + 1);
|
||||
}
|
||||
#elif defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
|
||||
{
|
||||
return( ppc_atomic_add( piTarget, 1));
|
||||
}
|
||||
#elif defined( FLM_UNIX)
|
||||
return( posix_atomic_add_32( piTarget, 1));
|
||||
#else
|
||||
@@ -1300,6 +1304,10 @@ FLMINT32 FLMAPI f_atomicDec(
|
||||
|
||||
return( i32Tmp - 1);
|
||||
}
|
||||
#elif defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
|
||||
{
|
||||
return( ppc_atomic_add( piTarget, -1));
|
||||
}
|
||||
#elif defined( FLM_UNIX)
|
||||
return( posix_atomic_add_32( piTarget, -1));
|
||||
#else
|
||||
@@ -1373,6 +1381,10 @@ FLMINT32 FLMAPI f_atomicExchange(
|
||||
|
||||
return( i32OldVal);
|
||||
}
|
||||
#elif defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
|
||||
{
|
||||
return( ppc_atomic_xchg( piTarget, i32NewVal));
|
||||
}
|
||||
#elif defined( FLM_UNIX)
|
||||
return( posix_atomic_xchg_32( piTarget, i32NewVal));
|
||||
#else
|
||||
|
||||
@@ -208,6 +208,24 @@
|
||||
FLMINT32 iNewValue);
|
||||
#endif
|
||||
|
||||
/**********************************************************************
|
||||
Desc:
|
||||
**********************************************************************/
|
||||
#if defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
|
||||
extern "C" FLMATOMIC ppc_atomic_add(
|
||||
FLMATOMIC * piTarget,
|
||||
FLMINT32 iDelta);
|
||||
#endif
|
||||
|
||||
/**********************************************************************
|
||||
Desc:
|
||||
**********************************************************************/
|
||||
#if defined( FLM_PPC) && defined( FLM_GNUC) && defined( FLM_LINUX)
|
||||
extern "C" FLMATOMIC ppc_atomic_xchg(
|
||||
FLMATOMIC * piTarget,
|
||||
FLMATOMIC iNewValue);
|
||||
#endif
|
||||
|
||||
/**********************************************************************
|
||||
Desc:
|
||||
**********************************************************************/
|
||||
|
||||
@@ -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:
|
||||
****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user