aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/config/i386/i386.md22
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")))