110
|
1 /
|
|
2 / Copyright (C) Igor Sysoev
|
|
3 /
|
|
4
|
|
5 / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
|
|
6 / ngx_atomic_uint_t old, ngx_atomic_uint_t set);
|
|
7 /
|
488
|
8 / the arguments are passed on stack (%esp), 4(%esp), 8(%esp)
|
110
|
9
|
|
10 .inline ngx_atomic_cmp_set,0
|
|
11 movl (%esp), %ecx
|
|
12 movl 4(%esp), %eax
|
|
13 movl 8(%esp), %edx
|
|
14 lock
|
|
15 cmpxchgl %edx, (%ecx)
|
|
16 setz %al
|
|
17 movzbl %al, %eax
|
|
18 .end
|
|
19
|
|
20
|
|
21 / ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value,
|
|
22 / ngx_atomic_int_t add);
|
|
23 /
|
488
|
24 / the arguments are passed on stack (%esp), 4(%esp)
|
110
|
25
|
|
26 .inline ngx_atomic_fetch_add,0
|
|
27 movl (%esp), %ecx
|
|
28 movl 4(%esp), %eax
|
|
29 lock
|
|
30 xaddl %eax, (%ecx)
|
|
31 .end
|
320
|
32
|
|
33
|
|
34 / ngx_cpu_pause()
|
488
|
35 /
|
|
36 / the "rep; nop" is used instead of "pause" to avoid the "[ PAUSE ]" hardware
|
|
37 / capability added by linker because Solaris/i386 does not know about it:
|
|
38 /
|
|
39 / ld.so.1: nginx: fatal: hardware capability unsupported: 0x2000 [ PAUSE ]
|
320
|
40
|
|
41 .inline ngx_cpu_pause,0
|
488
|
42 rep; nop
|
320
|
43 .end
|