rs6000.h (MAX_FIXED_MODE_SIZE): Define.
authorDavid Edelsohn <edelsohn@gnu.org>
Wed, 11 Aug 2004 19:18:14 +0000 (19:18 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Wed, 11 Aug 2004 19:18:14 +0000 (15:18 -0400)
        * config/rs6000/rs6000.h (MAX_FIXED_MODE_SIZE): Define.

        * config/rs6000/rs6000.md (mfcr rlwinm patterns): Set length to 8.
        (mfcr rlwinm rlwinm patterns): Set length to 12.

From-SVN: r85808

gcc/ChangeLog
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md

index a67eae2769a0ec2f5e60fd65dee683dc769d60f2..3509bba6af5db17c659be7500e7165fdfc545d8d 100644 (file)
@@ -1,3 +1,10 @@
+2004-08-11 David Edelsohn  <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.h (MAX_FIXED_MODE_SIZE): Define.
+
+       * config/rs6000/rs6000.md (mfcr rlwinm patterns): Set length to 8.
+       (mfcr rlwinm rlwinm patterns): Set length to 12.
+
 2004-08-11  Andrew MacLeod  <amacleod@redhat.com>
 
        * tree-flow-inline.h (get_def_ops, get_use_ops, get_v_may_def_ops,
index f69b10cc3c010a37be70b30c6aa91513bd570ec5..4b7db3a390ee47fe091ec5b3eedb5a24f015b642 100644 (file)
@@ -2103,6 +2103,12 @@ do {                                                             \
 
 /* #define FIXUNS_TRUNC_LIKE_FIX_TRUNC */
 
+/* An integer expression for the size in bits of the largest integer machine
+   mode that should actually be used.  */
+
+/* Allow pairs of registers to be used, which is the intent of the default.  */
+#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_POWERPC64 ? TImode : DImode)
+
 /* Max number of bytes we can move from memory to memory
    in one reasonably fast instruction.  */
 #define MOVE_MAX (! TARGET_POWERPC64 ? 4 : 8)
index aef44d53e4a8553aed731829b9936ea9cd7b3f49..8cd7063b8cf8ff411e206b801714c5c86593d076 100644 (file)
                (const_string "mfcrf")
           ]
        (const_string "mfcr")))
-   (set_attr "length" "12")])
+   (set_attr "length" "8")])
 
 ;; Same as above, but get the GT bit.
 (define_insn "move_from_CR_eq_bit"
   "TARGET_E500"
   "mfcr %0\;{rlinm|rlwinm} %0,%0,%D1,1"
   [(set_attr "type" "mfcr")
-   (set_attr "length" "12")])
+   (set_attr "length" "8")])
 
 ;; Same as above, but get the OV/ORDERED bit.
 (define_insn "move_from_CR_ov_bit"
   "TARGET_ISEL"
   "mfcr %0\;{rlinm|rlwinm} %0,%0,%t1,1"
   [(set_attr "type" "mfcr")
-   (set_attr "length" "12")])
+   (set_attr "length" "8")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
                (const_string "mfcrf")
           ]
        (const_string "mfcr")))
-   (set_attr "length" "12")])
+   (set_attr "length" "8")])
 
 (define_insn ""
   [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
    mfcr %3%Q2\;{rlinm.|rlwinm.} %3,%3,%J1,1
    #"
   [(set_attr "type" "delayed_compare")
-   (set_attr "length" "12,16")])
+   (set_attr "length" "8,16")])
 
 (define_split
   [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
                (const_string "mfcrf")
           ]
        (const_string "mfcr")))
-   (set_attr "length" "12")])
+   (set_attr "length" "8")])
 
 (define_insn ""
   [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
   return \"mfcr %4%Q2\;{rlinm.|rlwinm.} %4,%4,%5,%6,%6\";
 }"
   [(set_attr "type" "delayed_compare")
-   (set_attr "length" "12,16")])
+   (set_attr "length" "8,16")])
 
 (define_split
   [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
   "REGNO (operands[2]) != REGNO (operands[5])"
   "mfcr %3\;{rlinm|rlwinm} %0,%3,%J1,1\;{rlinm|rlwinm} %3,%3,%J4,1"
   [(set_attr "type" "mfcr")
-   (set_attr "length" "20")])
+   (set_attr "length" "12")])
 
 (define_peephole
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
   "TARGET_POWERPC64 && REGNO (operands[2]) != REGNO (operands[5])"
   "mfcr %3\;{rlinm|rlwinm} %0,%3,%J1,1\;{rlinm|rlwinm} %3,%3,%J4,1"
   [(set_attr "type" "mfcr")
-   (set_attr "length" "20")])
+   (set_attr "length" "12")])
 
 ;; There are some scc insns that can be done directly, without a compare.
 ;; These are faster because they don't involve the communications between