i386.c (x86_arch_always_fancy_math_387): New.

* config/i386/i386.c (x86_arch_always_fancy_math_387): New.
        (override_options): Disable NO_FANCY_MATH_387 if the arch allows.
        * config/i386/i386.h (x86_arch_always_fancy_math_387): New.
        * config/i386/i386.md (sqrtxf2, sqrtextendsfxf2, sinxf2): Fix
        conditional.
        * docs/invoke.texi: Update -mno-fancy-math-387 docs.

From-SVN: r51584
This commit is contained in:
Richard Henderson 2002-03-29 15:24:20 -08:00 committed by Richard Henderson
parent 4d6ac5424e
commit 30c99a84e0
7 changed files with 45 additions and 6 deletions

View file

@ -1,3 +1,12 @@
2002-03-29 Richard Henderson <rth@redhat.com>
* config/i386/i386.c (x86_arch_always_fancy_math_387): New.
(override_options): Disable NO_FANCY_MATH_387 if the arch allows.
* config/i386/i386.h (x86_arch_always_fancy_math_387): New.
* config/i386/i386.md (sqrtxf2, sqrtextendsfxf2, sinxf2): Fix
conditional.
* docs/invoke.texi: Update -mno-fancy-math-387 docs.
2002-03-29 Dale Johannesen <dalej@apple.com>
* loop.c (combine_movables): Do allow combination of pseudos.

View file

@ -393,6 +393,7 @@ const int x86_accumulate_outgoing_args = m_ATHLON | m_PENT4 | m_PPRO;
const int x86_prologue_using_move = m_ATHLON | m_PENT4 | m_PPRO;
const int x86_epilogue_using_move = m_ATHLON | m_PENT4 | m_PPRO;
const int x86_decompose_lea = m_PENT4;
const int x86_arch_always_fancy_math_387 = m_PENT|m_PPRO|m_ATHLON|m_PENT4;
/* In case the avreage insn count for single function invocation is
lower than this constant, emit fast (but longer) prologue and
@ -1118,6 +1119,11 @@ override_options ()
if (flag_unsafe_math_optimizations)
target_flags &= ~MASK_IEEE_FP;
/* If the architecture always has an FPU, turn off NO_FANCY_MATH_387,
since the insns won't need emulation. */
if (x86_arch_always_fancy_math_387 & (1 << ix86_arch))
target_flags &= ~MASK_NO_FANCY_MATH_387;
if (TARGET_64BIT)
{
if (TARGET_ALIGN_DOUBLE)

View file

@ -222,6 +222,7 @@ extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
extern const int x86_epilogue_using_move, x86_decompose_lea;
extern const int x86_arch_always_fancy_math_387;
extern int x86_prefetch_sse;
#define TARGET_USE_LEAVE (x86_use_leave & CPUMASK)

View file

@ -14701,7 +14701,7 @@
[(set (match_operand:XF 0 "register_operand" "=f")
(sqrt:XF (float_extend:XF
(match_operand:DF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387 && TARGET_NO_FANCY_MATH_387"
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387"
"fsqrt"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")
@ -14721,7 +14721,7 @@
[(set (match_operand:XF 0 "register_operand" "=f")
(sqrt:XF (float_extend:XF
(match_operand:SF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387 && TARGET_NO_FANCY_MATH_387"
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387"
"fsqrt"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")
@ -14768,7 +14768,7 @@
(define_insn "sinxf2"
[(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 1 "register_operand" "0")] 1))]
"!TARGET_64BIT && TARGET_80387 && TARGET_NO_FANCY_MATH_387
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387
&& flag_unsafe_math_optimizations"
"fsin"
[(set_attr "type" "fpspc")

View file

@ -7366,9 +7366,12 @@ in ordinary CPU registers instead.
@opindex mno-fancy-math-387
Some 387 emulators do not support the @code{sin}, @code{cos} and
@code{sqrt} instructions for the 387. Specify this option to avoid
generating those instructions. This option is the default on FreeBSD@.
As of revision 2.6.1, these instructions are not generated unless you
also use the @option{-funsafe-math-optimizations} switch.
generating those instructions. This option is the default on FreeBSD,
OpenBSD and NetBSD@. This option is overridden when @option{-march}
indicates that the target cpu will always have an FPU and so the
instruction will not need emulation. As of revision 2.6.1, these
instructions are not generated unless you also use the
@option{-funsafe-math-optimizations} switch.
@item -malign-double
@itemx -mno-align-double

View file

@ -0,0 +1,10 @@
/* Verify that -mno-fancy-math-387 works. */
/* { dg-do compile { target "i?86-*-*" } } */
/* { dg-options "-O -ffast-math -mfpmath=387 -mno-fancy-math-387" } */
/* { dg-final { scan-assembler "call\tsin" } } */
/* { dg-final { scan-assembler "call\tcos" } } */
/* { dg-final { scan-assembler "call\tsqrt" } } */
double f1(double x) { return __builtin_sin(x); }
double f2(double x) { return __builtin_cos(x); }
double f3(double x) { return __builtin_sqrt(x); }

View file

@ -0,0 +1,10 @@
/* Verify that -march overrides -mno-fancy-math-387. */
/* { dg-do compile { target "i?86-*-*" } } */
/* { dg-options "-O -ffast-math -mfpmath=387 -march=i686 -mno-fancy-math-387" } */
/* { dg-final { scan-assembler "fsin" } } */
/* { dg-final { scan-assembler "fcos" } } */
/* { dg-final { scan-assembler "fsqrt" } } */
double f1(double x) { return __builtin_sin(x); }
double f2(double x) { return __builtin_cos(x); }
double f3(double x) { return __builtin_sqrt(x); }