<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: Processor pipeline description</title>

<meta name="description" content="GNU Compiler Collection (GCC) Internals: Processor pipeline description">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Processor pipeline description">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Insn-Attributes.html#Insn-Attributes" rel="up" title="Insn Attributes">
<link href="Conditional-Execution.html#Conditional-Execution" rel="next" title="Conditional Execution">
<link href="Delay-Slots.html#Delay-Slots" rel="prev" title="Delay Slots">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Processor-pipeline-description"></a>
<div class="header">
<p>
Previous: <a href="Delay-Slots.html#Delay-Slots" accesskey="p" rel="prev">Delay Slots</a>, Up: <a href="Insn-Attributes.html#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Specifying-processor-pipeline-description"></a>
<h4 class="subsection">16.19.9 Specifying processor pipeline description</h4>
<a name="index-processor-pipeline-description"></a>
<a name="index-processor-functional-units"></a>
<a name="index-instruction-latency-time"></a>
<a name="index-interlock-delays"></a>
<a name="index-data-dependence-delays"></a>
<a name="index-reservation-delays"></a>
<a name="index-pipeline-hazard-recognizer"></a>
<a name="index-automaton-based-pipeline-description"></a>
<a name="index-regular-expressions"></a>
<a name="index-deterministic-finite-state-automaton"></a>
<a name="index-automaton-based-scheduler"></a>
<a name="index-RISC"></a>
<a name="index-VLIW"></a>

<p>To achieve better performance, most modern processors
(super-pipelined, superscalar <acronym>RISC</acronym>, and <acronym>VLIW</acronym>
processors) have many <em>functional units</em> on which several
instructions can be executed simultaneously.  An instruction starts
execution if its issue conditions are satisfied.  If not, the
instruction is stalled until its conditions are satisfied.  Such
<em>interlock (pipeline) delay</em> causes interruption of the fetching
of successor instructions (or demands nop instructions, e.g. for some
MIPS processors).
</p>
<p>There are two major kinds of interlock delays in modern processors.
The first one is a data dependence delay determining <em>instruction
latency time</em>.  The instruction execution is not started until all
source data have been evaluated by prior instructions (there are more
complex cases when the instruction execution starts even when the data
are not available but will be ready in given time after the
instruction execution start).  Taking the data dependence delays into
account is simple.  The data dependence (true, output, and
anti-dependence) delay between two instructions is given by a
constant.  In most cases this approach is adequate.  The second kind
of interlock delays is a reservation delay.  The reservation delay
means that two instructions under execution will be in need of shared
processors resources, i.e. buses, internal registers, and/or
functional units, which are reserved for some time.  Taking this kind
of delay into account is complex especially for modern <acronym>RISC</acronym>
processors.
</p>
<p>The task of exploiting more processor parallelism is solved by an
instruction scheduler.  For a better solution to this problem, the
instruction scheduler has to have an adequate description of the
processor parallelism (or <em>pipeline description</em>).  GCC
machine descriptions describe processor parallelism and functional
unit reservations for groups of instructions with the aid of
<em>regular expressions</em>.
</p>
<p>The GCC instruction scheduler uses a <em>pipeline hazard recognizer</em> to
figure out the possibility of the instruction issue by the processor
on a given simulated processor cycle.  The pipeline hazard recognizer is
automatically generated from the processor pipeline description.  The
pipeline hazard recognizer generated from the machine description
is based on a deterministic finite state automaton (<acronym>DFA</acronym>):
the instruction issue is possible if there is a transition from one
automaton state to another one.  This algorithm is very fast, and
furthermore, its speed is not dependent on processor
complexity<a name="DOCF5" href="#FOOT5"><sup>5</sup></a>.
</p>
<a name="index-automaton-based-pipeline-description-1"></a>
<p>The rest of this section describes the directives that constitute
an automaton-based processor pipeline description.  The order of
these constructions within the machine description file is not
important.
</p>
<a name="index-define_005fautomaton"></a>
<a name="index-pipeline-hazard-recognizer-1"></a>
<p>The following optional construction describes names of automata
generated and used for the pipeline hazards recognition.  Sometimes
the generated finite state automaton used by the pipeline hazard
recognizer is large.  If we use more than one automaton and bind functional
units to the automata, the total size of the automata is usually
less than the size of the single automaton.  If there is no one such
construction, only one finite state automaton is generated.
</p>
<div class="smallexample">
<pre class="smallexample">(define_automaton <var>automata-names</var>)
</pre></div>

