gc_priv.h (GC_test_and_set): Implementation for Linux PPC from Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
* gc_priv.h (GC_test_and_set): Implementation for Linux PPC from Franz Sirl <Franz.Sirl-kernel@lauterbach.com>. From-SVN: r28480
This commit is contained in:
parent
02edc62b77
commit
fa94e3a95d
2 changed files with 28 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
1999-08-03 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* gc_priv.h (GC_test_and_set): Implementation for Linux PPC from
|
||||
Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
|
||||
|
||||
1999-08-02 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* aclocal.m4, configure: Rebuilt for new libtool.
|
||||
|
|
|
@ -465,6 +465,29 @@ void GC_print_callers (/* struct callinfo info[NFRAMES] */);
|
|||
__asm__ __volatile__("mb": : :"memory");
|
||||
*(addr) = 0;
|
||||
}
|
||||
# elif defined(__powerpc__)
|
||||
inline static int GC_test_and_set(volatile unsigned int *addr) {
|
||||
int ret, oldval=0, newval=1;
|
||||
|
||||
__asm__ __volatile__("sync" : : : "memory");
|
||||
__asm__ __volatile__(
|
||||
"0: lwarx %0,0,%1 ;"
|
||||
" xor. %0,%3,%0;"
|
||||
" bne 1f;"
|
||||
" stwcx. %2,0,%1;"
|
||||
" bne- 0b;"
|
||||
"1: "
|
||||
: "=&r"(ret)
|
||||
: "r"(addr), "r"(newval), "r"(oldval)
|
||||
: "cr0", "memory");
|
||||
__asm__ __volatile__("sync" : : : "memory");
|
||||
return ret == 0;
|
||||
}
|
||||
inline static void GC_clear(volatile unsigned int *addr) {
|
||||
__asm__ __volatile__("sync": : :"memory");
|
||||
*(addr) = 0;
|
||||
}
|
||||
|
||||
# else
|
||||
-- > Need implementation of GC_test_and_set()
|
||||
# endif
|
||||
|
|
Loading…
Add table
Reference in a new issue