1132718Skan;; Scheduling description for IBM POWER 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 "rios1,rios1fp")
22132718Skan(define_cpu_unit "iu_rios1" "rios1")
23132718Skan(define_cpu_unit "fpu_rios1" "rios1fp")
24132718Skan(define_cpu_unit "bpu_rios1" "rios1")
25132718Skan
26132718Skan;; RIOS1  32-bit IU, FPU, BPU
27132718Skan
28132718Skan(define_insn_reservation "rios1-load" 2
29169689Skan  (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,\
30169689Skan		        load_l,store_c,sync")
31132718Skan       (eq_attr "cpu" "rios1,ppc601"))
32132718Skan  "iu_rios1")
33132718Skan
34169689Skan(define_insn_reservation "rios1-store" 2
35132718Skan  (and (eq_attr "type" "store,store_ux,store_u")
36132718Skan       (eq_attr "cpu" "rios1,ppc601"))
37132718Skan  "iu_rios1")
38132718Skan
39132718Skan(define_insn_reservation "rios1-fpload" 2
40132718Skan  (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
41132718Skan       (eq_attr "cpu" "rios1"))
42132718Skan  "iu_rios1")
43132718Skan
44132718Skan(define_insn_reservation "ppc601-fpload" 3
45132718Skan  (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
46132718Skan       (eq_attr "cpu" "ppc601"))
47132718Skan  "iu_rios1")
48132718Skan
49169689Skan(define_insn_reservation "rios1-fpstore" 3
50132718Skan  (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
51132718Skan       (eq_attr "cpu" "rios1,ppc601"))
52132718Skan  "iu_rios1+fpu_rios1")
53132718Skan
54132718Skan(define_insn_reservation "rios1-integer" 1
55132718Skan  (and (eq_attr "type" "integer,insert_word")
56132718Skan       (eq_attr "cpu" "rios1,ppc601"))
57132718Skan  "iu_rios1")
58132718Skan
59169689Skan(define_insn_reservation "rios1-two" 1
60169689Skan  (and (eq_attr "type" "two")
61169689Skan       (eq_attr "cpu" "rios1,ppc601"))
62169689Skan  "iu_rios1,iu_rios1")
63169689Skan
64169689Skan(define_insn_reservation "rios1-three" 1
65169689Skan  (and (eq_attr "type" "three")
66169689Skan       (eq_attr "cpu" "rios1,ppc601"))
67169689Skan  "iu_rios1,iu_rios1,iu_rios1")
68169689Skan
69132718Skan(define_insn_reservation "rios1-imul" 5
70132718Skan  (and (eq_attr "type" "imul,imul_compare")
71132718Skan       (eq_attr "cpu" "rios1"))
72132718Skan  "iu_rios1*5")
73132718Skan
74132718Skan(define_insn_reservation "rios1-imul2" 4
75132718Skan  (and (eq_attr "type" "imul2")
76132718Skan       (eq_attr "cpu" "rios1"))
77132718Skan  "iu_rios1*4")
78132718Skan
79132718Skan(define_insn_reservation "rios1-imul3" 3
80132718Skan  (and (eq_attr "type" "imul")
81132718Skan       (eq_attr "cpu" "rios1"))
82132718Skan  "iu_rios1*3")
83132718Skan
84132718Skan(define_insn_reservation "ppc601-imul" 5
85132718Skan  (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
86132718Skan       (eq_attr "cpu" "ppc601"))
87132718Skan  "iu_rios1*5")
88132718Skan
89132718Skan(define_insn_reservation "rios1-idiv" 19
90132718Skan  (and (eq_attr "type" "idiv")
91132718Skan       (eq_attr "cpu" "rios1"))
92132718Skan  "iu_rios1*19")
93132718Skan
94132718Skan(define_insn_reservation "ppc601-idiv" 36
95132718Skan  (and (eq_attr "type" "idiv")
96132718Skan       (eq_attr "cpu" "ppc601"))
97132718Skan  "iu_rios1*36")
98132718Skan
99132718Skan; compare executes on integer unit, but feeds insns which
100132718Skan; execute on the branch unit.
101132718Skan(define_insn_reservation "rios1-compare" 4
102132718Skan  (and (eq_attr "type" "cmp,fast_compare,compare")
103132718Skan       (eq_attr "cpu" "rios1"))
104132718Skan  "iu_rios1,nothing*2,bpu_rios1")
105132718Skan
106132718Skan(define_insn_reservation "rios1-delayed_compare" 5
107132718Skan  (and (eq_attr "type" "delayed_compare")
108132718Skan       (eq_attr "cpu" "rios1"))
109132718Skan  "iu_rios1,nothing*3,bpu_rios1")
110132718Skan
111132718Skan(define_insn_reservation "ppc601-compare" 3
112132718Skan  (and (eq_attr "type" "cmp,compare,delayed_compare")
113132718Skan       (eq_attr "cpu" "ppc601"))
114132718Skan  "iu_rios1,nothing,bpu_rios1")
115132718Skan
116132718Skan(define_insn_reservation "rios1-fpcompare" 9
117132718Skan  (and (eq_attr "type" "fpcompare")
118132718Skan       (eq_attr "cpu" "rios1"))
119132718Skan  "fpu_rios1,nothing*3,bpu_rios1")
120132718Skan
121132718Skan(define_insn_reservation "ppc601-fpcompare" 5
122132718Skan  (and (eq_attr "type" "fpcompare")
123132718Skan       (eq_attr "cpu" "ppc601"))
124132718Skan  "(fpu_rios1+iu_rios1*2),nothing*2,bpu_rios1")
125132718Skan
126132718Skan(define_insn_reservation "rios1-fp" 2
127132718Skan  (and (eq_attr "type" "fp,dmul")
128132718Skan       (eq_attr "cpu" "rios1"))
129132718Skan  "fpu_rios1")
130132718Skan
131132718Skan(define_insn_reservation "ppc601-fp" 4
132132718Skan  (and (eq_attr "type" "fp")
133132718Skan       (eq_attr "cpu" "ppc601"))
134132718Skan  "fpu_rios1")
135132718Skan
136132718Skan(define_insn_reservation "rios1-dmul" 5
137132718Skan  (and (eq_attr "type" "dmul")
138132718Skan       (eq_attr "cpu" "ppc601"))
139132718Skan  "fpu_rios1*2")
140132718Skan
141132718Skan(define_insn_reservation "rios1-sdiv" 19
142132718Skan  (and (eq_attr "type" "sdiv,ddiv")
143132718Skan       (eq_attr "cpu" "rios1"))
144132718Skan  "fpu_rios1*19")
145132718Skan
146132718Skan(define_insn_reservation "ppc601-sdiv" 17
147132718Skan  (and (eq_attr "type" "sdiv")
148132718Skan       (eq_attr "cpu" "ppc601"))
149132718Skan  "fpu_rios1*17")
150132718Skan
151132718Skan(define_insn_reservation "ppc601-ddiv" 31
152132718Skan  (and (eq_attr "type" "ddiv")
153132718Skan       (eq_attr "cpu" "ppc601"))
154132718Skan  "fpu_rios1*31")
155132718Skan
156132718Skan(define_insn_reservation "rios1-mfcr" 2
157132718Skan  (and (eq_attr "type" "mfcr")
158132718Skan       (eq_attr "cpu" "rios1,ppc601"))
159132718Skan  "iu_rios1,bpu_rios1")
160132718Skan
161132718Skan(define_insn_reservation "rios1-mtcr" 4
162132718Skan  (and (eq_attr "type" "mtcr")
163132718Skan       (eq_attr "cpu" "rios1,ppc601"))
164132718Skan  "iu_rios1,bpu_rios1")
165132718Skan
166132718Skan(define_insn_reservation "rios1-crlogical" 4
167132718Skan  (and (eq_attr "type" "cr_logical,delayed_cr")
168132718Skan       (eq_attr "cpu" "rios1,ppc601"))
169132718Skan  "bpu_rios1")
170132718Skan
171132718Skan(define_insn_reservation "rios1-mtjmpr" 5
172132718Skan  (and (eq_attr "type" "mtjmpr")
173132718Skan       (eq_attr "cpu" "rios1"))
174132718Skan  "iu_rios1,bpu_rios1")
175132718Skan
176132718Skan(define_insn_reservation "ppc601-mtjmpr" 4
177132718Skan  (and (eq_attr "type" "mtjmpr")
178132718Skan       (eq_attr "cpu" "ppc601"))
179132718Skan  "iu_rios1,bpu_rios1")
180132718Skan
181132718Skan(define_insn_reservation "rios1-mfjmpr" 2
182132718Skan  (and (eq_attr "type" "mfjmpr")
183132718Skan       (eq_attr "cpu" "rios1,ppc601"))
184132718Skan  "iu_rios1,bpu_rios1")
185132718Skan
186132718Skan(define_insn_reservation "rios1-branch" 1
187169689Skan  (and (eq_attr "type" "jmpreg,branch,isync")
188132718Skan       (eq_attr "cpu" "rios1,ppc601"))
189132718Skan  "bpu_rios1")
190132718Skan
191