Changeset 1391 for branches/GNU/src/gcc/libjava/sysdep
- Timestamp:
- Apr 27, 2004, 8:39:34 PM (21 years ago)
- Location:
- branches/GNU/src/gcc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GNU/src/gcc
- Property svn:ignore
-
old new 26 26 configure.vr 27 27 configure.vrs 28 dir.info 28 29 Makefile 29 dir.info30 30 lost+found 31 31 update.out
-
- Property svn:ignore
-
branches/GNU/src/gcc/libjava/sysdep/powerpc/locks.h
-
Property cvs2svn:cvs-rev
changed from
1.1
to1.1.1.2
r1390 r1391 12 12 #define __SYSDEP_LOCKS_H__ 13 13 14 #ifdef __powerpc64__ 15 #define _LARX "ldarx " 16 #define _STCX "stdcx. " 17 #else 18 #define _LARX "lwarx " 19 #ifdef __PPC405__ 20 #define _STCX "sync; stwcx. " 21 #else 22 #define _STCX "stwcx. " 23 #endif 24 #endif 25 14 26 typedef size_t obj_addr_t; /* Integer type big enough for object */ 15 27 /* address. */ 16 28 17 29 inline static bool 18 compare_and_swap(volatile obj_addr_t *addr, 19 obj_addr_t old, 20 obj_addr_t new_val) 30 compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old, 31 obj_addr_t new_val) 21 32 { 22 33 int ret; 23 34 24 35 __asm__ __volatile__ ( 25 "0: lwarx%0,0,%1 ;"36 "0: " _LARX "%0,0,%1 ;" 26 37 " xor. %0,%3,%0;" 27 38 " bne 1f;" 28 " stwcx.%2,0,%1;"39 " " _STCX "%2,0,%1;" 29 40 " bne- 0b;" 30 41 "1: " 31 : "=&r" (ret)32 : "r" (addr), "r"(new_val), "r"(old)42 : "=&r" (ret) 43 : "r" (addr), "r" (new_val), "r" (old) 33 44 : "cr0", "memory"); 45 34 46 /* This version of __compare_and_swap is to be used when acquiring 35 47 a lock, so we don't need to worry about whether other memory … … 41 53 42 54 inline static void 43 release_set (volatile obj_addr_t *addr, obj_addr_t new_val)55 release_set (volatile obj_addr_t *addr, obj_addr_t new_val) 44 56 { 45 57 __asm__ __volatile__ ("sync" : : : "memory"); 46 * (addr)= new_val;58 *addr = new_val; 47 59 } 48 60 49 61 inline static bool 50 compare_and_swap_release(volatile obj_addr_t *addr, 51 obj_addr_t old, 52 obj_addr_t new_val) 62 compare_and_swap_release (volatile obj_addr_t *addr, obj_addr_t old, 63 obj_addr_t new_val) 53 64 { 54 65 int ret; 55 66 56 67 __asm__ __volatile__ ("sync" : : : "memory"); 68 57 69 __asm__ __volatile__ ( 58 "0: lwarx%0,0,%1 ;"70 "0: " _LARX "%0,0,%1 ;" 59 71 " xor. %0,%3,%0;" 60 72 " bne 1f;" 61 " stwcx.%2,0,%1;"73 " " _STCX "%2,0,%1;" 62 74 " bne- 0b;" 63 75 "1: " 64 : "=&r" (ret)65 : "r" (addr), "r"(new_val), "r"(old)76 : "=&r" (ret) 77 : "r" (addr), "r" (new_val), "r" (old) 66 78 : "cr0", "memory"); 79 67 80 return ret == 0; 68 81 } … … 71 84 // data that was loaded from memory before the barrier. 72 85 inline static void 73 read_barrier ()86 read_barrier () 74 87 { 75 88 __asm__ __volatile__ ("isync" : : : "memory"); … … 79 92 // processors. 80 93 inline static void 81 write_barrier ()94 write_barrier () 82 95 { 83 96 __asm__ __volatile__ ("sync" : : : "memory"); -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.