OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [config/] [rs6000/] [a2.md] - Diff between revs 282 and 338

Only display areas with differences | Details | Blame | View Log

Rev 282 Rev 338
;; Scheduling description for PowerPC A2 processors.
;; Scheduling description for PowerPC A2 processors.
;; Copyright (C) 2009 Free Software Foundation, Inc.
;; Copyright (C) 2009 Free Software Foundation, Inc.
;; Contributed by Ben Elliston (bje@au.ibm.com)
;; Contributed by Ben Elliston (bje@au.ibm.com)
;; This file is part of GCC.
;; This file is part of GCC.
;; GCC is free software; you can redistribute it and/or modify it
;; GCC is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published
;; under the terms of the GNU General Public License as published
;; by the Free Software Foundation; either version 3, or (at your
;; by the Free Software Foundation; either version 3, or (at your
;; option) any later version.
;; option) any later version.
;; GCC is distributed in the hope that it will be useful, but WITHOUT
;; GCC is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
;; License for more details.
;; License for more details.
;; You should have received a copy of the GNU General Public License
;; You should have received a copy of the GNU General Public License
;; along with GCC; see the file COPYING3.  If not see
;; along with GCC; see the file COPYING3.  If not see
;; .
;; .
(define_automaton "ppca2")
(define_automaton "ppca2")
;; CPU units
;; CPU units
;; The multiplier pipeline.
;; The multiplier pipeline.
(define_cpu_unit "mult" "ppca2")
(define_cpu_unit "mult" "ppca2")
;; The auxillary processor unit (FP/vector unit).
;; The auxillary processor unit (FP/vector unit).
(define_cpu_unit "axu" "ppca2")
(define_cpu_unit "axu" "ppca2")
;; D.4.6
;; D.4.6
;; Some peculiarities for certain SPRs
;; Some peculiarities for certain SPRs
(define_insn_reservation "ppca2-mfcr" 1
(define_insn_reservation "ppca2-mfcr" 1
  (and (eq_attr "type" "mfcr")
  (and (eq_attr "type" "mfcr")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
   "nothing")
   "nothing")
(define_insn_reservation "ppca2-mfjmpr" 5
(define_insn_reservation "ppca2-mfjmpr" 5
  (and (eq_attr "type" "mfjmpr")
  (and (eq_attr "type" "mfjmpr")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "nothing")
  "nothing")
(define_insn_reservation "ppca2-mtjmpr" 5
(define_insn_reservation "ppca2-mtjmpr" 5
  (and (eq_attr "type" "mtjmpr")
  (and (eq_attr "type" "mtjmpr")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "nothing")
  "nothing")
;; D.4.8
;; D.4.8
(define_insn_reservation "ppca2-imul" 1
(define_insn_reservation "ppca2-imul" 1
  (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
  (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "nothing")
  "nothing")
;; FIXME: latency and multiplier reservation for 64-bit multiply?
;; FIXME: latency and multiplier reservation for 64-bit multiply?
(define_insn_reservation "ppca2-lmul" 6
(define_insn_reservation "ppca2-lmul" 6
  (and (eq_attr "type" "lmul,lmul_compare")
  (and (eq_attr "type" "lmul,lmul_compare")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "mult*3")
  "mult*3")
;; D.4.9
;; D.4.9
(define_insn_reservation "ppca2-idiv" 32
(define_insn_reservation "ppca2-idiv" 32
  (and (eq_attr "type" "idiv")
  (and (eq_attr "type" "idiv")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "mult*32")
  "mult*32")
(define_insn_reservation "ppca2-ldiv" 65
(define_insn_reservation "ppca2-ldiv" 65
  (and (eq_attr "type" "ldiv")
  (and (eq_attr "type" "ldiv")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "mult*65")
  "mult*65")
;; D.4.13
;; D.4.13
(define_insn_reservation "ppca2-load" 5
(define_insn_reservation "ppca2-load" 5
  (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u")
  (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "nothing")
  "nothing")
;; D.8.1
;; D.8.1
(define_insn_reservation "ppca2-fp" 6
(define_insn_reservation "ppca2-fp" 6
  (and (eq_attr "type" "fp")               ;; Ignore fpsimple insn types (SPE only).
  (and (eq_attr "type" "fp")               ;; Ignore fpsimple insn types (SPE only).
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "axu")
  "axu")
;; D.8.4
;; D.8.4
(define_insn_reservation "ppca2-fp-load" 6
(define_insn_reservation "ppca2-fp-load" 6
  (and (eq_attr "type" "fpload,fpload_u,fpload_ux")
  (and (eq_attr "type" "fpload,fpload_u,fpload_ux")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "axu")
  "axu")
;; D.8.5
;; D.8.5
(define_insn_reservation "ppca2-fp-store" 2
(define_insn_reservation "ppca2-fp-store" 2
  (and (eq_attr "type" "fpstore,fpstore_u,fpstore_ux")
  (and (eq_attr "type" "fpstore,fpstore_u,fpstore_ux")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "axu")
  "axu")
;; D.8.6
;; D.8.6
(define_insn_reservation "ppca2-fpcompare" 5
(define_insn_reservation "ppca2-fpcompare" 5
  (and (eq_attr "type" "fpcompare")
  (and (eq_attr "type" "fpcompare")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
 "axu")
 "axu")
;; D.8.7
;; D.8.7
;;
;;
;; Instructions from the same thread succeeding the floating-point
;; Instructions from the same thread succeeding the floating-point
;; divide cannot be executed until the floating-point divide has
;; divide cannot be executed until the floating-point divide has
;; completed.  Since there is nothing else we can do, this thread will
;; completed.  Since there is nothing else we can do, this thread will
;; just have to stall.
;; just have to stall.
(define_insn_reservation "ppca2-ddiv" 72
(define_insn_reservation "ppca2-ddiv" 72
  (and (eq_attr "type" "ddiv")
  (and (eq_attr "type" "ddiv")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
   "axu")
   "axu")
(define_insn_reservation "ppca2-sdiv" 59
(define_insn_reservation "ppca2-sdiv" 59
  (and (eq_attr "type" "sdiv")
  (and (eq_attr "type" "sdiv")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
   "axu")
   "axu")
;; D.8.8
;; D.8.8
;;
;;
;; Instructions from the same thread succeeding the floating-point
;; Instructions from the same thread succeeding the floating-point
;; divide cannot be executed until the floating-point divide has
;; divide cannot be executed until the floating-point divide has
;; completed.  Since there is nothing else we can do, this thread will
;; completed.  Since there is nothing else we can do, this thread will
;; just have to stall.
;; just have to stall.
(define_insn_reservation "ppca2-dsqrt" 69
(define_insn_reservation "ppca2-dsqrt" 69
  (and (eq_attr "type" "dsqrt")
  (and (eq_attr "type" "dsqrt")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "axu")
  "axu")
(define_insn_reservation "ppca2-ssqrt" 65
(define_insn_reservation "ppca2-ssqrt" 65
  (and (eq_attr "type" "ssqrt")
  (and (eq_attr "type" "ssqrt")
       (eq_attr "cpu" "ppca2"))
       (eq_attr "cpu" "ppca2"))
  "axu")
  "axu")
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.