PR target/28753
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Aug 2006 13:53:39 +0000 (13:53 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Aug 2006 13:53:39 +0000 (13:53 +0000)
        * config/rs6000/rs6000.md (movcc_internal1): Change operand 1
        predicate to general_operand.  Add 0->y and I->r alternatives.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116400 138bc75d-0d04-0410-961f-82ee72b054a4

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

index e5f5ff7..fcb447c 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-25  David Edelsohn  <edelsohn@gnu.org>
+
+       PR target/28753
+       * config/rs6000/rs6000.md (movcc_internal1): Change operand 1
+       predicate to general_operand.  Add 0->y and I->r alternatives.
+
 2006-08-25  Kazu Hirata  <kazu@codesourcery.com>
 
        * doc/tm.texi: Fix a typo.
index 92590a7..db60b8e 100644 (file)
   "")
 
 (define_insn "*movcc_internal1"
-  [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,r,r,r,r,q,cl,r,m")
-       (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,h,r,r,m,r"))]
+  [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,y,r,r,r,r,r,q,cl,r,m")
+       (match_operand:CC 1 "general_operand" "y,r,r,O,x,y,r,I,h,r,r,m,r"))]
   "register_operand (operands[0], CCmode)
    || register_operand (operands[1], CCmode)"
   "@
    mcrf %0,%1
    mtcrf 128,%1
    {rlinm|rlwinm} %1,%1,%F0,0xffffffff\;mtcrf %R0,%1\;{rlinm|rlwinm} %1,%1,%f0,0xffffffff
+   crxor %0,%0,%0
    mfcr %0%Q1
    mfcr %0%Q1\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000
    mr %0,%1
+   {lil|li} %0,%1
    mf%1 %0
    mt%0 %1
    mt%0 %1
    {l%U1%X1|lwz%U1%X1} %0,%1
    {st%U0%U1|stw%U0%U1} %1,%0"
   [(set (attr "type")
-     (cond [(eq_attr "alternative" "0")
+     (cond [(eq_attr "alternative" "0,3")
                (const_string "cr_logical")
            (eq_attr "alternative" "1,2")
                (const_string "mtcr")
-           (eq_attr "alternative" "5,7")
+           (eq_attr "alternative" "6,7,9")
                (const_string "integer")
-           (eq_attr "alternative" "6")
-               (const_string "mfjmpr")
            (eq_attr "alternative" "8")
+               (const_string "mfjmpr")
+           (eq_attr "alternative" "10")
                (const_string "mtjmpr")
-           (eq_attr "alternative" "9")
+           (eq_attr "alternative" "11")
                (const_string "load")
-           (eq_attr "alternative" "10")
+           (eq_attr "alternative" "12")
                (const_string "store")
            (ne (symbol_ref "TARGET_MFCRF") (const_int 0))
                (const_string "mfcrf")
           ]
        (const_string "mfcr")))
-   (set_attr "length" "4,4,12,4,8,4,4,4,4,4,4")])
+   (set_attr "length" "4,4,12,4,4,8,4,4,4,4,4,4,4")])
 \f
 ;; For floating-point, we normally deal with the floating-point registers
 ;; unless -msoft-float is used.  The sole exception is that parameter passing