1 ;; Itanium2 DFA descriptions for insn scheduling and bundling.
2 ;; Copyright (C) 2002, 2004, 2005, 2007 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 3, 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 COPYING3. If not see
19 ;; <http://www.gnu.org/licenses/>. */
22 /* This is description of pipeline hazards based on DFA. The
23 following constructions can be used for this:
25 o define_cpu_unit string [string]) describes a cpu functional unit
28 1st operand: Names of cpu function units.
29 2nd operand: Name of automaton (see comments for
32 All define_reservations and define_cpu_units should have unique
33 names which cannot be "nothing".
35 o (exclusion_set string string) means that each CPU function unit
36 in the first string cannot be reserved simultaneously with each
37 unit whose name is in the second string and vise versa. CPU
38 units in the string are separated by commas. For example, it is
39 useful for description CPU with fully pipelined floating point
40 functional unit which can execute simultaneously only single
41 floating point insns or only double floating point insns.
43 o (presence_set string string) means that each CPU function unit in
44 the first string cannot be reserved unless at least one of
45 pattern of units whose names are in the second string is
46 reserved. This is an asymmetric relation. CPU units or unit
47 patterns in the strings are separated by commas. Pattern is one
48 unit name or unit names separated by white-spaces.
50 For example, it is useful for description that slot1 is reserved
51 after slot0 reservation for a VLIW processor. We could describe
52 it by the following construction
54 (presence_set "slot1" "slot0")
56 Or slot1 is reserved only after slot0 and unit b0 reservation.
57 In this case we could write
59 (presence_set "slot1" "slot0 b0")
61 All CPU functional units in a set should belong to the same
64 o (final_presence_set string string) is analogous to
65 `presence_set'. The difference between them is when checking is
66 done. When an instruction is issued in given automaton state
67 reflecting all current and planned unit reservations, the
68 automaton state is changed. The first state is a source state,
69 the second one is a result state. Checking for `presence_set' is
70 done on the source state reservation, checking for
71 `final_presence_set' is done on the result reservation. This
72 construction is useful to describe a reservation which is
73 actually two subsequent reservations. For example, if we use
75 (presence_set "slot1" "slot0")
77 the following insn will be never issued (because slot1 requires
78 slot0 which is absent in the source state).
80 (define_reservation "insn_and_nop" "slot0 + slot1")
82 but it can be issued if we use analogous `final_presence_set'.
84 o (absence_set string string) means that each CPU function unit in
85 the first string can be reserved only if each pattern of units
86 whose names are in the second string is not reserved. This is an
87 asymmetric relation (actually exclusion set is analogous to this
88 one but it is symmetric). CPU units or unit patterns in the
89 string are separated by commas. Pattern is one unit name or unit
90 names separated by white-spaces.
92 For example, it is useful for description that slot0 cannot be
93 reserved after slot1 or slot2 reservation for a VLIW processor.
94 We could describe it by the following construction
96 (absence_set "slot2" "slot0, slot1")
98 Or slot2 cannot be reserved if slot0 and unit b0 are reserved or
99 slot1 and unit b1 are reserved . In this case we could write
101 (absence_set "slot2" "slot0 b0, slot1 b1")
103 All CPU functional units in a set should to belong the same
106 o (final_absence_set string string) is analogous to `absence_set' but
107 checking is done on the result (state) reservation. See comments
108 for final_presence_set.
110 o (define_bypass number out_insn_names in_insn_names) names bypass with
111 given latency (the first number) from insns given by the first
112 string (see define_insn_reservation) into insns given by the
113 second string. Insn names in the strings are separated by
116 o (define_automaton string) describes names of an automaton
117 generated and used for pipeline hazards recognition. The names
118 are separated by comma. Actually it is possibly to generate the
119 single automaton but unfortunately it can be very large. If we
120 use more one automata, the summary size of the automata usually
121 is less than the single one. The automaton name is used in
122 define_cpu_unit. All automata should have unique names.
124 o (automata_option string) describes option for generation of
125 automata. Currently there are the following options:
127 o "no-minimization" which makes no minimization of automata.
128 This is only worth to do when we are debugging the description
129 and need to look more accurately at reservations of states.
131 o "ndfa" which makes automata with nondeterministic reservation
134 o (define_reservation string string) names reservation (the first
135 string) of cpu functional units (the 2nd string). Sometimes unit
136 reservations for different insns contain common parts. In such
137 case, you describe common part and use one its name (the 1st
138 parameter) in regular expression in define_insn_reservation. All
139 define_reservations, define results and define_cpu_units should
140 have unique names which cannot be "nothing".
142 o (define_insn_reservation name default_latency condition regexpr)
143 describes reservation of cpu functional units (the 3nd operand)
144 for instruction which is selected by the condition (the 2nd
145 parameter). The first parameter is used for output of debugging
146 information. The reservations are described by a regular
147 expression according the following syntax:
149 regexp = regexp "," oneof
152 oneof = oneof "|" allof
155 allof = allof "+" repeat
158 repeat = element "*" number
161 element = cpu_function_name
167 1. "," is used for describing start of the next cycle in
170 2. "|" is used for describing the reservation described by the
171 first regular expression *or* the reservation described by
172 the second regular expression *or* etc.
174 3. "+" is used for describing the reservation described by the
175 first regular expression *and* the reservation described by
176 the second regular expression *and* etc.
178 4. "*" is used for convenience and simply means sequence in
179 which the regular expression are repeated NUMBER times with
180 cycle advancing (see ",").
182 5. cpu function unit name which means reservation.
184 6. reservation name -- see define_reservation.
186 7. string "nothing" means no units reservation.
190 (define_automaton "two")
192 ;; All possible combinations of bundles/syllables
193 (define_cpu_unit "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
194 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx" "two")
195 (define_cpu_unit "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\
196 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx." "two")
197 (define_cpu_unit "2_0mii., 2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\
198 2_0mib., 2_0mmb., 2_0mfb." "two")
200 (define_cpu_unit "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\
201 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx" "two")
202 (define_cpu_unit "2_1mi.i, 2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\
203 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx." "two")
204 (define_cpu_unit "2_1mii., 2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\
205 2_1mib., 2_1mmb., 2_1mfb." "two")
208 (exclusion_set "2_0m.ii" "2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
209 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
210 (exclusion_set "2_0m.mi" "2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib,\
211 2_0m.mb, 2_0m.fb, 2_0m.lx")
212 (exclusion_set "2_0m.fi" "2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb,\
214 (exclusion_set "2_0m.mf" "2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb,\
216 (exclusion_set "2_0b.bb" "2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
217 (exclusion_set "2_0m.bb" "2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
218 (exclusion_set "2_0m.ib" "2_0m.mb, 2_0m.fb, 2_0m.lx")
219 (exclusion_set "2_0m.mb" "2_0m.fb, 2_0m.lx")
220 (exclusion_set "2_0m.fb" "2_0m.lx")
223 (exclusion_set "2_0mi.i" "2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\
224 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
225 (exclusion_set "2_0mm.i" "2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\
226 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
227 (exclusion_set "2_0mf.i" "2_0mm.f, 2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b,\
229 (exclusion_set "2_0mm.f" "2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b,\
231 (exclusion_set "2_0bb.b" "2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
232 (exclusion_set "2_0mb.b" "2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
233 (exclusion_set "2_0mi.b" "2_0mm.b, 2_0mf.b, 2_0mlx.")
234 (exclusion_set "2_0mm.b" "2_0mf.b, 2_0mlx.")
235 (exclusion_set "2_0mf.b" "2_0mlx.")
238 (exclusion_set "2_0mii." "2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\
239 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
240 (exclusion_set "2_0mmi." "2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\
241 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
242 (exclusion_set "2_0mfi." "2_0mmf., 2_0bbb., 2_0mbb., 2_0mib., 2_0mmb.,\
244 (exclusion_set "2_0mmf." "2_0bbb., 2_0mbb., 2_0mib., 2_0mmb., 2_0mfb.,\
246 (exclusion_set "2_0bbb." "2_0mbb., 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
247 (exclusion_set "2_0mbb." "2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")
248 (exclusion_set "2_0mib." "2_0mmb., 2_0mfb., 2_0mlx.")
249 (exclusion_set "2_0mmb." "2_0mfb., 2_0mlx.")
250 (exclusion_set "2_0mfb." "2_0mlx.")
253 (exclusion_set "2_1m.ii" "2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\
254 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")
255 (exclusion_set "2_1m.mi" "2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib,\
256 2_1m.mb, 2_1m.fb, 2_1m.lx")
257 (exclusion_set "2_1m.fi" "2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb,\
259 (exclusion_set "2_1m.mf" "2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb,\
261 (exclusion_set "2_1b.bb" "2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")
262 (exclusion_set "2_1m.bb" "2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")
263 (exclusion_set "2_1m.ib" "2_1m.mb, 2_1m.fb, 2_1m.lx")
264 (exclusion_set "2_1m.mb" "2_1m.fb, 2_1m.lx")
265 (exclusion_set "2_1m.fb" "2_1m.lx")
268 (exclusion_set "2_1mi.i" "2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\
269 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
270 (exclusion_set "2_1mm.i" "2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\
271 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
272 (exclusion_set "2_1mf.i" "2_1mm.f, 2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b,\
274 (exclusion_set "2_1mm.f" "2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b,\
276 (exclusion_set "2_1bb.b" "2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
277 (exclusion_set "2_1mb.b" "2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")
278 (exclusion_set "2_1mi.b" "2_1mm.b, 2_1mf.b, 2_1mlx.")
279 (exclusion_set "2_1mm.b" "2_1mf.b, 2_1mlx.")
280 (exclusion_set "2_1mf.b" "2_1mlx.")
283 (exclusion_set "2_1mii." "2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\
284 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
285 (exclusion_set "2_1mmi." "2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\
286 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
287 (exclusion_set "2_1mfi." "2_1mmf., 2_1bbb., 2_1mbb., 2_1mib., 2_1mmb.,\
289 (exclusion_set "2_1mmf." "2_1bbb., 2_1mbb., 2_1mib., 2_1mmb., 2_1mfb.,\
291 (exclusion_set "2_1bbb." "2_1mbb., 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
292 (exclusion_set "2_1mbb." "2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")
293 (exclusion_set "2_1mib." "2_1mmb., 2_1mfb., 2_1mlx.")
294 (exclusion_set "2_1mmb." "2_1mfb., 2_1mlx.")
295 (exclusion_set "2_1mfb." "2_1mlx.")
297 (final_presence_set "2_0mi.i" "2_0m.ii")
298 (final_presence_set "2_0mii." "2_0mi.i")
299 (final_presence_set "2_1mi.i" "2_1m.ii")
300 (final_presence_set "2_1mii." "2_1mi.i")
302 (final_presence_set "2_0mm.i" "2_0m.mi")
303 (final_presence_set "2_0mmi." "2_0mm.i")
304 (final_presence_set "2_1mm.i" "2_1m.mi")
305 (final_presence_set "2_1mmi." "2_1mm.i")
307 (final_presence_set "2_0mf.i" "2_0m.fi")
308 (final_presence_set "2_0mfi." "2_0mf.i")
309 (final_presence_set "2_1mf.i" "2_1m.fi")
310 (final_presence_set "2_1mfi." "2_1mf.i")
312 (final_presence_set "2_0mm.f" "2_0m.mf")
313 (final_presence_set "2_0mmf." "2_0mm.f")
314 (final_presence_set "2_1mm.f" "2_1m.mf")
315 (final_presence_set "2_1mmf." "2_1mm.f")
317 (final_presence_set "2_0bb.b" "2_0b.bb")
318 (final_presence_set "2_0bbb." "2_0bb.b")
319 (final_presence_set "2_1bb.b" "2_1b.bb")
320 (final_presence_set "2_1bbb." "2_1bb.b")
322 (final_presence_set "2_0mb.b" "2_0m.bb")
323 (final_presence_set "2_0mbb." "2_0mb.b")
324 (final_presence_set "2_1mb.b" "2_1m.bb")
325 (final_presence_set "2_1mbb." "2_1mb.b")
327 (final_presence_set "2_0mi.b" "2_0m.ib")
328 (final_presence_set "2_0mib." "2_0mi.b")
329 (final_presence_set "2_1mi.b" "2_1m.ib")
330 (final_presence_set "2_1mib." "2_1mi.b")
332 (final_presence_set "2_0mm.b" "2_0m.mb")
333 (final_presence_set "2_0mmb." "2_0mm.b")
334 (final_presence_set "2_1mm.b" "2_1m.mb")
335 (final_presence_set "2_1mmb." "2_1mm.b")
337 (final_presence_set "2_0mf.b" "2_0m.fb")
338 (final_presence_set "2_0mfb." "2_0mf.b")
339 (final_presence_set "2_1mf.b" "2_1m.fb")
340 (final_presence_set "2_1mfb." "2_1mf.b")
342 (final_presence_set "2_0mlx." "2_0m.lx")
343 (final_presence_set "2_1mlx." "2_1m.lx")
345 ;; The following reflects the dual issue bundle types table.
346 ;; We could place all possible combinations here because impossible
347 ;; combinations would go away by the subsequent constrains.
350 "2_0mmi.,2_0mfi.,2_0mmf.,2_0mib.,2_0mmb.,2_0mfb.,2_0mlx.")
351 (final_presence_set "2_1b.bb" "2_0mii.,2_0mmi.,2_0mfi.,2_0mmf.,2_0mlx.")
353 "2_1m.ii,2_1m.mi,2_1m.fi,2_1m.mf,2_1m.bb,2_1m.ib,2_1m.mb,2_1m.fb"
354 "2_0mii.,2_0mmi.,2_0mfi.,2_0mmf.,2_0mib.,2_0mmb.,2_0mfb.,2_0mlx.")
356 ;; Ports/units (nb means nop.b insn issued into given port):
358 "2_um0, 2_um1, 2_um2, 2_um3, 2_ui0, 2_ui1, 2_uf0, 2_uf1,\
359 2_ub0, 2_ub1, 2_ub2, 2_unb0, 2_unb1, 2_unb2" "two")
361 (exclusion_set "2_ub0" "2_unb0")
362 (exclusion_set "2_ub1" "2_unb1")
363 (exclusion_set "2_ub2" "2_unb2")
365 ;; The following rules are used to decrease number of alternatives.
366 ;; They are consequences of Itanium2 microarchitecture. They also
367 ;; describe the following rules mentioned in Itanium2
368 ;; microarchitecture: rules mentioned in Itanium2 microarchitecture:
369 ;; o "BBB/MBB: Always splits issue after either of these bundles".
370 ;; o "MIB BBB: Split issue after the first bundle in this pair".
372 "2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb."
373 "2_1m.ii,2_1m.mi,2_1m.fi,2_1m.mf,2_1b.bb,2_1m.bb,\
374 2_1m.ib,2_1m.mb,2_1m.fb,2_1m.lx")
375 (exclusion_set "2_0m.ib,2_0mi.b,2_0mib." "2_1b.bb")
377 ;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
378 ;;; B-slot contains a nop.b or a brp instruction".
379 ;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
380 ;;; nop.b, otherwise it disperses to B2".
382 "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\
383 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx"
384 "2_0mib. 2_ub2, 2_0mfb. 2_ub2, 2_0mmb. 2_ub2")
386 ;; This is necessary to start new processor cycle when we meet stop bit.
387 (define_cpu_unit "2_stop" "two")
389 "2_0m.ii,2_0mi.i,2_0mii.,2_0m.mi,2_0mm.i,2_0mmi.,2_0m.fi,2_0mf.i,2_0mfi.,\
390 2_0m.mf,2_0mm.f,2_0mmf.,2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb.,\
391 2_0m.ib,2_0mi.b,2_0mib.,2_0m.mb,2_0mm.b,2_0mmb.,2_0m.fb,2_0mf.b,2_0mfb.,\
393 2_1m.ii,2_1mi.i,2_1mii.,2_1m.mi,2_1mm.i,2_1mmi.,2_1m.fi,2_1mf.i,2_1mfi.,\
394 2_1m.mf,2_1mm.f,2_1mmf.,2_1b.bb,2_1bb.b,2_1bbb.,2_1m.bb,2_1mb.b,2_1mbb.,\
395 2_1m.ib,2_1mi.b,2_1mib.,2_1m.mb,2_1mm.b,2_1mmb.,2_1m.fb,2_1mf.b,2_1mfb.,\
399 ;; The issue logic can reorder M slot insns between different subtypes
400 ;; but cannot reorder insn within the same subtypes. The following
401 ;; constraint is enough to describe this.
402 (final_presence_set "2_um1" "2_um0")
403 (final_presence_set "2_um3" "2_um2")
405 ;; The insn in the 1st I slot of the two bundle issue group will issue
406 ;; to I0. The second I slot insn will issue to I1.
407 (final_presence_set "2_ui1" "2_ui0")
409 ;; For exceptions of I insns:
410 (define_cpu_unit "2_only_ui0" "two")
411 (final_absence_set "2_only_ui0" "2_ui1")
415 (define_reservation "2_M0"
416 "(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\
417 |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\
418 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
419 +(2_um0|2_um1|2_um2|2_um3)")
421 (define_reservation "2_M1"
422 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
423 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
424 +(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)\
425 +(2_um0|2_um1|2_um2|2_um3)")
427 (define_reservation "2_M" "2_M0|2_M1")
429 (define_reservation "2_M0_only_um0"
430 "(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\
431 |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\
432 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
435 (define_reservation "2_M1_only_um0"
436 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
437 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
438 +(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)\
441 (define_reservation "2_M_only_um0" "2_M0_only_um0|2_M1_only_um0")
443 (define_reservation "2_M0_only_um2"
444 "(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\
445 |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\
446 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
449 (define_reservation "2_M1_only_um2"
450 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
451 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
452 +(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)\
455 (define_reservation "2_M_only_um2" "2_M0_only_um2|2_M1_only_um2")
457 (define_reservation "2_M0_only_um23"
458 "(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\
459 |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\
460 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
463 (define_reservation "2_M1_only_um23"
464 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
465 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
466 +(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)\
469 (define_reservation "2_M_only_um23" "2_M0_only_um23|2_M1_only_um23")
471 (define_reservation "2_M0_only_um01"
472 "(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\
473 |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\
474 |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\
477 (define_reservation "2_M1_only_um01"
478 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
479 |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\
480 +(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)\
483 (define_reservation "2_M_only_um01" "2_M0_only_um01|2_M1_only_um01")
485 ;; I instruction is dispersed to the lowest numbered I unit
486 ;; not already in use. Remember about possible splitting.
487 (define_reservation "2_I0"
488 "2_0mi.i+2_ui0|2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0\
489 |2_0mfi.+2_ui0|2_0mi.b+2_ui0|(2_1mi.i|2_1mi.b)+(2_ui0|2_ui1)\
490 |(2_1mii.|2_1mmi.|2_1mfi.)+(2_ui0|2_ui1)")
492 (define_reservation "2_I1"
493 "2_0m.ii+(2_um0|2_um1|2_um2|2_um3)+2_0mi.i+2_ui0\
494 |2_0mm.i+(2_um0|2_um1|2_um2|2_um3)+2_0mmi.+2_ui0\
495 |2_0mf.i+2_uf0+2_0mfi.+2_ui0\
496 |2_0m.ib+(2_um0|2_um1|2_um2|2_um3)+2_0mi.b+2_ui0\
497 |(2_1m.ii+2_1mi.i|2_1m.ib+2_1mi.b)+(2_um0|2_um1|2_um2|2_um3)+(2_ui0|2_ui1)\
498 |2_1mm.i+(2_um0|2_um1|2_um2|2_um3)+2_1mmi.+(2_ui0|2_ui1)\
499 |2_1mf.i+2_uf1+2_1mfi.+(2_ui0|2_ui1)")
501 (define_reservation "2_I" "2_I0|2_I1")
503 ;; "An F slot in the 1st bundle disperses to F0".
504 ;; "An F slot in the 2st bundle disperses to F1".
505 (define_reservation "2_F0"
506 "2_0mf.i+2_uf0|2_0mmf.+2_uf0|2_0mf.b+2_uf0\
507 |2_1mf.i+2_uf1|2_1mmf.+2_uf1|2_1mf.b+2_uf1")
509 (define_reservation "2_F1"
510 "(2_0m.fi+2_0mf.i|2_0mm.f+2_0mmf.|2_0m.fb+2_0mf.b)\
511 +(2_um0|2_um1|2_um2|2_um3)+2_uf0\
512 |(2_1m.fi+2_1mf.i|2_1mm.f+2_1mmf.|2_1m.fb+2_1mf.b)\
513 +(2_um0|2_um1|2_um2|2_um3)+2_uf1")
515 (define_reservation "2_F2"
516 "(2_0m.mf+2_0mm.f+2_0mmf.+2_uf0|2_1m.mf+2_1mm.f+2_1mmf.+2_uf1)\
517 +(2_um0|2_um1|2_um2|2_um3)+(2_um0|2_um1|2_um2|2_um3)\
518 |(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0\
519 |2_0mmf.+(2_um0|2_um1|2_um2|2_um3)\
520 |2_0mib.+2_unb0|2_0mmb.+2_unb0|2_0mfb.+2_unb0)\
521 +(2_1m.fi+2_1mf.i|2_1m.fb+2_1mf.b)+(2_um0|2_um1|2_um2|2_um3)+2_uf1")
523 (define_reservation "2_F" "2_F0|2_F1|2_F2")
525 ;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B
526 ;;; unit. That is, a B slot in 1st position is dispersed to B0. In the
527 ;;; 2nd position it is dispersed to B2".
528 (define_reservation "2_NB"
529 "2_0b.bb+2_unb0|2_0bb.b+2_unb1|2_0bbb.+2_unb2\
530 |2_0mb.b+2_unb1|2_0mbb.+2_unb2|2_0mib.+2_unb0\
531 |2_0mmb.+2_unb0|2_0mfb.+2_unb0\
532 |2_1b.bb+2_unb0|2_1bb.b+2_unb1
533 |2_1bbb.+2_unb2|2_1mb.b+2_unb1|2_1mbb.+2_unb2\
534 |2_1mib.+2_unb0|2_1mmb.+2_unb0|2_1mfb.+2_unb0")
536 (define_reservation "2_B0"
537 "2_0b.bb+2_ub0|2_0bb.b+2_ub1|2_0bbb.+2_ub2\
538 |2_0mb.b+2_ub1|2_0mbb.+2_ub2|2_0mib.+2_ub2\
539 |2_0mfb.+2_ub2|2_1b.bb+2_ub0|2_1bb.b+2_ub1\
540 |2_1bbb.+2_ub2|2_1mb.b+2_ub1\
541 |2_1mib.+2_ub2|2_1mmb.+2_ub2|2_1mfb.+2_ub2")
543 (define_reservation "2_B1"
544 "2_0m.bb+(2_um0|2_um1|2_um2|2_um3)+2_0mb.b+2_ub1\
545 |2_0mi.b+2_ui0+2_0mib.+2_ub2\
546 |2_0mm.b+(2_um0|2_um1|2_um2|2_um3)+2_0mmb.+2_ub2\
547 |2_0mf.b+2_uf0+2_0mfb.+2_ub2\
548 |(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0)\
550 |2_1m.bb+(2_um0|2_um1|2_um2|2_um3)+2_1mb.b+2_ub1\
551 |2_1mi.b+(2_ui0|2_ui1)+2_1mib.+2_ub2\
552 |2_1mm.b+(2_um0|2_um1|2_um2|2_um3)+2_1mmb.+2_ub2\
553 |2_1mf.b+2_uf1+2_1mfb.+2_ub2")
555 (define_reservation "2_B" "2_B0|2_B1")
557 ;; MLX bunlde uses ports equivalent to MFI bundles.
559 ;; For the MLI template, the I slot insn is always assigned to port I0
560 ;; if it is in the first bundle or it is assigned to port I1 if it is in
561 ;; the second bundle.
562 (define_reservation "2_L0" "2_0mlx.+2_ui0+2_uf0|2_1mlx.+2_ui1+2_uf1")
564 (define_reservation "2_L1"
565 "2_0m.lx+(2_um0|2_um1|2_um2|2_um3)+2_0mlx.+2_ui0+2_uf0\
566 |2_1m.lx+(2_um0|2_um1|2_um2|2_um3)+2_1mlx.+2_ui1+2_uf1")
568 (define_reservation "2_L2"
569 "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\
570 |2_0mib.+2_unb0|2_0mmb.+2_unb0|2_0mfb.+2_unb0)
571 +2_1m.lx+(2_um0|2_um1|2_um2|2_um3)+2_1mlx.+2_ui1+2_uf1")
573 (define_reservation "2_L" "2_L0|2_L1|2_L2")
575 ;; Should we describe that A insn in I slot can be issued into M
576 ;; ports? I think it is not necessary because of multipass
577 ;; scheduling. For example, the multipass scheduling could use
578 ;; MMI-MMI instead of MII-MII where the two last I slots contain A
579 ;; insns (even if the case is complicated by use-def conflicts).
581 ;; In any case we could describe it as
582 ;; (define_cpu_unit "2_ui1_0pres,2_ui1_1pres,2_ui1_2pres,2_ui1_3pres" "two")
583 ;; (final_presence_set "2_ui1_0pres,2_ui1_1pres,2_ui1_2pres,2_ui1_3pres"
585 ;; (define_reservation "b_A"
587 ;; |(2_1mi.i|2_1mii.|2_1mmi.|2_1mfi.|2_1mi.b)+(2_um0|2_um1|2_um2|2_um3)\
588 ;; +(2_ui1_0pres|2_ui1_1pres|2_ui1_2pres|2_ui1_3pres)")
590 (define_reservation "2_A" "2_M|2_I")
592 ;; We assume that there is no insn issued on the same cycle as the
594 (define_cpu_unit "2_empty" "two")
595 (exclusion_set "2_empty"
596 "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,\
600 "2_0m_bs, 2_0mi_bs, 2_0mm_bs, 2_0mf_bs, 2_0b_bs, 2_0bb_bs, 2_0mb_bs"
603 "2_1m_bs, 2_1mi_bs, 2_1mm_bs, 2_1mf_bs, 2_1b_bs, 2_1bb_bs, 2_1mb_bs"
606 (define_cpu_unit "2_m_cont, 2_mi_cont, 2_mm_cont, 2_mf_cont, 2_mb_cont,\
607 2_b_cont, 2_bb_cont" "two")
609 ;; For stop in the middle of the bundles.
610 (define_cpu_unit "2_m_stop, 2_m0_stop, 2_m1_stop, 2_0mmi_cont" "two")
611 (define_cpu_unit "2_mi_stop, 2_mi0_stop, 2_mi1_stop, 2_0mii_cont" "two")
613 (final_presence_set "2_0m_bs"
614 "2_0m.ii, 2_0m.mi, 2_0m.mf, 2_0m.fi, 2_0m.bb,\
615 2_0m.ib, 2_0m.fb, 2_0m.mb, 2_0m.lx")
616 (final_presence_set "2_1m_bs"
617 "2_1m.ii, 2_1m.mi, 2_1m.mf, 2_1m.fi, 2_1m.bb,\
618 2_1m.ib, 2_1m.fb, 2_1m.mb, 2_1m.lx")
619 (final_presence_set "2_0mi_bs" "2_0mi.i, 2_0mi.i")
620 (final_presence_set "2_1mi_bs" "2_1mi.i, 2_1mi.i")
621 (final_presence_set "2_0mm_bs" "2_0mm.i, 2_0mm.f, 2_0mm.b")
622 (final_presence_set "2_1mm_bs" "2_1mm.i, 2_1mm.f, 2_1mm.b")
623 (final_presence_set "2_0mf_bs" "2_0mf.i, 2_0mf.b")
624 (final_presence_set "2_1mf_bs" "2_1mf.i, 2_1mf.b")
625 (final_presence_set "2_0b_bs" "2_0b.bb")
626 (final_presence_set "2_1b_bs" "2_1b.bb")
627 (final_presence_set "2_0bb_bs" "2_0bb.b")
628 (final_presence_set "2_1bb_bs" "2_1bb.b")
629 (final_presence_set "2_0mb_bs" "2_0mb.b")
630 (final_presence_set "2_1mb_bs" "2_1mb.b")
632 (exclusion_set "2_0m_bs"
633 "2_0mi.i, 2_0mm.i, 2_0mm.f, 2_0mf.i, 2_0mb.b,\
634 2_0mi.b, 2_0mf.b, 2_0mm.b, 2_0mlx., 2_m0_stop")
635 (exclusion_set "2_1m_bs"
636 "2_1mi.i, 2_1mm.i, 2_1mm.f, 2_1mf.i, 2_1mb.b,\
637 2_1mi.b, 2_1mf.b, 2_1mm.b, 2_1mlx., 2_m1_stop")
638 (exclusion_set "2_0mi_bs" "2_0mii., 2_0mib., 2_mi0_stop")
639 (exclusion_set "2_1mi_bs" "2_1mii., 2_1mib., 2_mi1_stop")
640 (exclusion_set "2_0mm_bs" "2_0mmi., 2_0mmf., 2_0mmb.")
641 (exclusion_set "2_1mm_bs" "2_1mmi., 2_1mmf., 2_1mmb.")
642 (exclusion_set "2_0mf_bs" "2_0mfi., 2_0mfb.")
643 (exclusion_set "2_1mf_bs" "2_1mfi., 2_1mfb.")
644 (exclusion_set "2_0b_bs" "2_0bb.b")
645 (exclusion_set "2_1b_bs" "2_1bb.b")
646 (exclusion_set "2_0bb_bs" "2_0bbb.")
647 (exclusion_set "2_1bb_bs" "2_1bbb.")
648 (exclusion_set "2_0mb_bs" "2_0mbb.")
649 (exclusion_set "2_1mb_bs" "2_1mbb.")
652 "2_0m_bs, 2_0mi_bs, 2_0mm_bs, 2_0mf_bs, 2_0b_bs, 2_0bb_bs, 2_0mb_bs,
653 2_1m_bs, 2_1mi_bs, 2_1mm_bs, 2_1mf_bs, 2_1b_bs, 2_1bb_bs, 2_1mb_bs"
657 "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0mb.b,\
658 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx."
660 (final_presence_set "2_0mii., 2_0mib." "2_mi_cont")
661 (final_presence_set "2_0mmi., 2_0mmf., 2_0mmb." "2_mm_cont")
662 (final_presence_set "2_0mfi., 2_0mfb." "2_mf_cont")
663 (final_presence_set "2_0bb.b" "2_b_cont")
664 (final_presence_set "2_0bbb." "2_bb_cont")
665 (final_presence_set "2_0mbb." "2_mb_cont")
668 "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
669 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx"
670 "2_m_cont, 2_mi_cont, 2_mm_cont, 2_mf_cont,\
671 2_mb_cont, 2_b_cont, 2_bb_cont")
673 (exclusion_set "2_empty"
674 "2_m_cont,2_mi_cont,2_mm_cont,2_mf_cont,\
675 2_mb_cont,2_b_cont,2_bb_cont")
678 (final_presence_set "2_m0_stop" "2_0m.mi")
679 (final_presence_set "2_0mm.i" "2_0mmi_cont")
680 (exclusion_set "2_0mmi_cont"
681 "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
682 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
683 (exclusion_set "2_m0_stop" "2_0mm.i")
684 (final_presence_set "2_m1_stop" "2_1m.mi")
685 (exclusion_set "2_m1_stop" "2_1mm.i")
686 (final_presence_set "2_m_stop" "2_m0_stop, 2_m1_stop")
689 (final_presence_set "2_mi0_stop" "2_0mi.i")
690 (final_presence_set "2_0mii." "2_0mii_cont")
691 (exclusion_set "2_0mii_cont"
692 "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\
693 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")
694 (exclusion_set "2_mi0_stop" "2_0mii.")
695 (final_presence_set "2_mi1_stop" "2_1mi.i")
696 (exclusion_set "2_mi1_stop" "2_1mii.")
697 (final_presence_set "2_mi_stop" "2_mi0_stop, 2_mi1_stop")
700 "2_0m.ii,2_0mi.i,2_0mii.,2_0m.mi,2_0mm.i,2_0mmi.,2_0m.fi,2_0mf.i,2_0mfi.,\
701 2_0m.mf,2_0mm.f,2_0mmf.,2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb.,\
702 2_0m.ib,2_0mi.b,2_0mib.,2_0m.mb,2_0mm.b,2_0mmb.,2_0m.fb,2_0mf.b,2_0mfb.,\
704 2_1m.ii,2_1mi.i,2_1mii.,2_1m.mi,2_1mm.i,2_1mmi.,2_1m.fi,2_1mf.i,2_1mfi.,\
705 2_1m.mf,2_1mm.f,2_1mmf.,2_1b.bb,2_1bb.b,2_1bbb.,2_1m.bb,2_1mb.b,2_1mbb.,\
706 2_1m.ib,2_1mi.b,2_1mib.,2_1m.mb,2_1mm.b,2_1mmb.,2_1m.fb,2_1mf.b,2_1mfb.,\
708 "2_m0_stop,2_m1_stop,2_mi0_stop,2_mi1_stop")
710 (define_insn_reservation "2_stop_bit" 0
711 (and (and (eq_attr "cpu" "itanium2")
712 (eq_attr "itanium_class" "stop_bit"))
713 (eq (symbol_ref "bundling_p") (const_int 0)))
714 "2_stop|2_m0_stop|2_m1_stop|2_mi0_stop|2_mi1_stop")
716 (define_insn_reservation "2_br" 0
717 (and (and (eq_attr "cpu" "itanium2")
718 (eq_attr "itanium_class" "br"))
719 (eq (symbol_ref "bundling_p") (const_int 0))) "2_B")
720 (define_insn_reservation "2_scall" 0
721 (and (and (eq_attr "cpu" "itanium2")
722 (eq_attr "itanium_class" "scall"))
723 (eq (symbol_ref "bundling_p") (const_int 0))) "2_B")
724 (define_insn_reservation "2_fcmp" 2
725 (and (and (eq_attr "cpu" "itanium2")
726 (eq_attr "itanium_class" "fcmp"))
727 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
728 (define_insn_reservation "2_fcvtfx" 4
729 (and (and (eq_attr "cpu" "itanium2")
730 (eq_attr "itanium_class" "fcvtfx"))
731 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
732 (define_insn_reservation "2_fld" 6
733 (and (and (and (and (eq_attr "cpu" "itanium2")
734 (eq_attr "itanium_class" "fld"))
735 (eq_attr "data_speculative" "no"))
736 (eq_attr "check_load" "no"))
737 (eq (symbol_ref "bundling_p") (const_int 0)))
739 (define_insn_reservation "2_flda" 6
740 (and (and (and (eq_attr "cpu" "itanium2")
741 (eq_attr "itanium_class" "fld"))
742 (eq_attr "data_speculative" "yes"))
743 (eq (symbol_ref "bundling_p") (const_int 0)))
745 (define_insn_reservation "2_fldc" 0
746 (and (and (and (eq_attr "cpu" "itanium2")
747 (eq_attr "itanium_class" "fld"))
748 (eq_attr "check_load" "yes"))
749 (eq (symbol_ref "bundling_p") (const_int 0)))
752 (define_insn_reservation "2_fldp" 6
753 (and (and (and (eq_attr "cpu" "itanium2")
754 (eq_attr "itanium_class" "fldp"))
755 (eq_attr "check_load" "no"))
756 (eq (symbol_ref "bundling_p") (const_int 0)))
758 (define_insn_reservation "2_fldpc" 0
759 (and (and (and (eq_attr "cpu" "itanium2")
760 (eq_attr "itanium_class" "fldp"))
761 (eq_attr "check_load" "yes"))
762 (eq (symbol_ref "bundling_p") (const_int 0)))
765 (define_insn_reservation "2_fmac" 4
766 (and (and (eq_attr "cpu" "itanium2")
767 (eq_attr "itanium_class" "fmac"))
768 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
769 (define_insn_reservation "2_fmisc" 4
770 (and (and (eq_attr "cpu" "itanium2")
771 (eq_attr "itanium_class" "fmisc"))
772 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
774 ;; There is only one insn `mov = ar.bsp' for frar_i:
776 (define_insn_reservation "2_frar_i" 13
777 (and (and (eq_attr "cpu" "itanium2")
778 (eq_attr "itanium_class" "frar_i"))
779 (eq (symbol_ref "bundling_p") (const_int 0)))
781 ;; There is only two insns `mov = ar.unat' or `mov = ar.ccv' for frar_m:
783 (define_insn_reservation "2_frar_m" 6
784 (and (and (eq_attr "cpu" "itanium2")
785 (eq_attr "itanium_class" "frar_m"))
786 (eq (symbol_ref "bundling_p") (const_int 0)))
788 (define_insn_reservation "2_frbr" 2
789 (and (and (eq_attr "cpu" "itanium2")
790 (eq_attr "itanium_class" "frbr"))
791 (eq (symbol_ref "bundling_p") (const_int 0)))
793 (define_insn_reservation "2_frfr" 5
794 (and (and (eq_attr "cpu" "itanium2")
795 (eq_attr "itanium_class" "frfr"))
796 (eq (symbol_ref "bundling_p") (const_int 0)))
798 (define_insn_reservation "2_frpr" 2
799 (and (and (eq_attr "cpu" "itanium2")
800 (eq_attr "itanium_class" "frpr"))
801 (eq (symbol_ref "bundling_p") (const_int 0)))
804 (define_insn_reservation "2_ialu" 1
805 (and (and (eq_attr "cpu" "itanium2")
806 (eq_attr "itanium_class" "ialu"))
807 (eq (symbol_ref "bundling_p") (const_int 0)))
809 (define_insn_reservation "2_icmp" 1
810 (and (and (eq_attr "cpu" "itanium2")
811 (eq_attr "itanium_class" "icmp"))
812 (eq (symbol_ref "bundling_p") (const_int 0))) "2_A")
813 (define_insn_reservation "2_ilog" 1
814 (and (and (eq_attr "cpu" "itanium2")
815 (eq_attr "itanium_class" "ilog"))
816 (eq (symbol_ref "bundling_p") (const_int 0))) "2_A")
817 (define_insn_reservation "2_mmalua" 2
818 (and (and (eq_attr "cpu" "itanium2")
819 (eq_attr "itanium_class" "mmalua"))
820 (eq (symbol_ref "bundling_p") (const_int 0))) "2_A")
822 (define_insn_reservation "2_ishf" 1
823 (and (and (eq_attr "cpu" "itanium2")
824 (eq_attr "itanium_class" "ishf"))
825 (eq (symbol_ref "bundling_p") (const_int 0)))
828 (define_insn_reservation "2_ld" 1
829 (and (and (and (eq_attr "cpu" "itanium2")
830 (eq_attr "itanium_class" "ld"))
831 (eq_attr "check_load" "no"))
832 (eq (symbol_ref "bundling_p") (const_int 0)))
834 (define_insn_reservation "2_ldc" 0
835 (and (and (eq_attr "cpu" "itanium2")
836 (eq_attr "check_load" "yes"))
837 (eq (symbol_ref "bundling_p") (const_int 0)))
840 (define_insn_reservation "2_long_i" 1
841 (and (and (eq_attr "cpu" "itanium2")
842 (eq_attr "itanium_class" "long_i"))
843 (eq (symbol_ref "bundling_p") (const_int 0))) "2_L")
845 (define_insn_reservation "2_mmmul" 2
846 (and (and (eq_attr "cpu" "itanium2")
847 (eq_attr "itanium_class" "mmmul"))
848 (eq (symbol_ref "bundling_p") (const_int 0)))
851 (define_insn_reservation "2_mmshf" 2
852 (and (and (eq_attr "cpu" "itanium2")
853 (eq_attr "itanium_class" "mmshf"))
854 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I")
856 (define_insn_reservation "2_mmshfi" 1
857 (and (and (eq_attr "cpu" "itanium2")
858 (eq_attr "itanium_class" "mmshfi"))
859 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I")
861 ;; Now we have only one insn (flushrs) of such class. We assume that flushrs
862 ;; is the 1st syllable of the bundle after stop bit.
863 (define_insn_reservation "2_rse_m" 0
864 (and (and (eq_attr "cpu" "itanium2")
865 (eq_attr "itanium_class" "rse_m"))
866 (eq (symbol_ref "bundling_p") (const_int 0)))
867 "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb\
868 |2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx)+2_um0")
869 (define_insn_reservation "2_sem" 0
870 (and (and (eq_attr "cpu" "itanium2")
871 (eq_attr "itanium_class" "sem"))
872 (eq (symbol_ref "bundling_p") (const_int 0)))
875 (define_insn_reservation "2_stf" 1
876 (and (and (eq_attr "cpu" "itanium2")
877 (eq_attr "itanium_class" "stf"))
878 (eq (symbol_ref "bundling_p") (const_int 0)))
880 (define_insn_reservation "2_st" 1
881 (and (and (eq_attr "cpu" "itanium2")
882 (eq_attr "itanium_class" "st"))
883 (eq (symbol_ref "bundling_p") (const_int 0)))
885 (define_insn_reservation "2_syst_m0" 0
886 (and (and (eq_attr "cpu" "itanium2")
887 (eq_attr "itanium_class" "syst_m0"))
888 (eq (symbol_ref "bundling_p") (const_int 0)))
890 (define_insn_reservation "2_syst_m" 0
891 (and (and (eq_attr "cpu" "itanium2")
892 (eq_attr "itanium_class" "syst_m"))
893 (eq (symbol_ref "bundling_p") (const_int 0)))
896 (define_insn_reservation "2_tbit" 1
897 (and (and (eq_attr "cpu" "itanium2")
898 (eq_attr "itanium_class" "tbit"))
899 (eq (symbol_ref "bundling_p") (const_int 0)))
902 ;; There is only ony insn `mov ar.pfs =' for toar_i:
903 (define_insn_reservation "2_toar_i" 0
904 (and (and (eq_attr "cpu" "itanium2")
905 (eq_attr "itanium_class" "toar_i"))
906 (eq (symbol_ref "bundling_p") (const_int 0)))
908 ;; There are only ony 2 insns `mov ar.ccv =' and `mov ar.unat =' for toar_m:
910 (define_insn_reservation "2_toar_m" 5
911 (and (and (eq_attr "cpu" "itanium2")
912 (eq_attr "itanium_class" "toar_m"))
913 (eq (symbol_ref "bundling_p") (const_int 0)))
916 (define_insn_reservation "2_tobr" 1
917 (and (and (eq_attr "cpu" "itanium2")
918 (eq_attr "itanium_class" "tobr"))
919 (eq (symbol_ref "bundling_p") (const_int 0)))
921 (define_insn_reservation "2_tofr" 5
922 (and (and (eq_attr "cpu" "itanium2")
923 (eq_attr "itanium_class" "tofr"))
924 (eq (symbol_ref "bundling_p") (const_int 0)))
927 (define_insn_reservation "2_topr" 1
928 (and (and (eq_attr "cpu" "itanium2")
929 (eq_attr "itanium_class" "topr"))
930 (eq (symbol_ref "bundling_p") (const_int 0)))
933 (define_insn_reservation "2_xmpy" 4
934 (and (and (eq_attr "cpu" "itanium2")
935 (eq_attr "itanium_class" "xmpy"))
936 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F")
938 (define_insn_reservation "2_xtd" 1
939 (and (and (eq_attr "cpu" "itanium2")
940 (eq_attr "itanium_class" "xtd"))
941 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I")
943 (define_insn_reservation "2_chk_s_i" 0
944 (and (and (eq_attr "cpu" "itanium2")
945 (eq_attr "itanium_class" "chk_s_i"))
946 (eq (symbol_ref "bundling_p") (const_int 0)))
948 (define_insn_reservation "2_chk_s_f" 0
949 (and (and (eq_attr "cpu" "itanium2")
950 (eq_attr "itanium_class" "chk_s_f"))
951 (eq (symbol_ref "bundling_p") (const_int 0)))
953 (define_insn_reservation "2_chk_a" 0
954 (and (and (eq_attr "cpu" "itanium2")
955 (eq_attr "itanium_class" "chk_a"))
956 (eq (symbol_ref "bundling_p") (const_int 0)))
959 (define_insn_reservation "2_lfetch" 0
960 (and (and (eq_attr "cpu" "itanium2")
961 (eq_attr "itanium_class" "lfetch"))
962 (eq (symbol_ref "bundling_p") (const_int 0)))
965 (define_insn_reservation "2_nop_m" 0
966 (and (and (eq_attr "cpu" "itanium2")
967 (eq_attr "itanium_class" "nop_m"))
968 (eq (symbol_ref "bundling_p") (const_int 0))) "2_M0")
969 (define_insn_reservation "2_nop_b" 0
970 (and (and (eq_attr "cpu" "itanium2")
971 (eq_attr "itanium_class" "nop_b"))
972 (eq (symbol_ref "bundling_p") (const_int 0))) "2_NB")
973 (define_insn_reservation "2_nop_i" 0
974 (and (and (eq_attr "cpu" "itanium2")
975 (eq_attr "itanium_class" "nop_i"))
976 (eq (symbol_ref "bundling_p") (const_int 0))) "2_I0")
977 (define_insn_reservation "2_nop_f" 0
978 (and (and (eq_attr "cpu" "itanium2")
979 (eq_attr "itanium_class" "nop_f"))
980 (eq (symbol_ref "bundling_p") (const_int 0))) "2_F0")
981 (define_insn_reservation "2_nop_x" 0
982 (and (and (eq_attr "cpu" "itanium2")
983 (eq_attr "itanium_class" "nop_x"))
984 (eq (symbol_ref "bundling_p") (const_int 0))) "2_L0")
986 (define_insn_reservation "2_unknown" 1
987 (and (and (eq_attr "cpu" "itanium2")
988 (eq_attr "itanium_class" "unknown"))
989 (eq (symbol_ref "bundling_p") (const_int 0))) "2_empty")
991 (define_insn_reservation "2_nop" 0
992 (and (and (eq_attr "cpu" "itanium2")
993 (eq_attr "itanium_class" "nop"))
994 (eq (symbol_ref "bundling_p") (const_int 0)))
995 "2_M0|2_NB|2_I0|2_F0")
997 (define_insn_reservation "2_ignore" 0
998 (and (and (eq_attr "cpu" "itanium2")
999 (eq_attr "itanium_class" "ignore"))
1000 (eq (symbol_ref "bundling_p") (const_int 0))) "nothing")
1002 (define_cpu_unit "2_m_cont_only, 2_b_cont_only" "two")
1003 (define_cpu_unit "2_mi_cont_only, 2_mm_cont_only, 2_mf_cont_only" "two")
1004 (define_cpu_unit "2_mb_cont_only, 2_bb_cont_only" "two")
1006 (final_presence_set "2_m_cont_only" "2_m_cont")
1007 (exclusion_set "2_m_cont_only"
1008 "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0mb.b,\
1009 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")
1011 (final_presence_set "2_b_cont_only" "2_b_cont")
1012 (exclusion_set "2_b_cont_only" "2_0bb.b")
1014 (final_presence_set "2_mi_cont_only" "2_mi_cont")
1015 (exclusion_set "2_mi_cont_only" "2_0mii., 2_0mib.")
1017 (final_presence_set "2_mm_cont_only" "2_mm_cont")
1018 (exclusion_set "2_mm_cont_only" "2_0mmi., 2_0mmf., 2_0mmb.")
1020 (final_presence_set "2_mf_cont_only" "2_mf_cont")
1021 (exclusion_set "2_mf_cont_only" "2_0mfi., 2_0mfb.")
1023 (final_presence_set "2_mb_cont_only" "2_mb_cont")
1024 (exclusion_set "2_mb_cont_only" "2_0mbb.")
1026 (final_presence_set "2_bb_cont_only" "2_bb_cont")
1027 (exclusion_set "2_bb_cont_only" "2_0bbb.")
1029 (define_insn_reservation "2_pre_cycle" 0
1030 (and (and (eq_attr "cpu" "itanium2")
1031 (eq_attr "itanium_class" "pre_cycle"))
1032 (eq (symbol_ref "bundling_p") (const_int 0)))
1035 ;;(define_insn_reservation "2_pre_cycle" 0
1036 ;; (and (and (eq_attr "cpu" "itanium2")
1037 ;; (eq_attr "itanium_class" "pre_cycle"))
1038 ;; (eq (symbol_ref "bundling_p") (const_int 0)))
1039 ;; "(2_0m_bs, 2_m_cont) \
1040 ;; | (2_0mi_bs, (2_mi_cont|nothing)) \
1041 ;; | (2_0mm_bs, 2_mm_cont) \
1042 ;; | (2_0mf_bs, (2_mf_cont|nothing)) \
1043 ;; | (2_0b_bs, (2_b_cont|nothing)) \
1044 ;; | (2_0bb_bs, (2_bb_cont|nothing)) \
1045 ;; | (2_0mb_bs, (2_mb_cont|nothing)) \
1046 ;; | (2_1m_bs, 2_m_cont) \
1047 ;; | (2_1mi_bs, (2_mi_cont|nothing)) \
1048 ;; | (2_1mm_bs, 2_mm_cont) \
1049 ;; | (2_1mf_bs, (2_mf_cont|nothing)) \
1050 ;; | (2_1b_bs, (2_b_cont|nothing)) \
1051 ;; | (2_1bb_bs, (2_bb_cont|nothing)) \
1052 ;; | (2_1mb_bs, (2_mb_cont|nothing)) \
1053 ;; | (2_m_cont_only, (2_m_cont|nothing)) \
1054 ;; | (2_b_cont_only, (2_b_cont|nothing)) \
1055 ;; | (2_mi_cont_only, (2_mi_cont|nothing)) \
1056 ;; | (2_mm_cont_only, (2_mm_cont|nothing)) \
1057 ;; | (2_mf_cont_only, (2_mf_cont|nothing)) \
1058 ;; | (2_mb_cont_only, (2_mb_cont|nothing)) \
1059 ;; | (2_bb_cont_only, (2_bb_cont|nothing)) \
1060 ;; | (2_m_stop, (2_0mmi_cont|nothing)) \
1061 ;; | (2_mi_stop, (2_0mii_cont|nothing))")
1065 (define_bypass 1 "2_fcmp" "2_br,2_scall")
1066 (define_bypass 0 "2_icmp" "2_br,2_scall")
1067 (define_bypass 0 "2_tbit" "2_br,2_scall")
1068 (define_bypass 2 "2_ld" "2_ld" "ia64_ld_address_bypass_p")
1069 (define_bypass 2 "2_ld" "2_st" "ia64_st_address_bypass_p")
1070 (define_bypass 2 "2_ld,2_ldc" "2_mmalua,2_mmmul,2_mmshf")
1071 (define_bypass 3 "2_ilog" "2_mmalua,2_mmmul,2_mmshf")
1072 (define_bypass 3 "2_ialu" "2_mmalua,2_mmmul,2_mmshf")
1073 (define_bypass 3 "2_mmalua,2_mmmul,2_mmshf" "2_ialu,2_ilog,2_ishf,2_st,2_ld,2_ldc")
1074 (define_bypass 6 "2_tofr" "2_frfr,2_stf")
1075 (define_bypass 7 "2_fmac" "2_frfr,2_stf")
1077 ;; We don't use here fcmp because scall may be predicated.
1078 (define_bypass 0 "2_fcvtfx,2_fld,2_flda,2_fldc,2_fmac,2_fmisc,2_frar_i,2_frar_m,\
1079 2_frbr,2_frfr,2_frpr,2_ialu,2_ilog,2_ishf,2_ld,2_ldc,2_long_i,\
1080 2_mmalua,2_mmmul,2_mmshf,2_mmshfi,2_toar_m,2_tofr,\
1084 (define_bypass 0 "2_unknown,2_ignore,2_stop_bit,2_br,2_fcmp,2_fcvtfx,2_fld,2_flda,2_fldc,\
1085 2_fmac,2_fmisc,2_frar_i,2_frar_m,2_frbr,2_frfr,2_frpr,\
1086 2_ialu,2_icmp,2_ilog,2_ishf,2_ld,2_ldc,2_chk_s_i,2_chk_s_f,2_chk_a,2_long_i,\
1087 2_mmalua,2_mmmul,2_mmshf,2_mmshfi,2_nop,2_nop_b,2_nop_f,\
1088 2_nop_i,2_nop_m,2_nop_x,2_rse_m,2_scall,2_sem,2_stf,2_st,\
1089 2_syst_m0,2_syst_m,2_tbit,2_toar_i,2_toar_m,2_tobr,2_tofr,\
1090 2_topr,2_xmpy,2_xtd,2_lfetch" "2_ignore")
1096 (define_automaton "twob")
1098 ;; Pseudo units for quicker searching for position in two packet window. */
1099 (define_query_cpu_unit "2_1,2_2,2_3,2_4,2_5,2_6" "twob")
1101 ;; All possible combinations of bundles/syllables
1103 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1104 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx" "twob")
1106 "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\
1107 2b_0mi.b, 2b_0mm.b, 2b_0mf.b" "twob")
1108 (define_query_cpu_unit
1109 "2b_0mii., 2b_0mmi., 2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\
1110 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx." "twob")
1113 "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\
1114 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx" "twob")
1116 "2b_1mi.i, 2b_1mm.i, 2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\
1117 2b_1mi.b, 2b_1mm.b, 2b_1mf.b" "twob")
1118 (define_query_cpu_unit
1119 "2b_1mii., 2b_1mmi., 2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\
1120 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx." "twob")
1123 (exclusion_set "2b_0m.ii"
1124 "2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1125 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1126 (exclusion_set "2b_0m.mi"
1127 "2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb, 2b_0m.ib,\
1128 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1129 (exclusion_set "2b_0m.fi"
1130 "2b_0m.mf, 2b_0b.bb, 2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1131 (exclusion_set "2b_0m.mf"
1132 "2b_0b.bb, 2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1133 (exclusion_set "2b_0b.bb" "2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1134 (exclusion_set "2b_0m.bb" "2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1135 (exclusion_set "2b_0m.ib" "2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1136 (exclusion_set "2b_0m.mb" "2b_0m.fb, 2b_0m.lx")
1137 (exclusion_set "2b_0m.fb" "2b_0m.lx")
1140 (exclusion_set "2b_0mi.i"
1141 "2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\
1142 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1143 (exclusion_set "2b_0mm.i"
1144 "2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\
1145 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1146 (exclusion_set "2b_0mf.i"
1147 "2b_0mm.f, 2b_0bb.b, 2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1148 (exclusion_set "2b_0mm.f"
1149 "2b_0bb.b, 2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1150 (exclusion_set "2b_0bb.b" "2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1151 (exclusion_set "2b_0mb.b" "2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1152 (exclusion_set "2b_0mi.b" "2b_0mm.b, 2b_0mf.b, 2b_0mlx.")
1153 (exclusion_set "2b_0mm.b" "2b_0mf.b, 2b_0mlx.")
1154 (exclusion_set "2b_0mf.b" "2b_0mlx.")
1157 (exclusion_set "2b_0mii."
1158 "2b_0mmi., 2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\
1159 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1160 (exclusion_set "2b_0mmi."
1161 "2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\
1162 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1163 (exclusion_set "2b_0mfi."
1164 "2b_0mmf., 2b_0bbb., 2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1165 (exclusion_set "2b_0mmf."
1166 "2b_0bbb., 2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1167 (exclusion_set "2b_0bbb." "2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1168 (exclusion_set "2b_0mbb." "2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.")
1169 (exclusion_set "2b_0mib." "2b_0mmb., 2b_0mfb., 2b_0mlx.")
1170 (exclusion_set "2b_0mmb." "2b_0mfb., 2b_0mlx.")
1171 (exclusion_set "2b_0mfb." "2b_0mlx.")
1174 (exclusion_set "2b_1m.ii"
1175 "2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\
1176 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1177 (exclusion_set "2b_1m.mi"
1178 "2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb, 2b_1m.ib,\
1179 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1180 (exclusion_set "2b_1m.fi"
1181 "2b_1m.mf, 2b_1b.bb, 2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1182 (exclusion_set "2b_1m.mf"
1183 "2b_1b.bb, 2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1184 (exclusion_set "2b_1b.bb" "2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1185 (exclusion_set "2b_1m.bb" "2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1186 (exclusion_set "2b_1m.ib" "2b_1m.mb, 2b_1m.fb, 2b_1m.lx")
1187 (exclusion_set "2b_1m.mb" "2b_1m.fb, 2b_1m.lx")
1188 (exclusion_set "2b_1m.fb" "2b_1m.lx")
1191 (exclusion_set "2b_1mi.i"
1192 "2b_1mm.i, 2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\
1193 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1194 (exclusion_set "2b_1mm.i"
1195 "2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\
1196 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1197 (exclusion_set "2b_1mf.i"
1198 "2b_1mm.f, 2b_1bb.b, 2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1199 (exclusion_set "2b_1mm.f"
1200 "2b_1bb.b, 2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1201 (exclusion_set "2b_1bb.b" "2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1202 (exclusion_set "2b_1mb.b" "2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1203 (exclusion_set "2b_1mi.b" "2b_1mm.b, 2b_1mf.b, 2b_1mlx.")
1204 (exclusion_set "2b_1mm.b" "2b_1mf.b, 2b_1mlx.")
1205 (exclusion_set "2b_1mf.b" "2b_1mlx.")
1208 (exclusion_set "2b_1mii."
1209 "2b_1mmi., 2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\
1210 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1211 (exclusion_set "2b_1mmi."
1212 "2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\
1213 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1214 (exclusion_set "2b_1mfi."
1215 "2b_1mmf., 2b_1bbb., 2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1216 (exclusion_set "2b_1mmf."
1217 "2b_1bbb., 2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1218 (exclusion_set "2b_1bbb." "2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1219 (exclusion_set "2b_1mbb." "2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.")
1220 (exclusion_set "2b_1mib." "2b_1mmb., 2b_1mfb., 2b_1mlx.")
1221 (exclusion_set "2b_1mmb." "2b_1mfb., 2b_1mlx.")
1222 (exclusion_set "2b_1mfb." "2b_1mlx.")
1224 (final_presence_set "2b_0mi.i" "2b_0m.ii")
1225 (final_presence_set "2b_0mii." "2b_0mi.i")
1226 (final_presence_set "2b_1mi.i" "2b_1m.ii")
1227 (final_presence_set "2b_1mii." "2b_1mi.i")
1229 (final_presence_set "2b_0mm.i" "2b_0m.mi")
1230 (final_presence_set "2b_0mmi." "2b_0mm.i")
1231 (final_presence_set "2b_1mm.i" "2b_1m.mi")
1232 (final_presence_set "2b_1mmi." "2b_1mm.i")
1234 (final_presence_set "2b_0mf.i" "2b_0m.fi")
1235 (final_presence_set "2b_0mfi." "2b_0mf.i")
1236 (final_presence_set "2b_1mf.i" "2b_1m.fi")
1237 (final_presence_set "2b_1mfi." "2b_1mf.i")
1239 (final_presence_set "2b_0mm.f" "2b_0m.mf")
1240 (final_presence_set "2b_0mmf." "2b_0mm.f")
1241 (final_presence_set "2b_1mm.f" "2b_1m.mf")
1242 (final_presence_set "2b_1mmf." "2b_1mm.f")
1244 (final_presence_set "2b_0bb.b" "2b_0b.bb")
1245 (final_presence_set "2b_0bbb." "2b_0bb.b")
1246 (final_presence_set "2b_1bb.b" "2b_1b.bb")
1247 (final_presence_set "2b_1bbb." "2b_1bb.b")
1249 (final_presence_set "2b_0mb.b" "2b_0m.bb")
1250 (final_presence_set "2b_0mbb." "2b_0mb.b")
1251 (final_presence_set "2b_1mb.b" "2b_1m.bb")
1252 (final_presence_set "2b_1mbb." "2b_1mb.b")
1254 (final_presence_set "2b_0mi.b" "2b_0m.ib")
1255 (final_presence_set "2b_0mib." "2b_0mi.b")
1256 (final_presence_set "2b_1mi.b" "2b_1m.ib")
1257 (final_presence_set "2b_1mib." "2b_1mi.b")
1259 (final_presence_set "2b_0mm.b" "2b_0m.mb")
1260 (final_presence_set "2b_0mmb." "2b_0mm.b")
1261 (final_presence_set "2b_1mm.b" "2b_1m.mb")
1262 (final_presence_set "2b_1mmb." "2b_1mm.b")
1264 (final_presence_set "2b_0mf.b" "2b_0m.fb")
1265 (final_presence_set "2b_0mfb." "2b_0mf.b")
1266 (final_presence_set "2b_1mf.b" "2b_1m.fb")
1267 (final_presence_set "2b_1mfb." "2b_1mf.b")
1269 (final_presence_set "2b_0mlx." "2b_0m.lx")
1270 (final_presence_set "2b_1mlx." "2b_1m.lx")
1272 ;; See the corresponding comment in non-bundling section above.
1275 "2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mib.,2b_0mmb.,2b_0mfb.,2b_0mlx.")
1276 (final_presence_set "2b_1b.bb" "2b_0mii.,2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mlx.")
1278 "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1m.bb,2b_1m.ib,2b_1m.mb,2b_1m.fb"
1279 "2b_0mii.,2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mib.,2b_0mmb.,2b_0mfb.,2b_0mlx.")
1281 ;; Ports/units (nb means nop.b insn issued into given port):
1283 "2b_um0, 2b_um1, 2b_um2, 2b_um3, 2b_ui0, 2b_ui1, 2b_uf0, 2b_uf1,\
1284 2b_ub0, 2b_ub1, 2b_ub2, 2b_unb0, 2b_unb1, 2b_unb2" "twob")
1286 (exclusion_set "2b_ub0" "2b_unb0")
1287 (exclusion_set "2b_ub1" "2b_unb1")
1288 (exclusion_set "2b_ub2" "2b_unb2")
1290 ;; The following rules are used to decrease number of alternatives.
1291 ;; They are consequences of Itanium2 microarchitecture. They also
1292 ;; describe the following rules mentioned in Itanium2
1293 ;; microarchitecture: rules mentioned in Itanium2 microarchitecture:
1294 ;; o "BBB/MBB: Always splits issue after either of these bundles".
1295 ;; o "MIB BBB: Split issue after the first bundle in this pair".
1297 "2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb."
1298 "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1b.bb,2b_1m.bb,\
1299 2b_1m.ib,2b_1m.mb,2b_1m.fb,2b_1m.lx")
1300 (exclusion_set "2b_0m.ib,2b_0mi.b,2b_0mib." "2b_1b.bb")
1302 ;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
1303 ;;; B-slot contains a nop.b or a brp instruction".
1304 ;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
1305 ;;; nop.b, otherwise it disperses to B2".
1307 "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\
1308 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx"
1309 "2b_0mib. 2b_ub2, 2b_0mfb. 2b_ub2, 2b_0mmb. 2b_ub2")
1311 ;; This is necessary to start new processor cycle when we meet stop bit.
1312 (define_cpu_unit "2b_stop" "twob")
1314 "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\
1315 2b_0m.fi,2b_0mf.i,2b_0mfi.,\
1316 2b_0m.mf,2b_0mm.f,2b_0mmf.,2b_0b.bb,2b_0bb.b,2b_0bbb.,\
1317 2b_0m.bb,2b_0mb.b,2b_0mbb.,\
1318 2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\
1319 2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \
1320 2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\
1321 2b_1m.fi,2b_1mf.i,2b_1mfi.,\
1322 2b_1m.mf,2b_1mm.f,2b_1mmf.,2b_1b.bb,2b_1bb.b,2b_1bbb.,\
1323 2b_1m.bb,2b_1mb.b,2b_1mbb.,\
1324 2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\
1325 2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx."
1328 ;; The issue logic can reorder M slot insns between different subtypes
1329 ;; but cannot reorder insn within the same subtypes. The following
1330 ;; constraint is enough to describe this.
1331 (final_presence_set "2b_um1" "2b_um0")
1332 (final_presence_set "2b_um3" "2b_um2")
1334 ;; The insn in the 1st I slot of the two bundle issue group will issue
1335 ;; to I0. The second I slot insn will issue to I1.
1336 (final_presence_set "2b_ui1" "2b_ui0")
1338 ;; For exceptions of I insns:
1339 (define_cpu_unit "2b_only_ui0" "twob")
1340 (final_absence_set "2b_only_ui0" "2b_ui1")
1344 (define_reservation "2b_M"
1345 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1346 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1347 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1348 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1349 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1350 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1351 +(2b_um0|2b_um1|2b_um2|2b_um3)")
1353 (define_reservation "2b_M_only_um0"
1354 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1355 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1356 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1357 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1358 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1359 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1362 (define_reservation "2b_M_only_um2"
1363 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1364 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1365 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1366 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1367 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1368 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1371 (define_reservation "2b_M_only_um01"
1372 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1373 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1374 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1375 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1376 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1377 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1380 (define_reservation "2b_M_only_um23"
1381 "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1382 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\
1383 |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\
1384 |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\
1385 |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\
1386 |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\
1389 ;; I instruction is dispersed to the lowest numbered I unit
1390 ;; not already in use. Remember about possible splitting.
1391 (define_reservation "2b_I"
1392 "2b_0mi.i+2_2+2b_ui0|2b_0mii.+2_3+(2b_ui0|2b_ui1)|2b_0mmi.+2_3+2b_ui0\
1393 |2b_0mfi.+2_3+2b_ui0|2b_0mi.b+2_2+2b_ui0\
1394 |(2b_1mi.i+2_5|2b_1mi.b+2_5)+(2b_ui0|2b_ui1)\
1395 |(2b_1mii.|2b_1mmi.|2b_1mfi.)+2_6+(2b_ui0|2b_ui1)")
1397 ;; "An F slot in the 1st bundle disperses to F0".
1398 ;; "An F slot in the 2st bundle disperses to F1".
1399 (define_reservation "2b_F"
1400 "2b_0mf.i+2_2+2b_uf0|2b_0mmf.+2_3+2b_uf0|2b_0mf.b+2_2+2b_uf0\
1401 |2b_1mf.i+2_5+2b_uf1|2b_1mmf.+2_6+2b_uf1|2b_1mf.b+2_5+2b_uf1")
1403 ;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B
1404 ;;; unit. That is, a B slot in 1st position is dispersed to B0. In the
1405 ;;; 2nd position it is dispersed to B2".
1406 (define_reservation "2b_NB"
1407 "2b_0b.bb+2_1+2b_unb0|2b_0bb.b+2_2+2b_unb1|2b_0bbb.+2_3+2b_unb2\
1408 |2b_0mb.b+2_2+2b_unb1|2b_0mbb.+2_3+2b_unb2\
1409 |2b_0mib.+2_3+2b_unb0|2b_0mmb.+2_3+2b_unb0|2b_0mfb.+2_3+2b_unb0\
1410 |2b_1b.bb+2_4+2b_unb0|2b_1bb.b+2_5+2b_unb1\
1411 |2b_1bbb.+2_6+2b_unb2|2b_1mb.b+2_5+2b_unb1|2b_1mbb.+2_6+2b_unb2\
1412 |2b_1mib.+2_6+2b_unb0|2b_1mmb.+2_6+2b_unb0|2b_1mfb.+2_6+2b_unb0")
1414 (define_reservation "2b_B"
1415 "2b_0b.bb+2_1+2b_ub0|2b_0bb.b+2_2+2b_ub1|2b_0bbb.+2_3+2b_ub2\
1416 |2b_0mb.b+2_2+2b_ub1|2b_0mbb.+2_3+2b_ub2|2b_0mib.+2_3+2b_ub2\
1417 |2b_0mfb.+2_3+2b_ub2|2b_1b.bb+2_4+2b_ub0|2b_1bb.b+2_5+2b_ub1\
1418 |2b_1bbb.+2_6+2b_ub2|2b_1mb.b+2_5+2b_ub1\
1419 |2b_1mib.+2_6+2b_ub2|2b_1mmb.+2_6+2b_ub2|2b_1mfb.+2_6+2b_ub2")
1421 ;; For the MLI template, the I slot insn is always assigned to port I0
1422 ;; if it is in the first bundle or it is assigned to port I1 if it is in
1423 ;; the second bundle.
1424 (define_reservation "2b_L"
1425 "2b_0mlx.+2_3+2b_ui0+2b_uf0|2b_1mlx.+2_6+2b_ui1+2b_uf1")
1427 ;; Should we describe that A insn in I slot can be issued into M
1428 ;; ports? I think it is not necessary because of multipass
1429 ;; scheduling. For example, the multipass scheduling could use
1430 ;; MMI-MMI instead of MII-MII where the two last I slots contain A
1431 ;; insns (even if the case is complicated by use-def conflicts).
1433 ;; In any case we could describe it as
1434 ;; (define_cpu_unit "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres"
1436 ;; (final_presence_set "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres"
1438 ;; (define_reservation "b_A"
1440 ;; |(2b_1mi.i+2_5|2b_1mii.+2_6|2b_1mmi.+2_6|2b_1mfi.+2_6|2b_1mi.b+2_5)\
1441 ;; +(2b_um0|2b_um1|2b_um2|2b_um3)\
1442 ;; +(2b_ui1_0pres|2b_ui1_1pres|2b_ui1_2pres|2b_ui1_3pres)")
1444 (define_reservation "2b_A" "2b_M|2b_I")
1446 ;; We assume that there is no insn issued on the same cycle as the
1448 (define_cpu_unit "2b_empty" "twob")
1449 (exclusion_set "2b_empty"
1450 "2b_0m.ii,2b_0m.mi,2b_0m.fi,2b_0m.mf,2b_0b.bb,2b_0m.bb,\
1451 2b_0m.ib,2b_0m.mb,2b_0m.fb,2b_0m.lx,2b_0mm.i")
1454 "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs"
1457 "2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs"
1460 (define_cpu_unit "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont, 2b_mb_cont,\
1461 2b_b_cont, 2b_bb_cont" "twob")
1463 ;; For stop in the middle of the bundles.
1464 (define_cpu_unit "2b_m_stop, 2b_m0_stop, 2b_m1_stop, 2b_0mmi_cont" "twob")
1465 (define_cpu_unit "2b_mi_stop, 2b_mi0_stop, 2b_mi1_stop, 2b_0mii_cont" "twob")
1467 (final_presence_set "2b_0m_bs"
1468 "2b_0m.ii, 2b_0m.mi, 2b_0m.mf, 2b_0m.fi, 2b_0m.bb,\
1469 2b_0m.ib, 2b_0m.fb, 2b_0m.mb, 2b_0m.lx")
1470 (final_presence_set "2b_1m_bs"
1471 "2b_1m.ii, 2b_1m.mi, 2b_1m.mf, 2b_1m.fi, 2b_1m.bb,\
1472 2b_1m.ib, 2b_1m.fb, 2b_1m.mb, 2b_1m.lx")
1473 (final_presence_set "2b_0mi_bs" "2b_0mi.i, 2b_0mi.i")
1474 (final_presence_set "2b_1mi_bs" "2b_1mi.i, 2b_1mi.i")
1475 (final_presence_set "2b_0mm_bs" "2b_0mm.i, 2b_0mm.f, 2b_0mm.b")
1476 (final_presence_set "2b_1mm_bs" "2b_1mm.i, 2b_1mm.f, 2b_1mm.b")
1477 (final_presence_set "2b_0mf_bs" "2b_0mf.i, 2b_0mf.b")
1478 (final_presence_set "2b_1mf_bs" "2b_1mf.i, 2b_1mf.b")
1479 (final_presence_set "2b_0b_bs" "2b_0b.bb")
1480 (final_presence_set "2b_1b_bs" "2b_1b.bb")
1481 (final_presence_set "2b_0bb_bs" "2b_0bb.b")
1482 (final_presence_set "2b_1bb_bs" "2b_1bb.b")
1483 (final_presence_set "2b_0mb_bs" "2b_0mb.b")
1484 (final_presence_set "2b_1mb_bs" "2b_1mb.b")
1486 (exclusion_set "2b_0m_bs"
1487 "2b_0mi.i, 2b_0mm.i, 2b_0mm.f, 2b_0mf.i, 2b_0mb.b,\
1488 2b_0mi.b, 2b_0mf.b, 2b_0mm.b, 2b_0mlx., 2b_m0_stop")
1489 (exclusion_set "2b_1m_bs"
1490 "2b_1mi.i, 2b_1mm.i, 2b_1mm.f, 2b_1mf.i, 2b_1mb.b,\
1491 2b_1mi.b, 2b_1mf.b, 2b_1mm.b, 2b_1mlx., 2b_m1_stop")
1492 (exclusion_set "2b_0mi_bs" "2b_0mii., 2b_0mib., 2b_mi0_stop")
1493 (exclusion_set "2b_1mi_bs" "2b_1mii., 2b_1mib., 2b_mi1_stop")
1494 (exclusion_set "2b_0mm_bs" "2b_0mmi., 2b_0mmf., 2b_0mmb.")
1495 (exclusion_set "2b_1mm_bs" "2b_1mmi., 2b_1mmf., 2b_1mmb.")
1496 (exclusion_set "2b_0mf_bs" "2b_0mfi., 2b_0mfb.")
1497 (exclusion_set "2b_1mf_bs" "2b_1mfi., 2b_1mfb.")
1498 (exclusion_set "2b_0b_bs" "2b_0bb.b")
1499 (exclusion_set "2b_1b_bs" "2b_1bb.b")
1500 (exclusion_set "2b_0bb_bs" "2b_0bbb.")
1501 (exclusion_set "2b_1bb_bs" "2b_1bbb.")
1502 (exclusion_set "2b_0mb_bs" "2b_0mbb.")
1503 (exclusion_set "2b_1mb_bs" "2b_1mbb.")
1506 "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs,
1507 2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs"
1511 "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0mb.b,\
1512 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx."
1514 (final_presence_set "2b_0mii., 2b_0mib." "2b_mi_cont")
1515 (final_presence_set "2b_0mmi., 2b_0mmf., 2b_0mmb." "2b_mm_cont")
1516 (final_presence_set "2b_0mfi., 2b_0mfb." "2b_mf_cont")
1517 (final_presence_set "2b_0bb.b" "2b_b_cont")
1518 (final_presence_set "2b_0bbb." "2b_bb_cont")
1519 (final_presence_set "2b_0mbb." "2b_mb_cont")
1522 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1523 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx"
1524 "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont,\
1525 2b_mb_cont, 2b_b_cont, 2b_bb_cont")
1527 (exclusion_set "2b_empty"
1528 "2b_m_cont,2b_mi_cont,2b_mm_cont,2b_mf_cont,\
1529 2b_mb_cont,2b_b_cont,2b_bb_cont")
1532 (final_presence_set "2b_m0_stop" "2b_0m.mi")
1533 (final_presence_set "2b_0mm.i" "2b_0mmi_cont")
1534 (exclusion_set "2b_0mmi_cont"
1535 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1536 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1537 (exclusion_set "2b_m0_stop" "2b_0mm.i")
1538 (final_presence_set "2b_m1_stop" "2b_1m.mi")
1539 (exclusion_set "2b_m1_stop" "2b_1mm.i")
1540 (final_presence_set "2b_m_stop" "2b_m0_stop, 2b_m1_stop")
1543 (final_presence_set "2b_mi0_stop" "2b_0mi.i")
1544 (final_presence_set "2b_0mii." "2b_0mii_cont")
1545 (exclusion_set "2b_0mii_cont"
1546 "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\
1547 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")
1548 (exclusion_set "2b_mi0_stop" "2b_0mii.")
1549 (final_presence_set "2b_mi1_stop" "2b_1mi.i")
1550 (exclusion_set "2b_mi1_stop" "2b_1mii.")
1551 (final_presence_set "2b_mi_stop" "2b_mi0_stop, 2b_mi1_stop")
1554 "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\
1555 2b_0m.fi,2b_0mf.i,2b_0mfi.,2b_0m.mf,2b_0mm.f,2b_0mmf.,\
1556 2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb.,\
1557 2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\
1558 2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \
1559 2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\
1560 2b_1m.fi,2b_1mf.i,2b_1mfi.,2b_1m.mf,2b_1mm.f,2b_1mmf.,\
1561 2b_1b.bb,2b_1bb.b,2b_1bbb.,2b_1m.bb,2b_1mb.b,2b_1mbb.,\
1562 2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\
1563 2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx."
1564 "2b_m0_stop,2b_m1_stop,2b_mi0_stop,2b_mi1_stop")
1566 (define_insn_reservation "2b_stop_bit" 0
1567 (and (and (eq_attr "cpu" "itanium2")
1568 (eq_attr "itanium_class" "stop_bit"))
1569 (ne (symbol_ref "bundling_p") (const_int 0)))
1570 "2b_stop|2b_m0_stop|2b_m1_stop|2b_mi0_stop|2b_mi1_stop")
1571 (define_insn_reservation "2b_br" 0
1572 (and (and (eq_attr "cpu" "itanium2")
1573 (eq_attr "itanium_class" "br"))
1574 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B")
1575 (define_insn_reservation "2b_scall" 0
1576 (and (and (eq_attr "cpu" "itanium2")
1577 (eq_attr "itanium_class" "scall"))
1578 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B")
1579 (define_insn_reservation "2b_fcmp" 2
1580 (and (and (eq_attr "cpu" "itanium2")
1581 (eq_attr "itanium_class" "fcmp"))
1582 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1583 (define_insn_reservation "2b_fcvtfx" 4
1584 (and (and (eq_attr "cpu" "itanium2")
1585 (eq_attr "itanium_class" "fcvtfx"))
1586 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1587 (define_insn_reservation "2b_fld" 6
1588 (and (and (and (and (eq_attr "cpu" "itanium2")
1589 (eq_attr "itanium_class" "fld"))
1590 (eq_attr "data_speculative" "no"))
1591 (eq_attr "check_load" "no"))
1592 (ne (symbol_ref "bundling_p") (const_int 0)))
1594 (define_insn_reservation "2b_flda" 6
1595 (and (and (and (eq_attr "cpu" "itanium2")
1596 (eq_attr "itanium_class" "fld"))
1597 (eq_attr "data_speculative" "yes"))
1598 (ne (symbol_ref "bundling_p") (const_int 0)))
1600 (define_insn_reservation "2b_fldc" 0
1601 (and (and (and (eq_attr "cpu" "itanium2")
1602 (eq_attr "itanium_class" "fld"))
1603 (eq_attr "check_load" "yes"))
1604 (ne (symbol_ref "bundling_p") (const_int 0)))
1607 (define_insn_reservation "2b_fldp" 6
1608 (and (and (and (eq_attr "cpu" "itanium2")
1609 (eq_attr "itanium_class" "fldp"))
1610 (eq_attr "check_load" "no"))
1611 (ne (symbol_ref "bundling_p") (const_int 0)))
1613 (define_insn_reservation "2b_fldpc" 0
1614 (and (and (and (eq_attr "cpu" "itanium2")
1615 (eq_attr "itanium_class" "fldp"))
1616 (eq_attr "check_load" "yes"))
1617 (ne (symbol_ref "bundling_p") (const_int 0)))
1620 (define_insn_reservation "2b_fmac" 4
1621 (and (and (eq_attr "cpu" "itanium2")
1622 (eq_attr "itanium_class" "fmac"))
1623 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1624 (define_insn_reservation "2b_fmisc" 4
1625 (and (and (eq_attr "cpu" "itanium2")
1626 (eq_attr "itanium_class" "fmisc"))
1627 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1630 (define_insn_reservation "2b_frar_i" 13
1631 (and (and (eq_attr "cpu" "itanium2")
1632 (eq_attr "itanium_class" "frar_i"))
1633 (ne (symbol_ref "bundling_p") (const_int 0)))
1636 (define_insn_reservation "2b_frar_m" 6
1637 (and (and (eq_attr "cpu" "itanium2")
1638 (eq_attr "itanium_class" "frar_m"))
1639 (ne (symbol_ref "bundling_p") (const_int 0)))
1641 (define_insn_reservation "2b_frbr" 2
1642 (and (and (eq_attr "cpu" "itanium2")
1643 (eq_attr "itanium_class" "frbr"))
1644 (ne (symbol_ref "bundling_p") (const_int 0)))
1646 (define_insn_reservation "2b_frfr" 5
1647 (and (and (eq_attr "cpu" "itanium2")
1648 (eq_attr "itanium_class" "frfr"))
1649 (ne (symbol_ref "bundling_p") (const_int 0)))
1651 (define_insn_reservation "2b_frpr" 2
1652 (and (and (eq_attr "cpu" "itanium2")
1653 (eq_attr "itanium_class" "frpr"))
1654 (ne (symbol_ref "bundling_p") (const_int 0)))
1657 (define_insn_reservation "2b_ialu" 1
1658 (and (and (eq_attr "cpu" "itanium2")
1659 (eq_attr "itanium_class" "ialu"))
1660 (ne (symbol_ref "bundling_p") (const_int 0)))
1662 (define_insn_reservation "2b_icmp" 1
1663 (and (and (eq_attr "cpu" "itanium2")
1664 (eq_attr "itanium_class" "icmp"))
1665 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A")
1666 (define_insn_reservation "2b_ilog" 1
1667 (and (and (eq_attr "cpu" "itanium2")
1668 (eq_attr "itanium_class" "ilog"))
1669 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A")
1670 (define_insn_reservation "2b_mmalua" 2
1671 (and (and (eq_attr "cpu" "itanium2")
1672 (eq_attr "itanium_class" "mmalua"))
1673 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A")
1675 (define_insn_reservation "2b_ishf" 1
1676 (and (and (eq_attr "cpu" "itanium2")
1677 (eq_attr "itanium_class" "ishf"))
1678 (ne (symbol_ref "bundling_p") (const_int 0)))
1681 (define_insn_reservation "2b_ld" 1
1682 (and (and (and (eq_attr "cpu" "itanium2")
1683 (eq_attr "itanium_class" "ld"))
1684 (eq_attr "check_load" "no"))
1685 (ne (symbol_ref "bundling_p") (const_int 0)))
1687 (define_insn_reservation "2b_ldc" 0
1688 (and (and (and (eq_attr "cpu" "itanium2")
1689 (eq_attr "itanium_class" "ld"))
1690 (eq_attr "check_load" "yes"))
1691 (ne (symbol_ref "bundling_p") (const_int 0)))
1694 (define_insn_reservation "2b_long_i" 1
1695 (and (and (eq_attr "cpu" "itanium2")
1696 (eq_attr "itanium_class" "long_i"))
1697 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_L")
1700 (define_insn_reservation "2b_mmmul" 2
1701 (and (and (eq_attr "cpu" "itanium2")
1702 (eq_attr "itanium_class" "mmmul"))
1703 (ne (symbol_ref "bundling_p") (const_int 0)))
1706 (define_insn_reservation "2b_mmshf" 2
1707 (and (and (eq_attr "cpu" "itanium2")
1708 (eq_attr "itanium_class" "mmshf"))
1709 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1711 (define_insn_reservation "2b_mmshfi" 1
1712 (and (and (eq_attr "cpu" "itanium2")
1713 (eq_attr "itanium_class" "mmshfi"))
1714 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1716 (define_insn_reservation "2b_rse_m" 0
1717 (and (and (eq_attr "cpu" "itanium2")
1718 (eq_attr "itanium_class" "rse_m"))
1719 (ne (symbol_ref "bundling_p") (const_int 0)))
1720 "(2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\
1721 |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1+2b_um0")
1722 (define_insn_reservation "2b_sem" 0
1723 (and (and (eq_attr "cpu" "itanium2")
1724 (eq_attr "itanium_class" "sem"))
1725 (ne (symbol_ref "bundling_p") (const_int 0)))
1728 (define_insn_reservation "2b_stf" 1
1729 (and (and (eq_attr "cpu" "itanium2")
1730 (eq_attr "itanium_class" "stf"))
1731 (ne (symbol_ref "bundling_p") (const_int 0)))
1733 (define_insn_reservation "2b_st" 1
1734 (and (and (eq_attr "cpu" "itanium2")
1735 (eq_attr "itanium_class" "st"))
1736 (ne (symbol_ref "bundling_p") (const_int 0)))
1738 (define_insn_reservation "2b_syst_m0" 0
1739 (and (and (eq_attr "cpu" "itanium2")
1740 (eq_attr "itanium_class" "syst_m0"))
1741 (ne (symbol_ref "bundling_p") (const_int 0)))
1743 (define_insn_reservation "2b_syst_m" 0
1744 (and (and (eq_attr "cpu" "itanium2")
1745 (eq_attr "itanium_class" "syst_m"))
1746 (ne (symbol_ref "bundling_p") (const_int 0)))
1749 (define_insn_reservation "2b_tbit" 1
1750 (and (and (eq_attr "cpu" "itanium2")
1751 (eq_attr "itanium_class" "tbit"))
1752 (ne (symbol_ref "bundling_p") (const_int 0)))
1754 (define_insn_reservation "2b_toar_i" 0
1755 (and (and (eq_attr "cpu" "itanium2")
1756 (eq_attr "itanium_class" "toar_i"))
1757 (ne (symbol_ref "bundling_p") (const_int 0)))
1760 (define_insn_reservation "2b_toar_m" 5
1761 (and (and (eq_attr "cpu" "itanium2")
1762 (eq_attr "itanium_class" "toar_m"))
1763 (ne (symbol_ref "bundling_p") (const_int 0)))
1766 (define_insn_reservation "2b_tobr" 1
1767 (and (and (eq_attr "cpu" "itanium2")
1768 (eq_attr "itanium_class" "tobr"))
1769 (ne (symbol_ref "bundling_p") (const_int 0)))
1771 (define_insn_reservation "2b_tofr" 5
1772 (and (and (eq_attr "cpu" "itanium2")
1773 (eq_attr "itanium_class" "tofr"))
1774 (ne (symbol_ref "bundling_p") (const_int 0)))
1777 (define_insn_reservation "2b_topr" 1
1778 (and (and (eq_attr "cpu" "itanium2")
1779 (eq_attr "itanium_class" "topr"))
1780 (ne (symbol_ref "bundling_p") (const_int 0)))
1783 (define_insn_reservation "2b_xmpy" 4
1784 (and (and (eq_attr "cpu" "itanium2")
1785 (eq_attr "itanium_class" "xmpy"))
1786 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1788 (define_insn_reservation "2b_xtd" 1
1789 (and (and (eq_attr "cpu" "itanium2")
1790 (eq_attr "itanium_class" "xtd"))
1791 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1793 (define_insn_reservation "2b_chk_s_i" 0
1794 (and (and (eq_attr "cpu" "itanium2")
1795 (eq_attr "itanium_class" "chk_s_i"))
1796 (ne (symbol_ref "bundling_p") (const_int 0)))
1797 "2b_I|2b_M_only_um23")
1798 (define_insn_reservation "2b_chk_s_f" 0
1799 (and (and (eq_attr "cpu" "itanium2")
1800 (eq_attr "itanium_class" "chk_s_f"))
1801 (ne (symbol_ref "bundling_p") (const_int 0)))
1803 (define_insn_reservation "2b_chk_a" 0
1804 (and (and (eq_attr "cpu" "itanium2")
1805 (eq_attr "itanium_class" "chk_a"))
1806 (ne (symbol_ref "bundling_p") (const_int 0)))
1809 (define_insn_reservation "2b_lfetch" 0
1810 (and (and (eq_attr "cpu" "itanium2")
1811 (eq_attr "itanium_class" "lfetch"))
1812 (ne (symbol_ref "bundling_p") (const_int 0)))
1814 (define_insn_reservation "2b_nop_m" 0
1815 (and (and (eq_attr "cpu" "itanium2")
1816 (eq_attr "itanium_class" "nop_m"))
1817 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_M")
1818 (define_insn_reservation "2b_nop_b" 0
1819 (and (and (eq_attr "cpu" "itanium2")
1820 (eq_attr "itanium_class" "nop_b"))
1821 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_NB")
1822 (define_insn_reservation "2b_nop_i" 0
1823 (and (and (eq_attr "cpu" "itanium2")
1824 (eq_attr "itanium_class" "nop_i"))
1825 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I")
1826 (define_insn_reservation "2b_nop_f" 0
1827 (and (and (eq_attr "cpu" "itanium2")
1828 (eq_attr "itanium_class" "nop_f"))
1829 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")
1830 (define_insn_reservation "2b_nop_x" 0
1831 (and (and (eq_attr "cpu" "itanium2")
1832 (eq_attr "itanium_class" "nop_x"))
1833 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_L")
1834 (define_insn_reservation "2b_unknown" 1
1835 (and (and (eq_attr "cpu" "itanium2")
1836 (eq_attr "itanium_class" "unknown"))
1837 (ne (symbol_ref "bundling_p") (const_int 0))) "2b_empty")
1838 (define_insn_reservation "2b_nop" 0
1839 (and (and (eq_attr "cpu" "itanium2")
1840 (eq_attr "itanium_class" "nop"))
1841 (ne (symbol_ref "bundling_p") (const_int 0)))
1842 "2b_M|2b_NB|2b_I|2b_F")
1843 (define_insn_reservation "2b_ignore" 0
1844 (and (and (eq_attr "cpu" "itanium2")
1845 (eq_attr "itanium_class" "ignore"))
1846 (ne (symbol_ref "bundling_p") (const_int 0))) "nothing")
1848 (define_insn_reservation "2b_pre_cycle" 0
1849 (and (and (eq_attr "cpu" "itanium2")
1850 (eq_attr "itanium_class" "pre_cycle"))
1851 (ne (symbol_ref "bundling_p") (const_int 0)))
1852 "(2b_0m_bs, 2b_m_cont) \
1853 | (2b_0mi_bs, 2b_mi_cont) \
1854 | (2b_0mm_bs, 2b_mm_cont) \
1855 | (2b_0mf_bs, 2b_mf_cont) \
1856 | (2b_0b_bs, 2b_b_cont) \
1857 | (2b_0bb_bs, 2b_bb_cont) \
1858 | (2b_0mb_bs, 2b_mb_cont) \
1859 | (2b_1m_bs, 2b_m_cont) \
1860 | (2b_1mi_bs, 2b_mi_cont) \
1861 | (2b_1mm_bs, 2b_mm_cont) \
1862 | (2b_1mf_bs, 2b_mf_cont) \
1863 | (2b_1b_bs, 2b_b_cont) \
1864 | (2b_1bb_bs, 2b_bb_cont) \
1865 | (2b_1mb_bs, 2b_mb_cont) \
1866 | (2b_m_stop, 2b_0mmi_cont) \
1867 | (2b_mi_stop, 2b_0mii_cont)")