Mercurial > hg > nginx-quic
diff src/os/win32/ngx_atomic.h @ 373:018569a8f09c
nginx-0.0.7-2004-06-30-19:30:41 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 30 Jun 2004 15:30:41 +0000 |
parents | src/core/ngx_atomic.h@780e93985b93 |
children | 5cdc4838d4e8 |
line wrap: on
line diff
copy from src/core/ngx_atomic.h copy to src/os/win32/ngx_atomic.h --- a/src/core/ngx_atomic.h +++ b/src/os/win32/ngx_atomic.h @@ -6,74 +6,11 @@ #include <ngx_core.h> -#if ( __i386__ || __amd64__ ) - -typedef volatile uint32_t ngx_atomic_t; - -#if (NGX_SMP) -#define NGX_SMP_LOCK "lock;" -#else -#define NGX_SMP_LOCK -#endif - - -static ngx_inline uint32_t ngx_atomic_inc(ngx_atomic_t *value) -{ - uint32_t old; - - __asm__ volatile ( - - NGX_SMP_LOCK - " xaddl %0, %2; " - " incl %0; " - - : "=q" (old) : "0" (1), "m" (*value)); - - return old; -} - - -static ngx_inline uint32_t ngx_atomic_dec(ngx_atomic_t *value) -{ - uint32_t old; - - __asm__ volatile ( - - NGX_SMP_LOCK - " xaddl %0, %1; " - " decl %0; " - - : "=q" (old) : "0" (-1), "m" (*value)); - - return old; -} - - -static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock, - ngx_atomic_t old, - ngx_atomic_t set) -{ - uint32_t res; - - __asm__ volatile ( - - NGX_SMP_LOCK - " cmpxchgl %3, %1; " - " setz %%al; " - " movzbl %%al, %0; " - - : "=a" (res) : "m" (*lock), "a" (old), "q" (set)); - - return res; -} - - -#elif (WIN32) - #define ngx_atomic_inc(p) InterlockedIncrement((long *) p) #define ngx_atomic_dec(p) InterlockedDecrement((long *) p) -#if defined(__WATCOMC__) || defined(__BORLANDC__) + +#if defined( __WATCOMC__ ) || defined( __BORLANDC__ ) #define ngx_atomic_cmp_set(lock, old, set) \ (InterlockedCompareExchange((long *) lock, set, old) == old) @@ -86,18 +23,8 @@ static ngx_inline uint32_t ngx_atomic_cm #endif -#else -typedef volatile uint32_t ngx_atomic_t; - -/* STUB */ -#define ngx_atomic_inc(x) (*(x))++; -#define ngx_atomic_dec(x) (*(x))--; -#define ngx_atomic_cmp_set(lock, old, set) 1 -/**/ - -#endif - +void ngx_spinlock(ngx_atomic_t *lock, ngx_uint_t spin); #define ngx_trylock(lock) (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1)) #define ngx_unlock(lock) *(lock) = 0