This is ../../gcc-3.4/gcc/doc/gcc.info, produced by makeinfo version
4.2 from ../../gcc-3.4/gcc/doc/gcc.texi.

Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003 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.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "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.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
* gcc: (gcc).                  The GNU Compiler Collection.
END-INFO-DIR-ENTRY
   This file documents the use of the GNU compilers.

   Published by the Free Software Foundation
59 Temple Place - Suite 330
Boston, MA 02111-1307 USA

File: gcc.info,  Node: RT Options,  Next: MIPS Options,  Prev: Darwin Options,  Up: Submodel Options

IBM RT Options
--------------

   These `-m' options are defined for the IBM RT PC:

`-min-line-mul'
     Use an in-line code sequence for integer multiplies.  This is the
     default.

`-mcall-lib-mul'
     Call `lmul$$' for integer multiples.

`-mfull-fp-blocks'
     Generate full-size floating point data blocks, including the
     minimum amount of scratch space recommended 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 arguments are passed in
     floating point registers.  Note that `stdarg.h' will not work with
     floating point operands if this option is specified.

`-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 compatibility with the MetaWare HighC (hc)
     compiler.  Use the option `-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 the option `-fpcc-struct-return' or the
     option `-mhc-struct-return'.


File: gcc.info,  Node: MIPS Options,  Next: i386 and x86-64 Options,  Prev: RT Options,  Up: Submodel Options

