⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itanium2.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
;; Itanium2 DFA descriptions for insn scheduling and bundling.;; Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.;; Contributed by Vladimir Makarov <vmakarov@redhat.com>.;;;; This file is part of GCC.;;;; GCC is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 2, or (at your option);; any later version.;;;; GCC is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;; GNU General Public License for more details.;;;; You should have received a copy of the GNU General Public License;; along with GCC; see the file COPYING.  If not, write to;; the Free Software Foundation, 59 Temple Place - Suite 330,;; Boston, MA 02111-1307, USA.  */;;/* This is description of pipeline hazards based on DFA.  The   following constructions can be used for this:      o define_cpu_unit string [string]) describes a cpu functional unit     (separated by comma).     1st operand: Names of cpu function units.     2nd operand: Name of automaton (see comments for     DEFINE_AUTOMATON).     All define_reservations and define_cpu_units should have unique     names which cannot be "nothing".   o (exclusion_set string string) means that each CPU function unit     in the first string cannot be reserved simultaneously with each     unit whose name is in the second string and vise versa.  CPU     units in the string are separated by commas. For example, it is     useful for description CPU with fully pipelined floating point     functional unit which can execute simultaneously only single     floating point insns or only double floating point insns.   o (presence_set string string) means that each CPU function unit in     the first string cannot be reserved unless at least one of     pattern of units whose names are in the second string is     reserved.  This is an asymmetric relation.  CPU units or unit     patterns in the strings are separated by commas.  Pattern is one     unit name or unit names separated by white-spaces.      For example, it is useful for description that slot1 is reserved     after slot0 reservation for a VLIW processor.  We could describe     it by the following construction         (presence_set "slot1" "slot0")     Or slot1 is reserved only after slot0 and unit b0 reservation.     In this case we could write         (presence_set "slot1" "slot0 b0")     All CPU functional units in a set should belong to the same     automaton.   o (final_presence_set string string) is analogous to     `presence_set'.  The difference between them is when checking is     done.  When an instruction is issued in given automaton state     reflecting all current and planned unit reservations, the     automaton state is changed.  The first state is a source state,     the second one is a result state.  Checking for `presence_set' is     done on the source state reservation, checking for     `final_presence_set' is done on the result reservation.  This     construction is useful to describe a reservation which is     actually two subsequent reservations.  For example, if we use         (presence_set "slot1" "slot0")     the following insn will be never issued (because slot1 requires     slot0 which is absent in the source state).         (define_reservation "insn_and_nop" "slot0 + slot1")     but it can be issued if we use analogous `final_presence_set'.   o (absence_set string string) means that each CPU function unit in     the first string can be reserved only if each pattern of units     whose names are in the second string is not reserved.  This is an     asymmetric relation (actually exclusion set is analogous to this     one but it is symmetric).  CPU units or unit patterns in the     string are separated by commas.  Pattern is one unit name or unit     names separated by white-spaces.     For example, it is useful for description that slot0 cannot be     reserved after slot1 or slot2 reservation for a VLIW processor.     We could describe it by the following construction        (absence_set "slot2" "slot0, slot1")     Or slot2 cannot be reserved if slot0 and unit b0 are reserved or     slot1 and unit b1 are reserved .  In this case we could write        (absence_set "slot2" "slot0 b0, slot1 b1")     All CPU functional units in a set should to belong the same     automaton.   o (final_absence_set string string) is analogous to `absence_set' but     checking is done on the result (state) reservation.  See comments     for final_presence_set.   o (define_bypass number out_insn_names in_insn_names) names bypass with     given latency (the first number) from insns given by the first     string (see define_insn_reservation) into insns given by the     second string.  Insn names in the strings are separated by     commas.   o (define_automaton string) describes names of an automaton     generated and used for pipeline hazards recognition.  The names     are separated by comma.  Actually it is possibly to generate the     single automaton but unfortunately it can be very large.  If we     use more one automata, the summary size of the automata usually     is less than the single one.  The automaton name is used in     define_cpu_unit.  All automata should have unique names.   o (automata_option string) describes option for generation of     automata.  Currently there are the following options:     o "no-minimization" which makes no minimization of automata.       This is only worth to do when we are debugging the description       and need to look more accurately at reservations of states.     o "ndfa" which makes automata with nondetermenistic reservation        by insns.   o (define_reservation string string) names reservation (the first     string) of cpu functional units (the 2nd string).  Sometimes unit     reservations for different insns contain common parts.  In such     case, you describe common part and use one its name (the 1st     parameter) in regular expression in define_insn_reservation.  All     define_reservations, define results and define_cpu_units should     have unique names which cannot be "nothing".   o (define_insn_reservation name default_latency condition regexpr)     describes reservation of cpu functional units (the 3nd operand)     for instruction which is selected by the condition (the 2nd     parameter).  The first parameter is used for output of debugging     information.  The reservations are described by a regular     expression according the following syntax:       regexp = regexp "," oneof              | oneof       oneof = oneof "|" allof             | allof       allof = allof "+" repeat             | repeat        repeat = element "*" number              | element       element = cpu_function_name               | reservation_name               | result_name               | "nothing"               | "(" regexp ")"       1. "," is used for describing start of the next cycle in          reservation.       2. "|" is used for describing the reservation described by the          first regular expression *or* the reservation described by          the second regular expression *or* etc.       3. "+" is used for describing the reservation described by the          first regular expression *and* the reservation described by          the second regular expression *and* etc.       4. "*" is used for convenience and simply means sequence in          which the regular expression are repeated NUMBER times with          cycle advancing (see ",").       5. cpu function unit name which means reservation.       6. reservation name -- see define_reservation.       7. string "nothing" means no units reservation.*/(define_automaton "two");;   All possible combinations of bundles/syllables(define_cpu_unit "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, 2_0m.lx" "two")(define_cpu_unit "2_0mi.i, 2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\                  2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx." "two")(define_cpu_unit "2_0mii., 2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\                  2_0mib., 2_0mmb., 2_0mfb." "two")(define_cpu_unit "2_1m.ii, 2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\                  2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx" "two")(define_cpu_unit "2_1mi.i, 2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\                  2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx." "two")(define_cpu_unit "2_1mii., 2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\                  2_1mib., 2_1mmb., 2_1mfb." "two");; Slot 1(exclusion_set "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, 2_0m.lx")(exclusion_set "2_0m.mi" "2_0m.fi, 2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib,\                          2_0m.mb, 2_0m.fb, 2_0m.lx")(exclusion_set "2_0m.fi" "2_0m.mf, 2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb,\                          2_0m.fb, 2_0m.lx")(exclusion_set "2_0m.mf" "2_0b.bb, 2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb,\	                  2_0m.lx")(exclusion_set "2_0b.bb" "2_0m.bb, 2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")(exclusion_set "2_0m.bb" "2_0m.ib, 2_0m.mb, 2_0m.fb, 2_0m.lx")(exclusion_set "2_0m.ib" "2_0m.mb, 2_0m.fb, 2_0m.lx")(exclusion_set "2_0m.mb" "2_0m.fb, 2_0m.lx")(exclusion_set "2_0m.fb" "2_0m.lx");; Slot 2(exclusion_set "2_0mi.i" "2_0mm.i, 2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\                          2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")(exclusion_set "2_0mm.i" "2_0mf.i, 2_0mm.f, 2_0bb.b, 2_0mb.b,\                          2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")(exclusion_set "2_0mf.i" "2_0mm.f, 2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b,\                          2_0mf.b, 2_0mlx.")(exclusion_set "2_0mm.f" "2_0bb.b, 2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b,\                          2_0mlx.")(exclusion_set "2_0bb.b" "2_0mb.b, 2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")(exclusion_set "2_0mb.b" "2_0mi.b, 2_0mm.b, 2_0mf.b, 2_0mlx.")(exclusion_set "2_0mi.b" "2_0mm.b, 2_0mf.b, 2_0mlx.")(exclusion_set "2_0mm.b" "2_0mf.b, 2_0mlx.")(exclusion_set "2_0mf.b" "2_0mlx.");; Slot 3(exclusion_set "2_0mii." "2_0mmi., 2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\                          2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")(exclusion_set "2_0mmi." "2_0mfi., 2_0mmf., 2_0bbb., 2_0mbb.,\                          2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")(exclusion_set "2_0mfi." "2_0mmf., 2_0bbb., 2_0mbb., 2_0mib., 2_0mmb.,\                          2_0mfb., 2_0mlx.")(exclusion_set "2_0mmf." "2_0bbb., 2_0mbb., 2_0mib., 2_0mmb., 2_0mfb.,\                          2_0mlx.")(exclusion_set "2_0bbb." "2_0mbb., 2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")(exclusion_set "2_0mbb." "2_0mib., 2_0mmb., 2_0mfb., 2_0mlx.")(exclusion_set "2_0mib." "2_0mmb., 2_0mfb., 2_0mlx.")(exclusion_set "2_0mmb." "2_0mfb., 2_0mlx.")(exclusion_set "2_0mfb." "2_0mlx.");; Slot 4(exclusion_set "2_1m.ii" "2_1m.mi, 2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb,\                          2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.mi" "2_1m.fi, 2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib,\                          2_1m.mb, 2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.fi" "2_1m.mf, 2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb,\                          2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.mf" "2_1b.bb, 2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb,\                          2_1m.lx")(exclusion_set "2_1b.bb" "2_1m.bb, 2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.bb" "2_1m.ib, 2_1m.mb, 2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.ib" "2_1m.mb, 2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.mb" "2_1m.fb, 2_1m.lx")(exclusion_set "2_1m.fb" "2_1m.lx");; Slot 5(exclusion_set "2_1mi.i" "2_1mm.i, 2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\                          2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")(exclusion_set "2_1mm.i" "2_1mf.i, 2_1mm.f, 2_1bb.b, 2_1mb.b,\                          2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")(exclusion_set "2_1mf.i" "2_1mm.f, 2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b,\                          2_1mf.b, 2_1mlx.")(exclusion_set "2_1mm.f" "2_1bb.b, 2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b,\                          2_1mlx.")(exclusion_set "2_1bb.b" "2_1mb.b, 2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")(exclusion_set "2_1mb.b" "2_1mi.b, 2_1mm.b, 2_1mf.b, 2_1mlx.")(exclusion_set "2_1mi.b" "2_1mm.b, 2_1mf.b, 2_1mlx.")(exclusion_set "2_1mm.b" "2_1mf.b, 2_1mlx.")(exclusion_set "2_1mf.b" "2_1mlx.");; Slot 6(exclusion_set "2_1mii." "2_1mmi., 2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\                          2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")(exclusion_set "2_1mmi." "2_1mfi., 2_1mmf., 2_1bbb., 2_1mbb.,\                          2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")(exclusion_set "2_1mfi." "2_1mmf., 2_1bbb., 2_1mbb., 2_1mib., 2_1mmb.,\                          2_1mfb., 2_1mlx.")(exclusion_set "2_1mmf." "2_1bbb., 2_1mbb., 2_1mib., 2_1mmb., 2_1mfb.,\                          2_1mlx.")(exclusion_set "2_1bbb." "2_1mbb., 2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")(exclusion_set "2_1mbb." "2_1mib., 2_1mmb., 2_1mfb., 2_1mlx.")(exclusion_set "2_1mib." "2_1mmb., 2_1mfb., 2_1mlx.")(exclusion_set "2_1mmb." "2_1mfb., 2_1mlx.")(exclusion_set "2_1mfb." "2_1mlx.")(final_presence_set "2_0mi.i" "2_0m.ii")(final_presence_set "2_0mii." "2_0mi.i")(final_presence_set "2_1mi.i" "2_1m.ii")(final_presence_set "2_1mii." "2_1mi.i")(final_presence_set "2_0mm.i" "2_0m.mi")(final_presence_set "2_0mmi." "2_0mm.i")(final_presence_set "2_1mm.i" "2_1m.mi")(final_presence_set "2_1mmi." "2_1mm.i")(final_presence_set "2_0mf.i" "2_0m.fi")(final_presence_set "2_0mfi." "2_0mf.i")(final_presence_set "2_1mf.i" "2_1m.fi")(final_presence_set "2_1mfi." "2_1mf.i")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -