From 5b4e745800ea05ed7e85f1337be053f91eb0b92c Mon Sep 17 00:00:00 2001 From: dje Date: Fri, 25 Aug 2006 13:53:39 +0000 Subject: [PATCH 1/1] PR target/28753 * 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 | 6 ++++++ gcc/config/rs6000/rs6000.md | 20 +++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5f5ff7f77a..fcb447c45b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-08-25 David Edelsohn + + 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 * doc/tm.texi: Fix a typo. diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 92590a70db5..db60b8ef944 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -7920,42 +7920,44 @@ "") (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")]) ;; For floating-point, we normally deal with the floating-point registers ;; unless -msoft-float is used. The sole exception is that parameter passing -- 2.11.0