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