1;; Itanium1 (original Itanium) DFA descriptions for insn scheduling
2;; and bundling.
3;; Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
4;; Contributed by Vladimir Makarov <vmakarov@redhat.com>.
5;;
6;; This file is part of GCC.
7;;
8;; GCC is free software; you can redistribute it and/or modify
9;; it under the terms of the GNU General Public License as published by
10;; the Free Software Foundation; either version 2, or (at your option)
11;; any later version.
12;;
13;; GCC is distributed in the hope that it will be useful,
14;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16;; GNU General Public License for more details.
17;;
18;; You should have received a copy of the GNU General Public License
19;; along with GCC; see the file COPYING.  If not, write to
20;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21;; Boston, MA 02110-1301, USA.  */
22;;
23
24
25/* This is description of pipeline hazards based on DFA.  The
26   following constructions can be used for this:
27   
28   o define_cpu_unit string [string]) describes a cpu functional unit
29     (separated by comma).
30
31     1st operand: Names of cpu function units.
32     2nd operand: Name of automaton (see comments for
33     DEFINE_AUTOMATON).
34
35     All define_reservations and define_cpu_units should have unique
36     names which cannot be "nothing".
37
38   o (exclusion_set string string) means that each CPU function unit
39     in the first string cannot be reserved simultaneously with each
40     unit whose name is in the second string and vise versa.  CPU
41     units in the string are separated by commas. For example, it is
42     useful for description CPU with fully pipelined floating point
43     functional unit which can execute simultaneously only single
44     floating point insns or only double floating point insns.
45
46   o (presence_set string string) means that each CPU function unit in
47     the first string cannot be reserved unless at least one of
48     pattern of units whose names are in the second string is
49     reserved.  This is an asymmetric relation.  CPU units or unit
50     patterns in the strings are separated by commas.  Pattern is one
51     unit name or unit names separated by white-spaces.
52 
53     For example, it is useful for description that slot1 is reserved
54     after slot0 reservation for a VLIW processor.  We could describe
55     it by the following construction
56
57         (presence_set "slot1" "slot0")
58
59     Or slot1 is reserved only after slot0 and unit b0 reservation.
60     In this case we could write
61
62         (presence_set "slot1" "slot0 b0")
63
64     All CPU functional units in a set should belong to the same
65     automaton.
66
67   o (final_presence_set string string) is analogous to
68     `presence_set'.  The difference between them is when checking is
69     done.  When an instruction is issued in given automaton state
70     reflecting all current and planned unit reservations, the
71     automaton state is changed.  The first state is a source state,
72     the second one is a result state.  Checking for `presence_set' is
73     done on the source state reservation, checking for
74     `final_presence_set' is done on the result reservation.  This
75     construction is useful to describe a reservation which is
76     actually two subsequent reservations.  For example, if we use
77
78         (presence_set "slot1" "slot0")
79
80     the following insn will be never issued (because slot1 requires
81     slot0 which is absent in the source state).
82
83         (define_reservation "insn_and_nop" "slot0 + slot1")
84
85     but it can be issued if we use analogous `final_presence_set'.
86
87   o (absence_set string string) means that each CPU function unit in
88     the first string can be reserved only if each pattern of units
89     whose names are in the second string is not reserved.  This is an
90     asymmetric relation (actually exclusion set is analogous to this
91     one but it is symmetric).  CPU units or unit patterns in the
92     string are separated by commas.  Pattern is one unit name or unit
93     names separated by white-spaces.
94
95     For example, it is useful for description that slot0 cannot be
96     reserved after slot1 or slot2 reservation for a VLIW processor.
97     We could describe it by the following construction
98
99        (absence_set "slot2" "slot0, slot1")
100
101     Or slot2 cannot be reserved if slot0 and unit b0 are reserved or
102     slot1 and unit b1 are reserved .  In this case we could write
103
104        (absence_set "slot2" "slot0 b0, slot1 b1")
105
106     All CPU functional units in a set should to belong the same
107     automaton.
108
109   o (final_absence_set string string) is analogous to `absence_set' but
110     checking is done on the result (state) reservation.  See comments
111     for final_presence_set.
112
113   o (define_bypass number out_insn_names in_insn_names) names bypass with
114     given latency (the first number) from insns given by the first
115     string (see define_insn_reservation) into insns given by the
116     second string.  Insn names in the strings are separated by
117     commas.
118
119   o (define_automaton string) describes names of an automaton
120     generated and used for pipeline hazards recognition.  The names
121     are separated by comma.  Actually it is possibly to generate the
122     single automaton but unfortunately it can be very large.  If we
123     use more one automata, the summary size of the automata usually
124     is less than the single one.  The automaton name is used in
125     define_cpu_unit.  All automata should have unique names.
126
127   o (automata_option string) describes option for generation of
128     automata.  Currently there are the following options:
129
130     o "no-minimization" which makes no minimization of automata.
131       This is only worth to do when we are debugging the description
132       and need to look more accurately at reservations of states.
133
134     o "ndfa" which makes automata with nondetermenistic reservation
135        by insns.
136
137   o (define_reservation string string) names reservation (the first
138     string) of cpu functional units (the 2nd string).  Sometimes unit
139     reservations for different insns contain common parts.  In such
140     case, you describe common part and use one its name (the 1st
141     parameter) in regular expression in define_insn_reservation.  All
142     define_reservations, define results and define_cpu_units should
143     have unique names which cannot be "nothing".
144
145   o (define_insn_reservation name default_latency condition regexpr)
146     describes reservation of cpu functional units (the 3nd operand)
147     for instruction which is selected by the condition (the 2nd
148     parameter).  The first parameter is used for output of debugging
149     information.  The reservations are described by a regular
150     expression according the following syntax:
151
152       regexp = regexp "," oneof
153              | oneof
154
155       oneof = oneof "|" allof
156             | allof
157
158       allof = allof "+" repeat
159             | repeat
160 
161       repeat = element "*" number
162              | element
163
164       element = cpu_function_name
165               | reservation_name
166               | result_name
167               | "nothing"
168               | "(" regexp ")"
169
170       1. "," is used for describing start of the next cycle in
171          reservation.
172
173       2. "|" is used for describing the reservation described by the
174          first regular expression *or* the reservation described by
175          the second regular expression *or* etc.
176
177       3. "+" is used for describing the reservation described by the
178          first regular expression *and* the reservation described by
179          the second regular expression *and* etc.
180
181       4. "*" is used for convenience and simply means sequence in
182          which the regular expression are repeated NUMBER times with
183          cycle advancing (see ",").
184
185       5. cpu function unit name which means reservation.
186
187       6. reservation name -- see define_reservation.
188
189       7. string "nothing" means no units reservation.
190
191*/
192
193(define_automaton "one")
194
195;;   All possible combinations of bundles/syllables
196(define_cpu_unit "1_0m.ii, 1_0m.mi, 1_0m.fi, 1_0m.mf, 1_0b.bb, 1_0m.bb,\
197                  1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx" "one")
198(define_cpu_unit "1_0mi.i, 1_0mm.i, 1_0mf.i, 1_0mm.f, 1_0bb.b, 1_0mb.b,\
199                  1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx." "one")
200(define_cpu_unit "1_0mii., 1_0mmi., 1_0mfi., 1_0mmf., 1_0bbb., 1_0mbb.,\
201                  1_0mib., 1_0mmb., 1_0mfb." "one")
202
203(define_cpu_unit "1_1m.ii, 1_1m.mi, 1_1m.fi, 1_1b.bb, 1_1m.bb,\
204                  1_1m.ib, 1_1m.mb, 1_1m.fb, 1_1m.lx" "one")
205(define_cpu_unit "1_1mi.i, 1_1mm.i, 1_1mf.i, 1_1bb.b, 1_1mb.b,\
206                  1_1mi.b, 1_1mm.b, 1_1mf.b, 1_1mlx." "one")
207(define_cpu_unit "1_1mii., 1_1mmi., 1_1mfi., 1_1bbb., 1_1mbb.,\
208                  1_1mib., 1_1mmb., 1_1mfb." "one")
209
210;; Slot 1
211(exclusion_set "1_0m.ii"
212   "1_0m.mi, 1_0m.fi, 1_0m.mf, 1_0b.bb, 1_0m.bb, 1_0m.ib, 1_0m.mb, 1_0m.fb,\
213    1_0m.lx")
214(exclusion_set "1_0m.mi"
215   "1_0m.fi, 1_0m.mf, 1_0b.bb, 1_0m.bb, 1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
216(exclusion_set "1_0m.fi"
217   "1_0m.mf, 1_0b.bb, 1_0m.bb, 1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
218(exclusion_set "1_0m.mf"
219   "1_0b.bb, 1_0m.bb, 1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
220(exclusion_set "1_0b.bb" "1_0m.bb, 1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
221(exclusion_set "1_0m.bb" "1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
222(exclusion_set "1_0m.ib" "1_0m.mb, 1_0m.fb, 1_0m.lx")
223(exclusion_set "1_0m.mb" "1_0m.fb, 1_0m.lx")
224(exclusion_set "1_0m.fb" "1_0m.lx")
225
226;; Slot 2
227(exclusion_set "1_0mi.i"
228   "1_0mm.i, 1_0mf.i, 1_0mm.f, 1_0bb.b, 1_0mb.b, 1_0mi.b, 1_0mm.b, 1_0mf.b,\
229    1_0mlx.")
230(exclusion_set "1_0mm.i"
231   "1_0mf.i, 1_0mm.f, 1_0bb.b, 1_0mb.b, 1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx.")
232(exclusion_set "1_0mf.i"
233   "1_0mm.f, 1_0bb.b, 1_0mb.b, 1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx.")
234(exclusion_set "1_0mm.f"
235   "1_0bb.b, 1_0mb.b, 1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx.")
236(exclusion_set "1_0bb.b" "1_0mb.b, 1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx.")
237(exclusion_set "1_0mb.b" "1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx.")
238(exclusion_set "1_0mi.b" "1_0mm.b, 1_0mf.b, 1_0mlx.")
239(exclusion_set "1_0mm.b" "1_0mf.b, 1_0mlx.")
240(exclusion_set "1_0mf.b" "1_0mlx.")
241
242;; Slot 3
243(exclusion_set "1_0mii."
244   "1_0mmi., 1_0mfi., 1_0mmf., 1_0bbb., 1_0mbb., 1_0mib., 1_0mmb., 1_0mfb.,\
245    1_0mlx.")
246(exclusion_set "1_0mmi."
247   "1_0mfi., 1_0mmf., 1_0bbb., 1_0mbb., 1_0mib., 1_0mmb., 1_0mfb., 1_0mlx.")
248(exclusion_set "1_0mfi."
249   "1_0mmf., 1_0bbb., 1_0mbb., 1_0mib., 1_0mmb., 1_0mfb., 1_0mlx.")
250(exclusion_set "1_0mmf."
251   "1_0bbb., 1_0mbb., 1_0mib., 1_0mmb., 1_0mfb., 1_0mlx.")
252(exclusion_set "1_0bbb." "1_0mbb., 1_0mib., 1_0mmb., 1_0mfb., 1_0mlx.")
253(exclusion_set "1_0mbb." "1_0mib., 1_0mmb., 1_0mfb., 1_0mlx.")
254(exclusion_set "1_0mib." "1_0mmb., 1_0mfb., 1_0mlx.")
255(exclusion_set "1_0mmb." "1_0mfb., 1_0mlx.")
256(exclusion_set "1_0mfb." "1_0mlx.")
257
258;; Slot 4
259(exclusion_set "1_1m.ii"
260   "1_1m.mi, 1_1m.fi, 1_1b.bb, 1_1m.bb, 1_1m.ib, 1_1m.mb, 1_1m.fb, 1_1m.lx")
261(exclusion_set "1_1m.mi"
262   "1_1m.fi, 1_1b.bb, 1_1m.bb, 1_1m.ib, 1_1m.mb, 1_1m.fb, 1_1m.lx")
263(exclusion_set "1_1m.fi"
264   "1_1b.bb, 1_1m.bb, 1_1m.ib, 1_1m.mb, 1_1m.fb, 1_1m.lx")
265(exclusion_set "1_1b.bb" "1_1m.bb, 1_1m.ib, 1_1m.mb, 1_1m.fb, 1_1m.lx")
266(exclusion_set "1_1m.bb" "1_1m.ib, 1_1m.mb, 1_1m.fb, 1_1m.lx")
267(exclusion_set "1_1m.ib" "1_1m.mb, 1_1m.fb, 1_1m.lx")
268(exclusion_set "1_1m.mb" "1_1m.fb, 1_1m.lx")
269(exclusion_set "1_1m.fb" "1_1m.lx")
270
271;; Slot 5
272(exclusion_set "1_1mi.i"
273   "1_1mm.i, 1_1mf.i, 1_1bb.b, 1_1mb.b, 1_1mi.b, 1_1mm.b, 1_1mf.b, 1_1mlx.")
274(exclusion_set "1_1mm.i"
275   "1_1mf.i, 1_1bb.b, 1_1mb.b, 1_1mi.b, 1_1mm.b, 1_1mf.b, 1_1mlx.")
276(exclusion_set "1_1mf.i"
277   "1_1bb.b, 1_1mb.b, 1_1mi.b, 1_1mm.b, 1_1mf.b, 1_1mlx.")
278(exclusion_set "1_1bb.b" "1_1mb.b, 1_1mi.b, 1_1mm.b, 1_1mf.b, 1_1mlx.")
279(exclusion_set "1_1mb.b" "1_1mi.b, 1_1mm.b, 1_1mf.b, 1_1mlx.")
280(exclusion_set "1_1mi.b" "1_1mm.b, 1_1mf.b, 1_1mlx.")
281(exclusion_set "1_1mm.b" "1_1mf.b, 1_1mlx.")
282(exclusion_set "1_1mf.b" "1_1mlx.")
283
284;; Slot 6
285(exclusion_set "1_1mii."
286   "1_1mmi., 1_1mfi., 1_1bbb., 1_1mbb., 1_1mib., 1_1mmb., 1_1mfb., 1_1mlx.")
287(exclusion_set "1_1mmi."
288   "1_1mfi., 1_1bbb., 1_1mbb., 1_1mib., 1_1mmb., 1_1mfb., 1_1mlx.")
289(exclusion_set "1_1mfi."
290   "1_1bbb., 1_1mbb., 1_1mib., 1_1mmb., 1_1mfb., 1_1mlx.")
291(exclusion_set "1_1bbb." "1_1mbb., 1_1mib., 1_1mmb., 1_1mfb., 1_1mlx.")
292(exclusion_set "1_1mbb." "1_1mib., 1_1mmb., 1_1mfb., 1_1mlx.")
293(exclusion_set "1_1mib." "1_1mmb., 1_1mfb., 1_1mlx.")
294(exclusion_set "1_1mmb." "1_1mfb., 1_1mlx.")
295(exclusion_set "1_1mfb." "1_1mlx.")
296
297(final_presence_set "1_0mi.i" "1_0m.ii")
298(final_presence_set "1_0mii." "1_0mi.i")
299(final_presence_set "1_1mi.i" "1_1m.ii")
300(final_presence_set "1_1mii." "1_1mi.i")
301
302(final_presence_set "1_0mm.i" "1_0m.mi")
303(final_presence_set "1_0mmi." "1_0mm.i")
304(final_presence_set "1_1mm.i" "1_1m.mi")
305(final_presence_set "1_1mmi." "1_1mm.i")
306
307(final_presence_set "1_0mf.i" "1_0m.fi")
308(final_presence_set "1_0mfi." "1_0mf.i")
309(final_presence_set "1_1mf.i" "1_1m.fi")
310(final_presence_set "1_1mfi." "1_1mf.i")
311
312(final_presence_set "1_0mm.f" "1_0m.mf")
313(final_presence_set "1_0mmf." "1_0mm.f")
314
315(final_presence_set "1_0bb.b" "1_0b.bb")
316(final_presence_set "1_0bbb." "1_0bb.b")
317(final_presence_set "1_1bb.b" "1_1b.bb")
318(final_presence_set "1_1bbb." "1_1bb.b")
319
320(final_presence_set "1_0mb.b" "1_0m.bb")
321(final_presence_set "1_0mbb." "1_0mb.b")
322(final_presence_set "1_1mb.b" "1_1m.bb")
323(final_presence_set "1_1mbb." "1_1mb.b")
324
325(final_presence_set "1_0mi.b" "1_0m.ib")
326(final_presence_set "1_0mib." "1_0mi.b")
327(final_presence_set "1_1mi.b" "1_1m.ib")
328(final_presence_set "1_1mib." "1_1mi.b")
329
330(final_presence_set "1_0mm.b" "1_0m.mb")
331(final_presence_set "1_0mmb." "1_0mm.b")
332(final_presence_set "1_1mm.b" "1_1m.mb")
333(final_presence_set "1_1mmb." "1_1mm.b")
334
335(final_presence_set "1_0mf.b" "1_0m.fb")
336(final_presence_set "1_0mfb." "1_0mf.b")
337(final_presence_set "1_1mf.b" "1_1m.fb")
338(final_presence_set "1_1mfb." "1_1mf.b")
339
340(final_presence_set "1_0mlx." "1_0m.lx")
341(final_presence_set "1_1mlx." "1_1m.lx")
342
343(final_presence_set
344   "1_1m.ii,1_1m.mi,1_1m.fi,1_1b.bb,1_1m.bb,1_1m.ib,1_1m.mb,1_1m.fb,1_1m.lx"
345   "1_0mii.,1_0mmi.,1_0mfi.,1_0mmf.,1_0bbb.,1_0mbb.,1_0mib.,1_0mmb.,1_0mfb.,\
346    1_0mlx.")
347
348;;  Microarchitecture units:
349(define_cpu_unit
350   "1_um0, 1_um1, 1_ui0, 1_ui1, 1_uf0, 1_uf1, 1_ub0, 1_ub1, 1_ub2,\
351    1_unb0, 1_unb1, 1_unb2" "one")
352
353(exclusion_set "1_ub0" "1_unb0")
354(exclusion_set "1_ub1" "1_unb1")
355(exclusion_set "1_ub2" "1_unb2")
356
357;; The following rules are used to decrease number of alternatives.
358;; They are consequences of Itanium microarchitecture.  They also
359;; describe the following rules mentioned in Itanium
360;; microarchitecture: rules mentioned in Itanium microarchitecture:
361;; o "MMF: Always splits issue before the first M and after F regardless
362;;   of surrounding bundles and stops".
363;; o "BBB/MBB: Always splits issue after either of these bundles".
364;; o "MIB BBB: Split issue after the first bundle in this pair".
365
366(exclusion_set "1_0m.mf,1_0mm.f,1_0mmf."
367   "1_1m.ii,1_1m.mi,1_1m.fi,1_1b.bb,1_1m.bb,1_1m.ib,1_1m.mb,1_1m.fb,1_1m.lx")
368(exclusion_set "1_0b.bb,1_0bb.b,1_0bbb.,1_0m.bb,1_0mb.b,1_0mbb."
369   "1_1m.ii,1_1m.mi,1_1m.fi,1_1b.bb,1_1m.bb,1_1m.ib,1_1m.mb,1_1m.fb,1_1m.lx")
370(exclusion_set "1_0m.ib,1_0mi.b,1_0mib." "1_1b.bb")
371
372;;  For exceptions of M, I, B, F insns:
373(define_cpu_unit "1_not_um1, 1_not_ui1, 1_not_uf1" "one")
374
375(final_absence_set "1_not_um1"  "1_um1")
376(final_absence_set "1_not_ui1"  "1_ui1")
377(final_absence_set "1_not_uf1"  "1_uf1")
378
379;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
380;;; B-slot contains a nop.b or a brp instruction".
381;;;   "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
382;;; nop.b, otherwise it disperses to B2".
383(final_absence_set
384   "1_1m.ii, 1_1m.mi, 1_1m.fi, 1_1b.bb, 1_1m.bb, 1_1m.ib, 1_1m.mb, 1_1m.fb,\
385    1_1m.lx"
386   "1_0mib. 1_ub2, 1_0mfb. 1_ub2, 1_0mmb. 1_ub2")
387
388;; This is necessary to start new processor cycle when we meet stop bit.
389(define_cpu_unit "1_stop" "one")
390(final_absence_set
391   "1_0m.ii,1_0mi.i,1_0mii.,1_0m.mi,1_0mm.i,1_0mmi.,1_0m.fi,1_0mf.i,1_0mfi.,\
392    1_0m.mf,1_0mm.f,1_0mmf.,1_0b.bb,1_0bb.b,1_0bbb.,1_0m.bb,1_0mb.b,1_0mbb.,\
393    1_0m.ib,1_0mi.b,1_0mib.,1_0m.mb,1_0mm.b,1_0mmb.,1_0m.fb,1_0mf.b,1_0mfb.,\
394    1_0m.lx,1_0mlx., \
395    1_1m.ii,1_1mi.i,1_1mii.,1_1m.mi,1_1mm.i,1_1mmi.,1_1m.fi,1_1mf.i,1_1mfi.,\
396    1_1b.bb,1_1bb.b,1_1bbb.,1_1m.bb,1_1mb.b,1_1mbb.,1_1m.ib,1_1mi.b,1_1mib.,\
397    1_1m.mb,1_1mm.b,1_1mmb.,1_1m.fb,1_1mf.b,1_1mfb.,1_1m.lx,1_1mlx."
398   "1_stop")
399
400;; M and I instruction is dispersed to the lowest numbered M or I unit
401;; not already in use.  An I slot in the 3rd position of 2nd bundle is
402;; always dispersed to I1
403(final_presence_set "1_um1" "1_um0")
404(final_presence_set "1_ui1" "1_ui0, 1_1mii., 1_1mmi., 1_1mfi.")
405
406;; Insns
407
408;; M and I instruction is dispersed to the lowest numbered M or I unit
409;; not already in use.  An I slot in the 3rd position of 2nd bundle is
410;; always dispersed to I1
411(define_reservation "1_M0"
412  "1_0m.ii+1_um0|1_0m.mi+1_um0|1_0mm.i+(1_um0|1_um1)\
413   |1_0m.fi+1_um0|1_0m.mf+1_um0|1_0mm.f+1_um1\
414   |1_0m.bb+1_um0|1_0m.ib+1_um0|1_0m.mb+1_um0\
415   |1_0mm.b+1_um1|1_0m.fb+1_um0|1_0m.lx+1_um0\
416   |1_1mm.i+1_um1|1_1mm.b+1_um1\
417   |(1_1m.ii|1_1m.mi|1_1m.fi|1_1m.bb|1_1m.ib|1_1m.mb|1_1m.fb|1_1m.lx)\
418    +(1_um0|1_um1)")
419
420(define_reservation "1_M1"
421  "(1_0mii.+(1_ui0|1_ui1)|1_0mmi.+1_ui0|1_0mfi.+1_ui0\
422    |1_0mib.+1_unb0|1_0mfb.+1_unb0|1_0mmb.+1_unb0)\
423     +(1_1m.ii|1_1m.mi|1_1m.fi|1_1m.bb|1_1m.ib|1_1m.mb|1_1m.fb|1_1m.lx)\
424     +(1_um0|1_um1)")
425
426(define_reservation "1_M" "1_M0|1_M1")
427
428;;  Exceptions for dispersal rules.
429;; "An I slot in the 3rd position of 2nd bundle is always dispersed to I1".
430(define_reservation "1_I0"
431  "1_0mi.i+1_ui0|1_0mii.+(1_ui0|1_ui1)|1_0mmi.+1_ui0|1_0mfi.+1_ui0\
432   |1_0mi.b+1_ui0|(1_1mi.i|1_1mi.b)+(1_ui0|1_ui1)\
433   |1_1mii.+1_ui1|1_1mmi.+1_ui1|1_1mfi.+1_ui1")
434
435(define_reservation "1_I1"
436  "1_0m.ii+1_um0+1_0mi.i+1_ui0|1_0mm.i+(1_um0|1_um1)+1_0mmi.+1_ui0\
437   |1_0mf.i+1_uf0+1_0mfi.+1_ui0|1_0m.ib+1_um0+1_0mi.b+1_ui0\
438   |(1_1m.ii+(1_um0|1_um1)+1_1mi.i\
439   |1_1m.ib+(1_um0|1_um1)+1_1mi.b)+(1_ui0|1_ui1)\
440   |1_1mm.i+1_um1+1_1mmi.+1_ui1|1_1mf.i+1_uf1+1_1mfi.+1_ui1")
441
442(define_reservation "1_I" "1_I0|1_I1")
443
444;; "An F slot in the 1st bundle disperses to F0".
445;; "An F slot in the 2st bundle disperses to F1".
446(define_reservation "1_F0"
447   "1_0mf.i+1_uf0|1_0mmf.+1_uf0|1_0mf.b+1_uf0|1_1mf.i+1_uf1|1_1mf.b+1_uf1")
448
449(define_reservation "1_F1"
450   "1_0m.fi+1_um0+1_0mf.i+1_uf0|1_0mm.f+(1_um0|1_um1)+1_0mmf.+1_uf0\
451    |1_0m.fb+1_um0+1_0mf.b+1_uf0|1_1m.fi+(1_um0|1_um1)+1_1mf.i+1_uf1\
452    |1_1m.fb+(1_um0|1_um1)+1_1mf.b+1_uf1")
453
454(define_reservation "1_F2"
455   "1_0m.mf+1_um0+1_0mm.f+1_um1+1_0mmf.+1_uf0\
456    |(1_0mii.+(1_ui0|1_ui1)|1_0mmi.+1_ui0|1_0mfi.+1_ui0\
457      |1_0mib.+1_unb0|1_0mmb.+1_unb0|1_0mfb.+1_unb0)\
458     +(1_1m.fi+(1_um0|1_um1)+1_1mf.i+1_uf1\
459       |1_1m.fb+(1_um0|1_um1)+1_1mf.b+1_uf1)")
460
461(define_reservation "1_F" "1_F0|1_F1|1_F2")
462
463;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B
464;;; unit. That is, a B slot in 1st position is dispersed to B0.  In the
465;;; 2nd position it is dispersed to B2".
466(define_reservation "1_NB"
467    "1_0b.bb+1_unb0|1_0bb.b+1_unb1|1_0bbb.+1_unb2\
468     |1_0mb.b+1_unb1|1_0mbb.+1_unb2\
469     |1_0mib.+1_unb0|1_0mmb.+1_unb0|1_0mfb.+1_unb0\
470     |1_1b.bb+1_unb0|1_1bb.b+1_unb1\
471     |1_1bbb.+1_unb2|1_1mb.b+1_unb1|1_1mbb.+1_unb2|1_1mib.+1_unb0\
472     |1_1mmb.+1_unb0|1_1mfb.+1_unb0")
473
474(define_reservation "1_B0"
475   "1_0b.bb+1_ub0|1_0bb.b+1_ub1|1_0bbb.+1_ub2\
476    |1_0mb.b+1_ub1|1_0mbb.+1_ub2|1_0mib.+1_ub2\
477    |1_0mfb.+1_ub2|1_1b.bb+1_ub0|1_1bb.b+1_ub1\
478    |1_1bbb.+1_ub2|1_1mb.b+1_ub1\
479    |1_1mib.+1_ub2|1_1mmb.+1_ub2|1_1mfb.+1_ub2")
480
481(define_reservation "1_B1"
482   "1_0m.bb+1_um0+1_0mb.b+1_ub1|1_0mi.b+1_ui0+1_0mib.+1_ub2\
483    |1_0mf.b+1_uf0+1_0mfb.+1_ub2\
484    |(1_0mii.+(1_ui0|1_ui1)|1_0mmi.+1_ui0|1_0mfi.+1_ui0)+1_1b.bb+1_ub0\
485    |1_1m.bb+(1_um0|1_um1)+1_1mb.b+1_ub1\
486    |1_1mi.b+(1_ui0|1_ui1)+1_1mib.+1_ub2\
487    |1_1mm.b+1_um1+1_1mmb.+1_ub2\
488    |1_1mf.b+1_uf1+1_1mfb.+1_ub2")
489
490(define_reservation "1_B" "1_B0|1_B1")
491
492;; MLX bunlde uses ports equivalent to MFI bundles.
493(define_reservation "1_L0" "1_0mlx.+1_ui0+1_uf0|1_1mlx.+(1_ui0|1_ui1)+1_uf1")
494(define_reservation "1_L1"
495   "1_0m.lx+1_um0+1_0mlx.+1_ui0+1_uf0\
496   |1_1m.lx+(1_um0|1_um1)+1_1mlx.+(1_ui0|1_ui1)+1_uf1")
497(define_reservation "1_L2"
498   "(1_0mii.+(1_ui0|1_ui1)|1_0mmi.+1_ui0|1_0mfi.+1_ui0\
499     |1_0mib.+1_unb0|1_0mmb.+1_unb0|1_0mfb.+1_unb0)
500    +1_1m.lx+(1_um0|1_um1)+1_1mlx.+1_ui1+1_uf1")
501(define_reservation "1_L" "1_L0|1_L1|1_L2")
502
503(define_reservation "1_A" "1_M|1_I")
504
505(define_insn_reservation "1_stop_bit" 0
506  (and (and (eq_attr "cpu" "itanium")
507            (eq_attr "itanium_class" "stop_bit"))
508       (eq (symbol_ref "bundling_p") (const_int 0)))
509  "1_stop|1_m0_stop|1_m1_stop|1_mi0_stop|1_mi1_stop")
510
511(define_insn_reservation "1_br"      0
512  (and (and (eq_attr "cpu" "itanium")
513            (eq_attr "itanium_class" "br"))
514       (eq (symbol_ref "bundling_p") (const_int 0))) "1_B")
515(define_insn_reservation "1_scall"   0
516  (and (and (eq_attr "cpu" "itanium")
517            (eq_attr "itanium_class" "scall"))
518       (eq (symbol_ref "bundling_p") (const_int 0))) "1_B")
519(define_insn_reservation "1_fcmp"    2
520  (and (and (eq_attr "cpu" "itanium")
521            (eq_attr "itanium_class" "fcmp"))
522       (eq (symbol_ref "bundling_p") (const_int 0)))
523  "1_F+1_not_uf1")
524(define_insn_reservation "1_fcvtfx"  7
525  (and (and (eq_attr "cpu" "itanium")
526            (eq_attr "itanium_class" "fcvtfx"))
527       (eq (symbol_ref "bundling_p") (const_int 0))) "1_F")
528
529(define_insn_reservation "1_fld"     9
530  (and (and (and (eq_attr "cpu" "itanium")
531		 (eq_attr "itanium_class" "fld"))
532	    (eq_attr "check_load" "no"))
533       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
534(define_insn_reservation "1_fldc"    0
535  (and (and (and (eq_attr "cpu" "itanium")
536		 (eq_attr "itanium_class" "fld"))
537	    (eq_attr "check_load" "yes"))
538       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
539
540(define_insn_reservation "1_fldp"    9
541  (and (and (and (eq_attr "cpu" "itanium")
542		 (eq_attr "itanium_class" "fldp"))
543	    (eq_attr "check_load" "no"))
544       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
545(define_insn_reservation "1_fldpc"   0
546  (and (and (and (eq_attr "cpu" "itanium")
547		 (eq_attr "itanium_class" "fldp"))
548	    (eq_attr "check_load" "yes"))
549       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
550
551(define_insn_reservation "1_fmac"    5
552  (and (and (eq_attr "cpu" "itanium")
553            (eq_attr "itanium_class" "fmac"))
554       (eq (symbol_ref "bundling_p") (const_int 0))) "1_F")
555(define_insn_reservation "1_fmisc"   5
556  (and (and (eq_attr "cpu" "itanium")
557            (eq_attr "itanium_class" "fmisc"))
558       (eq (symbol_ref "bundling_p") (const_int 0)))
559  "1_F+1_not_uf1")
560
561;; There is only one insn `mov = ar.bsp' for frar_i:
562(define_insn_reservation "1_frar_i" 13
563  (and (and (eq_attr "cpu" "itanium")
564            (eq_attr "itanium_class" "frar_i"))
565       (eq (symbol_ref "bundling_p") (const_int 0)))
566  "1_I+1_not_ui1")
567;; There is only two insns `mov = ar.unat' or `mov = ar.ccv' for frar_m:
568(define_insn_reservation "1_frar_m"  6
569  (and (and (eq_attr "cpu" "itanium")
570            (eq_attr "itanium_class" "frar_m"))
571       (eq (symbol_ref "bundling_p") (const_int 0)))
572  "1_M+1_not_um1")
573(define_insn_reservation "1_frbr"    2
574  (and (and (eq_attr "cpu" "itanium")
575            (eq_attr "itanium_class" "frbr"))
576       (eq (symbol_ref "bundling_p") (const_int 0)))
577  "1_I+1_not_ui1")
578(define_insn_reservation "1_frfr"    2
579  (and (and (eq_attr "cpu" "itanium")
580            (eq_attr "itanium_class" "frfr"))
581       (eq (symbol_ref "bundling_p") (const_int 0)))
582  "1_M+1_not_um1")
583(define_insn_reservation "1_frpr"    2
584  (and (and (eq_attr "cpu" "itanium")
585            (eq_attr "itanium_class" "frpr"))
586       (eq (symbol_ref "bundling_p") (const_int 0)))
587  "1_I+1_not_ui1")
588
589(define_insn_reservation "1_ialu"      1
590    (and (and (eq_attr "cpu" "itanium")
591              (eq_attr "itanium_class" "ialu"))
592         (eq (symbol_ref
593              "bundling_p || ia64_produce_address_p (insn)")
594              (const_int 0)))
595    "1_A")
596(define_insn_reservation "1_ialu_addr" 1
597    (and (and (eq_attr "cpu" "itanium")
598              (eq_attr "itanium_class" "ialu"))
599         (eq (symbol_ref
600              "!bundling_p && ia64_produce_address_p (insn)")
601             (const_int 1)))
602    "1_M")
603(define_insn_reservation "1_icmp"    1
604  (and (and (eq_attr "cpu" "itanium")
605            (eq_attr "itanium_class" "icmp"))
606       (eq (symbol_ref "bundling_p") (const_int 0))) "1_A")
607(define_insn_reservation "1_ilog"    1
608  (and (and (eq_attr "cpu" "itanium")
609            (eq_attr "itanium_class" "ilog"))
610       (eq (symbol_ref "bundling_p") (const_int 0))) "1_A")
611(define_insn_reservation "1_mmalua" 2
612    (and (and (eq_attr "cpu" "itanium")
613              (eq_attr "itanium_class" "mmalua"))
614         (eq (symbol_ref "bundling_p") (const_int 0)))
615    "1_A")
616(define_insn_reservation "1_ishf"    1
617  (and (and (eq_attr "cpu" "itanium")
618            (eq_attr "itanium_class" "ishf"))
619       (eq (symbol_ref "bundling_p") (const_int 0)))
620    "1_I+1_not_ui1")
621(define_insn_reservation "1_ld"      2
622  (and (and (and (eq_attr "cpu" "itanium")
623		 (eq_attr "itanium_class" "ld"))
624	    (eq_attr "check_load" "no"))
625       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
626(define_insn_reservation "1_ldc"     0
627  (and (and (and (eq_attr "cpu" "itanium")
628		 (eq_attr "itanium_class" "ld"))
629	    (eq_attr "check_load" "yes"))
630       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
631(define_insn_reservation "1_long_i"  1
632  (and (and (eq_attr "cpu" "itanium")
633            (eq_attr "itanium_class" "long_i"))
634       (eq (symbol_ref "bundling_p") (const_int 0))) "1_L")
635(define_insn_reservation "1_mmmul"   2
636  (and (and (eq_attr "cpu" "itanium")
637            (eq_attr "itanium_class" "mmmul"))
638       (eq (symbol_ref "bundling_p") (const_int 0)))
639  "1_I+1_not_ui1")
640(define_insn_reservation "1_mmshf"   2
641  (and (and (eq_attr "cpu" "itanium")
642            (eq_attr "itanium_class" "mmshf"))
643       (eq (symbol_ref "bundling_p") (const_int 0))) "1_I")
644(define_insn_reservation "1_mmshfi"  1
645  (and (and (eq_attr "cpu" "itanium")
646            (eq_attr "itanium_class" "mmshfi"))
647       (eq (symbol_ref "bundling_p") (const_int 0))) "1_I")
648
649;; Now we have only one insn (flushrs) of such class.  We assume that flushrs
650;; is the 1st syllable of the bundle after stop bit.
651(define_insn_reservation "1_rse_m"   0
652  (and (and (eq_attr "cpu" "itanium")
653            (eq_attr "itanium_class" "rse_m"))
654       (eq (symbol_ref "bundling_p") (const_int 0)))
655  "(1_0m.ii|1_0m.mi|1_0m.fi|1_0m.mf|1_0b.bb|1_0m.bb\
656    |1_0m.ib|1_0m.mb|1_0m.fb|1_0m.lx)+1_um0")
657(define_insn_reservation "1_sem"     0
658  (and (and (eq_attr "cpu" "itanium")
659            (eq_attr "itanium_class" "sem"))
660       (eq (symbol_ref "bundling_p") (const_int 0)))
661  "1_M+1_not_um1")
662(define_insn_reservation "1_stf"     1
663  (and (and (eq_attr "cpu" "itanium")
664            (eq_attr "itanium_class" "stf"))
665       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
666(define_insn_reservation "1_st"      1
667  (and (and (eq_attr "cpu" "itanium")
668            (eq_attr "itanium_class" "st"))
669       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
670(define_insn_reservation "1_syst_m0" 0
671  (and (and (eq_attr "cpu" "itanium")
672            (eq_attr "itanium_class" "syst_m0"))
673       (eq (symbol_ref "bundling_p") (const_int 0)))
674  "1_M+1_not_um1")
675(define_insn_reservation "1_syst_m"  0
676  (and (and (eq_attr "cpu" "itanium")
677            (eq_attr "itanium_class" "syst_m"))
678       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
679(define_insn_reservation "1_tbit"    1
680  (and (and (eq_attr "cpu" "itanium")
681            (eq_attr "itanium_class" "tbit"))
682       (eq (symbol_ref "bundling_p") (const_int 0)))
683  "1_I+1_not_ui1")
684
685;; There is only ony insn `mov ar.pfs =' for toar_i:
686(define_insn_reservation "1_toar_i"  0
687  (and (and (eq_attr "cpu" "itanium")
688            (eq_attr "itanium_class" "toar_i"))
689       (eq (symbol_ref "bundling_p") (const_int 0)))
690  "1_I+1_not_ui1")
691;; There are only ony 2 insns `mov ar.ccv =' and `mov ar.unat =' for toar_m:
692(define_insn_reservation "1_toar_m"  5
693  (and (and (eq_attr "cpu" "itanium")
694            (eq_attr "itanium_class" "toar_m"))
695       (eq (symbol_ref "bundling_p") (const_int 0)))
696  "1_M+1_not_um1")
697(define_insn_reservation "1_tobr"    1
698  (and (and (eq_attr "cpu" "itanium")
699            (eq_attr "itanium_class" "tobr"))
700       (eq (symbol_ref "bundling_p") (const_int 0)))
701  "1_I+1_not_ui1")
702(define_insn_reservation "1_tofr"    9
703  (and (and (eq_attr "cpu" "itanium")
704            (eq_attr "itanium_class" "tofr"))
705       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
706(define_insn_reservation "1_topr"    1
707  (and (and (eq_attr "cpu" "itanium")
708            (eq_attr "itanium_class" "topr"))
709       (eq (symbol_ref "bundling_p") (const_int 0)))
710  "1_I+1_not_ui1")
711(define_insn_reservation "1_xmpy"    7
712  (and (and (eq_attr "cpu" "itanium")
713            (eq_attr "itanium_class" "xmpy"))
714       (eq (symbol_ref "bundling_p") (const_int 0))) "1_F")
715(define_insn_reservation "1_xtd"     1
716  (and (and (eq_attr "cpu" "itanium")
717            (eq_attr "itanium_class" "xtd"))
718       (eq (symbol_ref "bundling_p") (const_int 0))) "1_I")
719
720(define_insn_reservation "1_chk_s_i" 0
721  (and (and (eq_attr "cpu" "itanium")
722            (eq_attr "itanium_class" "chk_s_i"))
723       (eq (symbol_ref "bundling_p") (const_int 0))) "1_A")
724(define_insn_reservation "1_chk_s_f" 0
725  (and (and (eq_attr "cpu" "itanium")
726            (eq_attr "itanium_class" "chk_s_f"))
727       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
728(define_insn_reservation "1_chk_a"   0
729  (and (and (eq_attr "cpu" "itanium")
730            (eq_attr "itanium_class" "chk_a"))
731       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
732
733(define_insn_reservation "1_lfetch"  0
734  (and (and (eq_attr "cpu" "itanium")
735            (eq_attr "itanium_class" "lfetch"))
736       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M")
737
738(define_insn_reservation "1_nop_m"   0
739  (and (and (eq_attr "cpu" "itanium")
740            (eq_attr "itanium_class" "nop_m"))
741       (eq (symbol_ref "bundling_p") (const_int 0))) "1_M0")
742(define_insn_reservation "1_nop_b"   0
743  (and (and (eq_attr "cpu" "itanium")
744            (eq_attr "itanium_class" "nop_b"))
745       (eq (symbol_ref "bundling_p") (const_int 0))) "1_NB")
746(define_insn_reservation "1_nop_i"   0
747  (and (and (eq_attr "cpu" "itanium")
748            (eq_attr "itanium_class" "nop_i"))
749       (eq (symbol_ref "bundling_p") (const_int 0))) "1_I0")
750(define_insn_reservation "1_nop_f"   0
751  (and (and (eq_attr "cpu" "itanium")
752            (eq_attr "itanium_class" "nop_f"))
753       (eq (symbol_ref "bundling_p") (const_int 0))) "1_F0")
754(define_insn_reservation "1_nop_x"   0
755  (and (and (eq_attr "cpu" "itanium")
756            (eq_attr "itanium_class" "nop_x"))
757       (eq (symbol_ref "bundling_p") (const_int 0))) "1_L0")
758
759;; We assume that there is no insn issued on the same cycle as unknown insn.
760(define_cpu_unit "1_empty" "one")
761(exclusion_set "1_empty"
762    "1_0m.ii,1_0m.mi,1_0m.fi,1_0m.mf,1_0b.bb,1_0m.bb,1_0m.ib,1_0m.mb,1_0m.fb,\
763     1_0m.lx")
764
765(define_insn_reservation "1_unknown" 1
766  (and (and (eq_attr "cpu" "itanium")
767            (eq_attr "itanium_class" "unknown"))
768       (eq (symbol_ref "bundling_p") (const_int 0))) "1_empty")
769
770(define_insn_reservation "1_nop" 1
771  (and (and (eq_attr "cpu" "itanium")
772            (eq_attr "itanium_class" "nop"))
773       (eq (symbol_ref "bundling_p") (const_int 0)))
774  "1_M0|1_NB|1_I0|1_F0")
775
776(define_insn_reservation "1_ignore" 0
777  (and (and (eq_attr "cpu" "itanium")
778            (eq_attr "itanium_class" "ignore"))
779       (eq (symbol_ref "bundling_p") (const_int 0))) "nothing")
780
781
782(define_cpu_unit
783   "1_0m_bs, 1_0mi_bs, 1_0mm_bs, 1_0mf_bs, 1_0b_bs, 1_0bb_bs, 1_0mb_bs"
784   "one")
785(define_cpu_unit
786   "1_1m_bs, 1_1mi_bs, 1_1mm_bs, 1_1mf_bs, 1_1b_bs, 1_1bb_bs, 1_1mb_bs"
787   "one")
788
789(define_cpu_unit "1_m_cont, 1_mi_cont, 1_mm_cont, 1_mf_cont, 1_mb_cont,\
790	          1_b_cont, 1_bb_cont" "one")
791
792;; For stop in the middle of the bundles.
793(define_cpu_unit "1_m_stop, 1_m0_stop, 1_m1_stop, 1_0mmi_cont" "one")
794(define_cpu_unit "1_mi_stop, 1_mi0_stop, 1_mi1_stop, 1_0mii_cont" "one")
795
796(final_presence_set "1_0m_bs"
797   "1_0m.ii, 1_0m.mi, 1_0m.mf, 1_0m.fi, 1_0m.bb,\
798    1_0m.ib, 1_0m.fb, 1_0m.mb, 1_0m.lx")
799(final_presence_set "1_1m_bs"
800   "1_1m.ii, 1_1m.mi, 1_1m.fi, 1_1m.bb, 1_1m.ib, 1_1m.fb, 1_1m.mb,\
801    1_1m.lx")
802(final_presence_set "1_0mi_bs"  "1_0mi.i, 1_0mi.i")
803(final_presence_set "1_1mi_bs"  "1_1mi.i, 1_1mi.i")
804(final_presence_set "1_0mm_bs"  "1_0mm.i, 1_0mm.f, 1_0mm.b")
805(final_presence_set "1_1mm_bs"  "1_1mm.i, 1_1mm.b")
806(final_presence_set "1_0mf_bs"  "1_0mf.i, 1_0mf.b")
807(final_presence_set "1_1mf_bs"  "1_1mf.i, 1_1mf.b")
808(final_presence_set "1_0b_bs"  "1_0b.bb")
809(final_presence_set "1_1b_bs"  "1_1b.bb")
810(final_presence_set "1_0bb_bs"  "1_0bb.b")
811(final_presence_set "1_1bb_bs"  "1_1bb.b")
812(final_presence_set "1_0mb_bs"  "1_0mb.b")
813(final_presence_set "1_1mb_bs"  "1_1mb.b")
814
815(exclusion_set "1_0m_bs"
816   "1_0mi.i, 1_0mm.i, 1_0mm.f, 1_0mf.i, 1_0mb.b,\
817    1_0mi.b, 1_0mf.b, 1_0mm.b, 1_0mlx., 1_m0_stop")
818(exclusion_set "1_1m_bs"
819   "1_1mi.i, 1_1mm.i, 1_1mf.i, 1_1mb.b, 1_1mi.b, 1_1mf.b, 1_1mm.b,\
820    1_1mlx., 1_m1_stop")
821(exclusion_set "1_0mi_bs"  "1_0mii., 1_0mib., 1_mi0_stop")
822(exclusion_set "1_1mi_bs"  "1_1mii., 1_1mib., 1_mi1_stop")
823(exclusion_set "1_0mm_bs"  "1_0mmi., 1_0mmf., 1_0mmb.")
824(exclusion_set "1_1mm_bs"  "1_1mmi., 1_1mmb.")
825(exclusion_set "1_0mf_bs"  "1_0mfi., 1_0mfb.")
826(exclusion_set "1_1mf_bs"  "1_1mfi., 1_1mfb.")
827(exclusion_set "1_0b_bs"  "1_0bb.b")
828(exclusion_set "1_1b_bs"  "1_1bb.b")
829(exclusion_set "1_0bb_bs"  "1_0bbb.")
830(exclusion_set "1_1bb_bs"  "1_1bbb.")
831(exclusion_set "1_0mb_bs"  "1_0mbb.")
832(exclusion_set "1_1mb_bs"  "1_1mbb.")
833
834(exclusion_set
835   "1_0m_bs, 1_0mi_bs, 1_0mm_bs, 1_0mf_bs, 1_0b_bs, 1_0bb_bs, 1_0mb_bs,
836    1_1m_bs, 1_1mi_bs, 1_1mm_bs, 1_1mf_bs, 1_1b_bs, 1_1bb_bs, 1_1mb_bs"
837   "1_stop")
838
839(final_presence_set
840   "1_0mi.i, 1_0mm.i, 1_0mf.i, 1_0mm.f, 1_0mb.b,\
841    1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx."
842   "1_m_cont")
843(final_presence_set "1_0mii., 1_0mib." "1_mi_cont")
844(final_presence_set "1_0mmi., 1_0mmf., 1_0mmb." "1_mm_cont")
845(final_presence_set "1_0mfi., 1_0mfb." "1_mf_cont")
846(final_presence_set "1_0bb.b" "1_b_cont")
847(final_presence_set "1_0bbb." "1_bb_cont")
848(final_presence_set "1_0mbb." "1_mb_cont")
849
850(exclusion_set
851   "1_0m.ii, 1_0m.mi, 1_0m.fi, 1_0m.mf, 1_0b.bb, 1_0m.bb,\
852    1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx"
853   "1_m_cont, 1_mi_cont, 1_mm_cont, 1_mf_cont,\
854    1_mb_cont, 1_b_cont, 1_bb_cont")
855
856(exclusion_set "1_empty"
857               "1_m_cont,1_mi_cont,1_mm_cont,1_mf_cont,\
858                1_mb_cont,1_b_cont,1_bb_cont")
859
860;; For m;mi bundle
861(final_presence_set "1_m0_stop" "1_0m.mi")
862(final_presence_set "1_0mm.i" "1_0mmi_cont")
863(exclusion_set "1_0mmi_cont"
864   "1_0m.ii, 1_0m.mi, 1_0m.fi, 1_0m.mf, 1_0b.bb, 1_0m.bb,\
865    1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
866(exclusion_set "1_m0_stop" "1_0mm.i")
867(final_presence_set "1_m1_stop" "1_1m.mi")
868(exclusion_set "1_m1_stop" "1_1mm.i")
869(final_presence_set "1_m_stop" "1_m0_stop, 1_m1_stop")
870
871;; For mi;i bundle
872(final_presence_set "1_mi0_stop" "1_0mi.i")
873(final_presence_set "1_0mii." "1_0mii_cont")
874(exclusion_set "1_0mii_cont"
875   "1_0m.ii, 1_0m.mi, 1_0m.fi, 1_0m.mf, 1_0b.bb, 1_0m.bb,\
876    1_0m.ib, 1_0m.mb, 1_0m.fb, 1_0m.lx")
877(exclusion_set "1_mi0_stop" "1_0mii.")
878(final_presence_set "1_mi1_stop" "1_1mi.i")
879(exclusion_set "1_mi1_stop" "1_1mii.")
880(final_presence_set "1_mi_stop" "1_mi0_stop, 1_mi1_stop")
881
882(final_absence_set
883   "1_0m.ii,1_0mi.i,1_0mii.,1_0m.mi,1_0mm.i,1_0mmi.,1_0m.fi,1_0mf.i,1_0mfi.,\
884    1_0m.mf,1_0mm.f,1_0mmf.,1_0b.bb,1_0bb.b,1_0bbb.,1_0m.bb,1_0mb.b,1_0mbb.,\
885    1_0m.ib,1_0mi.b,1_0mib.,1_0m.mb,1_0mm.b,1_0mmb.,1_0m.fb,1_0mf.b,1_0mfb.,\
886    1_0m.lx,1_0mlx., \
887    1_1m.ii,1_1mi.i,1_1mii.,1_1m.mi,1_1mm.i,1_1mmi.,1_1m.fi,1_1mf.i,1_1mfi.,\
888    1_1b.bb,1_1bb.b,1_1bbb.,1_1m.bb,1_1mb.b,1_1mbb.,\
889    1_1m.ib,1_1mi.b,1_1mib.,1_1m.mb,1_1mm.b,1_1mmb.,1_1m.fb,1_1mf.b,1_1mfb.,\
890    1_1m.lx,1_1mlx."
891   "1_m0_stop,1_m1_stop,1_mi0_stop,1_mi1_stop")
892
893(define_cpu_unit "1_m_cont_only, 1_b_cont_only" "one")
894(define_cpu_unit "1_mi_cont_only, 1_mm_cont_only, 1_mf_cont_only" "one")
895(define_cpu_unit "1_mb_cont_only, 1_bb_cont_only" "one")
896
897(final_presence_set "1_m_cont_only" "1_m_cont")
898(exclusion_set "1_m_cont_only"
899  "1_0mi.i, 1_0mm.i, 1_0mf.i, 1_0mm.f, 1_0mb.b,\
900   1_0mi.b, 1_0mm.b, 1_0mf.b, 1_0mlx.")
901
902(final_presence_set "1_b_cont_only" "1_b_cont")
903(exclusion_set "1_b_cont_only"  "1_0bb.b")
904
905(final_presence_set "1_mi_cont_only" "1_mi_cont")
906(exclusion_set "1_mi_cont_only" "1_0mii., 1_0mib.")
907
908(final_presence_set "1_mm_cont_only" "1_mm_cont")
909(exclusion_set "1_mm_cont_only" "1_0mmi., 1_0mmf., 1_0mmb.")
910
911(final_presence_set "1_mf_cont_only" "1_mf_cont")
912(exclusion_set "1_mf_cont_only" "1_0mfi., 1_0mfb.")
913
914(final_presence_set "1_mb_cont_only" "1_mb_cont")
915(exclusion_set "1_mb_cont_only" "1_0mbb.")
916
917(final_presence_set "1_bb_cont_only" "1_bb_cont")
918(exclusion_set "1_bb_cont_only" "1_0bbb.")
919
920(define_insn_reservation "1_pre_cycle" 0
921   (and (and (eq_attr "cpu" "itanium")
922             (eq_attr "itanium_class" "pre_cycle"))
923        (eq (symbol_ref "bundling_p") (const_int 0)))
924                         "(1_0m_bs, 1_m_cont)                     \
925                          | (1_0mi_bs, (1_mi_cont|nothing))       \
926                          | (1_0mm_bs, 1_mm_cont)                 \
927                          | (1_0mf_bs, (1_mf_cont|nothing))       \
928                          | (1_0b_bs, (1_b_cont|nothing))         \
929                          | (1_0bb_bs, (1_bb_cont|nothing))       \
930                          | (1_0mb_bs, (1_mb_cont|nothing))       \
931                          | (1_1m_bs, 1_m_cont)                   \
932                          | (1_1mi_bs, (1_mi_cont|nothing))       \
933                          | (1_1mm_bs, 1_mm_cont)                 \
934                          | (1_1mf_bs, (1_mf_cont|nothing))       \
935                          | (1_1b_bs, (1_b_cont|nothing))         \
936                          | (1_1bb_bs, (1_bb_cont|nothing))       \
937                          | (1_1mb_bs, (1_mb_cont|nothing))       \
938                          | (1_m_cont_only, (1_m_cont|nothing))   \
939                          | (1_b_cont_only,  (1_b_cont|nothing))  \
940                          | (1_mi_cont_only, (1_mi_cont|nothing)) \
941                          | (1_mm_cont_only, (1_mm_cont|nothing)) \
942                          | (1_mf_cont_only, (1_mf_cont|nothing)) \
943                          | (1_mb_cont_only, (1_mb_cont|nothing)) \
944                          | (1_bb_cont_only, (1_bb_cont|nothing)) \
945                          | (1_m_stop, (1_0mmi_cont|nothing))     \
946                          | (1_mi_stop, (1_0mii_cont|nothing))")
947
948;; Bypasses:
949(define_bypass  1 "1_fcmp" "1_br,1_scall")
950;; ??? I found 7 cycle delay for 1_fmac -> 1_fcmp for Itanium1
951(define_bypass  7 "1_fmac" "1_fmisc,1_fcvtfx,1_xmpy,1_fcmp")
952
953;; ???
954(define_bypass  3 "1_frbr" "1_mmmul,1_mmshf")
955(define_bypass 14 "1_frar_i" "1_mmmul,1_mmshf")
956(define_bypass  7 "1_frar_m" "1_mmmul,1_mmshf")
957
958;; ????
959;; There is only one insn `mov ar.pfs =' for toar_i.
960(define_bypass  0 "1_tobr,1_topr,1_toar_i" "1_br,1_scall")
961
962(define_bypass  3 "1_ialu,1_ialu_addr" "1_mmmul,1_mmshf,1_mmalua")
963;; ??? howto describe ialu for I slot only.  We use ialu_addr for that
964;;(define_bypass  2 "1_ialu" "1_ld"  "ia64_ld_address_bypass_p")
965;; ??? howto describe ialu st/address for I slot only.  We use ialu_addr
966;;   for that.
967;;(define_bypass  2 "1_ialu" "1_st"  "ia64_st_address_bypass_p")
968
969(define_bypass  0 "1_icmp" "1_br,1_scall")
970
971(define_bypass  3 "1_ilog" "1_mmmul,1_mmshf")
972
973(define_bypass  2 "1_ilog,1_xtd" "1_ld"  "ia64_ld_address_bypass_p")
974(define_bypass  2 "1_ilog,1_xtd" "1_st"  "ia64_st_address_bypass_p")
975
976(define_bypass  3 "1_ld,1_ldc" "1_mmmul,1_mmshf")
977(define_bypass  3 "1_ld" "1_ld"  "ia64_ld_address_bypass_p")
978(define_bypass  3 "1_ld" "1_st"  "ia64_st_address_bypass_p")
979
980;; Intel docs say only LD, ST, IALU, ILOG, ISHF consumers have latency 4,
981;;      but HP engineers say any non-MM operation.
982(define_bypass  4 "1_mmmul,1_mmshf,1_mmalua"
983     "1_br,1_fcmp,1_fcvtfx,1_fld,1_fldc,1_fmac,1_fmisc,1_frar_i,1_frar_m,\
984      1_frbr,1_frfr,1_frpr,1_ialu,1_icmp,1_ilog,1_ishf,1_ld,1_ldc,1_chk_s_i,1_chk_s_f,1_chk_a,\
985      1_long_i,1_rse_m,1_sem,1_stf,1_st,1_syst_m0,1_syst_m,\
986      1_tbit,1_toar_i,1_toar_m,1_tobr,1_tofr,1_topr,1_xmpy,1_xtd")
987
988;; ??? how to describe that if scheduled < 4 cycle then latency is 10 cycles.
989;; (define_bypass  10 "1_mmmul,1_mmshf" "1_ialu,1_ilog,1_ishf,1_st,1_ld")
990
991(define_bypass  0 "1_tbit" "1_br,1_scall")
992
993(define_bypass  8 "1_tofr"  "1_frfr,1_stf")
994(define_bypass  7 "1_fmisc,1_fcvtfx,1_fmac,1_xmpy"  "1_frfr")
995(define_bypass  8 "1_fmisc,1_fcvtfx,1_fmac,1_xmpy"  "1_stf")
996
997;; We don't use here fcmp because scall may be predicated.
998(define_bypass  0 "1_fcvtfx,1_fld,1_fldc,1_fmac,1_fmisc,1_frar_i,1_frar_m,\
999                   1_frbr,1_frfr,1_frpr,1_ialu,1_ialu_addr,1_ilog,1_ishf,\
1000	           1_ld,1_ldc,1_long_i,1_mmalua,1_mmmul,1_mmshf,1_mmshfi,\
1001                   1_toar_m,1_tofr,1_xmpy,1_xtd" "1_scall")
1002
1003(define_bypass  0 "1_unknown,1_ignore,1_stop_bit,1_br,1_fcmp,1_fcvtfx,\
1004                   1_fld,1_fldc,1_fmac,1_fmisc,1_frar_i,1_frar_m,1_frbr,1_frfr,\
1005                   1_frpr,1_ialu,1_ialu_addr,1_icmp,1_ilog,1_ishf,1_ld,1_ldc,\
1006                   1_chk_s_i,1_chk_s_f,1_chk_a,1_long_i,1_mmalua,1_mmmul,1_mmshf,1_mmshfi,1_nop,\
1007                   1_nop_b,1_nop_f,1_nop_i,1_nop_m,1_nop_x,1_rse_m,1_scall,\
1008                   1_sem,1_stf,1_st,1_syst_m0,1_syst_m,1_tbit,1_toar_i,\
1009                   1_toar_m,1_tobr,1_tofr,1_topr,1_xmpy,1_xtd,1_lfetch"
1010                  "1_ignore")
1011
1012
1013;; Bundling
1014
1015(define_automaton "oneb")
1016
1017;; Pseudo units for quicker searching for position in two packet window.  */
1018(define_query_cpu_unit "1_1,1_2,1_3,1_4,1_5,1_6" "oneb")
1019
1020;;   All possible combinations of bundles/syllables
1021(define_cpu_unit
1022   "1b_0m.ii, 1b_0m.mi, 1b_0m.fi, 1b_0m.mf, 1b_0b.bb, 1b_0m.bb,\
1023    1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx" "oneb")
1024(define_cpu_unit
1025   "1b_0mi.i, 1b_0mm.i, 1b_0mf.i, 1b_0mm.f, 1b_0bb.b, 1b_0mb.b,\
1026    1b_0mi.b, 1b_0mm.b, 1b_0mf.b" "oneb")
1027(define_query_cpu_unit
1028   "1b_0mii., 1b_0mmi., 1b_0mfi., 1b_0mmf., 1b_0bbb., 1b_0mbb.,\
1029    1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx." "oneb")
1030
1031(define_cpu_unit "1b_1m.ii, 1b_1m.mi, 1b_1m.fi, 1b_1b.bb, 1b_1m.bb,\
1032                  1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx" "oneb")
1033(define_cpu_unit "1b_1mi.i, 1b_1mm.i, 1b_1mf.i, 1b_1bb.b, 1b_1mb.b,\
1034                  1b_1mi.b, 1b_1mm.b, 1b_1mf.b" "oneb")
1035(define_query_cpu_unit "1b_1mii., 1b_1mmi., 1b_1mfi., 1b_1bbb., 1b_1mbb.,\
1036                        1b_1mib., 1b_1mmb., 1b_1mfb., 1b_1mlx." "oneb")
1037
1038;; Slot 1
1039(exclusion_set "1b_0m.ii"
1040   "1b_0m.mi, 1b_0m.fi, 1b_0m.mf, 1b_0b.bb, 1b_0m.bb,\
1041    1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1042(exclusion_set "1b_0m.mi"
1043   "1b_0m.fi, 1b_0m.mf, 1b_0b.bb, 1b_0m.bb, 1b_0m.ib,\
1044    1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1045(exclusion_set "1b_0m.fi"
1046   "1b_0m.mf, 1b_0b.bb, 1b_0m.bb, 1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1047(exclusion_set "1b_0m.mf"
1048   "1b_0b.bb, 1b_0m.bb, 1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1049(exclusion_set "1b_0b.bb" "1b_0m.bb, 1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1050(exclusion_set "1b_0m.bb" "1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1051(exclusion_set "1b_0m.ib" "1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1052(exclusion_set "1b_0m.mb" "1b_0m.fb, 1b_0m.lx")
1053(exclusion_set "1b_0m.fb" "1b_0m.lx")
1054
1055;; Slot 2
1056(exclusion_set "1b_0mi.i"
1057   "1b_0mm.i, 1b_0mf.i, 1b_0mm.f, 1b_0bb.b, 1b_0mb.b,\
1058    1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1059(exclusion_set "1b_0mm.i"
1060   "1b_0mf.i, 1b_0mm.f, 1b_0bb.b, 1b_0mb.b,\
1061    1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1062(exclusion_set "1b_0mf.i"
1063   "1b_0mm.f, 1b_0bb.b, 1b_0mb.b, 1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1064(exclusion_set "1b_0mm.f"
1065   "1b_0bb.b, 1b_0mb.b, 1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1066(exclusion_set "1b_0bb.b" "1b_0mb.b, 1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1067(exclusion_set "1b_0mb.b" "1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1068(exclusion_set "1b_0mi.b" "1b_0mm.b, 1b_0mf.b, 1b_0mlx.")
1069(exclusion_set "1b_0mm.b" "1b_0mf.b, 1b_0mlx.")
1070(exclusion_set "1b_0mf.b" "1b_0mlx.")
1071
1072;; Slot 3
1073(exclusion_set "1b_0mii."
1074   "1b_0mmi., 1b_0mfi., 1b_0mmf., 1b_0bbb., 1b_0mbb.,\
1075    1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx.")
1076(exclusion_set "1b_0mmi."
1077   "1b_0mfi., 1b_0mmf., 1b_0bbb., 1b_0mbb.,\
1078    1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx.")
1079(exclusion_set "1b_0mfi."
1080   "1b_0mmf., 1b_0bbb., 1b_0mbb., 1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx.")
1081(exclusion_set "1b_0mmf."
1082   "1b_0bbb., 1b_0mbb., 1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx.")
1083(exclusion_set "1b_0bbb." "1b_0mbb., 1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx.")
1084(exclusion_set "1b_0mbb." "1b_0mib., 1b_0mmb., 1b_0mfb., 1b_0mlx.")
1085(exclusion_set "1b_0mib." "1b_0mmb., 1b_0mfb., 1b_0mlx.")
1086(exclusion_set "1b_0mmb." "1b_0mfb., 1b_0mlx.")
1087(exclusion_set "1b_0mfb." "1b_0mlx.")
1088
1089;; Slot 4
1090(exclusion_set "1b_1m.ii"
1091   "1b_1m.mi, 1b_1m.fi, 1b_1b.bb, 1b_1m.bb,\
1092    1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx")
1093(exclusion_set "1b_1m.mi"
1094   "1b_1m.fi, 1b_1b.bb, 1b_1m.bb, 1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx")
1095(exclusion_set "1b_1m.fi"
1096   "1b_1b.bb, 1b_1m.bb, 1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx")
1097(exclusion_set "1b_1b.bb" "1b_1m.bb, 1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx")
1098(exclusion_set "1b_1m.bb" "1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx")
1099(exclusion_set "1b_1m.ib" "1b_1m.mb, 1b_1m.fb, 1b_1m.lx")
1100(exclusion_set "1b_1m.mb" "1b_1m.fb, 1b_1m.lx")
1101(exclusion_set "1b_1m.fb" "1b_1m.lx")
1102
1103;; Slot 5
1104(exclusion_set "1b_1mi.i"
1105   "1b_1mm.i, 1b_1mf.i, 1b_1bb.b, 1b_1mb.b,\
1106    1b_1mi.b, 1b_1mm.b, 1b_1mf.b, 1b_1mlx.")
1107(exclusion_set "1b_1mm.i"
1108   "1b_1mf.i, 1b_1bb.b, 1b_1mb.b, 1b_1mi.b, 1b_1mm.b, 1b_1mf.b, 1b_1mlx.")
1109(exclusion_set "1b_1mf.i"
1110   "1b_1bb.b, 1b_1mb.b, 1b_1mi.b, 1b_1mm.b, 1b_1mf.b, 1b_1mlx.")
1111(exclusion_set "1b_1bb.b" "1b_1mb.b, 1b_1mi.b, 1b_1mm.b, 1b_1mf.b, 1b_1mlx.")
1112(exclusion_set "1b_1mb.b" "1b_1mi.b, 1b_1mm.b, 1b_1mf.b, 1b_1mlx.")
1113(exclusion_set "1b_1mi.b" "1b_1mm.b, 1b_1mf.b, 1b_1mlx.")
1114(exclusion_set "1b_1mm.b" "1b_1mf.b, 1b_1mlx.")
1115(exclusion_set "1b_1mf.b" "1b_1mlx.")
1116
1117;; Slot 6
1118(exclusion_set "1b_1mii."
1119   "1b_1mmi., 1b_1mfi., 1b_1bbb., 1b_1mbb.,\
1120    1b_1mib., 1b_1mmb., 1b_1mfb., 1b_1mlx.")
1121(exclusion_set "1b_1mmi."
1122   "1b_1mfi., 1b_1bbb., 1b_1mbb., 1b_1mib., 1b_1mmb., 1b_1mfb., 1b_1mlx.")
1123(exclusion_set "1b_1mfi."
1124   "1b_1bbb., 1b_1mbb., 1b_1mib., 1b_1mmb., 1b_1mfb., 1b_1mlx.")
1125(exclusion_set "1b_1bbb." "1b_1mbb., 1b_1mib., 1b_1mmb., 1b_1mfb., 1b_1mlx.")
1126(exclusion_set "1b_1mbb." "1b_1mib., 1b_1mmb., 1b_1mfb., 1b_1mlx.")
1127(exclusion_set "1b_1mib." "1b_1mmb., 1b_1mfb., 1b_1mlx.")
1128(exclusion_set "1b_1mmb." "1b_1mfb., 1b_1mlx.")
1129(exclusion_set "1b_1mfb." "1b_1mlx.")
1130
1131(final_presence_set "1b_0mi.i" "1b_0m.ii")
1132(final_presence_set "1b_0mii." "1b_0mi.i")
1133(final_presence_set "1b_1mi.i" "1b_1m.ii")
1134(final_presence_set "1b_1mii." "1b_1mi.i")
1135
1136(final_presence_set "1b_0mm.i" "1b_0m.mi")
1137(final_presence_set "1b_0mmi." "1b_0mm.i")
1138(final_presence_set "1b_1mm.i" "1b_1m.mi")
1139(final_presence_set "1b_1mmi." "1b_1mm.i")
1140
1141(final_presence_set "1b_0mf.i" "1b_0m.fi")
1142(final_presence_set "1b_0mfi." "1b_0mf.i")
1143(final_presence_set "1b_1mf.i" "1b_1m.fi")
1144(final_presence_set "1b_1mfi." "1b_1mf.i")
1145
1146(final_presence_set "1b_0mm.f" "1b_0m.mf")
1147(final_presence_set "1b_0mmf." "1b_0mm.f")
1148
1149(final_presence_set "1b_0bb.b" "1b_0b.bb")
1150(final_presence_set "1b_0bbb." "1b_0bb.b")
1151(final_presence_set "1b_1bb.b" "1b_1b.bb")
1152(final_presence_set "1b_1bbb." "1b_1bb.b")
1153
1154(final_presence_set "1b_0mb.b" "1b_0m.bb")
1155(final_presence_set "1b_0mbb." "1b_0mb.b")
1156(final_presence_set "1b_1mb.b" "1b_1m.bb")
1157(final_presence_set "1b_1mbb." "1b_1mb.b")
1158
1159(final_presence_set "1b_0mi.b" "1b_0m.ib")
1160(final_presence_set "1b_0mib." "1b_0mi.b")
1161(final_presence_set "1b_1mi.b" "1b_1m.ib")
1162(final_presence_set "1b_1mib." "1b_1mi.b")
1163
1164(final_presence_set "1b_0mm.b" "1b_0m.mb")
1165(final_presence_set "1b_0mmb." "1b_0mm.b")
1166(final_presence_set "1b_1mm.b" "1b_1m.mb")
1167(final_presence_set "1b_1mmb." "1b_1mm.b")
1168
1169(final_presence_set "1b_0mf.b" "1b_0m.fb")
1170(final_presence_set "1b_0mfb." "1b_0mf.b")
1171(final_presence_set "1b_1mf.b" "1b_1m.fb")
1172(final_presence_set "1b_1mfb." "1b_1mf.b")
1173
1174(final_presence_set "1b_0mlx." "1b_0m.lx")
1175(final_presence_set "1b_1mlx." "1b_1m.lx")
1176
1177(final_presence_set
1178   "1b_1m.ii,1b_1m.mi,1b_1m.fi,1b_1b.bb,1b_1m.bb,\
1179    1b_1m.ib,1b_1m.mb,1b_1m.fb,1b_1m.lx"
1180   "1b_0mii.,1b_0mmi.,1b_0mfi.,1b_0mmf.,1b_0bbb.,1b_0mbb.,\
1181    1b_0mib.,1b_0mmb.,1b_0mfb.,1b_0mlx.")
1182
1183;;  Microarchitecture units:
1184(define_cpu_unit
1185   "1b_um0, 1b_um1, 1b_ui0, 1b_ui1, 1b_uf0, 1b_uf1, 1b_ub0, 1b_ub1, 1b_ub2,\
1186    1b_unb0, 1b_unb1, 1b_unb2" "oneb")
1187
1188(exclusion_set "1b_ub0" "1b_unb0")
1189(exclusion_set "1b_ub1" "1b_unb1")
1190(exclusion_set "1b_ub2" "1b_unb2")
1191
1192;; The following rules are used to decrease number of alternatives.
1193;; They are consequences of Itanium microarchitecture.  They also
1194;; describe the following rules mentioned in Itanium
1195;; microarchitecture: rules mentioned in Itanium microarchitecture:
1196;; o "MMF: Always splits issue before the first M and after F regardless
1197;;   of surrounding bundles and stops".
1198;; o "BBB/MBB: Always splits issue after either of these bundles".
1199;; o "MIB BBB: Split issue after the first bundle in this pair".
1200
1201(exclusion_set "1b_0m.mf,1b_0mm.f,1b_0mmf."
1202   "1b_1m.ii,1b_1m.mi,1b_1m.fi,1b_1b.bb,1b_1m.bb,\
1203    1b_1m.ib,1b_1m.mb,1b_1m.fb,1b_1m.lx")
1204(exclusion_set "1b_0b.bb,1b_0bb.b,1b_0bbb.,1b_0m.bb,1b_0mb.b,1b_0mbb."
1205   "1b_1m.ii,1b_1m.mi,1b_1m.fi,1b_1b.bb,1b_1m.bb,\
1206    1b_1m.ib,1b_1m.mb,1b_1m.fb,1b_1m.lx")
1207(exclusion_set "1b_0m.ib,1b_0mi.b,1b_0mib." "1b_1b.bb")
1208
1209;;  For exceptions of M, I, B, F insns:
1210(define_cpu_unit "1b_not_um1, 1b_not_ui1, 1b_not_uf1" "oneb")
1211
1212(final_absence_set "1b_not_um1"  "1b_um1")
1213(final_absence_set "1b_not_ui1"  "1b_ui1")
1214(final_absence_set "1b_not_uf1"  "1b_uf1")
1215
1216;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
1217;;; B-slot contains a nop.b or a brp instruction".
1218;;;   "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
1219;;; nop.b, otherwise it disperses to B2".
1220(final_absence_set
1221   "1b_1m.ii, 1b_1m.mi, 1b_1m.fi, 1b_1b.bb, 1b_1m.bb,\
1222    1b_1m.ib, 1b_1m.mb, 1b_1m.fb, 1b_1m.lx"
1223   "1b_0mib. 1b_ub2, 1b_0mfb. 1b_ub2, 1b_0mmb. 1b_ub2")
1224
1225;; This is necessary to start new processor cycle when we meet stop bit.
1226(define_cpu_unit "1b_stop" "oneb")
1227(final_absence_set
1228   "1b_0m.ii,1b_0mi.i,1b_0mii.,1b_0m.mi,1b_0mm.i,1b_0mmi.,\
1229    1b_0m.fi,1b_0mf.i,1b_0mfi.,\
1230    1b_0m.mf,1b_0mm.f,1b_0mmf.,1b_0b.bb,1b_0bb.b,1b_0bbb.,\
1231    1b_0m.bb,1b_0mb.b,1b_0mbb.,\
1232    1b_0m.ib,1b_0mi.b,1b_0mib.,1b_0m.mb,1b_0mm.b,1b_0mmb.,\
1233    1b_0m.fb,1b_0mf.b,1b_0mfb.,1b_0m.lx,1b_0mlx., \
1234    1b_1m.ii,1b_1mi.i,1b_1mii.,1b_1m.mi,1b_1mm.i,1b_1mmi.,\
1235    1b_1m.fi,1b_1mf.i,1b_1mfi.,\
1236    1b_1b.bb,1b_1bb.b,1b_1bbb.,1b_1m.bb,1b_1mb.b,1b_1mbb.,\
1237    1b_1m.ib,1b_1mi.b,1b_1mib.,\
1238    1b_1m.mb,1b_1mm.b,1b_1mmb.,1b_1m.fb,1b_1mf.b,1b_1mfb.,1b_1m.lx,1b_1mlx."
1239   "1b_stop")
1240
1241;; M and I instruction is dispersed to the lowest numbered M or I unit
1242;; not already in use.  An I slot in the 3rd position of 2nd bundle is
1243;; always dispersed to I1
1244(final_presence_set "1b_um1" "1b_um0")
1245(final_presence_set "1b_ui1" "1b_ui0, 1b_1mii., 1b_1mmi., 1b_1mfi.")
1246
1247;; Insns
1248
1249;; M and I instruction is dispersed to the lowest numbered M or I unit
1250;; not already in use.  An I slot in the 3rd position of 2nd bundle is
1251;; always dispersed to I1
1252(define_reservation "1b_M"
1253  "1b_0m.ii+1_1+1b_um0|1b_0m.mi+1_1+1b_um0|1b_0mm.i+1_2+(1b_um0|1b_um1)\
1254   |1b_0m.fi+1_1+1b_um0|1b_0m.mf+1_1+1b_um0|1b_0mm.f+1_2+1b_um1\
1255   |1b_0m.bb+1_1+1b_um0|1b_0m.ib+1_1+1b_um0|1b_0m.mb+1_1+1b_um0\
1256   |1b_0mm.b+1_2+1b_um1|1b_0m.fb+1_1+1b_um0|1b_0m.lx+1_1+1b_um0\
1257   |1b_1mm.i+1_5+1b_um1|1b_1mm.b+1_5+1b_um1\
1258   |(1b_1m.ii+1_4|1b_1m.mi+1_4|1b_1m.fi+1_4|1b_1m.bb+1_4|1b_1m.ib+1_4\
1259     |1b_1m.mb+1_4|1b_1m.fb+1_4|1b_1m.lx+1_4)\
1260    +(1b_um0|1b_um1)")
1261
1262;;  Exceptions for dispersal rules.
1263;; "An I slot in the 3rd position of 2nd bundle is always dispersed to I1".
1264(define_reservation "1b_I"
1265  "1b_0mi.i+1_2+1b_ui0|1b_0mii.+1_3+(1b_ui0|1b_ui1)|1b_0mmi.+1_3+1b_ui0\
1266   |1b_0mfi.+1_3+1b_ui0|1b_0mi.b+1_2+1b_ui0\
1267   |(1b_1mi.i+1_5|1b_1mi.b+1_5)+(1b_ui0|1b_ui1)\
1268   |1b_1mii.+1_6+1b_ui1|1b_1mmi.+1_6+1b_ui1|1b_1mfi.+1_6+1b_ui1")
1269
1270;; "An F slot in the 1st bundle disperses to F0".
1271;; "An F slot in the 2st bundle disperses to F1".
1272(define_reservation "1b_F"
1273   "1b_0mf.i+1_2+1b_uf0|1b_0mmf.+1_3+1b_uf0|1b_0mf.b+1_2+1b_uf0\
1274    |1b_1mf.i+1_5+1b_uf1|1b_1mf.b+1_5+1b_uf1")
1275
1276;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B
1277;;; unit. That is, a B slot in 1st position is dispersed to B0.  In the
1278;;; 2nd position it is dispersed to B2".
1279(define_reservation "1b_NB"
1280    "1b_0b.bb+1_1+1b_unb0|1b_0bb.b+1_2+1b_unb1|1b_0bbb.+1_3+1b_unb2\
1281     |1b_0mb.b+1_2+1b_unb1|1b_0mbb.+1_3+1b_unb2\
1282     |1b_0mib.+1_3+1b_unb0|1b_0mmb.+1_3+1b_unb0|1b_0mfb.+1_3+1b_unb0\
1283     |1b_1b.bb+1_4+1b_unb0|1b_1bb.b+1_5+1b_unb1\
1284     |1b_1bbb.+1_6+1b_unb2|1b_1mb.b+1_5+1b_unb1|1b_1mbb.+1_6+1b_unb2\
1285     |1b_1mib.+1_6+1b_unb0|1b_1mmb.+1_6+1b_unb0|1b_1mfb.+1_6+1b_unb0")
1286
1287(define_reservation "1b_B"
1288   "1b_0b.bb+1_1+1b_ub0|1b_0bb.b+1_2+1b_ub1|1b_0bbb.+1_3+1b_ub2\
1289    |1b_0mb.b+1_2+1b_ub1|1b_0mbb.+1_3+1b_ub2|1b_0mib.+1_3+1b_ub2\
1290    |1b_0mfb.+1_3+1b_ub2|1b_1b.bb+1_4+1b_ub0|1b_1bb.b+1_5+1b_ub1\
1291    |1b_1bbb.+1_6+1b_ub2|1b_1mb.b+1_5+1b_ub1\
1292    |1b_1mib.+1_6+1b_ub2|1b_1mmb.+1_6+1b_ub2|1b_1mfb.+1_6+1b_ub2")
1293
1294(define_reservation "1b_L" "1b_0mlx.+1_3+1b_ui0+1b_uf0\
1295                           |1b_1mlx.+1_6+(1b_ui0|1b_ui1)+1b_uf1")
1296
1297;; We assume that there is no insn issued on the same cycle as unknown insn.
1298(define_cpu_unit "1b_empty" "oneb")
1299(exclusion_set "1b_empty"
1300    "1b_0m.ii,1b_0m.mi,1b_0m.fi,1b_0m.mf,1b_0b.bb,1b_0m.bb,\
1301     1b_0m.ib,1b_0m.mb,1b_0m.fb,1b_0m.lx")
1302
1303(define_cpu_unit
1304   "1b_0m_bs, 1b_0mi_bs, 1b_0mm_bs, 1b_0mf_bs, 1b_0b_bs, 1b_0bb_bs, 1b_0mb_bs"
1305   "oneb")
1306(define_cpu_unit
1307   "1b_1m_bs, 1b_1mi_bs, 1b_1mm_bs, 1b_1mf_bs, 1b_1b_bs, 1b_1bb_bs, 1b_1mb_bs"
1308   "oneb")
1309
1310(define_cpu_unit "1b_m_cont, 1b_mi_cont, 1b_mm_cont, 1b_mf_cont, 1b_mb_cont,\
1311	          1b_b_cont, 1b_bb_cont" "oneb")
1312
1313;; For stop in the middle of the bundles.
1314(define_cpu_unit "1b_m_stop, 1b_m0_stop, 1b_m1_stop, 1b_0mmi_cont" "oneb")
1315(define_cpu_unit "1b_mi_stop, 1b_mi0_stop, 1b_mi1_stop, 1b_0mii_cont" "oneb")
1316
1317(final_presence_set "1b_0m_bs"
1318   "1b_0m.ii, 1b_0m.mi, 1b_0m.mf, 1b_0m.fi, 1b_0m.bb,\
1319    1b_0m.ib, 1b_0m.fb, 1b_0m.mb, 1b_0m.lx")
1320(final_presence_set "1b_1m_bs"
1321   "1b_1m.ii, 1b_1m.mi, 1b_1m.fi, 1b_1m.bb, 1b_1m.ib, 1b_1m.fb, 1b_1m.mb,\
1322    1b_1m.lx")
1323(final_presence_set "1b_0mi_bs"  "1b_0mi.i, 1b_0mi.i")
1324(final_presence_set "1b_1mi_bs"  "1b_1mi.i, 1b_1mi.i")
1325(final_presence_set "1b_0mm_bs"  "1b_0mm.i, 1b_0mm.f, 1b_0mm.b")
1326(final_presence_set "1b_1mm_bs"  "1b_1mm.i, 1b_1mm.b")
1327(final_presence_set "1b_0mf_bs"  "1b_0mf.i, 1b_0mf.b")
1328(final_presence_set "1b_1mf_bs"  "1b_1mf.i, 1b_1mf.b")
1329(final_presence_set "1b_0b_bs"  "1b_0b.bb")
1330(final_presence_set "1b_1b_bs"  "1b_1b.bb")
1331(final_presence_set "1b_0bb_bs"  "1b_0bb.b")
1332(final_presence_set "1b_1bb_bs"  "1b_1bb.b")
1333(final_presence_set "1b_0mb_bs"  "1b_0mb.b")
1334(final_presence_set "1b_1mb_bs"  "1b_1mb.b")
1335
1336(exclusion_set "1b_0m_bs"
1337   "1b_0mi.i, 1b_0mm.i, 1b_0mm.f, 1b_0mf.i, 1b_0mb.b,\
1338    1b_0mi.b, 1b_0mf.b, 1b_0mm.b, 1b_0mlx., 1b_m0_stop")
1339(exclusion_set "1b_1m_bs"
1340   "1b_1mi.i, 1b_1mm.i, 1b_1mf.i, 1b_1mb.b, 1b_1mi.b, 1b_1mf.b, 1b_1mm.b,\
1341    1b_1mlx., 1b_m1_stop")
1342(exclusion_set "1b_0mi_bs"  "1b_0mii., 1b_0mib., 1b_mi0_stop")
1343(exclusion_set "1b_1mi_bs"  "1b_1mii., 1b_1mib., 1b_mi1_stop")
1344(exclusion_set "1b_0mm_bs"  "1b_0mmi., 1b_0mmf., 1b_0mmb.")
1345(exclusion_set "1b_1mm_bs"  "1b_1mmi., 1b_1mmb.")
1346(exclusion_set "1b_0mf_bs"  "1b_0mfi., 1b_0mfb.")
1347(exclusion_set "1b_1mf_bs"  "1b_1mfi., 1b_1mfb.")
1348(exclusion_set "1b_0b_bs"  "1b_0bb.b")
1349(exclusion_set "1b_1b_bs"  "1b_1bb.b")
1350(exclusion_set "1b_0bb_bs"  "1b_0bbb.")
1351(exclusion_set "1b_1bb_bs"  "1b_1bbb.")
1352(exclusion_set "1b_0mb_bs"  "1b_0mbb.")
1353(exclusion_set "1b_1mb_bs"  "1b_1mbb.")
1354
1355(exclusion_set
1356   "1b_0m_bs, 1b_0mi_bs, 1b_0mm_bs, 1b_0mf_bs, 1b_0b_bs, 1b_0bb_bs, 1b_0mb_bs,
1357    1b_1m_bs, 1b_1mi_bs, 1b_1mm_bs, 1b_1mf_bs, 1b_1b_bs, 1b_1bb_bs, 1b_1mb_bs"
1358   "1b_stop")
1359
1360(final_presence_set
1361   "1b_0mi.i, 1b_0mm.i, 1b_0mf.i, 1b_0mm.f, 1b_0mb.b,\
1362    1b_0mi.b, 1b_0mm.b, 1b_0mf.b, 1b_0mlx."
1363   "1b_m_cont")
1364(final_presence_set "1b_0mii., 1b_0mib." "1b_mi_cont")
1365(final_presence_set "1b_0mmi., 1b_0mmf., 1b_0mmb." "1b_mm_cont")
1366(final_presence_set "1b_0mfi., 1b_0mfb." "1b_mf_cont")
1367(final_presence_set "1b_0bb.b" "1b_b_cont")
1368(final_presence_set "1b_0bbb." "1b_bb_cont")
1369(final_presence_set "1b_0mbb." "1b_mb_cont")
1370
1371(exclusion_set
1372   "1b_0m.ii, 1b_0m.mi, 1b_0m.fi, 1b_0m.mf, 1b_0b.bb, 1b_0m.bb,\
1373    1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx"
1374   "1b_m_cont, 1b_mi_cont, 1b_mm_cont, 1b_mf_cont,\
1375    1b_mb_cont, 1b_b_cont, 1b_bb_cont")
1376
1377(exclusion_set "1b_empty"
1378               "1b_m_cont,1b_mi_cont,1b_mm_cont,1b_mf_cont,\
1379                1b_mb_cont,1b_b_cont,1b_bb_cont")
1380
1381;; For m;mi bundle
1382(final_presence_set "1b_m0_stop" "1b_0m.mi")
1383(final_presence_set "1b_0mm.i" "1b_0mmi_cont")
1384(exclusion_set "1b_0mmi_cont"
1385   "1b_0m.ii, 1b_0m.mi, 1b_0m.fi, 1b_0m.mf, 1b_0b.bb, 1b_0m.bb,\
1386    1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1387(exclusion_set "1b_m0_stop" "1b_0mm.i")
1388(final_presence_set "1b_m1_stop" "1b_1m.mi")
1389(exclusion_set "1b_m1_stop" "1b_1mm.i")
1390(final_presence_set "1b_m_stop" "1b_m0_stop, 1b_m1_stop")
1391
1392;; For mi;i bundle
1393(final_presence_set "1b_mi0_stop" "1b_0mi.i")
1394(final_presence_set "1b_0mii." "1b_0mii_cont")
1395(exclusion_set "1b_0mii_cont"
1396   "1b_0m.ii, 1b_0m.mi, 1b_0m.fi, 1b_0m.mf, 1b_0b.bb, 1b_0m.bb,\
1397    1b_0m.ib, 1b_0m.mb, 1b_0m.fb, 1b_0m.lx")
1398(exclusion_set "1b_mi0_stop" "1b_0mii.")
1399(final_presence_set "1b_mi1_stop" "1b_1mi.i")
1400(exclusion_set "1b_mi1_stop" "1b_1mii.")
1401(final_presence_set "1b_mi_stop" "1b_mi0_stop, 1b_mi1_stop")
1402
1403(final_absence_set
1404   "1b_0m.ii,1b_0mi.i,1b_0mii.,1b_0m.mi,1b_0mm.i,1b_0mmi.,\
1405    1b_0m.fi,1b_0mf.i,1b_0mfi.,1b_0m.mf,1b_0mm.f,1b_0mmf.,\
1406    1b_0b.bb,1b_0bb.b,1b_0bbb.,1b_0m.bb,1b_0mb.b,1b_0mbb.,\
1407    1b_0m.ib,1b_0mi.b,1b_0mib.,1b_0m.mb,1b_0mm.b,1b_0mmb.,\
1408    1b_0m.fb,1b_0mf.b,1b_0mfb.,1b_0m.lx,1b_0mlx., \
1409    1b_1m.ii,1b_1mi.i,1b_1mii.,1b_1m.mi,1b_1mm.i,1b_1mmi.,\
1410    1b_1m.fi,1b_1mf.i,1b_1mfi.,\
1411    1b_1b.bb,1b_1bb.b,1b_1bbb.,1b_1m.bb,1b_1mb.b,1b_1mbb.,\
1412    1b_1m.ib,1b_1mi.b,1b_1mib.,1b_1m.mb,1b_1mm.b,1b_1mmb.,\
1413    1b_1m.fb,1b_1mf.b,1b_1mfb.,1b_1m.lx,1b_1mlx."
1414   "1b_m0_stop,1b_m1_stop,1b_mi0_stop,1b_mi1_stop")
1415
1416(define_reservation "1b_A" "1b_M|1b_I")
1417
1418(define_insn_reservation "1b_stop_bit" 0
1419  (and (and (eq_attr "cpu" "itanium")
1420            (eq_attr "itanium_class" "stop_bit"))
1421       (ne (symbol_ref "bundling_p") (const_int 0)))
1422  "1b_stop|1b_m0_stop|1b_m1_stop|1b_mi0_stop|1b_mi1_stop")
1423(define_insn_reservation "1b_br"      0
1424  (and (and (eq_attr "cpu" "itanium")
1425            (eq_attr "itanium_class" "br"))
1426       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_B")
1427(define_insn_reservation "1b_scall"   0
1428  (and (and (eq_attr "cpu" "itanium")
1429            (eq_attr "itanium_class" "scall"))
1430       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_B")
1431(define_insn_reservation "1b_fcmp"    2
1432  (and (and (eq_attr "cpu" "itanium")
1433            (eq_attr "itanium_class" "fcmp"))
1434       (ne (symbol_ref "bundling_p") (const_int 0)))
1435  "1b_F+1b_not_uf1")
1436(define_insn_reservation "1b_fcvtfx"  7
1437  (and (and (eq_attr "cpu" "itanium")
1438            (eq_attr "itanium_class" "fcvtfx"))
1439       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_F")
1440
1441(define_insn_reservation "1b_fld"     9
1442  (and (and (and (eq_attr "cpu" "itanium")
1443		 (eq_attr "itanium_class" "fld"))
1444	    (eq_attr "check_load" "no"))
1445       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1446(define_insn_reservation "1b_fldc"    0
1447  (and (and (and (eq_attr "cpu" "itanium")
1448		 (eq_attr "itanium_class" "fld"))
1449	    (eq_attr "check_load" "yes"))
1450       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1451
1452(define_insn_reservation "1b_fldp"    9
1453  (and (and (and (eq_attr "cpu" "itanium")
1454		 (eq_attr "itanium_class" "fldp"))
1455	    (eq_attr "check_load" "no"))
1456       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1457(define_insn_reservation "1b_fldpc"   0
1458  (and (and (and (eq_attr "cpu" "itanium")
1459		 (eq_attr "itanium_class" "fldp"))
1460	    (eq_attr "check_load" "yes"))
1461       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1462
1463(define_insn_reservation "1b_fmac"    5
1464  (and (and (eq_attr "cpu" "itanium")
1465            (eq_attr "itanium_class" "fmac"))
1466       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_F")
1467(define_insn_reservation "1b_fmisc"   5
1468  (and (and (eq_attr "cpu" "itanium")
1469            (eq_attr "itanium_class" "fmisc"))
1470       (ne (symbol_ref "bundling_p") (const_int 0)))
1471  "1b_F+1b_not_uf1")
1472(define_insn_reservation "1b_frar_i" 13
1473  (and (and (eq_attr "cpu" "itanium")
1474            (eq_attr "itanium_class" "frar_i"))
1475       (ne (symbol_ref "bundling_p") (const_int 0)))
1476  "1b_I+1b_not_ui1")
1477(define_insn_reservation "1b_frar_m"  6
1478  (and (and (eq_attr "cpu" "itanium")
1479            (eq_attr "itanium_class" "frar_m"))
1480       (ne (symbol_ref "bundling_p") (const_int 0)))
1481  "1b_M+1b_not_um1")
1482(define_insn_reservation "1b_frbr"    2
1483  (and (and (eq_attr "cpu" "itanium")
1484            (eq_attr "itanium_class" "frbr"))
1485       (ne (symbol_ref "bundling_p") (const_int 0)))
1486  "1b_I+1b_not_ui1")
1487(define_insn_reservation "1b_frfr"    2
1488  (and (and (eq_attr "cpu" "itanium")
1489            (eq_attr "itanium_class" "frfr"))
1490       (ne (symbol_ref "bundling_p") (const_int 0)))
1491  "1b_M+1b_not_um1")
1492(define_insn_reservation "1b_frpr"    2
1493  (and (and (eq_attr "cpu" "itanium")
1494            (eq_attr "itanium_class" "frpr"))
1495       (ne (symbol_ref "bundling_p") (const_int 0)))
1496  "1b_I+1b_not_ui1")
1497(define_insn_reservation "1b_ialu"      1
1498    (and (and (eq_attr "cpu" "itanium")
1499              (eq_attr "itanium_class" "ialu"))
1500         (ne (symbol_ref
1501	      "bundling_p && !ia64_produce_address_p (insn)")
1502             (const_int 0)))
1503    "1b_A")
1504(define_insn_reservation "1b_ialu_addr" 1
1505    (and (and (eq_attr "cpu" "itanium")
1506              (eq_attr "itanium_class" "ialu"))
1507         (eq (symbol_ref
1508              "bundling_p && ia64_produce_address_p (insn)")
1509             (const_int 1)))
1510    "1b_M")
1511(define_insn_reservation "1b_icmp"    1
1512  (and (and (eq_attr "cpu" "itanium")
1513            (eq_attr "itanium_class" "icmp"))
1514       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_A")
1515(define_insn_reservation "1b_ilog"    1
1516  (and (and (eq_attr "cpu" "itanium")
1517            (eq_attr "itanium_class" "ilog"))
1518       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_A")
1519(define_insn_reservation "1b_mmalua"  2
1520  (and (and (eq_attr "cpu" "itanium")
1521            (eq_attr "itanium_class" "mmalua"))
1522       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_A")
1523(define_insn_reservation "1b_ishf"    1
1524  (and (and (eq_attr "cpu" "itanium")
1525            (eq_attr "itanium_class" "ishf"))
1526       (ne (symbol_ref "bundling_p") (const_int 0)))
1527  "1b_I+1b_not_ui1")
1528
1529(define_insn_reservation "1b_ld"      2
1530  (and (and (and (eq_attr "cpu" "itanium")
1531		 (eq_attr "itanium_class" "ld"))
1532	    (eq_attr "check_load" "no"))
1533       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1534(define_insn_reservation "1b_ldc"     0
1535  (and (and (and (eq_attr "cpu" "itanium")
1536		 (eq_attr "itanium_class" "ld"))
1537	    (eq_attr "check_load" "yes"))
1538       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1539
1540(define_insn_reservation "1b_long_i"  1
1541  (and (and (eq_attr "cpu" "itanium")
1542            (eq_attr "itanium_class" "long_i"))
1543       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_L")
1544(define_insn_reservation "1b_mmmul"   2
1545  (and (and (eq_attr "cpu" "itanium")
1546            (eq_attr "itanium_class" "mmmul"))
1547       (ne (symbol_ref "bundling_p") (const_int 0)))
1548  "1b_I+1b_not_ui1")
1549(define_insn_reservation "1b_mmshf"   2
1550  (and (and (eq_attr "cpu" "itanium")
1551            (eq_attr "itanium_class" "mmshf"))
1552       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_I")
1553(define_insn_reservation "1b_mmshfi"  2
1554  (and (and (eq_attr "cpu" "itanium")
1555            (eq_attr "itanium_class" "mmshfi"))
1556       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_I")
1557(define_insn_reservation "1b_rse_m"   0
1558  (and (and (eq_attr "cpu" "itanium")
1559            (eq_attr "itanium_class" "rse_m"))
1560       (ne (symbol_ref "bundling_p") (const_int 0)))
1561   "(1b_0m.ii|1b_0m.mi|1b_0m.fi|1b_0m.mf|1b_0b.bb|1b_0m.bb\
1562     |1b_0m.ib|1b_0m.mb|1b_0m.fb|1b_0m.lx)+1_1+1b_um0")
1563(define_insn_reservation "1b_sem"     0
1564  (and (and (eq_attr "cpu" "itanium")
1565            (eq_attr "itanium_class" "sem"))
1566       (ne (symbol_ref "bundling_p") (const_int 0)))
1567  "1b_M+1b_not_um1")
1568(define_insn_reservation "1b_stf"     1
1569  (and (and (eq_attr "cpu" "itanium")
1570            (eq_attr "itanium_class" "stf"))
1571       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1572(define_insn_reservation "1b_st"      1
1573  (and (and (eq_attr "cpu" "itanium")
1574            (eq_attr "itanium_class" "st"))
1575       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1576(define_insn_reservation "1b_syst_m0" 0
1577  (and (and (eq_attr "cpu" "itanium")
1578            (eq_attr "itanium_class" "syst_m0"))
1579       (ne (symbol_ref "bundling_p") (const_int 0)))
1580  "1b_M+1b_not_um1")
1581(define_insn_reservation "1b_syst_m"  0
1582  (and (and (eq_attr "cpu" "itanium")
1583            (eq_attr "itanium_class" "syst_m"))
1584       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1585(define_insn_reservation "1b_tbit"    1
1586  (and (and (eq_attr "cpu" "itanium")
1587            (eq_attr "itanium_class" "tbit"))
1588       (ne (symbol_ref "bundling_p") (const_int 0)))
1589  "1b_I+1b_not_ui1")
1590(define_insn_reservation "1b_toar_i"  0
1591  (and (and (eq_attr "cpu" "itanium")
1592            (eq_attr "itanium_class" "toar_i"))
1593       (ne (symbol_ref "bundling_p") (const_int 0)))
1594  "1b_I+1b_not_ui1")
1595(define_insn_reservation "1b_toar_m"  5
1596  (and (and (eq_attr "cpu" "itanium")
1597            (eq_attr "itanium_class" "toar_m"))
1598       (ne (symbol_ref "bundling_p") (const_int 0)))
1599  "1b_M+1b_not_um1")
1600(define_insn_reservation "1b_tobr"    1
1601  (and (and (eq_attr "cpu" "itanium")
1602            (eq_attr "itanium_class" "tobr"))
1603       (ne (symbol_ref "bundling_p") (const_int 0)))
1604  "1b_I+1b_not_ui1")
1605(define_insn_reservation "1b_tofr"    9
1606  (and (and (eq_attr "cpu" "itanium")
1607            (eq_attr "itanium_class" "tofr"))
1608       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1609(define_insn_reservation "1b_topr"    1
1610  (and (and (eq_attr "cpu" "itanium")
1611            (eq_attr "itanium_class" "topr"))
1612       (ne (symbol_ref "bundling_p") (const_int 0)))
1613  "1b_I+1b_not_ui1")
1614(define_insn_reservation "1b_xmpy"    7
1615  (and (and (eq_attr "cpu" "itanium")
1616            (eq_attr "itanium_class" "xmpy"))
1617       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_F")
1618(define_insn_reservation "1b_xtd"     1
1619  (and (and (eq_attr "cpu" "itanium")
1620            (eq_attr "itanium_class" "xtd"))
1621       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_I")
1622
1623(define_insn_reservation "1b_chk_s_i" 0
1624  (and (and (eq_attr "cpu" "itanium")
1625            (eq_attr "itanium_class" "chk_s_i"))
1626       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_A")
1627(define_insn_reservation "1b_chk_s_f" 0
1628  (and (and (eq_attr "cpu" "itanium")
1629            (eq_attr "itanium_class" "chk_s_f"))
1630       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1631(define_insn_reservation "1b_chk_a"   0
1632  (and (and (eq_attr "cpu" "itanium")
1633            (eq_attr "itanium_class" "chk_a"))
1634       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1635
1636(define_insn_reservation "1b_lfetch"  0
1637  (and (and (eq_attr "cpu" "itanium")
1638            (eq_attr "itanium_class" "lfetch"))
1639       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1640(define_insn_reservation "1b_nop_m"   0
1641  (and (and (eq_attr "cpu" "itanium")
1642            (eq_attr "itanium_class" "nop_m"))
1643       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_M")
1644(define_insn_reservation "1b_nop_b"   0
1645  (and (and (eq_attr "cpu" "itanium")
1646            (eq_attr "itanium_class" "nop_b"))
1647       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_NB")
1648(define_insn_reservation "1b_nop_i"   0
1649  (and (and (eq_attr "cpu" "itanium")
1650            (eq_attr "itanium_class" "nop_i"))
1651       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_I")
1652(define_insn_reservation "1b_nop_f"   0
1653  (and (and (eq_attr "cpu" "itanium")
1654            (eq_attr "itanium_class" "nop_f"))
1655       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_F")
1656(define_insn_reservation "1b_nop_x"   0
1657  (and (and (eq_attr "cpu" "itanium")
1658            (eq_attr "itanium_class" "nop_x"))
1659       (ne (symbol_ref "bundling_p") (const_int 0))) "1b_L")
1660(define_insn_reservation "1b_unknown" 1
1661  (and (and (eq_attr "cpu" "itanium")
1662            (eq_attr "itanium_class" "unknown"))
1663       (ne (symbol_ref "bundling_p") (const_int 0)))
1664  "1b_empty")
1665(define_insn_reservation "1b_nop" 1
1666  (and (and (eq_attr "cpu" "itanium")
1667            (eq_attr "itanium_class" "nop"))
1668       (ne (symbol_ref "bundling_p") (const_int 0)))
1669  "1b_M|1b_NB|1b_I|1b_F")
1670(define_insn_reservation "1b_ignore" 0
1671  (and (and (eq_attr "cpu" "itanium")
1672            (eq_attr "itanium_class" "ignore"))
1673       (ne (symbol_ref "bundling_p") (const_int 0)))
1674  "nothing")
1675
1676(define_insn_reservation "1b_pre_cycle" 0
1677   (and (and (eq_attr "cpu" "itanium")
1678             (eq_attr "itanium_class" "pre_cycle"))
1679        (ne (symbol_ref "bundling_p") (const_int 0)))
1680                         "(1b_0m_bs, 1b_m_cont)     \
1681                          | (1b_0mi_bs, 1b_mi_cont) \
1682                          | (1b_0mm_bs, 1b_mm_cont) \
1683                          | (1b_0mf_bs, 1b_mf_cont) \
1684                          | (1b_0b_bs, 1b_b_cont)   \
1685                          | (1b_0bb_bs, 1b_bb_cont) \
1686                          | (1b_0mb_bs, 1b_mb_cont) \
1687                          | (1b_1m_bs, 1b_m_cont)   \
1688                          | (1b_1mi_bs, 1b_mi_cont) \
1689                          | (1b_1mm_bs, 1b_mm_cont) \
1690                          | (1b_1mf_bs, 1b_mf_cont) \
1691                          | (1b_1b_bs, 1b_b_cont)   \
1692                          | (1b_1bb_bs, 1b_bb_cont) \
1693                          | (1b_1mb_bs, 1b_mb_cont) \
1694                          | (1b_m_stop, 1b_0mmi_cont)   \
1695                          | (1b_mi_stop, 1b_0mii_cont)")
1696
1697