OSDN Git Service

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