Author: mark.dickinson Date: Sun Nov 15 14:12:43 2009 New Revision: 76300 Log: Issue #5792: Extend short float repr support to x86 platforms using suncc or icc. Modified: python/trunk/configure python/trunk/configure.in Modified: python/trunk/configure ============================================================================== --- python/trunk/configure (original) +++ python/trunk/configure Sun Nov 15 14:12:43 2009 @@ -23626,15 +23626,15 @@ # correctly-rounded string <-> double conversion functions from # Python/dtoa.c, which in turn require that the FPU uses 53-bit # rounding; this is a problem on x86, where the x87 FPU has a default -# rounding precision of 64 bits. For gcc/x86, we try to fix this by +# rounding precision of 64 bits. For gcc/x86, we can fix this by # using inline assembler to get and set the x87 FPU control word. -if test "$GCC" = yes && test -n "`$CC -dM -E - </dev/null | grep i386`" -then - # Check that it's okay to use gcc inline assembler to get and set - # x87 control word. It should be, but you never know... - { echo "$as_me:$LINENO: checking whether we can use gcc inline assembler to get and set x87 control word" >&5 + +# This inline assembler syntax may also work for suncc and icc, +# so we try it on all platforms. + +{ echo "$as_me:$LINENO: checking whether we can use gcc inline assembler to get and set x87 control word" >&5 echo $ECHO_N "checking whether we can use gcc inline assembler to get and set x87 control word... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -23645,9 +23645,9 @@ main () { - unsigned short cw; - __asm__ __volatile__ ("fnstcw %0" : "=m" (cw)); - __asm__ __volatile__ ("fldcw %0" : : "m" (cw)); + unsigned short cw; + __asm__ __volatile__ ("fnstcw %0" : "=m" (cw)); + __asm__ __volatile__ ("fldcw %0" : : "m" (cw)); ; return 0; @@ -23679,16 +23679,15 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { echo "$as_me:$LINENO: result: $have_gcc_asm_for_x87" >&5 +{ echo "$as_me:$LINENO: result: $have_gcc_asm_for_x87" >&5 echo "${ECHO_T}$have_gcc_asm_for_x87" >&6; } - if test "$have_gcc_asm_for_x87" = yes - then +if test "$have_gcc_asm_for_x87" = yes +then cat >>confdefs.h <<\_ACEOF #define HAVE_GCC_ASM_FOR_X87 1 _ACEOF - fi fi # Detect whether system arithmetic is subject to x87-style double Modified: python/trunk/configure.in ============================================================================== --- python/trunk/configure.in (original) +++ python/trunk/configure.in Sun Nov 15 14:12:43 2009 @@ -3320,25 +3320,24 @@ # correctly-rounded string <-> double conversion functions from # Python/dtoa.c, which in turn require that the FPU uses 53-bit # rounding; this is a problem on x86, where the x87 FPU has a default -# rounding precision of 64 bits. For gcc/x86, we try to fix this by +# rounding precision of 64 bits. For gcc/x86, we can fix this by # using inline assembler to get and set the x87 FPU control word. -if test "$GCC" = yes && test -n "`$CC -dM -E - </dev/null | grep i386`" + +# This inline assembler syntax may also work for suncc and icc, +# so we try it on all platforms. + +AC_MSG_CHECKING(whether we can use gcc inline assembler to get and set x87 control word) +AC_TRY_COMPILE([], [ + unsigned short cw; + __asm__ __volatile__ ("fnstcw %0" : "=m" (cw)); + __asm__ __volatile__ ("fldcw %0" : : "m" (cw)); +], +[have_gcc_asm_for_x87=yes], [have_gcc_asm_for_x87=no]) +AC_MSG_RESULT($have_gcc_asm_for_x87) +if test "$have_gcc_asm_for_x87" = yes then - # Check that it's okay to use gcc inline assembler to get and set - # x87 control word. It should be, but you never know... - AC_MSG_CHECKING(whether we can use gcc inline assembler to get and set x87 control word) - AC_TRY_COMPILE([], [ - unsigned short cw; - __asm__ __volatile__ ("fnstcw %0" : "=m" (cw)); - __asm__ __volatile__ ("fldcw %0" : : "m" (cw)); - ], - [have_gcc_asm_for_x87=yes], [have_gcc_asm_for_x87=no]) - AC_MSG_RESULT($have_gcc_asm_for_x87) - if test "$have_gcc_asm_for_x87" = yes - then - AC_DEFINE(HAVE_GCC_ASM_FOR_X87, 1, - [Define if we can use gcc inline assembler to get and set x87 control word]) - fi + AC_DEFINE(HAVE_GCC_ASM_FOR_X87, 1, + [Define if we can use gcc inline assembler to get and set x87 control word]) fi # Detect whether system arithmetic is subject to x87-style double
participants (1)
-
mark.dickinson