aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/mips/4600.md
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2012-06-03 08:00:19 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2012-06-03 08:00:19 +0000
commitd58e7d69246d89b43f2f04c09da812c37087577f (patch)
tree047a0c8e432b6f88761b70d6b895046258b841a4 /gcc/config/mips/4600.md
parent843b17b2bda65cbc114af64ab36867ead5cc3fa5 (diff)
downloadgcc-d58e7d69246d89b43f2f04c09da812c37087577f.zip
gcc-d58e7d69246d89b43f2f04c09da812c37087577f.tar.gz
gcc-d58e7d69246d89b43f2f04c09da812c37087577f.tar.bz2
4600.md (r4700_imul_si): New.
gcc/ 2012-03-24 Matt Turner <mattst88@gmail.com> * config/mips/4600.md (r4700_imul_si): New. (r4700_imul_di): New. (r4700_fmul_single): New. (r4700_fmul_double): New. * config/mips/mips-cpus.def: Add r4700. * config/mips/mips.c: Likewise. * config/mips/mips.md: Likewise. * config/mips/mips-tables.opt: Regenerate. From-SVN: r188148
Diffstat (limited to 'gcc/config/mips/4600.md')
-rw-r--r--gcc/config/mips/4600.md51
1 files changed, 40 insertions, 11 deletions
diff --git a/gcc/config/mips/4600.md b/gcc/config/mips/4600.md
index fcdbf00..ef74fd3 100644
--- a/gcc/config/mips/4600.md
+++ b/gcc/config/mips/4600.md
@@ -1,4 +1,4 @@
-;; R4600 and R4650 pipeline description.
+;; R4600, R4650, and R4700 pipeline description.
;; Copyright (C) 2004, 2005, 2007, 2012 Free Software Foundation, Inc.
;;
;; This file is part of GCC.
@@ -21,8 +21,10 @@
;; This file overrides parts of generic.md. It is derived from the
;; old define_function_unit description.
;;
-;; We handle the R4600 and R4650 in much the same way. The only difference
-;; is in the integer multiplication and division costs.
+;; We handle the R4600, R4650, and R4700 in much the same way. The only
+;; differences between R4600 and R4650 are the integer multiplication and
+;; division costs. The only differences between R4600 and R4700 are the
+;; integer and floating-point multiplication costs.
(define_insn_reservation "r4600_imul_si" 10
(and (eq_attr "cpu" "r4600")
@@ -37,13 +39,13 @@
"imuldiv*12")
(define_insn_reservation "r4600_idiv_si" 42
- (and (eq_attr "cpu" "r4600")
+ (and (eq_attr "cpu" "r4600,r4700")
(eq_attr "type" "idiv")
(eq_attr "mode" "SI"))
"imuldiv*42")
(define_insn_reservation "r4600_idiv_di" 74
- (and (eq_attr "cpu" "r4600")
+ (and (eq_attr "cpu" "r4600,r4700")
(eq_attr "type" "idiv")
(eq_attr "mode" "DI"))
"imuldiv*74")
@@ -60,13 +62,26 @@
"imuldiv*36")
+(define_insn_reservation "r4700_imul_si" 8
+ (and (eq_attr "cpu" "r4700")
+ (eq_attr "type" "imul,imul3,imadd")
+ (eq_attr "mode" "SI"))
+ "imuldiv*8")
+
+(define_insn_reservation "r4700_imul_di" 10
+ (and (eq_attr "cpu" "r4700")
+ (eq_attr "type" "imul,imul3,imadd")
+ (eq_attr "mode" "DI"))
+ "imuldiv*10")
+
+
(define_insn_reservation "r4600_load" 2
- (and (eq_attr "cpu" "r4600,r4650")
+ (and (eq_attr "cpu" "r4600,r4650,r4700")
(eq_attr "type" "load,fpload,fpidxload"))
"alu")
(define_insn_reservation "r4600_fmove" 1
- (and (eq_attr "cpu" "r4600,r4650")
+ (and (eq_attr "cpu" "r4600,r4650,r4700")
(eq_attr "type" "fabs,fneg,fmove"))
"alu")
@@ -76,26 +91,40 @@
(eq_attr "mode" "SF")))
"alu")
+
+(define_insn_reservation "r4700_fmul_single" 4
+ (and (eq_attr "cpu" "r4700")
+ (and (eq_attr "type" "fmul,fmadd")
+ (eq_attr "mode" "SF")))
+ "alu")
+
+(define_insn_reservation "r4700_fmul_double" 5
+ (and (eq_attr "cpu" "r4700")
+ (and (eq_attr "type" "fmul,fmadd")
+ (eq_attr "mode" "DF")))
+ "alu")
+
+
(define_insn_reservation "r4600_fdiv_single" 32
- (and (eq_attr "cpu" "r4600,r4650")
+ (and (eq_attr "cpu" "r4600,r4650,r4700")
(and (eq_attr "type" "fdiv,frdiv")
(eq_attr "mode" "SF")))
"alu")
(define_insn_reservation "r4600_fdiv_double" 61
- (and (eq_attr "cpu" "r4600,r4650")
+ (and (eq_attr "cpu" "r4600,r4650,r4700")
(and (eq_attr "type" "fdiv,frdiv")
(eq_attr "mode" "DF")))
"alu")
(define_insn_reservation "r4600_fsqrt_single" 31
- (and (eq_attr "cpu" "r4600,r4650")
+ (and (eq_attr "cpu" "r4600,r4650,r4700")
(and (eq_attr "type" "fsqrt,frsqrt")
(eq_attr "mode" "SF")))
"alu")
(define_insn_reservation "r4600_fsqrt_double" 60
- (and (eq_attr "cpu" "r4600,r4650")
+ (and (eq_attr "cpu" "r4600,r4650,r4700")
(and (eq_attr "type" "fsqrt,frsqrt")
(eq_attr "mode" "DF")))
"alu")