i386.md (*movtf_internal): Avoid allocating general registers.
authorUros Bizjak <uros@gcc.gnu.org>
Tue, 31 May 2011 16:14:08 +0000 (18:14 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 31 May 2011 16:14:08 +0000 (18:14 +0200)
commit6ba5d85618299fb84acfa86c7d18af5bcdd0375b
treeb3a5027345c52e6b5a3f04b335a61ad4c29558ad
parent533c07c594cef102741325e09a6580094fa32cba
i386.md (*movtf_internal): Avoid allocating general registers.

* config/i386/i386.md (*movtf_internal): Avoid allocating general
registers.  Penalize F*r->o alternative to prevent partial memory
stalls.  Slightly penalize *roF->*r alternative.  Generate SSE
CONST_DOUBLE immediates when optimizing function for size.  Do not move
CONST_DOUBLEs directly to memory for !TARGET_MEMORY_MISMATCH_STALL.
(*movxf_internal): Slightly penalize Yx*roF->Yx*r alternative.
(*movdf_internal): Slightly penalize Yd*roF->Yd*r alternative.
(*movdf_internal_rex64): Slightly penalize rm->r, F->m and r->m
alternatives.
(*movsf_internal): Slightly penalize rmF->r and Fr->m alternatives.

(fp_register_operand splitters): Use fp_register_operand
constraint.  Do not use FP_REG_P in insn condition.
(any_fp_register_operand splitters): Use any_fp_register_operand
constraint.  Do not use ANY_FP_REG_P in insn condition.

* config/i386/i386.md (*pushxf_nointeger): Merge alternatives 1 and 2.
(FP push_operand splitters): Merge {TF,XF,DF}mode splitters.

From-SVN: r174489
gcc/ChangeLog
gcc/config/i386/i386.md