summaryrefslogtreecommitdiff
path: root/gcc/config/mips/4600.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/mips/4600.md')
-rw-r--r--gcc/config/mips/4600.md24
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/config/mips/4600.md b/gcc/config/mips/4600.md
index c645cbc5d82..fcdbf00d261 100644
--- a/gcc/config/mips/4600.md
+++ b/gcc/config/mips/4600.md
@@ -1,5 +1,5 @@
;; R4600 and R4650 pipeline description.
-;; Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2005, 2007, 2012 Free Software Foundation, Inc.
;;
;; This file is part of GCC.
@@ -24,16 +24,30 @@
;; We handle the R4600 and R4650 in much the same way. The only difference
;; is in the integer multiplication and division costs.
-(define_insn_reservation "r4600_imul" 10
+(define_insn_reservation "r4600_imul_si" 10
(and (eq_attr "cpu" "r4600")
- (eq_attr "type" "imul,imul3,imadd"))
+ (eq_attr "type" "imul,imul3,imadd")
+ (eq_attr "mode" "SI"))
"imuldiv*10")
-(define_insn_reservation "r4600_idiv" 42
+(define_insn_reservation "r4600_imul_di" 12
(and (eq_attr "cpu" "r4600")
- (eq_attr "type" "idiv"))
+ (eq_attr "type" "imul,imul3,imadd")
+ (eq_attr "mode" "DI"))
+ "imuldiv*12")
+
+(define_insn_reservation "r4600_idiv_si" 42
+ (and (eq_attr "cpu" "r4600")
+ (eq_attr "type" "idiv")
+ (eq_attr "mode" "SI"))
"imuldiv*42")
+(define_insn_reservation "r4600_idiv_di" 74
+ (and (eq_attr "cpu" "r4600")
+ (eq_attr "type" "idiv")
+ (eq_attr "mode" "DI"))
+ "imuldiv*74")
+
(define_insn_reservation "r4650_imul" 4
(and (eq_attr "cpu" "r4650")