]> sourceware.org Git - glibc.git/commitdiff
* sysdeps/powerpc/pt-machine.h (MEMORY_BARRIER): Don't be __volatile__. (__compare_an...
authorGeoff Keating <geoffk@cygnus.com>
Tue, 11 Apr 2000 17:34:36 +0000 (17:34 +0000)
committerGeoff Keating <geoffk@cygnus.com>
Tue, 11 Apr 2000 17:34:36 +0000 (17:34 +0000)
2000-04-11  Geoff Keating  <geoffk@cygnus.com>

* sysdeps/powerpc/pt-machine.h (MEMORY_BARRIER): Don't be
__volatile__.
(__compare_and_swap): Replace other 'sync' with MEMORY_BARRIER.
Don't have the 'asm' __volatile__.

linuxthreads/ChangeLog
linuxthreads/sysdeps/powerpc/pt-machine.h

index 9802ccf8eded688afe0a05a6c1eee3cb631a9220..48a24b12514ff8101d21ba2008f5a39ef19161fe 100644 (file)
@@ -1,3 +1,10 @@
+2000-04-11  Geoff Keating  <geoffk@cygnus.com>
+
+       * sysdeps/powerpc/pt-machine.h (MEMORY_BARRIER): Don't be
+       __volatile__.
+       (__compare_and_swap): Replace other 'sync' with MEMORY_BARRIER.
+       Don't have the 'asm' __volatile__.
+
 2000-04-11  Ulrich Drepper  <drepper@redhat.com>
 
        * internals.h: Define MEMORY_BARRIER as empty if not defined already.
index c7d0670d824e8b7c3b761a9a8fd8555872eb1f1f..c4af484e1b2eb00e6a042cc3ae0c10f5b6139975 100644 (file)
@@ -1,6 +1,6 @@
 /* Machine-dependent pthreads configuration and inline functions.
    powerpc version.
-   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -26,8 +26,9 @@
 #endif
 
 /* For multiprocessor systems, we want to ensure all memory accesses
-   are completed before we reset a lock.  */
-#define MEMORY_BARRIER() __asm__ __volatile__ ("sync" : : : "memory")
+   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")
 
 /* Get some notion of the current stack.  Need not be exactly the top
    of the stack, just something somewhere in the current frame.  */
@@ -48,17 +49,17 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
 {
   int ret;
 
-  sync();
-  __asm__ __volatile__(
-                      "0:    lwarx %0,0,%1 ;"
-                      "      xor. %0,%3,%0;"
-                      "      bne 1f;"
-                      "      stwcx. %2,0,%1;"
-                      "      bne- 0b;"
-                      "1:    "
+  MEMORY_BARRIER ();
+  __asm__ (
+          "0:    lwarx %0,0,%1 ;"
+          "      xor. %0,%3,%0;"
+          "      bne 1f;"
+          "      stwcx. %2,0,%1;"
+          "      bne- 0b;"
+          "1:    "
        : "=&r"(ret)
        : "r"(p), "r"(newval), "r"(oldval)
        : "cr0", "memory");
-  MEMORY_BARRIER();
+  MEMORY_BARRIER ();
   return ret == 0;
 }
This page took 0.050676 seconds and 5 git commands to generate.