i386.md (movhi_1): Promote movw imm...
authorJan Hubicka <jh@suse.cz>
Wed, 15 Mar 2000 12:34:40 +0000 (13:34 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 15 Mar 2000 12:34:40 +0000 (12:34 +0000)
* 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.

From-SVN: r32560

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index 5e62675589f75cb420236ec3732c473f49bd59ae..ca7070e609f2fc0058df4f34eb831cac8a7f823d 100644 (file)
@@ -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
index e3038fd4961831d16d64dd1e15efe5e818841441..c2eadf13bd228610367d57535c94fb87cfc0e01e 100644 (file)
@@ -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;
index be2b035b94de53a30ef97593ecd60a14042e024f..925473952ac99e2618013af5121e4653570a815a 100644 (file)
   [(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"
   "*
 {
     }
 }"
   [(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")))