diff options
author | Richard Henderson <rth@redhat.com> | 2004-01-02 16:40:31 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-01-02 16:40:31 -0800 |
commit | b87cfcfbe3f534de2736136b6f36d87b77f0b002 (patch) | |
tree | 76a1c3fc1b6573077a5660eb27b75a87d9a9b44a /gcc | |
parent | af4490a4c8d464573589426a96c205d833a40b59 (diff) | |
download | gcc-b87cfcfbe3f534de2736136b6f36d87b77f0b002.zip gcc-b87cfcfbe3f534de2736136b6f36d87b77f0b002.tar.gz gcc-b87cfcfbe3f534de2736136b6f36d87b77f0b002.tar.bz2 |
i386.md (fp constant pool splitter): Reorg suppression for sse and 387; add suppression for mmx.
* config/i386/i386.md (fp constant pool splitter): Reorg suppression
for sse and 387; add suppression for mmx.
From-SVN: r75349
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 38 |
2 files changed, 30 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 96b16ce..41db1be 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-01-02 Richard Henderson <rth@redhat.com> + + * config/i386/i386.md (fp constant pool splitter): Reorg suppression + for sse and 387; add suppression for mmx. + 2004-01-02 Andrew Pinski <pinskia@physics.uc.edu> * loop.c (loop_optimize): Free all loops_info's mems. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index a004c32..75fd86a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1,6 +1,6 @@ ;; GCC machine description for IA-32 and x86-64. ;; Copyright (C) 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -;; 2001, 2002, 2003 +;; 2001, 2002, 2003, 2004 ;; Free Software Foundation, Inc. ;; Mostly by William Schelter. ;; x86_64 support added by Jan Hubicka @@ -2880,18 +2880,30 @@ && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == SFmode || GET_MODE (operands[0]) == DFmode) && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF - && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)) - && (!(SSE_REG_P (operands[0]) || - (GET_CODE (operands[0]) == SUBREG - && SSE_REG_P (SUBREG_REG (operands[0])))) - || standard_sse_constant_p (get_pool_constant (XEXP (operands[1], 0)))) - && (!(FP_REG_P (operands[0]) || - (GET_CODE (operands[0]) == SUBREG - && FP_REG_P (SUBREG_REG (operands[0])))) - || standard_80387_constant_p (get_pool_constant (XEXP (operands[1], 0))))" - [(set (match_dup 0) - (match_dup 1))] - "operands[1] = get_pool_constant (XEXP (operands[1], 0));") + && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0))" + [(set (match_dup 0) (match_dup 1))] +{ + rtx c = get_pool_constant (XEXP (operands[1], 0)); + rtx r = operands[0]; + + if (GET_CODE (r) == SUBREG) + r = SUBREG_REG (r); + + if (SSE_REG_P (r)) + { + if (!standard_sse_constant_p (c)) + FAIL; + } + else if (FP_REG_P (r)) + { + if (!standard_80387_constant_p (c)) + FAIL; + } + else if (MMX_REG_P (r)) + FAIL; + + operands[1] = c; +}) (define_insn "swapxf" [(set (match_operand:XF 0 "register_operand" "+f") |