MIPS Options
------------

   These `-m' options are defined for the MIPS family of computers:

`-march=ARCH'
     Generate code that will run on ARCH, which can be the name of a
     generic MIPS ISA, or the name of a particular processor.  The ISA
     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
     `mips32r2', and `mips64'.  The processor names are: `4kc', `4kp',
     `5kc', `20kc', `m4k', `r2000', `r3000', `r3900', `r4000', `r4400',
     `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `orion',
     `sb1', `vr4100', `vr4111', `vr4120', `vr4300', `vr5000', `vr5400'
     and `vr5500'.  The special value `from-abi' selects the most
     compatible architecture for the selected ABI (that is, `mips1' for
     32-bit ABIs and `mips3' for 64-bit ABIs).

     In processor names, a final `000' can be abbreviated as `k' (for
     example, `-march=r2k').  Prefixes are optional, and `vr' may be
     written `r'.

     GCC defines two macros based on the value of this option.  The
     first is `_MIPS_ARCH', which gives the name of target
     architecture, as a string.  The second has the form
     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
     `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
     to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.

     Note that the `_MIPS_ARCH' macro uses the processor names given
     above.  In other words, it will have the full prefix and will not
     abbreviate `000' as `k'.  In the case of `from-abi', the macro
     names the resolved architecture (either `"mips1"' or `"mips3"').
     It names the default architecture when no `-march' option is given.

`-mtune=ARCH'
     Optimize for ARCH.  Among other things, this option controls the
     way instructions are scheduled, and the perceived cost of
     arithmetic operations.  The list of ARCH values is the same as for
     `-march'.

     When this option is not used, GCC will optimize for the processor
     specified by `-march'.  By using `-march' and `-mtune' together,
     it is possible to generate code that will run on a family of
     processors, but optimize the code for one particular member of
     that family.

     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
     which work in the same way as the `-march' ones described above.

`-mips1'
     Equivalent to `-march=mips1'.

`-mips2'
     Equivalent to `-march=mips2'.

`-mips3'
     Equivalent to `-march=mips3'.

`-mips4'
     Equivalent to `-march=mips4'.

`-mips32'
     Equivalent to `-march=mips32'.

`-mips32r2'
     Equivalent to `-march=mips32r2'.

`-mips64'
     Equivalent to `-march=mips64'.

`-mfused-madd'
`-mno-fused-madd'
     Generate code that uses (does not use) the floating point multiply
     and accumulate instructions, when they are available.  These
     instructions are generated by default if they are available, but
     this may be undesirable if the extra precision causes problems or
     on certain chips in the mode where denormals are rounded to zero
     where denormals generated by multiply and accumulate instructions
     cause exceptions anyway.

`-mfp32'
     Assume that floating point registers are 32 bits wide.

`-mfp64'
     Assume that floating point registers are 64 bits wide.

`-mgp32'
     Assume that general purpose registers are 32 bits wide.

`-mgp64'
     Assume that general purpose registers are 64 bits wide.

`-mint64'
     Force int and long types to be 64 bits wide.  See `-mlong32' for an
     explanation of the default, and the width of pointers.

`-mlong64'
     Force long types to be 64 bits wide.  See `-mlong32' for an
     explanation of the default, and the width of pointers.

`-mlong32'
     Force long, int, and pointer types to be 32 bits wide.

     The default size of ints, longs and pointers depends on the ABI.
     All the supported ABIs use 32-bit ints.  The n64 ABI uses 64-bit
     longs, as does the 64-bit Cygnus EABI; the others use 32-bit
     longs.  Pointers are the same size as longs, or the same size as
     integer registers, whichever is smaller.

`-mabi=32'
`-mabi=o64'
`-mabi=n32'
`-mabi=64'
`-mabi=eabi'
`-mabi=meabi'
     Generate code for the given ABI.

     Note that there are two embedded ABIs: `-mabi=eabi' selects the
     one defined by Cygnus while `-meabi=meabi' selects the one defined
     by MIPS.  Both these ABIs have 32-bit and 64-bit variants.
     Normally, GCC will generate 64-bit code when you select a 64-bit
     architecture, but you can use `-mgp32' to get 32-bit code instead.

`-mabi-fake-default'
     You don't want to know what this option does.  No, really.  I mean
     it.  Move on to the next option.

     What?  You're still here?  Oh, well....  Ok, here's the deal.  GCC
     wants the default set of options to get the root of the multilib
     tree, and the shared library SONAMEs without any
     multilib-indicating suffixes.  This is not convenience for
     `mips64-linux-gnu', since we want to default to the N32 ABI, while
     still being binary-compatible with `mips-linux-gnu' if you stick
     to the O32 ABI.  Being binary-compatible means shared libraries
     should have the same SONAMEs, and libraries should live in the
     same location.  Having O32 libraries in a sub-directory named say
     `o32' is not acceptable.

     So we trick GCC into believing that O32 is the default ABI, except
     that we override the default with some internal command-line
     processing magic.  Problem is, if we stopped at that, and you then
     created a multilib-aware package that used the output of `gcc
     -print-multi-lib' to decide which multilibs to build, and how, and
     you'd find yourself in an awkward situation when you found out that
     some of the options listed ended up mapping to the same multilib,
     and none of your libraries was actually built for the multilib that
     `-print-multi-lib' claims to be the default.  So we added this
     option that disables the default switcher, falling back to GCC's
     original notion of the default library.  Confused yet?

     For short: don't ever use this option, unless you find it in the
     list of additional options to be used when building for multilibs,
     in the output of `gcc -print-multi-lib'.

`-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 the either of the `-gstabs' or
     `-gstabs+' switches are used, the `mips-tfile' program will
     encapsulate 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.  Also,
     this is the default if the configure option `--with-gnu-as' is
     used.

`-msplit-addresses'
`-mno-split-addresses'
     Generate code to load the high and low parts of address constants
     separately.  This allows GCC to optimize away redundant loads of
     the high order bits of addresses.  This optimization requires GNU
     as and GNU ld.  This optimization is enabled by default for some
     embedded targets where GNU as and GNU ld are standard.

`-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 only known assembler that supports this option
     is the Algorithmics assembler.

`-mmemcpy'
`-mno-memcpy'
     The `-mmemcpy' switch makes all block moves call the appropriate
     string function (`memcpy' or `bcopy') instead 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.
     The `-mno-mips-tfile' switch should only be used when there are
     bugs in the `mips-tfile' program that prevents compilation.

`-msoft-float'
     Generate output containing library calls for floating point.
     *Warning:* the requisite libraries are not part of GCC.  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 library functions for
     cross-compilation.

`-mhard-float'
     Generate output containing floating point instructions.  This is
     the default if you use the unmodified sources.

`-mabicalls'
`-mno-abicalls'
     Emit (or do not emit) the pseudo operations `.abicalls',
     `.cpload', and `.cprestore' that some System V.4 ports use for
     position independent code.

`-mlong-calls'
`-mno-long-calls'
     Do all calls with the `JALR' instruction, which requires loading
     up a function's address into a register before the call.  You need
     to use this switch, if you call outside of the current 512
     megabyte segment to functions that are not through pointers.

`-membedded-pic'
`-mno-embedded-pic'
     Generate PIC code suitable for some embedded systems.  All calls
     are made using PC relative address, and all data is addressed
     using the $gp register.  No more than 65536 bytes of global data
     may be used.  This requires GNU as and GNU ld which do most of the
     work.  This currently only works on targets which use ECOFF; it
     does not work with ELF.

`-membedded-data'
`-mno-embedded-data'
     Allocate variables to the read-only data section first if
     possible, then next in the small data section if possible,
     otherwise in data.  This gives slightly slower code than the
     default, but reduces the amount of RAM required when executing,
     and thus may be preferred for some embedded systems.

`-muninit-const-in-rodata'
`-mno-uninit-const-in-rodata'
     When used together with `-membedded-data', it will always store
     uninitialized const variables in the read-only data section.

`-msingle-float'
`-mdouble-float'
     The `-msingle-float' switch tells gcc to assume that the floating
     point coprocessor only supports single precision operations, as on
     the `r4650' chip.  The `-mdouble-float' switch permits gcc to use
     double precision operations.  This is the default.

`-mmad'
`-mno-mad'
     Permit use of the `mad', `madu' and `mul' instructions, as on the
     `r4650' chip.

`-m4650'
     Turns on `-msingle-float', `-mmad', and, at least for now,
     `-mcpu=r4650'.

`-mips16'
`-mno-mips16'
     Enable 16-bit instructions.

`-mentry'
     Use the entry and exit pseudo ops.  This option can only be used
     with `-mips16'.

`-EL'
     Compile code for the processor in little endian mode.  The
     requisite libraries are assumed to exist.

`-EB'
     Compile code for the processor in big endian mode.  The requisite
     libraries are assumed to exist.

`-G NUM'
     Put global and static items less than or equal to NUM bytes into
     the small data or bss sections instead of the normal data or bss
     section.  This allows the assembler to emit one word memory
     reference 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 `-G NUM' switch is also passed to the assembler and linker.
     All modules should be compiled with the same `-G NUM' value.

`-nocpp'
     Tell the MIPS assembler to not run its preprocessor over user
     assembler files (with a `.s' suffix) when assembling them.

`-mfix7000'
     Pass an option to gas which will cause nops to be inserted if the
     read of the destination register of an mfhi or mflo instruction
     occurs in the following two instructions.

`-mfix-sb1'
`-mno-fix-sb1'
     Work around certain SB-1 CPU core errata.  (This flag currently
     works around the SB-1 revision 2 "F1" and "F2" floating point
     errata.)

`-no-crt0'
     Do not include the default crt0.

`-mflush-func=FUNC'
`-mno-flush-func'
     Specifies the function to call to flush the I and D caches, or to
     not call any such function.  If called, the function must take the
     same arguments as the common `_flush_func()', that is, the address
     of the memory range for which the cache is being flushed, the size
     of the memory range, and the number 3 (to flush both caches).  The
     default depends on the target gcc was configured for, but commonly
     is either `_flush_func' or `__cpu_flush'.

`-mbranch-likely'
`-mno-branch-likely'
     Enable or disable use of Branch Likely instructions, regardless of
     the default for the selected architecture.  By default, Branch
     Likely instructions may be generated if they are supported by the
     selected architecture.  An exception is for the MIPS32 and MIPS64
     architectures and processors which implement those architectures;
     for those, Branch Likely instructions will not be generated by
     default because the MIPS32 and MIPS64 architectures specifically
     deprecate their use.


File: gcc.info,  Node: i386 and x86-64 Options,  Next: HPPA Options,  Prev: MIPS Options,  Up: Submodel Options

Intel 386 and AMD x86-64 Options
--------------------------------

   These `-m' options are defined for the i386 and x86-64 family of
computers:

`-mtune=CPU-TYPE'
     Tune to CPU-TYPE everything applicable about the generated code,
     except for the ABI and the set of available instructions.  The
     choices for CPU-TYPE are `i386', `i486', `i586', `i686',
     `pentium', `pentium-mmx', `pentiumpro', `pentium2', `pentium3',
     `pentium4', `k6', `k6-2', `k6-3', `athlon', `athlon-tbird',
     `athlon-4', `athlon-xp', `athlon-mp', `winchip-c6', `winchip2',
     `k8', `c3' and `c3-2'.

     While picking a specific CPU-TYPE will schedule things
     appropriately for that particular chip, the compiler will not
     generate any code that does not run on the i386 without the
     `-march=CPU-TYPE' option being used.  `i586' is equivalent to
     `pentium' and `i686' is equivalent to `pentiumpro'.  `k6' and
     `athlon' are the AMD chips as opposed to the Intel ones.

`-march=CPU-TYPE'
     Generate instructions for the machine type CPU-TYPE.  The choices
     for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
     `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.

`-mcpu=CPU-TYPE'
     A deprecated synonym for `-mtune'.

`-m386'
`-m486'
`-mpentium'
`-mpentiumpro'
     These options are synonyms for `-mtune=i386', `-mtune=i486',
     `-mtune=pentium', and `-mtune=pentiumpro' respectively.  These
     synonyms are deprecated.

`-mfpmath=UNIT'
     generate floating point arithmetics for selected unit UNIT.  the
     choices for UNIT are:

    `387'
          Use the standard 387 floating point coprocessor present
          majority of chips and emulated otherwise.  Code compiled with
          this option will run almost everywhere.  The temporary
          results are computed in 80bit precision instead of precision
          specified by the type resulting in slightly different results
          compared to most of other chips. See `-ffloat-store' for more
          detailed description.

          This is the default choice for i386 compiler.

    `sse'
          Use scalar floating point instructions present in the SSE
          instruction set.  This instruction set is supported by
          Pentium3 and newer chips, in the AMD line by Athlon-4,
          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
          instruction set supports only single precision arithmetics,
          thus the double and extended precision arithmetics is still
          done using 387.  Later version, present only in Pentium4 and
          the future AMD x86-64 chips supports double precision
          arithmetics too.

          For i387 you need to use `-march=CPU-TYPE', `-msse' or
          `-msse2' switches to enable SSE extensions and make this
          option effective.  For x86-64 compiler, these extensions are
          enabled by default.

          The resulting code should be considerably faster in majority
          of cases and avoid the numerical instability problems of 387
          code, but may break some existing code that expects
          temporaries to be 80bit.

          This is the default choice for x86-64 compiler.

    `pni'
          Use all SSE extensions enabled by `-msse2' as well as the new
          SSE extensions in Prescott New Instructions. `-mpni' also
          enables 2 builtin functions, `__builtin_ia32_monitor' and
          `__builtin_ia32_mwait', for new instructions `monitor' and
          `mwait'.

    `sse,387'
          Attempt to utilize both instruction sets at once.  This
          effectively double the amount of available registers and on
          chips with separate execution units for 387 and SSE the
          execution resources too.  Use this option with care, as it is
          still experimental, because gcc register allocator does not
          model separate functional units well resulting in instable
          performance.

`-masm=DIALECT'
     Output asm instructions using selected DIALECT. Supported choices
     are `intel' or `att' (the default one).

`-mieee-fp'
`-mno-ieee-fp'
     Control whether or not the compiler uses IEEE floating point
     comparisons.  These handle correctly the case where the result of a
     comparison is unordered.

`-msoft-float'
     Generate output containing library calls for floating point.
     *Warning:* the requisite libraries are not part of GCC.  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 library 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 register, 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.

`-mno-fancy-math-387'
     Some 387 emulators do not support the `sin', `cos' and `sqrt'
     instructions for the 387.  Specify this option to avoid generating
     those instructions.  This option is the default on FreeBSD,
     OpenBSD and NetBSD.  This option is overridden when `-march'
     indicates that the target cpu will always have an FPU and so the
     instruction will not need emulation.  As of revision 2.6.1, these
     instructions are not generated unless you also use the
     `-funsafe-math-optimizations' switch.

`-malign-double'
`-mno-align-double'
     Control whether GCC aligns `double', `long double', and `long
     long' variables on a two word boundary or a one word boundary.
     Aligning `double' variables on a two word boundary will produce
     code that runs somewhat faster on a `Pentium' at the expense of
     more memory.

     *Warning:* if you use the `-malign-double' switch, structures
     containing the above types will be aligned differently than the
     published application binary interface specifications for the 386
     and will not be binary compatible with structures in code compiled
     without that switch.

`-m96bit-long-double'

`-m128bit-long-double'
     These switches control the size of `long double' type. The i386
     application binary interface specifies the size to be 96 bits, so
     `-m96bit-long-double' is the default in 32 bit mode.

     Modern architectures (Pentium and newer) would prefer `long double'
     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
     conforming to the ABI, this would not be possible.  So specifying a
     `-m128bit-long-double' will align `long double' to a 16 byte
     boundary by padding the `long double' with an additional 32 bit
     zero.

     In the x86-64 compiler, `-m128bit-long-double' is the default
     choice as its ABI specifies that `long double' is to be aligned on
     16 byte boundary.

     Notice that neither of these options enable any extra precision
     over the x87 standard of 80 bits for a `long double'.

     *Warning:* if you override the default value for your target ABI,
     the structures and arrays containing `long double' will change
     their size as well as function calling convention for function
     taking `long double' will be modified.  Hence they will not be
     binary compatible with arrays or structures in code compiled
     without that switch.

`-msvr3-shlib'
`-mno-svr3-shlib'
     Control whether GCC places uninitialized local variables into the
     `bss' or `data' segments.  `-msvr3-shlib' places them into `bss'.
     These options are meaningful only on System V Release 3.

`-mrtd'
     Use a different function-calling convention, in which functions
     that take a fixed number of arguments return with the `ret' NUM
     instruction, which pops their arguments while returning.  This
     saves one instruction in the caller since there is no need to pop
     the arguments there.

     You can specify that an individual function is called with this
     calling sequence with the function attribute `stdcall'.  You can
     also override the `-mrtd' option by using the function attribute
     `cdecl'.  *Note Function Attributes::.

     *Warning:* 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.)

