Commit 3193c415 by Jeffrey A Law Committed by Jeff Law

pa.md (7100lc, [...]): Slightly refine handling of double precision multiplies.

        * pa.md (7100lc, 7200, 7300 scheduling): Slightly refine
        handling of double precision multiplies.


        * pa.md (7100lc, 7200, 7300 scheduling): Refine handling of
        fpdiv and fpsqrt instructions.
        (7200 & 7300 scheduling): Fix typo in handling of
        store-load and store-store penalties.

From-SVN: r52946
parent 2799d721
Tue Apr 30 09:31:59 2002 Jeffrey A Law (law@cygnus.com)
* pa.md (7100lc, 7200, 7300 scheduling): Slightly refine
handling of double precision multiplies.
* pa.md (7100lc, 7200, 7300 scheduling): Refine handling of
fpdiv and fpsqrt instructions.
(7200 & 7300 scheduling): Fix typo in handling of
store-load and store-store penalties.
2002-04-30 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> 2002-04-30 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* doc/contrib.texi (Contributors): Use MIPS instead of Mips and * doc/contrib.texi (Contributors): Use MIPS instead of Mips and
......
...@@ -327,7 +327,7 @@ ...@@ -327,7 +327,7 @@
(define_automaton "pa7100lc") (define_automaton "pa7100lc")
(define_cpu_unit "i0_7100lc, i1_7100lc, f_7100lc" "pa7100lc") (define_cpu_unit "i0_7100lc, i1_7100lc, f_7100lc" "pa7100lc")
(define_cpu_unit "fpalu_7100lc,fpdivsqrt_7100lc,fpmul_7100lc" "pa7100lc") (define_cpu_unit "fpalu_7100lc,fpmul_7100lc" "pa7100lc")
(define_cpu_unit "mem_7100lc" "pa7100lc") (define_cpu_unit "mem_7100lc" "pa7100lc")
(define_insn_reservation "Y0" 2 (define_insn_reservation "Y0" 2
...@@ -335,57 +335,58 @@ ...@@ -335,57 +335,58 @@
(eq_attr "cpu" "7100LC,7200,7300")) (eq_attr "cpu" "7100LC,7200,7300"))
"f_7100lc,fpalu_7100lc") "f_7100lc,fpalu_7100lc")
;; Double precision multiplies lock the entire CPU for one
;; cycle. There is no way to avoid this lock and trying to
;; schedule around the lock is pointless and thus there is no
;; value in trying to model this lock. Not modeling the lock
;; allows for a smaller DFA and may reduce register pressure.
(define_insn_reservation "Y1" 2 (define_insn_reservation "Y1" 2
(and (eq_attr "type" "fpmulsgl") (and (eq_attr "type" "fpmulsgl,fpmuldbl")
(eq_attr "cpu" "7100LC,7200,7300")) (eq_attr "cpu" "7100LC,7200,7300"))
"f_7100lc,fpmul_7100lc") "f_7100lc,fpmul_7100lc")
(define_insn_reservation "Y2" 3 ;; fp division and sqrt instructions lock the entire CPU for
(and (eq_attr "type" "fpmuldbl") ;; 7 cycles (single precision) or 14 cycles (double precision).
(eq_attr "cpu" "7100LC,7200,7300")) ;; There is no way to avoid this lock and trying to schedule
"f_7100lc,fpmul_7100lc,fpmul_7100lc") ;; around the lock is pointless and thus there is no value in
;; trying to model this lock. Not modeling the lock allows
(define_insn_reservation "Y3" 8 ;; for a smaller DFA and may reduce register pressure.
(and (eq_attr "type" "fpdivsgl,fpsqrtsgl") (define_insn_reservation "Y2" 1
(eq_attr "cpu" "7100LC,7200,7300")) (and (eq_attr "type" "fpdivsgl,fpsqrtsgl,fpdivdbl,fpsqrtdbl")
"f_7100lc+fpdivsqrt_7100lc,fpdivsqrt_7100lc*7")
(define_insn_reservation "Y4" 15
(and (eq_attr "type" "fpdivdbl,fpsqrtdbl")
(eq_attr "cpu" "7100LC,7200,7300")) (eq_attr "cpu" "7100LC,7200,7300"))
"f_7100lc+fpdivsqrt_7100lc,fpdivsqrt_7100lc*14") "f_7100lc")
(define_insn_reservation "Y5" 2 (define_insn_reservation "Y3" 2
(and (eq_attr "type" "load,fpload") (and (eq_attr "type" "load,fpload")
(eq_attr "cpu" "7100LC,7200,7300")) (eq_attr "cpu" "7100LC,7200,7300"))
"i1_7100lc+mem_7100lc") "i1_7100lc+mem_7100lc")
(define_insn_reservation "Y6" 2 (define_insn_reservation "Y4" 2
(and (eq_attr "type" "store,fpstore") (and (eq_attr "type" "store,fpstore")
(eq_attr "cpu" "7100LC")) (eq_attr "cpu" "7100LC"))
"i1_7100lc+mem_7100lc,mem_7100lc") "i1_7100lc+mem_7100lc,mem_7100lc")
(define_insn_reservation "Y7" 1 (define_insn_reservation "Y5" 1
(and (eq_attr "type" "shift,nullshift") (and (eq_attr "type" "shift,nullshift")
(eq_attr "cpu" "7100LC,7200,7300")) (eq_attr "cpu" "7100LC,7200,7300"))
"i1_7100lc") "i1_7100lc")
(define_insn_reservation "Y8" 1 (define_insn_reservation "Y6" 1
(and (eq_attr "type" "!fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpsqrtsgl,fpdivdbl,fpsqrtdbl,load,fpload,store,fpstore,shift,nullshift") (and (eq_attr "type" "!fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpsqrtsgl,fpdivdbl,fpsqrtdbl,load,fpload,store,fpstore,shift,nullshift")
(eq_attr "cpu" "7100LC,7200,7300")) (eq_attr "cpu" "7100LC,7200,7300"))
"(i0_7100lc|i1_7100lc)") "(i0_7100lc|i1_7100lc)")
;; The 7200 has a store-load penalty ;; The 7200 has a store-load penalty
(define_insn_reservation "Y9" 2 (define_insn_reservation "Y7" 2
(and (eq_attr "type" "store,fpstore") (and (eq_attr "type" "store,fpstore")
(eq_attr "cpu" "7200")) (eq_attr "cpu" "7200"))
"i0_7100lc,mem_7100lc") "i1_7100lc,mem_7100lc")
;; The 7300 has no penalty for store-store or store-load ;; The 7300 has no penalty for store-store or store-load
(define_insn_reservation "YA" 2 (define_insn_reservation "Y8" 2
(and (eq_attr "type" "store,fpstore") (and (eq_attr "type" "store,fpstore")
(eq_attr "cpu" "7300")) (eq_attr "cpu" "7300"))
"i0_7100lc") "i1_7100lc")
;; Scheduling for the PA8000 is somewhat different than scheduling for a ;; Scheduling for the PA8000 is somewhat different than scheduling for a
;; traditional architecture. ;; traditional architecture.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment