diff options
author | Matt Turner <mattst88@gmail.com> | 2012-06-03 08:00:19 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2012-06-03 08:00:19 +0000 |
commit | d58e7d69246d89b43f2f04c09da812c37087577f (patch) | |
tree | 047a0c8e432b6f88761b70d6b895046258b841a4 /gcc/config/mips/4600.md | |
parent | 843b17b2bda65cbc114af64ab36867ead5cc3fa5 (diff) | |
download | gcc-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.md | 51 |
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") |