1 ;; Itanium1 (original Itanium) DFA descriptions for insn scheduling
3 ;; Copyright (C) 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
4 ;; Contributed by Vladimir Makarov <vmakarov@redhat.com>.
6 ;; This file is part of GCC.
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)
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.
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/>. */
24 /* This is description of pipeline hazards based on DFA. The
25 following constructions can be used for this:
27 o define_cpu_unit string [string]) describes a cpu functional unit
30 1st operand: Names of cpu function units.
31 2nd operand: Name of automaton (see comments for
34 All define_reservations and define_cpu_units should have unique
35 names which cannot be "nothing".
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.
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.
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
56 (presence_set "slot1" "slot0")
58 Or slot1 is reserved only after slot0 and unit b0 reservation.
59 In this case we could write
61 (presence_set "slot1" "slot0 b0")
63 All CPU functional units in a set should belong to the same
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
77 (presence_set "slot1" "slot0")
79 the following insn will be never issued (because slot1 requires
80 slot0 which is absent in the source state).
82 (define_reservation "insn_and_nop" "slot0 + slot1")
84 but it can be issued if we use analogous `final_presence_set'.
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.
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
98 (absence_set "slot2" "slot0, slot1")
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
103 (absence_set "slot2" "slot0 b0, slot1 b1")
105 All CPU functional units in a set should to belong the same
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.
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
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.
126 o (automata_option string) describes option for generation of
127 automata. Currently there are the following options:
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.
133 o "ndfa" which makes automata with nondeterministic reservation
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".
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:
151 regexp = regexp "," oneof
154 oneof = oneof "|" allof
157 allof = allof "+" repeat
160 repeat = element "*" number
163 element = cpu_function_name
169 1. "," is used for describing start of the next cycle in
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.
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.
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 ",").
184 5. cpu function unit name which means reservation.
186 6. reservation name -- see define_reservation.
188 7. string "nothing" means no units reservation.
192 (define_automaton "one")
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")
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")
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,\
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")
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,\
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.")
242 (exclusion_set "1_0mii."
243 "1_0mmi., 1_0mfi., 1_0mmf., 1_0bbb., 1_0mbb., 1_0mib., 1_0mmb., 1_0mfb.,\
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.")
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")
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.")
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.")
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")
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")
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")
311 (final_presence_set "1_0mm.f" "1_0m.mf")
312 (final_presence_set "1_0mmf." "1_0mm.f")
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")
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")
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")
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")
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")
339 (final_presence_set "1_0mlx." "1_0m.lx")
340 (final_presence_set "1_1mlx." "1_1m.lx")
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.,\
347 ;; Microarchitecture units:
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")
352 (exclusion_set "1_ub0" "1_unb0")
353 (exclusion_set "1_ub1" "1_unb1")
354 (exclusion_set "1_ub2" "1_unb2")
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".
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")
371 ;; For exceptions of M, I, B, F insns:
372 (define_cpu_unit "1_not_um1, 1_not_ui1, 1_not_uf1" "one")
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")
378 ;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the
379 ;;; B-slot contains a nop.b or a brp instruction".
380 ;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or
381 ;;; nop.b, otherwise it disperses to B2".
383 "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_0mib. 1_ub2, 1_0mfb. 1_ub2, 1_0mmb. 1_ub2")
387 ;; This is necessary to start new processor cycle when we meet stop bit.
388 (define_cpu_unit "1_stop" "one")
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.,\
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."
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.")
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)\
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)\
425 (define_reservation "1_M" "1_M0|1_M1")
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")
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")
441 (define_reservation "1_I" "1_I0|1_I1")
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")
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")
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)")
460 (define_reservation "1_F" "1_F0|1_F1|1_F2")
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")
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")
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")
489 (define_reservation "1_B" "1_B0|1_B1")
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")
502 (define_reservation "1_A" "1_M|1_I")
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")
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)))
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")
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")
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")
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)))
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)))
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)))
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)))
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)))
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)))
588 (define_insn_reservation "1_ialu" 1
589 (and (and (eq_attr "cpu" "itanium")
590 (eq_attr "itanium_class" "ialu"))
592 "bundling_p || ia64_produce_address_p (insn)")
595 (define_insn_reservation "1_ialu_addr" 1
596 (and (and (eq_attr "cpu" "itanium")
597 (eq_attr "itanium_class" "ialu"))
599 "!bundling_p && ia64_produce_address_p (insn)")
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)))
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)))
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)))
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")
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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")
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")
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")
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")
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,\
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")
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")
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")
782 "1_0m_bs, 1_0mi_bs, 1_0mm_bs, 1_0mf_bs, 1_0b_bs, 1_0bb_bs, 1_0mb_bs"
785 "1_1m_bs, 1_1mi_bs, 1_1mm_bs, 1_1mf_bs, 1_1b_bs, 1_1bb_bs, 1_1mb_bs"
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")
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")
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,\
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")
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,\
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.")
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"
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."
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")
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")
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")
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")
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")
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.,\
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.,\
890 "1_m0_stop,1_m1_stop,1_mi0_stop,1_mi1_stop")
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")
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.")
901 (final_presence_set "1_b_cont_only" "1_b_cont")
902 (exclusion_set "1_b_cont_only" "1_0bb.b")
904 (final_presence_set "1_mi_cont_only" "1_mi_cont")
905 (exclusion_set "1_mi_cont_only" "1_0mii., 1_0mib.")
907 (final_presence_set "1_mm_cont_only" "1_mm_cont")
908 (exclusion_set "1_mm_cont_only" "1_0mmi., 1_0mmf., 1_0mmb.")
910 (final_presence_set "1_mf_cont_only" "1_mf_cont")
911 (exclusion_set "1_mf_cont_only" "1_0mfi., 1_0mfb.")
913 (final_presence_set "1_mb_cont_only" "1_mb_cont")
914 (exclusion_set "1_mb_cont_only" "1_0mbb.")
916 (final_presence_set "1_bb_cont_only" "1_bb_cont")
917 (exclusion_set "1_bb_cont_only" "1_0bbb.")
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))")
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")
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")
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")
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
966 ;;(define_bypass 2 "1_ialu" "1_st" "ia64_st_address_bypass_p")
968 (define_bypass 0 "1_icmp" "1_br,1_scall")
970 (define_bypass 3 "1_ilog" "1_mmmul,1_mmshf")
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")
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")
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")
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")
990 (define_bypass 0 "1_tbit" "1_br,1_scall")
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")
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")
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"
1014 (define_automaton "oneb")
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")
1019 ;; All possible combinations of bundles/syllables
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")
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")
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")
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")
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.")
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.")
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")
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.")
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.")
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")
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")
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")
1145 (final_presence_set "1b_0mm.f" "1b_0m.mf")
1146 (final_presence_set "1b_0mmf." "1b_0mm.f")
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")
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")
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")
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")
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")
1173 (final_presence_set "1b_0mlx." "1b_0m.lx")
1174 (final_presence_set "1b_1mlx." "1b_1m.lx")
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.")
1182 ;; Microarchitecture units:
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")
1187 (exclusion_set "1b_ub0" "1b_unb0")
1188 (exclusion_set "1b_ub1" "1b_unb1")
1189 (exclusion_set "1b_ub2" "1b_unb2")
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".
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")
1208 ;; For exceptions of M, I, B, F insns:
1209 (define_cpu_unit "1b_not_um1, 1b_not_ui1, 1b_not_uf1" "oneb")
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")
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".
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")
1224 ;; This is necessary to start new processor cycle when we meet stop bit.
1225 (define_cpu_unit "1b_stop" "oneb")
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."
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.")
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)\
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")
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")
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")
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")
1293 (define_reservation "1b_L" "1b_0mlx.+1_3+1b_ui0+1b_uf0\
1294 |1b_1mlx.+1_6+(1b_ui0|1b_ui1)+1b_uf1")
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")
1303 "1b_0m_bs, 1b_0mi_bs, 1b_0mm_bs, 1b_0mf_bs, 1b_0b_bs, 1b_0bb_bs, 1b_0mb_bs"
1306 "1b_1m_bs, 1b_1mi_bs, 1b_1mm_bs, 1b_1mf_bs, 1b_1b_bs, 1b_1bb_bs, 1b_1mb_bs"
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")
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")
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,\
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")
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.")
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"
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."
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")
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")
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")
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")
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")
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")
1415 (define_reservation "1b_A" "1b_M|1b_I")
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)))
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")
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")
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")
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)))
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)))
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)))
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)))
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)))
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)))
1496 (define_insn_reservation "1b_ialu" 1
1497 (and (and (eq_attr "cpu" "itanium")
1498 (eq_attr "itanium_class" "ialu"))
1500 "bundling_p && !ia64_produce_address_p (insn)")
1503 (define_insn_reservation "1b_ialu_addr" 1
1504 (and (and (eq_attr "cpu" "itanium")
1505 (eq_attr "itanium_class" "ialu"))
1507 "bundling_p && ia64_produce_address_p (insn)")
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)))
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")
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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")
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")
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)))
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)))
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)")