X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fimpatomic.h;h=2fde095ee67e6ce5498c4a8dd61d62c0779f2fec;hb=daebea56175a01c918b69836581f9384bd966f78;hp=808dc1229c39a2d47d54d6d159a937e6d7aa68a4;hpb=247e28f81f258c3c380be00a89430186f8ac11ed;p=model-checker.git diff --git a/include/impatomic.h b/include/impatomic.h index 808dc12..2fde095 100644 --- a/include/impatomic.h +++ b/include/impatomic.h @@ -72,48 +72,47 @@ inline void atomic_flag::fence( memory_order __x__ ) const volatile __x__=memory-ordering, and __y__=memory-ordering. */ -#define _ATOMIC_LOAD_( __a__, __x__ ) \ - ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ - __typeof__((__a__)->__f__) __r__ = (__typeof__((__a__)->__f__))model_read_action((void *)__p__, __x__); \ - __r__; }) - -#define _ATOMIC_STORE_( __a__, __m__, __x__ ) \ - ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ - __typeof__(__m__) __v__ = (__m__); \ - model_write_action((void *) __p__, __x__, (uint64_t) __v__); \ - __v__; }) - - -#define _ATOMIC_INIT_( __a__, __m__ ) \ - ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ - __typeof__(__m__) __v__ = (__m__); \ - model_init_action((void *) __p__, (uint64_t) __v__); \ - __v__; }) - -#define _ATOMIC_MODIFY_( __a__, __o__, __m__, __x__ ) \ - ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ - __typeof__((__a__)->__f__) __old__=(__typeof__((__a__)->__f__)) model_rmwr_action((void *)__p__, __x__); \ - __typeof__(__m__) __v__ = (__m__); \ - __typeof__((__a__)->__f__) __copy__= __old__; \ - __copy__ __o__ __v__; \ - model_rmw_action((void *)__p__, __x__, (uint64_t) __copy__); \ - __old__; }) - -#define _ATOMIC_CMPSWP_( __a__, __e__, __m__, __x__ ) \ - ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ - __typeof__(__e__) __q__ = (__e__); \ - __typeof__(__m__) __v__ = (__m__); \ - bool __r__; \ - __typeof__((__a__)->__f__) __t__=(__typeof__((__a__)->__f__)) model_rmwr_action((void *)__p__, __x__);\ - if (__t__ == * __q__ ) { \ - model_rmw_action((void *)__p__, __x__, (uint64_t) __v__); __r__ = true; } \ - else { model_rmwc_action((void *)__p__, __x__); *__q__ = __t__; __r__ = false;} \ - __r__; }) - -//TODO -#define _ATOMIC_FENCE_( __a__, __x__ ) \ -({ ;}) - +#define _ATOMIC_LOAD_( __a__, __x__ ) \ + ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ + __typeof__((__a__)->__f__) __r__ = (__typeof__((__a__)->__f__))model_read_action((void *)__p__, __x__); \ + __r__; }) + +#define _ATOMIC_STORE_( __a__, __m__, __x__ ) \ + ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ + __typeof__(__m__) __v__ = (__m__); \ + model_write_action((void *) __p__, __x__, (uint64_t) __v__); \ + __v__; }) + + +#define _ATOMIC_INIT_( __a__, __m__ ) \ + ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ + __typeof__(__m__) __v__ = (__m__); \ + model_init_action((void *) __p__, (uint64_t) __v__); \ + __v__; }) + +#define _ATOMIC_MODIFY_( __a__, __o__, __m__, __x__ ) \ + ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ + __typeof__((__a__)->__f__) __old__=(__typeof__((__a__)->__f__)) model_rmwr_action((void *)__p__, __x__); \ + __typeof__(__m__) __v__ = (__m__); \ + __typeof__((__a__)->__f__) __copy__= __old__; \ + __copy__ __o__ __v__; \ + model_rmw_action((void *)__p__, __x__, (uint64_t) __copy__); \ + __old__; }) + +#define _ATOMIC_CMPSWP_( __a__, __e__, __m__, __x__ ) \ + ({ volatile __typeof__((__a__)->__f__)* __p__ = & ((__a__)->__f__); \ + __typeof__(__e__) __q__ = (__e__); \ + __typeof__(__m__) __v__ = (__m__); \ + bool __r__; \ + __typeof__((__a__)->__f__) __t__=(__typeof__((__a__)->__f__)) model_rmwr_action((void *)__p__, __x__); \ + if (__t__ == * __q__ ) { \ + model_rmw_action((void *)__p__, __x__, (uint64_t) __v__); __r__ = true; } \ + else { model_rmwc_action((void *)__p__, __x__); *__q__ = __t__; __r__ = false;} \ + __r__; }) + +#define _ATOMIC_FENCE_( __a__, __x__ ) \ + ({ model_fence_action(__x__);}) + #define ATOMIC_CHAR_LOCK_FREE 1 #define ATOMIC_CHAR16_T_LOCK_FREE 1