mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Atomic increment and decrement functions for mips
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@30020 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
907c94a229
commit
cb4c554422
2 changed files with 40 additions and 1 deletions
|
@ -1,3 +1,7 @@
|
|||
2010-03-23 Riccardo Mottola <rmottola@users.sf.net>
|
||||
|
||||
* Source/NSObject.m: Atomic increment and decrement functions for mips
|
||||
|
||||
2010-03-19 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* config/config.reuseaddr.c:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/** Implementation of NSObject for GNUStep
|
||||
Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994-2010 Free Software Foundation, Inc.
|
||||
|
||||
Written by: Andrew Kachites McCallum <mccallum@gnu.ai.mit.edu>
|
||||
Date: August 1994
|
||||
|
@ -306,6 +306,41 @@ GSAtomicDecrement(gsatomic_t X)
|
|||
return *X;
|
||||
}
|
||||
|
||||
#elif defined(__mips__)
|
||||
|
||||
typedef int32_t volatile *gsatomic_t;
|
||||
|
||||
#define GSATOMICREAD(X) (*(X))
|
||||
|
||||
static __inline__ int
|
||||
GSAtomicIncrement(gsatomic_t X)
|
||||
{
|
||||
int tmp;
|
||||
|
||||
__asm__ __volatile__ (
|
||||
" .set mips2 \n"
|
||||
"0: ll %0, %1 \n"
|
||||
" addiu %0, 1 \n"
|
||||
" sc %0, %1 \n"
|
||||
" beqz %0, 0b \n"
|
||||
:"=&r" (tmp), "=m" (*X));
|
||||
return *X;
|
||||
}
|
||||
|
||||
static __inline__ int
|
||||
GSAtomicDecrement(gsatomic_t X)
|
||||
{
|
||||
int tmp;
|
||||
|
||||
__asm__ __volatile__ (
|
||||
" .set mips2 \n"
|
||||
"0: ll %0, %1 \n"
|
||||
" addiu %0, -1 \n"
|
||||
" sc %0, %1 \n"
|
||||
" beqz %0, 0b \n"
|
||||
:"=&r" (tmp), "=m" (*X));
|
||||
return *X;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(GSATOMICREAD)
|
||||
|
|
Loading…
Reference in a new issue