2011-05-04 Stuart Henderson <shenders@gcc.gnu.org>
authorStuart Henderson <shenders@gcc.gnu.org>
Wed, 4 May 2011 11:14:54 +0000 (11:14 +0000)
committerStuart Henderson <shenders@gcc.gnu.org>
Wed, 4 May 2011 11:14:54 +0000 (11:14 +0000)
        From Bernd Schmidt
        * config/bfin/bfin.md (addsi3): Add an alternative for IREGS.

From-SVN: r173368

gcc/ChangeLog
gcc/config/bfin/bfin.md

index 287615ec1c34e9e67362f1aa5ba07adacfd16c06..cd2b35a6fd18314f7bd4fe0b56e7c45703cf70f4 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-04  Stuart Henderson  <shenders@gcc.gnu.org>
+
+       From Bernd Schmidt
+       * config/bfin/bfin.md (addsi3): Add an alternative for IREGS.
+
 2011-05-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * config/alpha/alpha.h (CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB)
index c4722d4b132b60db542c4e29dfd8a4bb7c902eca..903c8bb076f29a7920aaf90657d15b02c9946a90 100644 (file)
   "%0 = %h2 * %h1 (IS,M)%!"
   [(set_attr "type" "dsp32")])
 
-;; The processor also supports ireg += mreg or ireg -= mreg, but these
-;; are unusable if we don't ensure that the corresponding lreg is zero.
-;; The same applies to the add/subtract constant versions involving
-;; iregs
+;; The alternative involving IREGS requires that the corresponding L register
+;; is zero.
 
 (define_insn "addsi3"
-  [(set (match_operand:SI 0 "register_operand" "=ad,a,d")
-       (plus:SI (match_operand:SI 1 "register_operand" "%0, a,d")
-                (match_operand:SI 2 "reg_or_7bit_operand" "Ks7, a,d")))]
+  [(set (match_operand:SI 0 "register_operand" "=ad,a,d,b")
+       (plus:SI (match_operand:SI 1 "register_operand" "%0, a,d,0")
+                (match_operand:SI 2 "reg_or_7bit_operand" "Ks7, a,d,fP2P4")))]
   ""
   "@
    %0 += %2;
    %0 = %1 + %2;
-   %0 = %1 + %2;"
+   %0 = %1 + %2;
+   %0 += %2;"
   [(set_attr "type" "alu0")
-   (set_attr "length" "2,2,2")])
+   (set_attr "length" "2,2,2,2")])
 
 (define_insn "ssaddsi3"
   [(set (match_operand:SI 0 "register_operand" "=d")