OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [config/] [ia64/] [itanium2.md] - Blame information for rev 825

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.