diff options
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/arm/arm.md | 28 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62f0734..da2ec92 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 91795c2..6d760d5 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -965,6 +965,20 @@ [(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 @@ -985,6 +999,20 @@ "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 |
