Annotation of embedaddon/nginx/src/os/unix/ngx_sunpro_amd64.il, revision 1.1.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>