<p><var>automata-names</var> is a string giving names of the automata.  The
names are separated by commas.  All the automata should have unique names.
The automaton name is used in the constructions <code>define_cpu_unit</code> and
<code>define_query_cpu_unit</code>.
</p>
<a name="index-define_005fcpu_005funit"></a>
<a name="index-processor-functional-units-1"></a>
<p>Each processor functional unit used in the description of instruction
reservations should be described by the following construction.
</p>
<div class="smallexample">
<pre class="smallexample">(define_cpu_unit <var>unit-names</var> [<var>automaton-name</var>])
</pre></div>

<p><var>unit-names</var> is a string giving the names of the functional units
separated by commas.  Don&rsquo;t use name &lsquo;<samp>nothing</samp>&rsquo;, it is reserved
for other goals.
</p>
<p><var>automaton-name</var> is a string giving the name of the automaton with
which the unit is bound.  The automaton should be described in
construction <code>define_automaton</code>.  You should give
<em>automaton-name</em>, if there is a defined automaton.
</p>
<p>The assignment of units to automata are constrained by the uses of the
units in insn reservations.  The most important constraint is: if a
unit reservation is present on a particular cycle of an alternative
for an insn reservation, then some unit from the same automaton must
be present on the same cycle for the other alternatives of the insn
reservation.  The rest of the constraints are mentioned in the
description of the subsequent constructions.
</p>
<a name="index-define_005fquery_005fcpu_005funit"></a>
<a name="index-querying-function-unit-reservations"></a>
<p>The following construction describes CPU functional units analogously
to <code>define_cpu_unit</code>.  The reservation of such units can be
queried for an automaton state.  The instruction scheduler never
queries reservation of functional units for given automaton state.  So
as a rule, you don&rsquo;t need this construction.  This construction could
be used for future code generation goals (e.g. to generate
<acronym>VLIW</acronym> insn templates).
</p>
<div class="smallexample">
<pre class="smallexample">(define_query_cpu_unit <var>unit-names</var> [<var>automaton-name</var>])
</pre></div>

<p><var>unit-names</var> is a string giving names of the functional units
separated by commas.
</p>
<p><var>automaton-name</var> is a string giving the name of the automaton with
which the unit is bound.
</p>
<a name="index-define_005finsn_005freservation"></a>
<a name="index-instruction-latency-time-1"></a>
<a name="index-regular-expressions-1"></a>
<a name="index-data-bypass"></a>
<p>The following construction is the major one to describe pipeline
characteristics of an instruction.
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn_reservation <var>insn-name</var> <var>default_latency</var>
                         <var>condition</var> <var>regexp</var>)
</pre></div>

