# HG changeset patch # User Igor Sysoev # Date 1184576044 0 # Node ID 08c6ee7a1b11e8f2a1f5f5b961bb39e5dc5ae181 # Parent 63fa39cf8bd0a3434cdacdb4b10fcfe8b93a98e1 Sun Studio 12 compatibility diff --git a/auto/cc/sunc b/auto/cc/sunc --- a/auto/cc/sunc +++ b/auto/cc/sunc @@ -2,8 +2,10 @@ # Copyright (C) Igor Sysoev -# Sun C 5.7 Patch 117837-04 2005/05/11 -# Sun C 5.8 2005/10/13 +# Sun C 5.7 Patch 117837-04 2005/05/11 Sun Studio 10 +# Sun C 5.8 2005/10/13 Sun Studio 11 +# Sun C 5.9 SunOS_i386 2007/05/03 Sun Studio 12 +# Sun C 5.9 SunOS_sparc 2007/05/03 NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \ | sed -e 's/^.* Sun C \(.*\)/\1/'` @@ -13,6 +15,33 @@ echo " + Sun C version: $NGX_SUNC_VER" have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define +cat << END > $NGX_AUTOTEST.c + +int main() { printf("%d", __SUNPRO_C); } + +END + +eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1" + +if [ -x $NGX_AUTOTEST ]; then + ngx_sunc_ver=`$NGX_AUTOTEST` +fi + +rm $NGX_AUTOTEST* + +# 1424 == 0x590, Sun Studio 12 + +if [ "$ngx_sunc_ver" -ge 1424 ]; then + ngx_sparc32="-m32" + ngx_sparc64="-m64" + ngx_amd64="-m64" + +else + ngx_sparc32="-xarch=v8plus" + ngx_sparc64="-xarch=v9" + ngx_amd64="-amd64" +fi + case "$NGX_MACHINE" in i86pc) @@ -43,7 +72,8 @@ esac # optimizations -CFLAGS="$CFLAGS -fast" +IPO=-xipo +CFLAGS="$CFLAGS -fast $IPO" case $CPU in @@ -80,25 +110,27 @@ case $CPU in sparc32) # build 32-bit UltraSparc binary - CPU_OPT="-m32" - CORE_LINK="$CORE_LINK -m32" - CC_AUX_FLAGS="$CC_AUX_FLAGS -m32" + CPU_OPT="$ngx_sparc32" + CORE_LINK="$CORE_LINK $ngx_sparc32" + CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_sparc32" NGX_CPU_CACHE_LINE=64 ;; sparc64) # build 64-bit UltraSparc binary - CPU_OPT="-m64" - CORE_LINK="$CORE_LINK -m64" - CC_AUX_FLAGS="$CC_AUX_FLAGS -m64" + CPU_OPT="$ngx_sparc64" + CORE_LINK="$CORE_LINK $ngx_sparc64" + CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_sparc64" NGX_CPU_CACHE_LINE=64 ;; amd64) # build 64-bit amd64 binary - CPU_OPT="-xarch=amd64" - CORE_LINK="$CORE_LINK -xarch=amd64" + CPU_OPT="$ngx_amd64" + CORE_LINK="$CORE_LINK $ngx_amd64" + CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_amd4" NGX_AUX=" src/os/unix/ngx_sunpro_amd64.il" + NGX_CPU_CACHE_LINE=64 ;; esac @@ -108,15 +140,15 @@ CFLAGS="$CFLAGS $CPU_OPT" if [ ".$PCRE_OPT" = "." ]; then - PCRE_OPT="-fast $CPU_OPT" + PCRE_OPT="-fast $IPO $CPU_OPT" fi if [ ".$MD5_OPT" = "." ]; then - MD5_OPT="-fast $CPU_OPT" + MD5_OPT="-fast $IPO $CPU_OPT" fi if [ ".$ZLIB_OPT" = "." ]; then - ZLIB_OPT="-fast $CPU_OPT" + ZLIB_OPT="-fast $IPO $CPU_OPT" fi diff --git a/src/os/unix/ngx_atomic.h b/src/os/unix/ngx_atomic.h --- a/src/os/unix/ngx_atomic.h +++ b/src/os/unix/ngx_atomic.h @@ -87,10 +87,17 @@ ngx_atomic_cmp_set(ngx_atomic_t *lock, n ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add); +/* + * Sun Studio 12 exits with segmentation fault on '__asm ("pause")', + * so ngx_cpu_pause is declared in src/os/unix/ngx_sunpro_x86.il + */ + +void +ngx_cpu_pause(void); + /* the code in src/os/unix/ngx_sunpro_x86.il */ #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile") -#define ngx_cpu_pause() __asm ("pause") #else /* ( __GNUC__ || __INTEL_COMPILER ) */ @@ -121,10 +128,17 @@ ngx_atomic_cmp_set(ngx_atomic_t *lock, n ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add); +/* + * Sun Studio 12 exits with segmentation fault on '__asm ("pause")', + * so ngx_cpu_pause is declared in src/os/unix/ngx_sunpro_amd64.il + */ + +void +ngx_cpu_pause(void); + /* the code in src/os/unix/ngx_sunpro_amd64.il */ #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile") -#define ngx_cpu_pause() __asm ("pause") #else /* ( __GNUC__ || __INTEL_COMPILER ) */ diff --git a/src/os/unix/ngx_sunpro_amd64.il b/src/os/unix/ngx_sunpro_amd64.il --- a/src/os/unix/ngx_sunpro_amd64.il +++ b/src/os/unix/ngx_sunpro_amd64.il @@ -28,3 +28,10 @@ lock xaddq %rax, (%rdi) .end + + +/ ngx_cpu_pause() + + .inline ngx_cpu_pause,0 + pause + .end diff --git a/src/os/unix/ngx_sunpro_x86.il b/src/os/unix/ngx_sunpro_x86.il --- a/src/os/unix/ngx_sunpro_x86.il +++ b/src/os/unix/ngx_sunpro_x86.il @@ -29,3 +29,10 @@ lock xaddl %eax, (%ecx) .end + + +/ ngx_cpu_pause() + + .inline ngx_cpu_pause,0 + pause + .end