BBS水木清华站∶精华区
MACHINE DEPENDENT OPTIONS
Each of the target machine types can have its own special
options, starting with `-m', to choose among various hard-
ware models or configurations--for example, 68010 vs
68020, floating coprocessor or none. A single installed
version of the compiler can compile for any model or con-
figuration, according to the options specified.
Some configurations of the compiler also support addition-
al special options, usually for command-line compatibility
with other compilers on the same platform.
These are the `-m' options defined for the 68000 series:
-m68000
-mc68000
Generate output for a 68000. This is the default
when the compiler is configured for 68000-based
systems.
-m68020
-mc68020
Generate output for a 68020 (rather than a 68000).
This is the default when the compiler is configured
for 68020-based systems.
-m68881
Generate output containing 68881 instructions for
floating point. This is the default for most
68020-based systems unless -nfp was specified when
the compiler was configured.
-m68030
Generate output for a 68030. This is the default
when the compiler is configured for 68030-based
systems.
-m68040
Generate output for a 68040. This is the default
when the compiler is configured for 68040-based
systems.
-m68020-40
Generate output for a 68040, without using any of
the new instructions. This results in code which
can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.
-mfpa Generate output containing Sun FPA instructions for
floating point.
-msoft-float
Generate output containing library calls for float-
ing point. WARNING: the requisite libraries are
not part of GNU CC. Normally the facilities of the
machine's usual C compiler are used, but this can't
be done directly in cross-compilation. You must
make your own arrangements to provide suitable li-
brary functions for cross-compilation.
-mshort
Consider type int to be 16 bits wide, like short
int.
-mnobitfield
Do not use the bit-field instructions. `-m68000'
implies `-mnobitfield'.
-mbitfield
Do use the bit-field instructions. `-m68020' im-
plies `-mbitfield'. This is the default if you use
the unmodified sources.
-mrtd Use a different function-calling convention, in
which functions that take a fixed number of argu-
ments return with the rtd instruction, which pops
their arguments while returning. This saves one
instruction in the caller since there is no need to
pop the arguments there.
This calling convention is incompatible with the
one normally used on Unix, so you cannot use it if
you need to call libraries compiled with the Unix
compiler.
Also, you must provide function prototypes for all
functions that take variable numbers of arguments
(including printf); otherwise incorrect code will
be generated for calls to those functions.
In addition, seriously incorrect code will result
if you call a function with too many arguments.
(Normally, extra arguments are harmlessly ignored.)
The rtd instruction is supported by the 68010 and
68020 processors, but not by the 68000.
These `-m' options are defined for the Vax:
-munix Do not output certain jump instructions (aobleq and
so on) that the Unix assembler for the Vax cannot
handle across long ranges.
-mgnu Do output those jump instructions, on the assump-
tion that you will assemble with the GNU assembler.
-mg Output code for g-format floating point numbers in-
stead of d-format.
These `-m' switches are supported on the SPARC:
-mfpu
-mhard-float
Generate output containing floating point instruc-
tions. This is the default.
-mno-fpu
-msoft-float
Generate output containing library calls for float-
ing point. Warning: there is no GNU floating-point
library for SPARC. Normally the facilities of the
machine's usual C compiler are used, but this can-
not be done directly in cross-compilation. You
must make your own arrangements to provide suitable
library functions for cross-compilation.
-msoft-float changes the calling convention in the
output file; therefore, it is only useful if you
compile all of a program with this option.
-mno-epilogue
-mepilogue
With -mepilogue (the default), the compiler always
emits code for function exit at the end of each
function. Any function exit in the middle of the
function (such as a return statement in C) will
generate a jump to the exit code at the end of the
function.
With -mno-epilogue, the compiler tries to emit exit
code inline at every function exit.
-mno-v8
-mv8
-msparclite
These three options select variations on the SPARC
architecture.
By default (unless specifically configured for the
Fujitsu SPARClite), GCC generates code for the v7
variant of the SPARC architecture.
-mv8 will give you SPARC v8 code. The only differ-
ence from v7 code is that the compiler emits the
integer multiply and integer divide instructions
which exist in SPARC v8 but not in SPARC v7.
-msparclite will give you SPARClite code. This
adds the integer multiply, integer divide step and
scan (ffs) instructions which exist in SPARClite
but not in SPARC v7.
-mcypress
-msupersparc
These two options select the processor for which
the code is optimised.
With -mcypress (the default), the compiler optimis-
es code for the Cypress CY7C602 chip, as used in
the SparcStation/SparcServer 3xx series. This is
also appropriate for the older SparcStation 1, 2,
IPX etc.
With -msupersparc the compiler optimises code for
the SuperSparc cpu, as used in the SparcStation 10,
1000 and 2000 series. This flag also enables use of
the full SPARC v8 instruction set.
These `-m' options are defined for the Convex:
-mc1 Generate output for a C1. This is the default when
the compiler is configured for a C1.
-mc2 Generate output for a C2. This is the default when
the compiler is configured for a C2.
-margcount
Generate code which puts an argument count in the
word preceding each argument list. Some non-
portable Convex and Vax programs need this word.
(Debuggers don't, except for functions with vari-
able-length argument lists; this info is in the
symbol table.)
-mnoargcount
Omit the argument count word. This is the default
if you use the unmodified sources.
These `-m' options are defined for the AMD Am29000:
-mdw Generate code that assumes the DW bit is set, i.e.,
that byte and halfword operations are directly sup-
ported by the hardware. This is the default.
-mnodw Generate code that assumes the DW bit is not set.
-mbw Generate code that assumes the system supports byte
and halfword write operations. This is the de-
fault.
-mnbw Generate code that assumes the systems does not
support byte and halfword write operations. This
implies `-mnodw'.
-msmall
Use a small memory model that assumes that all
function addresses are either within a single 256
KB segment or at an absolute address of less than
256K. This allows the call instruction to be used
instead of a const, consth, calli sequence.
-mlarge
Do not assume that the call instruction can be
used; this is the default.
-m29050
Generate code for the Am29050.
-m29000
Generate code for the Am29000. This is the de-
fault.
-mkernel-registers
Generate references to registers gr64-gr95 instead
of gr96-gr127. This option can be used when com-
piling kernel code that wants a set of global reg-
isters disjoint from that used by user-mode code.
Note that when this option is used, register names
in `-f' flags must use the normal, user-mode,
names.
-muser-registers
Use the normal set of global registers, gr96-gr127.
This is the default.
-mstack-check
Insert a call to __msp_check after each stack ad-
justment. This is often used for kernel code.
These `-m' moptions are defined for Motorola 88K architec-
tures:
-m88000
Generate code that works well on both the m88100
and the m88110.
-m88100
Generate code that works best for the m88100, but
that also runs on the m88110.
-m88110
Generate code that works best for the m88110, and
may not run on the m88100.
-midentify-revision
Include an ident directive in the assembler output
recording the source file name, compiler name and
version, timestamp, and compilation flags used.
-mno-underscores
In assembler output, emit symbol names without
adding an underscore character at the beginning of
each name. The default is to use an underscore as
prefix on each name.
-mno-check-zero-division
-mcheck-zero-division
Early models of the 88K architecture had problems
with division by zero; in particular, many of them
didn't trap. Use these options to avoid including
(or to include explicitly) additional code to de-
tect division by zero and signal an exception. All
GCC configurations for the 88K use
`-mcheck-zero-division' by default.
-mocs-debug-info
-mno-ocs-debug-info
Include (or omit) additional debugging information
(about registers used in each stack frame) as spec-
ified in the 88Open Object Compatibility Standard,
"OCS". This extra information is not needed by
GDB. The default for DG/UX, SVr4, and Delta 88
SVr3.2 is to include this information; other 88k
configurations omit this information by default.
-mocs-frame-position
-mno-ocs-frame-position
Force (or do not require) register values to be
stored in a particular place in stack frames, as
specified in OCS. The DG/UX, Delta88 SVr3.2, and
BCS configurations use `-mocs-frame-position'; oth-
er 88k configurations have the default
`-mno-ocs-frame-position'.
-moptimize-arg-area
-mno-optimize-arg-area
Control how to store function arguments in stack
frames. `-moptimize-arg-area' saves space, but may
break some debuggers (not GDB).
`-mno-optimize-arg-area' conforms better to stan-
dards. By default GCC does not optimize the argu-
ment area.
-mshort-data-num
num Generate smaller data references by making them
relative to r0, which allows loading a value using
a single instruction (rather than the usual two).
You control which data references are affected by
specifying num with this option. For example, if
you specify `-mshort-data-512', then the data ref-
erences affected are those involving displacements
of less than 512 bytes. `-mshort-data-num' is not
effective for num greater than 64K.
-mserialize-volatile
-mno-serialize-volatile
Do, or do not, generate code to guarantee sequen-
tial consistency of volatile memory references.
GNU CC always guarantees consistency by default,
for the preferred processor submodel. How this is
done depends on the submodel.
The m88100 processor does not reorder memory refer-
ences and so always provides sequential consisten-
cy. If you use `-m88100', GNU CC does not generate
any special instructions for sequential consisten-
cy.
The order of memory references made by the m88110
processor does not always match the order of the
instructions requesting those references. In par-
ticular, a load instruction may execute before a
preceding store instruction. Such reordering vio-
lates sequential consistency of volatile memory
references, when there are multiple processors.
When you use `-m88000' or `-m88110', GNU CC gener-
ates special instructions when appropriate, to
force execution in the proper order.
The extra code generated to guarantee consistency
may affect the performance of your application. If
you know that you can safely forgo this guarantee,
you may use the option `-mno-serialize-volatile'.
If you use the `-m88100' option but require sequen-
tial consistency when running on the m88110 proces-
sor, you should use `-mserialize-volatile'.
-msvr4
-msvr3 Turn on (`-msvr4') or off (`-msvr3') compiler ex-
tensions related to System V release 4 (SVr4).
This controls the following:
o Which variant of the assembler syntax to emit
(which you can select independently using
`-mversion-03.00').
o `-msvr4' makes the C preprocessor recognize `#prag-
ma weak'
o `-msvr4' makes GCC issue additional declaration di-
rectives used in SVr4.
`-msvr3' is the default for all m88K configurations except
the SVr4 configuration.
-mtrap-large-shift
-mhandle-large-shift
Include code to detect bit-shifts of more than 31
bits; respectively, trap such shifts or emit code
to handle them properly. By default GCC makes no
special provision for large bit shifts.
-muse-div-instruction
Very early models of the 88K architecture didn't
have a divide instruction, so GCC avoids that in-
struction by default. Use this option to specify
that it's safe to use the divide instruction.
-mversion-03.00
In the DG/UX configuration, there are two flavors
of SVr4. This option modifies -msvr4 to select
whether the hybrid-COFF or real-ELF flavor is used.
All other configurations ignore this option.
-mwarn-passed-structs
Warn when a function passes a struct as an argument
or result. Structure-passing conventions have
changed during the evolution of the C language, and
are often the source of portability problems. By
default, GCC issues no such warning.
These options are defined for the IBM RS6000:
-mfp-in-toc
-mno-fp-in-toc
Control whether or not floating-point constants go
in the Table of Contents (TOC), a table of all
global variable and function addresses. By default
GCC puts floating-point constants there; if the TOC
overflows, `-mno-fp-in-toc' will reduce the size of
the TOC, which may avoid the overflow.
These `-m' options are defined for the IBM RT PC:
-min-line-mul
Use an in-line code sequence for integer multi-
plies. This is the default.
-mcall-lib-mul
Call lmul$$ for integer multiples.
-mfull-fp-blocks
Generate full-size floating point data blocks, in-
cluding the minimum amount of scratch space recom-
mended by IBM. This is the default.
-mminimum-fp-blocks
Do not include extra scratch space in floating
point data blocks. This results in smaller code,
but slower execution, since scratch space must be
allocated dynamically.
-mfp-arg-in-fpregs
Use a calling sequence incompatible with the IBM
calling convention in which floating point argu-
ments are passed in floating point registers. Note
that varargs.h and stdargs.h will not work with
floating point operands if this option is speci-
fied.
-mfp-arg-in-gregs
Use the normal calling convention for floating
point arguments. This is the default.
-mhc-struct-return
Return structures of more than one word in memory,
rather than in a register. This provides compati-
bility with the MetaWare HighC (hc) compiler. Use
`-fpcc-struct-return' for compatibility with the
Portable C Compiler (pcc).
-mnohc-struct-return
Return some structures of more than one word in
registers, when convenient. This is the default.
For compatibility with the IBM-supplied compilers,
use either `-fpcc-struct-return' or
`-mhc-struct-return'.
These `-m' options are defined for the MIPS family of com-
puters:
-mcpu=cpu-type
Assume the defaults for the machine type cpu-type
when scheduling instructions. The default cpu-type
is default, which picks the longest cycles times
for any of the machines, in order that the code run
at reasonable rates on all MIPS cpu's. Other
choices for cpu-type are r2000, r3000, r4000, and
r6000. While picking a specific cpu-type will
schedule things appropriately for that particular
chip, the compiler will not generate any code that
does not meet level 1 of the MIPS ISA (instruction
set architecture) without the -mips2 or -mips3
switches being used.
-mips2 Issue instructions from level 2 of the MIPS ISA
(branch likely, square root instructions). The
-mcpu=r4000 or -mcpu=r6000 switch must be used in
conjunction with -mips2.
-mips3 Issue instructions from level 3 of the MIPS ISA (64
bit instructions). The -mcpu=r4000 switch must be
used in conjunction with -mips2.
-mint64
-mlong64
-mlonglong128
These options don't work at present.
-mmips-as
Generate code for the MIPS assembler, and invoke
mips-tfile to add normal debug information. This
is the default for all platforms except for the
OSF/1 reference platform, using the OSF/rose object
format. If any of the -ggdb, -gstabs, or -gstabs+
switches are used, the mips-tfile program will en-
capsulate the stabs within MIPS ECOFF.
-mgas Generate code for the GNU assembler. This is the
default on the OSF/1 reference platform, using the
OSF/rose object format.
-mrnames
-mno-rnames
The -mrnames switch says to output code using the
MIPS software names for the registers, instead of
the hardware names (ie, a0 instead of $4). The GNU
assembler does not support the -mrnames switch, and
the MIPS assembler will be instructed to run the
MIPS C preprocessor over the source file. The
-mno-rnames switch is default.
-mgpopt
-mno-gpopt
The -mgpopt switch says to write all of the data
declarations before the instructions in the text
section, to all the MIPS assembler to generate one
word memory references instead of using two words
for short global or static data items. This is on
by default if optimization is selected.
-mstats
-mno-stats
For each non-inline function processed, the -mstats
switch causes the compiler to emit one line to the
standard error file to print statistics about the
program (number of registers saved, stack size,
etc.).
-mmemcpy
-mno-memcpy
The -mmemcpy switch makes all block moves call the
appropriate string function (memcpy or bcopy) in-
stead of possibly generating inline code.
-mmips-tfile
-mno-mips-tfile
The -mno-mips-tfile switch causes the compiler not
postprocess the object file with the mips-tfile
program, after the MIPS assembler has generated it
to add debug support. If mips-tfile is not run,
then no local variables will be available to the
debugger. In addition, stage2 and stage3 objects
will have the temporary file names passed to the
assembler embedded in the object file, which means
the objects will not compare the same.
-msoft-float
Generate output containing library calls for float-
ing point. WARNING: the requisite libraries are
not part of GNU CC. Normally the facilities of the
machine's usual C compiler are used, but this can't
be done directly in cross-compilation. You must
make your own arrangements to provide suitable li-
brary functions for cross-compilation.
-mhard-float
Generate output containing floating point instruc-
tions. This is the default if you use the unmodi-
fied sources.
-mfp64 Assume that the FR bit in the status word is on,
and that there are 32 64-bit floating point regis-
ters, instead of 32 32-bit floating point regis-
ters. You must also specify the -mcpu=r4000 and
-mips3 switches.
-mfp32 Assume that there are 32 32-bit floating point reg-
isters. This is the default.
-mabicalls
-mno-abicalls
Emit (or do not emit) the .abicalls, .cpload, and
.cprestore pseudo operations that some System V.4
ports use for position independent code.
-mhalf-pic
-mno-half-pic
The -mhalf-pic switch says to put pointers to ex-
tern references into the data section and load them
up, rather than put the references in the text sec-
tion. This option does not work at present. -Gnum
Put global and static items less than or equal to
num bytes into the small data or bss sections in-
stead of the normal data or bss section. This al-
lows the assembler to emit one word memory refer-
ence instructions based on the global pointer (gp
or $28), instead of the normal two words used. By
default, num is 8 when the MIPS assembler is used,
and 0 when the GNU assembler is used. The -Gnum
switch is also passed to the assembler and linker.
All modules should be compiled with the same -Gnum
value.
-nocpp Tell the MIPS assembler to not run it's preproces-
sor over user assembler files (with a `.s' suffix)
when assembling them.
These `-m' options are defined for the Intel 80386 family
of computers: -m486
-mno-486
Control whether or not code is optimized for a 486
instead of an 386. Code generated for a 486 will
run on a 386 and vice versa.
-msoft-float
Generate output containing library calls for float-
ing point. Warning: the requisite libraries are
not part of GNU CC. Normally the facilities of the
machine's usual C compiler are used, but this can't
be done directly in cross-compilation. You must
make your own arrangements to provide suitable li-
brary functions for cross-compilation.
On machines where a function returns floating point
results in the 80387 register stack, some floating
point opcodes may be emitted even if `-msoft-float'
is used.
-mno-fp-ret-in-387
Do not use the FPU registers for return values of
functions.
The usual calling convention has functions return
values of types float and double in an FPU regis-
ter, even if there is no FPU. The idea is that the
operating system should emulate an FPU.
The option `-mno-fp-ret-in-387' causes such values
to be returned in ordinary CPU registers instead.
These `-m' options are defined for the HPPA family of com-
puters:
-mpa-risc-1-0
Generate code for a PA 1.0 processor.
-mpa-risc-1-1
Generate code for a PA 1.1 processor.
-mkernel
Generate code which is suitable for use in kernels.
Specifically, avoid add instructions in which one
of the arguments is the DP register; generate addil
instructions instead. This avoids a rather serious
bug in the HP-UX linker.
-mshared-libs
Generate code that can be linked against HP-UX
shared libraries. This option is not fully func-
tion yet, and is not on by default for any PA tar-
get. Using this option can cause incorrect code to
be generated by the compiler.
-mno-shared-libs
Don't generate code that will be linked against
shared libraries. This is the default for all PA
targets.
-mlong-calls
Generate code which allows calls to functions
greater than 256K away from the caller when the
caller and callee are in the same source file. Do
not turn this option on unless code refuses to link
with "branch out of range errors from the linker.
-mdisable-fpregs
Prevent floating point registers from being used in
any manner. This is necessary for compiling ker-
nels which perform lazy context switching of float-
ing point registers. If you use this option and
attempt to perform floating point operations, the
compiler will abort.
-mdisable-indexing
Prevent the compiler from using indexing address
modes. This avoids some rather obscure problems
when compiling MIG generated code under MACH.
-mtrailing-colon
Add a colon to the end of label definitions (for
ELF assemblers).
These `-m' options are defined for the Intel 80960 family
of computers:
-mcpu-type
Assume the defaults for the machine type cpu-type
for instruction and addressing-mode availability
and alignment. The default cpu-type is kb; other
choices are ka, mc, ca, cf, sa, and sb.
-mnumerics
-msoft-float
The -mnumerics option indicates that the processor
does support floating-point instructions. The
-msoft-float option indicates that floating-point
support should not be assumed.
-mleaf-procedures
-mno-leaf-procedures
Do (or do not) attempt to alter leaf procedures to
be callable with the bal instruction as well as
call. This will result in more efficient code for
explicit calls when the bal instruction can be sub-
stituted by the assembler or linker, but less effi-
cient code in other cases, such as calls via func-
tion pointers, or using a linker that doesn't sup-
port this optimization.
-mtail-call
-mno-tail-call
Do (or do not) make additional attempts (beyond
those of the machine-independent portions of the
compiler) to optimize tail-recursive calls into
branches. You may not want to do this because the
detection of cases where this is not valid is not
totally complete. The default is -mno-tail-call.
-mcomplex-addr
-mno-complex-addr
Assume (or do not assume) that the use of a complex
addressing mode is a win on this implementation of
the i960. Complex addressing modes may not be
worthwhile on the K-series, but they definitely are
on the C-series. The default is currently -mcom-
plex-addr for all processors except the CB and CC.
-mcode-align
-mno-code-align
Align code to 8-byte boundaries for faster fetching
(or don't bother). Currently turned on by default
for C-series implementations only.
-mic-compat
-mic2.0-compat
-mic3.0-compat
Enable compatibility with iC960 v2.0 or v3.0.
-masm-compat
-mintel-asm
Enable compatibility with the iC960 assembler.
-mstrict-align
-mno-strict-align
Do not permit (do permit) unaligned accesses.
-mold-align
Enable structure-alignment compatibility with In-
tel's gcc release version 1.3 (based on gcc 1.37).
Currently this is buggy in that #pragma align 1 is
always assumed as well, and cannot be turned off.
These `-m' options are defined for the DEC Alpha implemen-
tations:
-mno-soft-float
-msoft-float
Use (do not use) the hardware floating-point in-
structions for floating-point operations. When
-msoft-float is specified, functions in `libgcc1.c'
will be 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 will 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.
Note that Alpha implementations without floating-
point operations are required to have floating-
point registers.
-mfp-reg
-mno-fp-regs
Generate code that uses (does not use) the float-
ing-point register set. -mno-fp-regs implies
-msoft-float. 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 $0 instead of
$f0. This is a non-standard calling sequence, so
any function with a floating-point argument or re-
turn value called by code compiled with -mno-fp-
regs must also be compiled with that option.
A typical use of this option is building a kernel
that does not use, and hence need not save and re-
store, any floating-point registers.
These additional options are available on System V Release
4 for compatibility with other compilers on those systems:
-G On SVr4 systems, gcc accepts the option `-G' (and
passes it to the system linker), for compatibility
with other compilers. However, we suggest you use
`-symbolic' or `-shared' as appropriate, instead of
supplying linker options on the gcc command line.
-Qy Identify the versions of each tool used by the com-
piler, in a .ident assembler directive in the out-
put.
-Qn Refrain from adding .ident directives to the output
file (this is the default).
-YP,dirs
Search the directories dirs, and no others, for li-
braries specified with `-l'. You can separate di-
rectory entries in dirs from one another with
colons.
-Ym,dir
Look in the directory dir to find the M4 preproces-
sor. The assembler uses this option.
BBS水木清华站∶精华区