diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 22 |
3 files changed, 23 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e62675..ca7070e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Wed Mar 15 13:26:58 MET 2000 Jan Hubicka <jh@suse.cz> + + * i386.md (movhi_1): Promote movw imm, reg to movl imm, reg and + movw reg, reg to movzwl reg, reg on PARTIAL_REGISTER_STALL machines. + * i386.c (pentiumpro_cost): Set mul cost to 4. + (x86_use_movx): Set for PPro. + Wed Mar 15 13:07:05 MET 2000 Jan Hubicka <jh@suse.cz> * i386.md (ix86_compute_frame_size): stack_alignment_needed is diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e3038fd..c2eadf1 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -124,7 +124,7 @@ struct processor_costs pentiumpro_cost = { 1, /* cost of a lea instruction */ 1, /* variable shift costs */ 1, /* constant shift costs */ - 1, /* cost of starting a multiply */ + 4, /* cost of starting a multiply */ 0, /* cost of multiply per each bit set */ 17, /* cost of a divide/mod */ 8, /* "large" insn */ @@ -195,7 +195,7 @@ struct processor_costs *ix86_cost = &pentium_cost; const int x86_use_leave = m_386 | m_K6 | m_ATHLON; const int x86_push_memory = m_386 | m_K6 | m_ATHLON; const int x86_zero_extend_with_and = m_486 | m_PENT; -const int x86_movx = m_ATHLON /* m_386 | m_PPRO | m_K6 */; +const int x86_movx = m_ATHLON | m_PPRO /* m_386 | m_K6 */; const int x86_double_with_add = ~m_386; const int x86_use_bit_test = m_386; const int x86_unroll_strlen = m_486 | m_PENT | m_PPRO | m_ATHLON | m_K6; diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index be2b035..9254739 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1379,8 +1379,8 @@ [(set_attr "type" "pop")]) (define_insn "*movhi_1" - [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m") - (match_operand:HI 1 "general_operand" "rn,rm,rn"))] + [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,m") + (match_operand:HI 1 "general_operand" "r,rn,rm,rn"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* { @@ -1398,22 +1398,28 @@ } }" [(set (attr "type") - (cond [(and (eq_attr "alternative" "0,1") + (cond [(and (eq_attr "alternative" "0") + (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") + (const_int 0))) + (const_string "imov") + (and (eq_attr "alternative" "1,2") (match_operand:HI 1 "aligned_operand" "")) (const_string "imov") (and (ne (symbol_ref "TARGET_MOVX") (const_int 0)) - (eq_attr "alternative" "1")) + (eq_attr "alternative" "0,2")) (const_string "imovx") ] (const_string "imov"))) (set (attr "length_prefix") (cond [(eq_attr "type" "imovx") (const_string "0") - (and (eq_attr "alternative" "0,1") - (and (match_operand:HI 1 "aligned_operand" "") - (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") - (const_int 0)))) + (and (eq_attr "alternative" "1,2") + (match_operand:HI 1 "aligned_operand" "")) + (const_string "0") + (and (eq_attr "alternative" "0") + (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") + (const_int 0))) (const_string "0") ] (const_string "1"))) |