aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-07-22 02:26:07 +0000
committerUlrich Drepper <drepper@redhat.com>2000-07-22 02:26:07 +0000
commitdfef32ef796146357481a6f7949ba900108c655e (patch)
tree56ad420b4ee2209afd53ff1a5589962f9b32f728 /linuxthreads
parentf74e61f05626503cc5e469b940bdb149c98d7ab8 (diff)
downloadglibc-dfef32ef796146357481a6f7949ba900108c655e.zip
glibc-dfef32ef796146357481a6f7949ba900108c655e.tar.gz
glibc-dfef32ef796146357481a6f7949ba900108c655e.tar.bz2
Update.
2000-07-21 Ulrich Drepper <drepper@redhat.com> * sysdeps/powerpc/strchr.S: Correct bugs introduced in BP-ification. Patch by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/spinlock.h4
-rw-r--r--linuxthreads/sysdeps/powerpc/pt-machine.h8
2 files changed, 9 insertions, 3 deletions
diff --git a/linuxthreads/spinlock.h b/linuxthreads/spinlock.h
index 703b72d..6d3d343 100644
--- a/linuxthreads/spinlock.h
+++ b/linuxthreads/spinlock.h
@@ -48,6 +48,10 @@ static inline int compare_and_swap(long * ptr, long oldval, long newval,
#elif defined(HAS_COMPARE_AND_SWAP)
+#ifdef IMPLEMENT_TAS_WITH_CAS
+#define testandset(p) !__compare_and_swap(p, 0, 1)
+#endif
+
#ifdef HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS
static inline int
diff --git a/linuxthreads/sysdeps/powerpc/pt-machine.h b/linuxthreads/sysdeps/powerpc/pt-machine.h
index c4af484..39defcd 100644
--- a/linuxthreads/sysdeps/powerpc/pt-machine.h
+++ b/linuxthreads/sysdeps/powerpc/pt-machine.h
@@ -28,7 +28,7 @@
/* For multiprocessor systems, we want to ensure all memory accesses
are completed before we reset a lock. On other systems, we still
need to make sure that the compiler has flushed everything to memory. */
-#define MEMORY_BARRIER() __asm__ ("sync" : : : "memory")
+#define MEMORY_BARRIER() __asm__ __volatile__ ("sync" : : : "memory")
/* Get some notion of the current stack. Need not be exactly the top
of the stack, just something somewhere in the current frame. */
@@ -36,9 +36,11 @@
register char * stack_pointer __asm__ ("r1");
/* Compare-and-swap for semaphores. */
-/* note that test-and-set(x) is the same as compare-and-swap(x, 0, 1) */
+/* note that test-and-set(x) is the same as !compare-and-swap(x, 0, 1) */
#define HAS_COMPARE_AND_SWAP
+#define IMPLEMENT_TAS_WITH_CAS
+
#if BROKEN_PPC_ASM_CR0
static
#else
@@ -50,7 +52,7 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
int ret;
MEMORY_BARRIER ();
- __asm__ (
+ __asm__ __volatile__ (
"0: lwarx %0,0,%1 ;"
" xor. %0,%3,%0;"
" bne 1f;"