You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
282 lines
18 KiB
HTML
282 lines
18 KiB
HTML
4 years ago
|
<html lang="en">
|
||
|
<head>
|
||
|
<title>DEC Alpha Options - Using the GNU Compiler Collection (GCC)</title>
|
||
|
<meta http-equiv="Content-Type" content="text/html">
|
||
|
<meta name="description" content="Using the GNU Compiler Collection (GCC)">
|
||
|
<meta name="generator" content="makeinfo 4.13">
|
||
|
<link title="Top" rel="start" href="index.html#Top">
|
||
|
<link rel="up" href="Submodel-Options.html#Submodel-Options" title="Submodel Options">
|
||
|
<link rel="prev" href="Darwin-Options.html#Darwin-Options" title="Darwin Options">
|
||
|
<link rel="next" href="FR30-Options.html#FR30-Options" title="FR30 Options">
|
||
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
||
|
<!--
|
||
|
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.-->
|
||
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
||
|
<style type="text/css"><!--
|
||
|
pre.display { font-family:inherit }
|
||
|
pre.format { font-family:inherit }
|
||
|
pre.smalldisplay { font-family:inherit; font-size:smaller }
|
||
|
pre.smallformat { font-family:inherit; font-size:smaller }
|
||
|
pre.smallexample { font-size:smaller }
|
||
|
pre.smalllisp { font-size:smaller }
|
||
|
span.sc { font-variant:small-caps }
|
||
|
span.roman { font-family:serif; font-weight:normal; }
|
||
|
span.sansserif { font-family:sans-serif; font-weight:normal; }
|
||
|
--></style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="node">
|
||
|
<a name="DEC-Alpha-Options"></a>
|
||
|
<p>
|
||
|
Next: <a rel="next" accesskey="n" href="FR30-Options.html#FR30-Options">FR30 Options</a>,
|
||
|
Previous: <a rel="previous" accesskey="p" href="Darwin-Options.html#Darwin-Options">Darwin Options</a>,
|
||
|
Up: <a rel="up" accesskey="u" href="Submodel-Options.html#Submodel-Options">Submodel Options</a>
|
||
|
<hr>
|
||
|
</div>
|
||
|
|
||
|
<h4 class="subsection">3.17.11 DEC Alpha Options</h4>
|
||
|
|
||
|
<p>These ‘<samp><span class="samp">-m</span></samp>’ options are defined for the DEC Alpha implementations:
|
||
|
|
||
|
<dl>
|
||
|
<dt><code>-mno-soft-float</code><dt><code>-msoft-float</code><dd><a name="index-mno_002dsoft_002dfloat-1603"></a><a name="index-msoft_002dfloat-1604"></a>Use (do not use) the hardware floating-point instructions for
|
||
|
floating-point operations. When <samp><span class="option">-msoft-float</span></samp> is specified,
|
||
|
functions in <samp><span class="file">libgcc.a</span></samp> are used to perform floating-point
|
||
|
operations. Unless they are replaced by routines that emulate the
|
||
|
floating-point operations, or compiled in such a way as to call such
|
||
|
emulations routines, these routines issue floating-point
|
||
|
operations. If you are compiling for an Alpha without floating-point
|
||
|
operations, you must ensure that the library is built so as not to call
|
||
|
them.
|
||
|
|
||
|
<p>Note that Alpha implementations without floating-point operations are
|
||
|
required to have floating-point registers.
|
||
|
|
||
|
<br><dt><code>-mfp-reg</code><dt><code>-mno-fp-regs</code><dd><a name="index-mfp_002dreg-1605"></a><a name="index-mno_002dfp_002dregs-1606"></a>Generate code that uses (does not use) the floating-point register set.
|
||
|
<samp><span class="option">-mno-fp-regs</span></samp> implies <samp><span class="option">-msoft-float</span></samp>. If the floating-point
|
||
|
register set is not used, floating-point operands are passed in integer
|
||
|
registers as if they were integers and floating-point results are passed
|
||
|
in <code>$0</code> instead of <code>$f0</code>. This is a non-standard calling sequence,
|
||
|
so any function with a floating-point argument or return value called by code
|
||
|
compiled with <samp><span class="option">-mno-fp-regs</span></samp> must also be compiled with that
|
||
|
option.
|
||
|
|
||
|
<p>A typical use of this option is building a kernel that does not use,
|
||
|
and hence need not save and restore, any floating-point registers.
|
||
|
|
||
|
<br><dt><code>-mieee</code><dd><a name="index-mieee-1607"></a>The Alpha architecture implements floating-point hardware optimized for
|
||
|
maximum performance. It is mostly compliant with the IEEE floating-point
|
||
|
standard. However, for full compliance, software assistance is
|
||
|
required. This option generates code fully IEEE-compliant code
|
||
|
<em>except</em> that the <var>inexact-flag</var> is not maintained (see below).
|
||
|
If this option is turned on, the preprocessor macro <code>_IEEE_FP</code> is
|
||
|
defined during compilation. The resulting code is less efficient but is
|
||
|
able to correctly support denormalized numbers and exceptional IEEE
|
||
|
values such as not-a-number and plus/minus infinity. Other Alpha
|
||
|
compilers call this option <samp><span class="option">-ieee_with_no_inexact</span></samp>.
|
||
|
|
||
|
<br><dt><code>-mieee-with-inexact</code><dd><a name="index-mieee_002dwith_002dinexact-1608"></a>This is like <samp><span class="option">-mieee</span></samp> except the generated code also maintains
|
||
|
the IEEE <var>inexact-flag</var>. Turning on this option causes the
|
||
|
generated code to implement fully-compliant IEEE math. In addition to
|
||
|
<code>_IEEE_FP</code>, <code>_IEEE_FP_EXACT</code> is defined as a preprocessor
|
||
|
macro. On some Alpha implementations the resulting code may execute
|
||
|
significantly slower than the code generated by default. Since there is
|
||
|
very little code that depends on the <var>inexact-flag</var>, you should
|
||
|
normally not specify this option. Other Alpha compilers call this
|
||
|
option <samp><span class="option">-ieee_with_inexact</span></samp>.
|
||
|
|
||
|
<br><dt><code>-mfp-trap-mode=</code><var>trap-mode</var><dd><a name="index-mfp_002dtrap_002dmode-1609"></a>This option controls what floating-point related traps are enabled.
|
||
|
Other Alpha compilers call this option <samp><span class="option">-fptm </span><var>trap-mode</var></samp>.
|
||
|
The trap mode can be set to one of four values:
|
||
|
|
||
|
<dl>
|
||
|
<dt>‘<samp><span class="samp">n</span></samp>’<dd>This is the default (normal) setting. The only traps that are enabled
|
||
|
are the ones that cannot be disabled in software (e.g., division by zero
|
||
|
trap).
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">u</span></samp>’<dd>In addition to the traps enabled by ‘<samp><span class="samp">n</span></samp>’, underflow traps are enabled
|
||
|
as well.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">su</span></samp>’<dd>Like ‘<samp><span class="samp">u</span></samp>’, but the instructions are marked to be safe for software
|
||
|
completion (see Alpha architecture manual for details).
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">sui</span></samp>’<dd>Like ‘<samp><span class="samp">su</span></samp>’, but inexact traps are enabled as well.
|
||
|
</dl>
|
||
|
|
||
|
<br><dt><code>-mfp-rounding-mode=</code><var>rounding-mode</var><dd><a name="index-mfp_002drounding_002dmode-1610"></a>Selects the IEEE rounding mode. Other Alpha compilers call this option
|
||
|
<samp><span class="option">-fprm </span><var>rounding-mode</var></samp>. The <var>rounding-mode</var> can be one
|
||
|
of:
|
||
|
|
||
|
<dl>
|
||
|
<dt>‘<samp><span class="samp">n</span></samp>’<dd>Normal IEEE rounding mode. Floating-point numbers are rounded towards
|
||
|
the nearest machine number or towards the even machine number in case
|
||
|
of a tie.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">m</span></samp>’<dd>Round towards minus infinity.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">c</span></samp>’<dd>Chopped rounding mode. Floating-point numbers are rounded towards zero.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">d</span></samp>’<dd>Dynamic rounding mode. A field in the floating-point control register
|
||
|
(<var>fpcr</var>, see Alpha architecture reference manual) controls the
|
||
|
rounding mode in effect. The C library initializes this register for
|
||
|
rounding towards plus infinity. Thus, unless your program modifies the
|
||
|
<var>fpcr</var>, ‘<samp><span class="samp">d</span></samp>’ corresponds to round towards plus infinity.
|
||
|
</dl>
|
||
|
|
||
|
<br><dt><code>-mtrap-precision=</code><var>trap-precision</var><dd><a name="index-mtrap_002dprecision-1611"></a>In the Alpha architecture, floating-point traps are imprecise. This
|
||
|
means without software assistance it is impossible to recover from a
|
||
|
floating trap and program execution normally needs to be terminated.
|
||
|
GCC can generate code that can assist operating system trap handlers
|
||
|
in determining the exact location that caused a floating-point trap.
|
||
|
Depending on the requirements of an application, different levels of
|
||
|
precisions can be selected:
|
||
|
|
||
|
<dl>
|
||
|
<dt>‘<samp><span class="samp">p</span></samp>’<dd>Program precision. This option is the default and means a trap handler
|
||
|
can only identify which program caused a floating-point exception.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">f</span></samp>’<dd>Function precision. The trap handler can determine the function that
|
||
|
caused a floating-point exception.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">i</span></samp>’<dd>Instruction precision. The trap handler can determine the exact
|
||
|
instruction that caused a floating-point exception.
|
||
|
</dl>
|
||
|
|
||
|
<p>Other Alpha compilers provide the equivalent options called
|
||
|
<samp><span class="option">-scope_safe</span></samp> and <samp><span class="option">-resumption_safe</span></samp>.
|
||
|
|
||
|
<br><dt><code>-mieee-conformant</code><dd><a name="index-mieee_002dconformant-1612"></a>This option marks the generated code as IEEE conformant. You must not
|
||
|
use this option unless you also specify <samp><span class="option">-mtrap-precision=i</span></samp> and either
|
||
|
<samp><span class="option">-mfp-trap-mode=su</span></samp> or <samp><span class="option">-mfp-trap-mode=sui</span></samp>. Its only effect
|
||
|
is to emit the line ‘<samp><span class="samp">.eflag 48</span></samp>’ in the function prologue of the
|
||
|
generated assembly file.
|
||
|
|
||
|
<br><dt><code>-mbuild-constants</code><dd><a name="index-mbuild_002dconstants-1613"></a>Normally GCC examines a 32- or 64-bit integer constant to
|
||
|
see if it can construct it from smaller constants in two or three
|
||
|
instructions. If it cannot, it outputs the constant as a literal and
|
||
|
generates code to load it from the data segment at run time.
|
||
|
|
||
|
<p>Use this option to require GCC to construct <em>all</em> integer constants
|
||
|
using code, even if it takes more instructions (the maximum is six).
|
||
|
|
||
|
<p>You typically use this option to build a shared library dynamic
|
||
|
loader. Itself a shared library, it must relocate itself in memory
|
||
|
before it can find the variables and constants in its own data segment.
|
||
|
|
||
|
<br><dt><code>-mbwx</code><dt><code>-mno-bwx</code><dt><code>-mcix</code><dt><code>-mno-cix</code><dt><code>-mfix</code><dt><code>-mno-fix</code><dt><code>-mmax</code><dt><code>-mno-max</code><dd><a name="index-mbwx-1614"></a><a name="index-mno_002dbwx-1615"></a><a name="index-mcix-1616"></a><a name="index-mno_002dcix-1617"></a><a name="index-mfix-1618"></a><a name="index-mno_002dfix-1619"></a><a name="index-mmax-1620"></a><a name="index-mno_002dmax-1621"></a>Indicate whether GCC should generate code to use the optional BWX,
|
||
|
CIX, FIX and MAX instruction sets. The default is to use the instruction
|
||
|
sets supported by the CPU type specified via <samp><span class="option">-mcpu=</span></samp> option or that
|
||
|
of the CPU on which GCC was built if none is specified.
|
||
|
|
||
|
<br><dt><code>-mfloat-vax</code><dt><code>-mfloat-ieee</code><dd><a name="index-mfloat_002dvax-1622"></a><a name="index-mfloat_002dieee-1623"></a>Generate code that uses (does not use) VAX F and G floating-point
|
||
|
arithmetic instead of IEEE single and double precision.
|
||
|
|
||
|
<br><dt><code>-mexplicit-relocs</code><dt><code>-mno-explicit-relocs</code><dd><a name="index-mexplicit_002drelocs-1624"></a><a name="index-mno_002dexplicit_002drelocs-1625"></a>Older Alpha assemblers provided no way to generate symbol relocations
|
||
|
except via assembler macros. Use of these macros does not allow
|
||
|
optimal instruction scheduling. GNU binutils as of version 2.12
|
||
|
supports a new syntax that allows the compiler to explicitly mark
|
||
|
which relocations should apply to which instructions. This option
|
||
|
is mostly useful for debugging, as GCC detects the capabilities of
|
||
|
the assembler when it is built and sets the default accordingly.
|
||
|
|
||
|
<br><dt><code>-msmall-data</code><dt><code>-mlarge-data</code><dd><a name="index-msmall_002ddata-1626"></a><a name="index-mlarge_002ddata-1627"></a>When <samp><span class="option">-mexplicit-relocs</span></samp> is in effect, static data is
|
||
|
accessed via <dfn>gp-relative</dfn> relocations. When <samp><span class="option">-msmall-data</span></samp>
|
||
|
is used, objects 8 bytes long or smaller are placed in a <dfn>small data area</dfn>
|
||
|
(the <code>.sdata</code> and <code>.sbss</code> sections) and are accessed via
|
||
|
16-bit relocations off of the <code>$gp</code> register. This limits the
|
||
|
size of the small data area to 64KB, but allows the variables to be
|
||
|
directly accessed via a single instruction.
|
||
|
|
||
|
<p>The default is <samp><span class="option">-mlarge-data</span></samp>. With this option the data area
|
||
|
is limited to just below 2GB. Programs that require more than 2GB of
|
||
|
data must use <code>malloc</code> or <code>mmap</code> to allocate the data in the
|
||
|
heap instead of in the program's data segment.
|
||
|
|
||
|
<p>When generating code for shared libraries, <samp><span class="option">-fpic</span></samp> implies
|
||
|
<samp><span class="option">-msmall-data</span></samp> and <samp><span class="option">-fPIC</span></samp> implies <samp><span class="option">-mlarge-data</span></samp>.
|
||
|
|
||
|
<br><dt><code>-msmall-text</code><dt><code>-mlarge-text</code><dd><a name="index-msmall_002dtext-1628"></a><a name="index-mlarge_002dtext-1629"></a>When <samp><span class="option">-msmall-text</span></samp> is used, the compiler assumes that the
|
||
|
code of the entire program (or shared library) fits in 4MB, and is
|
||
|
thus reachable with a branch instruction. When <samp><span class="option">-msmall-data</span></samp>
|
||
|
is used, the compiler can assume that all local symbols share the
|
||
|
same <code>$gp</code> value, and thus reduce the number of instructions
|
||
|
required for a function call from 4 to 1.
|
||
|
|
||
|
<p>The default is <samp><span class="option">-mlarge-text</span></samp>.
|
||
|
|
||
|
<br><dt><code>-mcpu=</code><var>cpu_type</var><dd><a name="index-mcpu-1630"></a>Set the instruction set and instruction scheduling parameters for
|
||
|
machine type <var>cpu_type</var>. You can specify either the ‘<samp><span class="samp">EV</span></samp>’
|
||
|
style name or the corresponding chip number. GCC supports scheduling
|
||
|
parameters for the EV4, EV5 and EV6 family of processors and
|
||
|
chooses the default values for the instruction set from the processor
|
||
|
you specify. If you do not specify a processor type, GCC defaults
|
||
|
to the processor on which the compiler was built.
|
||
|
|
||
|
<p>Supported values for <var>cpu_type</var> are
|
||
|
|
||
|
<dl>
|
||
|
<dt>‘<samp><span class="samp">ev4</span></samp>’<dt>‘<samp><span class="samp">ev45</span></samp>’<dt>‘<samp><span class="samp">21064</span></samp>’<dd>Schedules as an EV4 and has no instruction set extensions.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">ev5</span></samp>’<dt>‘<samp><span class="samp">21164</span></samp>’<dd>Schedules as an EV5 and has no instruction set extensions.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">ev56</span></samp>’<dt>‘<samp><span class="samp">21164a</span></samp>’<dd>Schedules as an EV5 and supports the BWX extension.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">pca56</span></samp>’<dt>‘<samp><span class="samp">21164pc</span></samp>’<dt>‘<samp><span class="samp">21164PC</span></samp>’<dd>Schedules as an EV5 and supports the BWX and MAX extensions.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">ev6</span></samp>’<dt>‘<samp><span class="samp">21264</span></samp>’<dd>Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">ev67</span></samp>’<dt>‘<samp><span class="samp">21264a</span></samp>’<dd>Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
|
||
|
</dl>
|
||
|
|
||
|
<p>Native toolchains also support the value ‘<samp><span class="samp">native</span></samp>’,
|
||
|
which selects the best architecture option for the host processor.
|
||
|
<samp><span class="option">-mcpu=native</span></samp> has no effect if GCC does not recognize
|
||
|
the processor.
|
||
|
|
||
|
<br><dt><code>-mtune=</code><var>cpu_type</var><dd><a name="index-mtune-1631"></a>Set only the instruction scheduling parameters for machine type
|
||
|
<var>cpu_type</var>. The instruction set is not changed.
|
||
|
|
||
|
<p>Native toolchains also support the value ‘<samp><span class="samp">native</span></samp>’,
|
||
|
which selects the best architecture option for the host processor.
|
||
|
<samp><span class="option">-mtune=native</span></samp> has no effect if GCC does not recognize
|
||
|
the processor.
|
||
|
|
||
|
<br><dt><code>-mmemory-latency=</code><var>time</var><dd><a name="index-mmemory_002dlatency-1632"></a>Sets the latency the scheduler should assume for typical memory
|
||
|
references as seen by the application. This number is highly
|
||
|
dependent on the memory access patterns used by the application
|
||
|
and the size of the external cache on the machine.
|
||
|
|
||
|
<p>Valid options for <var>time</var> are
|
||
|
|
||
|
<dl>
|
||
|
<dt>‘<samp><var>number</var></samp>’<dd>A decimal number representing clock cycles.
|
||
|
|
||
|
<br><dt>‘<samp><span class="samp">L1</span></samp>’<dt>‘<samp><span class="samp">L2</span></samp>’<dt>‘<samp><span class="samp">L3</span></samp>’<dt>‘<samp><span class="samp">main</span></samp>’<dd>The compiler contains estimates of the number of clock cycles for
|
||
|
“typical” EV4 & EV5 hardware for the Level 1, 2 & 3 caches
|
||
|
(also called Dcache, Scache, and Bcache), as well as to main memory.
|
||
|
Note that L3 is only valid for EV5.
|
||
|
|
||
|
</dl>
|
||
|
</dl>
|
||
|
|
||
|
</body></html>
|
||
|
|