Mercurial > hg > nginx-quic
annotate src/os/unix/ngx_atomic.h @ 1992:ee49a83b6de2 stable-0.5
r1886 merge:
test response length in proxy/fastcgi_store
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 04 May 2008 10:04:21 +0000 |
parents | b766d9c0a2be |
children |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
435
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
435
diff
changeset
|
2 /* |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
3 * Copyright (C) Igor Sysoev |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
435
diff
changeset
|
4 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
435
diff
changeset
|
5 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
435
diff
changeset
|
6 |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 #ifndef _NGX_ATOMIC_H_INCLUDED_ |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #define _NGX_ATOMIC_H_INCLUDED_ |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
9 |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
10 |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 #include <ngx_config.h> |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 #include <ngx_core.h> |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
13 |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
14 |
940 | 15 #if (NGX_DARWIN_ATOMIC) |
939
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
16 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
17 /* |
940 | 18 * use Darwin 8 atomic(3) and barrier(3) operations |
19 * optimized at run-time for UP and SMP | |
939
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
20 */ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
21 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
22 #include <libkern/OSAtomic.h> |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
23 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
24 /* "bool" conflicts with perl's CORE/handy.h |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
25 * "true" and "false" conflict with nginx, and of course we can rename them, |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
26 * but we need to undef "bool" anyway |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
27 */ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
28 #undef bool |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
29 #undef true |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
30 #undef false |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
31 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
32 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
33 #define NGX_HAVE_ATOMIC_OPS 1 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
34 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
35 #if (NGX_PTR_SIZE == 8) |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
36 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
37 typedef int64_t ngx_atomic_int_t; |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
38 typedef uint64_t ngx_atomic_uint_t; |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
39 #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
40 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
41 #define ngx_atomic_cmp_set(lock, old, new) \ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
42 OSAtomicCompareAndSwap64Barrier(old, new, (int64_t *) lock) |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
43 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
44 #define ngx_atomic_fetch_add(value, add) \ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
45 (OSAtomicAdd64(add, (int64_t *) value) - add) |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
46 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
47 #else |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
48 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
49 typedef int32_t ngx_atomic_int_t; |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
50 typedef uint32_t ngx_atomic_uint_t; |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
51 #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
52 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
53 #define ngx_atomic_cmp_set(lock, old, new) \ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
54 OSAtomicCompareAndSwap32Barrier(old, new, (int32_t *) lock) |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
55 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
56 #define ngx_atomic_fetch_add(value, add) \ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
57 (OSAtomicAdd32(add, (int32_t *) value) - add) |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
58 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
59 #endif |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
60 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
61 #define ngx_memory_barrier() OSMemoryBarrier() |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
62 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
63 #define ngx_cpu_pause() |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
64 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
65 typedef volatile ngx_atomic_uint_t ngx_atomic_t; |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
66 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
67 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
68 #else /* !(NGX_DARWIN) */ |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
69 |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
70 |
547 | 71 #if ( __i386__ || __i386 ) |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
72 |
561 | 73 typedef int32_t ngx_atomic_int_t; |
74 typedef uint32_t ngx_atomic_uint_t; | |
495 | 75 typedef volatile ngx_atomic_uint_t ngx_atomic_t; |
561 | 76 #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 |
493 | 77 |
78 | |
561 | 79 #if ( __SUNPRO_C ) |
493 | 80 |
561 | 81 #define NGX_HAVE_ATOMIC_OPS 1 |
493 | 82 |
561 | 83 ngx_atomic_uint_t |
84 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, | |
85 ngx_atomic_uint_t set); | |
493 | 86 |
561 | 87 ngx_atomic_int_t |
88 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add); | |
493 | 89 |
1327
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
90 /* |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
91 * Sun Studio 12 exits with segmentation fault on '__asm ("pause")', |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
92 * so ngx_cpu_pause is declared in src/os/unix/ngx_sunpro_x86.il |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
93 */ |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
94 |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
95 void |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
96 ngx_cpu_pause(void); |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
97 |
561 | 98 /* the code in src/os/unix/ngx_sunpro_x86.il */ |
493 | 99 |
563 | 100 #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile") |
101 | |
493 | 102 |
561 | 103 #else /* ( __GNUC__ || __INTEL_COMPILER ) */ |
104 | |
105 #define NGX_HAVE_ATOMIC_OPS 1 | |
493 | 106 |
561 | 107 #include "ngx_gcc_atomic_x86.h" |
493 | 108 |
561 | 109 #endif |
493 | 110 |
111 | |
547 | 112 #elif ( __amd64__ || __amd64 ) |
493 | 113 |
561 | 114 typedef int64_t ngx_atomic_int_t; |
115 typedef uint64_t ngx_atomic_uint_t; | |
495 | 116 typedef volatile ngx_atomic_uint_t ngx_atomic_t; |
561 | 117 #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
118 |
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
119 |
561 | 120 #if ( __SUNPRO_C ) |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
121 |
561 | 122 #define NGX_HAVE_ATOMIC_OPS 1 |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
123 |
561 | 124 ngx_atomic_uint_t |
125 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, | |
126 ngx_atomic_uint_t set); | |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
127 |
561 | 128 ngx_atomic_int_t |
129 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add); | |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
130 |
1327
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
131 /* |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
132 * Sun Studio 12 exits with segmentation fault on '__asm ("pause")', |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
133 * so ngx_cpu_pause is declared in src/os/unix/ngx_sunpro_amd64.il |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
134 */ |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
135 |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
136 void |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
137 ngx_cpu_pause(void); |
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
138 |
561 | 139 /* the code in src/os/unix/ngx_sunpro_amd64.il */ |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
140 |
563 | 141 #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile") |
142 | |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
143 |
561 | 144 #else /* ( __GNUC__ || __INTEL_COMPILER ) */ |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
145 |
561 | 146 #define NGX_HAVE_ATOMIC_OPS 1 |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
147 |
561 | 148 #include "ngx_gcc_atomic_amd64.h" |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
149 |
561 | 150 #endif |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
151 |
301
744965ec6275
nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents:
300
diff
changeset
|
152 |
1327
b766d9c0a2be
r1306, r1307, r1308, r1309, r1310, r1311, r1322, r1325 merge:
Igor Sysoev <igor@sysoev.ru>
parents:
940
diff
changeset
|
153 #elif ( __sparc__ || __sparc || __sparcv9 ) |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
154 |
561 | 155 #if (NGX_PTR_SIZE == 8) |
156 | |
157 typedef int64_t ngx_atomic_int_t; | |
158 typedef uint64_t ngx_atomic_uint_t; | |
159 #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 | |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
160 |
493 | 161 #else |
561 | 162 |
163 typedef int32_t ngx_atomic_int_t; | |
164 typedef uint32_t ngx_atomic_uint_t; | |
165 #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 | |
166 | |
493 | 167 #endif |
168 | |
495 | 169 typedef volatile ngx_atomic_uint_t ngx_atomic_t; |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
170 |
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
171 |
561 | 172 #if ( __SUNPRO_C ) |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
173 |
561 | 174 #define NGX_HAVE_ATOMIC_OPS 1 |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
175 |
561 | 176 #include "ngx_sunpro_atomic_sparc64.h" |
493 | 177 |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
178 |
561 | 179 #else /* ( __GNUC__ || __INTEL_COMPILER ) */ |
493 | 180 |
561 | 181 #define NGX_HAVE_ATOMIC_OPS 1 |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
182 |
561 | 183 #include "ngx_gcc_atomic_sparc64.h" |
425
bd39260a1383
nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
373
diff
changeset
|
184 |
561 | 185 #endif |
493 | 186 |
187 | |
613 | 188 #elif ( __powerpc__ || __POWERPC__ ) |
493 | 189 |
190 #define NGX_HAVE_ATOMIC_OPS 1 | |
191 | |
192 #if (NGX_PTR_SIZE == 8) | |
561 | 193 |
194 typedef int64_t ngx_atomic_int_t; | |
195 typedef uint64_t ngx_atomic_uint_t; | |
196 #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 | |
197 | |
493 | 198 #else |
561 | 199 |
200 typedef int32_t ngx_atomic_int_t; | |
201 typedef uint32_t ngx_atomic_uint_t; | |
202 #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 | |
203 | |
493 | 204 #endif |
205 | |
495 | 206 typedef volatile ngx_atomic_uint_t ngx_atomic_t; |
493 | 207 |
208 | |
561 | 209 #include "ngx_gcc_atomic_ppc.h" |
493 | 210 |
211 | |
561 | 212 #endif |
493 | 213 |
939
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
214 #endif |
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
215 |
493 | 216 |
561 | 217 #if !(NGX_HAVE_ATOMIC_OPS) |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
218 |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
219 #define NGX_HAVE_ATOMIC_OPS 0 |
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
220 |
561 | 221 typedef int32_t ngx_atomic_int_t; |
222 typedef uint32_t ngx_atomic_uint_t; | |
495 | 223 typedef volatile ngx_atomic_uint_t ngx_atomic_t; |
561 | 224 #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
225 |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
226 |
495 | 227 static ngx_inline ngx_atomic_uint_t |
228 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, | |
229 ngx_atomic_uint_t set) | |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
230 { |
571 | 231 if (*lock == old) { |
561 | 232 *lock = set; |
233 return 1; | |
234 } | |
235 | |
236 return 0; | |
237 } | |
238 | |
239 | |
240 static ngx_inline ngx_atomic_int_t | |
241 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add) | |
242 { | |
243 ngx_atomic_int_t old; | |
244 | |
245 old = *value; | |
246 *value += add; | |
247 | |
248 return old; | |
435
5cdc4838d4e8
nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
249 } |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
250 |
571 | 251 #define ngx_memory_barrier() |
611 | 252 #define ngx_cpu_pause() |
571 | 253 |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
254 #endif |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
255 |
939
782cf4c13b8d
use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents:
613
diff
changeset
|
256 |
611 | 257 void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin); |
373
018569a8f09c
nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
371
diff
changeset
|
258 |
371
780e93985b93
nginx-0.0.7-2004-06-28-20:05:02 import
Igor Sysoev <igor@sysoev.ru>
parents:
370
diff
changeset
|
259 #define ngx_trylock(lock) (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1)) |
780e93985b93
nginx-0.0.7-2004-06-28-20:05:02 import
Igor Sysoev <igor@sysoev.ru>
parents:
370
diff
changeset
|
260 #define ngx_unlock(lock) *(lock) = 0 |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
302
diff
changeset
|
261 |
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
302
diff
changeset
|
262 |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
263 #endif /* _NGX_ATOMIC_H_INCLUDED_ */ |