ngx_sunpro_amd64.il revision e18a033b
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
44