OSDN Git Service

* config/bfin/bfin.md (addpdi3, us_truncpdisi2): New patterns.
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 May 2007 13:17:51 +0000 (13:17 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 May 2007 13:17:51 +0000 (13:17 +0000)
(umulsi3_highpart): Use them.
* config/bfin/lib1funcs.asm (__umulsi3_highpart): Use unsigned move
for final accumulator to D regisster tranfser.

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

gcc/ChangeLog
gcc/config/bfin/bfin.md
gcc/config/bfin/lib1funcs.asm

index e39d94e..0d7c9dd 100644 (file)
@@ -1,3 +1,10 @@
+2007-05-03  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * config/bfin/bfin.md (addpdi3, us_truncpdisi2): New patterns.
+       (umulsi3_highpart): Use them.
+       * config/bfin/lib1funcs.asm (__umulsi3_highpart): Use unsigned move
+       for final accumulator to D regisster tranfser.
+
 2007-05-03  Dorit Nuzman  <dorit@il.ibm.com>
 
        PR tree-optimization/31699
index c7eb7d9..217c26d 100644 (file)
 
 ;; Accumulator addition
 
+(define_insn "addpdi3"
+  [(set (match_operand:PDI 0 "register_operand" "=A")
+        (ss_plus:PDI (match_operand:PDI 1 "register_operand" "%0")
+                    (match_operand:PDI 2 "nonmemory_operand" "B")))]
+  ""
+  "A0 += A1%!"
+  [(set_attr "type" "dsp32")])
+
 (define_insn "sum_of_accumulators"
   [(set (match_operand:SI 0 "register_operand" "=d")
        (ss_truncate:SI
   "%0 = (A0 += A1)%!"
   [(set_attr "type" "dsp32")])
 
+(define_insn "us_truncpdisi2"
+  [(set (match_operand:SI 0 "register_operand" "=D,W")
+       (us_truncate:SI (match_operand:PDI 1 "register_operand" "A,B")))]
+  ""
+  "%0 = %1 (FU)%!"
+  [(set_attr "type" "dsp32")])
+
 ;; Bit test instructions
 
 (define_insn "*not_bittst"
                                               const1_rtx, const0_rtx,
                                               a1reg, const0_rtx, GEN_INT (MACFLAG_FU)));
       emit_insn (gen_lshrpdi3 (a1reg, a1reg, GEN_INT (16)));
-      emit_insn (gen_sum_of_accumulators (operands[0], a0reg, a0reg, a1reg));
+      emit_insn (gen_addpdi3 (a0reg, a0reg, a1reg));
+      emit_insn (gen_us_truncpdisi2 (operands[0], a0reg));
     }
   else
     {
index fe4c3d5..c8d7fe8 100644 (file)
@@ -128,7 +128,8 @@ ___umulsi3_highpart:
        A0 = R1.H * R0.H, A1 += R1.L * R0.H (FU);
        A1 += R0.L * R1.H (FU);
        A1 = A1 >> 16;
-       R0 = (A0 += A1);
+       A0 += A1;
+       R0 = A0 (FU);
        RTS;
 #endif