`-mregparm=NUM'
     Control how many registers are used to pass integer arguments.  By
     default, no registers are used to pass arguments, and at most 3
     registers can be used.  You can control this behavior for a
     specific function by using the function attribute `regparm'.
     *Note Function Attributes::.

     *Warning:* if you use this switch, and NUM is nonzero, then you
     must build all modules with the same value, including any
     libraries.  This includes the system libraries and startup modules.

`-mpreferred-stack-boundary=NUM'
     Attempt to keep the stack boundary aligned to a 2 raised to NUM
     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
     the default is 4 (16 bytes or 128 bits), except when optimizing
     for code size (`-Os'), in which case the default is the minimum
     correct alignment (4 bytes for x86, and 8 bytes for x86-64).

     On Pentium and PentiumPro, `double' and `long double' values
     should be aligned to an 8 byte boundary (see `-malign-double') or
     suffer significant run time performance penalties.  On Pentium
     III, the Streaming SIMD Extension (SSE) data type `__m128' suffers
     similar penalties if it is not 16 byte aligned.

     To ensure proper alignment of this values on the stack, the stack
     boundary must be as aligned as that required by any value stored
     on the stack.  Further, every function must be generated such that
     it keeps the stack aligned.  Thus calling a function compiled with
     a higher preferred stack boundary from a function compiled with a
     lower preferred stack boundary will most likely misalign the
     stack.  It is recommended that libraries that use callbacks always
     use the default setting.

     This extra alignment does consume extra stack space, and generally
     increases code size.  Code that is sensitive to stack space usage,
     such as embedded systems and operating system kernels, may want to
     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.

`-mmmx'
`-mno-mmx'

`-msse'
`-mno-sse'

`-msse2'
`-mno-sse2'

`-mpni'
`-mno-pni'

`-m3dnow'
`-mno-3dnow'
     These switches enable or disable the use of built-in functions
     that allow direct access to the MMX, SSE and 3Dnow extensions of
     the instruction set.

     *Note X86 Built-in Functions::, for details of the functions
     enabled and disabled by these switches.

     To have SSE/SSE2 instructions generated automatically from
     floating-point code, see `-mfpmath=sse'.

`-mpush-args'
`-mno-push-args'
     Use PUSH operations to store outgoing parameters.  This method is
     shorter and usually equally fast as method using SUB/MOV
     operations and is enabled by default.  In some cases disabling it
     may improve performance because of improved scheduling and reduced
     dependencies.

`-maccumulate-outgoing-args'
     If enabled, the maximum amount of space required for outgoing
     arguments will be computed in the function prologue.  This is
     faster on most modern CPUs because of reduced dependencies,
     improved scheduling and reduced stack usage when preferred stack
     boundary is not equal to 2.  The drawback is a notable increase in
     code size.  This switch implies `-mno-push-args'.

`-mthreads'
     Support thread-safe exception handling on `Mingw32'.  Code that
     relies on thread-safe exception handling must compile and link all
     code with the `-mthreads' option.  When compiling, `-mthreads'
     defines `-D_MT'; when linking, it links in a special thread helper
     library `-lmingwthrd' which cleans up per thread exception
     handling data.

`-mno-align-stringops'
     Do not align destination of inlined string operations.  This
     switch reduces code size and improves performance in case the
     destination is already aligned, but gcc don't know about it.

`-minline-all-stringops'
     By default GCC inlines string operations only when destination is
     known to be aligned at least to 4 byte boundary.  This enables
     more inlining, increase code size, but may improve performance of
     code that depends on fast memcpy, strlen and memset for short
     lengths.

`-momit-leaf-frame-pointer'
     Don't keep the frame pointer in a register for leaf functions.
     This avoids the instructions to save, set up and restore frame
     pointers and makes an extra register available in leaf functions.
     The option `-fomit-frame-pointer' removes the frame pointer for
     all functions which might make debugging harder.

`-mtls-direct-seg-refs'
`-mno-tls-direct-seg-refs'
     Controls whether TLS variables may be accessed with offsets from
     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
     whether the thread base pointer must be added.  Whether or not this
     is legal depends on the operating system, and whether it maps the
     segment to cover the entire TLS area.

     For systems that use GNU libc, the default is on.

   These `-m' switches are supported in addition to the above on AMD
x86-64 processors in 64-bit environments.

`-m32'
`-m64'
     Generate code for a 32-bit or 64-bit environment.  The 32-bit
     environment sets int, long and pointer to 32 bits and generates
     code that runs on any i386 system.  The 64-bit environment sets
     int to 32 bits and long and pointer to 64 bits and generates code
     for AMD's x86-64 architecture.

`-mno-red-zone'
     Do not use a so called red zone for x86-64 code.  The red zone is
     mandated by the x86-64 ABI, it is a 128-byte area beyond the
     location of the stack pointer that will not be modified by signal
     or interrupt handlers and therefore can be used for temporary data
     without adjusting the stack pointer.  The flag `-mno-red-zone'
     disables this red zone.

`-mcmodel=small'
     Generate code for the small code model: the program and its
     symbols must be linked in the lower 2 GB of the address space.
     Pointers are 64 bits.  Programs can be statically or dynamically
     linked.  This is the default code model.

`-mcmodel=kernel'
     Generate code for the kernel code model.  The kernel runs in the
     negative 2 GB of the address space.  This model has to be used for
     Linux kernel code.

`-mcmodel=medium'
     Generate code for the medium model: The program is linked in the
     lower 2 GB of the address space but symbols can be located
     anywhere in the address space.  Programs can be statically or
     dynamically linked, but building of shared libraries are not
     supported with the medium model.

`-mcmodel=large'
     Generate code for the large model: This model makes no assumptions
     about addresses and sizes of sections.  Currently GCC does not
     implement this model.


File: gcc.info,  Node: HPPA Options,  Next: Intel 960 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options

HPPA Options
------------

   These `-m' options are defined for the HPPA family of computers:

`-march=ARCHITECTURE-TYPE'
     Generate code for the specified architecture.  The choices for
     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
     an HP-UX system to determine the proper architecture option for
     your machine.  Code compiled for lower numbered architectures will
     run on higher numbered architectures, but not the other way around.

     PA 2.0 support currently requires gas snapshot 19990413 or later.
     The next release of binutils (current is 2.9.1) will probably
     contain PA 2.0 support.

`-mpa-risc-1-0'
`-mpa-risc-1-1'
`-mpa-risc-2-0'
     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
     respectively.

`-mbig-switch'
     Generate code suitable for big switch tables.  Use this option
     only if the assembler/linker complain about out of range branches
     within a switch table.

`-mjump-in-delay'
     Fill delay slots of function calls with unconditional jump
     instructions by modifying the return pointer for the function call
     to be the target of the conditional jump.

`-mdisable-fpregs'
     Prevent floating point registers from being used in any manner.
     This is necessary for compiling kernels which perform lazy context
     switching of floating 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.

`-mno-space-regs'
     Generate code that assumes the target has no space registers.
     This allows GCC to generate faster indirect calls and use unscaled
     index address modes.

     Such code is suitable for level 0 PA systems and kernels.

`-mfast-indirect-calls'
     Generate code that assumes calls never cross space boundaries.
     This allows GCC to emit code which performs faster indirect calls.

     This option will not work in the presence of shared libraries or
     nested functions.

`-mlong-load-store'
     Generate 3-instruction load and store sequences as sometimes
     required by the HP-UX 10 linker.  This is equivalent to the `+k'
     option to the HP compilers.

`-mportable-runtime'
     Use the portable calling conventions proposed by HP for ELF
     systems.

`-mgas'
     Enable the use of assembler directives only GAS understands.

`-mschedule=CPU-TYPE'
     Schedule code according to the constraints for the machine type
     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
     HP-UX system to determine the proper scheduling option for your
     machine.  The default scheduling is `8000'.

`-mlinker-opt'
     Enable the optimization pass in the HP-UX linker.  Note this makes
     symbolic debugging impossible.  It also triggers a bug in the
     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
     messages when linking some programs.

`-msoft-float'
     Generate output containing library calls for floating point.
     *Warning:* the requisite libraries are not available for all HPPA
     targets.  Normally the facilities of the machine's usual C
     compiler are used, but this cannot be done directly in
     cross-compilation.  You must make your own arrangements to provide
     suitable library functions for cross-compilation.  The embedded
     target `hppa1.1-*-pro' does provide software floating point
     support.

     `-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.  In particular, you need to compile `libgcc.a', the
     library that comes with GCC, with `-msoft-float' in order for this
     to work.

`-msio'
     Generate the predefine, `_SIO', for server IO.  The default is
     `-mwsio'.  This generates the predefines, `__hp9000s700',
     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
     are available under HP-UX and HI-UX.

`-mgnu-ld'
     Use GNU ld specific options.  This passes `-shared' to ld when
     building a shared library.  It is the default when GCC is
     configured, explicitly or implicitly, with the GNU linker.  This
     option does not have any affect on which ld is called, it only
     changes what parameters are passed to that ld.  The ld that is
     called is determined by the `--with-ld' configure option, gcc's
     program search path, and finally by the user's `PATH'.  The linker
     used by GCC can be printed using `which `gcc -print-prog-name=ld`'.

`-mhp-ld'
     Use HP ld specific options.  This passes `-b' to ld when building
     a shared library and passes `+Accept TypeMismatch' to ld on all
     links.  It is the default when GCC is configured, explicitly or
     implicitly, with the HP linker.  This option does not have any
     affect on which ld is called, it only changes what parameters are
     passed to that ld.  The ld that is called is determined by the
     `--with-ld' configure option, gcc's program search path, and
     finally by the user's `PATH'.  The linker used by GCC can be
     printed using `which `gcc -print-prog-name=ld`'.

`-mlong-calls'
     Generate code that uses long call sequences.  This ensures that a
     call is always able to reach linker generated stubs.  The default
     is to generate long calls only when the distance from the call
     site to the beginning of the function or translation unit, as the
     case may be, exceeds a predefined limit set by the branch type
     being used.  The limits for normal calls are 7,600,000 and 240,000
     bytes, respectively for the PA 2.0 and PA 1.X architectures.
     Sibcalls are always limited at 240,000 bytes.

     Distances are measured from the beginning of functions when using
     the `-ffunction-sections' option, or when using the `-mgas' and
     `-mno-portable-runtime' options together under HP-UX with the SOM
     linker.

     It is normally not desirable to use this option as it will degrade
     performance.  However, it may be useful in large applications,
     particularly when partial linking is used to build the application.

     The types of long calls used depends on the capabilities of the
     assembler and linker, and the type of code being generated.  The
     impact on systems that support long absolute calls, and long pic
     symbol-difference or pc-relative calls should be relatively small.
     However, an indirect call is used on 32-bit ELF systems in pic code
     and it is quite long.

`-nolibdld'
     Suppress the generation of link options to search libdld.sl when
     the `-static' option is specified on HP-UX 10 and later.

`-static'
     The HP-UX implementation of setlocale in libc has a dependency on
     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
     when the `-static' option is specified, special link options are
     needed to resolve this dependency.

     On HP-UX 10 and later, the GCC driver adds the necessary options to
     link with libdld.sl when the `-static' option is specified.  This
     causes the resulting binary to be dynamic.  On the 64-bit port,
     the linkers generate dynamic binaries by default in any case.  The
     `-nolibdld' option can be used to prevent the GCC driver from
     adding these link options.

`-threads'
     Add support for multithreading with the "dce thread" library under
     HP-UX.  This option sets flags for both the preprocessor and
     linker.


File: gcc.info,  Node: Intel 960 Options,  Next: DEC Alpha Options,  Prev: HPPA Options,  Up: Submodel Options

Intel 960 Options
-----------------

   These `-m' options are defined for the Intel 960 implementations:

`-mCPU-TYPE'
     Assume the defaults for the machine type CPU-TYPE for some of the
     other options, including instruction scheduling, floating point
     support, and addressing modes.  The choices for CPU-TYPE are `ka',
     `kb', `mc', `ca', `cf', `sa', and `sb'.  The default is `kb'.

`-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 substituted by the assembler or linker, but less efficient
     code in other cases, such as calls via function pointers, or using
     a linker that doesn't support 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
     `-mcomplex-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 Intel's gcc release
     version 1.3 (based on gcc 1.37).  This option implies
     `-mstrict-align'.

`-mlong-double-64'
     Implement type `long double' as 64-bit floating point numbers.
     Without the option `long double' is implemented by 80-bit floating
     point numbers.  The only reason we have it because there is no
     128-bit `long double' support in `fp-bit.c' yet.  So it is only
     useful for people using soft-float targets.  Otherwise, we should
     recommend against use of it.

