|  | / | 
|  | / Copyright (C) Igor Sysoev | 
|  | / Copyright (C) Nginx, Inc. | 
|  | / | 
|  |  | 
|  | / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, | 
|  | /     ngx_atomic_uint_t old, ngx_atomic_uint_t set); | 
|  | / | 
|  | / the arguments are passed in %rdi, %rsi, %rdx | 
|  | / the result is returned in the %rax | 
|  |  | 
|  | .inline ngx_atomic_cmp_set,0 | 
|  | movq      %rsi, %rax | 
|  | lock | 
|  | cmpxchgq  %rdx, (%rdi) | 
|  | setz      %al | 
|  | movzbq    %al, %rax | 
|  | .end | 
|  |  | 
|  |  | 
|  | / ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value, | 
|  | /     ngx_atomic_int_t add); | 
|  | / | 
|  | / the arguments are passed in %rdi, %rsi | 
|  | / the result is returned in the %rax | 
|  |  | 
|  | .inline ngx_atomic_fetch_add,0 | 
|  | movq      %rsi, %rax | 
|  | lock | 
|  | xaddq     %rax, (%rdi) | 
|  | .end | 
|  |  | 
|  |  | 
|  | / ngx_cpu_pause() | 
|  | / | 
|  | / the "rep; nop" is used instead of "pause" to avoid the "[ PAUSE ]" hardware | 
|  | / capability added by linker because Solaris/amd64 does not know about it: | 
|  | / | 
|  | / ld.so.1: nginx: fatal: hardware capability unsupported: 0x2000 [ PAUSE ] | 
|  |  | 
|  | .inline ngx_cpu_pause,0 | 
|  | rep; nop | 
|  | .end |