Annotation of embedaddon/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h, revision 1.1
1.1 ! misho 1:
! 2: /*
! 3: * Copyright (C) Igor Sysoev
! 4: * Copyright (C) Nginx, Inc.
! 5: */
! 6:
! 7:
! 8: #if (NGX_PTR_SIZE == 4)
! 9: #define NGX_CASA ngx_casa
! 10: #else
! 11: #define NGX_CASA ngx_casxa
! 12: #endif
! 13:
! 14:
! 15: ngx_atomic_uint_t
! 16: ngx_casa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock);
! 17:
! 18: ngx_atomic_uint_t
! 19: ngx_casxa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock);
! 20:
! 21: /* the code in src/os/unix/ngx_sunpro_sparc64.il */
! 22:
! 23:
! 24: static ngx_inline ngx_atomic_uint_t
! 25: ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
! 26: ngx_atomic_uint_t set)
! 27: {
! 28: set = NGX_CASA(set, old, lock);
! 29:
! 30: return (set == old);
! 31: }
! 32:
! 33:
! 34: static ngx_inline ngx_atomic_int_t
! 35: ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
! 36: {
! 37: ngx_atomic_uint_t old, res;
! 38:
! 39: old = *value;
! 40:
! 41: for ( ;; ) {
! 42:
! 43: res = old + add;
! 44:
! 45: res = NGX_CASA(res, old, value);
! 46:
! 47: if (res == old) {
! 48: return res;
! 49: }
! 50:
! 51: old = res;
! 52: }
! 53: }
! 54:
! 55:
! 56: #define ngx_memory_barrier() \
! 57: __asm (".volatile"); \
! 58: __asm ("membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); \
! 59: __asm (".nonvolatile")
! 60:
! 61: #define ngx_cpu_pause()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>