Mercurial > hg > nginx
comparison src/os/unix/ngx_gcc_atomic_x86.h @ 589:d4e858a5751a release-0.3.16
nginx-0.3.16-RELEASE import
*) Feature: the ngx_http_map_module.
*) Feature: the "types_hash_max_size" and "types_hash_bucket_size"
directives.
*) Feature: the "ssi_value_length" directive.
*) Feature: the "worker_rlimit_core" directive.
*) Workaround: the connection number in logs was always 1 if nginx was
built by the icc 8.1 or 9.0 compilers with optimization for
Pentium 4.
*) Bugfix: the "config timefmt" SSI command set incorrect time format.
*) Bugfix: nginx did not close connection to IMAP/POP3 backend for the
SSL connections; the bug had appeared in 0.3.13.
Thanks to Rob Mueller.
*) Bugfix: segmentation fault may occurred in at SSL shutdown; the bug
had appeared in 0.3.13.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 16 Dec 2005 15:07:08 +0000 |
parents | 4d9ea73a627a |
children | 3f8a2132b93d |
comparison
equal
deleted
inserted
replaced
588:0a2c30f516e6 | 589:d4e858a5751a |
---|---|
59 * The "+q" is any of the %eax, %ebx, %ecx, or %edx registers. | 59 * The "+q" is any of the %eax, %ebx, %ecx, or %edx registers. |
60 * The "cc" means that flags were changed. | 60 * The "cc" means that flags were changed. |
61 */ | 61 */ |
62 | 62 |
63 | 63 |
64 #if !(__GNUC__ == 2 && __GNUC_MINOR__ <= 7) | 64 #if !(( __GNUC__ == 2 && __GNUC_MINOR__ <= 7 ) || ( __INTEL_COMPILER >= 800 )) |
65 | |
66 /* | |
67 * icc 8.1 and 9.0 compile broken code with -march=pentium4 option: | |
68 * ngx_atomic_fetch_add() always return the input "add" value, | |
69 * so we use the gcc 2.7 version. | |
70 * | |
71 * icc 8.1 and 9.0 with -march=pentiumpro option or icc 7.1 compile | |
72 * correct code. | |
73 */ | |
65 | 74 |
66 static ngx_inline ngx_atomic_int_t | 75 static ngx_inline ngx_atomic_int_t |
67 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add) | 76 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add) |
68 { | 77 { |
69 __asm__ volatile ( | 78 __asm__ volatile ( |
75 | 84 |
76 return add; | 85 return add; |
77 } | 86 } |
78 | 87 |
79 | 88 |
80 #else /* (__GNUC__ == 2 && __GNUC_MINOR__ <= 7) */ | 89 #else |
81 | 90 |
82 /* | 91 /* |
83 * gcc 2.7 does not support "+q", so we have to use the fixed %eax ("=a" and | 92 * gcc 2.7 does not support "+q", so we have to use the fixed %eax ("=a" and |
84 * "a") and this adds two superfluous instructions in the end of code, | 93 * "a") and this adds two superfluous instructions in the end of code, |
85 * something like this: "mov %eax, %edx / mov %edx, %eax". | 94 * something like this: "mov %eax, %edx / mov %edx, %eax". |