<p><var>default_latency</var> is a number giving latency time of the
instruction.  There is an important difference between the old
description and the automaton based pipeline description.  The latency
time is used for all dependencies when we use the old description.  In
the automaton based pipeline description, the given latency time is only
used for true dependencies.  The cost of anti-dependencies is always
zero and the cost of output dependencies is the difference between
latency times of the producing and consuming insns (if the difference
is negative, the cost is considered to be zero).  You can always
change the default costs for any description by using the target hook
<code>TARGET_SCHED_ADJUST_COST</code> (see <a href="Scheduling.html#Scheduling">Scheduling</a>).
</p>
<p><var>insn-name</var> is a string giving the internal name of the insn.  The
internal names are used in constructions <code>define_bypass</code> and in
the automaton description file generated for debugging.  The internal
name has nothing in common with the names in <code>define_insn</code>.  It is a
good practice to use insn classes described in the processor manual.
</p>
<p><var>condition</var> defines what RTL insns are described by this
construction.  You should remember that you will be in trouble if
<var>condition</var> for two or more different
<code>define_insn_reservation</code> constructions is TRUE for an insn.  In
this case what reservation will be used for the insn is not defined.
Such cases are not checked during generation of the pipeline hazards
recognizer because in general recognizing that two conditions may have
the same value is quite difficult (especially if the conditions
contain <code>symbol_ref</code>).  It is also not checked during the
pipeline hazard recognizer work because it would slow down the
recognizer considerably.
</p>
<p><var>regexp</var> is a string describing the reservation of the cpu&rsquo;s functional
units by the instruction.  The reservations are described by a regular
expression according to the following syntax:
</p>
<div class="smallexample">
<pre class="smallexample">       regexp = regexp &quot;,&quot; oneof
              | oneof

       oneof = oneof &quot;|&quot; allof
             | allof

       allof = allof &quot;+&quot; repeat
             | repeat

       repeat = element &quot;*&quot; number
              | element

       element = cpu_function_unit_name
               | reservation_name
               | result_name
               | &quot;nothing&quot;
               | &quot;(&quot; regexp &quot;)&quot;
</pre></div>

<ul>
<li> &lsquo;<samp>,</samp>&rsquo; is used for describing the start of the next cycle in
the reservation.

</li><li> &lsquo;<samp>|</samp>&rsquo; is used for describing a reservation described by the first
regular expression <strong>or</strong> a reservation described by the second
regular expression <strong>or</strong> etc.

</li><li> &lsquo;<samp>+</samp>&rsquo; is used for describing a reservation described by the first
regular expression <strong>and</strong> a reservation described by the
second regular expression <strong>and</strong> etc.

</li><li> &lsquo;<samp>*</samp>&rsquo; is used for convenience and simply means a sequence in which
the regular expression are repeated <var>number</var> times with cycle
advancing (see &lsquo;<samp>,</samp>&rsquo;).

</li><li> &lsquo;<samp>cpu_function_unit_name</samp>&rsquo; denotes reservation of the named
functional unit.

</li><li> &lsquo;<samp>reservation_name</samp>&rsquo; &mdash; see description of construction
&lsquo;<samp>define_reservation</samp>&rsquo;.

</li><li> &lsquo;<samp>nothing</samp>&rsquo; denotes no unit reservations.
</li></ul>

<a name="index-define_005freservation"></a>
<p>Sometimes unit reservations for different insns contain common parts.
In such case, you can simplify the pipeline description by describing
the common part by the following construction
</p>
<div class="smallexample">
<pre class="smallexample">(define_reservation <var>reservation-name</var> <var>regexp</var>)
</pre></div>

<p><var>reservation-name</var> is a string giving name of <var>regexp</var>.
Functional unit names and reservation names are in the same name
space.  So the reservation names should be different from the
functional unit names and can not be the reserved name &lsquo;<samp>nothing</samp>&rsquo;.
</p>
<a name="index-define_005fbypass"></a>
<a name="index-instruction-latency-time-2"></a>
<a name="index-data-bypass-1"></a>
<p>The following construction is used to describe exceptions in the
latency time for given instruction pair.  This is so called bypasses.
</p>
<div class="smallexample">
<pre class="smallexample">(define_bypass <var>number</var> <var>out_insn_names</var> <var>in_insn_names</var>
               [<var>guard</var>])
</pre></div>

