1132718Skan;; Itanium2 DFA descriptions for insn scheduling and bundling. 2169689Skan;; Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. 3132718Skan;; Contributed by Vladimir Makarov <vmakarov@redhat.com>. 4132718Skan;; 5132718Skan;; This file is part of GCC. 6132718Skan;; 7132718Skan;; GCC is free software; you can redistribute it and/or modify 8132718Skan;; it under the terms of the GNU General Public License as published by 9132718Skan;; the Free Software Foundation; either version 2, or (at your option) 10132718Skan;; any later version. 11132718Skan;; 12132718Skan;; GCC is distributed in the hope that it will be useful, 13132718Skan;; but WITHOUT ANY WARRANTY; without even the implied warranty of 14132718Skan;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15132718Skan;; GNU General Public License for more details. 16132718Skan;; 17132718Skan;; You should have received a copy of the GNU General Public License 18132718Skan;; along with GCC; see the file COPYING. If not, write to 19169689Skan;; the Free Software Foundation, 51 Franklin Street, Fifth Floor, 20169689Skan;; Boston, MA 02110-1301, USA. */ 21132718Skan;; 22132718Skan 23132718Skan/* This is description of pipeline hazards based on DFA. The 24132718Skan following constructions can be used for this: 25132718Skan 26132718Skan o define_cpu_unit string [string]) describes a cpu functional unit 27132718Skan (separated by comma). 28132718Skan 29132718Skan 1st operand: Names of cpu function units. 30132718Skan 2nd operand: Name of automaton (see comments for 31132718Skan DEFINE_AUTOMATON). 32132718Skan 33132718Skan All define_reservations and define_cpu_units should have unique 34169689Skan names which cannot be "nothing". 35132718Skan 36132718Skan o (exclusion_set string string) means that each CPU function unit 37169689Skan in the first string cannot be reserved simultaneously with each 38132718Skan unit whose name is in the second string and vise versa. CPU 39132718Skan units in the string are separated by commas. For example, it is 40132718Skan useful for description CPU with fully pipelined floating point 41132718Skan functional unit which can execute simultaneously only single 42132718Skan floating point insns or only double floating point insns. 43132718Skan 44132718Skan o (presence_set string string) means that each CPU function unit in 45169689Skan the first string cannot be reserved unless at least one of 46132718Skan pattern of units whose names are in the second string is 47132718Skan reserved. This is an asymmetric relation. CPU units or unit 48132718Skan patterns in the strings are separated by commas. Pattern is one 49132718Skan unit name or unit names separated by white-spaces. 50132718Skan 51132718Skan For example, it is useful for description that slot1 is reserved 52132718Skan after slot0 reservation for a VLIW processor. We could describe 53132718Skan it by the following construction 54132718Skan 55132718Skan (presence_set "slot1" "slot0") 56132718Skan 57132718Skan Or slot1 is reserved only after slot0 and unit b0 reservation. 58132718Skan In this case we could write 59132718Skan 60132718Skan (presence_set "slot1" "slot0 b0") 61132718Skan 62132718Skan All CPU functional units in a set should belong to the same 63132718Skan automaton. 64132718Skan 65132718Skan o (final_presence_set string string) is analogous to 66132718Skan `presence_set'. The difference between them is when checking is 67132718Skan done. When an instruction is issued in given automaton state 68132718Skan reflecting all current and planned unit reservations, the 69132718Skan automaton state is changed. The first state is a source state, 70132718Skan the second one is a result state. Checking for `presence_set' is 71132718Skan done on the source state reservation, checking for 72132718Skan `final_presence_set' is done on the result reservation. This 73132718Skan construction is useful to describe a reservation which is 74132718Skan actually two subsequent reservations. For example, if we use 75132718Skan 76132718Skan (presence_set "slot1" "slot0") 77132718Skan 78132718Skan the following insn will be never issued (because slot1 requires 79132718Skan slot0 which is absent in the source state). 80132718Skan 81132718Skan (define_reservation "insn_and_nop" "slot0 + slot1") 82132718Skan 83132718Skan but it can be issued if we use analogous `final_presence_set'. 84132718Skan 85132718Skan o (absence_set string string) means that each CPU function unit in 86132718Skan the first string can be reserved only if each pattern of units 87132718Skan whose names are in the second string is not reserved. This is an 88132718Skan asymmetric relation (actually exclusion set is analogous to this 89132718Skan one but it is symmetric). CPU units or unit patterns in the 90132718Skan string are separated by commas. Pattern is one unit name or unit 91132718Skan names separated by white-spaces. 92132718Skan 93169689Skan For example, it is useful for description that slot0 cannot be 94132718Skan reserved after slot1 or slot2 reservation for a VLIW processor. 95132718Skan We could describe it by the following construction 96132718Skan 97132718Skan (absence_set "slot2" "slot0, slot1") 98132718Skan 99169689Skan Or slot2 cannot be reserved if slot0 and unit b0 are reserved or 100132718Skan slot1 and unit b1 are reserved . In this case we could write 101132718Skan 102132718Skan (absence_set "slot2" "slot0 b0, slot1 b1") 103132718Skan 104132718Skan All CPU functional units in a set should to belong the same 105132718Skan automaton. 106132718Skan 107132718Skan o (final_absence_set string string) is analogous to `absence_set' but 108132718Skan checking is done on the result (state) reservation. See comments 109132718Skan for final_presence_set. 110132718Skan 111132718Skan o (define_bypass number out_insn_names in_insn_names) names bypass with 112132718Skan given latency (the first number) from insns given by the first 113132718Skan string (see define_insn_reservation) into insns given by the 114132718Skan second string. Insn names in the strings are separated by 115132718Skan commas. 116132718Skan 117132718Skan o (define_automaton string) describes names of an automaton 118132718Skan generated and used for pipeline hazards recognition. The names 119132718Skan are separated by comma. Actually it is possibly to generate the 120132718Skan single automaton but unfortunately it can be very large. If we 121132718Skan use more one automata, the summary size of the automata usually 122132718Skan is less than the single one. The automaton name is used in 123132718Skan define_cpu_unit. All automata should have unique names. 124132718Skan 125132718Skan o (automata_option string) describes option for generation of 126132718Skan automata. Currently there are the following options: 127132718Skan 128132718Skan o "no-minimization" which makes no minimization of automata. 129132718Skan This is only worth to do when we are debugging the description 130132718Skan and need to look more accurately at reservations of states. 131132718Skan 132132718Skan o "ndfa" which makes automata with nondetermenistic reservation 133132718Skan by insns. 134132718Skan 135132718Skan o (define_reservation string string) names reservation (the first 136132718Skan string) of cpu functional units (the 2nd string). Sometimes unit 137132718Skan reservations for different insns contain common parts. In such 138132718Skan case, you describe common part and use one its name (the 1st 139132718Skan parameter) in regular expression in define_insn_reservation. All 140132718Skan define_reservations, define results and define_cpu_units should 141169689Skan have unique names which cannot be "nothing". 142132718Skan 143132718Skan o (define_insn_reservation name default_latency condition regexpr) 144132718Skan describes reservation of cpu functional units (the 3nd operand) 145132718Skan for instruction which is selected by the condition (the 2nd 146132718Skan parameter). The first parameter is used for output of debugging 147132718Skan information. The reservations are described by a regular 148132718Skan expression according the following syntax: 149132718Skan 150132718Skan regexp = regexp "," oneof 151132718Skan | oneof 152132718Skan 153132718Skan oneof = oneof "|" allof 154132718Skan | allof 155132718Skan 156132718Skan allof = allof "+" repeat 157132718Skan | repeat 158132718Skan 159132718Skan repeat = element "*" number 160132718Skan | element 161132718Skan 162132718Skan element = cpu_function_name 163132718Skan | reservation_name 164132718Skan | result_name 165132718Skan | "nothing" 166132718Skan | "(" regexp ")" 167132718Skan 168132718Skan 1. "," is used for describing start of the next cycle in 169132718Skan reservation. 170132718Skan 171132718Skan 2. "|" is used for describing the reservation described by the 172132718Skan first regular expression *or* the reservation described by 173132718Skan the second regular expression *or* etc. 174132718Skan 175132718Skan 3. "+" is used for describing the reservation described by the 176132718Skan first regular expression *and* the reservation described by 177132718Skan the second regular expression *and* etc. 178132718Skan 179132718Skan 4. "*" is used for convenience and simply means sequence in 180132718Skan which the regular expression are repeated NUMBER times with 181132718Skan cycle advancing (see ","). 182132718Skan 183132718Skan 5. cpu function unit name which means reservation. 184132718Skan 185132718Skan 6. reservation name -- see define_reservation. 186132718Skan 187132718Skan 7. string "nothing" means no units reservation. 188132718Skan 189132718Skan*/ 190132718Skan 191132718Skan(define_automaton "two") 192132718Skan 193132718Skan;; All possible combinations of bundles/syllables 194132718Skan(define_cpu_unit "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\ 195132718Skan 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx" "two") 196132718Skan(define_cpu_unit "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\ 197132718Skan 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx." "two") 198132718Skan(define_cpu_unit "2_0mii., 2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\ 199132718Skan 2_0mib., 2_0mmb., 2_0mfb." "two") 200132718Skan 201132718Skan(define_cpu_unit "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\ 202132718Skan 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx" "two") 203132718Skan(define_cpu_unit "2_1mi.i, 2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\ 204132718Skan 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx." "two") 205132718Skan(define_cpu_unit "2_1mii., 2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\ 206132718Skan 2_1mib., 2_1mmb., 2_1mfb." "two") 207132718Skan 208132718Skan;; Slot 1 209132718Skan(exclusion_set "2_0m.ii" "2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\ 210132718Skan 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx") 211132718Skan(exclusion_set "2_0m.mi" "2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib,\ 212132718Skan 2_0m.mb, 2_0m.fb, 2_0m.lx") 213132718Skan(exclusion_set "2_0m.fi" "2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb,\ 214132718Skan 2_0m.fb, 2_0m.lx") 215132718Skan(exclusion_set "2_0m.mf" "2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb,\ 216132718Skan 2_0m.lx") 217132718Skan(exclusion_set "2_0b.bb" "2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx") 218132718Skan(exclusion_set "2_0m.bb" "2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx") 219132718Skan(exclusion_set "2_0m.ib" "2_0m.mb, 2_0m.fb, 2_0m.lx") 220132718Skan(exclusion_set "2_0m.mb" "2_0m.fb, 2_0m.lx") 221132718Skan(exclusion_set "2_0m.fb" "2_0m.lx") 222132718Skan 223132718Skan;; Slot 2 224132718Skan(exclusion_set "2_0mi.i" "2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\ 225132718Skan 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.") 226132718Skan(exclusion_set "2_0mm.i" "2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\ 227132718Skan 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.") 228132718Skan(exclusion_set "2_0mf.i" "2_0mm.f, 2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b,\ 229132718Skan 2_0mf.b, 2_0mlx.") 230132718Skan(exclusion_set "2_0mm.f" "2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b,\ 231132718Skan 2_0mlx.") 232132718Skan(exclusion_set "2_0bb.b" "2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.") 233132718Skan(exclusion_set "2_0mb.b" "2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.") 234132718Skan(exclusion_set "2_0mi.b" "2_0mm.b, 2_0mf.b, 2_0mlx.") 235132718Skan(exclusion_set "2_0mm.b" "2_0mf.b, 2_0mlx.") 236132718Skan(exclusion_set "2_0mf.b" "2_0mlx.") 237132718Skan 238132718Skan;; Slot 3 239132718Skan(exclusion_set "2_0mii." "2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\ 240132718Skan 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.") 241132718Skan(exclusion_set "2_0mmi." "2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\ 242132718Skan 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.") 243132718Skan(exclusion_set "2_0mfi." "2_0mmf., 2_0bbb., 2_0mbb., 2_0mib., 2_0mmb.,\ 244132718Skan 2_0mfb., 2_0mlx.") 245132718Skan(exclusion_set "2_0mmf." "2_0bbb., 2_0mbb., 2_0mib., 2_0mmb., 2_0mfb.,\ 246132718Skan 2_0mlx.") 247132718Skan(exclusion_set "2_0bbb." "2_0mbb., 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.") 248132718Skan(exclusion_set "2_0mbb." "2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.") 249132718Skan(exclusion_set "2_0mib." "2_0mmb., 2_0mfb., 2_0mlx.") 250132718Skan(exclusion_set "2_0mmb." "2_0mfb., 2_0mlx.") 251132718Skan(exclusion_set "2_0mfb." "2_0mlx.") 252132718Skan 253132718Skan;; Slot 4 254132718Skan(exclusion_set "2_1m.ii" "2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\ 255132718Skan 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx") 256132718Skan(exclusion_set "2_1m.mi" "2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib,\ 257132718Skan 2_1m.mb, 2_1m.fb, 2_1m.lx") 258132718Skan(exclusion_set "2_1m.fi" "2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb,\ 259132718Skan 2_1m.fb, 2_1m.lx") 260132718Skan(exclusion_set "2_1m.mf" "2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb,\ 261132718Skan 2_1m.lx") 262132718Skan(exclusion_set "2_1b.bb" "2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx") 263132718Skan(exclusion_set "2_1m.bb" "2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx") 264132718Skan(exclusion_set "2_1m.ib" "2_1m.mb, 2_1m.fb, 2_1m.lx") 265132718Skan(exclusion_set "2_1m.mb" "2_1m.fb, 2_1m.lx") 266132718Skan(exclusion_set "2_1m.fb" "2_1m.lx") 267132718Skan 268132718Skan;; Slot 5 269132718Skan(exclusion_set "2_1mi.i" "2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\ 270132718Skan 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.") 271132718Skan(exclusion_set "2_1mm.i" "2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\ 272132718Skan 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.") 273132718Skan(exclusion_set "2_1mf.i" "2_1mm.f, 2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b,\ 274132718Skan 2_1mf.b, 2_1mlx.") 275132718Skan(exclusion_set "2_1mm.f" "2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b,\ 276132718Skan 2_1mlx.") 277132718Skan(exclusion_set "2_1bb.b" "2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.") 278132718Skan(exclusion_set "2_1mb.b" "2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.") 279132718Skan(exclusion_set "2_1mi.b" "2_1mm.b, 2_1mf.b, 2_1mlx.") 280132718Skan(exclusion_set "2_1mm.b" "2_1mf.b, 2_1mlx.") 281132718Skan(exclusion_set "2_1mf.b" "2_1mlx.") 282132718Skan 283132718Skan;; Slot 6 284132718Skan(exclusion_set "2_1mii." "2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\ 285132718Skan 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.") 286132718Skan(exclusion_set "2_1mmi." "2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\ 287132718Skan 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.") 288132718Skan(exclusion_set "2_1mfi." "2_1mmf., 2_1bbb., 2_1mbb., 2_1mib., 2_1mmb.,\ 289132718Skan 2_1mfb., 2_1mlx.") 290132718Skan(exclusion_set "2_1mmf." "2_1bbb., 2_1mbb., 2_1mib., 2_1mmb., 2_1mfb.,\ 291132718Skan 2_1mlx.") 292132718Skan(exclusion_set "2_1bbb." "2_1mbb., 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.") 293132718Skan(exclusion_set "2_1mbb." "2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.") 294132718Skan(exclusion_set "2_1mib." "2_1mmb., 2_1mfb., 2_1mlx.") 295132718Skan(exclusion_set "2_1mmb." "2_1mfb., 2_1mlx.") 296132718Skan(exclusion_set "2_1mfb." "2_1mlx.") 297132718Skan 298132718Skan(final_presence_set "2_0mi.i" "2_0m.ii") 299132718Skan(final_presence_set "2_0mii." "2_0mi.i") 300132718Skan(final_presence_set "2_1mi.i" "2_1m.ii") 301132718Skan(final_presence_set "2_1mii." "2_1mi.i") 302132718Skan 303132718Skan(final_presence_set "2_0mm.i" "2_0m.mi") 304132718Skan(final_presence_set "2_0mmi." "2_0mm.i") 305132718Skan(final_presence_set "2_1mm.i" "2_1m.mi") 306132718Skan(final_presence_set "2_1mmi." "2_1mm.i") 307132718Skan 308132718Skan(final_presence_set "2_0mf.i" "2_0m.fi") 309132718Skan(final_presence_set "2_0mfi." "2_0mf.i") 310132718Skan(final_presence_set "2_1mf.i" "2_1m.fi") 311132718Skan(final_presence_set "2_1mfi." "2_1mf.i") 312132718Skan 313132718Skan(final_presence_set "2_0mm.f" "2_0m.mf") 314132718Skan(final_presence_set "2_0mmf." "2_0mm.f") 315132718Skan(final_presence_set "2_1mm.f" "2_1m.mf") 316132718Skan(final_presence_set "2_1mmf." "2_1mm.f") 317132718Skan 318132718Skan(final_presence_set "2_0bb.b" "2_0b.bb") 319132718Skan(final_presence_set "2_0bbb." "2_0bb.b") 320132718Skan(final_presence_set "2_1bb.b" "2_1b.bb") 321132718Skan(final_presence_set "2_1bbb." "2_1bb.b") 322132718Skan 323132718Skan(final_presence_set "2_0mb.b" "2_0m.bb") 324132718Skan(final_presence_set "2_0mbb." "2_0mb.b") 325132718Skan(final_presence_set "2_1mb.b" "2_1m.bb") 326132718Skan(final_presence_set "2_1mbb." "2_1mb.b") 327132718Skan 328132718Skan(final_presence_set "2_0mi.b" "2_0m.ib") 329132718Skan(final_presence_set "2_0mib." "2_0mi.b") 330132718Skan(final_presence_set "2_1mi.b" "2_1m.ib") 331132718Skan(final_presence_set "2_1mib." "2_1mi.b") 332132718Skan 333132718Skan(final_presence_set "2_0mm.b" "2_0m.mb") 334132718Skan(final_presence_set "2_0mmb." "2_0mm.b") 335132718Skan(final_presence_set "2_1mm.b" "2_1m.mb") 336132718Skan(final_presence_set "2_1mmb." "2_1mm.b") 337132718Skan 338132718Skan(final_presence_set "2_0mf.b" "2_0m.fb") 339132718Skan(final_presence_set "2_0mfb." "2_0mf.b") 340132718Skan(final_presence_set "2_1mf.b" "2_1m.fb") 341132718Skan(final_presence_set "2_1mfb." "2_1mf.b") 342132718Skan 343132718Skan(final_presence_set "2_0mlx." "2_0m.lx") 344132718Skan(final_presence_set "2_1mlx." "2_1m.lx") 345132718Skan 346132718Skan;; The following reflects the dual issue bundle types table. 347132718Skan;; We could place all possible combinations here because impossible 348132718Skan;; combinations would go away by the subsequent constrains. 349132718Skan(final_presence_set 350132718Skan "2_1m.lx" 351132718Skan "2_0mmi.,2_0mfi.,2_0mmf.,2_0mib.,2_0mmb.,2_0mfb.,2_0mlx.") 352132718Skan(final_presence_set "2_1b.bb" "2_0mii.,2_0mmi.,2_0mfi.,2_0mmf.,2_0mlx.") 353132718Skan(final_presence_set 354132718Skan "2_1m.ii,2_1m.mi,2_1m.fi,2_1m.mf,2_1m.bb,2_1m.ib,2_1m.mb,2_1m.fb" 355132718Skan "2_0mii.,2_0mmi.,2_0mfi.,2_0mmf.,2_0mib.,2_0mmb.,2_0mfb.,2_0mlx.") 356132718Skan 357132718Skan;; Ports/units (nb means nop.b insn issued into given port): 358132718Skan(define_cpu_unit 359132718Skan "2_um0, 2_um1, 2_um2, 2_um3, 2_ui0, 2_ui1, 2_uf0, 2_uf1,\ 360132718Skan 2_ub0, 2_ub1, 2_ub2, 2_unb0, 2_unb1, 2_unb2" "two") 361132718Skan 362132718Skan(exclusion_set "2_ub0" "2_unb0") 363132718Skan(exclusion_set "2_ub1" "2_unb1") 364132718Skan(exclusion_set "2_ub2" "2_unb2") 365132718Skan 366132718Skan;; The following rules are used to decrease number of alternatives. 367132718Skan;; They are consequences of Itanium2 microarchitecture. They also 368132718Skan;; describe the following rules mentioned in Itanium2 369132718Skan;; microarchitecture: rules mentioned in Itanium2 microarchitecture: 370132718Skan;; o "BBB/MBB: Always splits issue after either of these bundles". 371132718Skan;; o "MIB BBB: Split issue after the first bundle in this pair". 372132718Skan(exclusion_set 373132718Skan "2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb." 374132718Skan "2_1m.ii,2_1m.mi,2_1m.fi,2_1m.mf,2_1b.bb,2_1m.bb,\ 375132718Skan 2_1m.ib,2_1m.mb,2_1m.fb,2_1m.lx") 376132718Skan(exclusion_set "2_0m.ib,2_0mi.b,2_0mib." "2_1b.bb") 377132718Skan 378132718Skan;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the 379132718Skan;;; B-slot contains a nop.b or a brp instruction". 380132718Skan;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or 381132718Skan;;; nop.b, otherwise it disperses to B2". 382132718Skan(final_absence_set 383132718Skan "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\ 384132718Skan 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx" 385132718Skan "2_0mib. 2_ub2, 2_0mfb. 2_ub2, 2_0mmb. 2_ub2") 386132718Skan 387132718Skan;; This is necessary to start new processor cycle when we meet stop bit. 388132718Skan(define_cpu_unit "2_stop" "two") 389132718Skan(final_absence_set 390132718Skan "2_0m.ii,2_0mi.i,2_0mii.,2_0m.mi,2_0mm.i,2_0mmi.,2_0m.fi,2_0mf.i,2_0mfi.,\ 391132718Skan 2_0m.mf,2_0mm.f,2_0mmf.,2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb.,\ 392132718Skan 2_0m.ib,2_0mi.b,2_0mib.,2_0m.mb,2_0mm.b,2_0mmb.,2_0m.fb,2_0mf.b,2_0mfb.,\ 393132718Skan 2_0m.lx,2_0mlx., \ 394132718Skan 2_1m.ii,2_1mi.i,2_1mii.,2_1m.mi,2_1mm.i,2_1mmi.,2_1m.fi,2_1mf.i,2_1mfi.,\ 395132718Skan 2_1m.mf,2_1mm.f,2_1mmf.,2_1b.bb,2_1bb.b,2_1bbb.,2_1m.bb,2_1mb.b,2_1mbb.,\ 396132718Skan 2_1m.ib,2_1mi.b,2_1mib.,2_1m.mb,2_1mm.b,2_1mmb.,2_1m.fb,2_1mf.b,2_1mfb.,\ 397132718Skan 2_1m.lx,2_1mlx." 398132718Skan "2_stop") 399132718Skan 400132718Skan;; The issue logic can reorder M slot insns between different subtypes 401169689Skan;; but cannot reorder insn within the same subtypes. The following 402132718Skan;; constraint is enough to describe this. 403132718Skan(final_presence_set "2_um1" "2_um0") 404132718Skan(final_presence_set "2_um3" "2_um2") 405132718Skan 406132718Skan;; The insn in the 1st I slot of the two bundle issue group will issue 407132718Skan;; to I0. The second I slot insn will issue to I1. 408132718Skan(final_presence_set "2_ui1" "2_ui0") 409132718Skan 410132718Skan;; For exceptions of I insns: 411132718Skan(define_cpu_unit "2_only_ui0" "two") 412132718Skan(final_absence_set "2_only_ui0" "2_ui1") 413132718Skan 414132718Skan;; Insns 415132718Skan 416132718Skan(define_reservation "2_M0" 417132718Skan "(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\ 418132718Skan |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\ 419132718Skan |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\ 420132718Skan +(2_um0|2_um1|2_um2|2_um3)") 421132718Skan 422132718Skan(define_reservation "2_M1" 423132718Skan "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\ 424132718Skan |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\ 425132718Skan +(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)\ 426132718Skan +(2_um0|2_um1|2_um2|2_um3)") 427132718Skan 428132718Skan(define_reservation "2_M" "2_M0|2_M1") 429132718Skan 430132718Skan(define_reservation "2_M0_only_um0" 431132718Skan "(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\ 432132718Skan |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\ 433132718Skan |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\ 434132718Skan +2_um0") 435132718Skan 436132718Skan(define_reservation "2_M1_only_um0" 437132718Skan "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\ 438132718Skan |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\ 439132718Skan +(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)\ 440132718Skan +2_um0") 441132718Skan 442132718Skan(define_reservation "2_M_only_um0" "2_M0_only_um0|2_M1_only_um0") 443132718Skan 444132718Skan(define_reservation "2_M0_only_um2" 445132718Skan "(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\ 446132718Skan |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\ 447132718Skan |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\ 448132718Skan +2_um2") 449132718Skan 450132718Skan(define_reservation "2_M1_only_um2" 451132718Skan "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\ 452132718Skan |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\ 453132718Skan +(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)\ 454132718Skan +2_um2") 455132718Skan 456132718Skan(define_reservation "2_M_only_um2" "2_M0_only_um2|2_M1_only_um2") 457132718Skan 458132718Skan(define_reservation "2_M0_only_um23" 459132718Skan "(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\ 460132718Skan |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\ 461132718Skan |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\ 462132718Skan +(2_um2|2_um3)") 463132718Skan 464132718Skan(define_reservation "2_M1_only_um23" 465132718Skan "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\ 466132718Skan |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\ 467132718Skan +(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)\ 468132718Skan +(2_um2|2_um3)") 469132718Skan 470132718Skan(define_reservation "2_M_only_um23" "2_M0_only_um23|2_M1_only_um23") 471132718Skan 472132718Skan(define_reservation "2_M0_only_um01" 473132718Skan "(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\ 474132718Skan |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\ 475132718Skan |2_0mm.i|2_0mm.f|2_0mm.b|2_1mm.i|2_1mm.f|2_1mm.b)\ 476132718Skan +(2_um0|2_um1)") 477132718Skan 478132718Skan(define_reservation "2_M1_only_um01" 479132718Skan "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\ 480132718Skan |2_0mib.+2_unb0|2_0mfb.+2_unb0|2_0mmb.+2_unb0)\ 481132718Skan +(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)\ 482132718Skan +(2_um0|2_um1)") 483132718Skan 484132718Skan(define_reservation "2_M_only_um01" "2_M0_only_um01|2_M1_only_um01") 485132718Skan 486132718Skan;; I instruction is dispersed to the lowest numbered I unit 487169689Skan;; not already in use. Remember about possible splitting. 488132718Skan(define_reservation "2_I0" 489132718Skan "2_0mi.i+2_ui0|2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0\ 490132718Skan |2_0mfi.+2_ui0|2_0mi.b+2_ui0|(2_1mi.i|2_1mi.b)+(2_ui0|2_ui1)\ 491132718Skan |(2_1mii.|2_1mmi.|2_1mfi.)+(2_ui0|2_ui1)") 492132718Skan 493132718Skan(define_reservation "2_I1" 494132718Skan "2_0m.ii+(2_um0|2_um1|2_um2|2_um3)+2_0mi.i+2_ui0\ 495132718Skan |2_0mm.i+(2_um0|2_um1|2_um2|2_um3)+2_0mmi.+2_ui0\ 496132718Skan |2_0mf.i+2_uf0+2_0mfi.+2_ui0\ 497132718Skan |2_0m.ib+(2_um0|2_um1|2_um2|2_um3)+2_0mi.b+2_ui0\ 498132718Skan |(2_1m.ii+2_1mi.i|2_1m.ib+2_1mi.b)+(2_um0|2_um1|2_um2|2_um3)+(2_ui0|2_ui1)\ 499132718Skan |2_1mm.i+(2_um0|2_um1|2_um2|2_um3)+2_1mmi.+(2_ui0|2_ui1)\ 500132718Skan |2_1mf.i+2_uf1+2_1mfi.+(2_ui0|2_ui1)") 501132718Skan 502132718Skan(define_reservation "2_I" "2_I0|2_I1") 503132718Skan 504132718Skan;; "An F slot in the 1st bundle disperses to F0". 505132718Skan;; "An F slot in the 2st bundle disperses to F1". 506132718Skan(define_reservation "2_F0" 507132718Skan "2_0mf.i+2_uf0|2_0mmf.+2_uf0|2_0mf.b+2_uf0\ 508132718Skan |2_1mf.i+2_uf1|2_1mmf.+2_uf1|2_1mf.b+2_uf1") 509132718Skan 510132718Skan(define_reservation "2_F1" 511132718Skan "(2_0m.fi+2_0mf.i|2_0mm.f+2_0mmf.|2_0m.fb+2_0mf.b)\ 512132718Skan +(2_um0|2_um1|2_um2|2_um3)+2_uf0\ 513132718Skan |(2_1m.fi+2_1mf.i|2_1mm.f+2_1mmf.|2_1m.fb+2_1mf.b)\ 514132718Skan +(2_um0|2_um1|2_um2|2_um3)+2_uf1") 515132718Skan 516132718Skan(define_reservation "2_F2" 517132718Skan "(2_0m.mf+2_0mm.f+2_0mmf.+2_uf0|2_1m.mf+2_1mm.f+2_1mmf.+2_uf1)\ 518132718Skan +(2_um0|2_um1|2_um2|2_um3)+(2_um0|2_um1|2_um2|2_um3)\ 519132718Skan |(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0\ 520132718Skan |2_0mmf.+(2_um0|2_um1|2_um2|2_um3)\ 521132718Skan |2_0mib.+2_unb0|2_0mmb.+2_unb0|2_0mfb.+2_unb0)\ 522132718Skan +(2_1m.fi+2_1mf.i|2_1m.fb+2_1mf.b)+(2_um0|2_um1|2_um2|2_um3)+2_uf1") 523132718Skan 524132718Skan(define_reservation "2_F" "2_F0|2_F1|2_F2") 525132718Skan 526132718Skan;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B 527132718Skan;;; unit. That is, a B slot in 1st position is dispersed to B0. In the 528132718Skan;;; 2nd position it is dispersed to B2". 529132718Skan(define_reservation "2_NB" 530132718Skan "2_0b.bb+2_unb0|2_0bb.b+2_unb1|2_0bbb.+2_unb2\ 531132718Skan |2_0mb.b+2_unb1|2_0mbb.+2_unb2|2_0mib.+2_unb0\ 532132718Skan |2_0mmb.+2_unb0|2_0mfb.+2_unb0\ 533132718Skan |2_1b.bb+2_unb0|2_1bb.b+2_unb1 534132718Skan |2_1bbb.+2_unb2|2_1mb.b+2_unb1|2_1mbb.+2_unb2\ 535132718Skan |2_1mib.+2_unb0|2_1mmb.+2_unb0|2_1mfb.+2_unb0") 536132718Skan 537132718Skan(define_reservation "2_B0" 538132718Skan "2_0b.bb+2_ub0|2_0bb.b+2_ub1|2_0bbb.+2_ub2\ 539132718Skan |2_0mb.b+2_ub1|2_0mbb.+2_ub2|2_0mib.+2_ub2\ 540132718Skan |2_0mfb.+2_ub2|2_1b.bb+2_ub0|2_1bb.b+2_ub1\ 541132718Skan |2_1bbb.+2_ub2|2_1mb.b+2_ub1\ 542132718Skan |2_1mib.+2_ub2|2_1mmb.+2_ub2|2_1mfb.+2_ub2") 543132718Skan 544132718Skan(define_reservation "2_B1" 545132718Skan "2_0m.bb+(2_um0|2_um1|2_um2|2_um3)+2_0mb.b+2_ub1\ 546132718Skan |2_0mi.b+2_ui0+2_0mib.+2_ub2\ 547132718Skan |2_0mm.b+(2_um0|2_um1|2_um2|2_um3)+2_0mmb.+2_ub2\ 548132718Skan |2_0mf.b+2_uf0+2_0mfb.+2_ub2\ 549132718Skan |(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0)\ 550132718Skan +2_1b.bb+2_ub0\ 551132718Skan |2_1m.bb+(2_um0|2_um1|2_um2|2_um3)+2_1mb.b+2_ub1\ 552132718Skan |2_1mi.b+(2_ui0|2_ui1)+2_1mib.+2_ub2\ 553132718Skan |2_1mm.b+(2_um0|2_um1|2_um2|2_um3)+2_1mmb.+2_ub2\ 554132718Skan |2_1mf.b+2_uf1+2_1mfb.+2_ub2") 555132718Skan 556132718Skan(define_reservation "2_B" "2_B0|2_B1") 557132718Skan 558132718Skan;; MLX bunlde uses ports equivalent to MFI bundles. 559132718Skan 560132718Skan;; For the MLI template, the I slot insn is always assigned to port I0 561132718Skan;; if it is in the first bundle or it is assigned to port I1 if it is in 562132718Skan;; the second bundle. 563132718Skan(define_reservation "2_L0" "2_0mlx.+2_ui0+2_uf0|2_1mlx.+2_ui1+2_uf1") 564132718Skan 565132718Skan(define_reservation "2_L1" 566132718Skan "2_0m.lx+(2_um0|2_um1|2_um2|2_um3)+2_0mlx.+2_ui0+2_uf0\ 567132718Skan |2_1m.lx+(2_um0|2_um1|2_um2|2_um3)+2_1mlx.+2_ui1+2_uf1") 568132718Skan 569132718Skan(define_reservation "2_L2" 570132718Skan "(2_0mii.+(2_ui0|2_ui1)|2_0mmi.+2_ui0|2_0mfi.+2_ui0|2_0mmf.+2_uf0\ 571132718Skan |2_0mib.+2_unb0|2_0mmb.+2_unb0|2_0mfb.+2_unb0) 572132718Skan +2_1m.lx+(2_um0|2_um1|2_um2|2_um3)+2_1mlx.+2_ui1+2_uf1") 573132718Skan 574132718Skan(define_reservation "2_L" "2_L0|2_L1|2_L2") 575132718Skan 576132718Skan;; Should we describe that A insn in I slot can be issued into M 577132718Skan;; ports? I think it is not necessary because of multipass 578132718Skan;; scheduling. For example, the multipass scheduling could use 579132718Skan;; MMI-MMI instead of MII-MII where the two last I slots contain A 580132718Skan;; insns (even if the case is complicated by use-def conflicts). 581132718Skan;; 582132718Skan;; In any case we could describe it as 583132718Skan;; (define_cpu_unit "2_ui1_0pres,2_ui1_1pres,2_ui1_2pres,2_ui1_3pres" "two") 584132718Skan;; (final_presence_set "2_ui1_0pres,2_ui1_1pres,2_ui1_2pres,2_ui1_3pres" 585132718Skan;; "2_ui1") 586132718Skan;; (define_reservation "b_A" 587132718Skan;; "b_M|b_I\ 588132718Skan;; |(2_1mi.i|2_1mii.|2_1mmi.|2_1mfi.|2_1mi.b)+(2_um0|2_um1|2_um2|2_um3)\ 589132718Skan;; +(2_ui1_0pres|2_ui1_1pres|2_ui1_2pres|2_ui1_3pres)") 590132718Skan 591132718Skan(define_reservation "2_A" "2_M|2_I") 592132718Skan 593132718Skan;; We assume that there is no insn issued on the same cycle as the 594132718Skan;; unknown insn. 595132718Skan(define_cpu_unit "2_empty" "two") 596132718Skan(exclusion_set "2_empty" 597132718Skan "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,\ 598132718Skan 2_0m.lx") 599132718Skan 600132718Skan(define_cpu_unit 601132718Skan "2_0m_bs, 2_0mi_bs, 2_0mm_bs, 2_0mf_bs, 2_0b_bs, 2_0bb_bs, 2_0mb_bs" 602132718Skan "two") 603132718Skan(define_cpu_unit 604132718Skan "2_1m_bs, 2_1mi_bs, 2_1mm_bs, 2_1mf_bs, 2_1b_bs, 2_1bb_bs, 2_1mb_bs" 605132718Skan "two") 606132718Skan 607132718Skan(define_cpu_unit "2_m_cont, 2_mi_cont, 2_mm_cont, 2_mf_cont, 2_mb_cont,\ 608132718Skan 2_b_cont, 2_bb_cont" "two") 609132718Skan 610132718Skan;; For stop in the middle of the bundles. 611132718Skan(define_cpu_unit "2_m_stop, 2_m0_stop, 2_m1_stop, 2_0mmi_cont" "two") 612132718Skan(define_cpu_unit "2_mi_stop, 2_mi0_stop, 2_mi1_stop, 2_0mii_cont" "two") 613132718Skan 614132718Skan(final_presence_set "2_0m_bs" 615132718Skan "2_0m.ii, 2_0m.mi, 2_0m.mf, 2_0m.fi, 2_0m.bb,\ 616132718Skan 2_0m.ib, 2_0m.fb, 2_0m.mb, 2_0m.lx") 617132718Skan(final_presence_set "2_1m_bs" 618132718Skan "2_1m.ii, 2_1m.mi, 2_1m.mf, 2_1m.fi, 2_1m.bb,\ 619132718Skan 2_1m.ib, 2_1m.fb, 2_1m.mb, 2_1m.lx") 620132718Skan(final_presence_set "2_0mi_bs" "2_0mi.i, 2_0mi.i") 621132718Skan(final_presence_set "2_1mi_bs" "2_1mi.i, 2_1mi.i") 622132718Skan(final_presence_set "2_0mm_bs" "2_0mm.i, 2_0mm.f, 2_0mm.b") 623132718Skan(final_presence_set "2_1mm_bs" "2_1mm.i, 2_1mm.f, 2_1mm.b") 624132718Skan(final_presence_set "2_0mf_bs" "2_0mf.i, 2_0mf.b") 625132718Skan(final_presence_set "2_1mf_bs" "2_1mf.i, 2_1mf.b") 626132718Skan(final_presence_set "2_0b_bs" "2_0b.bb") 627132718Skan(final_presence_set "2_1b_bs" "2_1b.bb") 628132718Skan(final_presence_set "2_0bb_bs" "2_0bb.b") 629132718Skan(final_presence_set "2_1bb_bs" "2_1bb.b") 630132718Skan(final_presence_set "2_0mb_bs" "2_0mb.b") 631132718Skan(final_presence_set "2_1mb_bs" "2_1mb.b") 632132718Skan 633132718Skan(exclusion_set "2_0m_bs" 634132718Skan "2_0mi.i, 2_0mm.i, 2_0mm.f, 2_0mf.i, 2_0mb.b,\ 635132718Skan 2_0mi.b, 2_0mf.b, 2_0mm.b, 2_0mlx., 2_m0_stop") 636132718Skan(exclusion_set "2_1m_bs" 637132718Skan "2_1mi.i, 2_1mm.i, 2_1mm.f, 2_1mf.i, 2_1mb.b,\ 638132718Skan 2_1mi.b, 2_1mf.b, 2_1mm.b, 2_1mlx., 2_m1_stop") 639132718Skan(exclusion_set "2_0mi_bs" "2_0mii., 2_0mib., 2_mi0_stop") 640132718Skan(exclusion_set "2_1mi_bs" "2_1mii., 2_1mib., 2_mi1_stop") 641132718Skan(exclusion_set "2_0mm_bs" "2_0mmi., 2_0mmf., 2_0mmb.") 642132718Skan(exclusion_set "2_1mm_bs" "2_1mmi., 2_1mmf., 2_1mmb.") 643132718Skan(exclusion_set "2_0mf_bs" "2_0mfi., 2_0mfb.") 644132718Skan(exclusion_set "2_1mf_bs" "2_1mfi., 2_1mfb.") 645132718Skan(exclusion_set "2_0b_bs" "2_0bb.b") 646132718Skan(exclusion_set "2_1b_bs" "2_1bb.b") 647132718Skan(exclusion_set "2_0bb_bs" "2_0bbb.") 648132718Skan(exclusion_set "2_1bb_bs" "2_1bbb.") 649132718Skan(exclusion_set "2_0mb_bs" "2_0mbb.") 650132718Skan(exclusion_set "2_1mb_bs" "2_1mbb.") 651132718Skan 652132718Skan(exclusion_set 653132718Skan "2_0m_bs, 2_0mi_bs, 2_0mm_bs, 2_0mf_bs, 2_0b_bs, 2_0bb_bs, 2_0mb_bs, 654132718Skan 2_1m_bs, 2_1mi_bs, 2_1mm_bs, 2_1mf_bs, 2_1b_bs, 2_1bb_bs, 2_1mb_bs" 655132718Skan "2_stop") 656132718Skan 657132718Skan(final_presence_set 658132718Skan "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0mb.b,\ 659132718Skan 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx." 660132718Skan "2_m_cont") 661132718Skan(final_presence_set "2_0mii., 2_0mib." "2_mi_cont") 662132718Skan(final_presence_set "2_0mmi., 2_0mmf., 2_0mmb." "2_mm_cont") 663132718Skan(final_presence_set "2_0mfi., 2_0mfb." "2_mf_cont") 664132718Skan(final_presence_set "2_0bb.b" "2_b_cont") 665132718Skan(final_presence_set "2_0bbb." "2_bb_cont") 666132718Skan(final_presence_set "2_0mbb." "2_mb_cont") 667132718Skan 668132718Skan(exclusion_set 669132718Skan "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\ 670132718Skan 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx" 671132718Skan "2_m_cont, 2_mi_cont, 2_mm_cont, 2_mf_cont,\ 672132718Skan 2_mb_cont, 2_b_cont, 2_bb_cont") 673132718Skan 674132718Skan(exclusion_set "2_empty" 675132718Skan "2_m_cont,2_mi_cont,2_mm_cont,2_mf_cont,\ 676132718Skan 2_mb_cont,2_b_cont,2_bb_cont") 677132718Skan 678132718Skan;; For m;mi bundle 679132718Skan(final_presence_set "2_m0_stop" "2_0m.mi") 680132718Skan(final_presence_set "2_0mm.i" "2_0mmi_cont") 681132718Skan(exclusion_set "2_0mmi_cont" 682132718Skan "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\ 683132718Skan 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx") 684132718Skan(exclusion_set "2_m0_stop" "2_0mm.i") 685132718Skan(final_presence_set "2_m1_stop" "2_1m.mi") 686132718Skan(exclusion_set "2_m1_stop" "2_1mm.i") 687132718Skan(final_presence_set "2_m_stop" "2_m0_stop, 2_m1_stop") 688132718Skan 689132718Skan;; For mi;i bundle 690132718Skan(final_presence_set "2_mi0_stop" "2_0mi.i") 691132718Skan(final_presence_set "2_0mii." "2_0mii_cont") 692132718Skan(exclusion_set "2_0mii_cont" 693132718Skan "2_0m.ii, 2_0m.mi, 2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb,\ 694132718Skan 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx") 695132718Skan(exclusion_set "2_mi0_stop" "2_0mii.") 696132718Skan(final_presence_set "2_mi1_stop" "2_1mi.i") 697132718Skan(exclusion_set "2_mi1_stop" "2_1mii.") 698132718Skan(final_presence_set "2_mi_stop" "2_mi0_stop, 2_mi1_stop") 699132718Skan 700132718Skan(final_absence_set 701132718Skan "2_0m.ii,2_0mi.i,2_0mii.,2_0m.mi,2_0mm.i,2_0mmi.,2_0m.fi,2_0mf.i,2_0mfi.,\ 702132718Skan 2_0m.mf,2_0mm.f,2_0mmf.,2_0b.bb,2_0bb.b,2_0bbb.,2_0m.bb,2_0mb.b,2_0mbb.,\ 703132718Skan 2_0m.ib,2_0mi.b,2_0mib.,2_0m.mb,2_0mm.b,2_0mmb.,2_0m.fb,2_0mf.b,2_0mfb.,\ 704132718Skan 2_0m.lx,2_0mlx., \ 705132718Skan 2_1m.ii,2_1mi.i,2_1mii.,2_1m.mi,2_1mm.i,2_1mmi.,2_1m.fi,2_1mf.i,2_1mfi.,\ 706132718Skan 2_1m.mf,2_1mm.f,2_1mmf.,2_1b.bb,2_1bb.b,2_1bbb.,2_1m.bb,2_1mb.b,2_1mbb.,\ 707132718Skan 2_1m.ib,2_1mi.b,2_1mib.,2_1m.mb,2_1mm.b,2_1mmb.,2_1m.fb,2_1mf.b,2_1mfb.,\ 708132718Skan 2_1m.lx,2_1mlx." 709132718Skan "2_m0_stop,2_m1_stop,2_mi0_stop,2_mi1_stop") 710132718Skan 711132718Skan(define_insn_reservation "2_stop_bit" 0 712132718Skan (and (and (eq_attr "cpu" "itanium2") 713132718Skan (eq_attr "itanium_class" "stop_bit")) 714132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 715132718Skan "2_stop|2_m0_stop|2_m1_stop|2_mi0_stop|2_mi1_stop") 716132718Skan 717132718Skan(define_insn_reservation "2_br" 0 718132718Skan (and (and (eq_attr "cpu" "itanium2") 719132718Skan (eq_attr "itanium_class" "br")) 720132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_B") 721132718Skan(define_insn_reservation "2_scall" 0 722132718Skan (and (and (eq_attr "cpu" "itanium2") 723132718Skan (eq_attr "itanium_class" "scall")) 724132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_B") 725132718Skan(define_insn_reservation "2_fcmp" 2 726132718Skan (and (and (eq_attr "cpu" "itanium2") 727132718Skan (eq_attr "itanium_class" "fcmp")) 728132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_F") 729132718Skan(define_insn_reservation "2_fcvtfx" 4 730132718Skan (and (and (eq_attr "cpu" "itanium2") 731132718Skan (eq_attr "itanium_class" "fcvtfx")) 732132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_F") 733132718Skan(define_insn_reservation "2_fld" 6 734169689Skan (and (and (and (and (eq_attr "cpu" "itanium2") 735169689Skan (eq_attr "itanium_class" "fld")) 736169689Skan (eq_attr "data_speculative" "no")) 737169689Skan (eq_attr "check_load" "no")) 738169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 739169689Skan "2_M") 740169689Skan(define_insn_reservation "2_flda" 6 741169689Skan (and (and (and (eq_attr "cpu" "itanium2") 742169689Skan (eq_attr "itanium_class" "fld")) 743169689Skan (eq_attr "data_speculative" "yes")) 744169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 745169689Skan "2_M_only_um01") 746169689Skan(define_insn_reservation "2_fldc" 0 747169689Skan (and (and (and (eq_attr "cpu" "itanium2") 748169689Skan (eq_attr "itanium_class" "fld")) 749169689Skan (eq_attr "check_load" "yes")) 750169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 751169689Skan "2_M_only_um01") 752169689Skan 753169689Skan(define_insn_reservation "2_fldp" 6 754169689Skan (and (and (and (eq_attr "cpu" "itanium2") 755169689Skan (eq_attr "itanium_class" "fldp")) 756169689Skan (eq_attr "check_load" "no")) 757169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 758169689Skan "2_M_only_um01") 759169689Skan(define_insn_reservation "2_fldpc" 0 760169689Skan (and (and (and (eq_attr "cpu" "itanium2") 761169689Skan (eq_attr "itanium_class" "fldp")) 762169689Skan (eq_attr "check_load" "yes")) 763169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 764169689Skan "2_M_only_um01") 765169689Skan 766132718Skan(define_insn_reservation "2_fmac" 4 767132718Skan (and (and (eq_attr "cpu" "itanium2") 768132718Skan (eq_attr "itanium_class" "fmac")) 769132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_F") 770132718Skan(define_insn_reservation "2_fmisc" 4 771132718Skan (and (and (eq_attr "cpu" "itanium2") 772132718Skan (eq_attr "itanium_class" "fmisc")) 773132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_F") 774132718Skan 775132718Skan;; There is only one insn `mov = ar.bsp' for frar_i: 776132718Skan;; Latency time ??? 777132718Skan(define_insn_reservation "2_frar_i" 13 778132718Skan (and (and (eq_attr "cpu" "itanium2") 779132718Skan (eq_attr "itanium_class" "frar_i")) 780132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 781132718Skan "2_I+2_only_ui0") 782132718Skan;; There is only two insns `mov = ar.unat' or `mov = ar.ccv' for frar_m: 783132718Skan;; Latency time ??? 784132718Skan(define_insn_reservation "2_frar_m" 6 785132718Skan (and (and (eq_attr "cpu" "itanium2") 786132718Skan (eq_attr "itanium_class" "frar_m")) 787132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 788132718Skan "2_M_only_um2") 789132718Skan(define_insn_reservation "2_frbr" 2 790132718Skan (and (and (eq_attr "cpu" "itanium2") 791132718Skan (eq_attr "itanium_class" "frbr")) 792132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 793132718Skan "2_I+2_only_ui0") 794132718Skan(define_insn_reservation "2_frfr" 5 795132718Skan (and (and (eq_attr "cpu" "itanium2") 796132718Skan (eq_attr "itanium_class" "frfr")) 797132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 798132718Skan "2_M_only_um2") 799132718Skan(define_insn_reservation "2_frpr" 2 800132718Skan (and (and (eq_attr "cpu" "itanium2") 801132718Skan (eq_attr "itanium_class" "frpr")) 802132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 803132718Skan "2_I+2_only_ui0") 804132718Skan 805132718Skan(define_insn_reservation "2_ialu" 1 806132718Skan (and (and (eq_attr "cpu" "itanium2") 807132718Skan (eq_attr "itanium_class" "ialu")) 808132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 809132718Skan "2_A") 810132718Skan(define_insn_reservation "2_icmp" 1 811132718Skan (and (and (eq_attr "cpu" "itanium2") 812132718Skan (eq_attr "itanium_class" "icmp")) 813132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_A") 814132718Skan(define_insn_reservation "2_ilog" 1 815132718Skan (and (and (eq_attr "cpu" "itanium2") 816132718Skan (eq_attr "itanium_class" "ilog")) 817132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_A") 818169689Skan(define_insn_reservation "2_mmalua" 2 819169689Skan (and (and (eq_attr "cpu" "itanium2") 820169689Skan (eq_attr "itanium_class" "mmalua")) 821169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_A") 822132718Skan;; Latency time ??? 823132718Skan(define_insn_reservation "2_ishf" 1 824132718Skan (and (and (eq_attr "cpu" "itanium2") 825132718Skan (eq_attr "itanium_class" "ishf")) 826132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 827132718Skan "2_I+2_only_ui0") 828169689Skan 829132718Skan(define_insn_reservation "2_ld" 1 830169689Skan (and (and (and (eq_attr "cpu" "itanium2") 831169689Skan (eq_attr "itanium_class" "ld")) 832169689Skan (eq_attr "check_load" "no")) 833169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 834169689Skan "2_M_only_um01") 835169689Skan(define_insn_reservation "2_ldc" 0 836132718Skan (and (and (eq_attr "cpu" "itanium2") 837169689Skan (eq_attr "check_load" "yes")) 838132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 839132718Skan "2_M_only_um01") 840169689Skan 841132718Skan(define_insn_reservation "2_long_i" 1 842132718Skan (and (and (eq_attr "cpu" "itanium2") 843132718Skan (eq_attr "itanium_class" "long_i")) 844132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_L") 845132718Skan 846132718Skan(define_insn_reservation "2_mmmul" 2 847132718Skan (and (and (eq_attr "cpu" "itanium2") 848132718Skan (eq_attr "itanium_class" "mmmul")) 849132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 850132718Skan "2_I+2_only_ui0") 851132718Skan;; Latency time ??? 852132718Skan(define_insn_reservation "2_mmshf" 2 853132718Skan (and (and (eq_attr "cpu" "itanium2") 854132718Skan (eq_attr "itanium_class" "mmshf")) 855132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_I") 856132718Skan;; Latency time ??? 857132718Skan(define_insn_reservation "2_mmshfi" 1 858132718Skan (and (and (eq_attr "cpu" "itanium2") 859132718Skan (eq_attr "itanium_class" "mmshfi")) 860132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_I") 861132718Skan 862132718Skan;; Now we have only one insn (flushrs) of such class. We assume that flushrs 863132718Skan;; is the 1st syllable of the bundle after stop bit. 864132718Skan(define_insn_reservation "2_rse_m" 0 865132718Skan (and (and (eq_attr "cpu" "itanium2") 866132718Skan (eq_attr "itanium_class" "rse_m")) 867132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 868132718Skan "(2_0m.ii|2_0m.mi|2_0m.fi|2_0m.mf|2_0m.bb\ 869132718Skan |2_0m.ib|2_0m.mb|2_0m.fb|2_0m.lx)+2_um0") 870132718Skan(define_insn_reservation "2_sem" 0 871132718Skan (and (and (eq_attr "cpu" "itanium2") 872132718Skan (eq_attr "itanium_class" "sem")) 873132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 874132718Skan "2_M_only_um23") 875132718Skan 876132718Skan(define_insn_reservation "2_stf" 1 877132718Skan (and (and (eq_attr "cpu" "itanium2") 878132718Skan (eq_attr "itanium_class" "stf")) 879132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 880132718Skan "2_M_only_um23") 881132718Skan(define_insn_reservation "2_st" 1 882132718Skan (and (and (eq_attr "cpu" "itanium2") 883132718Skan (eq_attr "itanium_class" "st")) 884132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 885132718Skan "2_M_only_um23") 886132718Skan(define_insn_reservation "2_syst_m0" 0 887132718Skan (and (and (eq_attr "cpu" "itanium2") 888132718Skan (eq_attr "itanium_class" "syst_m0")) 889132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 890132718Skan "2_M_only_um2") 891132718Skan(define_insn_reservation "2_syst_m" 0 892132718Skan (and (and (eq_attr "cpu" "itanium2") 893132718Skan (eq_attr "itanium_class" "syst_m")) 894132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 895132718Skan "2_M_only_um0") 896132718Skan;; Reservation??? 897132718Skan(define_insn_reservation "2_tbit" 1 898132718Skan (and (and (eq_attr "cpu" "itanium2") 899132718Skan (eq_attr "itanium_class" "tbit")) 900132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 901132718Skan "2_I+2_only_ui0") 902132718Skan 903132718Skan;; There is only ony insn `mov ar.pfs =' for toar_i: 904132718Skan(define_insn_reservation "2_toar_i" 0 905132718Skan (and (and (eq_attr "cpu" "itanium2") 906132718Skan (eq_attr "itanium_class" "toar_i")) 907132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 908132718Skan "2_I+2_only_ui0") 909132718Skan;; There are only ony 2 insns `mov ar.ccv =' and `mov ar.unat =' for toar_m: 910132718Skan;; Latency time ??? 911132718Skan(define_insn_reservation "2_toar_m" 5 912132718Skan (and (and (eq_attr "cpu" "itanium2") 913132718Skan (eq_attr "itanium_class" "toar_m")) 914132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 915132718Skan "2_M_only_um2") 916132718Skan;; Latency time ??? 917132718Skan(define_insn_reservation "2_tobr" 1 918132718Skan (and (and (eq_attr "cpu" "itanium2") 919132718Skan (eq_attr "itanium_class" "tobr")) 920132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 921132718Skan "2_I+2_only_ui0") 922132718Skan(define_insn_reservation "2_tofr" 5 923132718Skan (and (and (eq_attr "cpu" "itanium2") 924132718Skan (eq_attr "itanium_class" "tofr")) 925132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 926132718Skan "2_M_only_um23") 927132718Skan;; Latency time ??? 928132718Skan(define_insn_reservation "2_topr" 1 929132718Skan (and (and (eq_attr "cpu" "itanium2") 930132718Skan (eq_attr "itanium_class" "topr")) 931132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 932132718Skan "2_I+2_only_ui0") 933132718Skan 934132718Skan(define_insn_reservation "2_xmpy" 4 935132718Skan (and (and (eq_attr "cpu" "itanium2") 936132718Skan (eq_attr "itanium_class" "xmpy")) 937132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_F") 938132718Skan;; Latency time ??? 939132718Skan(define_insn_reservation "2_xtd" 1 940132718Skan (and (and (eq_attr "cpu" "itanium2") 941132718Skan (eq_attr "itanium_class" "xtd")) 942132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_I") 943132718Skan 944169689Skan(define_insn_reservation "2_chk_s_i" 0 945132718Skan (and (and (eq_attr "cpu" "itanium2") 946169689Skan (eq_attr "itanium_class" "chk_s_i")) 947132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 948132718Skan "2_I|2_M_only_um23") 949169689Skan(define_insn_reservation "2_chk_s_f" 0 950169689Skan (and (and (eq_attr "cpu" "itanium2") 951169689Skan (eq_attr "itanium_class" "chk_s_f")) 952169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 953169689Skan "2_M_only_um23") 954169689Skan(define_insn_reservation "2_chk_a" 0 955169689Skan (and (and (eq_attr "cpu" "itanium2") 956169689Skan (eq_attr "itanium_class" "chk_a")) 957169689Skan (eq (symbol_ref "bundling_p") (const_int 0))) 958169689Skan "2_M_only_um01") 959169689Skan 960132718Skan(define_insn_reservation "2_lfetch" 0 961132718Skan (and (and (eq_attr "cpu" "itanium2") 962132718Skan (eq_attr "itanium_class" "lfetch")) 963132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 964132718Skan "2_M_only_um01") 965132718Skan 966132718Skan(define_insn_reservation "2_nop_m" 0 967132718Skan (and (and (eq_attr "cpu" "itanium2") 968132718Skan (eq_attr "itanium_class" "nop_m")) 969132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_M0") 970132718Skan(define_insn_reservation "2_nop_b" 0 971132718Skan (and (and (eq_attr "cpu" "itanium2") 972132718Skan (eq_attr "itanium_class" "nop_b")) 973132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_NB") 974132718Skan(define_insn_reservation "2_nop_i" 0 975132718Skan (and (and (eq_attr "cpu" "itanium2") 976132718Skan (eq_attr "itanium_class" "nop_i")) 977132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_I0") 978132718Skan(define_insn_reservation "2_nop_f" 0 979132718Skan (and (and (eq_attr "cpu" "itanium2") 980132718Skan (eq_attr "itanium_class" "nop_f")) 981132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_F0") 982132718Skan(define_insn_reservation "2_nop_x" 0 983132718Skan (and (and (eq_attr "cpu" "itanium2") 984132718Skan (eq_attr "itanium_class" "nop_x")) 985132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_L0") 986132718Skan 987132718Skan(define_insn_reservation "2_unknown" 1 988132718Skan (and (and (eq_attr "cpu" "itanium2") 989132718Skan (eq_attr "itanium_class" "unknown")) 990132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "2_empty") 991132718Skan 992132718Skan(define_insn_reservation "2_nop" 0 993132718Skan (and (and (eq_attr "cpu" "itanium2") 994132718Skan (eq_attr "itanium_class" "nop")) 995132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 996132718Skan "2_M0|2_NB|2_I0|2_F0") 997132718Skan 998132718Skan(define_insn_reservation "2_ignore" 0 999132718Skan (and (and (eq_attr "cpu" "itanium2") 1000132718Skan (eq_attr "itanium_class" "ignore")) 1001132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) "nothing") 1002132718Skan 1003132718Skan(define_cpu_unit "2_m_cont_only, 2_b_cont_only" "two") 1004132718Skan(define_cpu_unit "2_mi_cont_only, 2_mm_cont_only, 2_mf_cont_only" "two") 1005132718Skan(define_cpu_unit "2_mb_cont_only, 2_bb_cont_only" "two") 1006132718Skan 1007132718Skan(final_presence_set "2_m_cont_only" "2_m_cont") 1008132718Skan(exclusion_set "2_m_cont_only" 1009132718Skan "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0mb.b,\ 1010132718Skan 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.") 1011132718Skan 1012132718Skan(final_presence_set "2_b_cont_only" "2_b_cont") 1013132718Skan(exclusion_set "2_b_cont_only" "2_0bb.b") 1014132718Skan 1015132718Skan(final_presence_set "2_mi_cont_only" "2_mi_cont") 1016132718Skan(exclusion_set "2_mi_cont_only" "2_0mii., 2_0mib.") 1017132718Skan 1018132718Skan(final_presence_set "2_mm_cont_only" "2_mm_cont") 1019132718Skan(exclusion_set "2_mm_cont_only" "2_0mmi., 2_0mmf., 2_0mmb.") 1020132718Skan 1021132718Skan(final_presence_set "2_mf_cont_only" "2_mf_cont") 1022132718Skan(exclusion_set "2_mf_cont_only" "2_0mfi., 2_0mfb.") 1023132718Skan 1024132718Skan(final_presence_set "2_mb_cont_only" "2_mb_cont") 1025132718Skan(exclusion_set "2_mb_cont_only" "2_0mbb.") 1026132718Skan 1027132718Skan(final_presence_set "2_bb_cont_only" "2_bb_cont") 1028132718Skan(exclusion_set "2_bb_cont_only" "2_0bbb.") 1029132718Skan 1030132718Skan(define_insn_reservation "2_pre_cycle" 0 1031132718Skan (and (and (eq_attr "cpu" "itanium2") 1032132718Skan (eq_attr "itanium_class" "pre_cycle")) 1033132718Skan (eq (symbol_ref "bundling_p") (const_int 0))) 1034132718Skan "nothing") 1035132718Skan 1036132718Skan;;(define_insn_reservation "2_pre_cycle" 0 1037132718Skan;; (and (and (eq_attr "cpu" "itanium2") 1038132718Skan;; (eq_attr "itanium_class" "pre_cycle")) 1039132718Skan;; (eq (symbol_ref "bundling_p") (const_int 0))) 1040132718Skan;; "(2_0m_bs, 2_m_cont) \ 1041132718Skan;; | (2_0mi_bs, (2_mi_cont|nothing)) \ 1042132718Skan;; | (2_0mm_bs, 2_mm_cont) \ 1043132718Skan;; | (2_0mf_bs, (2_mf_cont|nothing)) \ 1044132718Skan;; | (2_0b_bs, (2_b_cont|nothing)) \ 1045132718Skan;; | (2_0bb_bs, (2_bb_cont|nothing)) \ 1046132718Skan;; | (2_0mb_bs, (2_mb_cont|nothing)) \ 1047132718Skan;; | (2_1m_bs, 2_m_cont) \ 1048132718Skan;; | (2_1mi_bs, (2_mi_cont|nothing)) \ 1049132718Skan;; | (2_1mm_bs, 2_mm_cont) \ 1050132718Skan;; | (2_1mf_bs, (2_mf_cont|nothing)) \ 1051132718Skan;; | (2_1b_bs, (2_b_cont|nothing)) \ 1052132718Skan;; | (2_1bb_bs, (2_bb_cont|nothing)) \ 1053132718Skan;; | (2_1mb_bs, (2_mb_cont|nothing)) \ 1054132718Skan;; | (2_m_cont_only, (2_m_cont|nothing)) \ 1055132718Skan;; | (2_b_cont_only, (2_b_cont|nothing)) \ 1056132718Skan;; | (2_mi_cont_only, (2_mi_cont|nothing)) \ 1057132718Skan;; | (2_mm_cont_only, (2_mm_cont|nothing)) \ 1058132718Skan;; | (2_mf_cont_only, (2_mf_cont|nothing)) \ 1059132718Skan;; | (2_mb_cont_only, (2_mb_cont|nothing)) \ 1060132718Skan;; | (2_bb_cont_only, (2_bb_cont|nothing)) \ 1061132718Skan;; | (2_m_stop, (2_0mmi_cont|nothing)) \ 1062132718Skan;; | (2_mi_stop, (2_0mii_cont|nothing))") 1063132718Skan 1064132718Skan;; Bypasses: 1065132718Skan 1066132718Skan(define_bypass 1 "2_fcmp" "2_br,2_scall") 1067132718Skan(define_bypass 0 "2_icmp" "2_br,2_scall") 1068132718Skan(define_bypass 0 "2_tbit" "2_br,2_scall") 1069132718Skan(define_bypass 2 "2_ld" "2_ld" "ia64_ld_address_bypass_p") 1070132718Skan(define_bypass 2 "2_ld" "2_st" "ia64_st_address_bypass_p") 1071169689Skan(define_bypass 2 "2_ld,2_ldc" "2_mmalua,2_mmmul,2_mmshf") 1072169689Skan(define_bypass 3 "2_ilog" "2_mmalua,2_mmmul,2_mmshf") 1073169689Skan(define_bypass 3 "2_ialu" "2_mmalua,2_mmmul,2_mmshf") 1074169689Skan(define_bypass 3 "2_mmalua,2_mmmul,2_mmshf" "2_ialu,2_ilog,2_ishf,2_st,2_ld,2_ldc") 1075132718Skan(define_bypass 6 "2_tofr" "2_frfr,2_stf") 1076132718Skan(define_bypass 7 "2_fmac" "2_frfr,2_stf") 1077132718Skan 1078132718Skan;; We don't use here fcmp because scall may be predicated. 1079169689Skan(define_bypass 0 "2_fcvtfx,2_fld,2_flda,2_fldc,2_fmac,2_fmisc,2_frar_i,2_frar_m,\ 1080169689Skan 2_frbr,2_frfr,2_frpr,2_ialu,2_ilog,2_ishf,2_ld,2_ldc,2_long_i,\ 1081169689Skan 2_mmalua,2_mmmul,2_mmshf,2_mmshfi,2_toar_m,2_tofr,\ 1082169689Skan 2_xmpy,2_xtd" 1083132718Skan "2_scall") 1084132718Skan 1085169689Skan(define_bypass 0 "2_unknown,2_ignore,2_stop_bit,2_br,2_fcmp,2_fcvtfx,2_fld,2_flda,2_fldc,\ 1086132718Skan 2_fmac,2_fmisc,2_frar_i,2_frar_m,2_frbr,2_frfr,2_frpr,\ 1087169689Skan 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,\ 1088169689Skan 2_mmalua,2_mmmul,2_mmshf,2_mmshfi,2_nop,2_nop_b,2_nop_f,\ 1089132718Skan 2_nop_i,2_nop_m,2_nop_x,2_rse_m,2_scall,2_sem,2_stf,2_st,\ 1090132718Skan 2_syst_m0,2_syst_m,2_tbit,2_toar_i,2_toar_m,2_tobr,2_tofr,\ 1091132718Skan 2_topr,2_xmpy,2_xtd,2_lfetch" "2_ignore") 1092132718Skan 1093132718Skan 1094132718Skan 1095132718Skan;; Bundling 1096132718Skan 1097132718Skan(define_automaton "twob") 1098132718Skan 1099132718Skan;; Pseudo units for quicker searching for position in two packet window. */ 1100132718Skan(define_query_cpu_unit "2_1,2_2,2_3,2_4,2_5,2_6" "twob") 1101132718Skan 1102132718Skan;; All possible combinations of bundles/syllables 1103132718Skan(define_cpu_unit 1104132718Skan "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\ 1105132718Skan 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx" "twob") 1106132718Skan(define_cpu_unit 1107132718Skan "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\ 1108132718Skan 2b_0mi.b, 2b_0mm.b, 2b_0mf.b" "twob") 1109132718Skan(define_query_cpu_unit 1110132718Skan "2b_0mii., 2b_0mmi., 2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\ 1111132718Skan 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx." "twob") 1112132718Skan 1113132718Skan(define_cpu_unit 1114132718Skan "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\ 1115132718Skan 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx" "twob") 1116132718Skan(define_cpu_unit 1117132718Skan "2b_1mi.i, 2b_1mm.i, 2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\ 1118132718Skan 2b_1mi.b, 2b_1mm.b, 2b_1mf.b" "twob") 1119132718Skan(define_query_cpu_unit 1120132718Skan "2b_1mii., 2b_1mmi., 2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\ 1121132718Skan 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx." "twob") 1122132718Skan 1123132718Skan;; Slot 1 1124132718Skan(exclusion_set "2b_0m.ii" 1125132718Skan "2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\ 1126132718Skan 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1127132718Skan(exclusion_set "2b_0m.mi" 1128132718Skan "2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb, 2b_0m.ib,\ 1129132718Skan 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1130132718Skan(exclusion_set "2b_0m.fi" 1131132718Skan "2b_0m.mf, 2b_0b.bb, 2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1132132718Skan(exclusion_set "2b_0m.mf" 1133132718Skan "2b_0b.bb, 2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1134132718Skan(exclusion_set "2b_0b.bb" "2b_0m.bb, 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1135132718Skan(exclusion_set "2b_0m.bb" "2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1136132718Skan(exclusion_set "2b_0m.ib" "2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1137132718Skan(exclusion_set "2b_0m.mb" "2b_0m.fb, 2b_0m.lx") 1138132718Skan(exclusion_set "2b_0m.fb" "2b_0m.lx") 1139132718Skan 1140132718Skan;; Slot 2 1141132718Skan(exclusion_set "2b_0mi.i" 1142132718Skan "2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\ 1143132718Skan 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1144132718Skan(exclusion_set "2b_0mm.i" 1145132718Skan "2b_0mf.i, 2b_0mm.f, 2b_0bb.b, 2b_0mb.b,\ 1146132718Skan 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1147132718Skan(exclusion_set "2b_0mf.i" 1148132718Skan "2b_0mm.f, 2b_0bb.b, 2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1149132718Skan(exclusion_set "2b_0mm.f" 1150132718Skan "2b_0bb.b, 2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1151132718Skan(exclusion_set "2b_0bb.b" "2b_0mb.b, 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1152132718Skan(exclusion_set "2b_0mb.b" "2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1153132718Skan(exclusion_set "2b_0mi.b" "2b_0mm.b, 2b_0mf.b, 2b_0mlx.") 1154132718Skan(exclusion_set "2b_0mm.b" "2b_0mf.b, 2b_0mlx.") 1155132718Skan(exclusion_set "2b_0mf.b" "2b_0mlx.") 1156132718Skan 1157132718Skan;; Slot 3 1158132718Skan(exclusion_set "2b_0mii." 1159132718Skan "2b_0mmi., 2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\ 1160132718Skan 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.") 1161132718Skan(exclusion_set "2b_0mmi." 1162132718Skan "2b_0mfi., 2b_0mmf., 2b_0bbb., 2b_0mbb.,\ 1163132718Skan 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.") 1164132718Skan(exclusion_set "2b_0mfi." 1165132718Skan "2b_0mmf., 2b_0bbb., 2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.") 1166132718Skan(exclusion_set "2b_0mmf." 1167132718Skan "2b_0bbb., 2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.") 1168132718Skan(exclusion_set "2b_0bbb." "2b_0mbb., 2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.") 1169132718Skan(exclusion_set "2b_0mbb." "2b_0mib., 2b_0mmb., 2b_0mfb., 2b_0mlx.") 1170132718Skan(exclusion_set "2b_0mib." "2b_0mmb., 2b_0mfb., 2b_0mlx.") 1171132718Skan(exclusion_set "2b_0mmb." "2b_0mfb., 2b_0mlx.") 1172132718Skan(exclusion_set "2b_0mfb." "2b_0mlx.") 1173132718Skan 1174132718Skan;; Slot 4 1175132718Skan(exclusion_set "2b_1m.ii" 1176132718Skan "2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\ 1177132718Skan 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1178132718Skan(exclusion_set "2b_1m.mi" 1179132718Skan "2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb, 2b_1m.ib,\ 1180132718Skan 2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1181132718Skan(exclusion_set "2b_1m.fi" 1182132718Skan "2b_1m.mf, 2b_1b.bb, 2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1183132718Skan(exclusion_set "2b_1m.mf" 1184132718Skan "2b_1b.bb, 2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1185132718Skan(exclusion_set "2b_1b.bb" "2b_1m.bb, 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1186132718Skan(exclusion_set "2b_1m.bb" "2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1187132718Skan(exclusion_set "2b_1m.ib" "2b_1m.mb, 2b_1m.fb, 2b_1m.lx") 1188132718Skan(exclusion_set "2b_1m.mb" "2b_1m.fb, 2b_1m.lx") 1189132718Skan(exclusion_set "2b_1m.fb" "2b_1m.lx") 1190132718Skan 1191132718Skan;; Slot 5 1192132718Skan(exclusion_set "2b_1mi.i" 1193132718Skan "2b_1mm.i, 2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\ 1194132718Skan 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1195132718Skan(exclusion_set "2b_1mm.i" 1196132718Skan "2b_1mf.i, 2b_1mm.f, 2b_1bb.b, 2b_1mb.b,\ 1197132718Skan 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1198132718Skan(exclusion_set "2b_1mf.i" 1199132718Skan "2b_1mm.f, 2b_1bb.b, 2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1200132718Skan(exclusion_set "2b_1mm.f" 1201132718Skan "2b_1bb.b, 2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1202132718Skan(exclusion_set "2b_1bb.b" "2b_1mb.b, 2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1203132718Skan(exclusion_set "2b_1mb.b" "2b_1mi.b, 2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1204132718Skan(exclusion_set "2b_1mi.b" "2b_1mm.b, 2b_1mf.b, 2b_1mlx.") 1205132718Skan(exclusion_set "2b_1mm.b" "2b_1mf.b, 2b_1mlx.") 1206132718Skan(exclusion_set "2b_1mf.b" "2b_1mlx.") 1207132718Skan 1208132718Skan;; Slot 6 1209132718Skan(exclusion_set "2b_1mii." 1210132718Skan "2b_1mmi., 2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\ 1211132718Skan 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.") 1212132718Skan(exclusion_set "2b_1mmi." 1213132718Skan "2b_1mfi., 2b_1mmf., 2b_1bbb., 2b_1mbb.,\ 1214132718Skan 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.") 1215132718Skan(exclusion_set "2b_1mfi." 1216132718Skan "2b_1mmf., 2b_1bbb., 2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.") 1217132718Skan(exclusion_set "2b_1mmf." 1218132718Skan "2b_1bbb., 2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.") 1219132718Skan(exclusion_set "2b_1bbb." "2b_1mbb., 2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.") 1220132718Skan(exclusion_set "2b_1mbb." "2b_1mib., 2b_1mmb., 2b_1mfb., 2b_1mlx.") 1221132718Skan(exclusion_set "2b_1mib." "2b_1mmb., 2b_1mfb., 2b_1mlx.") 1222132718Skan(exclusion_set "2b_1mmb." "2b_1mfb., 2b_1mlx.") 1223132718Skan(exclusion_set "2b_1mfb." "2b_1mlx.") 1224132718Skan 1225132718Skan(final_presence_set "2b_0mi.i" "2b_0m.ii") 1226132718Skan(final_presence_set "2b_0mii." "2b_0mi.i") 1227132718Skan(final_presence_set "2b_1mi.i" "2b_1m.ii") 1228132718Skan(final_presence_set "2b_1mii." "2b_1mi.i") 1229132718Skan 1230132718Skan(final_presence_set "2b_0mm.i" "2b_0m.mi") 1231132718Skan(final_presence_set "2b_0mmi." "2b_0mm.i") 1232132718Skan(final_presence_set "2b_1mm.i" "2b_1m.mi") 1233132718Skan(final_presence_set "2b_1mmi." "2b_1mm.i") 1234132718Skan 1235132718Skan(final_presence_set "2b_0mf.i" "2b_0m.fi") 1236132718Skan(final_presence_set "2b_0mfi." "2b_0mf.i") 1237132718Skan(final_presence_set "2b_1mf.i" "2b_1m.fi") 1238132718Skan(final_presence_set "2b_1mfi." "2b_1mf.i") 1239132718Skan 1240132718Skan(final_presence_set "2b_0mm.f" "2b_0m.mf") 1241132718Skan(final_presence_set "2b_0mmf." "2b_0mm.f") 1242132718Skan(final_presence_set "2b_1mm.f" "2b_1m.mf") 1243132718Skan(final_presence_set "2b_1mmf." "2b_1mm.f") 1244132718Skan 1245132718Skan(final_presence_set "2b_0bb.b" "2b_0b.bb") 1246132718Skan(final_presence_set "2b_0bbb." "2b_0bb.b") 1247132718Skan(final_presence_set "2b_1bb.b" "2b_1b.bb") 1248132718Skan(final_presence_set "2b_1bbb." "2b_1bb.b") 1249132718Skan 1250132718Skan(final_presence_set "2b_0mb.b" "2b_0m.bb") 1251132718Skan(final_presence_set "2b_0mbb." "2b_0mb.b") 1252132718Skan(final_presence_set "2b_1mb.b" "2b_1m.bb") 1253132718Skan(final_presence_set "2b_1mbb." "2b_1mb.b") 1254132718Skan 1255132718Skan(final_presence_set "2b_0mi.b" "2b_0m.ib") 1256132718Skan(final_presence_set "2b_0mib." "2b_0mi.b") 1257132718Skan(final_presence_set "2b_1mi.b" "2b_1m.ib") 1258132718Skan(final_presence_set "2b_1mib." "2b_1mi.b") 1259132718Skan 1260132718Skan(final_presence_set "2b_0mm.b" "2b_0m.mb") 1261132718Skan(final_presence_set "2b_0mmb." "2b_0mm.b") 1262132718Skan(final_presence_set "2b_1mm.b" "2b_1m.mb") 1263132718Skan(final_presence_set "2b_1mmb." "2b_1mm.b") 1264132718Skan 1265132718Skan(final_presence_set "2b_0mf.b" "2b_0m.fb") 1266132718Skan(final_presence_set "2b_0mfb." "2b_0mf.b") 1267132718Skan(final_presence_set "2b_1mf.b" "2b_1m.fb") 1268132718Skan(final_presence_set "2b_1mfb." "2b_1mf.b") 1269132718Skan 1270132718Skan(final_presence_set "2b_0mlx." "2b_0m.lx") 1271132718Skan(final_presence_set "2b_1mlx." "2b_1m.lx") 1272132718Skan 1273132718Skan;; See the corresponding comment in non-bundling section above. 1274132718Skan(final_presence_set 1275132718Skan "2b_1m.lx" 1276132718Skan "2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mib.,2b_0mmb.,2b_0mfb.,2b_0mlx.") 1277132718Skan(final_presence_set "2b_1b.bb" "2b_0mii.,2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mlx.") 1278132718Skan(final_presence_set 1279132718Skan "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1m.bb,2b_1m.ib,2b_1m.mb,2b_1m.fb" 1280132718Skan "2b_0mii.,2b_0mmi.,2b_0mfi.,2b_0mmf.,2b_0mib.,2b_0mmb.,2b_0mfb.,2b_0mlx.") 1281132718Skan 1282132718Skan;; Ports/units (nb means nop.b insn issued into given port): 1283132718Skan(define_cpu_unit 1284132718Skan "2b_um0, 2b_um1, 2b_um2, 2b_um3, 2b_ui0, 2b_ui1, 2b_uf0, 2b_uf1,\ 1285132718Skan 2b_ub0, 2b_ub1, 2b_ub2, 2b_unb0, 2b_unb1, 2b_unb2" "twob") 1286132718Skan 1287132718Skan(exclusion_set "2b_ub0" "2b_unb0") 1288132718Skan(exclusion_set "2b_ub1" "2b_unb1") 1289132718Skan(exclusion_set "2b_ub2" "2b_unb2") 1290132718Skan 1291132718Skan;; The following rules are used to decrease number of alternatives. 1292132718Skan;; They are consequences of Itanium2 microarchitecture. They also 1293132718Skan;; describe the following rules mentioned in Itanium2 1294132718Skan;; microarchitecture: rules mentioned in Itanium2 microarchitecture: 1295132718Skan;; o "BBB/MBB: Always splits issue after either of these bundles". 1296132718Skan;; o "MIB BBB: Split issue after the first bundle in this pair". 1297132718Skan(exclusion_set 1298132718Skan "2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb." 1299132718Skan "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1b.bb,2b_1m.bb,\ 1300132718Skan 2b_1m.ib,2b_1m.mb,2b_1m.fb,2b_1m.lx") 1301132718Skan(exclusion_set "2b_0m.ib,2b_0mi.b,2b_0mib." "2b_1b.bb") 1302132718Skan 1303132718Skan;;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the 1304132718Skan;;; B-slot contains a nop.b or a brp instruction". 1305132718Skan;;; "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or 1306132718Skan;;; nop.b, otherwise it disperses to B2". 1307132718Skan(final_absence_set 1308132718Skan "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\ 1309132718Skan 2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx" 1310132718Skan "2b_0mib. 2b_ub2, 2b_0mfb. 2b_ub2, 2b_0mmb. 2b_ub2") 1311132718Skan 1312132718Skan;; This is necessary to start new processor cycle when we meet stop bit. 1313132718Skan(define_cpu_unit "2b_stop" "twob") 1314132718Skan(final_absence_set 1315132718Skan "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\ 1316132718Skan 2b_0m.fi,2b_0mf.i,2b_0mfi.,\ 1317132718Skan 2b_0m.mf,2b_0mm.f,2b_0mmf.,2b_0b.bb,2b_0bb.b,2b_0bbb.,\ 1318132718Skan 2b_0m.bb,2b_0mb.b,2b_0mbb.,\ 1319132718Skan 2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\ 1320132718Skan 2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \ 1321132718Skan 2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\ 1322132718Skan 2b_1m.fi,2b_1mf.i,2b_1mfi.,\ 1323132718Skan 2b_1m.mf,2b_1mm.f,2b_1mmf.,2b_1b.bb,2b_1bb.b,2b_1bbb.,\ 1324132718Skan 2b_1m.bb,2b_1mb.b,2b_1mbb.,\ 1325132718Skan 2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\ 1326132718Skan 2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx." 1327132718Skan "2b_stop") 1328132718Skan 1329132718Skan;; The issue logic can reorder M slot insns between different subtypes 1330169689Skan;; but cannot reorder insn within the same subtypes. The following 1331132718Skan;; constraint is enough to describe this. 1332132718Skan(final_presence_set "2b_um1" "2b_um0") 1333132718Skan(final_presence_set "2b_um3" "2b_um2") 1334132718Skan 1335132718Skan;; The insn in the 1st I slot of the two bundle issue group will issue 1336132718Skan;; to I0. The second I slot insn will issue to I1. 1337132718Skan(final_presence_set "2b_ui1" "2b_ui0") 1338132718Skan 1339132718Skan;; For exceptions of I insns: 1340132718Skan(define_cpu_unit "2b_only_ui0" "twob") 1341132718Skan(final_absence_set "2b_only_ui0" "2b_ui1") 1342132718Skan 1343132718Skan;; Insns 1344132718Skan 1345132718Skan(define_reservation "2b_M" 1346132718Skan "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\ 1347132718Skan |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\ 1348132718Skan |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\ 1349132718Skan |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\ 1350132718Skan |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\ 1351132718Skan |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\ 1352132718Skan +(2b_um0|2b_um1|2b_um2|2b_um3)") 1353132718Skan 1354132718Skan(define_reservation "2b_M_only_um0" 1355132718Skan "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\ 1356132718Skan |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\ 1357132718Skan |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\ 1358132718Skan |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\ 1359132718Skan |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\ 1360132718Skan |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\ 1361132718Skan +2b_um0") 1362132718Skan 1363132718Skan(define_reservation "2b_M_only_um2" 1364132718Skan "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\ 1365132718Skan |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\ 1366132718Skan |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\ 1367132718Skan |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\ 1368132718Skan |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\ 1369132718Skan |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\ 1370132718Skan +2b_um2") 1371132718Skan 1372132718Skan(define_reservation "2b_M_only_um01" 1373132718Skan "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\ 1374132718Skan |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\ 1375132718Skan |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\ 1376132718Skan |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\ 1377132718Skan |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\ 1378132718Skan |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\ 1379132718Skan +(2b_um0|2b_um1)") 1380132718Skan 1381132718Skan(define_reservation "2b_M_only_um23" 1382132718Skan "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\ 1383132718Skan |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\ 1384132718Skan |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\ 1385132718Skan |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\ 1386132718Skan |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\ 1387132718Skan |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\ 1388132718Skan +(2b_um2|2b_um3)") 1389132718Skan 1390132718Skan;; I instruction is dispersed to the lowest numbered I unit 1391169689Skan;; not already in use. Remember about possible splitting. 1392132718Skan(define_reservation "2b_I" 1393132718Skan "2b_0mi.i+2_2+2b_ui0|2b_0mii.+2_3+(2b_ui0|2b_ui1)|2b_0mmi.+2_3+2b_ui0\ 1394132718Skan |2b_0mfi.+2_3+2b_ui0|2b_0mi.b+2_2+2b_ui0\ 1395132718Skan |(2b_1mi.i+2_5|2b_1mi.b+2_5)+(2b_ui0|2b_ui1)\ 1396132718Skan |(2b_1mii.|2b_1mmi.|2b_1mfi.)+2_6+(2b_ui0|2b_ui1)") 1397132718Skan 1398132718Skan;; "An F slot in the 1st bundle disperses to F0". 1399132718Skan;; "An F slot in the 2st bundle disperses to F1". 1400132718Skan(define_reservation "2b_F" 1401132718Skan "2b_0mf.i+2_2+2b_uf0|2b_0mmf.+2_3+2b_uf0|2b_0mf.b+2_2+2b_uf0\ 1402132718Skan |2b_1mf.i+2_5+2b_uf1|2b_1mmf.+2_6+2b_uf1|2b_1mf.b+2_5+2b_uf1") 1403132718Skan 1404132718Skan;;; "Each B slot in MBB or BBB bundle disperses to the corresponding B 1405132718Skan;;; unit. That is, a B slot in 1st position is dispersed to B0. In the 1406132718Skan;;; 2nd position it is dispersed to B2". 1407132718Skan(define_reservation "2b_NB" 1408132718Skan "2b_0b.bb+2_1+2b_unb0|2b_0bb.b+2_2+2b_unb1|2b_0bbb.+2_3+2b_unb2\ 1409132718Skan |2b_0mb.b+2_2+2b_unb1|2b_0mbb.+2_3+2b_unb2\ 1410132718Skan |2b_0mib.+2_3+2b_unb0|2b_0mmb.+2_3+2b_unb0|2b_0mfb.+2_3+2b_unb0\ 1411132718Skan |2b_1b.bb+2_4+2b_unb0|2b_1bb.b+2_5+2b_unb1\ 1412132718Skan |2b_1bbb.+2_6+2b_unb2|2b_1mb.b+2_5+2b_unb1|2b_1mbb.+2_6+2b_unb2\ 1413132718Skan |2b_1mib.+2_6+2b_unb0|2b_1mmb.+2_6+2b_unb0|2b_1mfb.+2_6+2b_unb0") 1414132718Skan 1415132718Skan(define_reservation "2b_B" 1416132718Skan "2b_0b.bb+2_1+2b_ub0|2b_0bb.b+2_2+2b_ub1|2b_0bbb.+2_3+2b_ub2\ 1417132718Skan |2b_0mb.b+2_2+2b_ub1|2b_0mbb.+2_3+2b_ub2|2b_0mib.+2_3+2b_ub2\ 1418132718Skan |2b_0mfb.+2_3+2b_ub2|2b_1b.bb+2_4+2b_ub0|2b_1bb.b+2_5+2b_ub1\ 1419132718Skan |2b_1bbb.+2_6+2b_ub2|2b_1mb.b+2_5+2b_ub1\ 1420132718Skan |2b_1mib.+2_6+2b_ub2|2b_1mmb.+2_6+2b_ub2|2b_1mfb.+2_6+2b_ub2") 1421132718Skan 1422132718Skan;; For the MLI template, the I slot insn is always assigned to port I0 1423132718Skan;; if it is in the first bundle or it is assigned to port I1 if it is in 1424132718Skan;; the second bundle. 1425132718Skan(define_reservation "2b_L" 1426132718Skan "2b_0mlx.+2_3+2b_ui0+2b_uf0|2b_1mlx.+2_6+2b_ui1+2b_uf1") 1427132718Skan 1428132718Skan;; Should we describe that A insn in I slot can be issued into M 1429132718Skan;; ports? I think it is not necessary because of multipass 1430132718Skan;; scheduling. For example, the multipass scheduling could use 1431132718Skan;; MMI-MMI instead of MII-MII where the two last I slots contain A 1432132718Skan;; insns (even if the case is complicated by use-def conflicts). 1433132718Skan;; 1434132718Skan;; In any case we could describe it as 1435132718Skan;; (define_cpu_unit "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres" 1436132718Skan;; "twob") 1437132718Skan;; (final_presence_set "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres" 1438132718Skan;; "2b_ui1") 1439132718Skan;; (define_reservation "b_A" 1440132718Skan;; "b_M|b_I\ 1441132718Skan;; |(2b_1mi.i+2_5|2b_1mii.+2_6|2b_1mmi.+2_6|2b_1mfi.+2_6|2b_1mi.b+2_5)\ 1442132718Skan;; +(2b_um0|2b_um1|2b_um2|2b_um3)\ 1443132718Skan;; +(2b_ui1_0pres|2b_ui1_1pres|2b_ui1_2pres|2b_ui1_3pres)") 1444132718Skan 1445132718Skan(define_reservation "2b_A" "2b_M|2b_I") 1446132718Skan 1447132718Skan;; We assume that there is no insn issued on the same cycle as the 1448132718Skan;; unknown insn. 1449132718Skan(define_cpu_unit "2b_empty" "twob") 1450132718Skan(exclusion_set "2b_empty" 1451132718Skan "2b_0m.ii,2b_0m.mi,2b_0m.fi,2b_0m.mf,2b_0b.bb,2b_0m.bb,\ 1452132718Skan 2b_0m.ib,2b_0m.mb,2b_0m.fb,2b_0m.lx,2b_0mm.i") 1453132718Skan 1454132718Skan(define_cpu_unit 1455132718Skan "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs" 1456132718Skan "twob") 1457132718Skan(define_cpu_unit 1458132718Skan "2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs" 1459132718Skan "twob") 1460132718Skan 1461132718Skan(define_cpu_unit "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont, 2b_mb_cont,\ 1462132718Skan 2b_b_cont, 2b_bb_cont" "twob") 1463132718Skan 1464132718Skan;; For stop in the middle of the bundles. 1465132718Skan(define_cpu_unit "2b_m_stop, 2b_m0_stop, 2b_m1_stop, 2b_0mmi_cont" "twob") 1466132718Skan(define_cpu_unit "2b_mi_stop, 2b_mi0_stop, 2b_mi1_stop, 2b_0mii_cont" "twob") 1467132718Skan 1468132718Skan(final_presence_set "2b_0m_bs" 1469132718Skan "2b_0m.ii, 2b_0m.mi, 2b_0m.mf, 2b_0m.fi, 2b_0m.bb,\ 1470132718Skan 2b_0m.ib, 2b_0m.fb, 2b_0m.mb, 2b_0m.lx") 1471132718Skan(final_presence_set "2b_1m_bs" 1472132718Skan "2b_1m.ii, 2b_1m.mi, 2b_1m.mf, 2b_1m.fi, 2b_1m.bb,\ 1473132718Skan 2b_1m.ib, 2b_1m.fb, 2b_1m.mb, 2b_1m.lx") 1474132718Skan(final_presence_set "2b_0mi_bs" "2b_0mi.i, 2b_0mi.i") 1475132718Skan(final_presence_set "2b_1mi_bs" "2b_1mi.i, 2b_1mi.i") 1476132718Skan(final_presence_set "2b_0mm_bs" "2b_0mm.i, 2b_0mm.f, 2b_0mm.b") 1477132718Skan(final_presence_set "2b_1mm_bs" "2b_1mm.i, 2b_1mm.f, 2b_1mm.b") 1478132718Skan(final_presence_set "2b_0mf_bs" "2b_0mf.i, 2b_0mf.b") 1479132718Skan(final_presence_set "2b_1mf_bs" "2b_1mf.i, 2b_1mf.b") 1480132718Skan(final_presence_set "2b_0b_bs" "2b_0b.bb") 1481132718Skan(final_presence_set "2b_1b_bs" "2b_1b.bb") 1482132718Skan(final_presence_set "2b_0bb_bs" "2b_0bb.b") 1483132718Skan(final_presence_set "2b_1bb_bs" "2b_1bb.b") 1484132718Skan(final_presence_set "2b_0mb_bs" "2b_0mb.b") 1485132718Skan(final_presence_set "2b_1mb_bs" "2b_1mb.b") 1486132718Skan 1487132718Skan(exclusion_set "2b_0m_bs" 1488132718Skan "2b_0mi.i, 2b_0mm.i, 2b_0mm.f, 2b_0mf.i, 2b_0mb.b,\ 1489132718Skan 2b_0mi.b, 2b_0mf.b, 2b_0mm.b, 2b_0mlx., 2b_m0_stop") 1490132718Skan(exclusion_set "2b_1m_bs" 1491132718Skan "2b_1mi.i, 2b_1mm.i, 2b_1mm.f, 2b_1mf.i, 2b_1mb.b,\ 1492132718Skan 2b_1mi.b, 2b_1mf.b, 2b_1mm.b, 2b_1mlx., 2b_m1_stop") 1493132718Skan(exclusion_set "2b_0mi_bs" "2b_0mii., 2b_0mib., 2b_mi0_stop") 1494132718Skan(exclusion_set "2b_1mi_bs" "2b_1mii., 2b_1mib., 2b_mi1_stop") 1495132718Skan(exclusion_set "2b_0mm_bs" "2b_0mmi., 2b_0mmf., 2b_0mmb.") 1496132718Skan(exclusion_set "2b_1mm_bs" "2b_1mmi., 2b_1mmf., 2b_1mmb.") 1497132718Skan(exclusion_set "2b_0mf_bs" "2b_0mfi., 2b_0mfb.") 1498132718Skan(exclusion_set "2b_1mf_bs" "2b_1mfi., 2b_1mfb.") 1499132718Skan(exclusion_set "2b_0b_bs" "2b_0bb.b") 1500132718Skan(exclusion_set "2b_1b_bs" "2b_1bb.b") 1501132718Skan(exclusion_set "2b_0bb_bs" "2b_0bbb.") 1502132718Skan(exclusion_set "2b_1bb_bs" "2b_1bbb.") 1503132718Skan(exclusion_set "2b_0mb_bs" "2b_0mbb.") 1504132718Skan(exclusion_set "2b_1mb_bs" "2b_1mbb.") 1505132718Skan 1506132718Skan(exclusion_set 1507132718Skan "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs, 1508132718Skan 2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs" 1509132718Skan "2b_stop") 1510132718Skan 1511132718Skan(final_presence_set 1512132718Skan "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0mb.b,\ 1513132718Skan 2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx." 1514132718Skan "2b_m_cont") 1515132718Skan(final_presence_set "2b_0mii., 2b_0mib." "2b_mi_cont") 1516132718Skan(final_presence_set "2b_0mmi., 2b_0mmf., 2b_0mmb." "2b_mm_cont") 1517132718Skan(final_presence_set "2b_0mfi., 2b_0mfb." "2b_mf_cont") 1518132718Skan(final_presence_set "2b_0bb.b" "2b_b_cont") 1519132718Skan(final_presence_set "2b_0bbb." "2b_bb_cont") 1520132718Skan(final_presence_set "2b_0mbb." "2b_mb_cont") 1521132718Skan 1522132718Skan(exclusion_set 1523132718Skan "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\ 1524132718Skan 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx" 1525132718Skan "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont,\ 1526132718Skan 2b_mb_cont, 2b_b_cont, 2b_bb_cont") 1527132718Skan 1528132718Skan(exclusion_set "2b_empty" 1529132718Skan "2b_m_cont,2b_mi_cont,2b_mm_cont,2b_mf_cont,\ 1530132718Skan 2b_mb_cont,2b_b_cont,2b_bb_cont") 1531132718Skan 1532132718Skan;; For m;mi bundle 1533132718Skan(final_presence_set "2b_m0_stop" "2b_0m.mi") 1534132718Skan(final_presence_set "2b_0mm.i" "2b_0mmi_cont") 1535132718Skan(exclusion_set "2b_0mmi_cont" 1536132718Skan "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\ 1537132718Skan 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1538132718Skan(exclusion_set "2b_m0_stop" "2b_0mm.i") 1539132718Skan(final_presence_set "2b_m1_stop" "2b_1m.mi") 1540132718Skan(exclusion_set "2b_m1_stop" "2b_1mm.i") 1541132718Skan(final_presence_set "2b_m_stop" "2b_m0_stop, 2b_m1_stop") 1542132718Skan 1543132718Skan;; For mi;i bundle 1544132718Skan(final_presence_set "2b_mi0_stop" "2b_0mi.i") 1545132718Skan(final_presence_set "2b_0mii." "2b_0mii_cont") 1546132718Skan(exclusion_set "2b_0mii_cont" 1547132718Skan "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\ 1548132718Skan 2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx") 1549132718Skan(exclusion_set "2b_mi0_stop" "2b_0mii.") 1550132718Skan(final_presence_set "2b_mi1_stop" "2b_1mi.i") 1551132718Skan(exclusion_set "2b_mi1_stop" "2b_1mii.") 1552132718Skan(final_presence_set "2b_mi_stop" "2b_mi0_stop, 2b_mi1_stop") 1553132718Skan 1554132718Skan(final_absence_set 1555132718Skan "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\ 1556132718Skan 2b_0m.fi,2b_0mf.i,2b_0mfi.,2b_0m.mf,2b_0mm.f,2b_0mmf.,\ 1557132718Skan 2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb.,\ 1558132718Skan 2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\ 1559132718Skan 2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \ 1560132718Skan 2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\ 1561132718Skan 2b_1m.fi,2b_1mf.i,2b_1mfi.,2b_1m.mf,2b_1mm.f,2b_1mmf.,\ 1562132718Skan 2b_1b.bb,2b_1bb.b,2b_1bbb.,2b_1m.bb,2b_1mb.b,2b_1mbb.,\ 1563132718Skan 2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\ 1564132718Skan 2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx." 1565132718Skan "2b_m0_stop,2b_m1_stop,2b_mi0_stop,2b_mi1_stop") 1566132718Skan 1567132718Skan(define_insn_reservation "2b_stop_bit" 0 1568132718Skan (and (and (eq_attr "cpu" "itanium2") 1569132718Skan (eq_attr "itanium_class" "stop_bit")) 1570132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1571132718Skan "2b_stop|2b_m0_stop|2b_m1_stop|2b_mi0_stop|2b_mi1_stop") 1572132718Skan(define_insn_reservation "2b_br" 0 1573132718Skan (and (and (eq_attr "cpu" "itanium2") 1574132718Skan (eq_attr "itanium_class" "br")) 1575132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B") 1576132718Skan(define_insn_reservation "2b_scall" 0 1577132718Skan (and (and (eq_attr "cpu" "itanium2") 1578132718Skan (eq_attr "itanium_class" "scall")) 1579132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B") 1580132718Skan(define_insn_reservation "2b_fcmp" 2 1581132718Skan (and (and (eq_attr "cpu" "itanium2") 1582132718Skan (eq_attr "itanium_class" "fcmp")) 1583132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F") 1584132718Skan(define_insn_reservation "2b_fcvtfx" 4 1585132718Skan (and (and (eq_attr "cpu" "itanium2") 1586132718Skan (eq_attr "itanium_class" "fcvtfx")) 1587132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F") 1588132718Skan(define_insn_reservation "2b_fld" 6 1589169689Skan (and (and (and (and (eq_attr "cpu" "itanium2") 1590169689Skan (eq_attr "itanium_class" "fld")) 1591169689Skan (eq_attr "data_speculative" "no")) 1592169689Skan (eq_attr "check_load" "no")) 1593169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1594169689Skan "2b_M") 1595169689Skan(define_insn_reservation "2b_flda" 6 1596169689Skan (and (and (and (eq_attr "cpu" "itanium2") 1597169689Skan (eq_attr "itanium_class" "fld")) 1598169689Skan (eq_attr "data_speculative" "yes")) 1599169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1600169689Skan "2b_M_only_um01") 1601169689Skan(define_insn_reservation "2b_fldc" 0 1602169689Skan (and (and (and (eq_attr "cpu" "itanium2") 1603169689Skan (eq_attr "itanium_class" "fld")) 1604169689Skan (eq_attr "check_load" "yes")) 1605169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1606169689Skan "2b_M_only_um01") 1607169689Skan 1608169689Skan(define_insn_reservation "2b_fldp" 6 1609169689Skan (and (and (and (eq_attr "cpu" "itanium2") 1610169689Skan (eq_attr "itanium_class" "fldp")) 1611169689Skan (eq_attr "check_load" "no")) 1612169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1613169689Skan "2b_M_only_um01") 1614169689Skan(define_insn_reservation "2b_fldpc" 0 1615169689Skan (and (and (and (eq_attr "cpu" "itanium2") 1616169689Skan (eq_attr "itanium_class" "fldp")) 1617169689Skan (eq_attr "check_load" "yes")) 1618169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1619169689Skan "2b_M_only_um01") 1620169689Skan 1621132718Skan(define_insn_reservation "2b_fmac" 4 1622132718Skan (and (and (eq_attr "cpu" "itanium2") 1623132718Skan (eq_attr "itanium_class" "fmac")) 1624132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F") 1625132718Skan(define_insn_reservation "2b_fmisc" 4 1626132718Skan (and (and (eq_attr "cpu" "itanium2") 1627132718Skan (eq_attr "itanium_class" "fmisc")) 1628132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F") 1629132718Skan 1630132718Skan;; Latency time ??? 1631132718Skan(define_insn_reservation "2b_frar_i" 13 1632132718Skan (and (and (eq_attr "cpu" "itanium2") 1633132718Skan (eq_attr "itanium_class" "frar_i")) 1634132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1635132718Skan "2b_I+2b_only_ui0") 1636132718Skan;; Latency time ??? 1637132718Skan(define_insn_reservation "2b_frar_m" 6 1638132718Skan (and (and (eq_attr "cpu" "itanium2") 1639132718Skan (eq_attr "itanium_class" "frar_m")) 1640132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1641132718Skan "2b_M_only_um2") 1642132718Skan(define_insn_reservation "2b_frbr" 2 1643132718Skan (and (and (eq_attr "cpu" "itanium2") 1644132718Skan (eq_attr "itanium_class" "frbr")) 1645132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1646132718Skan "2b_I+2b_only_ui0") 1647132718Skan(define_insn_reservation "2b_frfr" 5 1648132718Skan (and (and (eq_attr "cpu" "itanium2") 1649132718Skan (eq_attr "itanium_class" "frfr")) 1650132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1651132718Skan "2b_M_only_um2") 1652132718Skan(define_insn_reservation "2b_frpr" 2 1653132718Skan (and (and (eq_attr "cpu" "itanium2") 1654132718Skan (eq_attr "itanium_class" "frpr")) 1655132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1656132718Skan "2b_I+2b_only_ui0") 1657132718Skan 1658132718Skan(define_insn_reservation "2b_ialu" 1 1659132718Skan (and (and (eq_attr "cpu" "itanium2") 1660132718Skan (eq_attr "itanium_class" "ialu")) 1661132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1662132718Skan "2b_A") 1663132718Skan(define_insn_reservation "2b_icmp" 1 1664132718Skan (and (and (eq_attr "cpu" "itanium2") 1665132718Skan (eq_attr "itanium_class" "icmp")) 1666132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A") 1667132718Skan(define_insn_reservation "2b_ilog" 1 1668132718Skan (and (and (eq_attr "cpu" "itanium2") 1669132718Skan (eq_attr "itanium_class" "ilog")) 1670132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A") 1671169689Skan(define_insn_reservation "2b_mmalua" 2 1672169689Skan (and (and (eq_attr "cpu" "itanium2") 1673169689Skan (eq_attr "itanium_class" "mmalua")) 1674169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_A") 1675132718Skan;; Latency time ??? 1676132718Skan(define_insn_reservation "2b_ishf" 1 1677132718Skan (and (and (eq_attr "cpu" "itanium2") 1678132718Skan (eq_attr "itanium_class" "ishf")) 1679132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1680132718Skan "2b_I+2b_only_ui0") 1681169689Skan 1682132718Skan(define_insn_reservation "2b_ld" 1 1683169689Skan (and (and (and (eq_attr "cpu" "itanium2") 1684169689Skan (eq_attr "itanium_class" "ld")) 1685169689Skan (eq_attr "check_load" "no")) 1686132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1687132718Skan "2b_M_only_um01") 1688169689Skan(define_insn_reservation "2b_ldc" 0 1689169689Skan (and (and (and (eq_attr "cpu" "itanium2") 1690169689Skan (eq_attr "itanium_class" "ld")) 1691169689Skan (eq_attr "check_load" "yes")) 1692169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1693169689Skan "2b_M_only_um01") 1694169689Skan 1695132718Skan(define_insn_reservation "2b_long_i" 1 1696132718Skan (and (and (eq_attr "cpu" "itanium2") 1697132718Skan (eq_attr "itanium_class" "long_i")) 1698132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_L") 1699132718Skan 1700132718Skan;; Latency time ??? 1701132718Skan(define_insn_reservation "2b_mmmul" 2 1702132718Skan (and (and (eq_attr "cpu" "itanium2") 1703132718Skan (eq_attr "itanium_class" "mmmul")) 1704132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1705132718Skan "2b_I+2b_only_ui0") 1706132718Skan;; Latency time ??? 1707132718Skan(define_insn_reservation "2b_mmshf" 2 1708132718Skan (and (and (eq_attr "cpu" "itanium2") 1709132718Skan (eq_attr "itanium_class" "mmshf")) 1710132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I") 1711132718Skan;; Latency time ??? 1712132718Skan(define_insn_reservation "2b_mmshfi" 1 1713132718Skan (and (and (eq_attr "cpu" "itanium2") 1714132718Skan (eq_attr "itanium_class" "mmshfi")) 1715132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I") 1716132718Skan 1717132718Skan(define_insn_reservation "2b_rse_m" 0 1718132718Skan (and (and (eq_attr "cpu" "itanium2") 1719132718Skan (eq_attr "itanium_class" "rse_m")) 1720132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1721132718Skan "(2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\ 1722132718Skan |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1+2b_um0") 1723132718Skan(define_insn_reservation "2b_sem" 0 1724132718Skan (and (and (eq_attr "cpu" "itanium2") 1725132718Skan (eq_attr "itanium_class" "sem")) 1726132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1727132718Skan "2b_M_only_um23") 1728132718Skan 1729132718Skan(define_insn_reservation "2b_stf" 1 1730132718Skan (and (and (eq_attr "cpu" "itanium2") 1731132718Skan (eq_attr "itanium_class" "stf")) 1732132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1733132718Skan "2b_M_only_um23") 1734132718Skan(define_insn_reservation "2b_st" 1 1735132718Skan (and (and (eq_attr "cpu" "itanium2") 1736132718Skan (eq_attr "itanium_class" "st")) 1737132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1738132718Skan "2b_M_only_um23") 1739132718Skan(define_insn_reservation "2b_syst_m0" 0 1740132718Skan (and (and (eq_attr "cpu" "itanium2") 1741132718Skan (eq_attr "itanium_class" "syst_m0")) 1742132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1743132718Skan "2b_M_only_um2") 1744132718Skan(define_insn_reservation "2b_syst_m" 0 1745132718Skan (and (and (eq_attr "cpu" "itanium2") 1746132718Skan (eq_attr "itanium_class" "syst_m")) 1747132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1748132718Skan "2b_M_only_um0") 1749132718Skan;; Reservation??? 1750132718Skan(define_insn_reservation "2b_tbit" 1 1751132718Skan (and (and (eq_attr "cpu" "itanium2") 1752132718Skan (eq_attr "itanium_class" "tbit")) 1753132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1754132718Skan "2b_I+2b_only_ui0") 1755132718Skan(define_insn_reservation "2b_toar_i" 0 1756132718Skan (and (and (eq_attr "cpu" "itanium2") 1757132718Skan (eq_attr "itanium_class" "toar_i")) 1758132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1759132718Skan "2b_I+2b_only_ui0") 1760132718Skan;; Latency time ??? 1761132718Skan(define_insn_reservation "2b_toar_m" 5 1762132718Skan (and (and (eq_attr "cpu" "itanium2") 1763132718Skan (eq_attr "itanium_class" "toar_m")) 1764132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1765132718Skan "2b_M_only_um2") 1766132718Skan;; Latency time ??? 1767132718Skan(define_insn_reservation "2b_tobr" 1 1768132718Skan (and (and (eq_attr "cpu" "itanium2") 1769132718Skan (eq_attr "itanium_class" "tobr")) 1770132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1771132718Skan "2b_I+2b_only_ui0") 1772132718Skan(define_insn_reservation "2b_tofr" 5 1773132718Skan (and (and (eq_attr "cpu" "itanium2") 1774132718Skan (eq_attr "itanium_class" "tofr")) 1775132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1776132718Skan "2b_M_only_um23") 1777132718Skan;; Latency time ??? 1778132718Skan(define_insn_reservation "2b_topr" 1 1779132718Skan (and (and (eq_attr "cpu" "itanium2") 1780132718Skan (eq_attr "itanium_class" "topr")) 1781132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1782132718Skan "2b_I+2b_only_ui0") 1783132718Skan 1784132718Skan(define_insn_reservation "2b_xmpy" 4 1785132718Skan (and (and (eq_attr "cpu" "itanium2") 1786132718Skan (eq_attr "itanium_class" "xmpy")) 1787132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F") 1788132718Skan;; Latency time ??? 1789132718Skan(define_insn_reservation "2b_xtd" 1 1790132718Skan (and (and (eq_attr "cpu" "itanium2") 1791132718Skan (eq_attr "itanium_class" "xtd")) 1792132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I") 1793169689Skan 1794169689Skan(define_insn_reservation "2b_chk_s_i" 0 1795132718Skan (and (and (eq_attr "cpu" "itanium2") 1796169689Skan (eq_attr "itanium_class" "chk_s_i")) 1797132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1798132718Skan "2b_I|2b_M_only_um23") 1799169689Skan(define_insn_reservation "2b_chk_s_f" 0 1800169689Skan (and (and (eq_attr "cpu" "itanium2") 1801169689Skan (eq_attr "itanium_class" "chk_s_f")) 1802169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1803169689Skan "2b_M_only_um23") 1804169689Skan(define_insn_reservation "2b_chk_a" 0 1805169689Skan (and (and (eq_attr "cpu" "itanium2") 1806169689Skan (eq_attr "itanium_class" "chk_a")) 1807169689Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1808169689Skan "2b_M_only_um01") 1809169689Skan 1810132718Skan(define_insn_reservation "2b_lfetch" 0 1811132718Skan (and (and (eq_attr "cpu" "itanium2") 1812132718Skan (eq_attr "itanium_class" "lfetch")) 1813132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1814132718Skan "2b_M_only_um01") 1815132718Skan(define_insn_reservation "2b_nop_m" 0 1816132718Skan (and (and (eq_attr "cpu" "itanium2") 1817132718Skan (eq_attr "itanium_class" "nop_m")) 1818132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_M") 1819132718Skan(define_insn_reservation "2b_nop_b" 0 1820132718Skan (and (and (eq_attr "cpu" "itanium2") 1821132718Skan (eq_attr "itanium_class" "nop_b")) 1822132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_NB") 1823132718Skan(define_insn_reservation "2b_nop_i" 0 1824132718Skan (and (and (eq_attr "cpu" "itanium2") 1825132718Skan (eq_attr "itanium_class" "nop_i")) 1826132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_I") 1827132718Skan(define_insn_reservation "2b_nop_f" 0 1828132718Skan (and (and (eq_attr "cpu" "itanium2") 1829132718Skan (eq_attr "itanium_class" "nop_f")) 1830132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F") 1831132718Skan(define_insn_reservation "2b_nop_x" 0 1832132718Skan (and (and (eq_attr "cpu" "itanium2") 1833132718Skan (eq_attr "itanium_class" "nop_x")) 1834132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_L") 1835132718Skan(define_insn_reservation "2b_unknown" 1 1836132718Skan (and (and (eq_attr "cpu" "itanium2") 1837132718Skan (eq_attr "itanium_class" "unknown")) 1838132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "2b_empty") 1839132718Skan(define_insn_reservation "2b_nop" 0 1840132718Skan (and (and (eq_attr "cpu" "itanium2") 1841132718Skan (eq_attr "itanium_class" "nop")) 1842132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1843132718Skan "2b_M|2b_NB|2b_I|2b_F") 1844132718Skan(define_insn_reservation "2b_ignore" 0 1845132718Skan (and (and (eq_attr "cpu" "itanium2") 1846132718Skan (eq_attr "itanium_class" "ignore")) 1847132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) "nothing") 1848132718Skan 1849132718Skan(define_insn_reservation "2b_pre_cycle" 0 1850132718Skan (and (and (eq_attr "cpu" "itanium2") 1851132718Skan (eq_attr "itanium_class" "pre_cycle")) 1852132718Skan (ne (symbol_ref "bundling_p") (const_int 0))) 1853132718Skan "(2b_0m_bs, 2b_m_cont) \ 1854132718Skan | (2b_0mi_bs, 2b_mi_cont) \ 1855132718Skan | (2b_0mm_bs, 2b_mm_cont) \ 1856132718Skan | (2b_0mf_bs, 2b_mf_cont) \ 1857132718Skan | (2b_0b_bs, 2b_b_cont) \ 1858132718Skan | (2b_0bb_bs, 2b_bb_cont) \ 1859132718Skan | (2b_0mb_bs, 2b_mb_cont) \ 1860132718Skan | (2b_1m_bs, 2b_m_cont) \ 1861132718Skan | (2b_1mi_bs, 2b_mi_cont) \ 1862132718Skan | (2b_1mm_bs, 2b_mm_cont) \ 1863132718Skan | (2b_1mf_bs, 2b_mf_cont) \ 1864132718Skan | (2b_1b_bs, 2b_b_cont) \ 1865132718Skan | (2b_1bb_bs, 2b_bb_cont) \ 1866132718Skan | (2b_1mb_bs, 2b_mb_cont) \ 1867132718Skan | (2b_m_stop, 2b_0mmi_cont) \ 1868132718Skan | (2b_mi_stop, 2b_0mii_cont)") 1869132718Skan 1870