* config/arm/arm.md (mulsidi3adddi, umulsidi3adddi): New patterns
authorcpopetz <cpopetz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 1999 14:48:18 +0000 (14:48 +0000)
committercpopetz <cpopetz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 1999 14:48:18 +0000 (14:48 +0000)
for long long multiply-accumulate.

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

gcc/ChangeLog
gcc/config/arm/arm.md

index 62f0734..da2ec92 100644 (file)
@@ -1,3 +1,8 @@
+Tue Dec 14 08:37:27 CST 1999 Clinton Popetz  <cpopetz@cygnus.com>
+
+       * config/arm/arm.md (mulsidi3adddi, umulsidi3adddi): New patterns
+       for long long multiply-accumulate.
+
 Tue Dec 14 13:51:38 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>
 
        * regclass.c (scan_one_insn): Set loop_cost to 1 when
index 91795c2..6d760d5 100644 (file)
 [(set_attr "conds" "set")
  (set_attr "type" "mult")])
 
+;; Unnamed template to match long long multiply-accumlate (smlal)
+
+(define_insn "*mulsidi3adddi"
+  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r")
+       (plus:DI
+         (mult:DI (sign_extend:DI
+                   (match_operand:SI 2 "s_register_operand" "r,0,1"))
+                  (sign_extend:DI
+                   (match_operand:SI 1 "s_register_operand" "%r,r,r")))
+         (match_dup 0)))]
+  "arm_fast_multiply"
+  "smlal%?\\t%Q0, %R0, %1, %2"
+[(set_attr "type" "mult")])
+
 (define_insn "mulsidi3"
   [(set (match_operand:DI 0 "s_register_operand" "=&r")
       (mult:DI (sign_extend:DI
   "umull%?\\t%Q0, %R0, %1, %2"
 [(set_attr "type" "mult")])
 
+;; Unnamed template to match long long unsigned multiply-accumlate (umlal)
+
+(define_insn "*umulsidi3adddi"
+  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r")
+       (plus:DI
+         (mult:DI (zero_extend:DI
+                   (match_operand:SI 2 "s_register_operand" "r,0,1"))
+                  (zero_extend:DI
+                   (match_operand:SI 1 "s_register_operand" "%r,r,r")))
+         (match_dup 0)))]
+  "arm_fast_multiply"
+  "umlal%?\\t%Q0, %R0, %1, %2"
+[(set_attr "type" "mult")])
+
 (define_insn "smulsi3_highpart"
   [(set (match_operand:SI 0 "s_register_operand" "=&r,&r")
        (truncate:SI