<p><var>number</var> defines when the result generated by the instructions
given in string <var>out_insn_names</var> will be ready for the
instructions given in string <var>in_insn_names</var>.  Each of these
strings is a comma-separated list of filename-style globs and
they refer to the names of <code>define_insn_reservation</code>s.
For example:
</p><div class="smallexample">
<pre class="smallexample">(define_bypass 1 &quot;cpu1_load_*, cpu1_store_*&quot; &quot;cpu1_load_*&quot;)
</pre></div>
<p>defines a bypass between instructions that start with
&lsquo;<samp>cpu1_load_</samp>&rsquo; or &lsquo;<samp>cpu1_store_</samp>&rsquo; and those that start with
&lsquo;<samp>cpu1_load_</samp>&rsquo;.
</p>
<p><var>guard</var> is an optional string giving the name of a C function which
defines an additional guard for the bypass.  The function will get the
two insns as parameters.  If the function returns zero the bypass will
be ignored for this case.  The additional guard is necessary to
recognize complicated bypasses, e.g. when the consumer is only an address
of insn &lsquo;<samp>store</samp>&rsquo; (not a stored value).
</p>
<p>If there are more one bypass with the same output and input insns, the
chosen bypass is the first bypass with a guard in description whose
guard function returns nonzero.  If there is no such bypass, then
bypass without the guard function is chosen.
</p>
<a name="index-exclusion_005fset"></a>
<a name="index-presence_005fset"></a>
<a name="index-final_005fpresence_005fset"></a>
<a name="index-absence_005fset"></a>
<a name="index-final_005fabsence_005fset"></a>
<a name="index-VLIW-1"></a>
<a name="index-RISC-1"></a>
<p>The following five constructions are usually used to describe
<acronym>VLIW</acronym> processors, or more precisely, to describe a placement
of small instructions into <acronym>VLIW</acronym> instruction slots.  They
can be used for <acronym>RISC</acronym> processors, too.
</p>
<div class="smallexample">
<pre class="smallexample">(exclusion_set <var>unit-names</var> <var>unit-names</var>)
(presence_set <var>unit-names</var> <var>patterns</var>)
(final_presence_set <var>unit-names</var> <var>patterns</var>)
(absence_set <var>unit-names</var> <var>patterns</var>)
(final_absence_set <var>unit-names</var> <var>patterns</var>)
</pre></div>

<p><var>unit-names</var> is a string giving names of functional units
separated by commas.
</p>
<p><var>patterns</var> is a string giving patterns of functional units
separated by comma.  Currently pattern is one unit or units
separated by white-spaces.
</p>
<p>The first construction (&lsquo;<samp>exclusion_set</samp>&rsquo;) means that each
functional unit in the first string can not be reserved simultaneously
with a unit whose name is in the second string and vice versa.  For
example, the construction is useful for describing processors
(e.g. some SPARC processors) with a fully pipelined floating point
functional unit which can execute simultaneously only single floating
point insns or only double floating point insns.
</p>
<p>The second construction (&lsquo;<samp>presence_set</samp>&rsquo;) means that each
functional unit in the first string can not be reserved unless at
least one of pattern of units whose names are in the second string is
reserved.  This is an asymmetric relation.  For example, it is useful
for description that <acronym>VLIW</acronym> &lsquo;<samp>slot1</samp>&rsquo; is reserved after
&lsquo;<samp>slot0</samp>&rsquo; reservation.  We could describe it by the following
construction
</p>
<div class="smallexample">
<pre class="smallexample">(presence_set &quot;slot1&quot; &quot;slot0&quot;)
</pre></div>

<p>Or &lsquo;<samp>slot1</samp>&rsquo; is reserved only after &lsquo;<samp>slot0</samp>&rsquo; and unit &lsquo;<samp>b0</samp>&rsquo;
reservation.  In this case we could write
</p>
<div class="smallexample">
<pre class="smallexample">(presence_set &quot;slot1&quot; &quot;slot0 b0&quot;)
</pre></div>

<p>The third construction (&lsquo;<samp>final_presence_set</samp>&rsquo;) is analogous to
&lsquo;<samp>presence_set</samp>&rsquo;.  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 &lsquo;<samp>presence_set</samp>&rsquo; is done on the
source state reservation, checking for &lsquo;<samp>final_presence_set</samp>&rsquo; 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
</p>
<div class="smallexample">
<pre class="smallexample">(presence_set &quot;slot1&quot; &quot;slot0&quot;)
</pre></div>

<p>the following insn will be never issued (because &lsquo;<samp>slot1</samp>&rsquo; requires
&lsquo;<samp>slot0</samp>&rsquo; which is absent in the source state).
</p>
<div class="smallexample">
<pre class="smallexample">(define_reservation &quot;insn_and_nop&quot; &quot;slot0 + slot1&quot;)
</pre></div>

<p>but it can be issued if we use analogous &lsquo;<samp>final_presence_set</samp>&rsquo;.
</p>
<p>The forth construction (&lsquo;<samp>absence_set</samp>&rsquo;) means that each functional
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 &lsquo;<samp>exclusion_set</samp>&rsquo; is analogous to
this one but it is symmetric).  For example it might be useful in a
<acronym>VLIW</acronym> description to say that &lsquo;<samp>slot0</samp>&rsquo; cannot be reserved
after either &lsquo;<samp>slot1</samp>&rsquo; or &lsquo;<samp>slot2</samp>&rsquo; have been reserved.  This
can be described as:
</p>
<div class="smallexample">
<pre class="smallexample">(absence_set &quot;slot0&quot; &quot;slot1, slot2&quot;)
</pre></div>

<p>Or &lsquo;<samp>slot2</samp>&rsquo; can not be reserved if &lsquo;<samp>slot0</samp>&rsquo; and unit &lsquo;<samp>b0</samp>&rsquo;
are reserved or &lsquo;<samp>slot1</samp>&rsquo; and unit &lsquo;<samp>b1</samp>&rsquo; are reserved.  In
this case we could write
</p>
<div class="smallexample">
<pre class="smallexample">(absence_set &quot;slot2&quot; &quot;slot0 b0, slot1 b1&quot;)
</pre></div>

<p>All functional units mentioned in a set should belong to the same
automaton.
</p>
<p>The last construction (&lsquo;<samp>final_absence_set</samp>&rsquo;) is analogous to
&lsquo;<samp>absence_set</samp>&rsquo; but checking is done on the result (state)
reservation.  See comments for &lsquo;<samp>final_presence_set</samp>&rsquo;.
</p>
<a name="index-automata_005foption"></a>
<a name="index-deterministic-finite-state-automaton-1"></a>
<a name="index-nondeterministic-finite-state-automaton"></a>
<a name="index-finite-state-automaton-minimization"></a>
<p>You can control the generator of the pipeline hazard recognizer with
the following construction.
</p>
<div class="smallexample">
<pre class="smallexample">(automata_option <var>options</var>)
</pre></div>

<p><var>options</var> is a string giving options which affect the generated
code.  Currently there are the following options:
</p>
<ul>
<li> <em>no-minimization</em> makes no minimization of the automaton.  This is
only worth to do when we are debugging the description and need to
look more accurately at reservations of states.

</li><li> <em>time</em> means printing time statistics about the generation of
automata.

</li><li> <em>stats</em> means printing statistics about the generated automata
such as the number of DFA states, NDFA states and arcs.

</li><li> <em>v</em> means a generation of the file describing the result automata.
The file has suffix &lsquo;<samp>.dfa</samp>&rsquo; and can be used for the description
verification and debugging.

</li><li> <em>w</em> means a generation of warning instead of error for
non-critical errors.

</li><li> <em>no-comb-vect</em> prevents the automaton generator from generating
two data structures and comparing them for space efficiency.  Using
a comb vector to represent transitions may be better, but it can be
very expensive to construct.  This option is useful if the build
process spends an unacceptably long time in genautomata.

</li><li> <em>ndfa</em> makes nondeterministic finite state automata.  This affects
the treatment of operator &lsquo;<samp>|</samp>&rsquo; in the regular expressions.  The
usual treatment of the operator is to try the first alternative and,
if the reservation is not possible, the second alternative.  The
nondeterministic treatment means trying all alternatives, some of them
may be rejected by reservations in the subsequent insns.

