Commit d1852da7 authored by unknown's avatar unknown

less confusing and more correct name for my_atomic_swap

parent fb818dd7
...@@ -47,7 +47,7 @@ typedef struct {pthread_mutex_t rw;} my_atomic_rwlock_t; ...@@ -47,7 +47,7 @@ typedef struct {pthread_mutex_t rw;} my_atomic_rwlock_t;
#endif #endif
#define make_atomic_add_body(S) int ## S sav; sav= *a; *a+= v; v=sav; #define make_atomic_add_body(S) int ## S sav; sav= *a; *a+= v; v=sav;
#define make_atomic_swap_body(S) int ## S sav; sav= *a; *a= v; v=sav; #define make_atomic_fas_body(S) int ## S sav; sav= *a; *a= v; v=sav;
#define make_atomic_cas_body(S) if ((ret= (*a == *cmp))) *a= set; else *cmp=*a; #define make_atomic_cas_body(S) if ((ret= (*a == *cmp))) *a= set; else *cmp=*a;
#define make_atomic_load_body(S) ret= *a; #define make_atomic_load_body(S) ret= *a;
#define make_atomic_store_body(S) *a= v; #define make_atomic_store_body(S) *a= v;
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#define make_atomic_add_body(S) \ #define make_atomic_add_body(S) \
asm volatile (LOCK_prefix "; xadd %0, %1;" : "+r" (v) , "+m" (*a)) asm volatile (LOCK_prefix "; xadd %0, %1;" : "+r" (v) , "+m" (*a))
#endif #endif
#define make_atomic_swap_body(S) \ #define make_atomic_fas_body(S) \
asm volatile ("xchg %0, %1;" : "+r" (v) , "+m" (*a)) asm volatile ("xchg %0, %1;" : "+r" (v) , "+m" (*a))
#define make_atomic_cas_body(S) \ #define make_atomic_cas_body(S) \
asm volatile (LOCK_prefix "; cmpxchg %3, %0; setz %2;" \ asm volatile (LOCK_prefix "; cmpxchg %3, %0; setz %2;" \
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
_asm setz al \ _asm setz al \
_asm movzx ret, al \ _asm movzx ret, al \
} }
#define make_atomic_swap_body(S) \ #define make_atomic_fas_body(S) \
_asm { \ _asm { \
_asm mov reg_ ## S, v \ _asm mov reg_ ## S, v \
_asm xchg *a, reg_ ## S \ _asm xchg *a, reg_ ## S \
......
...@@ -43,11 +43,11 @@ STATIC_INLINE int ## S my_atomic_add ## S( \ ...@@ -43,11 +43,11 @@ STATIC_INLINE int ## S my_atomic_add ## S( \
return v; \ return v; \
} }
#define make_atomic_swap(S) \ #define make_atomic_fas(S) \
STATIC_INLINE int ## S my_atomic_swap ## S( \ STATIC_INLINE int ## S my_atomic_fas ## S( \
int ## S volatile *a, int ## S v) \ int ## S volatile *a, int ## S v) \
{ \ { \
make_atomic_swap_body(S); \ make_atomic_fas_body(S); \
return v; \ return v; \
} }
...@@ -80,8 +80,8 @@ STATIC_INLINE void my_atomic_store ## S( \ ...@@ -80,8 +80,8 @@ STATIC_INLINE void my_atomic_store ## S( \
#define make_atomic_add(S) \ #define make_atomic_add(S) \
extern int ## S my_atomic_add ## S(int ## S volatile *a, int ## S v); extern int ## S my_atomic_add ## S(int ## S volatile *a, int ## S v);
#define make_atomic_swap(S) \ #define make_atomic_fas(S) \
extern int ## S my_atomic_swap ## S(int ## S volatile *a, int ## S v); extern int ## S my_atomic_fas ## S(int ## S volatile *a, int ## S v);
#define make_atomic_cas(S) \ #define make_atomic_cas(S) \
extern int my_atomic_cas ## S(int ## S volatile *a, int ## S *cmp, int ## S set); extern int my_atomic_cas ## S(int ## S volatile *a, int ## S *cmp, int ## S set);
...@@ -113,10 +113,10 @@ make_atomic_store(16) ...@@ -113,10 +113,10 @@ make_atomic_store(16)
make_atomic_store(32) make_atomic_store(32)
make_atomic_store(ptr) make_atomic_store(ptr)
make_atomic_swap( 8) make_atomic_fas( 8)
make_atomic_swap(16) make_atomic_fas(16)
make_atomic_swap(32) make_atomic_fas(32)
make_atomic_swap(ptr) make_atomic_fas(ptr)
#ifdef _atomic_h_cleanup_ #ifdef _atomic_h_cleanup_
#include _atomic_h_cleanup_ #include _atomic_h_cleanup_
...@@ -127,12 +127,12 @@ make_atomic_swap(ptr) ...@@ -127,12 +127,12 @@ make_atomic_swap(ptr)
#undef make_atomic_cas #undef make_atomic_cas
#undef make_atomic_load #undef make_atomic_load
#undef make_atomic_store #undef make_atomic_store
#undef make_atomic_swap #undef make_atomic_fas
#undef make_atomic_add_body #undef make_atomic_add_body
#undef make_atomic_cas_body #undef make_atomic_cas_body
#undef make_atomic_load_body #undef make_atomic_load_body
#undef make_atomic_store_body #undef make_atomic_store_body
#undef make_atomic_swap_body #undef make_atomic_fas_body
#undef intptr #undef intptr
#ifndef LF_BACKOFF #ifndef LF_BACKOFF
......
...@@ -62,7 +62,7 @@ pthread_handler_t test_atomic_add_handler(void *arg) ...@@ -62,7 +62,7 @@ pthread_handler_t test_atomic_add_handler(void *arg)
5. subtract result from a32 5. subtract result from a32
must get 0 in a32 at the end must get 0 in a32 at the end
*/ */
pthread_handler_t test_atomic_swap_handler(void *arg) pthread_handler_t test_atomic_fas_handler(void *arg)
{ {
int m=*(int *)arg; int m=*(int *)arg;
uint32 x=my_atomic_add32(&b32, 1); uint32 x=my_atomic_add32(&b32, 1);
...@@ -72,14 +72,14 @@ pthread_handler_t test_atomic_swap_handler(void *arg) ...@@ -72,14 +72,14 @@ pthread_handler_t test_atomic_swap_handler(void *arg)
for (; m ; m--) for (; m ; m--)
{ {
my_atomic_rwlock_wrlock(&rwl); my_atomic_rwlock_wrlock(&rwl);
x=my_atomic_swap32(&c32, x); x=my_atomic_fas32(&c32, x);
my_atomic_rwlock_wrunlock(&rwl); my_atomic_rwlock_wrunlock(&rwl);
} }
if (!x) if (!x)
{ {
my_atomic_rwlock_wrlock(&rwl); my_atomic_rwlock_wrlock(&rwl);
x=my_atomic_swap32(&c32, x); x=my_atomic_fas32(&c32, x);
my_atomic_rwlock_wrunlock(&rwl); my_atomic_rwlock_wrunlock(&rwl);
} }
...@@ -306,7 +306,7 @@ int main() ...@@ -306,7 +306,7 @@ int main()
#define THREADS 100 #define THREADS 100
test_atomic("my_atomic_add32", test_atomic_add_handler, THREADS,CYCLES); test_atomic("my_atomic_add32", test_atomic_add_handler, THREADS,CYCLES);
test_atomic("my_atomic_swap32", test_atomic_swap_handler, THREADS,CYCLES); test_atomic("my_atomic_fas32", test_atomic_fas_handler, THREADS,CYCLES);
test_atomic("my_atomic_cas32", test_atomic_cas_handler, THREADS,CYCLES); test_atomic("my_atomic_cas32", test_atomic_cas_handler, THREADS,CYCLES);
test_atomic("lf_pinbox", test_lf_pinbox, THREADS,CYCLES); test_atomic("lf_pinbox", test_lf_pinbox, THREADS,CYCLES);
test_atomic("lf_alloc", test_lf_alloc, THREADS,CYCLES); test_atomic("lf_alloc", test_lf_alloc, THREADS,CYCLES);
......
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