small rewrites
authorbdemsky <bdemsky>
Wed, 2 Dec 2009 04:12:20 +0000 (04:12 +0000)
committerbdemsky <bdemsky>
Wed, 2 Dec 2009 04:12:20 +0000 (04:12 +0000)
Robust/src/Runtime/DSTM/interface/dsmlock.c
Robust/src/Runtime/DSTM/interface/dsmlock.h

index 0b3135c4d19a62e6a5d4bf5d0b9f668d51bb8d1d..ac9de02de0b85eb6f67dec2d6dd356f8dc245e93 100644 (file)
@@ -20,14 +20,14 @@ inline void writeLock(volatile unsigned int *addr) {
                         :: "a" (addr), "i" (RW_LOCK_BIAS) : "memory");
 }
 
-static inline void atomic_dec(atomic_t *v) {
+inline void atomic_dec(volatile unsigned int *v) {
   __asm__ __volatile__ (LOCK_PREFIX "decl %0"
-                       : "+m" (v->counter));
+                       : "+m" (v));
 }
 
-static inline void atomic_inc(atomic_t *v) {
+inline void atomic_inc(volatile unsigned int *v) {
   __asm__ __volatile__ (LOCK_PREFIX "incl %0"
-                       : "+m" (v->counter));
+                       : "+m" (v));
 }
 
 static inline int atomic_sub_and_test(int i, atomic_t *v) {
@@ -53,12 +53,10 @@ static inline void atomic_add(int i, atomic_t *v) {
 }
 
 inline int read_trylock(volatile unsigned int  *lock) {
-  atomic_t *count = (atomic_t *)lock;
-
-  atomic_dec(count);
-  if (atomic_read(count) >= 0)
+  atomic_dec(lock);
+  if (atomic_read(lock) >= 0)
     return 1; //can aquire a new read lock
-  atomic_inc(count);
+  atomic_inc(lock);
   return 0; //failure
 }
 
index 2ea3cdb61d6f99051db73a700806e0dbdd0b3a33..7a56b47b9b246f8bf5ade0a0ee0ee6078038068c 100644 (file)
@@ -2,7 +2,7 @@
 #define _DSMLOCK_H_
 
 #define RW_LOCK_BIAS             0x01000000
-#define atomic_read(v)          ((v)->counter)
+#define atomic_read(v)          (v)
 #define RW_LOCK_UNLOCKED          { RW_LOCK_BIAS }
 //#define LOCK_PREFIX ""
 #define LOCK_PREFIX \
@@ -23,8 +23,8 @@ void readLock(volatile unsigned int *addr);
 void writeLock(volatile unsigned int *addr);
 int read_trylock(volatile unsigned int *lock);
 int write_trylock(volatile unsigned int *lock);
-static void atomic_dec(atomic_t *v);
-static void atomic_inc(atomic_t *v);
+void atomic_dec(volatile unsigned int *v);
+void atomic_inc(volatile unsigned int *v);
 static void atomic_add(int i, atomic_t *v);
 static int atomic_sub_and_test(int i, atomic_t *v);
 void read_unlock(volatile unsigned int *rw);