X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_atomic.h;h=0b05bcecd3e29ab8e5b65ed68c4c13a3a84416a2;hb=38d70dfdb082834652ff8823ad7f35067e720b1a;hp=c833ea8b991fc38ceb5d057bcbb3c942ae0f7956;hpb=7e85e11584bdd452251c67d64bed45867315fb97;p=m6w6%2Flibmemcached diff --git a/clients/ms_atomic.h b/clients/ms_atomic.h index c833ea8b..0b05bcec 100644 --- a/clients/ms_atomic.h +++ b/clients/ms_atomic.h @@ -1,28 +1,69 @@ +/* LibMemcached + * Copyright (C) 2006-2009 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + #ifndef CLIENTS_MS_ATOMIC_H #define CLIENTS_MS_ATOMIC_H #if defined(__SUNPRO_C) # define _KERNEL # include +# if SIZEOF_SIZE_T == 8 +# define atomic_add_size(X, Y) atomic_add_64((X), (Y)) +# define atomic_add_size_nv(X, Y) atomic_add_64((X), (Y)) +# define atomic_dec_size(X, Y) atomic_add_64((X), (Y)) +# define atomic_dec_size_nv(X, Y) atomic_add_64((X), (Y)) +# else +# define atomic_add_size(X, Y) atomic_add_32((X), (Y)) +# define atomic_add_size_nv(X, Y) atomic_add_32((X), (Y)) +# define atomic_dec_size(X, Y) atomic_add_32((X), (Y)) +# define atomic_dec_size_nv(X, Y) atomic_add_32((X), (Y)) +# endif # undef _KERNEL -#else +#elif HAVE_GCC_ATOMIC_BUILTINS # define atomic_add_8(X, Y) __sync_fetch_and_add((X), (Y)) # define atomic_add_16(X, Y) __sync_fetch_and_add((X), (Y)) # define atomic_add_32(X, Y) __sync_fetch_and_add((X), (Y)) -# define atomic_add_64(X, Y) __sync_fetch_and_add((X), (Y)) +# define atomic_add_size(X, Y) __sync_fetch_and_add((X), (Y)) # define atomic_dec_8(X) __sync_fetch_and_sub((X), 1) # define atomic_dec_16(X) __sync_fetch_and_sub((X), 1) # define atomic_dec_32(X) __sync_fetch_and_sub((X), 1) -# define atomic_dec_64(X) __sync_fetch_and_sub((X), 1) +# define atomic_dec_size(X) __sync_fetch_and_sub((X), 1) /* The same as above, but these return the new value instead of void */ # define atomic_add_8_nv(X, Y) __sync_fetch_and_add((X), (Y)) # define atomic_add_16_nv(X, Y) __sync_fetch_and_add((X), (Y)) # define atomic_add_32_nv(X, Y) __sync_fetch_and_add((X), (Y)) -# define atomic_add_64_nv(X, Y) __sync_fetch_and_add((X), (Y)) +# define atomic_add_size_nv(X, Y) __sync_fetch_and_add((X), (Y)) # define atomic_dec_8_nv(X) __sync_fetch_and_sub((X), 1) # define atomic_dec_16_nv(X) __sync_fetch_and_sub((X), 1) # define atomic_dec_32_nv(X) __sync_fetch_and_sub((X), 1) -# define atomic_dec_64_nv(X) __sync_fetch_and_sub((X), 1) +# define atomic_dec_size_nv(X) __sync_fetch_and_sub((X), 1) +#else +#warning "Atomic operators not found so memslap will not work correctly" +# define atomic_add_8(X, Y) +# define atomic_add_16(X, Y) +# define atomic_add_32(X, Y) +# define atomic_add_size(X, Y) +# define atomic_dec_8(X) +# define atomic_dec_16(X) +# define atomic_dec_32(X) +# define atomic_dec_size(X) +/* The same as above, but these return the new value instead of void */ +# define atomic_add_8_nv(X, Y) +# define atomic_add_16_nv(X, Y) +# define atomic_add_32_nv(X, Y) +# define atomic_add_size_nv(X, Y) +# define atomic_dec_8_nv(X) +# define atomic_dec_16_nv(X) +# define atomic_dec_32_nv(X) +# define atomic_dec_size_nv(X) #endif /* defined(__SUNPRO_C) */ #endif /* CLIENTS_MS_ATOMIC_H */