Annotation of embedaddon/nginx/src/os/unix/ngx_sunpro_amd64.il, revision 1.1
1.1 ! misho 1: /
! 2: / Copyright (C) Igor Sysoev
! 3: / Copyright (C) Nginx, Inc.
! 4: /
! 5:
! 6: / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
! 7: / ngx_atomic_uint_t old, ngx_atomic_uint_t set);
! 8: /
! 9: / the arguments are passed in %rdi, %rsi, %rdx
! 10: / the result is returned in the %rax
! 11:
! 12: .inline ngx_atomic_cmp_set,0
! 13: movq %rsi, %rax
! 14: lock
! 15: cmpxchgq %rdx, (%rdi)
! 16: setz %al
! 17: movzbq %al, %rax
! 18: .end
! 19:
! 20:
! 21: / ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value,
! 22: / ngx_atomic_int_t add);
! 23: /
! 24: / the arguments are passed in %rdi, %rsi
! 25: / the result is returned in the %rax
! 26:
! 27: .inline ngx_atomic_fetch_add,0
! 28: movq %rsi, %rax
! 29: lock
! 30: xaddq %rax, (%rdi)
! 31: .end
! 32:
! 33:
! 34: / ngx_cpu_pause()
! 35: /
! 36: / the "rep; nop" is used instead of "pause" to avoid the "[ PAUSE ]" hardware
! 37: / capability added by linker because Solaris/amd64 does not know about it:
! 38: /
! 39: / ld.so.1: nginx: fatal: hardware capability unsupported: 0x2000 [ PAUSE ]
! 40:
! 41: .inline ngx_cpu_pause,0
! 42: rep; nop
! 43: .end
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>