]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/test_and_benchmark/libbenchmark/inc/libbenchmark/libbenchmark_porting_abstraction_layer_lock_gcc_spinlock_sync.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / test_and_benchmark / libbenchmark / inc / libbenchmark / libbenchmark_porting_abstraction_layer_lock_gcc_spinlock_sync.h
1 /****************************************************************************/
2 #if( defined __GNUC__ && LIBLFDS_GCC_VERSION >= 412 )
3
4   /***** defines *****/
5   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC 1
6
7   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_UNINITIALIZED  0
8   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_AVAILABLE      1
9   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_UNAVAILABLE    2
10
11   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_CREATE( pal_lock_gcc_spinlock_sync_state )  \
12   {                                                                                           \
13     (pal_lock_gcc_spinlock_sync_state) = LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_AVAILABLE;   \
14     LFDS710_MISC_BARRIER_STORE;                                                               \
15     lfds710_misc_force_store();                                                               \
16   }
17
18   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_DESTROY( pal_lock_gcc_spinlock_sync_state )  \
19   {                                                                                            \
20     (pal_lock_gcc_spinlock_sync_state) = LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_UNAVAILABLE;  \
21     LFDS710_MISC_BARRIER_STORE;                                                                \
22     lfds710_misc_force_store();                                                                \
23   }
24
25   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_GET( pal_lock_gcc_spinlock_sync_state )      while( LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_AVAILABLE != __sync_val_compare_and_swap(&(pal_lock_gcc_spinlock_sync_state), (lfds710_pal_uint_t) LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_AVAILABLE, (lfds710_pal_uint_t) LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_UNAVAILABLE) )
26
27   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_RELEASE( pal_lock_gcc_spinlock_sync_state )  __sync_lock_test_and_set( &(pal_lock_gcc_spinlock_sync_state), LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_AVAILABLE )
28
29   /***** typedefs *****/
30   typedef lfds710_pal_uint_t pal_lock_gcc_spinlock_sync_state;
31
32 #endif
33
34
35
36
37
38 /****************************************************************************/
39 #if( !defined LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC )
40
41   /***** defines *****/
42   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC 0
43
44   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_CREATE( pal_lock_gcc_spinlock_atomic_sync )
45   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_DESTROY( pal_lock_gcc_spinlock_atomic_sync )
46   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_GET( pal_lock_gcc_spinlock_atomic_sync )
47   #define LIBBENCHMARK_PAL_LOCK_GCC_SPINLOCK_SYNC_RELEASE( pal_lock_gcc_spinlock_atomic_sync )
48
49   /***** typedefs *****/
50   typedef void * pal_lock_gcc_spinlock_sync_state;
51
52 #endif
53