1132718Skan;; Scheduling description for IBM Power2 processor. 2169689Skan;; Copyright (C) 2003, 2004 Free Software Foundation, Inc. 3132718Skan;; 4132718Skan;; This file is part of GCC. 5132718Skan 6132718Skan;; GCC is free software; you can redistribute it and/or modify it 7132718Skan;; under the terms of the GNU General Public License as published 8132718Skan;; by the Free Software Foundation; either version 2, or (at your 9132718Skan;; option) any later version. 10132718Skan 11132718Skan;; GCC is distributed in the hope that it will be useful, but WITHOUT 12132718Skan;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13132718Skan;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 14132718Skan;; License for more details. 15132718Skan 16132718Skan;; You should have received a copy of the GNU General Public License 17132718Skan;; along with GCC; see the file COPYING. If not, write to the 18169689Skan;; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, 19169689Skan;; MA 02110-1301, USA. 20132718Skan 21132718Skan(define_automaton "rios2,rios2fp") 22132718Skan(define_cpu_unit "iu1_rios2,iu2_rios2" "rios2") 23132718Skan(define_cpu_unit "fpu1_rios2,fpu2_rios2" "rios2fp") 24132718Skan(define_cpu_unit "bpu_rios2" "rios2") 25132718Skan 26132718Skan;; RIOS2 32-bit 2xIU, 2xFPU, BPU 27132718Skan;; IU1 can perform all integer operations 28132718Skan;; IU2 can perform all integer operations except imul and idiv 29132718Skan 30132718Skan(define_insn_reservation "rios2-load" 2 31132718Skan (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,\ 32169689Skan load_ux,load_u,fpload,fpload_ux,fpload_u,\ 33169689Skan load_l,store_c,sync") 34132718Skan (eq_attr "cpu" "rios2")) 35132718Skan "iu1_rios2|iu2_rios2") 36132718Skan 37169689Skan(define_insn_reservation "rios2-store" 2 38132718Skan (and (eq_attr "type" "store,store_ux,store_u,fpstore,fpstore_ux,fpstore_u") 39132718Skan (eq_attr "cpu" "rios2")) 40132718Skan "iu1_rios2|iu2_rios2") 41132718Skan 42132718Skan(define_insn_reservation "rios2-integer" 1 43132718Skan (and (eq_attr "type" "integer,insert_word") 44132718Skan (eq_attr "cpu" "rios2")) 45132718Skan "iu1_rios2|iu2_rios2") 46132718Skan 47169689Skan(define_insn_reservation "rios2-two" 1 48169689Skan (and (eq_attr "type" "two") 49169689Skan (eq_attr "cpu" "rios2")) 50169689Skan "iu1_rios2|iu2_rios2,iu1_rios2|iu2_rios2") 51169689Skan 52169689Skan(define_insn_reservation "rios2-three" 1 53169689Skan (and (eq_attr "type" "three") 54169689Skan (eq_attr "cpu" "rios2")) 55169689Skan "iu1_rios2|iu2_rios2,iu1_rios2|iu2_rios2,iu1_rios2|iu2_rios2") 56169689Skan 57132718Skan(define_insn_reservation "rios2-imul" 2 58132718Skan (and (eq_attr "type" "imul,imul2,imul3,imul_compare") 59132718Skan (eq_attr "cpu" "rios2")) 60132718Skan "iu1_rios2*2") 61132718Skan 62132718Skan(define_insn_reservation "rios2-idiv" 13 63132718Skan (and (eq_attr "type" "idiv") 64132718Skan (eq_attr "cpu" "rios2")) 65132718Skan "iu1_rios2*13") 66132718Skan 67132718Skan; compare executes on integer unit, but feeds insns which 68132718Skan; execute on the branch unit. 69132718Skan(define_insn_reservation "rios2-compare" 3 70132718Skan (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare") 71132718Skan (eq_attr "cpu" "rios2")) 72132718Skan "(iu1_rios2|iu2_rios2),nothing,bpu_rios2") 73132718Skan 74132718Skan(define_insn_reservation "rios2-fp" 2 75132718Skan (and (eq_attr "type" "fp") 76132718Skan (eq_attr "cpu" "rios2")) 77132718Skan "fpu1_rios2|fpu2_rios2") 78132718Skan 79132718Skan(define_insn_reservation "rios2-fpcompare" 5 80132718Skan (and (eq_attr "type" "fpcompare") 81132718Skan (eq_attr "cpu" "rios2")) 82132718Skan "(fpu1_rios2|fpu2_rios2),nothing*3,bpu_rios2") 83132718Skan 84132718Skan(define_insn_reservation "rios2-dmul" 2 85132718Skan (and (eq_attr "type" "dmul") 86132718Skan (eq_attr "cpu" "rios2")) 87132718Skan "fpu1_rios2|fpu2_rios2") 88132718Skan 89132718Skan(define_insn_reservation "rios2-sdiv" 17 90132718Skan (and (eq_attr "type" "sdiv,ddiv") 91132718Skan (eq_attr "cpu" "rios2")) 92132718Skan "(fpu1_rios2*17)|(fpu2_rios2*17)") 93132718Skan 94132718Skan(define_insn_reservation "rios2-ssqrt" 26 95132718Skan (and (eq_attr "type" "ssqrt,dsqrt") 96132718Skan (eq_attr "cpu" "rios2")) 97132718Skan "(fpu1_rios2*26)|(fpu2_rios2*26)") 98132718Skan 99132718Skan(define_insn_reservation "rios2-mfcr" 2 100132718Skan (and (eq_attr "type" "mfcr") 101132718Skan (eq_attr "cpu" "rios2")) 102132718Skan "iu1_rios2,bpu_rios2") 103132718Skan 104132718Skan(define_insn_reservation "rios2-mtcr" 3 105132718Skan (and (eq_attr "type" "mtcr") 106132718Skan (eq_attr "cpu" "rios2")) 107132718Skan "iu1_rios2,bpu_rios2") 108132718Skan 109132718Skan(define_insn_reservation "rios2-crlogical" 3 110132718Skan (and (eq_attr "type" "cr_logical,delayed_cr") 111132718Skan (eq_attr "cpu" "rios2")) 112132718Skan "bpu_rios2") 113132718Skan 114132718Skan(define_insn_reservation "rios2-mtjmpr" 5 115132718Skan (and (eq_attr "type" "mtjmpr") 116132718Skan (eq_attr "cpu" "rios2")) 117132718Skan "iu1_rios2,bpu_rios2") 118132718Skan 119132718Skan(define_insn_reservation "rios2-mfjmpr" 2 120132718Skan (and (eq_attr "type" "mfjmpr") 121132718Skan (eq_attr "cpu" "rios2")) 122132718Skan "iu1_rios2,bpu_rios2") 123132718Skan 124132718Skan(define_insn_reservation "rios2-branch" 1 125169689Skan (and (eq_attr "type" "jmpreg,branch,isync") 126132718Skan (eq_attr "cpu" "rios2")) 127132718Skan "bpu_rios2") 128132718Skan 129