1 ;; Itanium2 DFA descriptions for insn scheduling and bundling.
2 ;; Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
3 ;; Contributed by Vladimir Makarov <vmakarov@redhat.com>.
5 ;; This file is part of GCC.
7 ;; GCC is free software; you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation; either version 2, or (at your option)
12 ;; GCC is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GCC; see the file COPYING. If not, write to
19 ;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
20 ;; Boston, MA 02110-1301, USA. */
23 /* This is description of pipeline hazards based on DFA. The
24 following constructions can be used for this:
26 o define_cpu_unit string [string]) describes a cpu functional unit
29 1st operand: Names of cpu function units.
30 2nd operand: Name of automaton (see comments for
33 All define_reservations and define_cpu_units should have unique
34 names which cannot be "nothing".
36 o (exclusion_set string string) means that each CPU function unit
37 in the first string cannot be reserved simultaneously with each
38 unit whose name is in the second string and vise versa. CPU
39 units in the string are separated by commas. For example, it is
40 useful for description CPU with fully pipelined floating point
41 functional unit which can execute simultaneously only single
42 floating point insns or only double floating point insns.
44 o (presence_set string string) means that each CPU function unit in
45 the first string cannot be reserved unless at least one of
46 pattern of units whose names are in the second string is
47 reserved. This is an asymmetric relation. CPU units or unit
48 patterns in the strings are separated by commas. Pattern is one
49 unit name or unit names separated by white-spaces.
51 For example, it is useful for description that slot1 is reserved
52 after slot0 reservation for a VLIW processor. We could describe
53 it by the following construction
55 (presence_set "slot1" "slot0")
57 Or slot1 is reserved only after slot0 and unit b0 reservation.
58 In this case we could write
60 (presence_set "slot1" "slot0 b0")
62 All CPU functional units in a set should belong to the same
65 o (final_presence_set string string) is analogous to
66 `presence_set'. The difference between them is when checking is
67 done. When an instruction is issued in given automaton state
68 reflecting all current and planned unit reservations, the
69 automaton state is changed. The first state is a source state,
70 the second one is a result state. Checking for `presence_set' is
71 done on the source state reservation, checking for
72 `final_presence_set' is done on the result reservation. This
73 construction is useful to describe a reservation which is
74 actually two subsequent reservations. For example, if we use
76 (presence_set "slot1" "slot0")
78 the following insn will be never issued (because slot1 requires
79 slot0 which is absent in the source state).
81 (define_reservation "insn_and_nop" "slot0 + slot1")
83 but it can be issued if we use analogous `final_presence_set'.
85 o (absence_set string string) means that each CPU function unit in
86 the first string can be reserved only if each pattern of units
87 whose names are in the second string is not reserved. This is an
88 asymmetric relation (actually exclusion set is analogous to this
89 one but it is symmetric). CPU units or unit patterns in the
90 string are separated by commas. Pattern is one unit name or unit
91 names separated by white-spaces.
93 For example, it is useful for description that slot0 cannot be
94 reserved after slot1 or slot2 reservation for a VLIW processor.
95 We could describe it by the following construction
97 (absence_set "slot2" "slot0, slot1")
99 Or slot2 cannot be reserved if slot0 and unit b0 are reserved or
100 slot1 and unit b1 are reserved . In this case we could write
102 (absence_set "slot2" "slot0 b0, slot1 b1")
104 All CPU functional units in a set should to belong the same
107 o (final_absence_set string string) is analogous to `absence_set' but
108 checking is done on the result (state) reservation. See comments
109 for final_presence_set.
111 o (define_bypass number out_insn_names in_insn_names) names bypass with
112 given latency (the first number) from insns given by the first
113 string (see define_insn_reservation) into insns given by the
114 second string. Insn names in the strings are separated by
117 o (define_automaton string) describes names of an automaton
118 generated and used for pipeline hazards recognition. The names
119 are separated by comma. Actually it is possibly to generate the
120 single automaton but unfortunately it can be very large. If we
121 use more one automata, the summary size of the automata usually
122 is less than the single one. The automaton name is used in
123 define_cpu_unit. All automata should have unique names.
125 o (automata_option string) describes option for generation of
126 automata. Currently there are the following options:
128 o "no-minimization" which makes no minimization of automata.
129 This is only worth to do when we are debugging the description
130 and need to look more accurately at reservations of states.
132 o "ndfa" which makes automata with nondetermenistic reservation
135 o (define_reservation string string) names reservation (the first
136 string) of cpu functional units (the 2nd string). Sometimes unit
137 reservations for different insns contain common parts. In such
138 case, you describe common part and use one its name (the 1st
139 parameter) in regular expression in define_insn_reservation. All
140 define_reservations, define results and define_cpu_units should
141 have unique names which cannot be "nothing".
143 o (define_insn_reservation name default_latency condition regexpr)
144 describes reservation of cpu functional units (the 3nd operand)
145 for instruction which is selected by the condition (the 2nd
146 parameter). The first parameter is used for output of debugging
147 information. The reservations are described by a regular
148 expression according the following syntax:
150 regexp = regexp "," oneof
153 oneof = oneof "|" allof
156 allof = allof "+" repeat
159 repeat = element "*" number
162 element = cpu_function_name
168 1. "," is used for describing start of the next cycle in
171 2. "|" is used for describing the reservation described by the
172 first regular expression *or* the reservation described by
173 the second regular expression *or* etc.
175 3. "+" is used for describing the reservation described by the
176 first regular expression *and* the reservation described by
177 the second regular expression *and* etc.
179 4. "*" is used for convenience and simply means sequence in
180 which the regular expression are repeated NUMBER times with
181 cycle advancing (see ",").
183 5. cpu function unit name which means reservation.
185 6. reservation name -- see define_reservation.
187 7. string "nothing" means no units reservation.
191 (define_automaton "two")
193 ;; All possible combinations of bundles/syllables
194 (define_cpu_unit "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
195 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx" "two")
196 (define_cpu_unit "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\
197 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx." "two")
198 (define_cpu_unit "2_0mii., 2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\
199 2_0mib., 2_0mmb., 2_0mfb." "two")
201 (define_cpu_unit "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\
202 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx" "two")
203 (define_cpu_unit "2_1mi.i, 2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\
204 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx." "two")
205 (define_cpu_unit "2_1mii., 2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\
206 2_1mib., 2_1mmb., 2_1mfb." "two")
209 (exclusion_set "2_0m.ii" "2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
210 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
211 (exclusion_set "2_0m.mi" "2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib,\
212 2_0m.mb, 2_0m.fb, 2_0m.lx")
213 (exclusion_set "2_0m.fi" "2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb,\
215 (exclusion_set "2_0m.mf" "2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb,\
217 (exclusion_set "2_0b.bb" "2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
218 (exclusion_set "2_0m.bb" "2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
219 (exclusion_set "2_0m.ib" "2_0m.mb, 2_0m.fb, 2_0m.lx")
220 (exclusion_set "2_0m.mb" "2_0m.fb, 2_0m.lx")
221 (exclusion_set "2_0m.fb" "2_0m.lx")
224 (exclusion_set "2_0mi.i" "2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\
225 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
226 (exclusion_set "2_0mm.i" "2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\
227 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
228 (exclusion_set "2_0mf.i" "2_0mm.f, 2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b,\
230 (exclusion_set "2_0mm.f" "2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b,\
232 (exclusion_set "2_0bb.b" "2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
233 (exclusion_set "2_0mb.b" "2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
234 (exclusion_set "2_0mi.b" "2_0mm.b, 2_0mf.b, 2_0mlx.")
235 (exclusion_set "2_0mm.b" "2_0mf.b, 2_0mlx.")
236 (exclusion_set "2_0mf.b" "2_0mlx.")
239 (exclusion_set "2_0mii." "2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\
240 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
241 (exclusion_set "2_0mmi." "2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\
242 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
243 (exclusion_set "2_0mfi." "2_0mmf., 2_0bbb., 2_0mbb., 2_0mib., 2_0mmb.,\
245 (exclusion_set "2_0mmf." "2_0bbb., 2_0mbb., 2_0mib., 2_0mmb., 2_0mfb.,\
247 (exclusion_set "2_0bbb." "2_0mbb., 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
248 (exclusion_set "2_0mbb." "2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
249 (exclusion_set "2_0mib." "2_0mmb., 2_0mfb., 2_0mlx.")
250 (exclusion_set "2_0mmb." "2_0mfb., 2_0mlx.")
251 (exclusion_set "2_0mfb." "2_0mlx.")
254 (exclusion_set "2_1m.ii" "2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\
255 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")
256 (exclusion_set "2_1m.mi" "2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib,\
257 2_1m.mb, 2_1m.fb, 2_1m.lx")
258 (exclusion_set "2_1m.fi" "2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb,\
260 (exclusion_set "2_1m.mf" "2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb,\
262 (exclusion_set "2_1b.bb" "2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")
263 (exclusion_set "2_1m.bb" "2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")
264 (exclusion_set "2_1m.ib" "2_1m.mb, 2_1m.fb, 2_1m.lx")
265 (exclusion_set "2_1m.mb" "2_1m.fb, 2_1m.lx")
266 (exclusion_set "2_1m.fb" "2_1m.lx")
269 (exclusion_set "2_1mi.i" "2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\
270 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
271 (exclusion_set "2_1mm.i" "2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\
272 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
273 (exclusion_set "2_1mf.i" "2_1mm.f, 2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b,\
275 (exclusion_set "2_1mm.f" "2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b,\
277 (exclusion_set "2_1bb.b" "2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
278 (exclusion_set "2_1mb.b" "2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
279 (exclusion_set "2_1mi.b" "2_1mm.b, 2_1mf.b, 2_1mlx.")
280 (exclusion_set "2_1mm.b" "2_1mf.b, 2_1mlx.")
281 (exclusion_set "2_1mf.b" "2_1mlx.")
284 (exclusion_set "2_1mii." "2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\
285 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
286 (exclusion_set "2_1mmi." "2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\
287 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
288 (exclusion_set "2_1mfi." "2_1mmf., 2_1bbb., 2_1mbb., 2_1mib., 2_1mmb.,\
290 (exclusion_set "2_1mmf." "2_1bbb., 2_1mbb., 2_1mib., 2_1mmb., 2_1mfb.,\
292 (exclusion_set "2_1bbb." "2_1mbb., 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
293 (exclusion_set "2_1mbb." "2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
294 (exclusion_set "2_1mib." "2_1mmb., 2_1mfb., 2_1mlx.")
295 (exclusion_set "2_1mmb." "2_1mfb., 2_1mlx.")
296 (exclusion_set "2_1mfb." "2_1mlx.")
298 (final_presence_set "2_0mi.i" "2_0m.ii")
299 (final_presence_set "2_0mii." "2_0mi.i")
300 (final_presence_set "2_1mi.i" "2_1m.ii")
301 (final_presence_set "2_1mii." "2_1mi.i")
303 (final_presence_set "2_0mm.i" "2_0m.mi")
304 (final_presence_set "2_0mmi." "2_0mm.i")
305 (final_presence_set "2_1mm.i" "2_1m.mi")
306 (final_presence_set "2_1mmi." "2_1mm.i")
308 (final_presence_set "2_0mf.i" "2_0m.fi")
309 (final_presence_set "2_0mfi." "2_0mf.i")
310 (final_presence_set "2_1mf.i" "2_1m.fi")
311 (final_presence_set "2_1mfi." "2_1mf.i")
313 (final_presence_set "2_0mm.f" "2_0m.mf")
314 (final_presence_set "2_0mmf." "2_0mm.f")
315 (final_presence_set "2_1mm.f" "2_1m.mf")
316 (final_presence_set "2_1mmf." "2_1mm.f")
318 (final_presence_set "2_0bb.b" "2_0b.bb")
319 (final_presence_set "2_0bbb." "2_0bb.b")
320 (final_presence_set "2_1bb.b" "2_1b.bb")
321 (final_presence_set "2_1bbb." "2_1bb.b")
323 (final_presence_set "2_0mb.b" "2_0m.bb")
324 (final_presence_set "2_0mbb." "2_0mb.b")
325 (final_presence_set "2_1mb.b" "2_1m.bb")
326 (final_presence_set "2_1mbb." "2_1mb.b")
328 (final_presence_set "2_0mi.b" "2_0m.ib")
329 (final_presence_set "2_0mib." "2_0mi.b")
330 (final_presence_set "2_1mi.b" "2_1m.ib")
331 (final_presence_set "2_1mib." "2_1mi.b")
333 (final_presence_set "2_0mm.b" "2_0m.mb")
334 (final_presence_set "2_0mmb." "2_0mm.b")
335 (final_presence_set "2_1mm.b" "2_1m.mb")
336 (final_presence_set "2_1mmb." "2_1mm.b")
338 (final_presence_set "2_0mf.b" "2_0m.fb")
339 (final_presence_set "2_0mfb." "2_0mf.b")
340 (final_presence_set "2_1mf.b" "2_1m.fb")
341 (final_presence_set "2_1mfb." "2_1mf.b")
343 (final_presence_set "2_0mlx." "2_0m.lx")
344 (final_presence_set "2_1mlx." "2_1m.lx")
346 ;; The following reflects the dual issue bundle types table.
347 ;; We could place all possible combinations here because impossible
348 ;; combinations would go away by the subsequent constrains.
351 "2_0mmi.,2_0mfi.,2_0mmf.,2_0mib.,2_0mmb.,2_0mfb.,2_0mlx.")
352 (final_presence_set "2_1b.bb" "2_0mii.,2_0mmi.,2_0mfi.,2_0mmf.,2_0mlx.")
354 "2_1m.ii,2_1m.mi,2_1m.fi,2_1m.mf,2_1m.bb,2_1m.ib,2_1m.mb,2_1m.fb"
355 "2_0mii.,2_0mmi.,2_0mfi.,2_0mmf.,2_0mib.,2_0mmb.,2_0mfb.,2_0mlx.")
357 ;; Ports/units (nb means nop.b insn issued into given port):
359 "2_um0, 2_um1, 2_um2, 2_um3, 2_ui0, 2_ui1, 2_uf0, 2_uf1,\
360 2_ub0, 2_ub1, 2_ub2, 2_unb0, 2_unb1, 2_unb2" "two")
362 (exclusion_set "2_ub0" "2_unb0")
363 (exclusion_set "2_ub1" "2_unb1")
364 (exclusion_set "2_ub2" "2_unb2")
366 ;; The following rules are used to decrease number of alternatives.
367 ;; They are consequences of Itanium2 microarchitecture. They also
368 ;; describe the following rules mentioned in Itanium2
369 ;; microarchitecture: rules mentioned in Itanium2 microarchitecture:
370 ;; o "BBB/MBB: Always splits issue after either of these bundles".
371 ;; o "MIB BBB: Split issue after the first bundle in this pair".
373 "2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb."
374 "2_1m.ii,2_1m.mi,2_1m.fi,2_1m.mf,2_1b.bb,2_1m.bb,\
375 2_1m.ib,2_1m.mb,2_1m.fb,2_1m.lx")
376 (exclusion_set "2_0m.ib,2_0mi.b,2_0mib." "2_1b.bb")
378 ;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
379 ;;; B-slot contains a nop.b or a brp instruction".
380 ;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
381 ;;; nop.b, otherwise it disperses to B2".
383 "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\
384 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx"
385 "2_0mib. 2_ub2, 2_0mfb. 2_ub2, 2_0mmb. 2_ub2")
387 ;; This is necessary to start new processor cycle when we meet stop bit.
388 (define_cpu_unit "2_stop" "two")
390 "2_0m.ii,2_0mi.i,2_0mii.,2_0m.mi,2_0mm.i,2_0mmi.,2_0m.fi,2_0mf.i,2_0mfi.,\
391 2_0m.mf,2_0mm.f,2_0mmf.,2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb.,\
392 2_0m.ib,2_0mi.b,2_0mib.,2_0m.mb,2_0mm.b,2_0mmb.,2_0m.fb,2_0mf.b,2_0mfb.,\
394 2_1m.ii,2_1mi.i,2_1mii.,2_1m.mi,2_1mm.i,2_1mmi.,2_1m.fi,2_1mf.i,2_1mfi.,\
395 2_1m.mf,2_1mm.f,2_1mmf.,2_1b.bb,2_1bb.b,2_1bbb.,2_1m.bb,2_1mb.b,2_1mbb.,\
396 2_1m.ib,2_1mi.b,2_1mib.,2_1m.mb,2_1mm.b,2_1mmb.,2_1m.fb,2_1mf.b,2_1mfb.,\
400 ;; The issue logic can reorder M slot insns between different subtypes
401 ;; but cannot reorder insn within the same subtypes. The following
402 ;; constraint is enough to describe this.
403 (final_presence_set "2_um1" "2_um0")
404 (final_presence_set "2_um3" "2_um2")
406 ;; The insn in the 1st I slot of the two bundle issue group will issue
407 ;; to I0. The second I slot insn will issue to I1.
408 (final_presence_set "2_ui1" "2_ui0")
410 ;; For exceptions of I insns:
411 (define_cpu_unit "2_only_ui0" "two")
412 (final_absence_set "2_only_ui0" "2_ui1")
416 (define_reservation "2_M0"
417 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb|2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx\
418 |2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx\
419 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
420 +(2_um0|2_um1|2_um2|2_um3)")
422 (define_reservation "2_M1"
423 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
424 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
425 +(2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx)\
426 +(2_um0|2_um1|2_um2|2_um3)")
428 (define_reservation "2_M" "2_M0|2_M1")
430 (define_reservation "2_M0_only_um0"
431 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb|2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx\
432 |2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx\
433 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
436 (define_reservation "2_M1_only_um0"
437 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
438 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
439 +(2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx)\
442 (define_reservation "2_M_only_um0" "2_M0_only_um0|2_M1_only_um0")
444 (define_reservation "2_M0_only_um2"
445 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb|2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx\
446 |2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx\
447 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
450 (define_reservation "2_M1_only_um2"
451 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
452 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
453 +(2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx)\
456 (define_reservation "2_M_only_um2" "2_M0_only_um2|2_M1_only_um2")
458 (define_reservation "2_M0_only_um23"
459 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb|2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx\
460 |2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx\
461 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
464 (define_reservation "2_M1_only_um23"
465 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
466 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
467 +(2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx)\
470 (define_reservation "2_M_only_um23" "2_M0_only_um23|2_M1_only_um23")
472 (define_reservation "2_M0_only_um01"
473 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb|2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx\
474 |2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx\
475 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
478 (define_reservation "2_M1_only_um01"
479 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
480 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
481 +(2_1m.ii|2_1m.mi|2_1m.fi|2_1m.mf|2_1m.bb|2_1m.ib|2_1m.mb|2_1m.fb|2_1m.lx)\
484 (define_reservation "2_M_only_um01" "2_M0_only_um01|2_M1_only_um01")
486 ;; I instruction is dispersed to the lowest numbered I unit
487 ;; not already in use. Remember about possible splitting.
488 (define_reservation "2_I0"
489 "2_0mi.i+2_ui0|2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0\
490 |2_0mfi.+2_ui0|2_0mi.b+2_ui0|(2_1mi.i|2_1mi.b)+(2_ui0|2_ui1)\
491 |(2_1mii.|2_1mmi.|2_1mfi.)+(2_ui0|2_ui1)")
493 (define_reservation "2_I1"
494 "2_0m.ii+(2_um0|2_um1|2_um2|2_um3)+2_0mi.i+2_ui0\
495 |2_0mm.i+(2_um0|2_um1|2_um2|2_um3)+2_0mmi.+2_ui0\
496 |2_0mf.i+2_uf0+2_0mfi.+2_ui0\
497 |2_0m.ib+(2_um0|2_um1|2_um2|2_um3)+2_0mi.b+2_ui0\
498 |(2_1m.ii+2_1mi.i|2_1m.ib+2_1mi.b)+(2_um0|2_um1|2_um2|2_um3)+(2_ui0|2_ui1)\
499 |2_1mm.i+(2_um0|2_um1|2_um2|2_um3)+2_1mmi.+(2_ui0|2_ui1)\
500 |2_1mf.i+2_uf1+2_1mfi.+(2_ui0|2_ui1)")
502 (define_reservation "2_I" "2_I0|2_I1")
504 ;; "An F slot in the 1st bundle disperses to F0".
505 ;; "An F slot in the 2st bundle disperses to F1".
506 (define_reservation "2_F0"
507 "2_0mf.i+2_uf0|2_0mmf.+2_uf0|2_0mf.b+2_uf0\
508 |2_1mf.i+2_uf1|2_1mmf.+2_uf1|2_1mf.b+2_uf1")
510 (define_reservation "2_F1"
511 "(2_0m.fi+2_0mf.i|2_0mm.f+2_0mmf.|2_0m.fb+2_0mf.b)\
512 +(2_um0|2_um1|2_um2|2_um3)+2_uf0\
513 |(2_1m.fi+2_1mf.i|2_1mm.f+2_1mmf.|2_1m.fb+2_1mf.b)\
514 +(2_um0|2_um1|2_um2|2_um3)+2_uf1")
516 (define_reservation "2_F2"
517 "(2_0m.mf+2_0mm.f+2_0mmf.+2_uf0|2_1m.mf+2_1mm.f+2_1mmf.+2_uf1)\
518 +(2_um0|2_um1|2_um2|2_um3)+(2_um0|2_um1|2_um2|2_um3)\
519 |(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0\
520 |2_0mmf.+(2_um0|2_um1|2_um2|2_um3)\
521 |2_0mib.+2_unb0|2_0mmb.+2_unb0|2_0mfb.+2_unb0)\
522 +(2_1m.fi+2_1mf.i|2_1m.fb+2_1mf.b)+(2_um0|2_um1|2_um2|2_um3)+2_uf1")
524 (define_reservation "2_F" "2_F0|2_F1|2_F2")
526 ;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B
527 ;;; unit. That is, a B slot in 1st position is dispersed to B0. In the
528 ;;; 2nd position it is dispersed to B2".
529 (define_reservation "2_NB"
530 "2_0b.bb+2_unb0|2_0bb.b+2_unb1|2_0bbb.+2_unb2\
531 |2_0mb.b+2_unb1|2_0mbb.+2_unb2|2_0mib.+2_unb0\
532 |2_0mmb.+2_unb0|2_0mfb.+2_unb0\
533 |2_1b.bb+2_unb0|2_1bb.b+2_unb1
534 |2_1bbb.+2_unb2|2_1mb.b+2_unb1|2_1mbb.+2_unb2\
535 |2_1mib.+2_unb0|2_1mmb.+2_unb0|2_1mfb.+2_unb0")
537 (define_reservation "2_B0"
538 "2_0b.bb+2_ub0|2_0bb.b+2_ub1|2_0bbb.+2_ub2\
539 |2_0mb.b+2_ub1|2_0mbb.+2_ub2|2_0mib.+2_ub2\
540 |2_0mfb.+2_ub2|2_1b.bb+2_ub0|2_1bb.b+2_ub1\
541 |2_1bbb.+2_ub2|2_1mb.b+2_ub1\
542 |2_1mib.+2_ub2|2_1mmb.+2_ub2|2_1mfb.+2_ub2")
544 (define_reservation "2_B1"
545 "2_0m.bb+(2_um0|2_um1|2_um2|2_um3)+2_0mb.b+2_ub1\
546 |2_0mi.b+2_ui0+2_0mib.+2_ub2\
547 |2_0mm.b+(2_um0|2_um1|2_um2|2_um3)+2_0mmb.+2_ub2\
548 |2_0mf.b+2_uf0+2_0mfb.+2_ub2\
549 |(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0)\
551 |2_1m.bb+(2_um0|2_um1|2_um2|2_um3)+2_1mb.b+2_ub1\
552 |2_1mi.b+(2_ui0|2_ui1)+2_1mib.+2_ub2\
553 |2_1mm.b+(2_um0|2_um1|2_um2|2_um3)+2_1mmb.+2_ub2\
554 |2_1mf.b+2_uf1+2_1mfb.+2_ub2")
556 (define_reservation "2_B" "2_B0|2_B1")
558 ;; MLX bunlde uses ports equivalent to MFI bundles.
560 ;; For the MLI template, the I slot insn is always assigned to port I0
561 ;; if it is in the first bundle or it is assigned to port I1 if it is in
562 ;; the second bundle.
563 (define_reservation "2_L0" "2_0mlx.+2_ui0+2_uf0|2_1mlx.+2_ui1+2_uf1")
565 (define_reservation "2_L1"
566 "2_0m.lx+(2_um0|2_um1|2_um2|2_um3)+2_0mlx.+2_ui0+2_uf0\
567 |2_1m.lx+(2_um0|2_um1|2_um2|2_um3)+2_1mlx.+2_ui1+2_uf1")
569 (define_reservation "2_L2"
570 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
571 |2_0mib.+2_unb0|2_0mmb.+2_unb0|2_0mfb.+2_unb0)
572 +2_1m.lx+(2_um0|2_um1|2_um2|2_um3)+2_1mlx.+2_ui1+2_uf1")
574 (define_reservation "2_L" "2_L0|2_L1|2_L2")
576 ;; Should we describe that A insn in I slot can be issued into M
577 ;; ports? I think it is not necessary because of multipass
578 ;; scheduling. For example, the multipass scheduling could use
579 ;; MMI-MMI instead of MII-MII where the two last I slots contain A
580 ;; insns (even if the case is complicated by use-def conflicts).
582 ;; In any case we could describe it as
583 ;; (define_cpu_unit "2_ui1_0pres,2_ui1_1pres,2_ui1_2pres,2_ui1_3pres" "two")
584 ;; (final_presence_set "2_ui1_0pres,2_ui1_1pres,2_ui1_2pres,2_ui1_3pres"
586 ;; (define_reservation "b_A"
588 ;; |(2_1mi.i|2_1mii.|2_1mmi.|2_1mfi.|2_1mi.b)+(2_um0|2_um1|2_um2|2_um3)\
589 ;; +(2_ui1_0pres|2_ui1_1pres|2_ui1_2pres|2_ui1_3pres)")
591 (define_reservation "2_A" "2_M|2_I")
593 ;; We assume that there is no insn issued on the same cycle as the
595 (define_cpu_unit "2_empty" "two")
596 (exclusion_set "2_empty"
597 "2_0m.ii,2_0m.mi,2_0m.fi,2_0m.mf,2_0b.bb,2_0m.bb,2_0m.ib,2_0m.mb,2_0m.fb,\
601 "2_0m_bs, 2_0mi_bs, 2_0mm_bs, 2_0mf_bs, 2_0b_bs, 2_0bb_bs, 2_0mb_bs"
604 "2_1m_bs, 2_1mi_bs, 2_1mm_bs, 2_1mf_bs, 2_1b_bs, 2_1bb_bs, 2_1mb_bs"
607 (define_cpu_unit "2_m_cont, 2_mi_cont, 2_mm_cont, 2_mf_cont, 2_mb_cont,\
608 2_b_cont, 2_bb_cont" "two")
610 ;; For stop in the middle of the bundles.
611 (define_cpu_unit "2_m_stop, 2_m0_stop, 2_m1_stop, 2_0mmi_cont" "two")
612 (define_cpu_unit "2_mi_stop, 2_mi0_stop, 2_mi1_stop, 2_0mii_cont" "two")
614 (final_presence_set "2_0m_bs"
615 "2_0m.ii, 2_0m.mi, 2_0m.mf, 2_0m.fi, 2_0m.bb,\
616 2_0m.ib, 2_0m.fb, 2_0m.mb, 2_0m.lx")
617 (final_presence_set "2_1m_bs"
618 "2_1m.ii, 2_1m.mi, 2_1m.mf, 2_1m.fi, 2_1m.bb,\
619 2_1m.ib, 2_1m.fb, 2_1m.mb, 2_1m.lx")
620 (final_presence_set "2_0mi_bs" "2_0mi.i, 2_0mi.i")
621 (final_presence_set "2_1mi_bs" "2_1mi.i, 2_1mi.i")
622 (final_presence_set "2_0mm_bs" "2_0mm.i, 2_0mm.f, 2_0mm.b")
623 (final_presence_set "2_1mm_bs" "2_1mm.i, 2_1mm.f, 2_1mm.b")
624 (final_presence_set "2_0mf_bs" "2_0mf.i, 2_0mf.b")
625 (final_presence_set "2_1mf_bs" "2_1mf.i, 2_1mf.b")
626 (final_presence_set "2_0b_bs" "2_0b.bb")
627 (final_presence_set "2_1b_bs" "2_1b.bb")
628 (final_presence_set "2_0bb_bs" "2_0bb.b")
629 (final_presence_set "2_1bb_bs" "2_1bb.b")
630 (final_presence_set "2_0mb_bs" "2_0mb.b")
631 (final_presence_set "2_1mb_bs" "2_1mb.b")
633 (exclusion_set "2_0m_bs"
634 "2_0mi.i, 2_0mm.i, 2_0mm.f, 2_0mf.i, 2_0mb.b,\
635 2_0mi.b, 2_0mf.b, 2_0mm.b, 2_0mlx., 2_m0_stop")
636 (exclusion_set "2_1m_bs"
637 "2_1mi.i, 2_1mm.i, 2_1mm.f, 2_1mf.i, 2_1mb.b,\
638 2_1mi.b, 2_1mf.b, 2_1mm.b, 2_1mlx., 2_m1_stop")
639 (exclusion_set "2_0mi_bs" "2_0mii., 2_0mib., 2_mi0_stop")
640 (exclusion_set "2_1mi_bs" "2_1mii., 2_1mib., 2_mi1_stop")
641 (exclusion_set "2_0mm_bs" "2_0mmi., 2_0mmf., 2_0mmb.")
642 (exclusion_set "2_1mm_bs" "2_1mmi., 2_1mmf., 2_1mmb.")
643 (exclusion_set "2_0mf_bs" "2_0mfi., 2_0mfb.")
644 (exclusion_set "2_1mf_bs" "2_1mfi., 2_1mfb.")
645 (exclusion_set "2_0b_bs" "2_0bb.b")
646 (exclusion_set "2_1b_bs" "2_1bb.b")
647 (exclusion_set "2_0bb_bs" "2_0bbb.")
648 (exclusion_set "2_1bb_bs" "2_1bbb.")
649 (exclusion_set "2_0mb_bs" "2_0mbb.")
650 (exclusion_set "2_1mb_bs" "2_1mbb.")
653 "2_0m_bs, 2_0mi_bs, 2_0mm_bs, 2_0mf_bs, 2_0b_bs, 2_0bb_bs, 2_0mb_bs,
654 2_1m_bs, 2_1mi_bs, 2_1mm_bs, 2_1mf_bs, 2_1b_bs, 2_1bb_bs, 2_1mb_bs"
658 "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0mb.b,\
659 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx."
661 (final_presence_set "2_0mii., 2_0mib." "2_mi_cont")
662 (final_presence_set "2_0mmi., 2_0mmf., 2_0mmb." "2_mm_cont")
663 (final_presence_set "2_0mfi., 2_0mfb." "2_mf_cont")
664 (final_presence_set "2_0bb.b" "2_b_cont")
665 (final_presence_set "2_0bbb." "2_bb_cont")
666 (final_presence_set "2_0mbb." "2_mb_cont")
669 "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
670 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx"
671 "2_m_cont, 2_mi_cont, 2_mm_cont, 2_mf_cont,\
672 2_mb_cont, 2_b_cont, 2_bb_cont")
674 (exclusion_set "2_empty"
675 "2_m_cont,2_mi_cont,2_mm_cont,2_mf_cont,\
676 2_mb_cont,2_b_cont,2_bb_cont")
679 (final_presence_set "2_m0_stop" "2_0m.mi")
680 (final_presence_set "2_0mm.i" "2_0mmi_cont")
681 (exclusion_set "2_0mmi_cont"
682 "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
683 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
684 (exclusion_set "2_m0_stop" "2_0mm.i")
685 (final_presence_set "2_m1_stop" "2_1m.mi")
686 (exclusion_set "2_m1_stop" "2_1mm.i")
687 (final_presence_set "2_m_stop" "2_m0_stop, 2_m1_stop")
690 (final_presence_set "2_mi0_stop" "2_0mi.i")
691 (final_presence_set "2_0mii." "2_0mii_cont")
692 (exclusion_set "2_0mii_cont"
693 "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
694 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
695 (exclusion_set "2_mi0_stop" "2_0mii.")
696 (final_presence_set "2_mi1_stop" "2_1mi.i")
697 (exclusion_set "2_mi1_stop" "2_1mii.")
698 (final_presence_set "2_mi_stop" "2_mi0_stop, 2_mi1_stop")
701 "2_0m.ii,2_0mi.i,2_0mii.,2_0m.mi,2_0mm.i,2_0mmi.,2_0m.fi,2_0mf.i,2_0mfi.,\
702 2_0m.mf,2_0mm.f,2_0mmf.,2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb.,\
703 2_0m.ib,2_0mi.b,2_0mib.,2_0m.mb,2_0mm.b,2_0mmb.,2_0m.fb,2_0mf.b,2_0mfb.,\
705 2_1m.ii,2_1mi.i,2_1mii.,2_1m.mi,2_1mm.i,2_1mmi.,2_1m.fi,2_1mf.i,2_1mfi.,\
706 2_1m.mf,2_1mm.f,2_1mmf.,2_1b.bb,2_1bb.b,2_1bbb.,2_1m.bb,2_1mb.b,2_1mbb.,\
707 2_1m.ib,2_1mi.b,2_1mib.,2_1m.mb,2_1mm.b,2_1mmb.,2_1m.fb,2_1mf.b,2_1mfb.,\
709 "2_m0_stop,2_m1_stop,2_mi0_stop,2_mi1_stop")
711 (define_insn_reservation "2_stop_bit" 0
712 (and (and (eq_attr "cpu" "itanium2")
713 (eq_attr "itanium_class" "stop_bit"))
714 (eq (symbol_ref "bundling_p") (const_int 0)))
715 "2_stop|2_m0_stop|2_m1_stop|2_mi0_stop|2_mi1_stop")
717 (define_insn_reservation "2_br" 0
718 (and (and (eq_attr "cpu" "itanium2")
719 (eq_attr "itanium_class" "br"))
720 (eq (symbol_ref "bundling_p") (const_int 0))) "2_B")
721 (define_insn_reservation "2_scall" 0
722 (and (and (eq_attr "cpu" "itanium2")
723 (eq_attr "itanium_class" "scall"))
724 (eq (symbol_ref "bundling_p") (const_int 0))) "2_B")
725 (define_insn_reservation "2_fcmp" 2
726 (and (and (eq_attr "cpu" "itanium2")
727 (eq_attr "itanium_class" "fcmp"))
728 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
729 (define_insn_reservation "2_fcvtfx" 4
730 (and (and (eq_attr "cpu" "itanium2")
731 (eq_attr "itanium_class" "fcvtfx"))
732 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
733 (define_insn_reservation "2_fld" 6
734 (and (and (eq_attr "cpu" "itanium2")
735 (eq_attr "itanium_class" "fld"))
736 (eq (symbol_ref "bundling_p") (const_int 0))) "2_M")
737 (define_insn_reservation "2_fldp" 6
738 (and (and (eq_attr "cpu" "itanium2")
739 (eq_attr "itanium_class" "fldp"))
740 (eq (symbol_ref "bundling_p") (const_int 0)))
742 (define_insn_reservation "2_fmac" 4
743 (and (and (eq_attr "cpu" "itanium2")
744 (eq_attr "itanium_class" "fmac"))
745 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
746 (define_insn_reservation "2_fmisc" 4
747 (and (and (eq_attr "cpu" "itanium2")
748 (eq_attr "itanium_class" "fmisc"))
749 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
751 ;; There is only one insn `mov = ar.bsp' for frar_i:
753 (define_insn_reservation "2_frar_i" 13
754 (and (and (eq_attr "cpu" "itanium2")
755 (eq_attr "itanium_class" "frar_i"))
756 (eq (symbol_ref "bundling_p") (const_int 0)))
758 ;; There is only two insns `mov = ar.unat' or `mov = ar.ccv' for frar_m:
760 (define_insn_reservation "2_frar_m" 6
761 (and (and (eq_attr "cpu" "itanium2")
762 (eq_attr "itanium_class" "frar_m"))
763 (eq (symbol_ref "bundling_p") (const_int 0)))
765 (define_insn_reservation "2_frbr" 2
766 (and (and (eq_attr "cpu" "itanium2")
767 (eq_attr "itanium_class" "frbr"))
768 (eq (symbol_ref "bundling_p") (const_int 0)))
770 (define_insn_reservation "2_frfr" 5
771 (and (and (eq_attr "cpu" "itanium2")
772 (eq_attr "itanium_class" "frfr"))
773 (eq (symbol_ref "bundling_p") (const_int 0)))
775 (define_insn_reservation "2_frpr" 2
776 (and (and (eq_attr "cpu" "itanium2")
777 (eq_attr "itanium_class" "frpr"))
778 (eq (symbol_ref "bundling_p") (const_int 0)))
781 (define_insn_reservation "2_ialu" 1
782 (and (and (eq_attr "cpu" "itanium2")
783 (eq_attr "itanium_class" "ialu"))
784 (eq (symbol_ref "bundling_p") (const_int 0)))
786 (define_insn_reservation "2_icmp" 1
787 (and (and (eq_attr "cpu" "itanium2")
788 (eq_attr "itanium_class" "icmp"))
789 (eq (symbol_ref "bundling_p") (const_int 0))) "2_A")
790 (define_insn_reservation "2_ilog" 1
791 (and (and (eq_attr "cpu" "itanium2")
792 (eq_attr "itanium_class" "ilog"))
793 (eq (symbol_ref "bundling_p") (const_int 0))) "2_A")
794 (define_insn_reservation "2_mmalua" 2
795 (and (and (eq_attr "cpu" "itanium2")
796 (eq_attr "itanium_class" "mmalua"))
797 (eq (symbol_ref "bundling_p") (const_int 0))) "2_A")
799 (define_insn_reservation "2_ishf" 1
800 (and (and (eq_attr "cpu" "itanium2")
801 (eq_attr "itanium_class" "ishf"))
802 (eq (symbol_ref "bundling_p") (const_int 0)))
804 (define_insn_reservation "2_ld" 1
805 (and (and (eq_attr "cpu" "itanium2")
806 (eq_attr "itanium_class" "ld"))
807 (eq (symbol_ref "bundling_p") (const_int 0)))
809 (define_insn_reservation "2_long_i" 1
810 (and (and (eq_attr "cpu" "itanium2")
811 (eq_attr "itanium_class" "long_i"))
812 (eq (symbol_ref "bundling_p") (const_int 0))) "2_L")
814 (define_insn_reservation "2_mmmul" 2
815 (and (and (eq_attr "cpu" "itanium2")
816 (eq_attr "itanium_class" "mmmul"))
817 (eq (symbol_ref "bundling_p") (const_int 0)))
820 (define_insn_reservation "2_mmshf" 2
821 (and (and (eq_attr "cpu" "itanium2")
822 (eq_attr "itanium_class" "mmshf"))
823 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I")
825 (define_insn_reservation "2_mmshfi" 1
826 (and (and (eq_attr "cpu" "itanium2")
827 (eq_attr "itanium_class" "mmshfi"))
828 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I")
830 ;; Now we have only one insn (flushrs) of such class. We assume that flushrs
831 ;; is the 1st syllable of the bundle after stop bit.
832 (define_insn_reservation "2_rse_m" 0
833 (and (and (eq_attr "cpu" "itanium2")
834 (eq_attr "itanium_class" "rse_m"))
835 (eq (symbol_ref "bundling_p") (const_int 0)))
836 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb\
837 |2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx)+2_um0")
838 (define_insn_reservation "2_sem" 0
839 (and (and (eq_attr "cpu" "itanium2")
840 (eq_attr "itanium_class" "sem"))
841 (eq (symbol_ref "bundling_p") (const_int 0)))
844 (define_insn_reservation "2_stf" 1
845 (and (and (eq_attr "cpu" "itanium2")
846 (eq_attr "itanium_class" "stf"))
847 (eq (symbol_ref "bundling_p") (const_int 0)))
849 (define_insn_reservation "2_st" 1
850 (and (and (eq_attr "cpu" "itanium2")
851 (eq_attr "itanium_class" "st"))
852 (eq (symbol_ref "bundling_p") (const_int 0)))
854 (define_insn_reservation "2_syst_m0" 0
855 (and (and (eq_attr "cpu" "itanium2")
856 (eq_attr "itanium_class" "syst_m0"))
857 (eq (symbol_ref "bundling_p") (const_int 0)))
859 (define_insn_reservation "2_syst_m" 0
860 (and (and (eq_attr "cpu" "itanium2")
861 (eq_attr "itanium_class" "syst_m"))
862 (eq (symbol_ref "bundling_p") (const_int 0)))
865 (define_insn_reservation "2_tbit" 1
866 (and (and (eq_attr "cpu" "itanium2")
867 (eq_attr "itanium_class" "tbit"))
868 (eq (symbol_ref "bundling_p") (const_int 0)))
871 ;; There is only ony insn `mov ar.pfs =' for toar_i:
872 (define_insn_reservation "2_toar_i" 0
873 (and (and (eq_attr "cpu" "itanium2")
874 (eq_attr "itanium_class" "toar_i"))
875 (eq (symbol_ref "bundling_p") (const_int 0)))
877 ;; There are only ony 2 insns `mov ar.ccv =' and `mov ar.unat =' for toar_m:
879 (define_insn_reservation "2_toar_m" 5
880 (and (and (eq_attr "cpu" "itanium2")
881 (eq_attr "itanium_class" "toar_m"))
882 (eq (symbol_ref "bundling_p") (const_int 0)))
885 (define_insn_reservation "2_tobr" 1
886 (and (and (eq_attr "cpu" "itanium2")
887 (eq_attr "itanium_class" "tobr"))
888 (eq (symbol_ref "bundling_p") (const_int 0)))
890 (define_insn_reservation "2_tofr" 5
891 (and (and (eq_attr "cpu" "itanium2")
892 (eq_attr "itanium_class" "tofr"))
893 (eq (symbol_ref "bundling_p") (const_int 0)))
896 (define_insn_reservation "2_topr" 1
897 (and (and (eq_attr "cpu" "itanium2")
898 (eq_attr "itanium_class" "topr"))
899 (eq (symbol_ref "bundling_p") (const_int 0)))
902 (define_insn_reservation "2_xmpy" 4
903 (and (and (eq_attr "cpu" "itanium2")
904 (eq_attr "itanium_class" "xmpy"))
905 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
907 (define_insn_reservation "2_xtd" 1
908 (and (and (eq_attr "cpu" "itanium2")
909 (eq_attr "itanium_class" "xtd"))
910 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I")
912 (define_insn_reservation "2_chk_s" 0
913 (and (and (eq_attr "cpu" "itanium2")
914 (eq_attr "itanium_class" "chk_s"))
915 (eq (symbol_ref "bundling_p") (const_int 0)))
917 (define_insn_reservation "2_lfetch" 0
918 (and (and (eq_attr "cpu" "itanium2")
919 (eq_attr "itanium_class" "lfetch"))
920 (eq (symbol_ref "bundling_p") (const_int 0)))
923 (define_insn_reservation "2_nop_m" 0
924 (and (and (eq_attr "cpu" "itanium2")
925 (eq_attr "itanium_class" "nop_m"))
926 (eq (symbol_ref "bundling_p") (const_int 0))) "2_M0")
927 (define_insn_reservation "2_nop_b" 0
928 (and (and (eq_attr "cpu" "itanium2")
929 (eq_attr "itanium_class" "nop_b"))
930 (eq (symbol_ref "bundling_p") (const_int 0))) "2_NB")
931 (define_insn_reservation "2_nop_i" 0
932 (and (and (eq_attr "cpu" "itanium2")
933 (eq_attr "itanium_class" "nop_i"))
934 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I0")
935 (define_insn_reservation "2_nop_f" 0
936 (and (and (eq_attr "cpu" "itanium2")
937 (eq_attr "itanium_class" "nop_f"))
938 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F0")
939 (define_insn_reservation "2_nop_x" 0
940 (and (and (eq_attr "cpu" "itanium2")
941 (eq_attr "itanium_class" "nop_x"))
942 (eq (symbol_ref "bundling_p") (const_int 0))) "2_L0")
944 (define_insn_reservation "2_unknown" 1
945 (and (and (eq_attr "cpu" "itanium2")
946 (eq_attr "itanium_class" "unknown"))
947 (eq (symbol_ref "bundling_p") (const_int 0))) "2_empty")
949 (define_insn_reservation "2_nop" 0
950 (and (and (eq_attr "cpu" "itanium2")
951 (eq_attr "itanium_class" "nop"))
952 (eq (symbol_ref "bundling_p") (const_int 0)))
953 "2_M0|2_NB|2_I0|2_F0")
955 (define_insn_reservation "2_ignore" 0
956 (and (and (eq_attr "cpu" "itanium2")
957 (eq_attr "itanium_class" "ignore"))
958 (eq (symbol_ref "bundling_p") (const_int 0))) "nothing")
960 (define_cpu_unit "2_m_cont_only, 2_b_cont_only" "two")
961 (define_cpu_unit "2_mi_cont_only, 2_mm_cont_only, 2_mf_cont_only" "two")
962 (define_cpu_unit "2_mb_cont_only, 2_bb_cont_only" "two")
964 (final_presence_set "2_m_cont_only" "2_m_cont")
965 (exclusion_set "2_m_cont_only"
966 "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0mb.b,\
967 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
969 (final_presence_set "2_b_cont_only" "2_b_cont")
970 (exclusion_set "2_b_cont_only" "2_0bb.b")
972 (final_presence_set "2_mi_cont_only" "2_mi_cont")
973 (exclusion_set "2_mi_cont_only" "2_0mii., 2_0mib.")
975 (final_presence_set "2_mm_cont_only" "2_mm_cont")
976 (exclusion_set "2_mm_cont_only" "2_0mmi., 2_0mmf., 2_0mmb.")
978 (final_presence_set "2_mf_cont_only" "2_mf_cont")
979 (exclusion_set "2_mf_cont_only" "2_0mfi., 2_0mfb.")
981 (final_presence_set "2_mb_cont_only" "2_mb_cont")
982 (exclusion_set "2_mb_cont_only" "2_0mbb.")
984 (final_presence_set "2_bb_cont_only" "2_bb_cont")
985 (exclusion_set "2_bb_cont_only" "2_0bbb.")
987 (define_insn_reservation "2_pre_cycle" 0
988 (and (and (eq_attr "cpu" "itanium2")
989 (eq_attr "itanium_class" "pre_cycle"))
990 (eq (symbol_ref "bundling_p") (const_int 0)))
993 ;;(define_insn_reservation "2_pre_cycle" 0
994 ;; (and (and (eq_attr "cpu" "itanium2")
995 ;; (eq_attr "itanium_class" "pre_cycle"))
996 ;; (eq (symbol_ref "bundling_p") (const_int 0)))
997 ;; "(2_0m_bs, 2_m_cont) \
998 ;; | (2_0mi_bs, (2_mi_cont|nothing)) \
999 ;; | (2_0mm_bs, 2_mm_cont) \
1000 ;; | (2_0mf_bs, (2_mf_cont|nothing)) \
1001 ;; | (2_0b_bs, (2_b_cont|nothing)) \
1002 ;; | (2_0bb_bs, (2_bb_cont|nothing)) \
1003 ;; | (2_0mb_bs, (2_mb_cont|nothing)) \
1004 ;; | (2_1m_bs, 2_m_cont) \
1005 ;; | (2_1mi_bs, (2_mi_cont|nothing)) \
1006 ;; | (2_1mm_bs, 2_mm_cont) \
1007 ;; | (2_1mf_bs, (2_mf_cont|nothing)) \
1008 ;; | (2_1b_bs, (2_b_cont|nothing)) \
1009 ;; | (2_1bb_bs, (2_bb_cont|nothing)) \
1010 ;; | (2_1mb_bs, (2_mb_cont|nothing)) \
1011 ;; | (2_m_cont_only, (2_m_cont|nothing)) \
1012 ;; | (2_b_cont_only, (2_b_cont|nothing)) \
1013 ;; | (2_mi_cont_only, (2_mi_cont|nothing)) \
1014 ;; | (2_mm_cont_only, (2_mm_cont|nothing)) \
1015 ;; | (2_mf_cont_only, (2_mf_cont|nothing)) \
1016 ;; | (2_mb_cont_only, (2_mb_cont|nothing)) \
1017 ;; | (2_bb_cont_only, (2_bb_cont|nothing)) \
1018 ;; | (2_m_stop, (2_0mmi_cont|nothing)) \
1019 ;; | (2_mi_stop, (2_0mii_cont|nothing))")
1023 (define_bypass 1 "2_fcmp" "2_br,2_scall")
1024 (define_bypass 0 "2_icmp" "2_br,2_scall")
1025 (define_bypass 0 "2_tbit" "2_br,2_scall")
1026 (define_bypass 2 "2_ld" "2_ld" "ia64_ld_address_bypass_p")
1027 (define_bypass 2 "2_ld" "2_st" "ia64_st_address_bypass_p")
1028 (define_bypass 2 "2_ld" "2_mmalua,2_mmmul,2_mmshf")
1029 (define_bypass 3 "2_ilog" "2_mmalua,2_mmmul,2_mmshf")
1030 (define_bypass 3 "2_ialu" "2_mmalua,2_mmmul,2_mmshf")
1031 (define_bypass 3 "2_mmalua,2_mmmul,2_mmshf" "2_ialu,2_ilog,2_ishf,2_st,2_ld")
1032 (define_bypass 6 "2_tofr" "2_frfr,2_stf")
1033 (define_bypass 7 "2_fmac" "2_frfr,2_stf")
1035 ;; We don't use here fcmp because scall may be predicated.
1036 (define_bypass 0 "2_fcvtfx,2_fld,2_fmac,2_fmisc,2_frar_i,2_frar_m,\
1037 2_frbr,2_frfr,2_frpr,2_ialu,2_ilog,2_ishf,2_ld,2_long_i,\
1038 2_mmalua,2_mmmul,2_mmshf,2_mmshfi,2_toar_m,2_tofr,\
1042 (define_bypass 0 "2_unknown,2_ignore,2_stop_bit,2_br,2_fcmp,2_fcvtfx,2_fld,\
1043 2_fmac,2_fmisc,2_frar_i,2_frar_m,2_frbr,2_frfr,2_frpr,\
1044 2_ialu,2_icmp,2_ilog,2_ishf,2_ld,2_chk_s,2_long_i,\
1045 2_mmalua,2_mmmul,2_mmshf,2_mmshfi,2_nop,2_nop_b,2_nop_f,\
1046 2_nop_i,2_nop_m,2_nop_x,2_rse_m,2_scall,2_sem,2_stf,2_st,\
1047 2_syst_m0,2_syst_m,2_tbit,2_toar_i,2_toar_m,2_tobr,2_tofr,\
1048 2_topr,2_xmpy,2_xtd,2_lfetch" "2_ignore")
1054 (define_automaton "twob")
1056 ;; Pseudo units for quicker searching for position in two packet window. */
1057 (define_query_cpu_unit "2_1,2_2,2_3,2_4,2_5,2_6" "twob")
1059 ;; All possible combinations of bundles/syllables
1061 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1062 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx" "twob")
1064 "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\
1065 2b_0mi.b, 2b_0mm.b, 2b_0mf.b" "twob")
1066 (define_query_cpu_unit
1067 "2b_0mii., 2b_0mmi., 2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\
1068 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx." "twob")
1071 "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\
1072 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx" "twob")
1074 "2b_1mi.i, 2b_1mm.i, 2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\
1075 2b_1mi.b, 2b_1mm.b, 2b_1mf.b" "twob")
1076 (define_query_cpu_unit
1077 "2b_1mii., 2b_1mmi., 2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\
1078 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx." "twob")
1081 (exclusion_set "2b_0m.ii"
1082 "2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1083 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1084 (exclusion_set "2b_0m.mi"
1085 "2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb, 2b_0m.ib,\
1086 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1087 (exclusion_set "2b_0m.fi"
1088 "2b_0m.mf, 2b_0b.bb, 2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1089 (exclusion_set "2b_0m.mf"
1090 "2b_0b.bb, 2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1091 (exclusion_set "2b_0b.bb" "2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1092 (exclusion_set "2b_0m.bb" "2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1093 (exclusion_set "2b_0m.ib" "2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1094 (exclusion_set "2b_0m.mb" "2b_0m.fb, 2b_0m.lx")
1095 (exclusion_set "2b_0m.fb" "2b_0m.lx")
1098 (exclusion_set "2b_0mi.i"
1099 "2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\
1100 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1101 (exclusion_set "2b_0mm.i"
1102 "2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\
1103 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1104 (exclusion_set "2b_0mf.i"
1105 "2b_0mm.f, 2b_0bb.b, 2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1106 (exclusion_set "2b_0mm.f"
1107 "2b_0bb.b, 2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1108 (exclusion_set "2b_0bb.b" "2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1109 (exclusion_set "2b_0mb.b" "2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1110 (exclusion_set "2b_0mi.b" "2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1111 (exclusion_set "2b_0mm.b" "2b_0mf.b, 2b_0mlx.")
1112 (exclusion_set "2b_0mf.b" "2b_0mlx.")
1115 (exclusion_set "2b_0mii."
1116 "2b_0mmi., 2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\
1117 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1118 (exclusion_set "2b_0mmi."
1119 "2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\
1120 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1121 (exclusion_set "2b_0mfi."
1122 "2b_0mmf., 2b_0bbb., 2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1123 (exclusion_set "2b_0mmf."
1124 "2b_0bbb., 2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1125 (exclusion_set "2b_0bbb." "2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1126 (exclusion_set "2b_0mbb." "2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1127 (exclusion_set "2b_0mib." "2b_0mmb., 2b_0mfb., 2b_0mlx.")
1128 (exclusion_set "2b_0mmb." "2b_0mfb., 2b_0mlx.")
1129 (exclusion_set "2b_0mfb." "2b_0mlx.")
1132 (exclusion_set "2b_1m.ii"
1133 "2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\
1134 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1135 (exclusion_set "2b_1m.mi"
1136 "2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb, 2b_1m.ib,\
1137 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1138 (exclusion_set "2b_1m.fi"
1139 "2b_1m.mf, 2b_1b.bb, 2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1140 (exclusion_set "2b_1m.mf"
1141 "2b_1b.bb, 2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1142 (exclusion_set "2b_1b.bb" "2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1143 (exclusion_set "2b_1m.bb" "2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1144 (exclusion_set "2b_1m.ib" "2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1145 (exclusion_set "2b_1m.mb" "2b_1m.fb, 2b_1m.lx")
1146 (exclusion_set "2b_1m.fb" "2b_1m.lx")
1149 (exclusion_set "2b_1mi.i"
1150 "2b_1mm.i, 2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\
1151 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1152 (exclusion_set "2b_1mm.i"
1153 "2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\
1154 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1155 (exclusion_set "2b_1mf.i"
1156 "2b_1mm.f, 2b_1bb.b, 2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1157 (exclusion_set "2b_1mm.f"
1158 "2b_1bb.b, 2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1159 (exclusion_set "2b_1bb.b" "2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1160 (exclusion_set "2b_1mb.b" "2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1161 (exclusion_set "2b_1mi.b" "2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1162 (exclusion_set "2b_1mm.b" "2b_1mf.b, 2b_1mlx.")
1163 (exclusion_set "2b_1mf.b" "2b_1mlx.")
1166 (exclusion_set "2b_1mii."
1167 "2b_1mmi., 2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\
1168 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1169 (exclusion_set "2b_1mmi."
1170 "2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\
1171 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1172 (exclusion_set "2b_1mfi."
1173 "2b_1mmf., 2b_1bbb., 2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1174 (exclusion_set "2b_1mmf."
1175 "2b_1bbb., 2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1176 (exclusion_set "2b_1bbb." "2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1177 (exclusion_set "2b_1mbb." "2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1178 (exclusion_set "2b_1mib." "2b_1mmb., 2b_1mfb., 2b_1mlx.")
1179 (exclusion_set "2b_1mmb." "2b_1mfb., 2b_1mlx.")
1180 (exclusion_set "2b_1mfb." "2b_1mlx.")
1182 (final_presence_set "2b_0mi.i" "2b_0m.ii")
1183 (final_presence_set "2b_0mii." "2b_0mi.i")
1184 (final_presence_set "2b_1mi.i" "2b_1m.ii")
1185 (final_presence_set "2b_1mii." "2b_1mi.i")
1187 (final_presence_set "2b_0mm.i" "2b_0m.mi")
1188 (final_presence_set "2b_0mmi." "2b_0mm.i")
1189 (final_presence_set "2b_1mm.i" "2b_1m.mi")
1190 (final_presence_set "2b_1mmi." "2b_1mm.i")
1192 (final_presence_set "2b_0mf.i" "2b_0m.fi")
1193 (final_presence_set "2b_0mfi." "2b_0mf.i")
1194 (final_presence_set "2b_1mf.i" "2b_1m.fi")
1195 (final_presence_set "2b_1mfi." "2b_1mf.i")
1197 (final_presence_set "2b_0mm.f" "2b_0m.mf")
1198 (final_presence_set "2b_0mmf." "2b_0mm.f")
1199 (final_presence_set "2b_1mm.f" "2b_1m.mf")
1200 (final_presence_set "2b_1mmf." "2b_1mm.f")
1202 (final_presence_set "2b_0bb.b" "2b_0b.bb")
1203 (final_presence_set "2b_0bbb." "2b_0bb.b")
1204 (final_presence_set "2b_1bb.b" "2b_1b.bb")
1205 (final_presence_set "2b_1bbb." "2b_1bb.b")
1207 (final_presence_set "2b_0mb.b" "2b_0m.bb")
1208 (final_presence_set "2b_0mbb." "2b_0mb.b")
1209 (final_presence_set "2b_1mb.b" "2b_1m.bb")
1210 (final_presence_set "2b_1mbb." "2b_1mb.b")
1212 (final_presence_set "2b_0mi.b" "2b_0m.ib")
1213 (final_presence_set "2b_0mib." "2b_0mi.b")
1214 (final_presence_set "2b_1mi.b" "2b_1m.ib")
1215 (final_presence_set "2b_1mib." "2b_1mi.b")
1217 (final_presence_set "2b_0mm.b" "2b_0m.mb")
1218 (final_presence_set "2b_0mmb." "2b_0mm.b")
1219 (final_presence_set "2b_1mm.b" "2b_1m.mb")
1220 (final_presence_set "2b_1mmb." "2b_1mm.b")
1222 (final_presence_set "2b_0mf.b" "2b_0m.fb")
1223 (final_presence_set "2b_0mfb." "2b_0mf.b")
1224 (final_presence_set "2b_1mf.b" "2b_1m.fb")
1225 (final_presence_set "2b_1mfb." "2b_1mf.b")
1227 (final_presence_set "2b_0mlx." "2b_0m.lx")
1228 (final_presence_set "2b_1mlx." "2b_1m.lx")
1230 ;; See the corresponding comment in non-bundling section above.
1233 "2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mib.,2b_0mmb.,2b_0mfb.,2b_0mlx.")
1234 (final_presence_set "2b_1b.bb" "2b_0mii.,2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mlx.")
1236 "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1m.bb,2b_1m.ib,2b_1m.mb,2b_1m.fb"
1237 "2b_0mii.,2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mib.,2b_0mmb.,2b_0mfb.,2b_0mlx.")
1239 ;; Ports/units (nb means nop.b insn issued into given port):
1241 "2b_um0, 2b_um1, 2b_um2, 2b_um3, 2b_ui0, 2b_ui1, 2b_uf0, 2b_uf1,\
1242 2b_ub0, 2b_ub1, 2b_ub2, 2b_unb0, 2b_unb1, 2b_unb2" "twob")
1244 (exclusion_set "2b_ub0" "2b_unb0")
1245 (exclusion_set "2b_ub1" "2b_unb1")
1246 (exclusion_set "2b_ub2" "2b_unb2")
1248 ;; The following rules are used to decrease number of alternatives.
1249 ;; They are consequences of Itanium2 microarchitecture. They also
1250 ;; describe the following rules mentioned in Itanium2
1251 ;; microarchitecture: rules mentioned in Itanium2 microarchitecture:
1252 ;; o "BBB/MBB: Always splits issue after either of these bundles".
1253 ;; o "MIB BBB: Split issue after the first bundle in this pair".
1255 "2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb."
1256 "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1b.bb,2b_1m.bb,\
1257 2b_1m.ib,2b_1m.mb,2b_1m.fb,2b_1m.lx")
1258 (exclusion_set "2b_0m.ib,2b_0mi.b,2b_0mib." "2b_1b.bb")
1260 ;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
1261 ;;; B-slot contains a nop.b or a brp instruction".
1262 ;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
1263 ;;; nop.b, otherwise it disperses to B2".
1265 "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\
1266 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx"
1267 "2b_0mib. 2b_ub2, 2b_0mfb. 2b_ub2, 2b_0mmb. 2b_ub2")
1269 ;; This is necessary to start new processor cycle when we meet stop bit.
1270 (define_cpu_unit "2b_stop" "twob")
1272 "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\
1273 2b_0m.fi,2b_0mf.i,2b_0mfi.,\
1274 2b_0m.mf,2b_0mm.f,2b_0mmf.,2b_0b.bb,2b_0bb.b,2b_0bbb.,\
1275 2b_0m.bb,2b_0mb.b,2b_0mbb.,\
1276 2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\
1277 2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \
1278 2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\
1279 2b_1m.fi,2b_1mf.i,2b_1mfi.,\
1280 2b_1m.mf,2b_1mm.f,2b_1mmf.,2b_1b.bb,2b_1bb.b,2b_1bbb.,\
1281 2b_1m.bb,2b_1mb.b,2b_1mbb.,\
1282 2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\
1283 2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx."
1286 ;; The issue logic can reorder M slot insns between different subtypes
1287 ;; but cannot reorder insn within the same subtypes. The following
1288 ;; constraint is enough to describe this.
1289 (final_presence_set "2b_um1" "2b_um0")
1290 (final_presence_set "2b_um3" "2b_um2")
1292 ;; The insn in the 1st I slot of the two bundle issue group will issue
1293 ;; to I0. The second I slot insn will issue to I1.
1294 (final_presence_set "2b_ui1" "2b_ui0")
1296 ;; For exceptions of I insns:
1297 (define_cpu_unit "2b_only_ui0" "twob")
1298 (final_absence_set "2b_only_ui0" "2b_ui1")
1302 (define_reservation "2b_M"
1303 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1304 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1305 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1306 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1307 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1308 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1309 +(2b_um0|2b_um1|2b_um2|2b_um3)")
1311 (define_reservation "2b_M_only_um0"
1312 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1313 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1314 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1315 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1316 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1317 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1320 (define_reservation "2b_M_only_um2"
1321 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1322 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1323 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1324 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1325 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1326 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1329 (define_reservation "2b_M_only_um01"
1330 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1331 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1332 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1333 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1334 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1335 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1338 (define_reservation "2b_M_only_um23"
1339 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1340 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1341 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1342 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1343 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1344 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1347 ;; I instruction is dispersed to the lowest numbered I unit
1348 ;; not already in use. Remember about possible splitting.
1349 (define_reservation "2b_I"
1350 "2b_0mi.i+2_2+2b_ui0|2b_0mii.+2_3+(2b_ui0|2b_ui1)|2b_0mmi.+2_3+2b_ui0\
1351 |2b_0mfi.+2_3+2b_ui0|2b_0mi.b+2_2+2b_ui0\
1352 |(2b_1mi.i+2_5|2b_1mi.b+2_5)+(2b_ui0|2b_ui1)\
1353 |(2b_1mii.|2b_1mmi.|2b_1mfi.)+2_6+(2b_ui0|2b_ui1)")
1355 ;; "An F slot in the 1st bundle disperses to F0".
1356 ;; "An F slot in the 2st bundle disperses to F1".
1357 (define_reservation "2b_F"
1358 "2b_0mf.i+2_2+2b_uf0|2b_0mmf.+2_3+2b_uf0|2b_0mf.b+2_2+2b_uf0\
1359 |2b_1mf.i+2_5+2b_uf1|2b_1mmf.+2_6+2b_uf1|2b_1mf.b+2_5+2b_uf1")
1361 ;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B
1362 ;;; unit. That is, a B slot in 1st position is dispersed to B0. In the
1363 ;;; 2nd position it is dispersed to B2".
1364 (define_reservation "2b_NB"
1365 "2b_0b.bb+2_1+2b_unb0|2b_0bb.b+2_2+2b_unb1|2b_0bbb.+2_3+2b_unb2\
1366 |2b_0mb.b+2_2+2b_unb1|2b_0mbb.+2_3+2b_unb2\
1367 |2b_0mib.+2_3+2b_unb0|2b_0mmb.+2_3+2b_unb0|2b_0mfb.+2_3+2b_unb0\
1368 |2b_1b.bb+2_4+2b_unb0|2b_1bb.b+2_5+2b_unb1\
1369 |2b_1bbb.+2_6+2b_unb2|2b_1mb.b+2_5+2b_unb1|2b_1mbb.+2_6+2b_unb2\
1370 |2b_1mib.+2_6+2b_unb0|2b_1mmb.+2_6+2b_unb0|2b_1mfb.+2_6+2b_unb0")
1372 (define_reservation "2b_B"
1373 "2b_0b.bb+2_1+2b_ub0|2b_0bb.b+2_2+2b_ub1|2b_0bbb.+2_3+2b_ub2\
1374 |2b_0mb.b+2_2+2b_ub1|2b_0mbb.+2_3+2b_ub2|2b_0mib.+2_3+2b_ub2\
1375 |2b_0mfb.+2_3+2b_ub2|2b_1b.bb+2_4+2b_ub0|2b_1bb.b+2_5+2b_ub1\
1376 |2b_1bbb.+2_6+2b_ub2|2b_1mb.b+2_5+2b_ub1\
1377 |2b_1mib.+2_6+2b_ub2|2b_1mmb.+2_6+2b_ub2|2b_1mfb.+2_6+2b_ub2")
1379 ;; For the MLI template, the I slot insn is always assigned to port I0
1380 ;; if it is in the first bundle or it is assigned to port I1 if it is in
1381 ;; the second bundle.
1382 (define_reservation "2b_L"
1383 "2b_0mlx.+2_3+2b_ui0+2b_uf0|2b_1mlx.+2_6+2b_ui1+2b_uf1")
1385 ;; Should we describe that A insn in I slot can be issued into M
1386 ;; ports? I think it is not necessary because of multipass
1387 ;; scheduling. For example, the multipass scheduling could use
1388 ;; MMI-MMI instead of MII-MII where the two last I slots contain A
1389 ;; insns (even if the case is complicated by use-def conflicts).
1391 ;; In any case we could describe it as
1392 ;; (define_cpu_unit "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres"
1394 ;; (final_presence_set "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres"
1396 ;; (define_reservation "b_A"
1398 ;; |(2b_1mi.i+2_5|2b_1mii.+2_6|2b_1mmi.+2_6|2b_1mfi.+2_6|2b_1mi.b+2_5)\
1399 ;; +(2b_um0|2b_um1|2b_um2|2b_um3)\
1400 ;; +(2b_ui1_0pres|2b_ui1_1pres|2b_ui1_2pres|2b_ui1_3pres)")
1402 (define_reservation "2b_A" "2b_M|2b_I")
1404 ;; We assume that there is no insn issued on the same cycle as the
1406 (define_cpu_unit "2b_empty" "twob")
1407 (exclusion_set "2b_empty"
1408 "2b_0m.ii,2b_0m.mi,2b_0m.fi,2b_0m.mf,2b_0b.bb,2b_0m.bb,\
1409 2b_0m.ib,2b_0m.mb,2b_0m.fb,2b_0m.lx,2b_0mm.i")
1412 "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs"
1415 "2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs"
1418 (define_cpu_unit "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont, 2b_mb_cont,\
1419 2b_b_cont, 2b_bb_cont" "twob")
1421 ;; For stop in the middle of the bundles.
1422 (define_cpu_unit "2b_m_stop, 2b_m0_stop, 2b_m1_stop, 2b_0mmi_cont" "twob")
1423 (define_cpu_unit "2b_mi_stop, 2b_mi0_stop, 2b_mi1_stop, 2b_0mii_cont" "twob")
1425 (final_presence_set "2b_0m_bs"
1426 "2b_0m.ii, 2b_0m.mi, 2b_0m.mf, 2b_0m.fi, 2b_0m.bb,\
1427 2b_0m.ib, 2b_0m.fb, 2b_0m.mb, 2b_0m.lx")
1428 (final_presence_set "2b_1m_bs"
1429 "2b_1m.ii, 2b_1m.mi, 2b_1m.mf, 2b_1m.fi, 2b_1m.bb,\
1430 2b_1m.ib, 2b_1m.fb, 2b_1m.mb, 2b_1m.lx")
1431 (final_presence_set "2b_0mi_bs" "2b_0mi.i, 2b_0mi.i")
1432 (final_presence_set "2b_1mi_bs" "2b_1mi.i, 2b_1mi.i")
1433 (final_presence_set "2b_0mm_bs" "2b_0mm.i, 2b_0mm.f, 2b_0mm.b")
1434 (final_presence_set "2b_1mm_bs" "2b_1mm.i, 2b_1mm.f, 2b_1mm.b")
1435 (final_presence_set "2b_0mf_bs" "2b_0mf.i, 2b_0mf.b")
1436 (final_presence_set "2b_1mf_bs" "2b_1mf.i, 2b_1mf.b")
1437 (final_presence_set "2b_0b_bs" "2b_0b.bb")
1438 (final_presence_set "2b_1b_bs" "2b_1b.bb")
1439 (final_presence_set "2b_0bb_bs" "2b_0bb.b")
1440 (final_presence_set "2b_1bb_bs" "2b_1bb.b")
1441 (final_presence_set "2b_0mb_bs" "2b_0mb.b")
1442 (final_presence_set "2b_1mb_bs" "2b_1mb.b")
1444 (exclusion_set "2b_0m_bs"
1445 "2b_0mi.i, 2b_0mm.i, 2b_0mm.f, 2b_0mf.i, 2b_0mb.b,\
1446 2b_0mi.b, 2b_0mf.b, 2b_0mm.b, 2b_0mlx., 2b_m0_stop")
1447 (exclusion_set "2b_1m_bs"
1448 "2b_1mi.i, 2b_1mm.i, 2b_1mm.f, 2b_1mf.i, 2b_1mb.b,\
1449 2b_1mi.b, 2b_1mf.b, 2b_1mm.b, 2b_1mlx., 2b_m1_stop")
1450 (exclusion_set "2b_0mi_bs" "2b_0mii., 2b_0mib., 2b_mi0_stop")
1451 (exclusion_set "2b_1mi_bs" "2b_1mii., 2b_1mib., 2b_mi1_stop")
1452 (exclusion_set "2b_0mm_bs" "2b_0mmi., 2b_0mmf., 2b_0mmb.")
1453 (exclusion_set "2b_1mm_bs" "2b_1mmi., 2b_1mmf., 2b_1mmb.")
1454 (exclusion_set "2b_0mf_bs" "2b_0mfi., 2b_0mfb.")
1455 (exclusion_set "2b_1mf_bs" "2b_1mfi., 2b_1mfb.")
1456 (exclusion_set "2b_0b_bs" "2b_0bb.b")
1457 (exclusion_set "2b_1b_bs" "2b_1bb.b")
1458 (exclusion_set "2b_0bb_bs" "2b_0bbb.")
1459 (exclusion_set "2b_1bb_bs" "2b_1bbb.")
1460 (exclusion_set "2b_0mb_bs" "2b_0mbb.")
1461 (exclusion_set "2b_1mb_bs" "2b_1mbb.")
1464 "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs,
1465 2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs"
1469 "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0mb.b,\
1470 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx."
1472 (final_presence_set "2b_0mii., 2b_0mib." "2b_mi_cont")
1473 (final_presence_set "2b_0mmi., 2b_0mmf., 2b_0mmb." "2b_mm_cont")
1474 (final_presence_set "2b_0mfi., 2b_0mfb." "2b_mf_cont")
1475 (final_presence_set "2b_0bb.b" "2b_b_cont")
1476 (final_presence_set "2b_0bbb." "2b_bb_cont")
1477 (final_presence_set "2b_0mbb." "2b_mb_cont")
1480 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1481 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx"
1482 "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont,\
1483 2b_mb_cont, 2b_b_cont, 2b_bb_cont")
1485 (exclusion_set "2b_empty"
1486 "2b_m_cont,2b_mi_cont,2b_mm_cont,2b_mf_cont,\
1487 2b_mb_cont,2b_b_cont,2b_bb_cont")
1490 (final_presence_set "2b_m0_stop" "2b_0m.mi")
1491 (final_presence_set "2b_0mm.i" "2b_0mmi_cont")
1492 (exclusion_set "2b_0mmi_cont"
1493 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1494 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1495 (exclusion_set "2b_m0_stop" "2b_0mm.i")
1496 (final_presence_set "2b_m1_stop" "2b_1m.mi")
1497 (exclusion_set "2b_m1_stop" "2b_1mm.i")
1498 (final_presence_set "2b_m_stop" "2b_m0_stop, 2b_m1_stop")
1501 (final_presence_set "2b_mi0_stop" "2b_0mi.i")
1502 (final_presence_set "2b_0mii." "2b_0mii_cont")
1503 (exclusion_set "2b_0mii_cont"
1504 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1505 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1506 (exclusion_set "2b_mi0_stop" "2b_0mii.")
1507 (final_presence_set "2b_mi1_stop" "2b_1mi.i")
1508 (exclusion_set "2b_mi1_stop" "2b_1mii.")
1509 (final_presence_set "2b_mi_stop" "2b_mi0_stop, 2b_mi1_stop")
1512 "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\
1513 2b_0m.fi,2b_0mf.i,2b_0mfi.,2b_0m.mf,2b_0mm.f,2b_0mmf.,\
1514 2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb.,\
1515 2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\
1516 2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \
1517 2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\
1518 2b_1m.fi,2b_1mf.i,2b_1mfi.,2b_1m.mf,2b_1mm.f,2b_1mmf.,\
1519 2b_1b.bb,2b_1bb.b,2b_1bbb.,2b_1m.bb,2b_1mb.b,2b_1mbb.,\
1520 2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\
1521 2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx."
1522 "2b_m0_stop,2b_m1_stop,2b_mi0_stop,2b_mi1_stop")
1524 (define_insn_reservation "2b_stop_bit" 0
1525 (and (and (eq_attr "cpu" "itanium2")
1526 (eq_attr "itanium_class" "stop_bit"))
1527 (ne (symbol_ref "bundling_p") (const_int 0)))
1528 "2b_stop|2b_m0_stop|2b_m1_stop|2b_mi0_stop|2b_mi1_stop")
1529 (define_insn_reservation "2b_br" 0
1530 (and (and (eq_attr "cpu" "itanium2")
1531 (eq_attr "itanium_class" "br"))
1532 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B")
1533 (define_insn_reservation "2b_scall" 0
1534 (and (and (eq_attr "cpu" "itanium2")
1535 (eq_attr "itanium_class" "scall"))
1536 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B")
1537 (define_insn_reservation "2b_fcmp" 2
1538 (and (and (eq_attr "cpu" "itanium2")
1539 (eq_attr "itanium_class" "fcmp"))
1540 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1541 (define_insn_reservation "2b_fcvtfx" 4
1542 (and (and (eq_attr "cpu" "itanium2")
1543 (eq_attr "itanium_class" "fcvtfx"))
1544 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1545 (define_insn_reservation "2b_fld" 6
1546 (and (and (eq_attr "cpu" "itanium2")
1547 (eq_attr "itanium_class" "fld"))
1548 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_M")
1549 (define_insn_reservation "2b_fldp" 6
1550 (and (and (eq_attr "cpu" "itanium2")
1551 (eq_attr "itanium_class" "fldp"))
1552 (ne (symbol_ref "bundling_p") (const_int 0)))
1554 (define_insn_reservation "2b_fmac" 4
1555 (and (and (eq_attr "cpu" "itanium2")
1556 (eq_attr "itanium_class" "fmac"))
1557 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1558 (define_insn_reservation "2b_fmisc" 4
1559 (and (and (eq_attr "cpu" "itanium2")
1560 (eq_attr "itanium_class" "fmisc"))
1561 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1564 (define_insn_reservation "2b_frar_i" 13
1565 (and (and (eq_attr "cpu" "itanium2")
1566 (eq_attr "itanium_class" "frar_i"))
1567 (ne (symbol_ref "bundling_p") (const_int 0)))
1570 (define_insn_reservation "2b_frar_m" 6
1571 (and (and (eq_attr "cpu" "itanium2")
1572 (eq_attr "itanium_class" "frar_m"))
1573 (ne (symbol_ref "bundling_p") (const_int 0)))
1575 (define_insn_reservation "2b_frbr" 2
1576 (and (and (eq_attr "cpu" "itanium2")
1577 (eq_attr "itanium_class" "frbr"))
1578 (ne (symbol_ref "bundling_p") (const_int 0)))
1580 (define_insn_reservation "2b_frfr" 5
1581 (and (and (eq_attr "cpu" "itanium2")
1582 (eq_attr "itanium_class" "frfr"))
1583 (ne (symbol_ref "bundling_p") (const_int 0)))
1585 (define_insn_reservation "2b_frpr" 2
1586 (and (and (eq_attr "cpu" "itanium2")
1587 (eq_attr "itanium_class" "frpr"))
1588 (ne (symbol_ref "bundling_p") (const_int 0)))
1591 (define_insn_reservation "2b_ialu" 1
1592 (and (and (eq_attr "cpu" "itanium2")
1593 (eq_attr "itanium_class" "ialu"))
1594 (ne (symbol_ref "bundling_p") (const_int 0)))
1596 (define_insn_reservation "2b_icmp" 1
1597 (and (and (eq_attr "cpu" "itanium2")
1598 (eq_attr "itanium_class" "icmp"))
1599 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A")
1600 (define_insn_reservation "2b_ilog" 1
1601 (and (and (eq_attr "cpu" "itanium2")
1602 (eq_attr "itanium_class" "ilog"))
1603 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A")
1604 (define_insn_reservation "2b_mmalua" 2
1605 (and (and (eq_attr "cpu" "itanium2")
1606 (eq_attr "itanium_class" "mmalua"))
1607 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A")
1609 (define_insn_reservation "2b_ishf" 1
1610 (and (and (eq_attr "cpu" "itanium2")
1611 (eq_attr "itanium_class" "ishf"))
1612 (ne (symbol_ref "bundling_p") (const_int 0)))
1614 (define_insn_reservation "2b_ld" 1
1615 (and (and (eq_attr "cpu" "itanium2")
1616 (eq_attr "itanium_class" "ld"))
1617 (ne (symbol_ref "bundling_p") (const_int 0)))
1619 (define_insn_reservation "2b_long_i" 1
1620 (and (and (eq_attr "cpu" "itanium2")
1621 (eq_attr "itanium_class" "long_i"))
1622 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_L")
1625 (define_insn_reservation "2b_mmmul" 2
1626 (and (and (eq_attr "cpu" "itanium2")
1627 (eq_attr "itanium_class" "mmmul"))
1628 (ne (symbol_ref "bundling_p") (const_int 0)))
1631 (define_insn_reservation "2b_mmshf" 2
1632 (and (and (eq_attr "cpu" "itanium2")
1633 (eq_attr "itanium_class" "mmshf"))
1634 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1636 (define_insn_reservation "2b_mmshfi" 1
1637 (and (and (eq_attr "cpu" "itanium2")
1638 (eq_attr "itanium_class" "mmshfi"))
1639 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1641 (define_insn_reservation "2b_rse_m" 0
1642 (and (and (eq_attr "cpu" "itanium2")
1643 (eq_attr "itanium_class" "rse_m"))
1644 (ne (symbol_ref "bundling_p") (const_int 0)))
1645 "(2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1646 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1+2b_um0")
1647 (define_insn_reservation "2b_sem" 0
1648 (and (and (eq_attr "cpu" "itanium2")
1649 (eq_attr "itanium_class" "sem"))
1650 (ne (symbol_ref "bundling_p") (const_int 0)))
1653 (define_insn_reservation "2b_stf" 1
1654 (and (and (eq_attr "cpu" "itanium2")
1655 (eq_attr "itanium_class" "stf"))
1656 (ne (symbol_ref "bundling_p") (const_int 0)))
1658 (define_insn_reservation "2b_st" 1
1659 (and (and (eq_attr "cpu" "itanium2")
1660 (eq_attr "itanium_class" "st"))
1661 (ne (symbol_ref "bundling_p") (const_int 0)))
1663 (define_insn_reservation "2b_syst_m0" 0
1664 (and (and (eq_attr "cpu" "itanium2")
1665 (eq_attr "itanium_class" "syst_m0"))
1666 (ne (symbol_ref "bundling_p") (const_int 0)))
1668 (define_insn_reservation "2b_syst_m" 0
1669 (and (and (eq_attr "cpu" "itanium2")
1670 (eq_attr "itanium_class" "syst_m"))
1671 (ne (symbol_ref "bundling_p") (const_int 0)))
1674 (define_insn_reservation "2b_tbit" 1
1675 (and (and (eq_attr "cpu" "itanium2")
1676 (eq_attr "itanium_class" "tbit"))
1677 (ne (symbol_ref "bundling_p") (const_int 0)))
1679 (define_insn_reservation "2b_toar_i" 0
1680 (and (and (eq_attr "cpu" "itanium2")
1681 (eq_attr "itanium_class" "toar_i"))
1682 (ne (symbol_ref "bundling_p") (const_int 0)))
1685 (define_insn_reservation "2b_toar_m" 5
1686 (and (and (eq_attr "cpu" "itanium2")
1687 (eq_attr "itanium_class" "toar_m"))
1688 (ne (symbol_ref "bundling_p") (const_int 0)))
1691 (define_insn_reservation "2b_tobr" 1
1692 (and (and (eq_attr "cpu" "itanium2")
1693 (eq_attr "itanium_class" "tobr"))
1694 (ne (symbol_ref "bundling_p") (const_int 0)))
1696 (define_insn_reservation "2b_tofr" 5
1697 (and (and (eq_attr "cpu" "itanium2")
1698 (eq_attr "itanium_class" "tofr"))
1699 (ne (symbol_ref "bundling_p") (const_int 0)))
1702 (define_insn_reservation "2b_topr" 1
1703 (and (and (eq_attr "cpu" "itanium2")
1704 (eq_attr "itanium_class" "topr"))
1705 (ne (symbol_ref "bundling_p") (const_int 0)))
1708 (define_insn_reservation "2b_xmpy" 4
1709 (and (and (eq_attr "cpu" "itanium2")
1710 (eq_attr "itanium_class" "xmpy"))
1711 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1713 (define_insn_reservation "2b_xtd" 1
1714 (and (and (eq_attr "cpu" "itanium2")
1715 (eq_attr "itanium_class" "xtd"))
1716 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1717 (define_insn_reservation "2b_chk_s" 0
1718 (and (and (eq_attr "cpu" "itanium2")
1719 (eq_attr "itanium_class" "chk_s"))
1720 (ne (symbol_ref "bundling_p") (const_int 0)))
1721 "2b_I|2b_M_only_um23")
1722 (define_insn_reservation "2b_lfetch" 0
1723 (and (and (eq_attr "cpu" "itanium2")
1724 (eq_attr "itanium_class" "lfetch"))
1725 (ne (symbol_ref "bundling_p") (const_int 0)))
1727 (define_insn_reservation "2b_nop_m" 0
1728 (and (and (eq_attr "cpu" "itanium2")
1729 (eq_attr "itanium_class" "nop_m"))
1730 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_M")
1731 (define_insn_reservation "2b_nop_b" 0
1732 (and (and (eq_attr "cpu" "itanium2")
1733 (eq_attr "itanium_class" "nop_b"))
1734 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_NB")
1735 (define_insn_reservation "2b_nop_i" 0
1736 (and (and (eq_attr "cpu" "itanium2")
1737 (eq_attr "itanium_class" "nop_i"))
1738 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1739 (define_insn_reservation "2b_nop_f" 0
1740 (and (and (eq_attr "cpu" "itanium2")
1741 (eq_attr "itanium_class" "nop_f"))
1742 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1743 (define_insn_reservation "2b_nop_x" 0
1744 (and (and (eq_attr "cpu" "itanium2")
1745 (eq_attr "itanium_class" "nop_x"))
1746 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_L")
1747 (define_insn_reservation "2b_unknown" 1
1748 (and (and (eq_attr "cpu" "itanium2")
1749 (eq_attr "itanium_class" "unknown"))
1750 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_empty")
1751 (define_insn_reservation "2b_nop" 0
1752 (and (and (eq_attr "cpu" "itanium2")
1753 (eq_attr "itanium_class" "nop"))
1754 (ne (symbol_ref "bundling_p") (const_int 0)))
1755 "2b_M|2b_NB|2b_I|2b_F")
1756 (define_insn_reservation "2b_ignore" 0
1757 (and (and (eq_attr "cpu" "itanium2")
1758 (eq_attr "itanium_class" "ignore"))
1759 (ne (symbol_ref "bundling_p") (const_int 0))) "nothing")
1761 (define_insn_reservation "2b_pre_cycle" 0
1762 (and (and (eq_attr "cpu" "itanium2")
1763 (eq_attr "itanium_class" "pre_cycle"))
1764 (ne (symbol_ref "bundling_p") (const_int 0)))
1765 "(2b_0m_bs, 2b_m_cont) \
1766 | (2b_0mi_bs, 2b_mi_cont) \
1767 | (2b_0mm_bs, 2b_mm_cont) \
1768 | (2b_0mf_bs, 2b_mf_cont) \
1769 | (2b_0b_bs, 2b_b_cont) \
1770 | (2b_0bb_bs, 2b_bb_cont) \
1771 | (2b_0mb_bs, 2b_mb_cont) \
1772 | (2b_1m_bs, 2b_m_cont) \
1773 | (2b_1mi_bs, 2b_mi_cont) \
1774 | (2b_1mm_bs, 2b_mm_cont) \
1775 | (2b_1mf_bs, 2b_mf_cont) \
1776 | (2b_1b_bs, 2b_b_cont) \
1777 | (2b_1bb_bs, 2b_bb_cont) \
1778 | (2b_1mb_bs, 2b_mb_cont) \
1779 | (2b_m_stop, 2b_0mmi_cont) \
1780 | (2b_mi_stop, 2b_0mii_cont)")