Commit 61fd68b4 by Alan Modra Committed by Alan Modra

locks.h: Formatting.

	* sysdep/powerpc/locks.h: Formatting.
	(_LARX): Define.
	(_STCX): Define.
	(compare_and_swap): Use _LARX and _STCX.
	(compare_and_swap_release): Likewise.

From-SVN: r55855
parent bd11db39
2002-07-27 Alan Modra <amodra@bigpond.net.au>
* sysdep/powerpc/locks.h: Formatting.
(_LARX): Define.
(_STCX): Define.
(compare_and_swap): Use _LARX and _STCX.
(compare_and_swap_release): Likewise.
2002-07-26 Tom Tromey <tromey@redhat.com> 2002-07-26 Tom Tromey <tromey@redhat.com>
* java/net/Authenticator.java: New version from Classpath. * java/net/Authenticator.java: New version from Classpath.
......
...@@ -11,26 +11,38 @@ details. */ ...@@ -11,26 +11,38 @@ details. */
#ifndef __SYSDEP_LOCKS_H__ #ifndef __SYSDEP_LOCKS_H__
#define __SYSDEP_LOCKS_H__ #define __SYSDEP_LOCKS_H__
#ifdef __powerpc64__
#define _LARX "ldarx "
#define _STCX "stdcx. "
#else
#define _LARX "lwarx "
#ifdef __PPC405__
#define _STCX "sync; stwcx. "
#else
#define _STCX "stwcx. "
#endif
#endif
typedef size_t obj_addr_t; /* Integer type big enough for object */ typedef size_t obj_addr_t; /* Integer type big enough for object */
/* address. */ /* address. */
inline static bool inline static bool
compare_and_swap(volatile obj_addr_t *addr, compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old,
obj_addr_t old,
obj_addr_t new_val) obj_addr_t new_val)
{ {
int ret; int ret;
__asm__ __volatile__ ( __asm__ __volatile__ (
"0: lwarx %0,0,%1 ;" "0: " _LARX "%0,0,%1 ;"
" xor. %0,%3,%0;" " xor. %0,%3,%0;"
" bne 1f;" " bne 1f;"
" stwcx. %2,0,%1;" " " _STCX "%2,0,%1;"
" bne- 0b;" " bne- 0b;"
"1: " "1: "
: "=&r"(ret) : "=&r" (ret)
: "r"(addr), "r"(new_val), "r"(old) : "r" (addr), "r" (new_val), "r" (old)
: "cr0", "memory"); : "cr0", "memory");
/* This version of __compare_and_swap is to be used when acquiring /* This version of __compare_and_swap is to be used when acquiring
a lock, so we don't need to worry about whether other memory a lock, so we don't need to worry about whether other memory
operations have completed, but we do need to be sure that any loads operations have completed, but we do need to be sure that any loads
...@@ -40,37 +52,38 @@ compare_and_swap(volatile obj_addr_t *addr, ...@@ -40,37 +52,38 @@ compare_and_swap(volatile obj_addr_t *addr,
} }
inline static void inline static void
release_set(volatile obj_addr_t *addr, obj_addr_t new_val) release_set (volatile obj_addr_t *addr, obj_addr_t new_val)
{ {
__asm__ __volatile__ ("sync" : : : "memory"); __asm__ __volatile__ ("sync" : : : "memory");
*(addr) = new_val; *addr = new_val;
} }
inline static bool inline static bool
compare_and_swap_release(volatile obj_addr_t *addr, compare_and_swap_release (volatile obj_addr_t *addr, obj_addr_t old,
obj_addr_t old,
obj_addr_t new_val) obj_addr_t new_val)
{ {
int ret; int ret;
__asm__ __volatile__ ("sync" : : : "memory"); __asm__ __volatile__ ("sync" : : : "memory");
__asm__ __volatile__ ( __asm__ __volatile__ (
"0: lwarx %0,0,%1 ;" "0: " _LARX "%0,0,%1 ;"
" xor. %0,%3,%0;" " xor. %0,%3,%0;"
" bne 1f;" " bne 1f;"
" stwcx. %2,0,%1;" " " _STCX "%2,0,%1;"
" bne- 0b;" " bne- 0b;"
"1: " "1: "
: "=&r"(ret) : "=&r" (ret)
: "r"(addr), "r"(new_val), "r"(old) : "r" (addr), "r" (new_val), "r" (old)
: "cr0", "memory"); : "cr0", "memory");
return ret == 0; return ret == 0;
} }
// Ensure that subsequent instructions do not execute on stale // Ensure that subsequent instructions do not execute on stale
// data that was loaded from memory before the barrier. // data that was loaded from memory before the barrier.
inline static void inline static void
read_barrier() read_barrier ()
{ {
__asm__ __volatile__ ("isync" : : : "memory"); __asm__ __volatile__ ("isync" : : : "memory");
} }
...@@ -78,7 +91,7 @@ read_barrier() ...@@ -78,7 +91,7 @@ read_barrier()
// Ensure that prior stores to memory are completed with respect to other // Ensure that prior stores to memory are completed with respect to other
// processors. // processors.
inline static void inline static void
write_barrier() write_barrier ()
{ {
__asm__ __volatile__ ("sync" : : : "memory"); __asm__ __volatile__ ("sync" : : : "memory");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment