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>