</li><li> <em>collapse-ndfa</em> modifies the behaviour of the generator when
producing an automaton.  An additional state transition to collapse a
nondeterministic <acronym>NDFA</acronym> state to a deterministic <acronym>DFA</acronym>
state is generated.  It can be triggered by passing <code>const0_rtx</code> to
state_transition.  In such an automaton, cycle advance transitions are
available only for these collapsed states.  This option is useful for
ports that want to use the <code>ndfa</code> option, but also want to use
<code>define_query_cpu_unit</code> to assign units to insns issued in a cycle.

</li><li> <em>progress</em> means output of a progress bar showing how many states
were generated so far for automaton being processed.  This is useful
during debugging a <acronym>DFA</acronym> description.  If you see too many
generated states, you could interrupt the generator of the pipeline
hazard recognizer and try to figure out a reason for generation of the
huge automaton.
</li></ul>

<p>As an example, consider a superscalar <acronym>RISC</acronym> machine which can
issue three insns (two integer insns and one floating point insn) on
the cycle but can finish only two insns.  To describe this, we define
the following functional units.
</p>
<div class="smallexample">
<pre class="smallexample">(define_cpu_unit &quot;i0_pipeline, i1_pipeline, f_pipeline&quot;)
(define_cpu_unit &quot;port0, port1&quot;)
</pre></div>

<p>All simple integer insns can be executed in any integer pipeline and
their result is ready in two cycles.  The simple integer insns are
issued into the first pipeline unless it is reserved, otherwise they
are issued into the second pipeline.  Integer division and
multiplication insns can be executed only in the second integer
pipeline and their results are ready correspondingly in 8 and 4
cycles.  The integer division is not pipelined, i.e. the subsequent
integer division insn can not be issued until the current division
insn finished.  Floating point insns are fully pipelined and their
results are ready in 3 cycles.  Where the result of a floating point
insn is used by an integer insn, an additional delay of one cycle is
incurred.  To describe all of this we could specify
</p>
<div class="smallexample">
<pre class="smallexample">(define_cpu_unit &quot;div&quot;)

(define_insn_reservation &quot;simple&quot; 2 (eq_attr &quot;type&quot; &quot;int&quot;)
                         &quot;(i0_pipeline | i1_pipeline), (port0 | port1)&quot;)

(define_insn_reservation &quot;mult&quot; 4 (eq_attr &quot;type&quot; &quot;mult&quot;)
                         &quot;i1_pipeline, nothing*2, (port0 | port1)&quot;)

(define_insn_reservation &quot;div&quot; 8 (eq_attr &quot;type&quot; &quot;div&quot;)
                         &quot;i1_pipeline, div*7, div + (port0 | port1)&quot;)

(define_insn_reservation &quot;float&quot; 3 (eq_attr &quot;type&quot; &quot;float&quot;)
                         &quot;f_pipeline, nothing, (port0 | port1))

(define_bypass 4 &quot;float&quot; &quot;simple,mult,div&quot;)
</pre></div>

<p>To simplify the description we could describe the following reservation
</p>
<div class="smallexample">
<pre class="smallexample">(define_reservation &quot;finish&quot; &quot;port0|port1&quot;)
</pre></div>

<p>and use it in all <code>define_insn_reservation</code> as in the following
construction
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn_reservation &quot;simple&quot; 2 (eq_attr &quot;type&quot; &quot;int&quot;)
                         &quot;(i0_pipeline | i1_pipeline), finish&quot;)
</pre></div>


<div class="footnote">
<hr>
<h4 class="footnotes-heading">Footnotes</h4>

<h3><a name="FOOT5" href="#DOCF5">(5)</a></h3>
<p>However, the size of the automaton depends on
processor complexity.  To limit this effect, machine descriptions
can split orthogonal parts of the machine description among several
automata: but then, since each of these must be stepped independently,
this does cause a small decrease in the algorithm&rsquo;s performance.</p>
</div>
<hr>
<div class="header">
<p>
Previous: <a href="Delay-Slots.html#Delay-Slots" accesskey="p" rel="prev">Delay Slots</a>, Up: <a href="Insn-Attributes.html#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
