@c Copyright (C) 1988-2018 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@ignore
@c man begin INCLUDE
@include gcc-vers.texi
@c man end

@c man begin COPYRIGHT
Copyright @copyright{} 1988-2018 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 ``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 gfdl(7) man page.

(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.
@c man end
@c Set file name and title for the man page.
@setfilename gcc
@settitle GNU project C and C++ compiler
@c man begin SYNOPSIS
gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
    [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
    [@option{-W}@var{warn}@dots{}] [@option{-Wpedantic}]
    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
    [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
    [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}

Only the most useful options are listed here; see below for the
remainder.  @command{g++} accepts mostly the same options as @command{gcc}.
@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7),
cpp(1), gcov(1), as(1), ld(1), gdb(1), dbx(1)
and the Info entries for @file{gcc}, @file{cpp}, @file{as},
@file{ld}, @file{binutils} and @file{gdb}.
@c man end
@c man begin BUGS
For instructions on reporting bugs, see
@w{@value{BUGURL}}.
@c man end
@c man begin AUTHOR
See the Info entry for @command{gcc}, or
@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
for contributors to GCC@.
@c man end
@end ignore

@node Invoking GCC
@chapter GCC Command Options
@cindex GCC command options
@cindex command options
@cindex options, GCC command

@c man begin DESCRIPTION
When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking.  The ``overall options'' allow you to stop this
process at an intermediate stage.  For example, the @option{-c} option
says not to run the linker.  Then the output consists of object files
output by the assembler.
@xref{Overall Options,,Options Controlling the Kind of Output}.

Other options are passed on to one or more stages of processing.  Some options
control the preprocessor and others the compiler itself.  Yet other
options control the assembler and linker; most of these are not
documented here, since you rarely need to use any of them.

@cindex C compilation options
Most of the command-line options that you can use with GCC are useful
for C programs; when an option is only useful with another language
(usually C++), the explanation says so explicitly.  If the description
for a particular option does not mention a source language, you can use
that option with all supported languages.

@cindex cross compiling
@cindex specifying machine version
@cindex specifying compiler version and target machine
@cindex compiler version, specifying
@cindex target machine, specifying
The usual way to run GCC is to run the executable called @command{gcc}, or
@command{@var{machine}-gcc} when cross-compiling, or
@command{@var{machine}-gcc-@var{version}} to run a specific version of GCC.
When you compile C++ programs, you should invoke GCC as @command{g++} 
instead.  @xref{Invoking G++,,Compiling C++ Programs}, 
for information about the differences in behavior between @command{gcc} 
and @code{g++} when compiling C++ programs.

@cindex grouping options
@cindex options, grouping
The @command{gcc} program accepts options and file names as operands.  Many
options have multi-letter names; therefore multiple single-letter options
may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
-v}}.

@cindex order of options
@cindex options, order
You can mix options and other arguments.  For the most part, the order
you use doesn't matter.  Order does matter when you use several
options of the same kind; for example, if you specify @option{-L} more
than once, the directories are searched in the order specified.  Also,
the placement of the @option{-l} option is significant.

Many options have long names starting with @samp{-f} or with
@samp{-W}---for example,
@option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
these have both positive and negative forms; the negative form of
@option{-ffoo} is @option{-fno-foo}.  This manual documents
only one of these two forms, whichever one is not the default.

@c man end

@xref{Option Index}, for an index to GCC's options.

@menu
* Option Summary::      Brief list of all options, without explanations.
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Invoking G++::        Compiling C++ programs.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
                        and Objective-C++.
* Diagnostic Message Formatting Options:: Controlling how diagnostics should
                        be formatted.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Producing debuggable code.
* Optimize Options::    How much optimization?
* Instrumentation Options:: Enabling profiling and extra run-time error checking.
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
* Developer Options::   Printing GCC configuration info, statistics, and
                        debugging dumps.
* Submodel Options::    Target-specific options, such as compiling for a
                        specific processor variant.
* Spec Files::          How to pass switches to sub-processes.
* Environment Variables:: Env vars that affect GCC.
* Precompiled Headers:: Compiling a header once, and using it many times.
@end menu

@c man begin OPTIONS

@node Option Summary
@section Option Summary

Here is a summary of all the options, grouped by type.  Explanations are
in the following sections.

@table @emph
@item Overall Options
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{-c  -S  -E  -o @var{file}  -x @var{language}  @gol
-v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  --version @gol
-pass-exit-codes  -pipe  -specs=@var{file}  -wrapper  @gol
@@@var{file}  -ffile-prefix-map=@var{old}=@var{new}  @gol
-fplugin=@var{file}  -fplugin-arg-@var{name}=@var{arg}  @gol
-fdump-ada-spec@r{[}-slim@r{]}  -fada-spec-parent=@var{unit}  -fdump-go-spec=@var{file}}

@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
-fpermitted-flt-eval-methods=@var{standard} @gol
-aux-info @var{filename}  -fallow-parameterless-variadic-functions @gol
-fno-asm  -fno-builtin  -fno-builtin-@var{function}  -fgimple@gol
-fhosted  -ffreestanding  -fopenacc  -fopenmp  -fopenmp-simd @gol
-fms-extensions  -fplan9-extensions  -fsso-struct=@var{endianness} @gol
-fallow-single-precision  -fcond-mismatch  -flax-vector-conversions @gol
-fsigned-bitfields  -fsigned-char @gol
-funsigned-bitfields  -funsigned-char}

@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@gccoptlist{-fabi-version=@var{n}  -fno-access-control @gol
-faligned-new=@var{n}  -fargs-in-order=@var{n}  -fcheck-new @gol
-fconstexpr-depth=@var{n}  -fconstexpr-loop-limit=@var{n} @gol
-ffriend-injection @gol
-fno-elide-constructors @gol
-fno-enforce-eh-specs @gol
-ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
-fno-implicit-templates @gol
-fno-implicit-inline-templates @gol
-fno-implement-inlines  -fms-extensions @gol
-fnew-inheriting-ctors @gol
-fnew-ttp-matching @gol
-fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
-fno-optional-diags  -fpermissive @gol
-fno-pretty-templates @gol
-frepo  -fno-rtti  -fsized-deallocation @gol
-ftemplate-backtrace-limit=@var{n} @gol
-ftemplate-depth=@var{n} @gol
-fno-threadsafe-statics  -fuse-cxa-atexit @gol
-fno-weak  -nostdinc++ @gol
-fvisibility-inlines-hidden @gol
-fvisibility-ms-compat @gol
-fext-numeric-literals @gol
-Wabi=@var{n}  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy @gol
-Wdelete-non-virtual-dtor  -Wliteral-suffix  -Wmultiple-inheritance @gol
-Wnamespaces  -Wnarrowing @gol
-Wnoexcept  -Wnoexcept-type  -Wclass-memaccess @gol
-Wnon-virtual-dtor  -Wreorder  -Wregister @gol
-Weffc++  -Wstrict-null-sentinel  -Wtemplates @gol
-Wno-non-template-friend  -Wold-style-cast @gol
-Woverloaded-virtual  -Wno-pmf-conversions @gol
-Wsign-promo  -Wvirtual-inheritance}

@item Objective-C and Objective-C++ Language Options
@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
Objective-C and Objective-C++ Dialects}.
@gccoptlist{-fconstant-string-class=@var{class-name} @gol
-fgnu-runtime  -fnext-runtime @gol
-fno-nil-receivers @gol
-fobjc-abi-version=@var{n} @gol
-fobjc-call-cxx-cdtors @gol
-fobjc-direct-dispatch @gol
-fobjc-exceptions @gol
-fobjc-gc @gol
-fobjc-nilcheck @gol
-fobjc-std=objc1 @gol
-fno-local-ivars @gol
-fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]} @gol
-freplace-objc-classes @gol
-fzero-link @gol
-gen-decls @gol
-Wassign-intercept @gol
-Wno-protocol  -Wselector @gol
-Wstrict-selector-match @gol
-Wundeclared-selector}

@item Diagnostic Message Formatting Options
@xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
@gccoptlist{-fmessage-length=@var{n}  @gol
-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
-fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
-fno-diagnostics-show-option  -fno-diagnostics-show-caret @gol
-fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch @gol
-fdiagnostics-show-template-tree -fno-elide-type @gol
-fno-show-column}

@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
-pedantic-errors @gol
-w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Waligned-new @gol
-Walloc-zero  -Walloc-size-larger-than=@var{n}
-Walloca  -Walloca-larger-than=@var{n} @gol
-Wno-aggressive-loop-optimizations  -Warray-bounds  -Warray-bounds=@var{n} @gol
-Wno-attributes  -Wbool-compare  -Wbool-operation @gol
-Wno-builtin-declaration-mismatch @gol
-Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat @gol
-Wc++-compat  -Wc++11-compat  -Wc++14-compat  @gol
-Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual  @gol
-Wchar-subscripts  -Wchkp  -Wcatch-value  -Wcatch-value=@var{n} @gol
-Wclobbered  -Wcomment  -Wconditionally-supported @gol
-Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wdangling-else  -Wdate-time @gol
-Wdelete-incomplete @gol
-Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init @gol
-Wdisabled-optimization @gol
-Wno-discarded-qualifiers  -Wno-discarded-array-qualifiers @gol
-Wno-div-by-zero  -Wdouble-promotion @gol
-Wduplicated-branches  -Wduplicated-cond @gol
-Wempty-body  -Wenum-compare  -Wno-endif-labels  -Wexpansion-to-defined @gol
-Werror  -Werror=*  -Wextra-semi  -Wfatal-errors @gol
-Wfloat-equal  -Wformat  -Wformat=2 @gol
-Wno-format-contains-nul  -Wno-format-extra-args  @gol
-Wformat-nonliteral -Wformat-overflow=@var{n} @gol
-Wformat-security  -Wformat-signedness  -Wformat-truncation=@var{n} @gol
-Wformat-y2k  -Wframe-address @gol
-Wframe-larger-than=@var{len}  -Wno-free-nonheap-object  -Wjump-misses-init @gol
-Wif-not-aligned @gol
-Wignored-qualifiers  -Wignored-attributes  -Wincompatible-pointer-types @gol
-Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=@var{n} @gol
-Wimplicit-function-declaration  -Wimplicit-int @gol
-Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context @gol
-Wno-int-to-pointer-cast  -Winvalid-memory-model  -Wno-invalid-offsetof @gol
-Winvalid-pch  -Wlarger-than=@var{len} @gol
-Wlogical-op  -Wlogical-not-parentheses  -Wlong-long @gol
-Wmain  -Wmaybe-uninitialized  -Wmemset-elt-size  -Wmemset-transposed-args @gol
-Wmisleading-indentation  -Wmissing-attributes -Wmissing-braces @gol
-Wmissing-field-initializers  -Wmissing-include-dirs @gol
-Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare @gol
-Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol
-Wnull-dereference  -Wodr  -Wno-overflow  -Wopenmp-simd  @gol
-Woverride-init-side-effects  -Woverlength-strings @gol
-Wpacked  -Wpacked-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
-Wparentheses  -Wno-pedantic-ms-format @gol
-Wplacement-new  -Wplacement-new=@var{n} @gol
-Wpointer-arith  -Wpointer-compare  -Wno-pointer-to-int-cast @gol
-Wno-pragmas  -Wredundant-decls  -Wrestrict  -Wno-return-local-addr @gol
-Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar @gol
-Wshadow=global,  -Wshadow=local,  -Wshadow=compatible-local @gol
-Wshift-overflow  -Wshift-overflow=@var{n} @gol
-Wshift-count-negative  -Wshift-count-overflow  -Wshift-negative-value @gol
-Wsign-compare  -Wsign-conversion  -Wfloat-conversion @gol
-Wno-scalar-storage-order  -Wsizeof-pointer-div @gol
-Wsizeof-pointer-memaccess  -Wsizeof-array-argument @gol
-Wstack-protector  -Wstack-usage=@var{len}  -Wstrict-aliasing @gol
-Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=@var{n} @gol
-Wstringop-overflow=@var{n} -Wstringop-truncation @gol
-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}malloc@r{]} @gol
-Wsuggest-final-types @gol  -Wsuggest-final-methods  -Wsuggest-override @gol
-Wmissing-format-attribute  -Wsubobject-linkage @gol
-Wswitch  -Wswitch-bool  -Wswitch-default  -Wswitch-enum @gol
-Wswitch-unreachable  -Wsync-nand @gol
-Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs @gol
-Wtype-limits  -Wundef @gol
-Wuninitialized  -Wunknown-pragmas @gol
-Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
-Wunused-label  -Wunused-local-typedefs  -Wunused-macros @gol
-Wunused-parameter  -Wno-unused-result @gol
-Wunused-value  -Wunused-variable @gol
-Wunused-const-variable  -Wunused-const-variable=@var{n} @gol
-Wunused-but-set-parameter  -Wunused-but-set-variable @gol
-Wuseless-cast  -Wvariadic-macros  -Wvector-operation-performance @gol
-Wvla  -Wvla-larger-than=@var{n}  -Wvolatile-register-var  -Wwrite-strings @gol
-Wzero-as-null-pointer-constant  -Whsa}

@item C and Objective-C-only Warning Options
@gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
-Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
-Wold-style-declaration  -Wold-style-definition @gol
-Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
-Wdeclaration-after-statement  -Wpointer-sign}

@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program}.
@gccoptlist{-g  -g@var{level}  -gdwarf  -gdwarf-@var{version} @gol
-ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
-gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
-gas-loc-support  -gno-as-loc-support @gol
-gas-locview-support  -gno-as-locview-support @gol
-gcolumn-info  -gno-column-info @gol
-gstatement-frontiers  -gno-statement-frontiers @gol
-gvariable-location-views  -gno-variable-location-views @gol
-ginternal-reset-location-views  -gno-internal-reset-location-views @gol
-ginline-points  -gno-inline-points @gol
-gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
-fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
-fno-eliminate-unused-debug-types @gol
-femit-struct-debug-baseonly  -femit-struct-debug-reduced @gol
-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
-feliminate-unused-debug-symbols  -femit-class-debug-always @gol
-fno-merge-debug-strings  -fno-dwarf2-cfi-asm @gol
-fvar-tracking  -fvar-tracking-assignments}

@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
@gccoptlist{-faggressive-loop-optimizations  -falign-functions[=@var{n}] @gol
-falign-jumps[=@var{n}] @gol
-falign-labels[=@var{n}]  -falign-loops[=@var{n}] @gol
-fassociative-math  -fauto-profile  -fauto-profile[=@var{path}] @gol
-fauto-inc-dec  -fbranch-probabilities @gol
-fbranch-target-load-optimize  -fbranch-target-load-optimize2 @gol
-fbtr-bb-exclusive  -fcaller-saves @gol
-fcombine-stack-adjustments  -fconserve-stack @gol
-fcompare-elim  -fcprop-registers  -fcrossjumping @gol
-fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules @gol
-fcx-limited-range @gol
-fdata-sections  -fdce  -fdelayed-branch @gol
-fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively @gol
-fdevirtualize-at-ltrans  -fdse @gol
-fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects @gol
-ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=@var{style} @gol
-fforward-propagate  -ffp-contract=@var{style}  -ffunction-sections @gol
-fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity @gol
-fgcse-sm  -fhoist-adjacent-loads  -fif-conversion @gol
-fif-conversion2  -findirect-inlining @gol
-finline-functions  -finline-functions-called-once  -finline-limit=@var{n} @gol
-finline-small-functions  -fipa-cp  -fipa-cp-clone @gol
-fipa-bit-cp -fipa-vrp @gol
-fipa-pta  -fipa-profile  -fipa-pure-const  -fipa-reference  -fipa-icf @gol
-fira-algorithm=@var{algorithm} @gol
-fira-region=@var{region}  -fira-hoist-pressure @gol
-fira-loop-pressure  -fno-ira-share-save-slots @gol
-fno-ira-share-spill-slots @gol
-fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute @gol
-fivopts  -fkeep-inline-functions  -fkeep-static-functions @gol
-fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage @gol
-floop-block  -floop-interchange  -floop-strip-mine @gol
-floop-unroll-and-jam  -floop-nest-optimize @gol
-floop-parallelize-all  -flra-remat  -flto  -flto-compression-level @gol
-flto-partition=@var{alg}  -fmerge-all-constants @gol
-fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves @gol
-fmove-loop-invariants  -fno-branch-count-reg @gol
-fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse @gol
-fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole @gol
-fno-peephole2  -fno-printf-return-value  -fno-sched-interblock @gol
-fno-sched-spec  -fno-signed-zeros @gol
-fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss @gol
-fomit-frame-pointer  -foptimize-sibling-calls @gol
-fpartial-inlining  -fpeel-loops  -fpredictive-commoning @gol
-fprefetch-loop-arrays @gol
-fprofile-correction @gol
-fprofile-use  -fprofile-use=@var{path}  -fprofile-values @gol
-fprofile-reorder-functions @gol
-freciprocal-math  -free  -frename-registers  -freorder-blocks @gol
-freorder-blocks-algorithm=@var{algorithm} @gol
-freorder-blocks-and-partition  -freorder-functions @gol
-frerun-cse-after-loop  -freschedule-modulo-scheduled-loops @gol
-frounding-math  -fsched2-use-superblocks  -fsched-pressure @gol
-fsched-spec-load  -fsched-spec-load-dangerous @gol
-fsched-stalled-insns-dep[=@var{n}]  -fsched-stalled-insns[=@var{n}] @gol
-fsched-group-heuristic  -fsched-critical-path-heuristic @gol
-fsched-spec-insn-heuristic  -fsched-rank-heuristic @gol
-fsched-last-insn-heuristic  -fsched-dep-count-heuristic @gol
-fschedule-fusion @gol
-fschedule-insns  -fschedule-insns2  -fsection-anchors @gol
-fselective-scheduling  -fselective-scheduling2 @gol
-fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops @gol
-fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate @gol
-fsignaling-nans @gol
-fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops@gol
-fsplit-paths @gol
-fsplit-wide-types  -fssa-backprop  -fssa-phiopt @gol
-fstdarg-opt  -fstore-merging  -fstrict-aliasing @gol
-fthread-jumps  -ftracer  -ftree-bit-ccp @gol
-ftree-builtin-call-dce  -ftree-ccp  -ftree-ch @gol
-ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts @gol
-ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting @gol
-ftree-loop-if-convert  -ftree-loop-im @gol
-ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns @gol
-ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize @gol
-ftree-loop-vectorize @gol
-ftree-parallelize-loops=@var{n}  -ftree-pre  -ftree-partial-pre  -ftree-pta @gol
-ftree-reassoc  -ftree-sink  -ftree-slsr  -ftree-sra @gol
-ftree-switch-conversion  -ftree-tail-merge @gol
-ftree-ter  -ftree-vectorize  -ftree-vrp  -funconstrained-commons @gol
-funit-at-a-time  -funroll-all-loops  -funroll-loops @gol
-funsafe-math-optimizations  -funswitch-loops @gol
-fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt @gol
-fweb  -fwhole-program  -fwpa  -fuse-linker-plugin @gol
--param @var{name}=@var{value}
-O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og}

@item Program Instrumentation Options
@xref{Instrumentation Options,,Program Instrumentation Options}.
@gccoptlist{-p  -pg  -fprofile-arcs  --coverage  -ftest-coverage @gol
-fprofile-abs-path @gol
-fprofile-dir=@var{path}  -fprofile-generate  -fprofile-generate=@var{path} @gol
-fsanitize=@var{style}  -fsanitize-recover  -fsanitize-recover=@var{style} @gol
-fasan-shadow-offset=@var{number}  -fsanitize-sections=@var{s1},@var{s2},... @gol
-fsanitize-undefined-trap-on-error  -fbounds-check @gol
-fcheck-pointer-bounds  -fchkp-check-incomplete-type @gol
-fchkp-first-field-has-own-bounds  -fchkp-narrow-bounds @gol
-fchkp-narrow-to-innermost-array  -fchkp-optimize @gol
-fchkp-use-fast-string-functions  -fchkp-use-nochk-string-functions @gol
-fchkp-use-static-bounds  -fchkp-use-static-const-bounds @gol
-fchkp-treat-zero-dynamic-size-as-infinite  -fchkp-check-read @gol
-fchkp-check-read  -fchkp-check-write  -fchkp-store-bounds @gol
-fchkp-instrument-calls  -fchkp-instrument-marked-only @gol
-fchkp-use-wrappers  -fchkp-flexible-struct-trailing-arrays@gol
-fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{]} @gol
-fstack-protector  -fstack-protector-all  -fstack-protector-strong @gol
-fstack-protector-explicit  -fstack-check @gol
-fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
-fno-stack-limit  -fsplit-stack @gol
-fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol
-fvtv-counts  -fvtv-debug @gol
-finstrument-functions @gol
-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}}

@item Preprocessor Options
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
@gccoptlist{-A@var{question}=@var{answer} @gol
-A-@var{question}@r{[}=@var{answer}@r{]} @gol
-C  -CC  -D@var{macro}@r{[}=@var{defn}@r{]} @gol
-dD  -dI  -dM  -dN  -dU @gol
-fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers  @gol
-fexec-charset=@var{charset}  -fextended-identifiers  @gol
-finput-charset=@var{charset} -fmacro-prefix-map=@var{old}=@var{new}  @gol
-fno-canonical-system-headers @gol -fpch-deps  -fpch-preprocess  @gol
-fpreprocessed -ftabstop=@var{width}  -ftrack-macro-expansion  @gol
-fwide-exec-charset=@var{charset}  -fworking-directory @gol
-H  -imacros @var{file}  -include @var{file} @gol
-M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT @gol
-no-integrated-cpp  -P  -pthread  -remap @gol
-traditional  -traditional-cpp  -trigraphs @gol
-U@var{macro}  -undef  @gol
-Wp,@var{option}  -Xpreprocessor @var{option}}

@item Assembler Options
@xref{Assembler Options,,Passing Options to the Assembler}.
@gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}

@item Linker Options
@xref{Link Options,,Options for Linking}.
@gccoptlist{@var{object-file-name}  -fuse-ld=@var{linker}  -l@var{library} @gol
-nostartfiles  -nodefaultlibs  -nostdlib  -pie  -pthread  -rdynamic @gol
-s  -static -static-pie -static-libgcc  -static-libstdc++ @gol
-static-libasan  -static-libtsan  -static-liblsan  -static-libubsan @gol
-static-libmpx  -static-libmpxwrappers @gol
-shared  -shared-libgcc  -symbolic @gol
-T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
-u @var{symbol}  -z @var{keyword}}

@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
@gccoptlist{-B@var{prefix}  -I@var{dir}  -I- @gol
-idirafter @var{dir} @gol
-imacros @var{file}  -imultilib @var{dir} @gol
-iplugindir=@var{dir}  -iprefix @var{file} @gol
-iquote @var{dir}  -isysroot @var{dir}  -isystem @var{dir} @gol
-iwithprefix @var{dir}  -iwithprefixbefore @var{dir}  @gol
-L@var{dir}  -no-canonical-prefixes  --no-sysroot-suffix @gol
-nostdinc  -nostdinc++  --sysroot=@var{dir}}

@item Code Generation Options
@xref{Code Gen Options,,Options for Code Generation Conventions}.
@gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
-ffixed-@var{reg}  -fexceptions @gol
-fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
-fasynchronous-unwind-tables @gol
-fno-gnu-unique @gol
-finhibit-size-directive  -fno-common  -fno-ident @gol
-fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt @gol
-fno-jump-tables @gol
-frecord-gcc-switches @gol
-freg-struct-return  -fshort-enums  -fshort-wchar @gol
-fverbose-asm  -fpack-struct[=@var{n}]  @gol
-fleading-underscore  -ftls-model=@var{model} @gol
-fstack-reuse=@var{reuse_level} @gol
-ftrampolines  -ftrapv  -fwrapv @gol
-fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @gol
-fstrict-volatile-bitfields  -fsync-libcalls}

@item Developer Options
@xref{Developer Options,,GCC Developer Options}.
@gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
-dumpfullversion  -fchecking  -fchecking=@var{n}  -fdbg-cnt-list @gol
-fdbg-cnt=@var{counter-value-list} @gol
-fdisable-ipa-@var{pass_name} @gol
-fdisable-rtl-@var{pass_name} @gol
-fdisable-rtl-@var{pass-name}=@var{range-list} @gol
-fdisable-tree-@var{pass_name} @gol
-fdisable-tree-@var{pass-name}=@var{range-list} @gol
-fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links @gol
-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
-fdump-final-insns@r{[}=@var{file}@r{]} @gol
-fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline @gol
-fdump-lang-all @gol
-fdump-lang-@var{switch} @gol
-fdump-lang-@var{switch}-@var{options} @gol
-fdump-lang-@var{switch}-@var{options}=@var{filename} @gol
-fdump-passes @gol
-fdump-rtl-@var{pass}  -fdump-rtl-@var{pass}=@var{filename} @gol
-fdump-statistics @gol
-fdump-tree-all @gol
-fdump-tree-@var{switch} @gol
-fdump-tree-@var{switch}-@var{options} @gol
-fdump-tree-@var{switch}-@var{options}=@var{filename} @gol
-fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
-fenable-@var{kind}-@var{pass} @gol
-fenable-@var{kind}-@var{pass}=@var{range-list} @gol
-fira-verbose=@var{n} @gol
-flto-report  -flto-report-wpa  -fmem-report-wpa @gol
-fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report @gol
-fopt-info  -fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol
-fprofile-report @gol
-frandom-seed=@var{string}  -fsched-verbose=@var{n} @gol
-fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose @gol
-fstats  -fstack-usage  -ftime-report  -ftime-report-details @gol
-fvar-tracking-assignments-toggle  -gtoggle @gol
-print-file-name=@var{library}  -print-libgcc-file-name @gol
-print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
-print-prog-name=@var{program}  -print-search-dirs  -Q @gol
-print-sysroot  -print-sysroot-headers-suffix @gol
-save-temps  -save-temps=cwd  -save-temps=obj  -time@r{[}=@var{file}@r{]}}

@item Machine-Dependent Options
@xref{Submodel Options,,Machine-Dependent Options}.
@c This list is ordered alphanumerically by subsection name.
@c Try and put the significant identifier (CPU or system) first,
@c so users have a clue at guessing where the ones they want will be.

@emph{AArch64 Options}
@gccoptlist{-mabi=@var{name}  -mbig-endian  -mlittle-endian @gol
-mgeneral-regs-only @gol
-mcmodel=tiny  -mcmodel=small  -mcmodel=large @gol
-mstrict-align @gol
-momit-leaf-frame-pointer @gol
-mtls-dialect=desc  -mtls-dialect=traditional @gol
-mtls-size=@var{size} @gol
-mfix-cortex-a53-835769  -mfix-cortex-a53-843419 @gol
-mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div @gol
-mpc-relative-literal-loads @gol
-msign-return-address=@var{scope} @gol
-march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}  @gol
-moverride=@var{string}  -mverbose-cost-dump}

@emph{Adapteva Epiphany Options}
@gccoptlist{-mhalf-reg-file  -mprefer-short-insn-regs @gol
-mbranch-cost=@var{num}  -mcmove  -mnops=@var{num}  -msoft-cmpsf @gol
-msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=@var{num} @gol
-mround-nearest  -mlong-calls  -mshort-calls  -msmall16 @gol
-mfp-mode=@var{mode}  -mvect-double  -max-vect-align=@var{num} @gol
-msplit-vecmove-early  -m1reg-@var{reg}}

@emph{ARC Options}
@gccoptlist{-mbarrel-shifter -mjli-always @gol
-mcpu=@var{cpu}  -mA6  -mARC600  -mA7  -mARC700 @gol
-mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr @gol
-mea  -mno-mpy  -mmul32x16  -mmul64  -matomic @gol
-mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap @gol
-mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape @gol
-mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof @gol
-mlong-calls  -mmedium-calls  -msdata -mirq-ctrl-saved @gol
-mrgf-banked-regs -mlpc-width=@var{width} -G @var{num} @gol
-mvolatile-cache  -mtp-regno=@var{regno} @gol
-malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc @gol
-mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi @gol
-mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none @gol
-mlra-priority-compact mlra-priority-noncompact  -mno-millicode @gol
-mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=@var{level} @gol
-mtune=@var{cpu}  -mmultcost=@var{num} @gol
-munalign-prob-threshold=@var{probability}  -mmpy-option=@var{multo} @gol
-mdiv-rem  -mcode-density  -mll64  -mfpu=@var{fpu} -mrf16}

@emph{ARM Options}
@gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
-mabi=@var{name} @gol
-mapcs-stack-check  -mno-apcs-stack-check @gol
-mapcs-reentrant  -mno-apcs-reentrant @gol
-msched-prolog  -mno-sched-prolog @gol
-mlittle-endian  -mbig-endian @gol
-mbe8 -mbe32 @gol
-mfloat-abi=@var{name} @gol
-mfp16-format=@var{name}
-mthumb-interwork  -mno-thumb-interwork @gol
-mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
-mtune=@var{name}  -mprint-tune-info @gol
-mstructure-size-boundary=@var{n} @gol
-mabort-on-noreturn @gol
-mlong-calls  -mno-long-calls @gol
-msingle-pic-base  -mno-single-pic-base @gol
-mpic-register=@var{reg} @gol
-mnop-fun-dllimport @gol
-mpoke-function-name @gol
-mthumb  -marm  -mflip-thumb @gol
-mtpcs-frame  -mtpcs-leaf-frame @gol
-mcaller-super-interworking  -mcallee-super-interworking @gol
-mtp=@var{name}  -mtls-dialect=@var{dialect} @gol
-mword-relocations @gol
-mfix-cortex-m3-ldrd @gol
-munaligned-access @gol
-mneon-for-64bits @gol
-mslow-flash-data @gol
-masm-syntax-unified @gol
-mrestrict-it @gol
-mverbose-cost-dump @gol
-mpure-code @gol
-mcmse}

@emph{AVR Options}
@gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args @gol
-mbranch-cost=@var{cost} @gol
-mcall-prologues  -mgas-isr-prologues  -mint8 @gol
-mn_flash=@var{size}  -mno-interrupts @gol
-mmain-is-OS_task -mrelax  -mrmw  -mstrict-X  -mtiny-stack @gol
-mfract-convert-truncate @gol
-mshort-calls  -nodevicelib @gol
-Waddr-space-convert  -Wmisspelled-isr}

@emph{Blackfin Options}
@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
-msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
-mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
-mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
-mno-id-shared-library  -mshared-library-id=@var{n} @gol
-mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
-msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
-mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram @gol
-micplb}

@emph{C6X Options}
@gccoptlist{-mbig-endian  -mlittle-endian  -march=@var{cpu} @gol
-msim  -msdata=@var{sdata-type}}

@emph{CRIS Options}
@gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
-mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
-metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
-mstack-align  -mdata-align  -mconst-align @gol
-m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
-melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
-mmul-bug-workaround  -mno-mul-bug-workaround}

@emph{CR16 Options}
@gccoptlist{-mmac @gol
-mcr16cplus  -mcr16c @gol
-msim  -mint32  -mbit-ops
-mdata-model=@var{model}}

@emph{Darwin Options}
@gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
-arch_only  -bind_at_load  -bundle  -bundle_loader @gol
-client_name  -compatibility_version  -current_version @gol
-dead_strip @gol
-dependency-file  -dylib_file  -dylinker_install_name @gol
-dynamic  -dynamiclib  -exported_symbols_list @gol
-filelist  -flat_namespace  -force_cpusubtype_ALL @gol
-force_flat_namespace  -headerpad_max_install_names @gol
-iframework @gol
-image_base  -init  -install_name  -keep_private_externs @gol
-multi_module  -multiply_defined  -multiply_defined_unused @gol
-noall_load   -no_dead_strip_inits_and_terms @gol
-nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit @gol
-pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
-private_bundle  -read_only_relocs  -sectalign @gol
-sectobjectsymbols  -whyload  -seg1addr @gol
-sectcreate  -sectobjectsymbols  -sectorder @gol
-segaddr  -segs_read_only_addr  -segs_read_write_addr @gol
-seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
-segprot  -segs_read_only_addr  -segs_read_write_addr @gol
-single_module  -static  -sub_library  -sub_umbrella @gol
-twolevel_namespace  -umbrella  -undefined @gol
-unexported_symbols_list  -weak_reference_mismatches @gol
-whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=@var{version} @gol
-mkernel  -mone-byte-bool}

@emph{DEC Alpha Options}
@gccoptlist{-mno-fp-regs  -msoft-float @gol
-mieee  -mieee-with-inexact  -mieee-conformant @gol
-mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
-mtrap-precision=@var{mode}  -mbuild-constants @gol
-mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
-mbwx  -mmax  -mfix  -mcix @gol
-mfloat-vax  -mfloat-ieee @gol
-mexplicit-relocs  -msmall-data  -mlarge-data @gol
-msmall-text  -mlarge-text @gol
-mmemory-latency=@var{time}}

@emph{FR30 Options}
@gccoptlist{-msmall-model  -mno-lsim}

@emph{FT32 Options}
@gccoptlist{-msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm}

@emph{FRV Options}
@gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
-mhard-float  -msoft-float @gol
-malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
-mdouble  -mno-double @gol
-mmedia  -mno-media  -mmuladd  -mno-muladd @gol
-mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic @gol
-mlinked-fp  -mlong-calls  -malign-labels @gol
-mlibrary-pic  -macc-4  -macc-8 @gol
-mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
-moptimize-membar  -mno-optimize-membar @gol
-mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
-mvliw-branch  -mno-vliw-branch @gol
-mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
-mno-nested-cond-exec  -mtomcat-stats @gol
-mTLS  -mtls @gol
-mcpu=@var{cpu}}

@emph{GNU/Linux Options}
@gccoptlist{-mglibc  -muclibc  -mmusl  -mbionic  -mandroid @gol
-tno-android-cc  -tno-android-ld}

@emph{H8/300 Options}
@gccoptlist{-mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300}

@emph{HPPA Options}
@gccoptlist{-march=@var{architecture-type} @gol
-mcaller-copies  -mdisable-fpregs  -mdisable-indexing @gol
-mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
-mfixed-range=@var{register-range} @gol
-mjump-in-delay  -mlinker-opt  -mlong-calls @gol
-mlong-load-store  -mno-disable-fpregs @gol
-mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
-mno-jump-in-delay  -mno-long-load-store @gol
-mno-portable-runtime  -mno-soft-float @gol
-mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
-mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
-mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
-munix=@var{unix-std}  -nolibdld  -static  -threads}

@emph{IA-64 Options}
@gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
-mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata @gol
-mconstant-gp  -mauto-pic  -mfused-madd @gol
-minline-float-divide-min-latency @gol
-minline-float-divide-max-throughput @gol
-mno-inline-float-divide @gol
-minline-int-divide-min-latency @gol
-minline-int-divide-max-throughput  @gol
-mno-inline-int-divide @gol
-minline-sqrt-min-latency  -minline-sqrt-max-throughput @gol
-mno-inline-sqrt @gol
-mdwarf2-asm  -mearly-stop-bits @gol
-mfixed-range=@var{register-range}  -mtls-size=@var{tls-size} @gol
-mtune=@var{cpu-type}  -milp32  -mlp64 @gol
-msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec @gol
-msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec @gol
-msched-spec-ldc  -msched-spec-control-ldc @gol
-msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns @gol
-msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path @gol
-msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost @gol
-msched-max-memory-insns-hard-limit  -msched-max-memory-insns=@var{max-insns}}

@emph{LM32 Options}
@gccoptlist{-mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled @gol
-msign-extend-enabled  -muser-enabled}

@emph{M32R/D Options}
@gccoptlist{-m32r2  -m32rx  -m32r @gol
-mdebug @gol
-malign-loops  -mno-align-loops @gol
-missue-rate=@var{number} @gol
-mbranch-cost=@var{number} @gol
-mmodel=@var{code-size-model-type} @gol
-msdata=@var{sdata-type} @gol
-mno-flush-func  -mflush-func=@var{name} @gol
-mno-flush-trap  -mflush-trap=@var{number} @gol
-G @var{num}}

@emph{M32C Options}
@gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}

@emph{M680x0 Options}
@gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune} @gol
-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
-m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
-mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
-mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
-mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
-malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
-mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
-mxgot  -mno-xgot  -mlong-jump-table-offsets}

@emph{MCore Options}
@gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
-mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
-m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
-mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
-mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}

@emph{MeP Options}
@gccoptlist{-mabsdiff  -mall-opts  -maverage  -mbased=@var{n}  -mbitops @gol
-mc=@var{n}  -mclip  -mconfig=@var{name}  -mcop  -mcop32  -mcop64  -mivc2 @gol
-mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax @gol
-mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf @gol
-mtiny=@var{n}}

@emph{MicroBlaze Options}
@gccoptlist{-msoft-float  -mhard-float  -msmall-divides  -mcpu=@var{cpu} @gol
-mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift @gol
-mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss @gol
-mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt @gol
-mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-@var{app-model}}

@emph{MIPS Options}
@gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
-mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 @gol
-mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 @gol
-mips16  -mno-mips16  -mflip-mips16 @gol
-minterlink-compressed  -mno-interlink-compressed @gol
-minterlink-mips16  -mno-interlink-mips16 @gol
-mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
-mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
-mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float @gol
-mno-float  -msingle-float  -mdouble-float @gol
-modd-spreg  -mno-odd-spreg @gol
-mabs=@var{mode}  -mnan=@var{encoding} @gol
-mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
-mmcu  -mmno-mcu @gol
-meva  -mno-eva @gol
-mvirt  -mno-virt @gol
-mxpa  -mno-xpa @gol
-mmicromips  -mno-micromips @gol
-mmsa  -mno-msa @gol
-mfpu=@var{fpu-type} @gol
-msmartmips  -mno-smartmips @gol
-mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
-mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
-mlong64  -mlong32  -msym32  -mno-sym32 @gol
-G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
-mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
-membedded-data  -mno-embedded-data @gol
-muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
-mcode-readable=@var{setting} @gol
-msplit-addresses  -mno-split-addresses @gol
-mexplicit-relocs  -mno-explicit-relocs @gol
-mcheck-zero-division  -mno-check-zero-division @gol
-mdivide-traps  -mdivide-breaks @gol
-mload-store-pairs  -mno-load-store-pairs @gol
-mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
-mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp @gol
-mfix-24k  -mno-fix-24k @gol
-mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
-mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000 @gol
-mfix-vr4120  -mno-fix-vr4120 @gol
-mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
-mflush-func=@var{func}  -mno-flush-func @gol
-mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
-mcompact-branches=@var{policy} @gol
-mfp-exceptions  -mno-fp-exceptions @gol
-mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci @gol
-mlxc1-sxc1 -mno-lxc1-sxc1 -mmadd4 -mno-madd4 @gol
-mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address @gol
-mframe-header-opt  -mno-frame-header-opt}

@emph{MMIX Options}
@gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
-mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
-melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
-mno-base-addresses  -msingle-exit  -mno-single-exit}

@emph{MN10300 Options}
@gccoptlist{-mmult-bug  -mno-mult-bug @gol
-mno-am33  -mam33  -mam33-2  -mam34 @gol
-mtune=@var{cpu-type} @gol
-mreturn-pointer-on-d0 @gol
-mno-crt0  -mrelax  -mliw  -msetlb}

@emph{Moxie Options}
@gccoptlist{-meb  -mel  -mmul.x  -mno-crt0}

@emph{MSP430 Options}
@gccoptlist{-msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax @gol
-mwarn-mcu @gol
-mcode-region=  -mdata-region= @gol
-msilicon-errata=  -msilicon-errata-warn= @gol
-mhwmult=  -minrt}

@emph{NDS32 Options}
@gccoptlist{-mbig-endian  -mlittle-endian @gol
-mreduced-regs  -mfull-regs @gol
-mcmov  -mno-cmov @gol
-mext-perf  -mno-ext-perf @gol
-mext-perf2  -mno-ext-perf2 @gol
-mext-string  -mno-ext-string @gol
-mv3push  -mno-v3push @gol
-m16bit  -mno-16bit @gol
-misr-vector-size=@var{num} @gol
-mcache-block-size=@var{num} @gol
-march=@var{arch} @gol
-mcmodel=@var{code-model} @gol
-mctor-dtor  -mrelax}

@emph{Nios II Options}
@gccoptlist{-G @var{num}  -mgpopt=@var{option}  -mgpopt  -mno-gpopt @gol
-mgprel-sec=@var{regexp} -mr0rel-sec=@var{regexp} @gol
-mel  -meb @gol
-mno-bypass-cache  -mbypass-cache @gol
-mno-cache-volatile  -mcache-volatile @gol
-mno-fast-sw-div  -mfast-sw-div @gol
-mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div @gol
-mcustom-@var{insn}=@var{N}  -mno-custom-@var{insn} @gol
-mcustom-fpu-cfg=@var{name} @gol
-mhal  -msmallc  -msys-crt0=@var{name}  -msys-lib=@var{name} @gol
-march=@var{arch}  -mbmx  -mno-bmx  -mcdx  -mno-cdx}

@emph{Nvidia PTX Options}
@gccoptlist{-m32  -m64  -mmainkernel  -moptimize}

@emph{PDP-11 Options}
@gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
-mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
-mint16  -mno-int32  -mfloat32  -mno-float64 @gol
-mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
-mbranch-expensive  -mbranch-cheap @gol
-munix-asm  -mdec-asm}

@emph{picoChip Options}
@gccoptlist{-mae=@var{ae_type}  -mvliw-lookahead=@var{N} @gol
-msymbol-as-address  -mno-inefficient-warnings}

@emph{PowerPC Options}
See RS/6000 and PowerPC Options.

@emph{PowerPC SPE Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb @gol
-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
-m32  -mxl-compat  -mno-xl-compat @gol
-malign-power  -malign-natural @gol
-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
-msingle-float  -mdouble-float @gol
-mupdate  -mno-update @gol
-mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
-mstrict-align  -mno-strict-align  -mrelocatable @gol
-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
-msingle-pic-base @gol
-mprioritize-restricted-insns=@var{priority} @gol
-msched-costly-dep=@var{dependence_type} @gol
-minsert-sched-nops=@var{scheme} @gol
-mcall-sysv  -mcall-netbsd @gol
-maix-struct-return  -msvr4-struct-return @gol
-mabi=@var{abi-type}  -msecure-plt  -mbss-plt @gol
-mblock-move-inline-limit=@var{num} @gol
-misel  -mno-isel @gol
-misel=yes  -misel=no @gol
-mspe  -mno-spe @gol
-mspe=yes  -mspe=no @gol
-mfloat-gprs=yes  -mfloat-gprs=no  -mfloat-gprs=single  -mfloat-gprs=double @gol
-mprototype  -mno-prototype @gol
-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
-msdata=@var{opt}  -mvxworks  -G @var{num} @gol
-mrecip  -mrecip=@var{opt}  -mno-recip  -mrecip-precision @gol
-mno-recip-precision @gol
-mpointers-to-nested-functions  -mno-pointers-to-nested-functions @gol
-msave-toc-indirect  -mno-save-toc-indirect @gol
-mcompat-align-parm  -mno-compat-align-parm @gol
-mfloat128  -mno-float128 @gol
-mgnu-attribute  -mno-gnu-attribute @gol
-mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
-mstack-protector-guard-offset=@var{offset}}

@emph{RISC-V Options}
@gccoptlist{-mbranch-cost=@var{N-instruction} @gol
-mplt  -mno-plt @gol
-mabi=@var{ABI-string} @gol
-mfdiv  -mno-fdiv @gol
-mdiv  -mno-div @gol
-march=@var{ISA-string} @gol
-mtune=@var{processor-string} @gol
-mpreferred-stack-boundary=@var{num} @gol
-msmall-data-limit=@var{N-bytes} @gol
-msave-restore  -mno-save-restore @gol
-mstrict-align -mno-strict-align @gol
-mcmodel=medlow -mcmodel=medany @gol
-mexplicit-relocs  -mno-explicit-relocs @gol
-mrelax -mno-relax @gol}

@emph{RL78 Options}
@gccoptlist{-msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs @gol
-mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14 @gol
-m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts}

@emph{RS/6000 and PowerPC Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mcmodel=@var{code-model} @gol
-mpowerpc64 @gol
-maltivec  -mno-altivec @gol
-mpowerpc-gpopt  -mno-powerpc-gpopt @gol
-mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
-mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd @gol
-mfprnd  -mno-fprnd @gol
-mcmpb  -mno-cmpb  -mmfpgpr  -mno-mfpgpr  -mhard-dfp  -mno-hard-dfp @gol
-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
-m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
-malign-power  -malign-natural @gol
-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
-msingle-float  -mdouble-float  -msimple-fpu @gol
-mupdate  -mno-update @gol
-mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
-mstrict-align  -mno-strict-align  -mrelocatable @gol
-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
-mdynamic-no-pic  -maltivec  -mswdiv  -msingle-pic-base @gol
-mprioritize-restricted-insns=@var{priority} @gol
-msched-costly-dep=@var{dependence_type} @gol
-minsert-sched-nops=@var{scheme} @gol
-mcall-aixdesc  -mcall-eabi  -mcall-freebsd  @gol
-mcall-linux  -mcall-netbsd  -mcall-openbsd  @gol
-mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi @gol
-mtraceback=@var{traceback_type} @gol
-maix-struct-return  -msvr4-struct-return @gol
-mabi=@var{abi-type}  -msecure-plt  -mbss-plt @gol
-mblock-move-inline-limit=@var{num} @gol
-mblock-compare-inline-limit=@var{num} @gol
-mblock-compare-inline-loop-limit=@var{num} @gol
-mstring-compare-inline-limit=@var{num} @gol
-misel  -mno-isel @gol
-misel=yes  -misel=no @gol
-mpaired @gol
-mvrsave  -mno-vrsave @gol
-mmulhw  -mno-mulhw @gol
-mdlmzb  -mno-dlmzb @gol
-mprototype  -mno-prototype @gol
-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
-msdata=@var{opt}  -mreadonly-in-sdata  -mvxworks  -G @var{num} @gol
-mrecip  -mrecip=@var{opt}  -mno-recip  -mrecip-precision @gol
-mno-recip-precision @gol
-mveclibabi=@var{type}  -mfriz  -mno-friz @gol
-mpointers-to-nested-functions  -mno-pointers-to-nested-functions @gol
-msave-toc-indirect  -mno-save-toc-indirect @gol
-mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector @gol
-mcrypto  -mno-crypto  -mhtm  -mno-htm @gol
-mquad-memory  -mno-quad-memory @gol
-mquad-memory-atomic  -mno-quad-memory-atomic @gol
-mcompat-align-parm  -mno-compat-align-parm @gol
-mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware @gol
-mgnu-attribute  -mno-gnu-attribute @gol
-mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
-mstack-protector-guard-offset=@var{offset}}

@emph{RX Options}
@gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
-mcpu=@gol
-mbig-endian-data  -mlittle-endian-data @gol
-msmall-data @gol
-msim  -mno-sim@gol
-mas100-syntax  -mno-as100-syntax@gol
-mrelax@gol
-mmax-constant-size=@gol
-mint-register=@gol
-mpid@gol
-mallow-string-insns  -mno-allow-string-insns@gol
-mjsr@gol
-mno-warn-multiple-fast-interrupts@gol
-msave-acc-in-interrupts}

@emph{S/390 and zSeries Options}
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
-mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp @gol
-mlong-double-64  -mlong-double-128 @gol
-mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack @gol
-msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle @gol
-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
-mhtm  -mvx  -mzvector @gol
-mtpf-trace  -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
-mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard @gol
-mhotpatch=@var{halfwords},@var{halfwords}}

@emph{Score Options}
@gccoptlist{-meb  -mel @gol
-mnhwloop @gol
-muls @gol
-mmac @gol
-mscore5  -mscore5u  -mscore7  -mscore7d}

@emph{SH Options}
@gccoptlist{-m1  -m2  -m2e @gol
-m2a-nofpu  -m2a-single-only  -m2a-single  -m2a @gol
-m3  -m3e @gol
-m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
-m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al @gol
-mb  -ml  -mdalign  -mrelax @gol
-mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave @gol
-mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct @gol
-mprefergot  -musermode  -multcost=@var{number}  -mdiv=@var{strategy} @gol
-mdivsi3_libfunc=@var{name}  -mfixed-range=@var{register-range} @gol
-maccumulate-outgoing-args @gol
-matomic-model=@var{atomic-model} @gol
-mbranch-cost=@var{num}  -mzdcbranch  -mno-zdcbranch @gol
-mcbranch-force-delay-slot @gol
-mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra @gol
-mpretend-cmove  -mtas}

@emph{Solaris 2 Options}
@gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text @gol
-pthreads}

@emph{SPARC Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mcmodel=@var{code-model} @gol
-mmemory-model=@var{mem-model} @gol
-m32  -m64  -mapp-regs  -mno-app-regs @gol
-mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
-mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
-mhard-quad-float  -msoft-quad-float @gol
-mstack-bias  -mno-stack-bias @gol
-mstd-struct-return  -mno-std-struct-return @gol
-munaligned-doubles  -mno-unaligned-doubles @gol
-muser-mode  -mno-user-mode @gol
-mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
-mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
-mvis4 -mno-vis4 -mvis4b -mno-vis4b @gol
-mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld  @gol
-mpopc  -mno-popc  -msubxc  -mno-subxc @gol
-mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc @gol
-mlra  -mno-lra}

@emph{SPU Options}
@gccoptlist{-mwarn-reloc  -merror-reloc @gol
-msafe-dma  -munsafe-dma @gol
-mbranch-hints @gol
-msmall-mem  -mlarge-mem  -mstdmain @gol
-mfixed-range=@var{register-range} @gol
-mea32  -mea64 @gol
-maddress-space-conversion  -mno-address-space-conversion @gol
-mcache-size=@var{cache-size} @gol
-matomic-updates  -mno-atomic-updates}

@emph{System V Options}
@gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}

@emph{TILE-Gx Options}
@gccoptlist{-mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian @gol
-mcmodel=@var{code-model}}

@emph{TILEPro Options}
@gccoptlist{-mcpu=@var{cpu}  -m32}

@emph{V850 Options}
@gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
-mprolog-function  -mno-prolog-function  -mspace @gol
-mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
-mapp-regs  -mno-app-regs @gol
-mdisable-callt  -mno-disable-callt @gol
-mv850e2v3  -mv850e2  -mv850e1  -mv850es @gol
-mv850e  -mv850  -mv850e3v5 @gol
-mloop @gol
-mrelax @gol
-mlong-jumps @gol
-msoft-float @gol
-mhard-float @gol
-mgcc-abi @gol
-mrh850-abi @gol
-mbig-switch}

@emph{VAX Options}
@gccoptlist{-mg  -mgnu  -munix}

@emph{Visium Options}
@gccoptlist{-mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
-mcpu=@var{cpu-type}  -mtune=@var{cpu-type}  -msv-mode  -muser-mode}

@emph{VMS Options}
@gccoptlist{-mvms-return-codes  -mdebug-main=@var{prefix}  -mmalloc64 @gol
-mpointer-size=@var{size}}

@emph{VxWorks Options}
@gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
-Xbind-lazy  -Xbind-now}

@emph{x86 Options}
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
-mtune-ctrl=@var{feature-list}  -mdump-tune-features  -mno-default @gol
-mfpmath=@var{unit} @gol
-masm=@var{dialect}  -mno-fancy-math-387 @gol
-mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float @gol
-mno-wide-multiply  -mrtd  -malign-double @gol
-mpreferred-stack-boundary=@var{num} @gol
-mincoming-stack-boundary=@var{num} @gol
-mcld  -mcx16  -msahf  -mmovbe  -mcrc32 @gol
-mrecip  -mrecip=@var{opt} @gol
-mvzeroupper  -mprefer-avx128 -mprefer-vector-width=@var{opt} @gol
-mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx @gol
-mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl @gol
-mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes @gol
-mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma -mpconfig -mwbnoinvd @gol
-mprefetchwt1  -mclflushopt  -mxsavec  -mxsaves @gol
-msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop @gol
-mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mlwp  -mmpx  @gol
-mmwaitx  -mclzero  -mpku  -mthreads -mgfni  -mvaes  @gol
-mshstk -mforce-indirect-call -mavx512vbmi2 @gol
-mvpclmulqdq -mavx512bitalg -mmovdiri -mmovdir64b -mavx512vpopcntdq @gol
-mms-bitfields  -mno-align-stringops  -minline-all-stringops @gol
-minline-stringops-dynamically  -mstringop-strategy=@var{alg} @gol
-mmemcpy-strategy=@var{strategy}  -mmemset-strategy=@var{strategy} @gol
-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
-m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128 @gol
-mregparm=@var{num}  -msseregparm @gol
-mveclibabi=@var{type}  -mvect8-ret-in-mem @gol
-mpc32  -mpc64  -mpc80  -mstackrealign @gol
-momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs @gol
-mcmodel=@var{code-model}  -mabi=@var{name}  -maddress-mode=@var{mode} @gol
-m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=@var{num} @gol
-msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv @gol
-mavx256-split-unaligned-load  -mavx256-split-unaligned-store @gol
-malign-data=@var{type}  -mstack-protector-guard=@var{guard} @gol
-mstack-protector-guard-reg=@var{reg} @gol
-mstack-protector-guard-offset=@var{offset} @gol
-mstack-protector-guard-symbol=@var{symbol} -mmitigate-rop @gol
-mgeneral-regs-only -mcall-ms2sysv-xlogues @gol
-mindirect-branch=@var{choice} -mfunction-return=@var{choice} @gol
-mindirect-branch-register}

@emph{x86 Windows Options}
@gccoptlist{-mconsole  -mcygwin  -mno-cygwin  -mdll @gol
-mnop-fun-dllimport  -mthread @gol
-municode  -mwin32  -mwindows  -fno-set-stack-executable}

@emph{Xstormy16 Options}
@gccoptlist{-msim}

@emph{Xtensa Options}
@gccoptlist{-mconst16  -mno-const16 @gol
-mfused-madd  -mno-fused-madd @gol
-mforce-no-pic @gol
-mserialize-volatile  -mno-serialize-volatile @gol
-mtext-section-literals  -mno-text-section-literals @gol
-mauto-litpools  -mno-auto-litpools @gol
-mtarget-align  -mno-target-align @gol
-mlongcalls  -mno-longcalls}

@emph{zSeries Options}
See S/390 and zSeries Options.
@end table


@node Overall Options
@section Options Controlling the Kind of Output

Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order.  GCC is capable of
preprocessing and compiling several files either into several
assembler input files, or into one assembler input file; then each
assembler input file produces an object file, and linking combines all
the object files (those newly compiled, and those specified as input)
into an executable file.

@cindex file name suffix
For any given input file, the file name suffix determines what kind of
compilation is done:

@table @gcctabopt
@item @var{file}.c
C source code that must be preprocessed.

@item @var{file}.i
C source code that should not be preprocessed.

@item @var{file}.ii
C++ source code that should not be preprocessed.

@item @var{file}.m
Objective-C source code.  Note that you must link with the @file{libobjc}
library to make an Objective-C program work.

@item @var{file}.mi
Objective-C source code that should not be preprocessed.

@item @var{file}.mm
@itemx @var{file}.M
Objective-C++ source code.  Note that you must link with the @file{libobjc}
library to make an Objective-C++ program work.  Note that @samp{.M} refers
to a literal capital M@.

@item @var{file}.mii
Objective-C++ source code that should not be preprocessed.

@item @var{file}.h
C, C++, Objective-C or Objective-C++ header file to be turned into a
precompiled header (default), or C, C++ header file to be turned into an
Ada spec (via the @option{-fdump-ada-spec} switch).

@item @var{file}.cc
@itemx @var{file}.cp
@itemx @var{file}.cxx
@itemx @var{file}.cpp
@itemx @var{file}.CPP
@itemx @var{file}.c++
@itemx @var{file}.C
C++ source code that must be preprocessed.  Note that in @samp{.cxx},
the last two letters must both be literally @samp{x}.  Likewise,
@samp{.C} refers to a literal capital C@.

@item @var{file}.mm
@itemx @var{file}.M
Objective-C++ source code that must be preprocessed.

@item @var{file}.mii
Objective-C++ source code that should not be preprocessed.

@item @var{file}.hh
@itemx @var{file}.H
@itemx @var{file}.hp
@itemx @var{file}.hxx
@itemx @var{file}.hpp
@itemx @var{file}.HPP
@itemx @var{file}.h++
@itemx @var{file}.tcc
C++ header file to be turned into a precompiled header or Ada spec.

@item @var{file}.f
@itemx @var{file}.for
@itemx @var{file}.ftn
Fixed form Fortran source code that should not be preprocessed.

@item @var{file}.F
@itemx @var{file}.FOR
@itemx @var{file}.fpp
@itemx @var{file}.FPP
@itemx @var{file}.FTN
Fixed form Fortran source code that must be preprocessed (with the traditional
preprocessor).

@item @var{file}.f90
@itemx @var{file}.f95
@itemx @var{file}.f03
@itemx @var{file}.f08
Free form Fortran source code that should not be preprocessed.

@item @var{file}.F90
@itemx @var{file}.F95
@itemx @var{file}.F03
@itemx @var{file}.F08
Free form Fortran source code that must be preprocessed (with the
traditional preprocessor).

@item @var{file}.go
Go source code.

@item @var{file}.brig
BRIG files (binary representation of HSAIL).

@item @var{file}.ads
Ada source code file that contains a library unit declaration (a
declaration of a package, subprogram, or generic, or a generic
instantiation), or a library unit renaming declaration (a package,
generic, or subprogram renaming declaration).  Such files are also
called @dfn{specs}.

@item @var{file}.adb
Ada source code file containing a library unit body (a subprogram or
package body).  Such files are also called @dfn{bodies}.

@c GCC also knows about some suffixes for languages not yet included:
@c Pascal:
@c @var{file}.p
@c @var{file}.pas
@c Ratfor:
@c @var{file}.r

@item @var{file}.s
Assembler code.

@item @var{file}.S
@itemx @var{file}.sx
Assembler code that must be preprocessed.

@item @var{other}
An object file to be fed straight into linking.
Any file name with no recognized suffix is treated this way.
@end table

@opindex x
You can specify the input language explicitly with the @option{-x} option:

@table @gcctabopt
@item -x @var{language}
Specify explicitly the @var{language} for the following input files
(rather than letting the compiler choose a default based on the file
name suffix).  This option applies to all following input files until
the next @option{-x} option.  Possible values for @var{language} are:
@smallexample
c  c-header  cpp-output
c++  c++-header  c++-cpp-output
objective-c  objective-c-header  objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler  assembler-with-cpp
ada
f77  f77-cpp-input f95  f95-cpp-input
go
brig
@end smallexample

@item -x none
Turn off any specification of a language, so that subsequent files are
handled according to their file name suffixes (as they are if @option{-x}
has not been used at all).
@end table

If you only want some of the stages of compilation, you can use
@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
one of the options @option{-c}, @option{-S}, or @option{-E} to say where
@command{gcc} is to stop.  Note that some combinations (for example,
@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.

@table @gcctabopt
@item -c
@opindex c
Compile or assemble the source files, but do not link.  The linking
stage simply is not done.  The ultimate output is in the form of an
object file for each source file.

By default, the object file name for a source file is made by replacing
the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.

Unrecognized input files, not requiring compilation or assembly, are
ignored.

@item -S
@opindex S
Stop after the stage of compilation proper; do not assemble.  The output
is in the form of an assembler code file for each non-assembler input
file specified.

By default, the assembler file name for a source file is made by
replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.

Input files that don't require compilation are ignored.

@item -E
@opindex E
Stop after the preprocessing stage; do not run the compiler proper.  The
output is in the form of preprocessed source code, which is sent to the
standard output.

Input files that don't require preprocessing are ignored.

@cindex output file option
@item -o @var{file}
@opindex o
Place output in file @var{file}.  This applies to whatever
sort of output is being produced, whether it be an executable file,
an object file, an assembler file or preprocessed C code.

If @option{-o} is not specified, the default is to put an executable
file in @file{a.out}, the object file for
@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
assembler file in @file{@var{source}.s}, a precompiled header file in
@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
standard output.

@item -v
@opindex v
Print (on standard error output) the commands executed to run the stages
of compilation.  Also print the version number of the compiler driver
program and of the preprocessor and the compiler proper.

@item -###
@opindex ###
Like @option{-v} except the commands are not executed and arguments
are quoted unless they contain only alphanumeric characters or @code{./-_}.
This is useful for shell scripts to capture the driver-generated command lines.

@item --help
@opindex help
Print (on the standard output) a description of the command-line options
understood by @command{gcc}.  If the @option{-v} option is also specified
then @option{--help} is also passed on to the various processes
invoked by @command{gcc}, so that they can display the command-line options
they accept.  If the @option{-Wextra} option has also been specified
(prior to the @option{--help} option), then command-line options that
have no documentation associated with them are also displayed.

@item --target-help
@opindex target-help
Print (on the standard output) a description of target-specific command-line
options for each tool.  For some targets extra target-specific
information may also be printed.

@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
Print (on the standard output) a description of the command-line
options understood by the compiler that fit into all specified classes
and qualifiers.  These are the supported classes:

@table @asis
@item @samp{optimizers}
Display all of the optimization options supported by the
compiler.

@item @samp{warnings}
Display all of the options controlling warning messages
produced by the compiler.

@item @samp{target}
Display target-specific options.  Unlike the
@option{--target-help} option however, target-specific options of the
linker and assembler are not displayed.  This is because those
tools do not currently support the extended @option{--help=} syntax.

@item @samp{params}
Display the values recognized by the @option{--param}
option.

@item @var{language}
Display the options supported for @var{language}, where
@var{language} is the name of one of the languages supported in this
version of GCC@.

@item @samp{common}
Display the options that are common to all languages.
@end table

These are the supported qualifiers:

@table @asis
@item @samp{undocumented}
Display only those options that are undocumented.

@item @samp{joined}
Display options taking an argument that appears after an equal
sign in the same continuous piece of text, such as:
@samp{--help=target}.

@item @samp{separate}
Display options taking an argument that appears as a separate word
following the original option, such as: @samp{-o output-file}.
@end table

Thus for example to display all the undocumented target-specific
switches supported by the compiler, use:

@smallexample
--help=target,undocumented
@end smallexample

The sense of a qualifier can be inverted by prefixing it with the
@samp{^} character, so for example to display all binary warning
options (i.e., ones that are either on or off and that do not take an
argument) that have a description, use:

@smallexample
--help=warnings,^joined,^undocumented
@end smallexample

The argument to @option{--help=} should not consist solely of inverted
qualifiers.

Combining several classes is possible, although this usually
restricts the output so much that there is nothing to display.  One
case where it does work, however, is when one of the classes is
@var{target}.  For example, to display all the target-specific
optimization options, use:

@smallexample
--help=target,optimizers
@end smallexample

The @option{--help=} option can be repeated on the command line.  Each
successive use displays its requested class of options, skipping
those that have already been displayed.

If the @option{-Q} option appears on the command line before the
@option{--help=} option, then the descriptive text displayed by
@option{--help=} is changed.  Instead of describing the displayed
options, an indication is given as to whether the option is enabled,
disabled or set to a specific value (assuming that the compiler
knows this at the point where the @option{--help=} option is used).

Here is a truncated example from the ARM port of @command{gcc}:

@smallexample
  % gcc -Q -mabi=2 --help=target -c
  The following options are target specific:
  -mabi=                                2
  -mabort-on-noreturn                   [disabled]
  -mapcs                                [disabled]
@end smallexample

The output is sensitive to the effects of previous command-line
options, so for example it is possible to find out which optimizations
are enabled at @option{-O2} by using:

@smallexample
-Q -O2 --help=optimizers
@end smallexample

Alternatively you can discover which binary optimizations are enabled
by @option{-O3} by using:

@smallexample
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep enabled
@end smallexample

@item --version
@opindex version
Display the version number and copyrights of the invoked GCC@.

@item -pass-exit-codes
@opindex pass-exit-codes
Normally the @command{gcc} program exits with the code of 1 if any
phase of the compiler returns a non-success return code.  If you specify
@option{-pass-exit-codes}, the @command{gcc} program instead returns with
the numerically highest error produced by any phase returning an error
indication.  The C, C++, and Fortran front ends return 4 if an internal
compiler error is encountered.

@item -pipe
@opindex pipe
Use pipes rather than temporary files for communication between the
various stages of compilation.  This fails to work on some systems where
the assembler is unable to read from a pipe; but the GNU assembler has
no trouble.

@item -specs=@var{file}
@opindex specs
Process @var{file} after the compiler reads in the standard @file{specs}
file, in order to override the defaults which the @command{gcc} driver
program uses when determining what switches to pass to @command{cc1},
@command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
@option{-specs=@var{file}} can be specified on the command line, and they
are processed in order, from left to right.  @xref{Spec Files}, for
information about the format of the @var{file}.

@item -wrapper
@opindex wrapper
Invoke all subcommands under a wrapper program.  The name of the
wrapper program and its parameters are passed as a comma separated
list.

@smallexample
gcc -c t.c -wrapper gdb,--args
@end smallexample

@noindent
This invokes all subprograms of @command{gcc} under
@samp{gdb --args}, thus the invocation of @command{cc1} is
@samp{gdb --args cc1 @dots{}}.

@item -ffile-prefix-map=@var{old}=@var{new}
@opindex ffile-prefix-map
When compiling files residing in directory @file{@var{old}}, record
any references to them in the result of the compilation as if the
files resided in directory @file{@var{new}} instead.  Specifying this
option is equivalent to specifying all the individual
@option{-f*-prefix-map} options.  This can be used to make reproducible
builds that are location independent.  See also
@option{-fmacro-prefix-map} and @option{-fdebug-prefix-map}.

@item -fplugin=@var{name}.so
@opindex fplugin
Load the plugin code in file @var{name}.so, assumed to be a
shared object to be dlopen'd by the compiler.  The base name of
the shared object file is used to identify the plugin for the
purposes of argument parsing (See
@option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
Each plugin should define the callback functions specified in the
Plugins API.

@item -fplugin-arg-@var{name}-@var{key}=@var{value}
@opindex fplugin-arg
Define an argument called @var{key} with a value of @var{value}
for the plugin called @var{name}.

@item -fdump-ada-spec@r{[}-slim@r{]}
@opindex fdump-ada-spec
For C and C++ source and include files, generate corresponding Ada specs.
@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
GNAT User's Guide}, which provides detailed documentation on this feature.

@item -fada-spec-parent=@var{unit}
@opindex fada-spec-parent
In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
Ada specs as child units of parent @var{unit}.

@item -fdump-go-spec=@var{file}
@opindex fdump-go-spec
For input files in any language, generate corresponding Go
declarations in @var{file}.  This generates Go @code{const},
@code{type}, @code{var}, and @code{func} declarations which may be a
useful way to start writing a Go interface to code written in some
other language.

@include @value{srcdir}/../libiberty/at-file.texi
@end table

@node Invoking G++
@section Compiling C++ Programs

@cindex suffixes for C++ source
@cindex C++ source file suffixes
C++ source files conventionally use one of the suffixes @samp{.C},
@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
@samp{.H}, or (for shared template code) @samp{.tcc}; and
preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
files with these names and compiles them as C++ programs even if you
call the compiler the same way as for compiling C programs (usually
with the name @command{gcc}).

@findex g++
@findex c++
However, the use of @command{gcc} does not add the C++ library.
@command{g++} is a program that calls GCC and automatically specifies linking
against the C++ library.  It treats @samp{.c},
@samp{.h} and @samp{.i} files as C++ source files instead of C source
files unless @option{-x} is used.  This program is also useful when
precompiling a C header file with a @samp{.h} extension for use in C++
compilations.  On many systems, @command{g++} is also installed with
the name @command{c++}.

@cindex invoking @command{g++}
When you compile C++ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
languages; or options that are meaningful only for C++ programs.
@xref{C Dialect Options,,Options Controlling C Dialect}, for
explanations of options for languages related to C@.
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
explanations of options that are meaningful only for C++ programs.

@node C Dialect Options
@section Options Controlling C Dialect
@cindex dialect options
@cindex language dialect options
@cindex options, dialect

The following options control the dialect of C (or languages derived
from C, such as C++, Objective-C and Objective-C++) that the compiler
accepts:

@table @gcctabopt
@cindex ANSI support
@cindex ISO support
@item -ansi
@opindex ansi
In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
equivalent to @option{-std=c++98}.

This turns off certain features of GCC that are incompatible with ISO
C90 (when compiling C code), or of standard C++ (when compiling C++ code),
such as the @code{asm} and @code{typeof} keywords, and
predefined macros such as @code{unix} and @code{vax} that identify the
type of system you are using.  It also enables the undesirable and
rarely used ISO trigraph feature.  For the C compiler,
it disables recognition of C++ style @samp{//} comments as well as
the @code{inline} keyword.

The alternate keywords @code{__asm__}, @code{__extension__},
@code{__inline__} and @code{__typeof__} continue to work despite
@option{-ansi}.  You would not want to use them in an ISO C program, of
course, but it is useful to put them in header files that might be included
in compilations done with @option{-ansi}.  Alternate predefined macros
such as @code{__unix__} and @code{__vax__} are also available, with or
without @option{-ansi}.

The @option{-ansi} option does not cause non-ISO programs to be
rejected gratuitously.  For that, @option{-Wpedantic} is required in
addition to @option{-ansi}.  @xref{Warning Options}.

The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
option is used.  Some header files may notice this macro and refrain
from declaring certain functions or defining certain macros that the
ISO standard doesn't call for; this is to avoid interfering with any
programs that might use these names for other things.

Functions that are normally built in but do not have semantics
defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
built-in functions provided by GCC}, for details of the functions
affected.

@item -std=
@opindex std
Determine the language standard. @xref{Standards,,Language Standards
Supported by GCC}, for details of these standard versions.  This option
is currently only supported when compiling C or C++.

The compiler can accept several base standards, such as @samp{c90} or
@samp{c++98}, and GNU dialects of those standards, such as
@samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
compiler accepts all programs following that standard plus those
using GNU extensions that do not contradict it.  For example,
@option{-std=c90} turns off certain features of GCC that are
incompatible with ISO C90, such as the @code{asm} and @code{typeof}
keywords, but not other GNU extensions that do not have a meaning in
ISO C90, such as omitting the middle term of a @code{?:}
expression. On the other hand, when a GNU dialect of a standard is
specified, all features supported by the compiler are enabled, even when
those features change the meaning of the base standard.  As a result, some
strict-conforming programs may be rejected.  The particular standard
is used by @option{-Wpedantic} to identify which features are GNU
extensions given that version of the standard. For example
@option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
comments, while @option{-std=gnu99 -Wpedantic} does not.

A value for this option must be provided; possible values are

@table @samp
@item c90
@itemx c89
@itemx iso9899:1990
Support all ISO C90 programs (certain GNU extensions that conflict
with ISO C90 are disabled). Same as @option{-ansi} for C code.

@item iso9899:199409
ISO C90 as modified in amendment 1.

@item c99
@itemx c9x
@itemx iso9899:1999
@itemx iso9899:199x
ISO C99.  This standard is substantially completely supported, modulo
bugs and floating-point issues
(mainly but not entirely relating to optional C99 features from
Annexes F and G).  See
@w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
names @samp{c9x} and @samp{iso9899:199x} are deprecated.

@item c11
@itemx c1x
@itemx iso9899:2011
ISO C11, the 2011 revision of the ISO C standard.  This standard is
substantially completely supported, modulo bugs, floating-point issues
(mainly but not entirely relating to optional C11 features from
Annexes F and G) and the optional Annexes K (Bounds-checking
interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.

@item c17
@itemx c18
@itemx iso9899:2017
@itemx iso9899:2018
ISO C17, the 2017 revision of the ISO C standard (expected to be
published in 2018).  This standard is
same as C11 except for corrections of defects (all of which are also
applied with @option{-std=c11}) and a new value of
@code{__STDC_VERSION__}, and so is supported to the same extent as C11.

@item gnu90
@itemx gnu89
GNU dialect of ISO C90 (including some C99 features).

@item gnu99
@itemx gnu9x
GNU dialect of ISO C99.  The name @samp{gnu9x} is deprecated.

@item gnu11
@itemx gnu1x
GNU dialect of ISO C11.
The name @samp{gnu1x} is deprecated.

@item gnu17
@itemx gnu18
GNU dialect of ISO C17.  This is the default for C code.

@item c++98
@itemx c++03
The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
additional defect reports. Same as @option{-ansi} for C++ code.

@item gnu++98
@itemx gnu++03
GNU dialect of @option{-std=c++98}.

@item c++11
@itemx c++0x
The 2011 ISO C++ standard plus amendments.
The name @samp{c++0x} is deprecated.

@item gnu++11
@itemx gnu++0x
GNU dialect of @option{-std=c++11}.
The name @samp{gnu++0x} is deprecated.

@item c++14
@itemx c++1y
The 2014 ISO C++ standard plus amendments.
The name @samp{c++1y} is deprecated.

@item gnu++14
@itemx gnu++1y
GNU dialect of @option{-std=c++14}.
This is the default for C++ code.
The name @samp{gnu++1y} is deprecated.

@item c++17
@itemx c++1z
The 2017 ISO C++ standard plus amendments.
The name @samp{c++1z} is deprecated.

@item gnu++17
@itemx gnu++1z
GNU dialect of @option{-std=c++17}.
The name @samp{gnu++1z} is deprecated.

@item c++2a
The next revision of the ISO C++ standard, tentatively planned for
2020.  Support is highly experimental, and will almost certainly
change in incompatible ways in future releases.

@item gnu++2a
GNU dialect of @option{-std=c++2a}.  Support is highly experimental,
and will almost certainly change in incompatible ways in future
releases.
@end table

@item -fgnu89-inline
@opindex fgnu89-inline
The option @option{-fgnu89-inline} tells GCC to use the traditional
GNU semantics for @code{inline} functions when in C99 mode.
@xref{Inline,,An Inline Function is As Fast As a Macro}.
Using this option is roughly equivalent to adding the
@code{gnu_inline} function attribute to all inline functions
(@pxref{Function Attributes}).

The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
specifies the default behavior).
This option is not supported in @option{-std=c90} or
@option{-std=gnu90} mode.

The preprocessor macros @code{__GNUC_GNU_INLINE__} and
@code{__GNUC_STDC_INLINE__} may be used to check which semantics are
in effect for @code{inline} functions.  @xref{Common Predefined
Macros,,,cpp,The C Preprocessor}.

@item -fpermitted-flt-eval-methods=@var{style}
@opindex fpermitted-flt-eval-methods
@opindex fpermitted-flt-eval-methods=c11
@opindex fpermitted-flt-eval-methods=ts-18661-3
ISO/IEC TS 18661-3 defines new permissible values for
@code{FLT_EVAL_METHOD} that indicate that operations and constants with
a semantic type that is an interchange or extended format should be
evaluated to the precision and range of that type.  These new values are
a superset of those permitted under C99/C11, which does not specify the
meaning of other positive values of @code{FLT_EVAL_METHOD}.  As such, code
conforming to C11 may not have been written expecting the possibility of
the new values.

@option{-fpermitted-flt-eval-methods} specifies whether the compiler
should allow only the values of @code{FLT_EVAL_METHOD} specified in C99/C11,
or the extended set of values specified in ISO/IEC TS 18661-3.

@var{style} is either @code{c11} or @code{ts-18661-3} as appropriate.

The default when in a standards compliant mode (@option{-std=c11} or similar)
is @option{-fpermitted-flt-eval-methods=c11}.  The default when in a GNU
dialect (@option{-std=gnu11} or similar) is
@option{-fpermitted-flt-eval-methods=ts-18661-3}.

@item -aux-info @var{filename}
@opindex aux-info
Output to the given filename prototyped declarations for all functions
declared and/or defined in a translation unit, including those in header
files.  This option is silently ignored in any language other than C@.

Besides declarations, the file indicates, in comments, the origin of
each declaration (source file and line), whether the declaration was
implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
@samp{O} for old, respectively, in the first character after the line
number and the colon), and whether it came from a declaration or a
definition (@samp{C} or @samp{F}, respectively, in the following
character).  In the case of function definitions, a K&R-style list of
arguments followed by their declarations is also provided, inside
comments, after the declaration.

@item -fallow-parameterless-variadic-functions
@opindex fallow-parameterless-variadic-functions
Accept variadic functions without named parameters.

Although it is possible to define such a function, this is not very
useful as it is not possible to read the arguments.  This is only
supported for C as this construct is allowed by C++.

@item -fno-asm
@opindex fno-asm
Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
keyword, so that code can use these words as identifiers.  You can use
the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
instead.  @option{-ansi} implies @option{-fno-asm}.

In C++, this switch only affects the @code{typeof} keyword, since
@code{asm} and @code{inline} are standard keywords.  You may want to
use the @option{-fno-gnu-keywords} flag instead, which has the same
effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
switch only affects the @code{asm} and @code{typeof} keywords, since
@code{inline} is a standard keyword in ISO C99.

@item -fno-builtin
@itemx -fno-builtin-@var{function}
@opindex fno-builtin
@cindex built-in functions
Don't recognize built-in functions that do not begin with
@samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
functions provided by GCC}, for details of the functions affected,
including those which are not built-in functions when @option{-ansi} or
@option{-std} options for strict ISO C conformance are used because they
do not have an ISO standard meaning.

GCC normally generates special code to handle certain built-in functions
more efficiently; for instance, calls to @code{alloca} may become single
instructions which adjust the stack directly, and calls to @code{memcpy}
may become inline copy loops.  The resulting code is often both smaller
and faster, but since the function calls no longer appear as such, you
cannot set a breakpoint on those calls, nor can you change the behavior
of the functions by linking with a different library.  In addition,
when a function is recognized as a built-in function, GCC may use
information about that function to warn about problems with calls to
that function, or to generate more efficient code, even if the
resulting code still contains calls to that function.  For example,
warnings are given with @option{-Wformat} for bad calls to
@code{printf} when @code{printf} is built in and @code{strlen} is
known not to modify global memory.

With the @option{-fno-builtin-@var{function}} option
only the built-in function @var{function} is
disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
function is named that is not built-in in this version of GCC, this
option is ignored.  There is no corresponding
@option{-fbuiltin-@var{function}} option; if you wish to enable
built-in functions selectively when using @option{-fno-builtin} or
@option{-ffreestanding}, you may define macros such as:

@smallexample
#define abs(n)          __builtin_abs ((n))
#define strcpy(d, s)    __builtin_strcpy ((d), (s))
@end smallexample

@item -fgimple
@opindex fgimple

Enable parsing of function definitions marked with @code{__GIMPLE}.
This is an experimental feature that allows unit testing of GIMPLE
passes.

@item -fhosted
@opindex fhosted
@cindex hosted environment

Assert that compilation targets a hosted environment.  This implies
@option{-fbuiltin}.  A hosted environment is one in which the
entire standard library is available, and in which @code{main} has a return
type of @code{int}.  Examples are nearly everything except a kernel.
This is equivalent to @option{-fno-freestanding}.

@item -ffreestanding
@opindex ffreestanding
@cindex hosted environment

Assert that compilation targets a freestanding environment.  This
implies @option{-fno-builtin}.  A freestanding environment
is one in which the standard library may not exist, and program startup may
not necessarily be at @code{main}.  The most obvious example is an OS kernel.
This is equivalent to @option{-fno-hosted}.

@xref{Standards,,Language Standards Supported by GCC}, for details of
freestanding and hosted environments.

@item -fopenacc
@opindex fopenacc
@cindex OpenACC accelerator programming
Enable handling of OpenACC directives @code{#pragma acc} in C/C++ and
@code{!$acc} in Fortran.  When @option{-fopenacc} is specified, the
compiler generates accelerated code according to the OpenACC Application
Programming Interface v2.0 @w{@uref{https://www.openacc.org}}.  This option
implies @option{-pthread}, and thus is only supported on targets that
have support for @option{-pthread}.

@item -fopenacc-dim=@var{geom}
@opindex fopenacc-dim
@cindex OpenACC accelerator programming
Specify default compute dimensions for parallel offload regions that do
not explicitly specify.  The @var{geom} value is a triple of
':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A size
can be omitted, to use a target-specific default value.

@item -fopenmp
@opindex fopenmp
@cindex OpenMP parallel
Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
@code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
compiler generates parallel code according to the OpenMP Application
Program Interface v4.5 @w{@uref{http://www.openmp.org/}}.  This option
implies @option{-pthread}, and thus is only supported on targets that
have support for @option{-pthread}. @option{-fopenmp} implies
@option{-fopenmp-simd}.

@item -fopenmp-simd
@opindex fopenmp-simd
@cindex OpenMP SIMD
@cindex SIMD
Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
are ignored.

@item -fgnu-tm
@opindex fgnu-tm
When the option @option{-fgnu-tm} is specified, the compiler
generates code for the Linux variant of Intel's current Transactional
Memory ABI specification document (Revision 1.1, May 6 2009).  This is
an experimental feature whose interface may change in future versions
of GCC, as the official specification changes.  Please note that not
all architectures are supported for this feature.

For more information on GCC's support for transactional memory,
@xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
Transactional Memory Library}.

Note that the transactional memory feature is not supported with
non-call exceptions (@option{-fnon-call-exceptions}).

@item -fms-extensions
@opindex fms-extensions
Accept some non-standard constructs used in Microsoft header files.

In C++ code, this allows member names in structures to be similar
to previous types declarations.

@smallexample
typedef int UOW;
struct ABC @{
  UOW UOW;
@};
@end smallexample

Some cases of unnamed fields in structures and unions are only
accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
fields within structs/unions}, for details.

Note that this option is off for all targets but x86 
targets using ms-abi.

@item -fplan9-extensions
@opindex fplan9-extensions
Accept some non-standard constructs used in Plan 9 code.

This enables @option{-fms-extensions}, permits passing pointers to
structures with anonymous fields to functions that expect pointers to
elements of the type of the field, and permits referring to anonymous
fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
struct/union fields within structs/unions}, for details.  This is only
supported for C, not C++.

@item -fcond-mismatch
@opindex fcond-mismatch
Allow conditional expressions with mismatched types in the second and
third arguments.  The value of such an expression is void.  This option
is not supported for C++.

@item -flax-vector-conversions
@opindex flax-vector-conversions
Allow implicit conversions between vectors with differing numbers of
elements and/or incompatible element types.  This option should not be
used for new code.

@item -funsigned-char
@opindex funsigned-char
Let the type @code{char} be unsigned, like @code{unsigned char}.

Each kind of machine has a default for what @code{char} should
be.  It is either like @code{unsigned char} by default or like
@code{signed char} by default.

Ideally, a portable program should always use @code{signed char} or
@code{unsigned char} when it depends on the signedness of an object.
But many programs have been written to use plain @code{char} and
expect it to be signed, or expect it to be unsigned, depending on the
machines they were written for.  This option, and its inverse, let you
make such a program work with the opposite default.

The type @code{char} is always a distinct type from each of
@code{signed char} or @code{unsigned char}, even though its behavior
is always just like one of those two.

@item -fsigned-char
@opindex fsigned-char
Let the type @code{char} be signed, like @code{signed char}.

Note that this is equivalent to @option{-fno-unsigned-char}, which is
the negative form of @option{-funsigned-char}.  Likewise, the option
@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.

@item -fsigned-bitfields
@itemx -funsigned-bitfields
@itemx -fno-signed-bitfields
@itemx -fno-unsigned-bitfields
@opindex fsigned-bitfields
@opindex funsigned-bitfields
@opindex fno-signed-bitfields
@opindex fno-unsigned-bitfields
These options control whether a bit-field is signed or unsigned, when the
declaration does not use either @code{signed} or @code{unsigned}.  By
default, such a bit-field is signed, because this is consistent: the
basic integer types such as @code{int} are signed types.

@item -fsso-struct=@var{endianness}
@opindex fsso-struct
Set the default scalar storage order of structures and unions to the
specified endianness.  The accepted values are @samp{big-endian},
@samp{little-endian} and @samp{native} for the native endianness of
the target (the default).  This option is not supported for C++.

@strong{Warning:} the @option{-fsso-struct} switch causes GCC to generate
code that is not binary compatible with code generated without it if the
specified endianness is not the native endianness of the target.
@end table

@node C++ Dialect Options
@section Options Controlling C++ Dialect

@cindex compiler options, C++
@cindex C++ options, command-line
@cindex options, C++
This section describes the command-line options that are only meaningful
for C++ programs.  You can also use most of the GNU compiler options
regardless of what language your program is in.  For example, you
might compile a file @file{firstClass.C} like this:

@smallexample
g++ -g -fstrict-enums -O -c firstClass.C
@end smallexample

@noindent
In this example, only @option{-fstrict-enums} is an option meant
only for C++ programs; you can use the other options with any
language supported by GCC@.

Some options for compiling C programs, such as @option{-std}, are also
relevant for C++ programs.
@xref{C Dialect Options,,Options Controlling C Dialect}.

Here is a list of options that are @emph{only} for compiling C++ programs:

@table @gcctabopt

@item -fabi-version=@var{n}
@opindex fabi-version
Use version @var{n} of the C++ ABI@.  The default is version 0.

Version 0 refers to the version conforming most closely to
the C++ ABI specification.  Therefore, the ABI obtained using version 0
will change in different versions of G++ as ABI bugs are fixed.

Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.

Version 2 is the version of the C++ ABI that first appeared in G++
3.4, and was the default through G++ 4.9.

Version 3 corrects an error in mangling a constant address as a
template argument.

Version 4, which first appeared in G++ 4.5, implements a standard
mangling for vector types.

Version 5, which first appeared in G++ 4.6, corrects the mangling of
attribute const/volatile on function pointer types, decltype of a
plain decl, and use of a function parameter in the declaration of
another parameter.

Version 6, which first appeared in G++ 4.7, corrects the promotion
behavior of C++11 scoped enums and the mangling of template argument
packs, const/static_cast, prefix ++ and --, and a class scope function
used as a template argument.

Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
builtin type and corrects the mangling of lambdas in default argument
scope.

Version 8, which first appeared in G++ 4.9, corrects the substitution
behavior of function types with function-cv-qualifiers.

Version 9, which first appeared in G++ 5.2, corrects the alignment of
@code{nullptr_t}.

Version 10, which first appeared in G++ 6.1, adds mangling of
attributes that affect type identity, such as ia32 calling convention
attributes (e.g. @samp{stdcall}).

Version 11, which first appeared in G++ 7, corrects the mangling of
sizeof... expressions and operator names.  For multiple entities with
the same name within a function, that are declared in different scopes,
the mangling now changes starting with the twelfth occurrence.  It also
implies @option{-fnew-inheriting-ctors}.

Version 12, which first appeared in G++ 8, corrects the calling
conventions for empty classes on the x86_64 target and for classes
with only deleted copy/move constructors.  It accidentally changes the
calling convention for classes with a deleted copy constructor and a
trivial move constructor.

Version 13, which first appeared in G++ 8.2, fixes the accidental
change in version 12.

See also @option{-Wabi}.

@item -fabi-compat-version=@var{n}
@opindex fabi-compat-version
On targets that support strong aliases, G++
works around mangling changes by creating an alias with the correct
mangled name when defining a symbol with an incorrect mangled name.
This switch specifies which ABI version to use for the alias.

With @option{-fabi-version=0} (the default), this defaults to 11 (GCC 7
compatibility).  If another ABI version is explicitly selected, this
defaults to 0.  For compatibility with GCC versions 3.2 through 4.9,
use @option{-fabi-compat-version=2}.

If this option is not provided but @option{-Wabi=@var{n}} is, that
version is used for compatibility aliases.  If this option is provided
along with @option{-Wabi} (without the version), the version from this
option is used for the warning.

@item -fno-access-control
@opindex fno-access-control
Turn off all access checking.  This switch is mainly useful for working
around bugs in the access control code.

@item -faligned-new
@opindex faligned-new
Enable support for C++17 @code{new} of types that require more
alignment than @code{void* ::operator new(std::size_t)} provides.  A
numeric argument such as @code{-faligned-new=32} can be used to
specify how much alignment (in bytes) is provided by that function,
but few users will need to override the default of
@code{alignof(std::max_align_t)}.

This flag is enabled by default for @option{-std=c++17}.

@item -fcheck-new
@opindex fcheck-new
Check that the pointer returned by @code{operator new} is non-null
before attempting to modify the storage allocated.  This check is
normally unnecessary because the C++ standard specifies that
@code{operator new} only returns @code{0} if it is declared
@code{throw()}, in which case the compiler always checks the
return value even without this option.  In all other cases, when
@code{operator new} has a non-empty exception specification, memory
exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
@samp{new (nothrow)}.

@item -fconcepts
@opindex fconcepts
Enable support for the C++ Extensions for Concepts Technical
Specification, ISO 19217 (2015), which allows code like

@smallexample
template <class T> concept bool Addable = requires (T t) @{ t + t; @};
template <Addable T> T add (T a, T b) @{ return a + b; @}
@end smallexample

@item -fconstexpr-depth=@var{n}
@opindex fconstexpr-depth
Set the maximum nested evaluation depth for C++11 constexpr functions
to @var{n}.  A limit is needed to detect endless recursion during
constant expression evaluation.  The minimum specified by the standard
is 512.

@item -fconstexpr-loop-limit=@var{n}
@opindex fconstexpr-loop-limit
Set the maximum number of iterations for a loop in C++14 constexpr functions
to @var{n}.  A limit is needed to detect infinite loops during
constant expression evaluation.  The default is 262144 (1<<18).

@item -fdeduce-init-list
@opindex fdeduce-init-list
Enable deduction of a template type parameter as
@code{std::initializer_list} from a brace-enclosed initializer list, i.e.@:

@smallexample
template <class T> auto forward(T t) -> decltype (realfn (t))
@{
  return realfn (t);
@}

void f()
@{
  forward(@{1,2@}); // call forward<std::initializer_list<int>>
@}
@end smallexample

This deduction was implemented as a possible extension to the
originally proposed semantics for the C++11 standard, but was not part
of the final standard, so it is disabled by default.  This option is
deprecated, and may be removed in a future version of G++.

@item -ffriend-injection
@opindex ffriend-injection
Inject friend functions into the enclosing namespace, so that they are
visible outside the scope of the class in which they are declared.
Friend functions were documented to work this way in the old Annotated
C++ Reference Manual.  
However, in ISO C++ a friend function that is not declared
in an enclosing scope can only be found using argument dependent
lookup.  GCC defaults to the standard behavior.

This option is deprecated and will be removed.

@item -fno-elide-constructors
@opindex fno-elide-constructors
The C++ standard allows an implementation to omit creating a temporary
that is only used to initialize another object of the same type.
Specifying this option disables that optimization, and forces G++ to
call the copy constructor in all cases.  This option also causes G++
to call trivial member functions which otherwise would be expanded inline.

In C++17, the compiler is required to omit these temporaries, but this
option still affects trivial member functions.

@item -fno-enforce-eh-specs
@opindex fno-enforce-eh-specs
Don't generate code to check for violation of exception specifications
at run time.  This option violates the C++ standard, but may be useful
for reducing code size in production builds, much like defining
@code{NDEBUG}.  This does not give user code permission to throw
exceptions in violation of the exception specifications; the compiler
still optimizes based on the specifications, so throwing an
unexpected exception results in undefined behavior at run time.

@item -fextern-tls-init
@itemx -fno-extern-tls-init
@opindex fextern-tls-init
@opindex fno-extern-tls-init
The C++11 and OpenMP standards allow @code{thread_local} and
@code{threadprivate} variables to have dynamic (runtime)
initialization.  To support this, any use of such a variable goes
through a wrapper function that performs any necessary initialization.
When the use and definition of the variable are in the same
translation unit, this overhead can be optimized away, but when the
use is in a different translation unit there is significant overhead
even if the variable doesn't actually need dynamic initialization.  If
the programmer can be sure that no use of the variable in a
non-defining TU needs to trigger dynamic initialization (either
because the variable is statically initialized, or a use of the
variable in the defining TU will be executed before any uses in
another TU), they can avoid this overhead with the
@option{-fno-extern-tls-init} option.

On targets that support symbol aliases, the default is
@option{-fextern-tls-init}.  On targets that do not support symbol
aliases, the default is @option{-fno-extern-tls-init}.

@item -ffor-scope
@itemx -fno-for-scope
@opindex ffor-scope
@opindex fno-for-scope
If @option{-ffor-scope} is specified, the scope of variables declared in
a @i{for-init-statement} is limited to the @code{for} loop itself,
as specified by the C++ standard.
If @option{-fno-for-scope} is specified, the scope of variables declared in
a @i{for-init-statement} extends to the end of the enclosing scope,
as was the case in old versions of G++, and other (traditional)
implementations of C++.

This option is deprecated and the associated non-standard
functionality will be removed.

@item -fno-gnu-keywords
@opindex fno-gnu-keywords
Do not recognize @code{typeof} as a keyword, so that code can use this
word as an identifier.  You can use the keyword @code{__typeof__} instead.
This option is implied by the strict ISO C++ dialects: @option{-ansi},
@option{-std=c++98}, @option{-std=c++11}, etc.

@item -fno-implicit-templates
@opindex fno-implicit-templates
Never emit code for non-inline templates that are instantiated
implicitly (i.e.@: by use); only emit code for explicit instantiations.
@xref{Template Instantiation}, for more information.

@item -fno-implicit-inline-templates
@opindex fno-implicit-inline-templates
Don't emit code for implicit instantiations of inline templates, either.
The default is to handle inlines differently so that compiles with and
without optimization need the same set of explicit instantiations.

@item -fno-implement-inlines
@opindex fno-implement-inlines
To save space, do not emit out-of-line copies of inline functions
controlled by @code{#pragma implementation}.  This causes linker
errors if these functions are not inlined everywhere they are called.

@item -fms-extensions
@opindex fms-extensions
Disable Wpedantic warnings about constructs used in MFC, such as implicit
int and getting a pointer to member function via non-standard syntax.

@item -fnew-inheriting-ctors
@opindex fnew-inheriting-ctors
Enable the P0136 adjustment to the semantics of C++11 constructor
inheritance.  This is part of C++17 but also considered to be a Defect
Report against C++11 and C++14.  This flag is enabled by default
unless @option{-fabi-version=10} or lower is specified.

@item -fnew-ttp-matching
@opindex fnew-ttp-matching
Enable the P0522 resolution to Core issue 150, template template
parameters and default arguments: this allows a template with default
template arguments as an argument for a template template parameter
with fewer template parameters.  This flag is enabled by default for
@option{-std=c++17}.

@item -fno-nonansi-builtins
@opindex fno-nonansi-builtins
Disable built-in declarations of functions that are not mandated by
ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
@code{index}, @code{bzero}, @code{conjf}, and other related functions.

@item -fnothrow-opt
@opindex fnothrow-opt
Treat a @code{throw()} exception specification as if it were a
@code{noexcept} specification to reduce or eliminate the text size
overhead relative to a function with no exception specification.  If
the function has local variables of types with non-trivial
destructors, the exception specification actually makes the
function smaller because the EH cleanups for those variables can be
optimized away.  The semantic effect is that an exception thrown out of
a function with such an exception specification results in a call
to @code{terminate} rather than @code{unexpected}.

@item -fno-operator-names
@opindex fno-operator-names
Do not treat the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
synonyms as keywords.

@item -fno-optional-diags
@opindex fno-optional-diags
Disable diagnostics that the standard says a compiler does not need to
issue.  Currently, the only such diagnostic issued by G++ is the one for
a name having multiple meanings within a class.

@item -fpermissive
@opindex fpermissive
Downgrade some diagnostics about nonconformant code from errors to
warnings.  Thus, using @option{-fpermissive} allows some
nonconforming code to compile.

@item -fno-pretty-templates
@opindex fno-pretty-templates
When an error message refers to a specialization of a function
template, the compiler normally prints the signature of the
template followed by the template arguments and any typedefs or
typenames in the signature (e.g. @code{void f(T) [with T = int]}
rather than @code{void f(int)}) so that it's clear which template is
involved.  When an error message refers to a specialization of a class
template, the compiler omits any template arguments that match
the default template arguments for that template.  If either of these
behaviors make it harder to understand the error message rather than
easier, you can use @option{-fno-pretty-templates} to disable them.

@item -frepo
@opindex frepo
Enable automatic template instantiation at link time.  This option also
implies @option{-fno-implicit-templates}.  @xref{Template
Instantiation}, for more information.

@item -fno-rtti
@opindex fno-rtti
Disable generation of information about every class with virtual
functions for use by the C++ run-time type identification features
(@code{dynamic_cast} and @code{typeid}).  If you don't use those parts
of the language, you can save some space by using this flag.  Note that
exception handling uses the same information, but G++ generates it as
needed. The @code{dynamic_cast} operator can still be used for casts that
do not require run-time type information, i.e.@: casts to @code{void *} or to
unambiguous base classes.

@item -fsized-deallocation
@opindex fsized-deallocation
Enable the built-in global declarations
@smallexample
void operator delete (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;
@end smallexample
as introduced in C++14.  This is useful for user-defined replacement
deallocation functions that, for example, use the size of the object
to make deallocation faster.  Enabled by default under
@option{-std=c++14} and above.  The flag @option{-Wsized-deallocation}
warns about places that might want to add a definition.

@item -fstrict-enums
@opindex fstrict-enums
Allow the compiler to optimize using the assumption that a value of
enumerated type can only be one of the values of the enumeration (as
defined in the C++ standard; basically, a value that can be
represented in the minimum number of bits needed to represent all the
enumerators).  This assumption may not be valid if the program uses a
cast to convert an arbitrary integer value to the enumerated type.

@item -fstrong-eval-order
@opindex fstrong-eval-order
Evaluate member access, array subscripting, and shift expressions in
left-to-right order, and evaluate assignment in right-to-left order,
as adopted for C++17.  Enabled by default with @option{-std=c++17}.
@option{-fstrong-eval-order=some} enables just the ordering of member
access and shift expressions, and is the default without
@option{-std=c++17}.

@item -ftemplate-backtrace-limit=@var{n}
@opindex ftemplate-backtrace-limit
Set the maximum number of template instantiation notes for a single
warning or error to @var{n}.  The default value is 10.

@item -ftemplate-depth=@var{n}
@opindex ftemplate-depth
Set the maximum instantiation depth for template classes to @var{n}.
A limit on the template instantiation depth is needed to detect
endless recursions during template class instantiation.  ANSI/ISO C++
conforming programs must not rely on a maximum depth greater than 17
(changed to 1024 in C++11).  The default value is 900, as the compiler
can run out of stack space before hitting 1024 in some situations.

@item -fno-threadsafe-statics
@opindex fno-threadsafe-statics
Do not emit the extra code to use the routines specified in the C++
ABI for thread-safe initialization of local statics.  You can use this
option to reduce code size slightly in code that doesn't need to be
thread-safe.

@item -fuse-cxa-atexit
@opindex fuse-cxa-atexit
Register destructors for objects with static storage duration with the
@code{__cxa_atexit} function rather than the @code{atexit} function.
This option is required for fully standards-compliant handling of static
destructors, but only works if your C library supports
@code{__cxa_atexit}.

@item -fno-use-cxa-get-exception-ptr
@opindex fno-use-cxa-get-exception-ptr
Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
causes @code{std::uncaught_exception} to be incorrect, but is necessary
if the runtime routine is not available.

@item -fvisibility-inlines-hidden
@opindex fvisibility-inlines-hidden
This switch declares that the user does not attempt to compare
pointers to inline functions or methods where the addresses of the two functions
are taken in different shared objects.

The effect of this is that GCC may, effectively, mark inline methods with
@code{__attribute__ ((visibility ("hidden")))} so that they do not
appear in the export table of a DSO and do not require a PLT indirection
when used within the DSO@.  Enabling this option can have a dramatic effect
on load and link times of a DSO as it massively reduces the size of the
dynamic export table when the library makes heavy use of templates.

The behavior of this switch is not quite the same as marking the
methods as hidden directly, because it does not affect static variables
local to the function or cause the compiler to deduce that
the function is defined in only one shared object.

You may mark a method as having a visibility explicitly to negate the
effect of the switch for that method.  For example, if you do want to
compare pointers to a particular inline method, you might mark it as
having default visibility.  Marking the enclosing class with explicit
visibility has no effect.

Explicitly instantiated inline methods are unaffected by this option
as their linkage might otherwise cross a shared library boundary.
@xref{Template Instantiation}.

@item -fvisibility-ms-compat
@opindex fvisibility-ms-compat
This flag attempts to use visibility settings to make GCC's C++
linkage model compatible with that of Microsoft Visual Studio.

The flag makes these changes to GCC's linkage model:

@enumerate
@item
It sets the default visibility to @code{hidden}, like
@option{-fvisibility=hidden}.

@item
Types, but not their members, are not hidden by default.

@item
The One Definition Rule is relaxed for types without explicit
visibility specifications that are defined in more than one
shared object: those declarations are permitted if they are
permitted when this option is not used.
@end enumerate

In new code it is better to use @option{-fvisibility=hidden} and
export those classes that are intended to be externally visible.
Unfortunately it is possible for code to rely, perhaps accidentally,
on the Visual Studio behavior.

Among the consequences of these changes are that static data members
of the same type with the same name but defined in different shared
objects are different, so changing one does not change the other;
and that pointers to function members defined in different shared
objects may not compare equal.  When this flag is given, it is a
violation of the ODR to define types with the same name differently.

@item -fno-weak
@opindex fno-weak
Do not use weak symbol support, even if it is provided by the linker.
By default, G++ uses weak symbols if they are available.  This
option exists only for testing, and should not be used by end-users;
it results in inferior code and has no benefits.  This option may
be removed in a future release of G++.

@item -nostdinc++
@opindex nostdinc++
Do not search for header files in the standard directories specific to
C++, but do still search the other standard directories.  (This option
is used when building the C++ library.)
@end table

In addition, these optimization, warning, and code generation options
have meanings only for C++ programs:

@table @gcctabopt
@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
@opindex Wabi
@opindex Wno-abi
Warn when G++ it generates code that is probably not compatible with
the vendor-neutral C++ ABI@.  Since G++ now defaults to updating the
ABI with each major release, normally @option{-Wabi} will warn only if
there is a check added later in a release series for an ABI issue
discovered since the initial release.  @option{-Wabi} will warn about
more things if an older ABI version is selected (with
@option{-fabi-version=@var{n}}).

@option{-Wabi} can also be used with an explicit version number to
warn about compatibility with a particular @option{-fabi-version}
level, e.g. @option{-Wabi=2} to warn about changes relative to
@option{-fabi-version=2}.

If an explicit version number is provided and
@option{-fabi-compat-version} is not specified, the version number
from this option is used for compatibility aliases.  If no explicit
version number is provided with this option, but
@option{-fabi-compat-version} is specified, that version number is
used for ABI warnings.

Although an effort has been made to warn about
all such cases, there are probably some cases that are not warned about,
even though G++ is generating incompatible code.  There may also be
cases where warnings are emitted even though the code that is generated
is compatible.

You should rewrite your code to avoid these warnings if you are
concerned about the fact that code generated by G++ may not be binary
compatible with code generated by other compilers.

Known incompatibilities in @option{-fabi-version=2} (which was the
default from GCC 3.4 to 4.9) include:

@itemize @bullet

@item
A template with a non-type template parameter of reference type was
mangled incorrectly:
@smallexample
extern int N;
template <int &> struct S @{@};
void n (S<N>) @{2@}
@end smallexample

This was fixed in @option{-fabi-version=3}.

@item
SIMD vector types declared using @code{__attribute ((vector_size))} were
mangled in a non-standard way that does not allow for overloading of
functions taking vectors of different sizes.

The mangling was changed in @option{-fabi-version=4}.

@item
@code{__attribute ((const))} and @code{noreturn} were mangled as type
qualifiers, and @code{decltype} of a plain declaration was folded away.

These mangling issues were fixed in @option{-fabi-version=5}.

@item
Scoped enumerators passed as arguments to a variadic function are
promoted like unscoped enumerators, causing @code{va_arg} to complain.
On most targets this does not actually affect the parameter passing
ABI, as there is no way to pass an argument smaller than @code{int}.

Also, the ABI changed the mangling of template argument packs,
@code{const_cast}, @code{static_cast}, prefix increment/decrement, and
a class scope function used as a template argument.

These issues were corrected in @option{-fabi-version=6}.

@item
Lambdas in default argument scope were mangled incorrectly, and the
ABI changed the mangling of @code{nullptr_t}.

These issues were corrected in @option{-fabi-version=7}.

@item
When mangling a function type with function-cv-qualifiers, the
un-qualified function type was incorrectly treated as a substitution
candidate.

This was fixed in @option{-fabi-version=8}, the default for GCC 5.1.

@item
@code{decltype(nullptr)} incorrectly had an alignment of 1, leading to
unaligned accesses.  Note that this did not affect the ABI of a
function with a @code{nullptr_t} parameter, as parameters have a
minimum alignment.

This was fixed in @option{-fabi-version=9}, the default for GCC 5.2.

@item
Target-specific attributes that affect the identity of a type, such as
ia32 calling conventions on a function type (stdcall, regparm, etc.),
did not affect the mangled name, leading to name collisions when
function pointers were used as template arguments.

This was fixed in @option{-fabi-version=10}, the default for GCC 6.1.

@end itemize

It also warns about psABI-related changes.  The known psABI changes at this
point include:

@itemize @bullet

@item
For SysV/x86-64, unions with @code{long double} members are 
passed in memory as specified in psABI.  For example:

@smallexample
union U @{
  long double ld;
  int i;
@};
@end smallexample

@noindent
@code{union U} is always passed in memory.

@end itemize

@item -Wabi-tag @r{(C++ and Objective-C++ only)}
@opindex Wabi-tag
@opindex -Wabi-tag
Warn when a type with an ABI tag is used in a context that does not
have that ABI tag.  See @ref{C++ Attributes} for more information
about ABI tags.

@item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
@opindex Wctor-dtor-privacy
@opindex Wno-ctor-dtor-privacy
Warn when a class seems unusable because all the constructors or
destructors in that class are private, and it has neither friends nor
public static member functions.  Also warn if there are no non-private
methods, and there's at least one private member function that isn't
a constructor or destructor.

@item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
@opindex Wdelete-non-virtual-dtor
@opindex Wno-delete-non-virtual-dtor
Warn when @code{delete} is used to destroy an instance of a class that
has virtual functions and non-virtual destructor. It is unsafe to delete
an instance of a derived class through a pointer to a base class if the
base class does not have a virtual destructor.  This warning is enabled
by @option{-Wall}.

@item -Wliteral-suffix @r{(C++ and Objective-C++ only)}
@opindex Wliteral-suffix
@opindex Wno-literal-suffix
Warn when a string or character literal is followed by a ud-suffix which does
not begin with an underscore.  As a conforming extension, GCC treats such
suffixes as separate preprocessing tokens in order to maintain backwards
compatibility with code that uses formatting macros from @code{<inttypes.h>}.
For example:

@smallexample
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <stdio.h>

int main() @{
  int64_t i64 = 123;
  printf("My int64: %" PRId64"\n", i64);
@}
@end smallexample

In this case, @code{PRId64} is treated as a separate preprocessing token.

Additionally, warn when a user-defined literal operator is declared with
a literal suffix identifier that doesn't begin with an underscore. Literal
suffix identifiers that don't begin with an underscore are reserved for
future standardization.

This warning is enabled by default.

@item -Wlto-type-mismatch
@opindex Wlto-type-mismatch
@opindex Wno-lto-type-mismatch

During the link-time optimization warn about type mismatches in
global declarations from different compilation units.
Requires @option{-flto} to be enabled.  Enabled by default.

@item -Wno-narrowing @r{(C++ and Objective-C++ only)}
@opindex Wnarrowing
@opindex Wno-narrowing
For C++11 and later standards, narrowing conversions are diagnosed by default,
as required by the standard.  A narrowing conversion from a constant produces
an error, and a narrowing conversion from a non-constant produces a warning,
but @option{-Wno-narrowing} suppresses the diagnostic.
Note that this does not affect the meaning of well-formed code;
narrowing conversions are still considered ill-formed in SFINAE contexts.

With @option{-Wnarrowing} in C++98, warn when a narrowing
conversion prohibited by C++11 occurs within
@samp{@{ @}}, e.g.

@smallexample
int i = @{ 2.2 @}; // error: narrowing from double to int
@end smallexample

This flag is included in @option{-Wall} and @option{-Wc++11-compat}.

@item -Wnoexcept @r{(C++ and Objective-C++ only)}
@opindex Wnoexcept
@opindex Wno-noexcept
Warn when a noexcept-expression evaluates to false because of a call
to a function that does not have a non-throwing exception
specification (i.e. @code{throw()} or @code{noexcept}) but is known by
the compiler to never throw an exception.

@item -Wnoexcept-type @r{(C++ and Objective-C++ only)}
@opindex Wnoexcept-type
@opindex Wno-noexcept-type
Warn if the C++17 feature making @code{noexcept} part of a function
type changes the mangled name of a symbol relative to C++14.  Enabled
by @option{-Wabi} and @option{-Wc++17-compat}.

As an example:

@smallexample
template <class T> void f(T t) @{ t(); @};
void g() noexcept;
void h() @{ f(g); @} 
@end smallexample

@noindent
In C++14, @code{f} calls calls @code{f<void(*)()>}, but in
C++17 it calls @code{f<void(*)()noexcept>}.

@item -Wclass-memaccess @r{(C++ and Objective-C++ only)}
@opindex Wclass-memaccess
Warn when the destination of a call to a raw memory function such as
@code{memset} or @code{memcpy} is an object of class type, and when writing
into such an object might bypass the class non-trivial or deleted constructor
or copy assignment, violate const-correctness or encapsulation, or corrupt
virtual table pointers.  Modifying the representation of such objects may
violate invariants maintained by member functions of the class.  For example,
the call to @code{memset} below is undefined because it modifies a non-trivial
class object and is, therefore, diagnosed.  The safe way to either initialize
or clear the storage of objects of such types is by using the appropriate
constructor or assignment operator, if one is available.
@smallexample
std::string str = "abc";
memset (&str, 0, sizeof str);
@end smallexample
The @option{-Wclass-memaccess} option is enabled by @option{-Wall}.
Explicitly casting the pointer to the class object to @code{void *} or
to a type that can be safely accessed by the raw memory function suppresses
the warning.

@item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
@opindex Wnon-virtual-dtor
@opindex Wno-non-virtual-dtor
Warn when a class has virtual functions and an accessible non-virtual
destructor itself or in an accessible polymorphic base class, in which
case it is possible but unsafe to delete an instance of a derived
class through a pointer to the class itself or base class.  This
warning is automatically enabled if @option{-Weffc++} is specified.

@item -Wregister @r{(C++ and Objective-C++ only)}
@opindex Wregister
@opindex Wno-register
Warn on uses of the @code{register} storage class specifier, except
when it is part of the GNU @ref{Explicit Register Variables} extension.
The use of the @code{register} keyword as storage class specifier has
been deprecated in C++11 and removed in C++17.
Enabled by default with @option{-std=c++17}.

@item -Wreorder @r{(C++ and Objective-C++ only)}
@opindex Wreorder
@opindex Wno-reorder
@cindex reordering, warning
@cindex warning for reordering of member initializers
Warn when the order of member initializers given in the code does not
match the order in which they must be executed.  For instance:

@smallexample
struct A @{
  int i;
  int j;
  A(): j (0), i (1) @{ @}
@};
@end smallexample

@noindent
The compiler rearranges the member initializers for @code{i}
and @code{j} to match the declaration order of the members, emitting
a warning to that effect.  This warning is enabled by @option{-Wall}.

@item -fext-numeric-literals @r{(C++ and Objective-C++ only)}
@opindex fext-numeric-literals
@opindex fno-ext-numeric-literals
Accept imaginary, fixed-point, or machine-defined
literal number suffixes as GNU extensions.
When this option is turned off these suffixes are treated
as C++11 user-defined literal numeric suffixes.
This is on by default for all pre-C++11 dialects and all GNU dialects:
@option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11},
@option{-std=gnu++14}.
This option is off by default
for ISO C++11 onwards (@option{-std=c++11}, ...).
@end table

The following @option{-W@dots{}} options are not affected by @option{-Wall}.

@table @gcctabopt
@item -Weffc++ @r{(C++ and Objective-C++ only)}
@opindex Weffc++
@opindex Wno-effc++
Warn about violations of the following style guidelines from Scott Meyers'
@cite{Effective C++} series of books:

@itemize @bullet
@item
Define a copy constructor and an assignment operator for classes
with dynamically-allocated memory.

@item
Prefer initialization to assignment in constructors.

@item
Have @code{operator=} return a reference to @code{*this}.

@item
Don't try to return a reference when you must return an object.

@item
Distinguish between prefix and postfix forms of increment and
decrement operators.

@item
Never overload @code{&&}, @code{||}, or @code{,}.

@end itemize

This option also enables @option{-Wnon-virtual-dtor}, which is also
one of the effective C++ recommendations.  However, the check is
extended to warn about the lack of virtual destructor in accessible
non-polymorphic bases classes too.

When selecting this option, be aware that the standard library
headers do not obey all of these guidelines; use @samp{grep -v}
to filter out those warnings.

@item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
@opindex Wstrict-null-sentinel
@opindex Wno-strict-null-sentinel
Warn about the use of an uncasted @code{NULL} as sentinel.  When
compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
to @code{__null}.  Although it is a null pointer constant rather than a
null pointer, it is guaranteed to be of the same size as a pointer.
But this use is not portable across different compilers.

@item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
@opindex Wno-non-template-friend
@opindex Wnon-template-friend
Disable warnings when non-template friend functions are declared
within a template.  In very old versions of GCC that predate implementation
of the ISO standard, declarations such as 
@samp{friend int foo(int)}, where the name of the friend is an unqualified-id,
could be interpreted as a particular specialization of a template
function; the warning exists to diagnose compatibility problems, 
and is enabled by default.

@item -Wold-style-cast @r{(C++ and Objective-C++ only)}
@opindex Wold-style-cast
@opindex Wno-old-style-cast
Warn if an old-style (C-style) cast to a non-void type is used within
a C++ program.  The new-style casts (@code{dynamic_cast},
@code{static_cast}, @code{reinterpret_cast}, and @code{const_cast}) are
less vulnerable to unintended effects and much easier to search for.

@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
@opindex Woverloaded-virtual
@opindex Wno-overloaded-virtual
@cindex overloaded virtual function, warning
@cindex warning for overloaded virtual function
Warn when a function declaration hides virtual functions from a
base class.  For example, in:

@smallexample
struct A @{
  virtual void f();
@};

struct B: public A @{
  void f(int);
@};
@end smallexample

the @code{A} class version of @code{f} is hidden in @code{B}, and code
like:

@smallexample
B* b;
b->f();
@end smallexample

@noindent
fails to compile.

@item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
@opindex Wno-pmf-conversions
@opindex Wpmf-conversions
Disable the diagnostic for converting a bound pointer to member function
to a plain pointer.

@item -Wsign-promo @r{(C++ and Objective-C++ only)}
@opindex Wsign-promo
@opindex Wno-sign-promo
Warn when overload resolution chooses a promotion from unsigned or
enumerated type to a signed type, over a conversion to an unsigned type of
the same size.  Previous versions of G++ tried to preserve
unsignedness, but the standard mandates the current behavior.

@item -Wtemplates @r{(C++ and Objective-C++ only)}
@opindex Wtemplates
Warn when a primary template declaration is encountered.  Some coding
rules disallow templates, and this may be used to enforce that rule.
The warning is inactive inside a system header file, such as the STL, so
one can still use the STL.  One may also instantiate or specialize
templates.

@item -Wmultiple-inheritance @r{(C++ and Objective-C++ only)}
@opindex Wmultiple-inheritance
Warn when a class is defined with multiple direct base classes.  Some
coding rules disallow multiple inheritance, and this may be used to
enforce that rule.  The warning is inactive inside a system header file,
such as the STL, so one can still use the STL.  One may also define
classes that indirectly use multiple inheritance.

@item -Wvirtual-inheritance
@opindex Wvirtual-inheritance
Warn when a class is defined with a virtual direct base class.  Some
coding rules disallow multiple inheritance, and this may be used to
enforce that rule.  The warning is inactive inside a system header file,
such as the STL, so one can still use the STL.  One may also define
classes that indirectly use virtual inheritance.

@item -Wnamespaces
@opindex Wnamespaces
Warn when a namespace definition is opened.  Some coding rules disallow
namespaces, and this may be used to enforce that rule.  The warning is
inactive inside a system header file, such as the STL, so one can still
use the STL.  One may also use using directives and qualified names.

@item -Wno-terminate @r{(C++ and Objective-C++ only)}
@opindex Wterminate
@opindex Wno-terminate
Disable the warning about a throw-expression that will immediately
result in a call to @code{terminate}.
@end table

@node Objective-C and Objective-C++ Dialect Options
@section Options Controlling Objective-C and Objective-C++ Dialects

@cindex compiler options, Objective-C and Objective-C++
@cindex Objective-C and Objective-C++ options, command-line
@cindex options, Objective-C and Objective-C++
(NOTE: This manual does not describe the Objective-C and Objective-C++
languages themselves.  @xref{Standards,,Language Standards
Supported by GCC}, for references.)

This section describes the command-line options that are only meaningful
for Objective-C and Objective-C++ programs.  You can also use most of
the language-independent GNU compiler options.
For example, you might compile a file @file{some_class.m} like this:

@smallexample
gcc -g -fgnu-runtime -O -c some_class.m
@end smallexample

@noindent
In this example, @option{-fgnu-runtime} is an option meant only for
Objective-C and Objective-C++ programs; you can use the other options with
any language supported by GCC@.

Note that since Objective-C is an extension of the C language, Objective-C
compilations may also use options specific to the C front-end (e.g.,
@option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
C++-specific options (e.g., @option{-Wabi}).

Here is a list of options that are @emph{only} for compiling Objective-C
and Objective-C++ programs:

@table @gcctabopt
@item -fconstant-string-class=@var{class-name}
@opindex fconstant-string-class
Use @var{class-name} as the name of the class to instantiate for each
literal string specified with the syntax @code{@@"@dots{}"}.  The default
class name is @code{NXConstantString} if the GNU runtime is being used, and
@code{NSConstantString} if the NeXT runtime is being used (see below).  The
@option{-fconstant-cfstrings} option, if also present, overrides the
@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
to be laid out as constant CoreFoundation strings.

@item -fgnu-runtime
@opindex fgnu-runtime
Generate object code compatible with the standard GNU Objective-C
runtime.  This is the default for most types of systems.

@item -fnext-runtime
@opindex fnext-runtime
Generate output compatible with the NeXT runtime.  This is the default
for NeXT-based systems, including Darwin and Mac OS X@.  The macro
@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
used.

@item -fno-nil-receivers
@opindex fno-nil-receivers
Assume that all Objective-C message dispatches (@code{[receiver
message:arg]}) in this translation unit ensure that the receiver is
not @code{nil}.  This allows for more efficient entry points in the
runtime to be used.  This option is only available in conjunction with
the NeXT runtime and ABI version 0 or 1.

@item -fobjc-abi-version=@var{n}
@opindex fobjc-abi-version
Use version @var{n} of the Objective-C ABI for the selected runtime.
This option is currently supported only for the NeXT runtime.  In that
case, Version 0 is the traditional (32-bit) ABI without support for
properties and other Objective-C 2.0 additions.  Version 1 is the
traditional (32-bit) ABI with support for properties and other
Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
nothing is specified, the default is Version 0 on 32-bit target
machines, and Version 2 on 64-bit target machines.

@item -fobjc-call-cxx-cdtors
@opindex fobjc-call-cxx-cdtors
For each Objective-C class, check if any of its instance variables is a
C++ object with a non-trivial default constructor.  If so, synthesize a
special @code{- (id) .cxx_construct} instance method which runs
non-trivial default constructors on any such instance variables, in order,
and then return @code{self}.  Similarly, check if any instance variable
is a C++ object with a non-trivial destructor, and if so, synthesize a
special @code{- (void) .cxx_destruct} method which runs
all such default destructors, in reverse order.

The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
methods thusly generated only operate on instance variables
declared in the current Objective-C class, and not those inherited
from superclasses.  It is the responsibility of the Objective-C
runtime to invoke all such methods in an object's inheritance
hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
by the runtime immediately after a new object instance is allocated;
the @code{- (void) .cxx_destruct} methods are invoked immediately
before the runtime deallocates an object instance.

As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
support for invoking the @code{- (id) .cxx_construct} and
@code{- (void) .cxx_destruct} methods.

@item -fobjc-direct-dispatch
@opindex fobjc-direct-dispatch
Allow fast jumps to the message dispatcher.  On Darwin this is
accomplished via the comm page.

@item -fobjc-exceptions
@opindex fobjc-exceptions
Enable syntactic support for structured exception handling in
Objective-C, similar to what is offered by C++.  This option
is required to use the Objective-C keywords @code{@@try},
@code{@@throw}, @code{@@catch}, @code{@@finally} and
@code{@@synchronized}.  This option is available with both the GNU
runtime and the NeXT runtime (but not available in conjunction with
the NeXT runtime on Mac OS X 10.2 and earlier).

@item -fobjc-gc
@opindex fobjc-gc
Enable garbage collection (GC) in Objective-C and Objective-C++
programs.  This option is only available with the NeXT runtime; the
GNU runtime has a different garbage collection implementation that
does not require special compiler flags.

@item -fobjc-nilcheck
@opindex fobjc-nilcheck
For the NeXT runtime with version 2 of the ABI, check for a nil
receiver in method invocations before doing the actual method call.
This is the default and can be disabled using
@option{-fno-objc-nilcheck}.  Class methods and super calls are never
checked for nil in this way no matter what this flag is set to.
Currently this flag does nothing when the GNU runtime, or an older
version of the NeXT runtime ABI, is used.

@item -fobjc-std=objc1
@opindex fobjc-std
Conform to the language syntax of Objective-C 1.0, the language
recognized by GCC 4.0.  This only affects the Objective-C additions to
the C/C++ language; it does not affect conformance to C/C++ standards,
which is controlled by the separate C/C++ dialect option flags.  When
this option is used with the Objective-C or Objective-C++ compiler,
any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
This is useful if you need to make sure that your Objective-C code can
be compiled with older versions of GCC@.

@item -freplace-objc-classes
@opindex freplace-objc-classes
Emit a special marker instructing @command{ld(1)} not to statically link in
the resulting object file, and allow @command{dyld(1)} to load it in at
run time instead.  This is used in conjunction with the Fix-and-Continue
debugging mode, where the object file in question may be recompiled and
dynamically reloaded in the course of program execution, without the need
to restart the program itself.  Currently, Fix-and-Continue functionality
is only available in conjunction with the NeXT runtime on Mac OS X 10.3
and later.

@item -fzero-link
@opindex fzero-link
When compiling for the NeXT runtime, the compiler ordinarily replaces calls
to @code{objc_getClass("@dots{}")} (when the name of the class is known at
compile time) with static class references that get initialized at load time,
which improves run-time performance.  Specifying the @option{-fzero-link} flag
suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
to be retained.  This is useful in Zero-Link debugging mode, since it allows
for individual class implementations to be modified during program execution.
The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
regardless of command-line options.

@item -fno-local-ivars
@opindex fno-local-ivars
@opindex flocal-ivars
By default instance variables in Objective-C can be accessed as if
they were local variables from within the methods of the class they're
declared in.  This can lead to shadowing between instance variables
and other variables declared either locally inside a class method or
globally with the same name.  Specifying the @option{-fno-local-ivars}
flag disables this behavior thus avoiding variable shadowing issues.

@item -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]}
@opindex fivar-visibility
Set the default instance variable visibility to the specified option
so that instance variables declared outside the scope of any access
modifier directives default to the specified visibility.

@item -gen-decls
@opindex gen-decls
Dump interface declarations for all classes seen in the source file to a
file named @file{@var{sourcename}.decl}.

@item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
@opindex Wassign-intercept
@opindex Wno-assign-intercept
Warn whenever an Objective-C assignment is being intercepted by the
garbage collector.

@item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
@opindex Wno-protocol
@opindex Wprotocol
If a class is declared to implement a protocol, a warning is issued for
every method in the protocol that is not implemented by the class.  The
default behavior is to issue a warning for every method not explicitly
implemented in the class, even if a method implementation is inherited
from the superclass.  If you use the @option{-Wno-protocol} option, then
methods inherited from the superclass are considered to be implemented,
and no warning is issued for them.

@item -Wselector @r{(Objective-C and Objective-C++ only)}
@opindex Wselector
@opindex Wno-selector
Warn if multiple methods of different types for the same selector are
found during compilation.  The check is performed on the list of methods
in the final stage of compilation.  Additionally, a check is performed
for each selector appearing in a @code{@@selector(@dots{})}
expression, and a corresponding method for that selector has been found
during compilation.  Because these checks scan the method table only at
the end of compilation, these warnings are not produced if the final
stage of compilation is not reached, for example because an error is
found during compilation, or because the @option{-fsyntax-only} option is
being used.

@item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
@opindex Wstrict-selector-match
@opindex Wno-strict-selector-match
Warn if multiple methods with differing argument and/or return types are
found for a given selector when attempting to send a message using this
selector to a receiver of type @code{id} or @code{Class}.  When this flag
is off (which is the default behavior), the compiler omits such warnings
if any differences found are confined to types that share the same size
and alignment.

@item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
@opindex Wundeclared-selector
@opindex Wno-undeclared-selector
Warn if a @code{@@selector(@dots{})} expression referring to an
undeclared selector is found.  A selector is considered undeclared if no
method with that name has been declared before the
@code{@@selector(@dots{})} expression, either explicitly in an
@code{@@interface} or @code{@@protocol} declaration, or implicitly in
an @code{@@implementation} section.  This option always performs its
checks as soon as a @code{@@selector(@dots{})} expression is found,
while @option{-Wselector} only performs its checks in the final stage of
compilation.  This also enforces the coding style convention
that methods and selectors must be declared before being used.

@item -print-objc-runtime-info
@opindex print-objc-runtime-info
Generate C header describing the largest structure that is passed by
value, if any.

@end table

@node Diagnostic Message Formatting Options
@section Options to Control Diagnostic Messages Formatting
@cindex options to control diagnostics formatting
@cindex diagnostic messages
@cindex message formatting

Traditionally, diagnostic messages have been formatted irrespective of
the output device's aspect (e.g.@: its width, @dots{}).  You can use the
options described below
to control the formatting algorithm for diagnostic messages, 
e.g.@: how many characters per line, how often source location
information should be reported.  Note that some language front ends may not
honor these options.

@table @gcctabopt
@item -fmessage-length=@var{n}
@opindex fmessage-length
Try to format error messages so that they fit on lines of about
@var{n} characters.  If @var{n} is zero, then no line-wrapping is
done; each error message appears on a single line.  This is the
default for all front ends.

@item -fdiagnostics-show-location=once
@opindex fdiagnostics-show-location
Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
reporter to emit source location information @emph{once}; that is, in
case the message is too long to fit on a single physical line and has to
be wrapped, the source location won't be emitted (as prefix) again,
over and over, in subsequent continuation lines.  This is the default
behavior.

@item -fdiagnostics-show-location=every-line
Only meaningful in line-wrapping mode.  Instructs the diagnostic
messages reporter to emit the same source location information (as
prefix) for physical lines that result from the process of breaking
a message which is too long to fit on a single line.

@item -fdiagnostics-color[=@var{WHEN}]
@itemx -fno-diagnostics-color
@opindex fdiagnostics-color
@cindex highlight, color
@vindex GCC_COLORS @r{environment variable}
Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
or @samp{auto}.  The default depends on how the compiler has been configured,
it can be any of the above @var{WHEN} options or also @samp{never}
if @env{GCC_COLORS} environment variable isn't present in the environment,
and @samp{auto} otherwise.
@samp{auto} means to use color only when the standard error is a terminal.
The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
aliases for @option{-fdiagnostics-color=always} and
@option{-fdiagnostics-color=never}, respectively.

The colors are defined by the environment variable @env{GCC_COLORS}.
Its value is a colon-separated list of capabilities and Select Graphic
Rendition (SGR) substrings. SGR commands are interpreted by the
terminal or terminal emulator.  (See the section in the documentation
of your text terminal for permitted values and their meanings as
character attributes.)  These substring values are integers in decimal
representation and can be concatenated with semicolons.
Common values to concatenate include
@samp{1} for bold,
@samp{4} for underline,
@samp{5} for blink,
@samp{7} for inverse,
@samp{39} for default foreground color,
@samp{30} to @samp{37} for foreground colors,
@samp{90} to @samp{97} for 16-color mode foreground colors,
@samp{38;5;0} to @samp{38;5;255}
for 88-color and 256-color modes foreground colors,
@samp{49} for default background color,
@samp{40} to @samp{47} for background colors,
@samp{100} to @samp{107} for 16-color mode background colors,
and @samp{48;5;0} to @samp{48;5;255}
for 88-color and 256-color modes background colors.

The default @env{GCC_COLORS} is
@smallexample
error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
quote=01:fixit-insert=32:fixit-delete=31:\
diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
type-diff=01;32
@end smallexample
@noindent
where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
@samp{01;36} is bold cyan, @samp{32} is green, @samp{34} is blue,
@samp{01} is bold, and @samp{31} is red.
Setting @env{GCC_COLORS} to the empty string disables colors.
Supported capabilities are as follows.

@table @code
@item error=
@vindex error GCC_COLORS @r{capability}
SGR substring for error: markers.

@item warning=
@vindex warning GCC_COLORS @r{capability}
SGR substring for warning: markers.

@item note=
@vindex note GCC_COLORS @r{capability}
SGR substring for note: markers.

@item range1=
@vindex range1 GCC_COLORS @r{capability}
SGR substring for first additional range.

@item range2=
@vindex range2 GCC_COLORS @r{capability}
SGR substring for second additional range.

@item locus=
@vindex locus GCC_COLORS @r{capability}
SGR substring for location information, @samp{file:line} or
@samp{file:line:column} etc.

@item quote=
@vindex quote GCC_COLORS @r{capability}
SGR substring for information printed within quotes.

@item fixit-insert=
@vindex fixit-insert GCC_COLORS @r{capability}
SGR substring for fix-it hints suggesting text to
be inserted or replaced.

@item fixit-delete=
@vindex fixit-delete GCC_COLORS @r{capability}
SGR substring for fix-it hints suggesting text to
be deleted.

@item diff-filename=
@vindex diff-filename GCC_COLORS @r{capability}
SGR substring for filename headers within generated patches.

@item diff-hunk=
@vindex diff-hunk GCC_COLORS @r{capability}
SGR substring for the starts of hunks within generated patches.

@item diff-delete=
@vindex diff-delete GCC_COLORS @r{capability}
SGR substring for deleted lines within generated patches.

@item diff-insert=
@vindex diff-insert GCC_COLORS @r{capability}
SGR substring for inserted lines within generated patches.

@item type-diff=
@vindex type-diff GCC_COLORS @r{capability}
SGR substring for highlighting mismatching types within template
arguments in the C++ frontend.
@end table

@item -fno-diagnostics-show-option
@opindex fno-diagnostics-show-option
@opindex fdiagnostics-show-option
By default, each diagnostic emitted includes text indicating the
command-line option that directly controls the diagnostic (if such an
option is known to the diagnostic machinery).  Specifying the
@option{-fno-diagnostics-show-option} flag suppresses that behavior.

@item -fno-diagnostics-show-caret
@opindex fno-diagnostics-show-caret
@opindex fdiagnostics-show-caret
By default, each diagnostic emitted includes the original source line
and a caret @samp{^} indicating the column.  This option suppresses this
information.  The source line is truncated to @var{n} characters, if
the @option{-fmessage-length=n} option is given.  When the output is done
to the terminal, the width is limited to the width given by the
@env{COLUMNS} environment variable or, if not set, to the terminal width.

@item -fdiagnostics-parseable-fixits
@opindex fdiagnostics-parseable-fixits
Emit fix-it hints in a machine-parseable format, suitable for consumption
by IDEs.  For each fix-it, a line will be printed after the relevant
diagnostic, starting with the string ``fix-it:''.  For example:

@smallexample
fix-it:"test.c":@{45:3-45:21@}:"gtk_widget_show_all"
@end smallexample

The location is expressed as a half-open range, expressed as a count of
bytes, starting at byte 1 for the initial column.  In the above example,
bytes 3 through 20 of line 45 of ``test.c'' are to be replaced with the
given string:

@smallexample
00000000011111111112222222222
12345678901234567890123456789
  gtk_widget_showall (dlg);
  ^^^^^^^^^^^^^^^^^^
  gtk_widget_show_all
@end smallexample

The filename and replacement string escape backslash as ``\\", tab as ``\t'',
newline as ``\n'', double quotes as ``\"'', non-printable characters as octal
(e.g. vertical tab as ``\013'').

An empty replacement string indicates that the given range is to be removed.
An empty range (e.g. ``45:3-45:3'') indicates that the string is to
be inserted at the given position.

@item -fdiagnostics-generate-patch
@opindex fdiagnostics-generate-patch
Print fix-it hints to stderr in unified diff format, after any diagnostics
are printed.  For example:

@smallexample
--- test.c
+++ test.c
@@ -42,5 +42,5 @@

 void show_cb(GtkDialog *dlg)
 @{
-  gtk_widget_showall(dlg);
+  gtk_widget_show_all(dlg);
 @}

@end smallexample

The diff may or may not be colorized, following the same rules
as for diagnostics (see @option{-fdiagnostics-color}).

@item -fdiagnostics-show-template-tree
@opindex fdiagnostics-show-template-tree

In the C++ frontend, when printing diagnostics showing mismatching
template types, such as:

@smallexample
  could not convert 'std::map<int, std::vector<double> >()'
    from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
@end smallexample

the @option{-fdiagnostics-show-template-tree} flag enables printing a
tree-like structure showing the common and differing parts of the types,
such as:

@smallexample
  map<
    [...],
    vector<
      [double != float]>>
@end smallexample

The parts that differ are highlighted with color (``double'' and
``float'' in this case).

@item -fno-elide-type
@opindex fno-elide-type
@opindex felide-type
By default when the C++ frontend prints diagnostics showing mismatching
template types, common parts of the types are printed as ``[...]'' to
simplify the error message.  For example:

@smallexample
  could not convert 'std::map<int, std::vector<double> >()'
    from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
@end smallexample

Specifying the @option{-fno-elide-type} flag suppresses that behavior.
This flag also affects the output of the
@option{-fdiagnostics-show-template-tree} flag.

@item -fno-show-column
@opindex fno-show-column
Do not print column numbers in diagnostics.  This may be necessary if
diagnostics are being scanned by a program that does not understand the
column numbers, such as @command{dejagnu}.

@end table

@node Warning Options
@section Options to Request or Suppress Warnings
@cindex options to control warnings
@cindex warning messages
@cindex messages, warning
@cindex suppressing warnings

Warnings are diagnostic messages that report constructions that
are not inherently erroneous but that are risky or suggest there
may have been an error.

The following language-independent options do not enable specific
warnings but control the kinds of diagnostics produced by GCC@.

@table @gcctabopt
@cindex syntax checking
@item -fsyntax-only
@opindex fsyntax-only
Check the code for syntax errors, but don't do anything beyond that.

@item -fmax-errors=@var{n}
@opindex fmax-errors
Limits the maximum number of error messages to @var{n}, at which point
GCC bails out rather than attempting to continue processing the source
code.  If @var{n} is 0 (the default), there is no limit on the number
of error messages produced.  If @option{-Wfatal-errors} is also
specified, then @option{-Wfatal-errors} takes precedence over this
option.

@item -w
@opindex w
Inhibit all warning messages.

@item -Werror
@opindex Werror
@opindex Wno-error
Make all warnings into errors.

@item -Werror=
@opindex Werror=
@opindex Wno-error=
Make the specified warning into an error.  The specifier for a warning
is appended; for example @option{-Werror=switch} turns the warnings
controlled by @option{-Wswitch} into errors.  This switch takes a
negative form, to be used to negate @option{-Werror} for specific
warnings; for example @option{-Wno-error=switch} makes
@option{-Wswitch} warnings not be errors, even when @option{-Werror}
is in effect.

The warning message for each controllable warning includes the
option that controls the warning.  That option can then be used with
@option{-Werror=} and @option{-Wno-error=} as described above.
(Printing of the option in the warning message can be disabled using the
@option{-fno-diagnostics-show-option} flag.)

Note that specifying @option{-Werror=}@var{foo} automatically implies
@option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
imply anything.

@item -Wfatal-errors
@opindex Wfatal-errors
@opindex Wno-fatal-errors
This option causes the compiler to abort compilation on the first error
occurred rather than trying to keep going and printing further error
messages.

@end table

You can request many specific warnings with options beginning with
@samp{-W}, for example @option{-Wimplicit} to request warnings on
implicit declarations.  Each of these specific warning options also
has a negative form beginning @samp{-Wno-} to turn off warnings; for
example, @option{-Wno-implicit}.  This manual lists only one of the
two forms, whichever is not the default.  For further
language-specific options also refer to @ref{C++ Dialect Options} and
@ref{Objective-C and Objective-C++ Dialect Options}.

Some options, such as @option{-Wall} and @option{-Wextra}, turn on other
options, such as @option{-Wunused}, which may turn on further options,
such as @option{-Wunused-value}. The combined effect of positive and
negative forms is that more specific options have priority over less
specific ones, independently of their position in the command-line. For
options of the same specificity, the last one takes effect. Options
enabled or disabled via pragmas (@pxref{Diagnostic Pragmas}) take effect
as if they appeared at the end of the command-line.

When an unrecognized warning option is requested (e.g.,
@option{-Wunknown-warning}), GCC emits a diagnostic stating
that the option is not recognized.  However, if the @option{-Wno-} form
is used, the behavior is slightly different: no diagnostic is
produced for @option{-Wno-unknown-warning} unless other diagnostics
are being produced.  This allows the use of new @option{-Wno-} options
with old compilers, but if something goes wrong, the compiler
warns that an unrecognized option is present.

@table @gcctabopt
@item -Wpedantic
@itemx -pedantic
@opindex pedantic
@opindex Wpedantic
Issue all the warnings demanded by strict ISO C and ISO C++;
reject all programs that use forbidden extensions, and some other
programs that do not follow ISO C and ISO C++.  For ISO C, follows the
version of the ISO C standard specified by any @option{-std} option used.

Valid ISO C and ISO C++ programs should compile properly with or without
this option (though a rare few require @option{-ansi} or a
@option{-std} option specifying the required version of ISO C)@.  However,
without this option, certain GNU extensions and traditional C and C++
features are supported as well.  With this option, they are rejected.

@option{-Wpedantic} does not cause warning messages for use of the
alternate keywords whose names begin and end with @samp{__}.  Pedantic
warnings are also disabled in the expression that follows
@code{__extension__}.  However, only system header files should use
these escape routes; application programs should avoid them.
@xref{Alternate Keywords}.

Some users try to use @option{-Wpedantic} to check programs for strict ISO
C conformance.  They soon find that it does not do quite what they want:
it finds some non-ISO practices, but not all---only those for which
ISO C @emph{requires} a diagnostic, and some others for which
diagnostics have been added.

A feature to report any failure to conform to ISO C might be useful in
some instances, but would require considerable additional work and would
be quite different from @option{-Wpedantic}.  We don't have plans to
support such a feature in the near future.

Where the standard specified with @option{-std} represents a GNU
extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
corresponding @dfn{base standard}, the version of ISO C on which the GNU
extended dialect is based.  Warnings from @option{-Wpedantic} are given
where they are required by the base standard.  (It does not make sense
for such warnings to be given only for features not in the specified GNU
C dialect, since by definition the GNU dialects of C include all
features the compiler supports with the given option, and there would be
nothing to warn about.)

@item -pedantic-errors
@opindex pedantic-errors
Give an error whenever the @dfn{base standard} (see @option{-Wpedantic})
requires a diagnostic, in some cases where there is undefined behavior
at compile-time and in some other cases that do not prevent compilation
of programs that are valid according to the standard. This is not
equivalent to @option{-Werror=pedantic}, since there are errors enabled
by this option and not enabled by the latter and vice versa.

@item -Wall
@opindex Wall
@opindex Wno-all
This enables all the warnings about constructions that some users
consider questionable, and that are easy to avoid (or modify to
prevent the warning), even in conjunction with macros.  This also
enables some language-specific warnings described in @ref{C++ Dialect
Options} and @ref{Objective-C and Objective-C++ Dialect Options}.

@option{-Wall} turns on the following warning flags:

@gccoptlist{-Waddress   @gol
-Warray-bounds=1 @r{(only with} @option{-O2}@r{)}  @gol
-Wbool-compare  @gol
-Wbool-operation  @gol
-Wc++11-compat  -Wc++14-compat  @gol
-Wcatch-value @r{(C++ and Objective-C++ only)}  @gol
-Wchar-subscripts  @gol
-Wcomment  @gol
-Wduplicate-decl-specifier @r{(C and Objective-C only)} @gol
-Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol
-Wformat   @gol
-Wint-in-bool-context  @gol
-Wimplicit @r{(C and Objective-C only)} @gol
-Wimplicit-int @r{(C and Objective-C only)} @gol
-Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
-Winit-self @r{(only for C++)} @gol
-Wlogical-not-parentheses @gol
-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
-Wmaybe-uninitialized @gol
-Wmemset-elt-size @gol
-Wmemset-transposed-args @gol
-Wmisleading-indentation @r{(only for C/C++)} @gol
-Wmissing-attributes @gol
-Wmissing-braces @r{(only for C/ObjC)} @gol
-Wmultistatement-macros  @gol
-Wnarrowing @r{(only for C++)}  @gol
-Wnonnull  @gol
-Wnonnull-compare  @gol
-Wopenmp-simd @gol
-Wparentheses  @gol
-Wpointer-sign  @gol
-Wreorder   @gol
-Wrestrict   @gol
-Wreturn-type  @gol
-Wsequence-point  @gol
-Wsign-compare @r{(only in C++)}  @gol
-Wsizeof-pointer-div @gol
-Wsizeof-pointer-memaccess @gol
-Wstrict-aliasing  @gol
-Wstrict-overflow=1  @gol
-Wstringop-truncation  @gol
-Wswitch  @gol
-Wtautological-compare  @gol
-Wtrigraphs  @gol
-Wuninitialized  @gol
-Wunknown-pragmas  @gol
-Wunused-function  @gol
-Wunused-label     @gol
-Wunused-value     @gol
-Wunused-variable  @gol
-Wvolatile-register-var @gol
}

Note that some warning flags are not implied by @option{-Wall}.  Some of
them warn about constructions that users generally do not consider
questionable, but which occasionally you might wish to check for;
others warn about constructions that are necessary or hard to avoid in
some cases, and there is no simple way to modify the code to suppress
the warning. Some of them are enabled by @option{-Wextra} but many of
them must be enabled individually.

@item -Wextra
@opindex W
@opindex Wextra
@opindex Wno-extra
This enables some extra warning flags that are not enabled by
@option{-Wall}. (This option used to be called @option{-W}.  The older
name is still supported, but the newer name is more descriptive.)

@gccoptlist{-Wclobbered  @gol
-Wcast-function-type  @gol
-Wempty-body  @gol
-Wignored-qualifiers @gol
-Wimplicit-fallthrough=3 @gol
-Wmissing-field-initializers  @gol
-Wmissing-parameter-type @r{(C only)}  @gol
-Wold-style-declaration @r{(C only)}  @gol
-Woverride-init  @gol
-Wsign-compare @r{(C only)} @gol
-Wtype-limits  @gol
-Wuninitialized  @gol
-Wshift-negative-value @r{(in C++03 and in C99 and newer)}  @gol
-Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
-Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
}

The option @option{-Wextra} also prints warning messages for the
following cases:

@itemize @bullet

@item
A pointer is compared against integer zero with @code{<}, @code{<=},
@code{>}, or @code{>=}.

@item
(C++ only) An enumerator and a non-enumerator both appear in a
conditional expression.

@item
(C++ only) Ambiguous virtual bases.

@item
(C++ only) Subscripting an array that has been declared @code{register}.

@item
(C++ only) Taking the address of a variable that has been declared
@code{register}.

@item
(C++ only) A base class is not initialized in the copy constructor
of a derived class.

@end itemize

@item -Wchar-subscripts
@opindex Wchar-subscripts
@opindex Wno-char-subscripts
Warn if an array subscript has type @code{char}.  This is a common cause
of error, as programmers often forget that this type is signed on some
machines.
This warning is enabled by @option{-Wall}.

@item -Wchkp
@opindex Wchkp
Warn about an invalid memory access that is found by Pointer Bounds Checker
(@option{-fcheck-pointer-bounds}).

@item -Wno-coverage-mismatch
@opindex Wno-coverage-mismatch
Warn if feedback profiles do not match when using the
@option{-fprofile-use} option.
If a source file is changed between compiling with @option{-fprofile-gen} and
with @option{-fprofile-use}, the files with the profile feedback can fail
to match the source file and GCC cannot use the profile feedback
information.  By default, this warning is enabled and is treated as an
error.  @option{-Wno-coverage-mismatch} can be used to disable the
warning or @option{-Wno-error=coverage-mismatch} can be used to
disable the error.  Disabling the error for this warning can result in
poorly optimized code and is useful only in the
case of very minor changes such as bug fixes to an existing code-base.
Completely disabling the warning is not recommended.

@item -Wno-cpp
@r{(C, Objective-C, C++, Objective-C++ and Fortran only)}

Suppress warning messages emitted by @code{#warning} directives.

@item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wdouble-promotion
@opindex Wno-double-promotion
Give a warning when a value of type @code{float} is implicitly
promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
floating-point unit implement @code{float} in hardware, but emulate
@code{double} in software.  On such a machine, doing computations
using @code{double} values is much more expensive because of the
overhead required for software emulation.

It is easy to accidentally do computations with @code{double} because
floating-point literals are implicitly of type @code{double}.  For
example, in:
@smallexample
@group
float area(float radius)
@{
   return 3.14159 * radius * radius;
@}
@end group
@end smallexample
the compiler performs the entire computation with @code{double}
because the floating-point literal is a @code{double}.

@item -Wduplicate-decl-specifier @r{(C and Objective-C only)}
@opindex Wduplicate-decl-specifier
@opindex Wno-duplicate-decl-specifier
Warn if a declaration has duplicate @code{const}, @code{volatile},
@code{restrict} or @code{_Atomic} specifier.  This warning is enabled by
@option{-Wall}.

@item -Wformat
@itemx -Wformat=@var{n}
@opindex Wformat
@opindex Wno-format
@opindex ffreestanding
@opindex fno-builtin
@opindex Wformat=
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
the arguments supplied have types appropriate to the format string
specified, and that the conversions specified in the format string make
sense.  This includes standard functions, and others specified by format
attributes (@pxref{Function Attributes}), in the @code{printf},
@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
not in the C standard) families (or other target-specific families).
Which functions are checked without format attributes having been
specified depends on the standard version selected, and such checks of
functions without the attribute specified are disabled by
@option{-ffreestanding} or @option{-fno-builtin}.

The formats are checked against the format features supported by GNU
libc version 2.2.  These include all ISO C90 and C99 features, as well
as features from the Single Unix Specification and some BSD and GNU
extensions.  Other library implementations may not support all these
features; GCC does not support warning about features that go beyond a
particular library's limitations.  However, if @option{-Wpedantic} is used
with @option{-Wformat}, warnings are given about format features not
in the selected standard version (but not for @code{strfmon} formats,
since those are not in any version of the C standard).  @xref{C Dialect
Options,,Options Controlling C Dialect}.

@table @gcctabopt
@item -Wformat=1
@itemx -Wformat
@opindex Wformat
@opindex Wformat=1
Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and
@option{-Wno-format} is equivalent to @option{-Wformat=0}.  Since
@option{-Wformat} also checks for null format arguments for several
functions, @option{-Wformat} also implies @option{-Wnonnull}.  Some
aspects of this level of format checking can be disabled by the
options: @option{-Wno-format-contains-nul},
@option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}.
@option{-Wformat} is enabled by @option{-Wall}.

@item -Wno-format-contains-nul
@opindex Wno-format-contains-nul
@opindex Wformat-contains-nul
If @option{-Wformat} is specified, do not warn about format strings that
contain NUL bytes.

@item -Wno-format-extra-args
@opindex Wno-format-extra-args
@opindex Wformat-extra-args
If @option{-Wformat} is specified, do not warn about excess arguments to a
@code{printf} or @code{scanf} format function.  The C standard specifies
that such arguments are ignored.

Where the unused arguments lie between used arguments that are
specified with @samp{$} operand number specifications, normally
warnings are still given, since the implementation could not know what
type to pass to @code{va_arg} to skip the unused arguments.  However,
in the case of @code{scanf} formats, this option suppresses the
warning if the unused arguments are all pointers, since the Single
Unix Specification says that such unused arguments are allowed.

@item -Wformat-overflow
@itemx -Wformat-overflow=@var{level}
@opindex Wformat-overflow
@opindex Wno-format-overflow
Warn about calls to formatted input/output functions such as @code{sprintf}
and @code{vsprintf} that might overflow the destination buffer.  When the
exact number of bytes written by a format directive cannot be determined
at compile-time it is estimated based on heuristics that depend on the
@var{level} argument and on optimization.  While enabling optimization
will in most cases improve the accuracy of the warning, it may also
result in false positives.

@table @gcctabopt
@item -Wformat-overflow
@itemx -Wformat-overflow=1
@opindex Wformat-overflow
@opindex Wno-format-overflow
Level @var{1} of @option{-Wformat-overflow} enabled by @option{-Wformat}
employs a conservative approach that warns only about calls that most
likely overflow the buffer.  At this level, numeric arguments to format
directives with unknown values are assumed to have the value of one, and
strings of unknown length to be empty.  Numeric arguments that are known
to be bounded to a subrange of their type, or string arguments whose output
is bounded either by their directive's precision or by a finite set of
string literals, are assumed to take on the value within the range that
results in the most bytes on output.  For example, the call to @code{sprintf}
below is diagnosed because even with both @var{a} and @var{b} equal to zero,
the terminating NUL character (@code{'\0'}) appended by the function
to the destination buffer will be written past its end.  Increasing
the size of the buffer by a single byte is sufficient to avoid the
warning, though it may not be sufficient to avoid the overflow.

@smallexample
void f (int a, int b)
@{
  char buf [13];
  sprintf (buf, "a = %i, b = %i\n", a, b);
@}
@end smallexample

@item -Wformat-overflow=2
Level @var{2} warns also about calls that might overflow the destination
buffer given an argument of sufficient length or magnitude.  At level
@var{2}, unknown numeric arguments are assumed to have the minimum
representable value for signed types with a precision greater than 1, and
the maximum representable value otherwise.  Unknown string arguments whose
length cannot be assumed to be bounded either by the directive's precision,
or by a finite set of string literals they may evaluate to, or the character
array they may point to, are assumed to be 1 character long.

At level @var{2}, the call in the example above is again diagnosed, but
this time because with @var{a} equal to a 32-bit @code{INT_MIN} the first
@code{%i} directive will write some of its digits beyond the end of
the destination buffer.  To make the call safe regardless of the values
of the two variables, the size of the destination buffer must be increased
to at least 34 bytes.  GCC includes the minimum size of the buffer in
an informational note following the warning.

An alternative to increasing the size of the destination buffer is to
constrain the range of formatted values.  The maximum length of string
arguments can be bounded by specifying the precision in the format
directive.  When numeric arguments of format directives can be assumed
to be bounded by less than the precision of their type, choosing
an appropriate length modifier to the format specifier will reduce
the required buffer size.  For example, if @var{a} and @var{b} in the
example above can be assumed to be within the precision of
the @code{short int} type then using either the @code{%hi} format
directive or casting the argument to @code{short} reduces the maximum
required size of the buffer to 24 bytes.

@smallexample
void f (int a, int b)
@{
  char buf [23];
  sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
@}
@end smallexample
@end table

@item -Wno-format-zero-length
@opindex Wno-format-zero-length
@opindex Wformat-zero-length
If @option{-Wformat} is specified, do not warn about zero-length formats.
The C standard specifies that zero-length formats are allowed.


@item -Wformat=2
@opindex Wformat=2
Enable @option{-Wformat} plus additional format checks.  Currently
equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security
-Wformat-y2k}.

@item -Wformat-nonliteral
@opindex Wformat-nonliteral
@opindex Wno-format-nonliteral
If @option{-Wformat} is specified, also warn if the format string is not a
string literal and so cannot be checked, unless the format function
takes its format arguments as a @code{va_list}.

@item -Wformat-security
@opindex Wformat-security
@opindex Wno-format-security
If @option{-Wformat} is specified, also warn about uses of format
functions that represent possible security problems.  At present, this
warns about calls to @code{printf} and @code{scanf} functions where the
format string is not a string literal and there are no format arguments,
as in @code{printf (foo);}.  This may be a security hole if the format
string came from untrusted input and contains @samp{%n}.  (This is
currently a subset of what @option{-Wformat-nonliteral} warns about, but
in future warnings may be added to @option{-Wformat-security} that are not
included in @option{-Wformat-nonliteral}.)

@item -Wformat-signedness
@opindex Wformat-signedness
@opindex Wno-format-signedness
If @option{-Wformat} is specified, also warn if the format string
requires an unsigned argument and the argument is signed and vice versa.

@item -Wformat-truncation
@itemx -Wformat-truncation=@var{level}
@opindex Wformat-truncation
@opindex Wno-format-truncation
Warn about calls to formatted input/output functions such as @code{snprintf}
and @code{vsnprintf} that might result in output truncation.  When the exact
number of bytes written by a format directive cannot be determined at
compile-time it is estimated based on heuristics that depend on
the @var{level} argument and on optimization.  While enabling optimization
will in most cases improve the accuracy of the warning, it may also result
in false positives.  Except as noted otherwise, the option uses the same
logic @option{-Wformat-overflow}.

@table @gcctabopt
@item -Wformat-truncation
@itemx -Wformat-truncation=1
@opindex Wformat-truncation
@opindex Wno-format-overflow
Level @var{1} of @option{-Wformat-truncation} enabled by @option{-Wformat}
employs a conservative approach that warns only about calls to bounded
functions whose return value is unused and that will most likely result
in output truncation.

@item -Wformat-truncation=2
Level @var{2} warns also about calls to bounded functions whose return
value is used and that might result in truncation given an argument of
sufficient length or magnitude.
@end table

@item -Wformat-y2k
@opindex Wformat-y2k
@opindex Wno-format-y2k
If @option{-Wformat} is specified, also warn about @code{strftime}
formats that may yield only a two-digit year.
@end table

@item -Wnonnull
@opindex Wnonnull
@opindex Wno-nonnull
Warn about passing a null pointer for arguments marked as
requiring a non-null value by the @code{nonnull} function attribute.

@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
can be disabled with the @option{-Wno-nonnull} option.

@item -Wnonnull-compare
@opindex Wnonnull-compare
@opindex Wno-nonnull-compare
Warn when comparing an argument marked with the @code{nonnull}
function attribute against null inside the function.

@option{-Wnonnull-compare} is included in @option{-Wall}.  It
can be disabled with the @option{-Wno-nonnull-compare} option.

@item -Wnull-dereference
@opindex Wnull-dereference
@opindex Wno-null-dereference
Warn if the compiler detects paths that trigger erroneous or
undefined behavior due to dereferencing a null pointer.  This option
is only active when @option{-fdelete-null-pointer-checks} is active,
which is enabled by optimizations in most targets.  The precision of
the warnings depends on the optimization options used.

@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Winit-self
@opindex Wno-init-self
Warn about uninitialized variables that are initialized with themselves.
Note this option can only be used with the @option{-Wuninitialized} option.

For example, GCC warns about @code{i} being uninitialized in the
following snippet only when @option{-Winit-self} has been specified:
@smallexample
@group
int f()
@{
  int i = i;
  return i;
@}
@end group
@end smallexample

This warning is enabled by @option{-Wall} in C++.

@item -Wimplicit-int @r{(C and Objective-C only)}
@opindex Wimplicit-int
@opindex Wno-implicit-int
Warn when a declaration does not specify a type.
This warning is enabled by @option{-Wall}.

@item -Wimplicit-function-declaration @r{(C and Objective-C only)}
@opindex Wimplicit-function-declaration
@opindex Wno-implicit-function-declaration
Give a warning whenever a function is used before being declared. In
C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
enabled by default and it is made into an error by
@option{-pedantic-errors}. This warning is also enabled by
@option{-Wall}.

@item -Wimplicit @r{(C and Objective-C only)}
@opindex Wimplicit
@opindex Wno-implicit
Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
This warning is enabled by @option{-Wall}.

@item -Wimplicit-fallthrough
@opindex Wimplicit-fallthrough
@opindex Wno-implicit-fallthrough
@option{-Wimplicit-fallthrough} is the same as @option{-Wimplicit-fallthrough=3}
and @option{-Wno-implicit-fallthrough} is the same as
@option{-Wimplicit-fallthrough=0}.

@item -Wimplicit-fallthrough=@var{n}
@opindex Wimplicit-fallthrough=
Warn when a switch case falls through.  For example:

@smallexample
@group
switch (cond)
  @{
  case 1:
    a = 1;
    break;
  case 2:
    a = 2;
  case 3:
    a = 3;
    break;
  @}
@end group
@end smallexample

This warning does not warn when the last statement of a case cannot
fall through, e.g. when there is a return statement or a call to function
declared with the noreturn attribute.  @option{-Wimplicit-fallthrough=}
also takes into account control flow statements, such as ifs, and only
warns when appropriate.  E.g.@:

@smallexample
@group
switch (cond)
  @{
  case 1:
    if (i > 3) @{
      bar (5);
      break;
    @} else if (i < 1) @{
      bar (0);
    @} else
      return;
  default:
    @dots{}
  @}
@end group
@end smallexample

Since there are occasions where a switch case fall through is desirable,
GCC provides an attribute, @code{__attribute__ ((fallthrough))}, that is
to be used along with a null statement to suppress this warning that
would normally occur:

@smallexample
@group
switch (cond)
  @{
  case 1:
    bar (0);
    __attribute__ ((fallthrough));
  default:
    @dots{}
  @}
@end group
@end smallexample

C++17 provides a standard way to suppress the @option{-Wimplicit-fallthrough}
warning using @code{[[fallthrough]];} instead of the GNU attribute.  In C++11
or C++14 users can use @code{[[gnu::fallthrough]];}, which is a GNU extension.
Instead of these attributes, it is also possible to add a fallthrough comment
to silence the warning.  The whole body of the C or C++ style comment should
match the given regular expressions listed below.  The option argument @var{n}
specifies what kind of comments are accepted:

@itemize @bullet

@item @option{-Wimplicit-fallthrough=0} disables the warning altogether.

@item @option{-Wimplicit-fallthrough=1} matches @code{.*} regular
expression, any comment is used as fallthrough comment.

@item @option{-Wimplicit-fallthrough=2} case insensitively matches
@code{.*falls?[ \t-]*thr(ough|u).*} regular expression.

@item @option{-Wimplicit-fallthrough=3} case sensitively matches one of the
following regular expressions:

@itemize @bullet

@item @code{-fallthrough}

@item @code{@@fallthrough@@}

@item @code{lint -fallthrough[ \t]*}

@item @code{[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?@*FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?}

@item @code{[ \t.!]*(Else,? |Intentional(ly)? )?@*Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?}

@item @code{[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?@*fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?}

@end itemize

@item @option{-Wimplicit-fallthrough=4} case sensitively matches one of the
following regular expressions:

@itemize @bullet

@item @code{-fallthrough}

@item @code{@@fallthrough@@}

@item @code{lint -fallthrough[ \t]*}

@item @code{[ \t]*FALLTHR(OUGH|U)[ \t]*}

@end itemize

@item @option{-Wimplicit-fallthrough=5} doesn't recognize any comments as
fallthrough comments, only attributes disable the warning.

@end itemize

The comment needs to be followed after optional whitespace and other comments
by @code{case} or @code{default} keywords or by a user label that precedes some
@code{case} or @code{default} label.

@smallexample
@group
switch (cond)
  @{
  case 1:
    bar (0);
    /* FALLTHRU */
  default:
    @dots{}
  @}
@end group
@end smallexample

The @option{-Wimplicit-fallthrough=3} warning is enabled by @option{-Wextra}.

@item -Wif-not-aligned @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wif-not-aligned
@opindex Wno-if-not-aligned
Control if warning triggered by the @code{warn_if_not_aligned} attribute
should be issued.  This is is enabled by default.
Use @option{-Wno-if-not-aligned} to disable it.

@item -Wignored-qualifiers @r{(C and C++ only)}
@opindex Wignored-qualifiers
@opindex Wno-ignored-qualifiers
Warn if the return type of a function has a type qualifier
such as @code{const}.  For ISO C such a type qualifier has no effect,
since the value returned by a function is not an lvalue.
For C++, the warning is only emitted for scalar types or @code{void}.
ISO C prohibits qualified @code{void} return types on function
definitions, so such return types always receive a warning
even without this option.

This warning is also enabled by @option{-Wextra}.

@item -Wignored-attributes @r{(C and C++ only)}
@opindex Wignored-attributes
@opindex Wno-ignored-attributes
Warn when an attribute is ignored.  This is different from the
@option{-Wattributes} option in that it warns whenever the compiler decides
to drop an attribute, not that the attribute is either unknown, used in a
wrong place, etc.  This warning is enabled by default.

@item -Wmain
@opindex Wmain
@opindex Wno-main
Warn if the type of @code{main} is suspicious.  @code{main} should be
a function with external linkage, returning int, taking either zero
arguments, two, or three arguments of appropriate types.  This warning
is enabled by default in C++ and is enabled by either @option{-Wall}
or @option{-Wpedantic}.

@item -Wmisleading-indentation @r{(C and C++ only)}
@opindex Wmisleading-indentation
@opindex Wno-misleading-indentation
Warn when the indentation of the code does not reflect the block structure.
Specifically, a warning is issued for @code{if}, @code{else}, @code{while}, and
@code{for} clauses with a guarded statement that does not use braces,
followed by an unguarded statement with the same indentation.

In the following example, the call to ``bar'' is misleadingly indented as
if it were guarded by the ``if'' conditional.

@smallexample
  if (some_condition ())
    foo ();
    bar ();  /* Gotcha: this is not guarded by the "if".  */
@end smallexample

In the case of mixed tabs and spaces, the warning uses the
@option{-ftabstop=} option to determine if the statements line up
(defaulting to 8).

The warning is not issued for code involving multiline preprocessor logic
such as the following example.

@smallexample
  if (flagA)
    foo (0);
#if SOME_CONDITION_THAT_DOES_NOT_HOLD
  if (flagB)
#endif
    foo (1);
@end smallexample

The warning is not issued after a @code{#line} directive, since this
typically indicates autogenerated code, and no assumptions can be made
about the layout of the file that the directive references.

This warning is enabled by @option{-Wall} in C and C++.

@item -Wmissing-attributes
@opindex Wmissing-attributes
@opindex Wno-missing-attributes
Warn when a declaration of a function is missing one or more attributes
that a related function is declared with and whose absence may adversely
affect the correctness or efficiency of generated code.  For example, in
C++, the warning is issued when an explicit specialization of a primary
template declared with attribute @code{alloc_align}, @code{alloc_size},
@code{assume_aligned}, @code{format}, @code{format_arg}, @code{malloc},
or @code{nonnull} is declared without it.  Attributes @code{deprecated},
@code{error}, and @code{warning} suppress the warning.
(@pxref{Function Attributes}).

@option{-Wmissing-attributes} is enabled by @option{-Wall}.

For example, since the declaration of the primary function template
below makes use of both attribute @code{malloc} and @code{alloc_size}
the declaration of the explicit specialization of the template is
diagnosed because it is missing one of the attributes.

@smallexample
template <class T>
T* __attribute__ ((malloc, alloc_size (1)))
allocate (size_t);

template <>
void* __attribute__ ((malloc))   // missing alloc_size
allocate<void> (size_t);
@end smallexample

@item -Wmissing-braces
@opindex Wmissing-braces
@opindex Wno-missing-braces
Warn if an aggregate or union initializer is not fully bracketed.  In
the following example, the initializer for @code{a} is not fully
bracketed, but that for @code{b} is fully bracketed.  This warning is
enabled by @option{-Wall} in C.

@smallexample
int a[2][2] = @{ 0, 1, 2, 3 @};
int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wmissing-include-dirs
@opindex Wno-missing-include-dirs
Warn if a user-supplied include directory does not exist.

@item -Wmultistatement-macros
@opindex Wmultistatement-macros
@opindex Wno-multistatement-macros
Warn about unsafe multiple statement macros that appear to be guarded
by a clause such as @code{if}, @code{else}, @code{for}, @code{switch}, or
@code{while}, in which only the first statement is actually guarded after
the macro is expanded.

For example:

@smallexample
#define DOIT x++; y++
if (c)
  DOIT;
@end smallexample

will increment @code{y} unconditionally, not just when @code{c} holds.
The can usually be fixed by wrapping the macro in a do-while loop:
@smallexample
#define DOIT do @{ x++; y++; @} while (0)
if (c)
  DOIT;
@end smallexample

This warning is enabled by @option{-Wall} in C and C++.

@item -Wparentheses
@opindex Wparentheses
@opindex Wno-parentheses
Warn if parentheses are omitted in certain contexts, such
as when there is an assignment in a context where a truth value
is expected, or when operators are nested whose precedence people
often get confused about.

Also warn if a comparison like @code{x<=y<=z} appears; this is
equivalent to @code{(x<=y ? 1 : 0) <= z}, which is a different
interpretation from that of ordinary mathematical notation.

Also warn for dangerous uses of the GNU extension to
@code{?:} with omitted middle operand. When the condition
in the @code{?}: operator is a boolean expression, the omitted value is
always 1.  Often programmers expect it to be a value computed
inside the conditional expression instead.

For C++ this also warns for some cases of unnecessary parentheses in
declarations, which can indicate an attempt at a function call instead
of a declaration:
@smallexample
@{
  // Declares a local variable called mymutex.
  std::unique_lock<std::mutex> (mymutex);
  // User meant std::unique_lock<std::mutex> lock (mymutex);
@}
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wsequence-point
@opindex Wsequence-point
@opindex Wno-sequence-point
Warn about code that may have undefined semantics because of violations
of sequence point rules in the C and C++ standards.

The C and C++ standards define the order in which expressions in a C/C++
program are evaluated in terms of @dfn{sequence points}, which represent
a partial ordering between the execution of parts of the program: those
executed before the sequence point, and those executed after it.  These
occur after the evaluation of a full expression (one which is not part
of a larger expression), after the evaluation of the first operand of a
@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
function is called (but after the evaluation of its arguments and the
expression denoting the called function), and in certain other places.
Other than as expressed by the sequence point rules, the order of
evaluation of subexpressions of an expression is not specified.  All
these rules describe only a partial order rather than a total order,
since, for example, if two functions are called within one expression
with no sequence point between them, the order in which the functions
are called is not specified.  However, the standards committee have
ruled that function calls do not overlap.

It is not specified when between sequence points modifications to the
values of objects take effect.  Programs whose behavior depends on this
have undefined behavior; the C and C++ standards specify that ``Between
the previous and next sequence point an object shall have its stored
value modified at most once by the evaluation of an expression.
Furthermore, the prior value shall be read only to determine the value
to be stored.''.  If a program breaks these rules, the results on any
particular implementation are entirely unpredictable.

Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
= b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
diagnosed by this option, and it may give an occasional false positive
result, but in general it has been found fairly effective at detecting
this sort of problem in programs.

The C++17 standard will define the order of evaluation of operands in
more cases: in particular it requires that the right-hand side of an
assignment be evaluated before the left-hand side, so the above
examples are no longer undefined.  But this warning will still warn
about them, to help people avoid writing code that is undefined in C
and earlier revisions of C++.

The standard is worded confusingly, therefore there is some debate
over the precise meaning of the sequence point rules in subtle cases.
Links to discussions of the problem, including proposed formal
definitions, may be found on the GCC readings page, at
@uref{http://gcc.gnu.org/@/readings.html}.

This warning is enabled by @option{-Wall} for C and C++.

@item -Wno-return-local-addr
@opindex Wno-return-local-addr
@opindex Wreturn-local-addr
Do not warn about returning a pointer (or in C++, a reference) to a
variable that goes out of scope after the function returns.

@item -Wreturn-type
@opindex Wreturn-type
@opindex Wno-return-type
Warn whenever a function is defined with a return type that defaults
to @code{int}.  Also warn about any @code{return} statement with no
return value in a function whose return type is not @code{void}
(falling off the end of the function body is considered returning
without a value).

For C only, warn about a @code{return} statement with an expression in a
function whose return type is @code{void}, unless the expression type is
also @code{void}.  As a GNU extension, the latter case is accepted
without a warning unless @option{-Wpedantic} is used.

For C++, a function without return type always produces a diagnostic
message, even when @option{-Wno-return-type} is specified.  The only
exceptions are @code{main} and functions defined in system headers.

This warning is enabled by default for C++ and is enabled by @option{-Wall}.

@item -Wshift-count-negative
@opindex Wshift-count-negative
@opindex Wno-shift-count-negative
Warn if shift count is negative. This warning is enabled by default.

@item -Wshift-count-overflow
@opindex Wshift-count-overflow
@opindex Wno-shift-count-overflow
Warn if shift count >= width of type. This warning is enabled by default.

@item -Wshift-negative-value
@opindex Wshift-negative-value
@opindex Wno-shift-negative-value
Warn if left shifting a negative value.  This warning is enabled by
@option{-Wextra} in C99 and C++11 modes (and newer).

@item -Wshift-overflow
@itemx -Wshift-overflow=@var{n}
@opindex Wshift-overflow
@opindex Wno-shift-overflow
Warn about left shift overflows.  This warning is enabled by
default in C99 and C++11 modes (and newer).

@table @gcctabopt
@item -Wshift-overflow=1
This is the warning level of @option{-Wshift-overflow} and is enabled
by default in C99 and C++11 modes (and newer).  This warning level does
not warn about left-shifting 1 into the sign bit.  (However, in C, such
an overflow is still rejected in contexts where an integer constant expression
is required.)

@item -Wshift-overflow=2
This warning level also warns about left-shifting 1 into the sign bit,
unless C++14 mode is active.
@end table

@item -Wswitch
@opindex Wswitch
@opindex Wno-switch
Warn whenever a @code{switch} statement has an index of enumerated type
and lacks a @code{case} for one or more of the named codes of that
enumeration.  (The presence of a @code{default} label prevents this
warning.)  @code{case} labels outside the enumeration range also
provoke warnings when this option is used (even if there is a
@code{default} label).
This warning is enabled by @option{-Wall}.

@item -Wswitch-default
@opindex Wswitch-default
@opindex Wno-switch-default
Warn whenever a @code{switch} statement does not have a @code{default}
case.

@item -Wswitch-enum
@opindex Wswitch-enum
@opindex Wno-switch-enum
Warn whenever a @code{switch} statement has an index of enumerated type
and lacks a @code{case} for one or more of the named codes of that
enumeration.  @code{case} labels outside the enumeration range also
provoke warnings when this option is used.  The only difference
between @option{-Wswitch} and this option is that this option gives a
warning about an omitted enumeration code even if there is a
@code{default} label.

@item -Wswitch-bool
@opindex Wswitch-bool
@opindex Wno-switch-bool
Warn whenever a @code{switch} statement has an index of boolean type
and the case values are outside the range of a boolean type.
It is possible to suppress this warning by casting the controlling
expression to a type other than @code{bool}.  For example:
@smallexample
@group
switch ((int) (a == 4))
  @{
  @dots{}
  @}
@end group
@end smallexample
This warning is enabled by default for C and C++ programs.

@item -Wswitch-unreachable
@opindex Wswitch-unreachable
@opindex Wno-switch-unreachable
Warn whenever a @code{switch} statement contains statements between the
controlling expression and the first case label, which will never be
executed.  For example:
@smallexample
@group
switch (cond)
  @{
   i = 15;
  @dots{}
   case 5:
  @dots{}
  @}
@end group
@end smallexample
@option{-Wswitch-unreachable} does not warn if the statement between the
controlling expression and the first case label is just a declaration:
@smallexample
@group
switch (cond)
  @{
   int i;
  @dots{}
   case 5:
   i = 5;
  @dots{}
  @}
@end group
@end smallexample
This warning is enabled by default for C and C++ programs.

@item -Wsync-nand @r{(C and C++ only)}
@opindex Wsync-nand
@opindex Wno-sync-nand
Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
built-in functions are used.  These functions changed semantics in GCC 4.4.

@item -Wunused-but-set-parameter
@opindex Wunused-but-set-parameter
@opindex Wno-unused-but-set-parameter
Warn whenever a function parameter is assigned to, but otherwise unused
(aside from its declaration).

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

This warning is also enabled by @option{-Wunused} together with
@option{-Wextra}.

@item -Wunused-but-set-variable
@opindex Wunused-but-set-variable
@opindex Wno-unused-but-set-variable
Warn whenever a local variable is assigned to, but otherwise unused
(aside from its declaration).
This warning is enabled by @option{-Wall}.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

This warning is also enabled by @option{-Wunused}, which is enabled
by @option{-Wall}.

@item -Wunused-function
@opindex Wunused-function
@opindex Wno-unused-function
Warn whenever a static function is declared but not defined or a
non-inline static function is unused.
This warning is enabled by @option{-Wall}.

@item -Wunused-label
@opindex Wunused-label
@opindex Wno-unused-label
Warn whenever a label is declared but not used.
This warning is enabled by @option{-Wall}.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
@opindex Wunused-local-typedefs
Warn when a typedef locally defined in a function is not used.
This warning is enabled by @option{-Wall}.

@item -Wunused-parameter
@opindex Wunused-parameter
@opindex Wno-unused-parameter
Warn whenever a function parameter is unused aside from its declaration.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@item -Wno-unused-result
@opindex Wunused-result
@opindex Wno-unused-result
Do not warn if a caller of a function marked with attribute
@code{warn_unused_result} (@pxref{Function Attributes}) does not use
its return value. The default is @option{-Wunused-result}.

@item -Wunused-variable
@opindex Wunused-variable
@opindex Wno-unused-variable
Warn whenever a local or static variable is unused aside from its
declaration. This option implies @option{-Wunused-const-variable=1} for C,
but not for C++. This warning is enabled by @option{-Wall}.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-const-variable
@itemx -Wunused-const-variable=@var{n}
@opindex Wunused-const-variable
@opindex Wno-unused-const-variable
Warn whenever a constant static variable is unused aside from its declaration.
@option{-Wunused-const-variable=1} is enabled by @option{-Wunused-variable}
for C, but not for C++. In C this declares variable storage, but in C++ this
is not an error since const variables take the place of @code{#define}s.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@table @gcctabopt
@item -Wunused-const-variable=1
This is the warning level that is enabled by @option{-Wunused-variable} for
C.  It warns only about unused static const variables defined in the main
compilation unit, but not about static const variables declared in any
header included.

@item -Wunused-const-variable=2
This warning level also warns for unused constant static variables in
headers (excluding system headers).  This is the warning level of
@option{-Wunused-const-variable} and must be explicitly requested since
in C++ this isn't an error and in C it might be harder to clean up all
headers included.
@end table

@item -Wunused-value
@opindex Wunused-value
@opindex Wno-unused-value
Warn whenever a statement computes a result that is explicitly not
used. To suppress this warning cast the unused expression to
@code{void}. This includes an expression-statement or the left-hand
side of a comma expression that contains no side effects. For example,
an expression such as @code{x[i,j]} causes a warning, while
@code{x[(void)i,j]} does not.

This warning is enabled by @option{-Wall}.

@item -Wunused
@opindex Wunused
@opindex Wno-unused
All the above @option{-Wunused} options combined.

In order to get a warning about an unused function parameter, you must
either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
@option{-Wunused}), or separately specify @option{-Wunused-parameter}.

@item -Wuninitialized
@opindex Wuninitialized
@opindex Wno-uninitialized
Warn if an automatic variable is used without first being initialized
or if a variable may be clobbered by a @code{setjmp} call. In C++,
warn if a non-static reference or non-static @code{const} member
appears in a class without constructors.

If you want to warn about code that uses the uninitialized value of the
variable in its own initializer, use the @option{-Winit-self} option.

These warnings occur for individual uninitialized or clobbered
elements of structure, union or array variables as well as for
variables that are uninitialized or clobbered as a whole.  They do
not occur for variables or elements declared @code{volatile}.  Because
these warnings depend on optimization, the exact variables or elements
for which there are warnings depends on the precise optimization
options and version of GCC used.

Note that there may be no warning about a variable that is used only
to compute a value that itself is never used, because such
computations may be deleted by data flow analysis before the warnings
are printed.

@item -Winvalid-memory-model
@opindex Winvalid-memory-model
@opindex Wno-invalid-memory-model
Warn for invocations of @ref{__atomic Builtins}, @ref{__sync Builtins},
and the C11 atomic generic functions with a memory consistency argument
that is either invalid for the operation or outside the range of values
of the @code{memory_order} enumeration.  For example, since the
@code{__atomic_store} and @code{__atomic_store_n} built-ins are only
defined for the relaxed, release, and sequentially consistent memory
orders the following code is diagnosed:

@smallexample
void store (int *i)
@{
  __atomic_store_n (i, 0, memory_order_consume);
@}
@end smallexample

@option{-Winvalid-memory-model} is enabled by default.

@item -Wmaybe-uninitialized
@opindex Wmaybe-uninitialized
@opindex Wno-maybe-uninitialized
For an automatic (i.e.@ local) variable, if there exists a path from the
function entry to a use of the variable that is initialized, but there exist
some other paths for which the variable is not initialized, the compiler
emits a warning if it cannot prove the uninitialized paths are not
executed at run time.

These warnings are only possible in optimizing compilation, because otherwise
GCC does not keep track of the state of variables.

These warnings are made optional because GCC may not be able to determine when
the code is correct in spite of appearing to have an error.  Here is one
example of how this can happen:

@smallexample
@group
@{
  int x;
  switch (y)
    @{
    case 1: x = 1;
      break;
    case 2: x = 4;
      break;
    case 3: x = 5;
    @}
  foo (x);
@}
@end group
@end smallexample

@noindent
If the value of @code{y} is always 1, 2 or 3, then @code{x} is
always initialized, but GCC doesn't know this. To suppress the
warning, you need to provide a default case with assert(0) or
similar code.

@cindex @code{longjmp} warnings
This option also warns when a non-volatile automatic variable might be
changed by a call to @code{longjmp}.
The compiler sees only the calls to @code{setjmp}.  It cannot know
where @code{longjmp} will be called; in fact, a signal handler could
call it at any point in the code.  As a result, you may get a warning
even when there is in fact no problem because @code{longjmp} cannot
in fact be called at the place that would cause a problem.

Some spurious warnings can be avoided if you declare all the functions
you use that never return as @code{noreturn}.  @xref{Function
Attributes}.

This warning is enabled by @option{-Wall} or @option{-Wextra}.

@item -Wunknown-pragmas
@opindex Wunknown-pragmas
@opindex Wno-unknown-pragmas
@cindex warning for unknown pragmas
@cindex unknown pragmas, warning
@cindex pragmas, warning of unknown
Warn when a @code{#pragma} directive is encountered that is not understood by 
GCC@.  If this command-line option is used, warnings are even issued
for unknown pragmas in system header files.  This is not the case if
the warnings are only enabled by the @option{-Wall} command-line option.

@item -Wno-pragmas
@opindex Wno-pragmas
@opindex Wpragmas
Do not warn about misuses of pragmas, such as incorrect parameters,
invalid syntax, or conflicts between pragmas.  See also
@option{-Wunknown-pragmas}.

@item -Wstrict-aliasing
@opindex Wstrict-aliasing
@opindex Wno-strict-aliasing
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code that might break the strict aliasing rules that the
compiler is using for optimization.  The warning does not catch all
cases, but does attempt to catch the more common pitfalls.  It is
included in @option{-Wall}.
It is equivalent to @option{-Wstrict-aliasing=3}

@item -Wstrict-aliasing=n
@opindex Wstrict-aliasing=n
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code that might break the strict aliasing rules that the
compiler is using for optimization.
Higher levels correspond to higher accuracy (fewer false positives).
Higher levels also correspond to more effort, similar to the way @option{-O} 
works.
@option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.

Level 1: Most aggressive, quick, least accurate.
Possibly useful when higher levels
do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
false negatives.  However, it has many false positives.
Warns for all pointer conversions between possibly incompatible types,
even if never dereferenced.  Runs in the front end only.

Level 2: Aggressive, quick, not too precise.
May still have many false positives (not as many as level 1 though),
and few false negatives (but possibly more than level 1).
Unlike level 1, it only warns when an address is taken.  Warns about
incomplete types.  Runs in the front end only.

Level 3 (default for @option{-Wstrict-aliasing}):
Should have very few false positives and few false
negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
Takes care of the common pun+dereference pattern in the front end:
@code{*(int*)&some_float}.
If optimization is enabled, it also runs in the back end, where it deals
with multiple statement cases using flow-sensitive points-to information.
Only warns when the converted pointer is dereferenced.
Does not warn about incomplete types.

@item -Wstrict-overflow
@itemx -Wstrict-overflow=@var{n}
@opindex Wstrict-overflow
@opindex Wno-strict-overflow
This option is only active when signed overflow is undefined.
It warns about cases where the compiler optimizes based on the
assumption that signed overflow does not occur.  Note that it does not
warn about all cases where the code might overflow: it only warns
about cases where the compiler implements some optimization.  Thus
this warning depends on the optimization level.

An optimization that assumes that signed overflow does not occur is
perfectly safe if the values of the variables involved are such that
overflow never does, in fact, occur.  Therefore this warning can
easily give a false positive: a warning about code that is not
actually a problem.  To help focus on important issues, several
warning levels are defined.  No warnings are issued for the use of
undefined signed overflow when estimating how many iterations a loop
requires, in particular when determining whether a loop will be
executed at all.

@table @gcctabopt
@item -Wstrict-overflow=1
Warn about cases that are both questionable and easy to avoid.  For
example the compiler simplifies
@code{x + 1 > x} to @code{1}.  This level of
@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
are not, and must be explicitly requested.

@item -Wstrict-overflow=2
Also warn about other cases where a comparison is simplified to a
constant.  For example: @code{abs (x) >= 0}.  This can only be
simplified when signed integer overflow is undefined, because
@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
zero.  @option{-Wstrict-overflow} (with no level) is the same as
@option{-Wstrict-overflow=2}.

@item -Wstrict-overflow=3
Also warn about other cases where a comparison is simplified.  For
example: @code{x + 1 > 1} is simplified to @code{x > 0}.

@item -Wstrict-overflow=4
Also warn about other simplifications not covered by the above cases.
For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.

@item -Wstrict-overflow=5
Also warn about cases where the compiler reduces the magnitude of a
constant involved in a comparison.  For example: @code{x + 2 > y} is
simplified to @code{x + 1 >= y}.  This is reported only at the
highest warning level because this simplification applies to many
comparisons, so this warning level gives a very large number of
false positives.
@end table

@item -Wstringop-overflow
@itemx -Wstringop-overflow=@var{type}
@opindex Wstringop-overflow
@opindex Wno-stringop-overflow
Warn for calls to string manipulation functions such as @code{memcpy} and
@code{strcpy} that are determined to overflow the destination buffer.  The
optional argument is one greater than the type of Object Size Checking to
perform to determine the size of the destination.  @xref{Object Size Checking}.
The argument is meaningful only for functions that operate on character arrays
but not for raw memory functions like @code{memcpy} which always make use
of Object Size type-0.  The option also warns for calls that specify a size
in excess of the largest possible object or at most @code{SIZE_MAX / 2} bytes.
The option produces the best results with optimization enabled but can detect
a small subset of simple buffer overflows even without optimization in
calls to the GCC built-in functions like @code{__builtin_memcpy} that
correspond to the standard functions.  In any case, the option warns about
just a subset of buffer overflows detected by the corresponding overflow
checking built-ins.  For example, the option will issue a warning for
the @code{strcpy} call below because it copies at least 5 characters
(the string @code{"blue"} including the terminating NUL) into the buffer
of size 4.

@smallexample
enum Color @{ blue, purple, yellow @};
const char* f (enum Color clr)
@{
  static char buf [4];
  const char *str;
  switch (clr)
    @{
      case blue: str = "blue"; break;
      case purple: str = "purple"; break;
      case yellow: str = "yellow"; break;
    @}

  return strcpy (buf, str);   // warning here
@}
@end smallexample

Option @option{-Wstringop-overflow=2} is enabled by default.

@table @gcctabopt
@item -Wstringop-overflow
@itemx -Wstringop-overflow=1
@opindex Wstringop-overflow
@opindex Wno-stringop-overflow
The @option{-Wstringop-overflow=1} option uses type-zero Object Size Checking
to determine the sizes of destination objects.  This is the default setting
of the option.  At this setting the option will not warn for writes past
the end of subobjects of larger objects accessed by pointers unless the
size of the largest surrounding object is known.  When the destination may
be one of several objects it is assumed to be the largest one of them.  On
Linux systems, when optimization is enabled at this setting the option warns
for the same code as when the @code{_FORTIFY_SOURCE} macro is defined to
a non-zero value.

@item -Wstringop-overflow=2
The @option{-Wstringop-overflow=2} option uses type-one Object Size Checking
to determine the sizes of destination objects.  At this setting the option
will warn about overflows when writing to members of the largest complete
objects whose exact size is known.  It will, however, not warn for excessive
writes to the same members of unknown objects referenced by pointers since
they may point to arrays containing unknown numbers of elements.

@item -Wstringop-overflow=3
The @option{-Wstringop-overflow=3} option uses type-two Object Size Checking
to determine the sizes of destination objects.  At this setting the option
warns about overflowing the smallest object or data member.  This is the
most restrictive setting of the option that may result in warnings for safe
code.

@item -Wstringop-overflow=4
The @option{-Wstringop-overflow=4} option uses type-three Object Size Checking
to determine the sizes of destination objects.  At this setting the option
will warn about overflowing any data members, and when the destination is
one of several objects it uses the size of the largest of them to decide
whether to issue a warning.  Similarly to @option{-Wstringop-overflow=3} this
setting of the option may result in warnings for benign code.
@end table

@item -Wstringop-truncation
@opindex Wstringop-truncation
@opindex Wno-stringop-truncation
Warn for calls to bounded string manipulation functions such as @code{strncat},
@code{strncpy}, and @code{stpncpy} that may either truncate the copied string
or leave the destination unchanged.

In the following example, the call to @code{strncat} specifies a bound that
is less than the length of the source string.  As a result, the copy of
the source will be truncated and so the call is diagnosed.  To avoid the
warning use @code{bufsize - strlen (buf) - 1)} as the bound.

@smallexample
void append (char *buf, size_t bufsize)
@{
  strncat (buf, ".txt", 3);
@}
@end smallexample

As another example, the following call to @code{strncpy} results in copying
to @code{d} just the characters preceding the terminating NUL, without
appending the NUL to the end.  Assuming the result of @code{strncpy} is
necessarily a NUL-terminated string is a common mistake, and so the call
is diagnosed.  To avoid the warning when the result is not expected to be
NUL-terminated, call @code{memcpy} instead.

@smallexample
void copy (char *d, const char *s)
@{
  strncpy (d, s, strlen (s));
@}
@end smallexample

In the following example, the call to @code{strncpy} specifies the size
of the destination buffer as the bound.  If the length of the source
string is equal to or greater than this size the result of the copy will
not be NUL-terminated.  Therefore, the call is also diagnosed.  To avoid
the warning, specify @code{sizeof buf - 1} as the bound and set the last
element of the buffer to @code{NUL}.

@smallexample
void copy (const char *s)
@{
  char buf[80];
  strncpy (buf, s, sizeof buf);
  @dots{}
@}
@end smallexample

In situations where a character array is intended to store a sequence
of bytes with no terminating @code{NUL} such an array may be annotated
with attribute @code{nonstring} to avoid this warning.  Such arrays,
however, are not suitable arguments to functions that expect
@code{NUL}-terminated strings.  To help detect accidental misuses of
such arrays GCC issues warnings unless it can prove that the use is
safe.  @xref{Common Variable Attributes}.

Option @option{-Wstringop-truncation} is enabled by @option{-Wall}.

@item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}cold@r{|}malloc@r{]}
@opindex Wsuggest-attribute=
@opindex Wno-suggest-attribute=
Warn for cases where adding an attribute may be beneficial. The
attributes currently supported are listed below.

@table @gcctabopt
@item -Wsuggest-attribute=pure
@itemx -Wsuggest-attribute=const
@itemx -Wsuggest-attribute=noreturn
@itemx -Wsuggest-attribute=malloc
@opindex Wsuggest-attribute=pure
@opindex Wno-suggest-attribute=pure
@opindex Wsuggest-attribute=const
@opindex Wno-suggest-attribute=const
@opindex Wsuggest-attribute=noreturn
@opindex Wno-suggest-attribute=noreturn
@opindex Wsuggest-attribute=malloc
@opindex Wno-suggest-attribute=malloc

Warn about functions that might be candidates for attributes
@code{pure}, @code{const} or @code{noreturn} or @code{malloc}. The compiler
only warns for functions visible in other compilation units or (in the case of
@code{pure} and @code{const}) if it cannot prove that the function returns
normally. A function returns normally if it doesn't contain an infinite loop or
return abnormally by throwing, calling @code{abort} or trapping.  This analysis
requires option @option{-fipa-pure-const}, which is enabled by default at
@option{-O} and higher.  Higher optimization levels improve the accuracy
of the analysis.

@item -Wsuggest-attribute=format
@itemx -Wmissing-format-attribute
@opindex Wsuggest-attribute=format
@opindex Wmissing-format-attribute
@opindex Wno-suggest-attribute=format
@opindex Wno-missing-format-attribute
@opindex Wformat
@opindex Wno-format

Warn about function pointers that might be candidates for @code{format}
attributes.  Note these are only possible candidates, not absolute ones.
GCC guesses that function pointers with @code{format} attributes that
are used in assignment, initialization, parameter passing or return
statements should have a corresponding @code{format} attribute in the
resulting type.  I.e.@: the left-hand side of the assignment or
initialization, the type of the parameter variable, or the return type
of the containing function respectively should also have a @code{format}
attribute to avoid the warning.

GCC also warns about function definitions that might be
candidates for @code{format} attributes.  Again, these are only
possible candidates.  GCC guesses that @code{format} attributes
might be appropriate for any function that calls a function like
@code{vprintf} or @code{vscanf}, but this might not always be the
case, and some functions for which @code{format} attributes are
appropriate may not be detected.

@item -Wsuggest-attribute=cold
@opindex Wsuggest-attribute=cold
@opindex Wno-suggest-attribute=cold

Warn about functions that might be candidates for @code{cold} attribute.  This
is based on static detection and generally will only warn about functions which
always leads to a call to another @code{cold} function such as wrappers of
C++ @code{throw} or fatal error reporting functions leading to @code{abort}.
@end table

@item -Wsuggest-final-types
@opindex Wno-suggest-final-types
@opindex Wsuggest-final-types
Warn about types with virtual methods where code quality would be improved
if the type were declared with the C++11 @code{final} specifier, 
or, if possible,
declared in an anonymous namespace. This allows GCC to more aggressively
devirtualize the polymorphic calls. This warning is more effective with link
time optimization, where the information about the class hierarchy graph is
more complete.

@item -Wsuggest-final-methods
@opindex Wno-suggest-final-methods
@opindex Wsuggest-final-methods
Warn about virtual methods where code quality would be improved if the method
were declared with the C++11 @code{final} specifier, 
or, if possible, its type were
declared in an anonymous namespace or with the @code{final} specifier.
This warning is
more effective with link-time optimization, where the information about the
class hierarchy graph is more complete. It is recommended to first consider
suggestions of @option{-Wsuggest-final-types} and then rebuild with new
annotations.

@item -Wsuggest-override
Warn about overriding virtual functions that are not marked with the override
keyword.

@item -Walloc-zero
@opindex Wno-alloc-zero
@opindex Walloc-zero
Warn about calls to allocation functions decorated with attribute
@code{alloc_size} that specify zero bytes, including those to the built-in
forms of the functions @code{aligned_alloc}, @code{alloca}, @code{calloc},
@code{malloc}, and @code{realloc}.  Because the behavior of these functions
when called with a zero size differs among implementations (and in the case
of @code{realloc} has been deprecated) relying on it may result in subtle
portability bugs and should be avoided.

@item -Walloc-size-larger-than=@var{n}
Warn about calls to functions decorated with attribute @code{alloc_size}
that attempt to allocate objects larger than the specified number of bytes,
or where the result of the size computation in an integer type with infinite
precision would exceed @code{SIZE_MAX / 2}.  The option argument @var{n}
may end in one of the standard suffixes designating a multiple of bytes
such as @code{kB} and @code{KiB} for kilobyte and kibibyte, respectively,
@code{MB} and @code{MiB} for megabyte and mebibyte, and so on.
@option{-Walloc-size-larger-than=}@var{PTRDIFF_MAX} is enabled by default.
Warnings controlled by the option can be disabled by specifying @var{n}
of @var{SIZE_MAX} or more.
@xref{Function Attributes}.

@item -Walloca
@opindex Wno-alloca
@opindex Walloca
This option warns on all uses of @code{alloca} in the source.

@item -Walloca-larger-than=@var{n}
This option warns on calls to @code{alloca} that are not bounded by a
controlling predicate limiting its argument of integer type to at most
@var{n} bytes, or calls to @code{alloca} where the bound is unknown.
Arguments of non-integer types are considered unbounded even if they
appear to be constrained to the expected range.

For example, a bounded case of @code{alloca} could be:

@smallexample
void func (size_t n)
@{
  void *p;
  if (n <= 1000)
    p = alloca (n);
  else
    p = malloc (n);
  f (p);
@}
@end smallexample

In the above example, passing @code{-Walloca-larger-than=1000} would not
issue a warning because the call to @code{alloca} is known to be at most
1000 bytes.  However, if @code{-Walloca-larger-than=500} were passed,
the compiler would emit a warning.

Unbounded uses, on the other hand, are uses of @code{alloca} with no
controlling predicate constraining its integer argument.  For example:

@smallexample
void func ()
@{
  void *p = alloca (n);
  f (p);
@}
@end smallexample

If @code{-Walloca-larger-than=500} were passed, the above would trigger
a warning, but this time because of the lack of bounds checking.

Note, that even seemingly correct code involving signed integers could
cause a warning:

@smallexample
void func (signed int n)
@{
  if (n < 500)
    @{
      p = alloca (n);
      f (p);
    @}
@}
@end smallexample

In the above example, @var{n} could be negative, causing a larger than
expected argument to be implicitly cast into the @code{alloca} call.

This option also warns when @code{alloca} is used in a loop.

This warning is not enabled by @option{-Wall}, and is only active when
@option{-ftree-vrp} is active (default for @option{-O2} and above).

See also @option{-Wvla-larger-than=@var{n}}.

@item -Warray-bounds
@itemx -Warray-bounds=@var{n}
@opindex Wno-array-bounds
@opindex Warray-bounds
This option is only active when @option{-ftree-vrp} is active
(default for @option{-O2} and above). It warns about subscripts to arrays
that are always out of bounds. This warning is enabled by @option{-Wall}.

@table @gcctabopt
@item -Warray-bounds=1
This is the warning level of @option{-Warray-bounds} and is enabled
by @option{-Wall}; higher levels are not, and must be explicitly requested.

@item -Warray-bounds=2
This warning level also warns about out of bounds access for
arrays at the end of a struct and for arrays accessed through
pointers. This warning level may give a larger number of
false positives and is deactivated by default.
@end table

@item -Wattribute-alias
Warn about declarations using the @code{alias} and similar attributes whose
target is incompatible with the type of the alias.  @xref{Function Attributes,
,Declaring Attributes of Functions}.

@item -Wbool-compare
@opindex Wno-bool-compare
@opindex Wbool-compare
Warn about boolean expression compared with an integer value different from
@code{true}/@code{false}.  For instance, the following comparison is
always false:
@smallexample
int n = 5;
@dots{}
if ((n > 1) == 2) @{ @dots{} @}
@end smallexample
This warning is enabled by @option{-Wall}.

@item -Wbool-operation
@opindex Wno-bool-operation
@opindex Wbool-operation
Warn about suspicious operations on expressions of a boolean type.  For
instance, bitwise negation of a boolean is very likely a bug in the program.
For C, this warning also warns about incrementing or decrementing a boolean,
which rarely makes sense.  (In C++, decrementing a boolean is always invalid.
Incrementing a boolean is invalid in C++17, and deprecated otherwise.)

This warning is enabled by @option{-Wall}.

@item -Wduplicated-branches
@opindex Wno-duplicated-branches
@opindex Wduplicated-branches
Warn when an if-else has identical branches.  This warning detects cases like
@smallexample
if (p != NULL)
  return 0;
else
  return 0;
@end smallexample
It doesn't warn when both branches contain just a null statement.  This warning
also warn for conditional operators:
@smallexample
  int i = x ? *p : *p;
@end smallexample

@item -Wduplicated-cond
@opindex Wno-duplicated-cond
@opindex Wduplicated-cond
Warn about duplicated conditions in an if-else-if chain.  For instance,
warn for the following code:
@smallexample
if (p->q != NULL) @{ @dots{} @}
else if (p->q != NULL) @{ @dots{} @}
@end smallexample

@item -Wframe-address
@opindex Wno-frame-address
@opindex Wframe-address
Warn when the @samp{__builtin_frame_address} or @samp{__builtin_return_address}
is called with an argument greater than 0.  Such calls may return indeterminate
values or crash the program.  The warning is included in @option{-Wall}.

@item -Wno-discarded-qualifiers @r{(C and Objective-C only)}
@opindex Wno-discarded-qualifiers
@opindex Wdiscarded-qualifiers
Do not warn if type qualifiers on pointers are being discarded.
Typically, the compiler warns if a @code{const char *} variable is
passed to a function that takes a @code{char *} parameter.  This option
can be used to suppress such a warning.

@item -Wno-discarded-array-qualifiers @r{(C and Objective-C only)}
@opindex Wno-discarded-array-qualifiers
@opindex Wdiscarded-array-qualifiers
Do not warn if type qualifiers on arrays which are pointer targets
are being discarded. Typically, the compiler warns if a
@code{const int (*)[]} variable is passed to a function that
takes a @code{int (*)[]} parameter.  This option can be used to
suppress such a warning.

@item -Wno-incompatible-pointer-types @r{(C and Objective-C only)}
@opindex Wno-incompatible-pointer-types
@opindex Wincompatible-pointer-types
Do not warn when there is a conversion between pointers that have incompatible
types.  This warning is for cases not covered by @option{-Wno-pointer-sign},
which warns for pointer argument passing or assignment with different
signedness.

@item -Wno-int-conversion @r{(C and Objective-C only)}
@opindex Wno-int-conversion
@opindex Wint-conversion
Do not warn about incompatible integer to pointer and pointer to integer
conversions.  This warning is about implicit conversions; for explicit
conversions the warnings @option{-Wno-int-to-pointer-cast} and
@option{-Wno-pointer-to-int-cast} may be used.

@item -Wno-div-by-zero
@opindex Wno-div-by-zero
@opindex Wdiv-by-zero
Do not warn about compile-time integer division by zero.  Floating-point
division by zero is not warned about, as it can be a legitimate way of
obtaining infinities and NaNs.

@item -Wsystem-headers
@opindex Wsystem-headers
@opindex Wno-system-headers
@cindex warnings from system headers
@cindex system headers, warnings from
Print warning messages for constructs found in system header files.
Warnings from system headers are normally suppressed, on the assumption
that they usually do not indicate real problems and would only make the
compiler output harder to read.  Using this command-line option tells
GCC to emit warnings from system headers as if they occurred in user
code.  However, note that using @option{-Wall} in conjunction with this
option does @emph{not} warn about unknown pragmas in system
headers---for that, @option{-Wunknown-pragmas} must also be used.

@item -Wtautological-compare
@opindex Wtautological-compare
@opindex Wno-tautological-compare
Warn if a self-comparison always evaluates to true or false.  This
warning detects various mistakes such as:
@smallexample
int i = 1;
@dots{}
if (i > i) @{ @dots{} @}
@end smallexample

This warning also warns about bitwise comparisons that always evaluate
to true or false, for instance:
@smallexample
if ((a & 16) == 10) @{ @dots{} @}
@end smallexample
will always be false.

This warning is enabled by @option{-Wall}.

@item -Wtrampolines
@opindex Wtrampolines
@opindex Wno-trampolines
Warn about trampolines generated for pointers to nested functions.
A trampoline is a small piece of data or code that is created at run
time on the stack when the address of a nested function is taken, and is
used to call the nested function indirectly.  For some targets, it is
made up of data only and thus requires no special treatment.  But, for
most targets, it is made up of code and thus requires the stack to be
made executable in order for the program to work properly.

@item -Wfloat-equal
@opindex Wfloat-equal
@opindex Wno-float-equal
Warn if floating-point values are used in equality comparisons.

The idea behind this is that sometimes it is convenient (for the
programmer) to consider floating-point values as approximations to
infinitely precise real numbers.  If you are doing this, then you need
to compute (by analyzing the code, or in some other way) the maximum or
likely maximum error that the computation introduces, and allow for it
when performing comparisons (and when producing output, but that's a
different problem).  In particular, instead of testing for equality, you
should check to see whether the two values have ranges that overlap; and
this is done with the relational operators, so equality comparisons are
probably mistaken.

@item -Wtraditional @r{(C and Objective-C only)}
@opindex Wtraditional
@opindex Wno-traditional
Warn about certain constructs that behave differently in traditional and
ISO C@.  Also warn about ISO C constructs that have no traditional C
equivalent, and/or problematic constructs that should be avoided.

@itemize @bullet
@item
Macro parameters that appear within string literals in the macro body.
In traditional C macro replacement takes place within string literals,
but in ISO C it does not.

@item
In traditional C, some preprocessor directives did not exist.
Traditional preprocessors only considered a line to be a directive
if the @samp{#} appeared in column 1 on the line.  Therefore
@option{-Wtraditional} warns about directives that traditional C
understands but ignores because the @samp{#} does not appear as the
first character on the line.  It also suggests you hide directives like
@code{#pragma} not understood by traditional C by indenting them.  Some
traditional implementations do not recognize @code{#elif}, so this option
suggests avoiding it altogether.

@item
A function-like macro that appears without arguments.

@item
The unary plus operator.

@item
The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
constants.)  Note, these suffixes appear in macros defined in the system
headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
Use of these macros in user code might normally lead to spurious
warnings, however GCC's integrated preprocessor has enough context to
avoid warning in these cases.

@item
A function declared external in one block and then used after the end of
the block.

@item
A @code{switch} statement has an operand of type @code{long}.

@item
A non-@code{static} function declaration follows a @code{static} one.
This construct is not accepted by some traditional C compilers.

@item
The ISO type of an integer constant has a different width or
signedness from its traditional type.  This warning is only issued if
the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
typically represent bit patterns, are not warned about.

@item
Usage of ISO string concatenation is detected.

@item
Initialization of automatic aggregates.

@item
Identifier conflicts with labels.  Traditional C lacks a separate
namespace for labels.

@item
Initialization of unions.  If the initializer is zero, the warning is
omitted.  This is done under the assumption that the zero initializer in
user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
initializer warnings and relies on default initialization to zero in the
traditional C case.

@item
Conversions by prototypes between fixed/floating-point values and vice
versa.  The absence of these prototypes when compiling with traditional
C causes serious problems.  This is a subset of the possible
conversion warnings; for the full set use @option{-Wtraditional-conversion}.

@item
Use of ISO C style function definitions.  This warning intentionally is
@emph{not} issued for prototype declarations or variadic functions
because these ISO C features appear in your code when using
libiberty's traditional C compatibility macros, @code{PARAMS} and
@code{VPARAMS}.  This warning is also bypassed for nested functions
because that feature is already a GCC extension and thus not relevant to
traditional C compatibility.
@end itemize

@item -Wtraditional-conversion @r{(C and Objective-C only)}
@opindex Wtraditional-conversion
@opindex Wno-traditional-conversion
Warn if a prototype causes a type conversion that is different from what
would happen to the same argument in the absence of a prototype.  This
includes conversions of fixed point to floating and vice versa, and
conversions changing the width or signedness of a fixed-point argument
except when the same as the default promotion.

@item -Wdeclaration-after-statement @r{(C and Objective-C only)}
@opindex Wdeclaration-after-statement
@opindex Wno-declaration-after-statement
Warn when a declaration is found after a statement in a block.  This
construct, known from C++, was introduced with ISO C99 and is by default
allowed in GCC@.  It is not supported by ISO C90.  @xref{Mixed Declarations}.

@item -Wshadow
@opindex Wshadow
@opindex Wno-shadow
Warn whenever a local variable or type declaration shadows another
variable, parameter, type, class member (in C++), or instance variable
(in Objective-C) or whenever a built-in function is shadowed. Note
that in C++, the compiler warns if a local variable shadows an
explicit typedef, but not if it shadows a struct/class/enum.
Same as @option{-Wshadow=global}.

@item -Wno-shadow-ivar @r{(Objective-C only)}
@opindex Wno-shadow-ivar
@opindex Wshadow-ivar
Do not warn whenever a local variable shadows an instance variable in an
Objective-C method.

@item -Wshadow=global
@opindex Wshadow=local
The default for @option{-Wshadow}. Warns for any (global) shadowing.

@item -Wshadow=local
@opindex Wshadow=local
Warn when a local variable shadows another local variable or parameter.
This warning is enabled by @option{-Wshadow=global}.

@item -Wshadow=compatible-local
@opindex Wshadow=compatible-local
Warn when a local variable shadows another local variable or parameter
whose type is compatible with that of the shadowing variable. In C++,
type compatibility here means the type of the shadowing variable can be
converted to that of the shadowed variable. The creation of this flag
(in addition to @option{-Wshadow=local}) is based on the idea that when
a local variable shadows another one of incompatible type, it is most
likely intentional, not a bug or typo, as shown in the following example:

@smallexample
@group
for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
@{
  for (int i = 0; i < N; ++i)
  @{
    ...
  @}
  ...
@}
@end group
@end smallexample

Since the two variable @code{i} in the example above have incompatible types,
enabling only @option{-Wshadow=compatible-local} will not emit a warning.
Because their types are incompatible, if a programmer accidentally uses one
in place of the other, type checking will catch that and emit an error or
warning. So not warning (about shadowing) in this case will not lead to
undetected bugs. Use of this flag instead of @option{-Wshadow=local} can
possibly reduce the number of warnings triggered by intentional shadowing.

This warning is enabled by @option{-Wshadow=local}.

@item -Wlarger-than=@var{len}
@opindex Wlarger-than=@var{len}
@opindex Wlarger-than-@var{len}
Warn whenever an object of larger than @var{len} bytes is defined.

@item -Wframe-larger-than=@var{len}
@opindex Wframe-larger-than
Warn if the size of a function frame is larger than @var{len} bytes.
The computation done to determine the stack frame size is approximate
and not conservative.
The actual requirements may be somewhat greater than @var{len}
even if you do not get a warning.  In addition, any space allocated
via @code{alloca}, variable-length arrays, or related constructs
is not included by the compiler when determining
whether or not to issue a warning.

@item -Wno-free-nonheap-object
@opindex Wno-free-nonheap-object
@opindex Wfree-nonheap-object
Do not warn when attempting to free an object that was not allocated
on the heap.

@item -Wstack-usage=@var{len}
@opindex Wstack-usage
Warn if the stack usage of a function might be larger than @var{len} bytes.
The computation done to determine the stack usage is conservative.
Any space allocated via @code{alloca}, variable-length arrays, or related
constructs is included by the compiler when determining whether or not to
issue a warning.

The message is in keeping with the output of @option{-fstack-usage}.

@itemize
@item
If the stack usage is fully static but exceeds the specified amount, it's:

@smallexample
  warning: stack usage is 1120 bytes
@end smallexample
@item
If the stack usage is (partly) dynamic but bounded, it's:

@smallexample
  warning: stack usage might be 1648 bytes
@end smallexample
@item
If the stack usage is (partly) dynamic and not bounded, it's:

@smallexample
  warning: stack usage might be unbounded
@end smallexample
@end itemize

@item -Wno-pedantic-ms-format @r{(MinGW targets only)}
@opindex Wno-pedantic-ms-format
@opindex Wpedantic-ms-format
When used in combination with @option{-Wformat}
and @option{-pedantic} without GNU extensions, this option
disables the warnings about non-ISO @code{printf} / @code{scanf} format
width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets,
which depend on the MS runtime.

@item -Waligned-new
@opindex Waligned-new
@opindex Wno-aligned-new
Warn about a new-expression of a type that requires greater alignment
than the @code{alignof(std::max_align_t)} but uses an allocation
function without an explicit alignment parameter. This option is
enabled by @option{-Wall}.

Normally this only warns about global allocation functions, but
@option{-Waligned-new=all} also warns about class member allocation
functions.

@item -Wplacement-new
@itemx -Wplacement-new=@var{n}
@opindex Wplacement-new
@opindex Wno-placement-new
Warn about placement new expressions with undefined behavior, such as
constructing an object in a buffer that is smaller than the type of
the object.  For example, the placement new expression below is diagnosed
because it attempts to construct an array of 64 integers in a buffer only
64 bytes large.
@smallexample
char buf [64];
new (buf) int[64];
@end smallexample
This warning is enabled by default.

@table @gcctabopt
@item -Wplacement-new=1
This is the default warning level of @option{-Wplacement-new}.  At this
level the warning is not issued for some strictly undefined constructs that
GCC allows as extensions for compatibility with legacy code.  For example,
the following @code{new} expression is not diagnosed at this level even
though it has undefined behavior according to the C++ standard because
it writes past the end of the one-element array.
@smallexample
struct S @{ int n, a[1]; @};
S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
new (s->a)int [32]();
@end smallexample

@item -Wplacement-new=2
At this level, in addition to diagnosing all the same constructs as at level
1, a diagnostic is also issued for placement new expressions that construct
an object in the last member of structure whose type is an array of a single
element and whose size is less than the size of the object being constructed.
While the previous example would be diagnosed, the following construct makes
use of the flexible member array extension to avoid the warning at level 2.
@smallexample
struct S @{ int n, a[]; @};
S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
new (s->a)int [32]();
@end smallexample

@end table

@item -Wpointer-arith
@opindex Wpointer-arith
@opindex Wno-pointer-arith
Warn about anything that depends on the ``size of'' a function type or
of @code{void}.  GNU C assigns these types a size of 1, for
convenience in calculations with @code{void *} pointers and pointers
to functions.  In C++, warn also when an arithmetic operation involves
@code{NULL}.  This warning is also enabled by @option{-Wpedantic}.

@item -Wpointer-compare
@opindex Wpointer-compare
@opindex Wno-pointer-compare
Warn if a pointer is compared with a zero character constant.  This usually
means that the pointer was meant to be dereferenced.  For example:

@smallexample
const char *p = foo ();
if (p == '\0')
  return 42;
@end smallexample

Note that the code above is invalid in C++11.

This warning is enabled by default.

@item -Wtype-limits
@opindex Wtype-limits
@opindex Wno-type-limits
Warn if a comparison is always true or always false due to the limited
range of the data type, but do not warn for constant expressions.  For
example, warn if an unsigned variable is compared against zero with
@code{<} or @code{>=}.  This warning is also enabled by
@option{-Wextra}.

@include cppwarnopts.texi

@item -Wbad-function-cast @r{(C and Objective-C only)}
@opindex Wbad-function-cast
@opindex Wno-bad-function-cast
Warn when a function call is cast to a non-matching type.
For example, warn if a call to a function returning an integer type 
is cast to a pointer type.

@item -Wc90-c99-compat @r{(C and Objective-C only)}
@opindex Wc90-c99-compat
@opindex Wno-c90-c99-compat
Warn about features not present in ISO C90, but present in ISO C99.
For instance, warn about use of variable length arrays, @code{long long}
type, @code{bool} type, compound literals, designated initializers, and so
on.  This option is independent of the standards mode.  Warnings are disabled
in the expression that follows @code{__extension__}.

@item -Wc99-c11-compat @r{(C and Objective-C only)}
@opindex Wc99-c11-compat
@opindex Wno-c99-c11-compat
Warn about features not present in ISO C99, but present in ISO C11.
For instance, warn about use of anonymous structures and unions,
@code{_Atomic} type qualifier, @code{_Thread_local} storage-class specifier,
@code{_Alignas} specifier, @code{Alignof} operator, @code{_Generic} keyword,
and so on.  This option is independent of the standards mode.  Warnings are
disabled in the expression that follows @code{__extension__}.

@item -Wc++-compat @r{(C and Objective-C only)}
@opindex Wc++-compat
Warn about ISO C constructs that are outside of the common subset of
ISO C and ISO C++, e.g.@: request for implicit conversion from
@code{void *} to a pointer to non-@code{void} type.

@item -Wc++11-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++11-compat
Warn about C++ constructs whose meaning differs between ISO C++ 1998
and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
enabled by @option{-Wall}.

@item -Wc++14-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++14-compat
Warn about C++ constructs whose meaning differs between ISO C++ 2011
and ISO C++ 2014.  This warning is enabled by @option{-Wall}.

@item -Wc++17-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++17-compat
Warn about C++ constructs whose meaning differs between ISO C++ 2014
and ISO C++ 2017.  This warning is enabled by @option{-Wall}.

@item -Wcast-qual
@opindex Wcast-qual
@opindex Wno-cast-qual
Warn whenever a pointer is cast so as to remove a type qualifier from
the target type.  For example, warn if a @code{const char *} is cast
to an ordinary @code{char *}.

Also warn when making a cast that introduces a type qualifier in an
unsafe way.  For example, casting @code{char **} to @code{const char **}
is unsafe, as in this example:

@smallexample
  /* p is char ** value.  */
  const char **q = (const char **) p;
  /* Assignment of readonly string to const char * is OK.  */
  *q = "string";
  /* Now char** pointer points to read-only memory.  */
  **p = 'b';
@end smallexample

@item -Wcast-align
@opindex Wcast-align
@opindex Wno-cast-align
Warn whenever a pointer is cast such that the required alignment of the
target is increased.  For example, warn if a @code{char *} is cast to
an @code{int *} on machines where integers can only be accessed at
two- or four-byte boundaries.

@item -Wcast-align=strict
@opindex Wcast-align=strict
Warn whenever a pointer is cast such that the required alignment of the
target is increased.  For example, warn if a @code{char *} is cast to
an @code{int *} regardless of the target machine.

@item -Wcast-function-type
@opindex Wcast-function-type
@opindex Wno-cast-function-type
Warn when a function pointer is cast to an incompatible function pointer.
In a cast involving function types with a variable argument list only
the types of initial arguments that are provided are considered.
Any parameter of pointer-type matches any other pointer-type.  Any benign
differences in integral types are ignored, like @code{int} vs. @code{long}
on ILP32 targets.  Likewise type qualifiers are ignored.  The function
type @code{void (*) (void)} is special and matches everything, which can
be used to suppress this warning.
In a cast involving pointer to member types this warning warns whenever
the type cast is changing the pointer to member type.
This warning is enabled by @option{-Wextra}.

@item -Wwrite-strings
@opindex Wwrite-strings
@opindex Wno-write-strings
When compiling C, give string constants the type @code{const
char[@var{length}]} so that copying the address of one into a
non-@code{const} @code{char *} pointer produces a warning.  These
warnings help you find at compile time code that can try to write
into a string constant, but only if you have been very careful about
using @code{const} in declarations and prototypes.  Otherwise, it is
just a nuisance. This is why we did not make @option{-Wall} request
these warnings.

When compiling C++, warn about the deprecated conversion from string
literals to @code{char *}.  This warning is enabled by default for C++
programs.

@item -Wcatch-value
@itemx -Wcatch-value=@var{n} @r{(C++ and Objective-C++ only)}
@opindex Wcatch-value
@opindex Wno-catch-value
Warn about catch handlers that do not catch via reference.
With @option{-Wcatch-value=1} (or @option{-Wcatch-value} for short)
warn about polymorphic class types that are caught by value.
With @option{-Wcatch-value=2} warn about all class types that are caught
by value. With @option{-Wcatch-value=3} warn about all types that are
not caught by reference. @option{-Wcatch-value} is enabled by @option{-Wall}.

@item -Wclobbered
@opindex Wclobbered
@opindex Wno-clobbered
Warn for variables that might be changed by @code{longjmp} or
@code{vfork}.  This warning is also enabled by @option{-Wextra}.

@item -Wconditionally-supported @r{(C++ and Objective-C++ only)}
@opindex Wconditionally-supported
@opindex Wno-conditionally-supported
Warn for conditionally-supported (C++11 [intro.defs]) constructs.

@item -Wconversion
@opindex Wconversion
@opindex Wno-conversion
Warn for implicit conversions that may alter a value. This includes
conversions between real and integer, like @code{abs (x)} when
@code{x} is @code{double}; conversions between signed and unsigned,
like @code{unsigned ui = -1}; and conversions to smaller types, like
@code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
changed by the conversion like in @code{abs (2.0)}.  Warnings about
conversions between signed and unsigned integers can be disabled by
using @option{-Wno-sign-conversion}.

For C++, also warn for confusing overload resolution for user-defined
conversions; and conversions that never use a type conversion
operator: conversions to @code{void}, the same type, a base class or a
reference to them. Warnings about conversions between signed and
unsigned integers are disabled by default in C++ unless
@option{-Wsign-conversion} is explicitly enabled.

@item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
@opindex Wconversion-null
@opindex Wno-conversion-null
Do not warn for conversions between @code{NULL} and non-pointer
types. @option{-Wconversion-null} is enabled by default.

@item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
@opindex Wzero-as-null-pointer-constant
@opindex Wno-zero-as-null-pointer-constant
Warn when a literal @samp{0} is used as null pointer constant.  This can
be useful to facilitate the conversion to @code{nullptr} in C++11.

@item -Wsubobject-linkage @r{(C++ and Objective-C++ only)}
@opindex Wsubobject-linkage
@opindex Wno-subobject-linkage
Warn if a class type has a base or a field whose type uses the anonymous
namespace or depends on a type with no linkage.  If a type A depends on
a type B with no or internal linkage, defining it in multiple
translation units would be an ODR violation because the meaning of B
is different in each translation unit.  If A only appears in a single
translation unit, the best way to silence the warning is to give it
internal linkage by putting it in an anonymous namespace as well.  The
compiler doesn't give this warning for types defined in the main .C
file, as those are unlikely to have multiple definitions.
@option{-Wsubobject-linkage} is enabled by default.

@item -Wdangling-else
@opindex Wdangling-else
@opindex Wno-dangling-else
Warn about constructions where there may be confusion to which
@code{if} statement an @code{else} branch belongs.  Here is an example of
such a case:

@smallexample
@group
@{
  if (a)
    if (b)
      foo ();
  else
    bar ();
@}
@end group
@end smallexample

In C/C++, every @code{else} branch belongs to the innermost possible
@code{if} statement, which in this example is @code{if (b)}.  This is
often not what the programmer expected, as illustrated in the above
example by indentation the programmer chose.  When there is the
potential for this confusion, GCC issues a warning when this flag
is specified.  To eliminate the warning, add explicit braces around
the innermost @code{if} statement so there is no way the @code{else}
can belong to the enclosing @code{if}.  The resulting code
looks like this:

@smallexample
@group
@{
  if (a)
    @{
      if (b)
        foo ();
      else
        bar ();
    @}
@}
@end group
@end smallexample

This warning is enabled by @option{-Wparentheses}.

@item -Wdate-time
@opindex Wdate-time
@opindex Wno-date-time
Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
are encountered as they might prevent bit-wise-identical reproducible
compilations.

@item -Wdelete-incomplete @r{(C++ and Objective-C++ only)}
@opindex Wdelete-incomplete
@opindex Wno-delete-incomplete
Warn when deleting a pointer to incomplete type, which may cause
undefined behavior at runtime.  This warning is enabled by default.

@item -Wuseless-cast @r{(C++ and Objective-C++ only)}
@opindex Wuseless-cast
@opindex Wno-useless-cast
Warn when an expression is casted to its own type.

@item -Wempty-body
@opindex Wempty-body
@opindex Wno-empty-body
Warn if an empty body occurs in an @code{if}, @code{else} or @code{do
while} statement.  This warning is also enabled by @option{-Wextra}.

@item -Wenum-compare
@opindex Wenum-compare
@opindex Wno-enum-compare
Warn about a comparison between values of different enumerated types.
In C++ enumerated type mismatches in conditional expressions are also
diagnosed and the warning is enabled by default.  In C this warning is 
enabled by @option{-Wall}.

@item -Wextra-semi @r{(C++, Objective-C++ only)}
@opindex Wextra-semi
@opindex Wno-extra-semi
Warn about redundant semicolon after in-class function definition.

@item -Wjump-misses-init @r{(C, Objective-C only)}
@opindex Wjump-misses-init
@opindex Wno-jump-misses-init
Warn if a @code{goto} statement or a @code{switch} statement jumps
forward across the initialization of a variable, or jumps backward to a
label after the variable has been initialized.  This only warns about
variables that are initialized when they are declared.  This warning is
only supported for C and Objective-C; in C++ this sort of branch is an
error in any case.

@option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
can be disabled with the @option{-Wno-jump-misses-init} option.

@item -Wsign-compare
@opindex Wsign-compare
@opindex Wno-sign-compare
@cindex warning for comparison of signed and unsigned values
@cindex comparison of signed and unsigned values, warning
@cindex signed and unsigned values, comparison warning
Warn when a comparison between signed and unsigned values could produce
an incorrect result when the signed value is converted to unsigned.
In C++, this warning is also enabled by @option{-Wall}.  In C, it is
also enabled by @option{-Wextra}.

@item -Wsign-conversion
@opindex Wsign-conversion
@opindex Wno-sign-conversion
Warn for implicit conversions that may change the sign of an integer
value, like assigning a signed integer expression to an unsigned
integer variable. An explicit cast silences the warning. In C, this
option is enabled also by @option{-Wconversion}.

@item -Wfloat-conversion
@opindex Wfloat-conversion
@opindex Wno-float-conversion
Warn for implicit conversions that reduce the precision of a real value.
This includes conversions from real to integer, and from higher precision
real to lower precision real values.  This option is also enabled by
@option{-Wconversion}.

@item -Wno-scalar-storage-order
@opindex -Wno-scalar-storage-order
@opindex -Wscalar-storage-order
Do not warn on suspicious constructs involving reverse scalar storage order.

@item -Wsized-deallocation @r{(C++ and Objective-C++ only)}
@opindex Wsized-deallocation
@opindex Wno-sized-deallocation
Warn about a definition of an unsized deallocation function
@smallexample
void operator delete (void *) noexcept;
void operator delete[] (void *) noexcept;
@end smallexample
without a definition of the corresponding sized deallocation function
@smallexample
void operator delete (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;
@end smallexample
or vice versa.  Enabled by @option{-Wextra} along with
@option{-fsized-deallocation}.

@item -Wsizeof-pointer-div
@opindex Wsizeof-pointer-div
@opindex Wno-sizeof-pointer-div
Warn for suspicious divisions of two sizeof expressions that divide
the pointer size by the element size, which is the usual way to compute
the array size but won't work out correctly with pointers.  This warning
warns e.g.@: about @code{sizeof (ptr) / sizeof (ptr[0])} if @code{ptr} is
not an array, but a pointer.  This warning is enabled by @option{-Wall}.

@item -Wsizeof-pointer-memaccess
@opindex Wsizeof-pointer-memaccess
@opindex Wno-sizeof-pointer-memaccess
Warn for suspicious length parameters to certain string and memory built-in
functions if the argument uses @code{sizeof}.  This warning triggers for
example for @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not
an array, but a pointer, and suggests a possible fix, or about
@code{memcpy (&foo, ptr, sizeof (&foo));}.  @option{-Wsizeof-pointer-memaccess}
also warns about calls to bounded string copy functions like @code{strncat}
or @code{strncpy} that specify as the bound a @code{sizeof} expression of
the source array.  For example, in the following function the call to
@code{strncat} specifies the size of the source string as the bound.  That
is almost certainly a mistake and so the call is diagnosed.
@smallexample
void make_file (const char *name)
@{
  char path[PATH_MAX];
  strncpy (path, name, sizeof path - 1);
  strncat (path, ".text", sizeof ".text");
  @dots{}
@}
@end smallexample

The @option{-Wsizeof-pointer-memaccess} option is enabled by @option{-Wall}.

@item -Wsizeof-array-argument
@opindex Wsizeof-array-argument
@opindex Wno-sizeof-array-argument
Warn when the @code{sizeof} operator is applied to a parameter that is
declared as an array in a function definition.  This warning is enabled by
default for C and C++ programs.

@item -Wmemset-elt-size
@opindex Wmemset-elt-size
@opindex Wno-memset-elt-size
Warn for suspicious calls to the @code{memset} built-in function, if the
first argument references an array, and the third argument is a number
equal to the number of elements, but not equal to the size of the array
in memory.  This indicates that the user has omitted a multiplication by
the element size.  This warning is enabled by @option{-Wall}.

@item -Wmemset-transposed-args
@opindex Wmemset-transposed-args
@opindex Wno-memset-transposed-args
Warn for suspicious calls to the @code{memset} built-in function, if the
second argument is not zero and the third argument is zero.  This warns e.g.@
about @code{memset (buf, sizeof buf, 0)} where most probably
@code{memset (buf, 0, sizeof buf)} was meant instead.  The diagnostics
is only emitted if the third argument is literal zero.  If it is some
expression that is folded to zero, a cast of zero to some type, etc., 
it is far less likely that the user has mistakenly exchanged the arguments 
and no warning is emitted.  This warning is enabled by @option{-Wall}.

@item -Waddress
@opindex Waddress
@opindex Wno-address
Warn about suspicious uses of memory addresses. These include using
the address of a function in a conditional expression, such as
@code{void func(void); if (func)}, and comparisons against the memory
address of a string literal, such as @code{if (x == "abc")}.  Such
uses typically indicate a programmer error: the address of a function
always evaluates to true, so their use in a conditional usually
indicate that the programmer forgot the parentheses in a function
call; and comparisons against string literals result in unspecified
behavior and are not portable in C, so they usually indicate that the
programmer intended to use @code{strcmp}.  This warning is enabled by
@option{-Wall}.

@item -Wlogical-op
@opindex Wlogical-op
@opindex Wno-logical-op
Warn about suspicious uses of logical operators in expressions.
This includes using logical operators in contexts where a
bit-wise operator is likely to be expected.  Also warns when
the operands of a logical operator are the same:
@smallexample
extern int a;
if (a < 0 && a < 0) @{ @dots{} @}
@end smallexample

@item -Wlogical-not-parentheses
@opindex Wlogical-not-parentheses
@opindex Wno-logical-not-parentheses
Warn about logical not used on the left hand side operand of a comparison.
This option does not warn if the right operand is considered to be a boolean
expression.  Its purpose is to detect suspicious code like the following:
@smallexample
int a;
@dots{}
if (!a > 1) @{ @dots{} @}
@end smallexample

It is possible to suppress the warning by wrapping the LHS into
parentheses:
@smallexample
if ((!a) > 1) @{ @dots{} @}
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Waggregate-return
@opindex Waggregate-return
@opindex Wno-aggregate-return
Warn if any functions that return structures or unions are defined or
called.  (In languages where you can return an array, this also elicits
a warning.)

@item -Wno-aggressive-loop-optimizations
@opindex Wno-aggressive-loop-optimizations
@opindex Waggressive-loop-optimizations
Warn if in a loop with constant number of iterations the compiler detects
undefined behavior in some statement during one or more of the iterations.

@item -Wno-attributes
@opindex Wno-attributes
@opindex Wattributes
Do not warn if an unexpected @code{__attribute__} is used, such as
unrecognized attributes, function attributes applied to variables,
etc.  This does not stop errors for incorrect use of supported
attributes.

@item -Wno-builtin-declaration-mismatch
@opindex Wno-builtin-declaration-mismatch
@opindex Wbuiltin-declaration-mismatch
Warn if a built-in function is declared with the wrong signature or 
as non-function.
This warning is enabled by default.

@item -Wno-builtin-macro-redefined
@opindex Wno-builtin-macro-redefined
@opindex Wbuiltin-macro-redefined
Do not warn if certain built-in macros are redefined.  This suppresses
warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
@code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.

@item -Wstrict-prototypes @r{(C and Objective-C only)}
@opindex Wstrict-prototypes
@opindex Wno-strict-prototypes
Warn if a function is declared or defined without specifying the
argument types.  (An old-style function definition is permitted without
a warning if preceded by a declaration that specifies the argument
types.)

@item -Wold-style-declaration @r{(C and Objective-C only)}
@opindex Wold-style-declaration
@opindex Wno-old-style-declaration
Warn for obsolescent usages, according to the C Standard, in a
declaration. For example, warn if storage-class specifiers like
@code{static} are not the first things in a declaration.  This warning
is also enabled by @option{-Wextra}.

@item -Wold-style-definition @r{(C and Objective-C only)}
@opindex Wold-style-definition
@opindex Wno-old-style-definition
Warn if an old-style function definition is used.  A warning is given
even if there is a previous prototype.

@item -Wmissing-parameter-type @r{(C and Objective-C only)}
@opindex Wmissing-parameter-type
@opindex Wno-missing-parameter-type
A function parameter is declared without a type specifier in K&R-style
functions:

@smallexample
void foo(bar) @{ @}
@end smallexample

This warning is also enabled by @option{-Wextra}.

@item -Wmissing-prototypes @r{(C and Objective-C only)}
@opindex Wmissing-prototypes
@opindex Wno-missing-prototypes
Warn if a global function is defined without a previous prototype
declaration.  This warning is issued even if the definition itself
provides a prototype.  Use this option to detect global functions
that do not have a matching prototype declaration in a header file.
This option is not valid for C++ because all function declarations
provide prototypes and a non-matching declaration declares an
overload rather than conflict with an earlier declaration.
Use @option{-Wmissing-declarations} to detect missing declarations in C++.

@item -Wmissing-declarations
@opindex Wmissing-declarations
@opindex Wno-missing-declarations
Warn if a global function is defined without a previous declaration.
Do so even if the definition itself provides a prototype.
Use this option to detect global functions that are not declared in
header files.  In C, no warnings are issued for functions with previous
non-prototype declarations; use @option{-Wmissing-prototypes} to detect
missing prototypes.  In C++, no warnings are issued for function templates,
or for inline functions, or for functions in anonymous namespaces.

@item -Wmissing-field-initializers
@opindex Wmissing-field-initializers
@opindex Wno-missing-field-initializers
@opindex W
@opindex Wextra
@opindex Wno-extra
Warn if a structure's initializer has some fields missing.  For
example, the following code causes such a warning, because
@code{x.h} is implicitly zero:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ 3, 4 @};
@end smallexample

This option does not warn about designated initializers, so the following
modification does not trigger a warning:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ .f = 3, .g = 4 @};
@end smallexample

In C this option does not warn about the universal zero initializer
@samp{@{ 0 @}}:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ 0 @};
@end smallexample

Likewise, in C++ this option does not warn about the empty @{ @}
initializer, for example:

@smallexample
struct s @{ int f, g, h; @};
s x = @{ @};
@end smallexample

This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.

@item -Wno-multichar
@opindex Wno-multichar
@opindex Wmultichar
Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
Usually they indicate a typo in the user's code, as they have
implementation-defined values, and should not be used in portable code.

@item -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]}
@opindex Wnormalized=
@opindex Wnormalized
@opindex Wno-normalized
@cindex NFC
@cindex NFKC
@cindex character set, input normalization
In ISO C and ISO C++, two identifiers are different if they are
different sequences of characters.  However, sometimes when characters
outside the basic ASCII character set are used, you can have two
different character sequences that look the same.  To avoid confusion,
the ISO 10646 standard sets out some @dfn{normalization rules} which
when applied ensure that two sequences that look the same are turned into
the same sequence.  GCC can warn you if you are using identifiers that
have not been normalized; this option controls that warning.

There are four levels of warning supported by GCC@.  The default is
@option{-Wnormalized=nfc}, which warns about any identifier that is
not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
recommended form for most uses.  It is equivalent to
@option{-Wnormalized}.

Unfortunately, there are some characters allowed in identifiers by
ISO C and ISO C++ that, when turned into NFC, are not allowed in 
identifiers.  That is, there's no way to use these symbols in portable
ISO C or C++ and have all your identifiers in NFC@.
@option{-Wnormalized=id} suppresses the warning for these characters.
It is hoped that future versions of the standards involved will correct
this, which is why this option is not the default.

You can switch the warning off for all characters by writing
@option{-Wnormalized=none} or @option{-Wno-normalized}.  You should
only do this if you are using some other normalization scheme (like
``D''), because otherwise you can easily create bugs that are
literally impossible to see.

Some characters in ISO 10646 have distinct meanings but look identical
in some fonts or display methodologies, especially once formatting has
been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
LETTER N'', displays just like a regular @code{n} that has been
placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
normalization scheme to convert all these into a standard form as
well, and GCC warns if your code is not in NFKC if you use
@option{-Wnormalized=nfkc}.  This warning is comparable to warning
about every identifier that contains the letter O because it might be
confused with the digit 0, and so is not the default, but may be
useful as a local coding convention if the programming environment 
cannot be fixed to display these characters distinctly.

@item -Wno-deprecated
@opindex Wno-deprecated
@opindex Wdeprecated
Do not warn about usage of deprecated features.  @xref{Deprecated Features}.

@item -Wno-deprecated-declarations
@opindex Wno-deprecated-declarations
@opindex Wdeprecated-declarations
Do not warn about uses of functions (@pxref{Function Attributes}),
variables (@pxref{Variable Attributes}), and types (@pxref{Type
Attributes}) marked as deprecated by using the @code{deprecated}
attribute.

@item -Wno-overflow
@opindex Wno-overflow
@opindex Woverflow
Do not warn about compile-time overflow in constant expressions.

@item -Wno-odr
@opindex Wno-odr
@opindex Wodr
Warn about One Definition Rule violations during link-time optimization.
Requires @option{-flto-odr-type-merging} to be enabled.  Enabled by default.

@item -Wopenmp-simd
@opindex Wopenm-simd
Warn if the vectorizer cost model overrides the OpenMP
simd directive set by user.  The @option{-fsimd-cost-model=unlimited}
option can be used to relax the cost model.

@item -Woverride-init @r{(C and Objective-C only)}
@opindex Woverride-init
@opindex Wno-override-init
@opindex W
@opindex Wextra
@opindex Wno-extra
Warn if an initialized field without side effects is overridden when
using designated initializers (@pxref{Designated Inits, , Designated
Initializers}).

This warning is included in @option{-Wextra}.  To get other
@option{-Wextra} warnings without this one, use @option{-Wextra
-Wno-override-init}.

@item -Woverride-init-side-effects @r{(C and Objective-C only)}
@opindex Woverride-init-side-effects
@opindex Wno-override-init-side-effects
Warn if an initialized field with side effects is overridden when
using designated initializers (@pxref{Designated Inits, , Designated
Initializers}).  This warning is enabled by default.

@item -Wpacked
@opindex Wpacked
@opindex Wno-packed
Warn if a structure is given the packed attribute, but the packed
attribute has no effect on the layout or size of the structure.
Such structures may be mis-aligned for little benefit.  For
instance, in this code, the variable @code{f.x} in @code{struct bar}
is misaligned even though @code{struct bar} does not itself
have the packed attribute:

@smallexample
@group
struct foo @{
  int x;
  char a, b, c, d;
@} __attribute__((packed));
struct bar @{
  char z;
  struct foo f;
@};
@end group
@end smallexample

@item -Wpacked-bitfield-compat
@opindex Wpacked-bitfield-compat
@opindex Wno-packed-bitfield-compat
The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
the change can lead to differences in the structure layout.  GCC
informs you when the offset of such a field has changed in GCC 4.4.
For example there is no longer a 4-bit padding between field @code{a}
and @code{b} in this structure:

@smallexample
struct foo
@{
  char a:4;
  char b:8;
@} __attribute__ ((packed));
@end smallexample

This warning is enabled by default.  Use
@option{-Wno-packed-bitfield-compat} to disable this warning.

@item -Wpacked-not-aligned @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wpacked-not-aligned
@opindex Wno-packed-not-aligned
Warn if a structure field with explicitly specified alignment in a
packed struct or union is misaligned.  For example, a warning will
be issued on @code{struct S}, like, @code{warning: alignment 1 of
'struct S' is less than 8}, in this code:

@smallexample
@group
struct __attribute__ ((aligned (8))) S8 @{ char a[8]; @};
struct __attribute__ ((packed)) S @{
  struct S8 s8;
@};
@end group
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wpadded
@opindex Wpadded
@opindex Wno-padded
Warn if padding is included in a structure, either to align an element
of the structure or to align the whole structure.  Sometimes when this
happens it is possible to rearrange the fields of the structure to
reduce the padding and so make the structure smaller.

@item -Wredundant-decls
@opindex Wredundant-decls
@opindex Wno-redundant-decls
Warn if anything is declared more than once in the same scope, even in
cases where multiple declaration is valid and changes nothing.

@item -Wno-restrict
@opindex Wrestrict
@opindex Wno-restrict
Warn when an object referenced by a @code{restrict}-qualified parameter
(or, in C++, a @code{__restrict}-qualified parameter) is aliased by another
argument, or when copies between such objects overlap.  For example,
the call to the @code{strcpy} function below attempts to truncate the string
by replacing its initial characters with the last four.  However, because
the call writes the terminating NUL into @code{a[4]}, the copies overlap and
the call is diagnosed.

@smallexample
void foo (void)
@{
  char a[] = "abcd1234";
  strcpy (a, a + 4);
  @dots{}
@}
@end smallexample
The @option{-Wrestrict} option detects some instances of simple overlap
even without optimization but works best at @option{-O2} and above.  It
is included in @option{-Wall}.

@item -Wnested-externs @r{(C and Objective-C only)}
@opindex Wnested-externs
@opindex Wno-nested-externs
Warn if an @code{extern} declaration is encountered within a function.

@item -Wno-inherited-variadic-ctor
@opindex Winherited-variadic-ctor
@opindex Wno-inherited-variadic-ctor
Suppress warnings about use of C++11 inheriting constructors when the
base class inherited from has a C variadic constructor; the warning is
on by default because the ellipsis is not inherited.

@item -Winline
@opindex Winline
@opindex Wno-inline
Warn if a function that is declared as inline cannot be inlined.
Even with this option, the compiler does not warn about failures to
inline functions declared in system headers.

The compiler uses a variety of heuristics to determine whether or not
to inline a function.  For example, the compiler takes into account
the size of the function being inlined and the amount of inlining
that has already been done in the current function.  Therefore,
seemingly insignificant changes in the source program can cause the
warnings produced by @option{-Winline} to appear or disappear.

@item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
@opindex Wno-invalid-offsetof
@opindex Winvalid-offsetof
Suppress warnings from applying the @code{offsetof} macro to a non-POD
type.  According to the 2014 ISO C++ standard, applying @code{offsetof}
to a non-standard-layout type is undefined.  In existing C++ implementations,
however, @code{offsetof} typically gives meaningful results.
This flag is for users who are aware that they are
writing nonportable code and who have deliberately chosen to ignore the
warning about it.

The restrictions on @code{offsetof} may be relaxed in a future version
of the C++ standard.

@item -Wint-in-bool-context
@opindex Wint-in-bool-context
@opindex Wno-int-in-bool-context
Warn for suspicious use of integer values where boolean values are expected,
such as conditional expressions (?:) using non-boolean integer constants in
boolean context, like @code{if (a <= b ? 2 : 3)}.  Or left shifting of signed
integers in boolean context, like @code{for (a = 0; 1 << a; a++);}.  Likewise
for all kinds of multiplications regardless of the data type.
This warning is enabled by @option{-Wall}.

@item -Wno-int-to-pointer-cast
@opindex Wno-int-to-pointer-cast
@opindex Wint-to-pointer-cast
Suppress warnings from casts to pointer type of an integer of a
different size. In C++, casting to a pointer type of smaller size is
an error. @option{Wint-to-pointer-cast} is enabled by default.


@item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
@opindex Wno-pointer-to-int-cast
@opindex Wpointer-to-int-cast
Suppress warnings from casts from a pointer to an integer type of a
different size.

@item -Winvalid-pch
@opindex Winvalid-pch
@opindex Wno-invalid-pch
Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
the search path but cannot be used.

@item -Wlong-long
@opindex Wlong-long
@opindex Wno-long-long
Warn if @code{long long} type is used.  This is enabled by either
@option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
modes.  To inhibit the warning messages, use @option{-Wno-long-long}.

@item -Wvariadic-macros
@opindex Wvariadic-macros
@opindex Wno-variadic-macros
Warn if variadic macros are used in ISO C90 mode, or if the GNU
alternate syntax is used in ISO C99 mode.  This is enabled by either
@option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
messages, use @option{-Wno-variadic-macros}.

@item -Wvarargs
@opindex Wvarargs
@opindex Wno-varargs
Warn upon questionable usage of the macros used to handle variable
arguments like @code{va_start}.  This is default.  To inhibit the
warning messages, use @option{-Wno-varargs}.

@item -Wvector-operation-performance
@opindex Wvector-operation-performance
@opindex Wno-vector-operation-performance
Warn if vector operation is not implemented via SIMD capabilities of the
architecture.  Mainly useful for the performance tuning.
Vector operation can be implemented @code{piecewise}, which means that the
scalar operation is performed on every vector element; 
@code{in parallel}, which means that the vector operation is implemented
using scalars of wider type, which normally is more performance efficient;
and @code{as a single scalar}, which means that vector fits into a
scalar type.

@item -Wno-virtual-move-assign
@opindex Wvirtual-move-assign
@opindex Wno-virtual-move-assign
Suppress warnings about inheriting from a virtual base with a
non-trivial C++11 move assignment operator.  This is dangerous because
if the virtual base is reachable along more than one path, it is
moved multiple times, which can mean both objects end up in the
moved-from state.  If the move assignment operator is written to avoid
moving from a moved-from object, this warning can be disabled.

@item -Wvla
@opindex Wvla
@opindex Wno-vla
Warn if a variable-length array is used in the code.
@option{-Wno-vla} prevents the @option{-Wpedantic} warning of
the variable-length array.

@item -Wvla-larger-than=@var{n}
If this option is used, the compiler will warn on uses of
variable-length arrays where the size is either unbounded, or bounded
by an argument that can be larger than @var{n} bytes.  This is similar
to how @option{-Walloca-larger-than=@var{n}} works, but with
variable-length arrays.

Note that GCC may optimize small variable-length arrays of a known
value into plain arrays, so this warning may not get triggered for
such arrays.

This warning is not enabled by @option{-Wall}, and is only active when
@option{-ftree-vrp} is active (default for @option{-O2} and above).

See also @option{-Walloca-larger-than=@var{n}}.

@item -Wvolatile-register-var
@opindex Wvolatile-register-var
@opindex Wno-volatile-register-var
Warn if a register variable is declared volatile.  The volatile
modifier does not inhibit all optimizations that may eliminate reads
and/or writes to register variables.  This warning is enabled by
@option{-Wall}.

@item -Wdisabled-optimization
@opindex Wdisabled-optimization
@opindex Wno-disabled-optimization
Warn if a requested optimization pass is disabled.  This warning does
not generally indicate that there is anything wrong with your code; it
merely indicates that GCC's optimizers are unable to handle the code
effectively.  Often, the problem is that your code is too big or too
complex; GCC refuses to optimize programs when the optimization
itself is likely to take inordinate amounts of time.

@item -Wpointer-sign @r{(C and Objective-C only)}
@opindex Wpointer-sign
@opindex Wno-pointer-sign
Warn for pointer argument passing or assignment with different signedness.
This option is only supported for C and Objective-C@.  It is implied by
@option{-Wall} and by @option{-Wpedantic}, which can be disabled with
@option{-Wno-pointer-sign}.

@item -Wstack-protector
@opindex Wstack-protector
@opindex Wno-stack-protector
This option is only active when @option{-fstack-protector} is active.  It
warns about functions that are not protected against stack smashing.

@item -Woverlength-strings
@opindex Woverlength-strings
@opindex Wno-overlength-strings
Warn about string constants that are longer than the ``minimum
maximum'' length specified in the C standard.  Modern compilers
generally allow string constants that are much longer than the
standard's minimum limit, but very portable programs should avoid
using longer strings.

The limit applies @emph{after} string constant concatenation, and does
not count the trailing NUL@.  In C90, the limit was 509 characters; in
C99, it was raised to 4095.  C++98 does not specify a normative
minimum maximum, so we do not diagnose overlength strings in C++@.

This option is implied by @option{-Wpedantic}, and can be disabled with
@option{-Wno-overlength-strings}.

@item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
@opindex Wunsuffixed-float-constants

Issue a warning for any floating constant that does not have
a suffix.  When used together with @option{-Wsystem-headers} it
warns about such constants in system header files.  This can be useful
when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
from the decimal floating-point extension to C99.

@item -Wno-designated-init @r{(C and Objective-C only)}
Suppress warnings when a positional initializer is used to initialize
a structure that has been marked with the @code{designated_init}
attribute.

@item -Whsa
Issue a warning when HSAIL cannot be emitted for the compiled function or
OpenMP construct.

@end table

@node Debugging Options
@section Options for Debugging Your Program
@cindex options, debugging
@cindex debugging information options

To tell GCC to emit extra information for use by a debugger, in almost 
all cases you need only to add @option{-g} to your other options.

GCC allows you to use @option{-g} with
@option{-O}.  The shortcuts taken by optimized code may occasionally
be surprising: some variables you declared may not exist
at all; flow of control may briefly move where you did not expect it;
some statements may not be executed because they compute constant
results or their values are already at hand; some statements may
execute in different places because they have been moved out of loops.
Nevertheless it is possible to debug optimized output.  This makes
it reasonable to use the optimizer for programs that might have bugs.

If you are not using some other optimization option, consider
using @option{-Og} (@pxref{Optimize Options}) with @option{-g}.  
With no @option{-O} option at all, some compiler passes that collect
information useful for debugging do not run at all, so that
@option{-Og} may result in a better debugging experience.

@table @gcctabopt
@item -g
@opindex g
Produce debugging information in the operating system's native format
(stabs, COFF, XCOFF, or DWARF)@.  GDB can work with this debugging
information.

On most systems that use stabs format, @option{-g} enables use of extra
debugging information that only GDB can use; this extra information
makes debugging work better in GDB but probably makes other debuggers
crash or
refuse to read the program.  If you want to control for certain whether
to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).

@item -ggdb
@opindex ggdb
Produce debugging information for use by GDB@.  This means to use the
most expressive format available (DWARF, stabs, or the native format
if neither of those are supported), including GDB extensions if at all
possible.

@item -gdwarf
@itemx -gdwarf-@var{version}
@opindex gdwarf
Produce debugging information in DWARF format (if that is supported).
The value of @var{version} may be either 2, 3, 4 or 5; the default version
for most targets is 4.  DWARF Version 5 is only experimental.

Note that with DWARF Version 2, some ports require and always
use some non-conflicting DWARF 3 extensions in the unwind tables.

Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
for maximum benefit.

GCC no longer supports DWARF Version 1, which is substantially
different than Version 2 and later.  For historical reasons, some
other DWARF-related options such as
@option{-fno-dwarf2-cfi-asm}) retain a reference to DWARF Version 2
in their names, but apply to all currently-supported versions of DWARF.

@item -gstabs
@opindex gstabs
Produce debugging information in stabs format (if that is supported),
without GDB extensions.  This is the format used by DBX on most BSD
systems.  On MIPS, Alpha and System V Release 4 systems this option
produces stabs debugging output that is not understood by DBX@.
On System V Release 4 systems this option requires the GNU assembler.

@item -gstabs+
@opindex gstabs+
Produce debugging information in stabs format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB)@.  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.

@item -gxcoff
@opindex gxcoff
Produce debugging information in XCOFF format (if that is supported).
This is the format used by the DBX debugger on IBM RS/6000 systems.

@item -gxcoff+
@opindex gxcoff+
Produce debugging information in XCOFF format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB)@.  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program, and may cause assemblers other than the GNU
assembler (GAS) to fail with an error.

@item -gvms
@opindex gvms
Produce debugging information in Alpha/VMS debug format (if that is
supported).  This is the format used by DEBUG on Alpha/VMS systems.

@item -g@var{level}
@itemx -ggdb@var{level}
@itemx -gstabs@var{level}
@itemx -gxcoff@var{level}
@itemx -gvms@var{level}
Request debugging information and also use @var{level} to specify how
much information.  The default level is 2.

Level 0 produces no debug information at all.  Thus, @option{-g0} negates
@option{-g}.

Level 1 produces minimal information, enough for making backtraces in
parts of the program that you don't plan to debug.  This includes
descriptions of functions and external variables, and line number
tables, but no information about local variables.

Level 3 includes extra information, such as all the macro definitions
present in the program.  Some debuggers support macro expansion when
you use @option{-g3}.

@option{-gdwarf} does not accept a concatenated debug level, to avoid
confusion with @option{-gdwarf-@var{level}}.
Instead use an additional @option{-g@var{level}} option to change the
debug level for DWARF.

@item -feliminate-unused-debug-symbols
@opindex feliminate-unused-debug-symbols
Produce debugging information in stabs format (if that is supported),
for only symbols that are actually used.

@item -femit-class-debug-always
@opindex femit-class-debug-always
Instead of emitting debugging information for a C++ class in only one
object file, emit it in all object files using the class.  This option
should be used only with debuggers that are unable to handle the way GCC
normally emits debugging information for classes because using this
option increases the size of debugging information by as much as a
factor of two.

@item -fno-merge-debug-strings
@opindex fmerge-debug-strings
@opindex fno-merge-debug-strings
Direct the linker to not merge together strings in the debugging
information that are identical in different object files.  Merging is
not supported by all assemblers or linkers.  Merging decreases the size
of the debug information in the output file at the cost of increasing
link processing time.  Merging is enabled by default.

@item -fdebug-prefix-map=@var{old}=@var{new}
@opindex fdebug-prefix-map
When compiling files residing in directory @file{@var{old}}, record
debugging information describing them as if the files resided in
directory @file{@var{new}} instead.  This can be used to replace a
build-time path with an install-time path in the debug info.  It can
also be used to change an absolute path to a relative path by using
@file{.} for @var{new}.  This can give more reproducible builds, which
are location independent, but may require an extra command to tell GDB
where to find the source files. See also @option{-ffile-prefix-map}.

@item -fvar-tracking
@opindex fvar-tracking
Run variable tracking pass.  It computes where variables are stored at each
position in code.  Better debugging information is then generated
(if the debugging information format supports this information).

It is enabled by default when compiling with optimization (@option{-Os},
@option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
the debug info format supports it.

@item -fvar-tracking-assignments
@opindex fvar-tracking-assignments
@opindex fno-var-tracking-assignments
Annotate assignments to user variables early in the compilation and
attempt to carry the annotations over throughout the compilation all the
way to the end, in an attempt to improve debug information while
optimizing.  Use of @option{-gdwarf-4} is recommended along with it.

It can be enabled even if var-tracking is disabled, in which case
annotations are created and maintained, but discarded at the end.
By default, this flag is enabled together with @option{-fvar-tracking},
except when selective scheduling is enabled.

@item -gsplit-dwarf
@opindex gsplit-dwarf
Separate as much DWARF debugging information as possible into a
separate output file with the extension @file{.dwo}.  This option allows
the build system to avoid linking files with debug information.  To
be useful, this option requires a debugger capable of reading @file{.dwo}
files.

@item -gpubnames
@opindex gpubnames
Generate DWARF @code{.debug_pubnames} and @code{.debug_pubtypes} sections.

@item -ggnu-pubnames
@opindex ggnu-pubnames
Generate @code{.debug_pubnames} and @code{.debug_pubtypes} sections in a format
suitable for conversion into a GDB@ index.  This option is only useful
with a linker that can produce GDB@ index version 7.

@item -fdebug-types-section
@opindex fdebug-types-section
@opindex fno-debug-types-section
When using DWARF Version 4 or higher, type DIEs can be put into
their own @code{.debug_types} section instead of making them part of the
@code{.debug_info} section.  It is more efficient to put them in a separate
comdat sections since the linker can then remove duplicates.
But not all DWARF consumers support @code{.debug_types} sections yet
and on some objects @code{.debug_types} produces larger instead of smaller
debugging information.

@item -grecord-gcc-switches
@itemx -gno-record-gcc-switches
@opindex grecord-gcc-switches
@opindex gno-record-gcc-switches
This switch causes the command-line options used to invoke the
compiler that may affect code generation to be appended to the
DW_AT_producer attribute in DWARF debugging information.  The options
are concatenated with spaces separating them from each other and from
the compiler version.  
It is enabled by default.
See also @option{-frecord-gcc-switches} for another
way of storing compiler options into the object file.  

@item -gstrict-dwarf
@opindex gstrict-dwarf
Disallow using extensions of later DWARF standard version than selected
with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
DWARF extensions from later standard versions is allowed.

@item -gno-strict-dwarf
@opindex gno-strict-dwarf
Allow using extensions of later DWARF standard version than selected with
@option{-gdwarf-@var{version}}.

@item -gas-loc-support
@opindex gas-loc-support
Inform the compiler that the assembler supports @code{.loc} directives.
It may then use them for the assembler to generate DWARF2+ line number
tables.

This is generally desirable, because assembler-generated line-number
tables are a lot more compact than those the compiler can generate
itself.

This option will be enabled by default if, at GCC configure time, the
assembler was found to support such directives.

@item -gno-as-loc-support
@opindex gno-as-loc-support
Force GCC to generate DWARF2+ line number tables internally, if DWARF2+
line number tables are to be generated.

@item gas-locview-support
@opindex gas-locview-support
Inform the compiler that the assembler supports @code{view} assignment
and reset assertion checking in @code{.loc} directives.

This option will be enabled by default if, at GCC configure time, the
assembler was found to support them.

@item gno-as-locview-support
Force GCC to assign view numbers internally, if
@option{-gvariable-location-views} are explicitly requested.

@item -gcolumn-info
@itemx -gno-column-info
@opindex gcolumn-info
@opindex gno-column-info
Emit location column information into DWARF debugging information, rather
than just file and line.
This option is enabled by default.

@item -gstatement-frontiers
@itemx -gno-statement-frontiers
@opindex gstatement-frontiers
@opindex gno-statement-frontiers
This option causes GCC to create markers in the internal representation
at the beginning of statements, and to keep them roughly in place
throughout compilation, using them to guide the output of @code{is_stmt}
markers in the line number table.  This is enabled by default when
compiling with optimization (@option{-Os}, @option{-O}, @option{-O2},
@dots{}), and outputting DWARF 2 debug information at the normal level.

@item -gvariable-location-views
@itemx -gvariable-location-views=incompat5
@itemx -gno-variable-location-views
@opindex gvariable-location-views
@opindex gvariable-location-views=incompat5
@opindex gno-variable-location-views
Augment variable location lists with progressive view numbers implied
from the line number table.  This enables debug information consumers to
inspect state at certain points of the program, even if no instructions
associated with the corresponding source locations are present at that
point.  If the assembler lacks support for view numbers in line number
tables, this will cause the compiler to emit the line number table,
which generally makes them somewhat less compact.  The augmented line
number tables and location lists are fully backward-compatible, so they
can be consumed by debug information consumers that are not aware of
these augmentations, but they won't derive any benefit from them either.

This is enabled by default when outputting DWARF 2 debug information at
the normal level, as long as there is assembler support,
@option{-fvar-tracking-assignments} is enabled and
@option{-gstrict-dwarf} is not.  When assembler support is not
available, this may still be enabled, but it will force GCC to output
internal line number tables, and if
@option{-ginternal-reset-location-views} is not enabled, that will most
certainly lead to silently mismatching location views.

There is a proposed representation for view numbers that is not backward
compatible with the location list format introduced in DWARF 5, that can
be enabled with @option{-gvariable-location-views=incompat5}.  This
option may be removed in the future, is only provided as a reference
implementation of the proposed representation.  Debug information
consumers are not expected to support this extended format, and they
would be rendered unable to decode location lists using it.

@item -ginternal-reset-location-views
@itemx -gnointernal-reset-location-views
@opindex ginternal-reset-location-views
@opindex gno-internal-reset-location-views
Attempt to determine location views that can be omitted from location
view lists.  This requires the compiler to have very accurate insn
length estimates, which isn't always the case, and it may cause
incorrect view lists to be generated silently when using an assembler
that does not support location view lists.  The GNU assembler will flag
any such error as a @code{view number mismatch}.  This is only enabled
on ports that define a reliable estimation function.

@item -ginline-points
@itemx -gno-inline-points
@opindex ginline-points
@opindex gno-inline-points
Generate extended debug information for inlined functions.  Location
view tracking markers are inserted at inlined entry points, so that
address and view numbers can be computed and output in debug
information.  This can be enabled independently of location views, in
which case the view numbers won't be output, but it can only be enabled
along with statement frontiers, and it is only enabled by default if
location views are enabled.

@item -gz@r{[}=@var{type}@r{]}
@opindex gz
Produce compressed debug sections in DWARF format, if that is supported.
If @var{type} is not given, the default type depends on the capabilities
of the assembler and linker used.  @var{type} may be one of
@samp{none} (don't compress debug sections), @samp{zlib} (use zlib
compression in ELF gABI format), or @samp{zlib-gnu} (use zlib
compression in traditional GNU format).  If the linker doesn't support
writing compressed debug sections, the option is rejected.  Otherwise,
if the assembler does not support them, @option{-gz} is silently ignored
when producing object files.

@item -femit-struct-debug-baseonly
@opindex femit-struct-debug-baseonly
Emit debug information for struct-like types
only when the base name of the compilation source file
matches the base name of file in which the struct is defined.

This option substantially reduces the size of debugging information,
but at significant potential loss in type information to the debugger.
See @option{-femit-struct-debug-reduced} for a less aggressive option.
See @option{-femit-struct-debug-detailed} for more detailed control.

This option works only with DWARF debug output.

@item -femit-struct-debug-reduced
@opindex femit-struct-debug-reduced
Emit debug information for struct-like types
only when the base name of the compilation source file
matches the base name of file in which the type is defined,
unless the struct is a template or defined in a system header.

This option significantly reduces the size of debugging information,
with some potential loss in type information to the debugger.
See @option{-femit-struct-debug-baseonly} for a more aggressive option.
See @option{-femit-struct-debug-detailed} for more detailed control.

This option works only with DWARF debug output.

@item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
@opindex femit-struct-debug-detailed
Specify the struct-like types
for which the compiler generates debug information.
The intent is to reduce duplicate struct debug information
between different object files within the same program.

This option is a detailed version of
@option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
which serves for most needs.

A specification has the syntax@*
[@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})

The optional first word limits the specification to
structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
A struct type is used directly when it is the type of a variable, member.
Indirect uses arise through pointers to structs.
That is, when use of an incomplete struct is valid, the use is indirect.
An example is
@samp{struct one direct; struct two * indirect;}.

The optional second word limits the specification to
ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
Generic structs are a bit complicated to explain.
For C++, these are non-explicit specializations of template classes,
or non-template classes within the above.
Other programming languages have generics,
but @option{-femit-struct-debug-detailed} does not yet implement them.

The third word specifies the source files for those
structs for which the compiler should emit debug information.
The values @samp{none} and @samp{any} have the normal meaning.
The value @samp{base} means that
the base of name of the file in which the type declaration appears
must match the base of the name of the main compilation file.
In practice, this means that when compiling @file{foo.c}, debug information
is generated for types declared in that file and @file{foo.h},
but not other header files.
The value @samp{sys} means those types satisfying @samp{base}
or declared in system or compiler headers.

You may need to experiment to determine the best settings for your application.

The default is @option{-femit-struct-debug-detailed=all}.

This option works only with DWARF debug output.

@item -fno-dwarf2-cfi-asm
@opindex fdwarf2-cfi-asm
@opindex fno-dwarf2-cfi-asm
Emit DWARF unwind info as compiler generated @code{.eh_frame} section
instead of using GAS @code{.cfi_*} directives.

@item -fno-eliminate-unused-debug-types
@opindex feliminate-unused-debug-types
@opindex fno-eliminate-unused-debug-types
Normally, when producing DWARF output, GCC avoids producing debug symbol 
output for types that are nowhere used in the source file being compiled.
Sometimes it is useful to have GCC emit debugging
information for all types declared in a compilation
unit, regardless of whether or not they are actually used
in that compilation unit, for example 
if, in the debugger, you want to cast a value to a type that is
not actually used in your program (but is declared).  More often,
however, this results in a significant amount of wasted space.
@end table

@node Optimize Options
@section Options That Control Optimization
@cindex optimize options
@cindex options, optimization

These options control various sorts of optimizations.

Without any optimization option, the compiler's goal is to reduce the
cost of compilation and to make debugging produce the expected
results.  Statements are independent: if you stop the program with a
breakpoint between statements, you can then assign a new value to any
variable or change the program counter to any other statement in the
function and get exactly the results you expect from the source
code.

Turning on optimization flags makes the compiler attempt to improve
the performance and/or code size at the expense of compilation time
and possibly the ability to debug the program.

The compiler performs optimization based on the knowledge it has of the
program.  Compiling multiple files at once to a single output file mode allows
the compiler to use information gained from all of the files when compiling
each of them.

Not all optimizations are controlled directly by a flag.  Only
optimizations that have a flag are listed in this section.

Most optimizations are only enabled if an @option{-O} level is set on
the command line.  Otherwise they are disabled, even if individual
optimization flags are specified.

Depending on the target and how GCC was configured, a slightly different
set of optimizations may be enabled at each @option{-O} level than
those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
to find out the exact set of optimizations that are enabled at each level.
@xref{Overall Options}, for examples.

@table @gcctabopt
@item -O
@itemx -O1
@opindex O
@opindex O1
Optimize.  Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.

With @option{-O}, the compiler tries to reduce code size and execution
time, without performing any optimizations that take a great deal of
compilation time.

@option{-O} turns on the following optimization flags:
@gccoptlist{
-fauto-inc-dec @gol
-fbranch-count-reg @gol
-fcombine-stack-adjustments @gol
-fcompare-elim @gol
-fcprop-registers @gol
-fdce @gol
-fdefer-pop @gol
-fdelayed-branch @gol
-fdse @gol
-fforward-propagate @gol
-fguess-branch-probability @gol
-fif-conversion2 @gol
-fif-conversion @gol
-finline-functions-called-once @gol
-fipa-pure-const @gol
-fipa-profile @gol
-fipa-reference @gol
-fmerge-constants @gol
-fmove-loop-invariants @gol
-fomit-frame-pointer @gol
-freorder-blocks @gol
-fshrink-wrap @gol
-fshrink-wrap-separate @gol
-fsplit-wide-types @gol
-fssa-backprop @gol
-fssa-phiopt @gol
-ftree-bit-ccp @gol
-ftree-ccp @gol
-ftree-ch @gol
-ftree-coalesce-vars @gol
-ftree-copy-prop @gol
-ftree-dce @gol
-ftree-dominator-opts @gol
-ftree-dse @gol
-ftree-forwprop @gol
-ftree-fre @gol
-ftree-phiprop @gol
-ftree-sink @gol
-ftree-slsr @gol
-ftree-sra @gol
-ftree-pta @gol
-ftree-ter @gol
-funit-at-a-time}

@item -O2
@opindex O2
Optimize even more.  GCC performs nearly all supported optimizations
that do not involve a space-speed tradeoff.
As compared to @option{-O}, this option increases both compilation time
and the performance of the generated code.

@option{-O2} turns on all optimization flags specified by @option{-O}.  It
also turns on the following optimization flags:
@gccoptlist{-fthread-jumps @gol
-falign-functions  -falign-jumps @gol
-falign-loops  -falign-labels @gol
-fcaller-saves @gol
-fcrossjumping @gol
-fcse-follow-jumps  -fcse-skip-blocks @gol
-fdelete-null-pointer-checks @gol
-fdevirtualize -fdevirtualize-speculatively @gol
-fexpensive-optimizations @gol
-fgcse  -fgcse-lm  @gol
-fhoist-adjacent-loads @gol
-finline-small-functions @gol
-findirect-inlining @gol
-fipa-cp @gol
-fipa-bit-cp @gol
-fipa-vrp @gol
-fipa-sra @gol
-fipa-icf @gol
-fisolate-erroneous-paths-dereference @gol
-flra-remat @gol
-foptimize-sibling-calls @gol
-foptimize-strlen @gol
-fpartial-inlining @gol
-fpeephole2 @gol
-freorder-blocks-algorithm=stc @gol
-freorder-blocks-and-partition -freorder-functions @gol
-frerun-cse-after-loop  @gol
-fsched-interblock  -fsched-spec @gol
-fschedule-insns  -fschedule-insns2 @gol
-fstore-merging @gol
-fstrict-aliasing @gol
-ftree-builtin-call-dce @gol
-ftree-switch-conversion -ftree-tail-merge @gol
-fcode-hoisting @gol
-ftree-pre @gol
-ftree-vrp @gol
-fipa-ra}

Please note the warning under @option{-fgcse} about
invoking @option{-O2} on programs that use computed gotos.

@item -O3
@opindex O3
Optimize yet more.  @option{-O3} turns on all optimizations specified
by @option{-O2} and also turns on the following optimization flags:
@gccoptlist{-finline-functions @gol
-funswitch-loops @gol
-fpredictive-commoning @gol
-fgcse-after-reload @gol
-ftree-loop-vectorize @gol
-ftree-loop-distribution @gol
-ftree-loop-distribute-patterns @gol
-floop-interchange @gol
-floop-unroll-and-jam @gol
-fsplit-paths @gol
-ftree-slp-vectorize @gol
-fvect-cost-model @gol
-ftree-partial-pre @gol
-fpeel-loops @gol
-fipa-cp-clone}

@item -O0
@opindex O0
Reduce compilation time and make debugging produce the expected
results.  This is the default.

@item -Os
@opindex Os
Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
do not typically increase code size.  It also performs further
optimizations designed to reduce code size.

@option{-Os} disables the following optimization flags:
@gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
-falign-labels  -freorder-blocks  -freorder-blocks-algorithm=stc @gol
-freorder-blocks-and-partition  -fprefetch-loop-arrays}

@item -Ofast
@opindex Ofast
Disregard strict standards compliance.  @option{-Ofast} enables all
@option{-O3} optimizations.  It also enables optimizations that are not
valid for all standard-compliant programs.
It turns on @option{-ffast-math} and the Fortran-specific
@option{-fstack-arrays}, unless @option{-fmax-stack-var-size} is
specified, and @option{-fno-protect-parens}.

@item -Og
@opindex Og
Optimize debugging experience.  @option{-Og} enables optimizations
that do not interfere with debugging. It should be the optimization
level of choice for the standard edit-compile-debug cycle, offering
a reasonable level of optimization while maintaining fast compilation
and a good debugging experience.
@end table

If you use multiple @option{-O} options, with or without level numbers,
the last such option is the one that is effective.

Options of the form @option{-f@var{flag}} specify machine-independent
flags.  Most flags have both positive and negative forms; the negative
form of @option{-ffoo} is @option{-fno-foo}.  In the table
below, only one of the forms is listed---the one you typically 
use.  You can figure out the other form by either removing @samp{no-}
or adding it.

The following options control specific optimizations.  They are either
activated by @option{-O} options or are related to ones that are.  You
can use the following flags in the rare cases when ``fine-tuning'' of
optimizations to be performed is desired.

@table @gcctabopt
@item -fno-defer-pop
@opindex fno-defer-pop
Always pop the arguments to each function call as soon as that function
returns.  For machines that must pop arguments after a function call,
the compiler normally lets arguments accumulate on the stack for several
function calls and pops them all at once.

Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fforward-propagate
@opindex fforward-propagate
Perform a forward propagation pass on RTL@.  The pass tries to combine two
instructions and checks if the result can be simplified.  If loop unrolling
is active, two passes are performed and the second is scheduled after
loop unrolling.

This option is enabled by default at optimization levels @option{-O},
@option{-O2}, @option{-O3}, @option{-Os}.

@item -ffp-contract=@var{style}
@opindex ffp-contract
@option{-ffp-contract=off} disables floating-point expression contraction.
@option{-ffp-contract=fast} enables floating-point expression contraction
such as forming of fused multiply-add operations if the target has
native support for them.
@option{-ffp-contract=on} enables floating-point expression contraction
if allowed by the language standard.  This is currently not implemented
and treated equal to @option{-ffp-contract=off}.

The default is @option{-ffp-contract=fast}.

@item -fomit-frame-pointer
@opindex fomit-frame-pointer
Omit the frame pointer in functions that don't need one.  This avoids the
instructions to save, set up and restore the frame pointer; on many targets
it also makes an extra register available.

On some targets this flag has no effect because the standard calling sequence
always uses a frame pointer, so it cannot be omitted.

Note that @option{-fno-omit-frame-pointer} doesn't guarantee the frame pointer
is used in all functions.  Several targets always omit the frame pointer in
leaf functions.

Enabled by default at @option{-O} and higher.

@item -foptimize-sibling-calls
@opindex foptimize-sibling-calls
Optimize sibling and tail recursive calls.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -foptimize-strlen
@opindex foptimize-strlen
Optimize various standard C string functions (e.g. @code{strlen},
@code{strchr} or @code{strcpy}) and
their @code{_FORTIFY_SOURCE} counterparts into faster alternatives.

Enabled at levels @option{-O2}, @option{-O3}.

@item -fno-inline
@opindex fno-inline
Do not expand any functions inline apart from those marked with
the @code{always_inline} attribute.  This is the default when not
optimizing.

Single functions can be exempted from inlining by marking them
with the @code{noinline} attribute.

@item -finline-small-functions
@opindex finline-small-functions
Integrate functions into their callers when their body is smaller than expected
function call code (so overall size of program gets smaller).  The compiler
heuristically decides which functions are simple enough to be worth integrating
in this way.  This inlining applies to all functions, even those not declared
inline.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -findirect-inlining
@opindex findirect-inlining
Inline also indirect calls that are discovered to be known at compile
time thanks to previous inlining.  This option has any effect only
when inlining itself is turned on by the @option{-finline-functions}
or @option{-finline-small-functions} options.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -finline-functions
@opindex finline-functions
Consider all functions for inlining, even if they are not declared inline.
The compiler heuristically decides which functions are worth integrating
in this way.

If all calls to a given function are integrated, and the function is
declared @code{static}, then the function is normally not output as
assembler code in its own right.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -finline-functions-called-once
@opindex finline-functions-called-once
Consider all @code{static} functions called once for inlining into their
caller even if they are not marked @code{inline}.  If a call to a given
function is integrated, then the function is not output as assembler code
in its own right.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.

@item -fearly-inlining
@opindex fearly-inlining
Inline functions marked by @code{always_inline} and functions whose body seems
smaller than the function call overhead early before doing
@option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
makes profiling significantly cheaper and usually inlining faster on programs
having large chains of nested wrapper functions.

Enabled by default.

@item -fipa-sra
@opindex fipa-sra
Perform interprocedural scalar replacement of aggregates, removal of
unused parameters and replacement of parameters passed by reference
by parameters passed by value.

Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.

@item -finline-limit=@var{n}
@opindex finline-limit
By default, GCC limits the size of functions that can be inlined.  This flag
allows coarse control of this limit.  @var{n} is the size of functions that
can be inlined in number of pseudo instructions.

Inlining is actually controlled by a number of parameters, which may be
specified individually by using @option{--param @var{name}=@var{value}}.
The @option{-finline-limit=@var{n}} option sets some of these parameters
as follows:

@table @gcctabopt
@item max-inline-insns-single
is set to @var{n}/2.
@item max-inline-insns-auto
is set to @var{n}/2.
@end table

See below for a documentation of the individual
parameters controlling inlining and for the defaults of these parameters.

@emph{Note:} there may be no value to @option{-finline-limit} that results
in default behavior.

@emph{Note:} pseudo instruction represents, in this particular context, an
abstract measurement of function's size.  In no way does it represent a count
of assembly instructions and as such its exact meaning might change from one
release to an another.

@item -fno-keep-inline-dllexport
@opindex fno-keep-inline-dllexport
This is a more fine-grained version of @option{-fkeep-inline-functions},
which applies only to functions that are declared using the @code{dllexport}
attribute or declspec.  @xref{Function Attributes,,Declaring Attributes of
Functions}.

@item -fkeep-inline-functions
@opindex fkeep-inline-functions
In C, emit @code{static} functions that are declared @code{inline}
into the object file, even if the function has been inlined into all
of its callers.  This switch does not affect functions using the
@code{extern inline} extension in GNU C90@.  In C++, emit any and all
inline functions into the object file.

@item -fkeep-static-functions
@opindex fkeep-static-functions
Emit @code{static} functions into the object file, even if the function
is never used.

@item -fkeep-static-consts
@opindex fkeep-static-consts
Emit variables declared @code{static const} when optimization isn't turned
on, even if the variables aren't referenced.

GCC enables this option by default.  If you want to force the compiler to
check if a variable is referenced, regardless of whether or not
optimization is turned on, use the @option{-fno-keep-static-consts} option.

@item -fmerge-constants
@opindex fmerge-constants
Attempt to merge identical constants (string constants and floating-point
constants) across compilation units.

This option is the default for optimized compilation if the assembler and
linker support it.  Use @option{-fno-merge-constants} to inhibit this
behavior.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fmerge-all-constants
@opindex fmerge-all-constants
Attempt to merge identical constants and identical variables.

This option implies @option{-fmerge-constants}.  In addition to
@option{-fmerge-constants} this considers e.g.@: even constant initialized
arrays or initialized constant variables with integral or floating-point
types.  Languages like C or C++ require each variable, including multiple
instances of the same variable in recursive calls, to have distinct locations,
so using this option results in non-conforming
behavior.

@item -fmodulo-sched
@opindex fmodulo-sched
Perform swing modulo scheduling immediately before the first scheduling
pass.  This pass looks at innermost loops and reorders their
instructions by overlapping different iterations.

@item -fmodulo-sched-allow-regmoves
@opindex fmodulo-sched-allow-regmoves
Perform more aggressive SMS-based modulo scheduling with register moves
allowed.  By setting this flag certain anti-dependences edges are
deleted, which triggers the generation of reg-moves based on the
life-range analysis.  This option is effective only with
@option{-fmodulo-sched} enabled.

@item -fno-branch-count-reg
@opindex fno-branch-count-reg
Avoid running a pass scanning for opportunities to use ``decrement and
branch'' instructions on a count register instead of generating sequences
of instructions that decrement a register, compare it against zero, and
then branch based upon the result.  This option is only meaningful on
architectures that support such instructions, which include x86, PowerPC,
IA-64 and S/390.  Note that the @option{-fno-branch-count-reg} option
doesn't remove the decrement and branch instructions from the generated
instruction stream introduced by other optimization passes.

Enabled by default at @option{-O1} and higher.

The default is @option{-fbranch-count-reg}.

@item -fno-function-cse
@opindex fno-function-cse
Do not put function addresses in registers; make each instruction that
calls a constant function contain the function's address explicitly.

This option results in less efficient code, but some strange hacks
that alter the assembler output may be confused by the optimizations
performed when this option is not used.

The default is @option{-ffunction-cse}

@item -fno-zero-initialized-in-bss
@opindex fno-zero-initialized-in-bss
If the target supports a BSS section, GCC by default puts variables that
are initialized to zero into BSS@.  This can save space in the resulting
code.

This option turns off this behavior because some programs explicitly
rely on variables going to the data section---e.g., so that the
resulting executable can find the beginning of that section and/or make
assumptions based on that.

The default is @option{-fzero-initialized-in-bss}.

@item -fthread-jumps
@opindex fthread-jumps
Perform optimizations that check to see if a jump branches to a
location where another comparison subsumed by the first is found.  If
so, the first branch is redirected to either the destination of the
second branch or a point immediately following it, depending on whether
the condition is known to be true or false.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fsplit-wide-types
@opindex fsplit-wide-types
When using a type that occupies multiple registers, such as @code{long
long} on a 32-bit system, split the registers apart and allocate them
independently.  This normally generates better code for those types,
but may make debugging more difficult.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
@option{-Os}.

@item -fcse-follow-jumps
@opindex fcse-follow-jumps
In common subexpression elimination (CSE), scan through jump instructions
when the target of the jump is not reached by any other path.  For
example, when CSE encounters an @code{if} statement with an
@code{else} clause, CSE follows the jump when the condition
tested is false.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcse-skip-blocks
@opindex fcse-skip-blocks
This is similar to @option{-fcse-follow-jumps}, but causes CSE to
follow jumps that conditionally skip over blocks.  When CSE
encounters a simple @code{if} statement with no else clause,
@option{-fcse-skip-blocks} causes CSE to follow the jump around the
body of the @code{if}.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -frerun-cse-after-loop
@opindex frerun-cse-after-loop
Re-run common subexpression elimination after loop optimizations are
performed.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fgcse
@opindex fgcse
Perform a global common subexpression elimination pass.
This pass also performs global constant and copy propagation.

@emph{Note:} When compiling a program using computed gotos, a GCC
extension, you may get better run-time performance if you disable
the global common subexpression elimination pass by adding
@option{-fno-gcse} to the command line.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fgcse-lm
@opindex fgcse-lm
When @option{-fgcse-lm} is enabled, global common subexpression elimination
attempts to move loads that are only killed by stores into themselves.  This
allows a loop containing a load/store sequence to be changed to a load outside
the loop, and a copy/store within the loop.

Enabled by default when @option{-fgcse} is enabled.

@item -fgcse-sm
@opindex fgcse-sm
When @option{-fgcse-sm} is enabled, a store motion pass is run after
global common subexpression elimination.  This pass attempts to move
stores out of loops.  When used in conjunction with @option{-fgcse-lm},
loops containing a load/store sequence can be changed to a load before
the loop and a store after the loop.

Not enabled at any optimization level.

@item -fgcse-las
@opindex fgcse-las
When @option{-fgcse-las} is enabled, the global common subexpression
elimination pass eliminates redundant loads that come after stores to the
same memory location (both partial and full redundancies).

Not enabled at any optimization level.

@item -fgcse-after-reload
@opindex fgcse-after-reload
When @option{-fgcse-after-reload} is enabled, a redundant load elimination
pass is performed after reload.  The purpose of this pass is to clean up
redundant spilling.

@item -faggressive-loop-optimizations
@opindex faggressive-loop-optimizations
This option tells the loop optimizer to use language constraints to
derive bounds for the number of iterations of a loop.  This assumes that
loop code does not invoke undefined behavior by for example causing signed
integer overflows or out-of-bound array accesses.  The bounds for the
number of iterations of a loop are used to guide loop unrolling and peeling
and loop exit test optimizations.
This option is enabled by default.

@item -funconstrained-commons
@opindex funconstrained-commons
This option tells the compiler that variables declared in common blocks
(e.g. Fortran) may later be overridden with longer trailing arrays. This
prevents certain optimizations that depend on knowing the array bounds.

@item -fcrossjumping
@opindex fcrossjumping
Perform cross-jumping transformation.
This transformation unifies equivalent code and saves code size.  The
resulting code may or may not perform better than without cross-jumping.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fauto-inc-dec
@opindex fauto-inc-dec
Combine increments or decrements of addresses with memory accesses.
This pass is always skipped on architectures that do not have
instructions to support this.  Enabled by default at @option{-O} and
higher on architectures that support this.

@item -fdce
@opindex fdce
Perform dead code elimination (DCE) on RTL@.
Enabled by default at @option{-O} and higher.

@item -fdse
@opindex fdse
Perform dead store elimination (DSE) on RTL@.
Enabled by default at @option{-O} and higher.

@item -fif-conversion
@opindex fif-conversion
Attempt to transform conditional jumps into branch-less equivalents.  This
includes use of conditional moves, min, max, set flags and abs instructions, and
some tricks doable by standard arithmetics.  The use of conditional execution
on chips where it is available is controlled by @option{-fif-conversion2}.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fif-conversion2
@opindex fif-conversion2
Use conditional execution (where available) to transform conditional jumps into
branch-less equivalents.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fdeclone-ctor-dtor
@opindex fdeclone-ctor-dtor
The C++ ABI requires multiple entry points for constructors and
destructors: one for a base subobject, one for a complete object, and
one for a virtual destructor that calls operator delete afterwards.
For a hierarchy with virtual bases, the base and complete variants are
clones, which means two copies of the function.  With this option, the
base and complete variants are changed to be thunks that call a common
implementation.

Enabled by @option{-Os}.

@item -fdelete-null-pointer-checks
@opindex fdelete-null-pointer-checks
Assume that programs cannot safely dereference null pointers, and that
no code or data element resides at address zero.
This option enables simple constant
folding optimizations at all optimization levels.  In addition, other
optimization passes in GCC use this flag to control global dataflow
analyses that eliminate useless checks for null pointers; these assume
that a memory access to address zero always results in a trap, so
that if a pointer is checked after it has already been dereferenced,
it cannot be null.

Note however that in some environments this assumption is not true.
Use @option{-fno-delete-null-pointer-checks} to disable this optimization
for programs that depend on that behavior.

This option is enabled by default on most targets.  On Nios II ELF, it
defaults to off.  On AVR, CR16, and MSP430, this option is completely disabled.

Passes that use the dataflow information
are enabled independently at different optimization levels.

@item -fdevirtualize
@opindex fdevirtualize
Attempt to convert calls to virtual functions to direct calls.  This
is done both within a procedure and interprocedurally as part of
indirect inlining (@option{-findirect-inlining}) and interprocedural constant
propagation (@option{-fipa-cp}).
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fdevirtualize-speculatively
@opindex fdevirtualize-speculatively
Attempt to convert calls to virtual functions to speculative direct calls.
Based on the analysis of the type inheritance graph, determine for a given call
the set of likely targets. If the set is small, preferably of size 1, change
the call into a conditional deciding between direct and indirect calls.  The
speculative calls enable more optimizations, such as inlining.  When they seem
useless after further optimization, they are converted back into original form.

@item -fdevirtualize-at-ltrans
@opindex fdevirtualize-at-ltrans
Stream extra information needed for aggressive devirtualization when running
the link-time optimizer in local transformation mode.  
This option enables more devirtualization but
significantly increases the size of streamed data. For this reason it is
disabled by default.

@item -fexpensive-optimizations
@opindex fexpensive-optimizations
Perform a number of minor optimizations that are relatively expensive.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -free
@opindex free
Attempt to remove redundant extension instructions.  This is especially
helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
registers after writing to their lower 32-bit half.

Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
@option{-O3}, @option{-Os}.

@item -fno-lifetime-dse
@opindex fno-lifetime-dse
In C++ the value of an object is only affected by changes within its
lifetime: when the constructor begins, the object has an indeterminate
value, and any changes during the lifetime of the object are dead when
the object is destroyed.  Normally dead store elimination will take
advantage of this; if your code relies on the value of the object
storage persisting beyond the lifetime of the object, you can use this
flag to disable this optimization.  To preserve stores before the
constructor starts (e.g. because your operator new clears the object
storage) but still treat the object as dead after the destructor you,
can use @option{-flifetime-dse=1}.  The default behavior can be
explicitly selected with @option{-flifetime-dse=2}.
@option{-flifetime-dse=0} is equivalent to @option{-fno-lifetime-dse}.

@item -flive-range-shrinkage
@opindex flive-range-shrinkage
Attempt to decrease register pressure through register live range
shrinkage.  This is helpful for fast processors with small or moderate
size register sets.

@item -fira-algorithm=@var{algorithm}
@opindex fira-algorithm
Use the specified coloring algorithm for the integrated register
allocator.  The @var{algorithm} argument can be @samp{priority}, which
specifies Chow's priority coloring, or @samp{CB}, which specifies
Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
for all architectures, but for those targets that do support it, it is
the default because it generates better code.

@item -fira-region=@var{region}
@opindex fira-region
Use specified regions for the integrated register allocator.  The
@var{region} argument should be one of the following:

@table @samp

@item all
Use all loops as register allocation regions.
This can give the best results for machines with a small and/or
irregular register set.

@item mixed
Use all loops except for loops with small register pressure 
as the regions.  This value usually gives
the best results in most cases and for most architectures,
and is enabled by default when compiling with optimization for speed
(@option{-O}, @option{-O2}, @dots{}).

@item one
Use all functions as a single region.  
This typically results in the smallest code size, and is enabled by default for
@option{-Os} or @option{-O0}.

@end table

@item -fira-hoist-pressure
@opindex fira-hoist-pressure
Use IRA to evaluate register pressure in the code hoisting pass for
decisions to hoist expressions.  This option usually results in smaller
code, but it can slow the compiler down.

This option is enabled at level @option{-Os} for all targets.

@item -fira-loop-pressure
@opindex fira-loop-pressure
Use IRA to evaluate register pressure in loops for decisions to move
loop invariants.  This option usually results in generation
of faster and smaller code on machines with large register files (>= 32
registers), but it can slow the compiler down.

This option is enabled at level @option{-O3} for some targets.

@item -fno-ira-share-save-slots
@opindex fno-ira-share-save-slots
Disable sharing of stack slots used for saving call-used hard
registers living through a call.  Each hard register gets a
separate stack slot, and as a result function stack frames are
larger.

@item -fno-ira-share-spill-slots
@opindex fno-ira-share-spill-slots
Disable sharing of stack slots allocated for pseudo-registers.  Each
pseudo-register that does not get a hard register gets a separate
stack slot, and as a result function stack frames are larger.

@item -flra-remat
@opindex flra-remat
Enable CFG-sensitive rematerialization in LRA.  Instead of loading
values of spilled pseudos, LRA tries to rematerialize (recalculate)
values if it is profitable.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fdelayed-branch
@opindex fdelayed-branch
If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fschedule-insns
@opindex fschedule-insns
If supported for the target machine, attempt to reorder instructions to
eliminate execution stalls due to required data being unavailable.  This
helps machines that have slow floating point or memory load instructions
by allowing other instructions to be issued until the result of the load
or floating-point instruction is required.

Enabled at levels @option{-O2}, @option{-O3}.

@item -fschedule-insns2
@opindex fschedule-insns2
Similar to @option{-fschedule-insns}, but requests an additional pass of
instruction scheduling after register allocation has been done.  This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fno-sched-interblock
@opindex fno-sched-interblock
Don't schedule instructions across basic blocks.  This is normally
enabled by default when scheduling before register allocation, i.e.@:
with @option{-fschedule-insns} or at @option{-O2} or higher.

@item -fno-sched-spec
@opindex fno-sched-spec
Don't allow speculative motion of non-load instructions.  This is normally
enabled by default when scheduling before register allocation, i.e.@:
with @option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-pressure
@opindex fsched-pressure
Enable register pressure sensitive insn scheduling before register
allocation.  This only makes sense when scheduling before register
allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
@option{-O2} or higher.  Usage of this option can improve the
generated code and decrease its size by preventing register pressure
increase above the number of available hard registers and subsequent
spills in register allocation.

@item -fsched-spec-load
@opindex fsched-spec-load
Allow speculative motion of some load instructions.  This only makes
sense when scheduling before register allocation, i.e.@: with
@option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-spec-load-dangerous
@opindex fsched-spec-load-dangerous
Allow speculative motion of more load instructions.  This only makes
sense when scheduling before register allocation, i.e.@: with
@option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-stalled-insns
@itemx -fsched-stalled-insns=@var{n}
@opindex fsched-stalled-insns
Define how many insns (if any) can be moved prematurely from the queue
of stalled insns into the ready list during the second scheduling pass.
@option{-fno-sched-stalled-insns} means that no insns are moved
prematurely, @option{-fsched-stalled-insns=0} means there is no limit
on how many queued insns can be moved prematurely.
@option{-fsched-stalled-insns} without a value is equivalent to
@option{-fsched-stalled-insns=1}.

@item -fsched-stalled-insns-dep
@itemx -fsched-stalled-insns-dep=@var{n}
@opindex fsched-stalled-insns-dep
Define how many insn groups (cycles) are examined for a dependency
on a stalled insn that is a candidate for premature removal from the queue
of stalled insns.  This has an effect only during the second scheduling pass,
and only if @option{-fsched-stalled-insns} is used.
@option{-fno-sched-stalled-insns-dep} is equivalent to
@option{-fsched-stalled-insns-dep=0}.
@option{-fsched-stalled-insns-dep} without a value is equivalent to
@option{-fsched-stalled-insns-dep=1}.

@item -fsched2-use-superblocks
@opindex fsched2-use-superblocks
When scheduling after register allocation, use superblock scheduling.
This allows motion across basic block boundaries,
resulting in faster schedules.  This option is experimental, as not all machine
descriptions used by GCC model the CPU closely enough to avoid unreliable
results from the algorithm.

This only makes sense when scheduling after register allocation, i.e.@: with
@option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched-group-heuristic
@opindex fsched-group-heuristic
Enable the group heuristic in the scheduler.  This heuristic favors
the instruction that belongs to a schedule group.  This is enabled
by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
or @option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched-critical-path-heuristic
@opindex fsched-critical-path-heuristic
Enable the critical-path heuristic in the scheduler.  This heuristic favors
instructions on the critical path.  This is enabled by default when
scheduling is enabled, i.e.@: with @option{-fschedule-insns}
or @option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched-spec-insn-heuristic
@opindex fsched-spec-insn-heuristic
Enable the speculative instruction heuristic in the scheduler.  This
heuristic favors speculative instructions with greater dependency weakness.
This is enabled by default when scheduling is enabled, i.e.@:
with @option{-fschedule-insns} or @option{-fschedule-insns2}
or at @option{-O2} or higher.

@item -fsched-rank-heuristic
@opindex fsched-rank-heuristic
Enable the rank heuristic in the scheduler.  This heuristic favors
the instruction belonging to a basic block with greater size or frequency.
This is enabled by default when scheduling is enabled, i.e.@:
with @option{-fschedule-insns} or @option{-fschedule-insns2} or
at @option{-O2} or higher.

@item -fsched-last-insn-heuristic
@opindex fsched-last-insn-heuristic
Enable the last-instruction heuristic in the scheduler.  This heuristic
favors the instruction that is less dependent on the last instruction
scheduled.  This is enabled by default when scheduling is enabled,
i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
at @option{-O2} or higher.

@item -fsched-dep-count-heuristic
@opindex fsched-dep-count-heuristic
Enable the dependent-count heuristic in the scheduler.  This heuristic
favors the instruction that has more instructions depending on it.
This is enabled by default when scheduling is enabled, i.e.@:
with @option{-fschedule-insns} or @option{-fschedule-insns2} or
at @option{-O2} or higher.

@item -freschedule-modulo-scheduled-loops
@opindex freschedule-modulo-scheduled-loops
Modulo scheduling is performed before traditional scheduling.  If a loop
is modulo scheduled, later scheduling passes may change its schedule.  
Use this option to control that behavior.

@item -fselective-scheduling
@opindex fselective-scheduling
Schedule instructions using selective scheduling algorithm.  Selective
scheduling runs instead of the first scheduler pass.

@item -fselective-scheduling2
@opindex fselective-scheduling2
Schedule instructions using selective scheduling algorithm.  Selective
scheduling runs instead of the second scheduler pass.

@item -fsel-sched-pipelining
@opindex fsel-sched-pipelining
Enable software pipelining of innermost loops during selective scheduling.
This option has no effect unless one of @option{-fselective-scheduling} or
@option{-fselective-scheduling2} is turned on.

@item -fsel-sched-pipelining-outer-loops
@opindex fsel-sched-pipelining-outer-loops
When pipelining loops during selective scheduling, also pipeline outer loops.
This option has no effect unless @option{-fsel-sched-pipelining} is turned on.

@item -fsemantic-interposition
@opindex fsemantic-interposition
Some object formats, like ELF, allow interposing of symbols by the 
dynamic linker.
This means that for symbols exported from the DSO, the compiler cannot perform
interprocedural propagation, inlining and other optimizations in anticipation
that the function or variable in question may change. While this feature is
useful, for example, to rewrite memory allocation functions by a debugging
implementation, it is expensive in the terms of code quality.
With @option{-fno-semantic-interposition} the compiler assumes that 
if interposition happens for functions the overwriting function will have 
precisely the same semantics (and side effects). 
Similarly if interposition happens
for variables, the constructor of the variable will be the same. The flag
has no effect for functions explicitly declared inline 
(where it is never allowed for interposition to change semantics) 
and for symbols explicitly declared weak.

@item -fshrink-wrap
@opindex fshrink-wrap
Emit function prologues only before parts of the function that need it,
rather than at the top of the function.  This flag is enabled by default at
@option{-O} and higher.

@item -fshrink-wrap-separate
@opindex fshrink-wrap-separate
Shrink-wrap separate parts of the prologue and epilogue separately, so that
those parts are only executed when needed.
This option is on by default, but has no effect unless @option{-fshrink-wrap}
is also turned on and the target supports this.

@item -fcaller-saves
@opindex fcaller-saves
Enable allocation of values to registers that are clobbered by
function calls, by emitting extra instructions to save and restore the
registers around such calls.  Such allocation is done only when it
seems to result in better code.

This option is always enabled by default on certain machines, usually
those which have no call-preserved registers to use instead.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcombine-stack-adjustments
@opindex fcombine-stack-adjustments
Tracks stack adjustments (pushes and pops) and stack memory references
and then tries to find ways to combine them.

Enabled by default at @option{-O1} and higher.

@item -fipa-ra
@opindex fipa-ra
Use caller save registers for allocation if those registers are not used by
any called function.  In that case it is not necessary to save and restore
them around calls.  This is only possible if called functions are part of
same compilation unit as current function and they are compiled before it.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, however the option
is disabled if generated code will be instrumented for profiling
(@option{-p}, or @option{-pg}) or if callee's register usage cannot be known
exactly (this happens on targets that do not expose prologues
and epilogues in RTL).

@item -fconserve-stack
@opindex fconserve-stack
Attempt to minimize stack usage.  The compiler attempts to use less
stack space, even if that makes the program slower.  This option
implies setting the @option{large-stack-frame} parameter to 100
and the @option{large-stack-frame-growth} parameter to 400.

@item -ftree-reassoc
@opindex ftree-reassoc
Perform reassociation on trees.  This flag is enabled by default
at @option{-O} and higher.

@item -fcode-hoisting
@opindex fcode-hoisting
Perform code hoisting.  Code hoisting tries to move the
evaluation of expressions executed on all paths to the function exit
as early as possible.  This is especially useful as a code size
optimization, but it often helps for code speed as well.
This flag is enabled by default at @option{-O2} and higher.

@item -ftree-pre
@opindex ftree-pre
Perform partial redundancy elimination (PRE) on trees.  This flag is
enabled by default at @option{-O2} and @option{-O3}.

@item -ftree-partial-pre
@opindex ftree-partial-pre
Make partial redundancy elimination (PRE) more aggressive.  This flag is
enabled by default at @option{-O3}.

@item -ftree-forwprop
@opindex ftree-forwprop
Perform forward propagation on trees.  This flag is enabled by default
at @option{-O} and higher.

@item -ftree-fre
@opindex ftree-fre
Perform full redundancy elimination (FRE) on trees.  The difference
between FRE and PRE is that FRE only considers expressions
that are computed on all paths leading to the redundant computation.
This analysis is faster than PRE, though it exposes fewer redundancies.
This flag is enabled by default at @option{-O} and higher.

@item -ftree-phiprop
@opindex ftree-phiprop
Perform hoisting of loads from conditional pointers on trees.  This
pass is enabled by default at @option{-O} and higher.

@item -fhoist-adjacent-loads
@opindex fhoist-adjacent-loads
Speculatively hoist loads from both branches of an if-then-else if the
loads are from adjacent locations in the same structure and the target
architecture has a conditional move instruction.  This flag is enabled
by default at @option{-O2} and higher.

@item -ftree-copy-prop
@opindex ftree-copy-prop
Perform copy propagation on trees.  This pass eliminates unnecessary
copy operations.  This flag is enabled by default at @option{-O} and
higher.

@item -fipa-pure-const
@opindex fipa-pure-const
Discover which functions are pure or constant.
Enabled by default at @option{-O} and higher.

@item -fipa-reference
@opindex fipa-reference
Discover which static variables do not escape the
compilation unit.
Enabled by default at @option{-O} and higher.

@item -fipa-pta
@opindex fipa-pta
Perform interprocedural pointer analysis and interprocedural modification
and reference analysis.  This option can cause excessive memory and
compile-time usage on large compilation units.  It is not enabled by
default at any optimization level.

@item -fipa-profile
@opindex fipa-profile
Perform interprocedural profile propagation.  The functions called only from
cold functions are marked as cold. Also functions executed once (such as
@code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold
functions and loop less parts of functions executed once are then optimized for
size.
Enabled by default at @option{-O} and higher.

@item -fipa-cp
@opindex fipa-cp
Perform interprocedural constant propagation.
This optimization analyzes the program to determine when values passed
to functions are constants and then optimizes accordingly.
This optimization can substantially increase performance
if the application has constants passed to functions.
This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.

@item -fipa-cp-clone
@opindex fipa-cp-clone
Perform function cloning to make interprocedural constant propagation stronger.
When enabled, interprocedural constant propagation performs function cloning
when externally visible function can be called with constant arguments.
Because this optimization can create multiple copies of functions,
it may significantly increase code size
(see @option{--param ipcp-unit-growth=@var{value}}).
This flag is enabled by default at @option{-O3}.

@item -fipa-bit-cp
@opindex -fipa-bit-cp
When enabled, perform interprocedural bitwise constant
propagation. This flag is enabled by default at @option{-O2}. It
requires that @option{-fipa-cp} is enabled.

@item -fipa-vrp
@opindex -fipa-vrp
When enabled, perform interprocedural propagation of value
ranges. This flag is enabled by default at @option{-O2}. It requires
that @option{-fipa-cp} is enabled.

@item -fipa-icf
@opindex fipa-icf
Perform Identical Code Folding for functions and read-only variables.
The optimization reduces code size and may disturb unwind stacks by replacing
a function by equivalent one with a different name. The optimization works
more effectively with link-time optimization enabled.

Nevertheless the behavior is similar to Gold Linker ICF optimization, GCC ICF
works on different levels and thus the optimizations are not same - there are
equivalences that are found only by GCC and equivalences found only by Gold.

This flag is enabled by default at @option{-O2} and @option{-Os}.

@item -fisolate-erroneous-paths-dereference
@opindex fisolate-erroneous-paths-dereference
Detect paths that trigger erroneous or undefined behavior due to
dereferencing a null pointer.  Isolate those paths from the main control
flow and turn the statement with erroneous or undefined behavior into a trap.
This flag is enabled by default at @option{-O2} and higher and depends on
@option{-fdelete-null-pointer-checks} also being enabled.

@item -fisolate-erroneous-paths-attribute
@opindex fisolate-erroneous-paths-attribute
Detect paths that trigger erroneous or undefined behavior due to a null value
being used in a way forbidden by a @code{returns_nonnull} or @code{nonnull}
attribute.  Isolate those paths from the main control flow and turn the
statement with erroneous or undefined behavior into a trap.  This is not
currently enabled, but may be enabled by @option{-O2} in the future.

@item -ftree-sink
@opindex ftree-sink
Perform forward store motion on trees.  This flag is
enabled by default at @option{-O} and higher.

@item -ftree-bit-ccp
@opindex ftree-bit-ccp
Perform sparse conditional bit constant propagation on trees and propagate
pointer alignment information.
This pass only operates on local scalar variables and is enabled by default
at @option{-O} and higher.  It requires that @option{-ftree-ccp} is enabled.

@item -ftree-ccp
@opindex ftree-ccp
Perform sparse conditional constant propagation (CCP) on trees.  This
pass only operates on local scalar variables and is enabled by default
at @option{-O} and higher.

@item -fssa-backprop
@opindex fssa-backprop
Propagate information about uses of a value up the definition chain
in order to simplify the definitions.  For example, this pass strips
sign operations if the sign of a value never matters.  The flag is
enabled by default at @option{-O} and higher.

@item -fssa-phiopt
@opindex fssa-phiopt
Perform pattern matching on SSA PHI nodes to optimize conditional
code.  This pass is enabled by default at @option{-O} and higher.

@item -ftree-switch-conversion
@opindex ftree-switch-conversion
Perform conversion of simple initializations in a switch to
initializations from a scalar array.  This flag is enabled by default
at @option{-O2} and higher.

@item -ftree-tail-merge
@opindex ftree-tail-merge
Look for identical code sequences.  When found, replace one with a jump to the
other.  This optimization is known as tail merging or cross jumping.  This flag
is enabled by default at @option{-O2} and higher.  The compilation time
in this pass can
be limited using @option{max-tail-merge-comparisons} parameter and
@option{max-tail-merge-iterations} parameter.

@item -ftree-dce
@opindex ftree-dce
Perform dead code elimination (DCE) on trees.  This flag is enabled by
default at @option{-O} and higher.

@item -ftree-builtin-call-dce
@opindex ftree-builtin-call-dce
Perform conditional dead code elimination (DCE) for calls to built-in functions
that may set @code{errno} but are otherwise free of side effects.  This flag is
enabled by default at @option{-O2} and higher if @option{-Os} is not also
specified.

@item -ftree-dominator-opts
@opindex ftree-dominator-opts
Perform a variety of simple scalar cleanups (constant/copy
propagation, redundancy elimination, range propagation and expression
simplification) based on a dominator tree traversal.  This also
performs jump threading (to reduce jumps to jumps). This flag is
enabled by default at @option{-O} and higher.

@item -ftree-dse
@opindex ftree-dse
Perform dead store elimination (DSE) on trees.  A dead store is a store into
a memory location that is later overwritten by another store without
any intervening loads.  In this case the earlier store can be deleted.  This
flag is enabled by default at @option{-O} and higher.

@item -ftree-ch
@opindex ftree-ch
Perform loop header copying on trees.  This is beneficial since it increases
effectiveness of code motion optimizations.  It also saves one jump.  This flag
is enabled by default at @option{-O} and higher.  It is not enabled
for @option{-Os}, since it usually increases code size.

@item -ftree-loop-optimize
@opindex ftree-loop-optimize
Perform loop optimizations on trees.  This flag is enabled by default
at @option{-O} and higher.

@item -ftree-loop-linear
@itemx -floop-strip-mine
@itemx -floop-block
@opindex ftree-loop-linear
@opindex floop-strip-mine
@opindex floop-block
Perform loop nest optimizations.  Same as
@option{-floop-nest-optimize}.  To use this code transformation, GCC has
to be configured with @option{--with-isl} to enable the Graphite loop
transformation infrastructure.

@item -fgraphite-identity
@opindex fgraphite-identity
Enable the identity transformation for graphite.  For every SCoP we generate
the polyhedral representation and transform it back to gimple.  Using
@option{-fgraphite-identity} we can check the costs or benefits of the
GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
are also performed by the code generator isl, like index splitting and
dead code elimination in loops.

@item -floop-nest-optimize
@opindex floop-nest-optimize
Enable the isl based loop nest optimizer.  This is a generic loop nest
optimizer based on the Pluto optimization algorithms.  It calculates a loop
structure optimized for data-locality and parallelism.  This option
is experimental.

@item -floop-parallelize-all
@opindex floop-parallelize-all
Use the Graphite data dependence analysis to identify loops that can
be parallelized.  Parallelize all the loops that can be analyzed to
not contain loop carried dependences without checking that it is
profitable to parallelize the loops.

@item -ftree-coalesce-vars
@opindex ftree-coalesce-vars
While transforming the program out of the SSA representation, attempt to
reduce copying by coalescing versions of different user-defined
variables, instead of just compiler temporaries.  This may severely
limit the ability to debug an optimized program compiled with
@option{-fno-var-tracking-assignments}.  In the negated form, this flag
prevents SSA coalescing of user variables.  This option is enabled by
default if optimization is enabled, and it does very little otherwise.

@item -ftree-loop-if-convert
@opindex ftree-loop-if-convert
Attempt to transform conditional jumps in the innermost loops to
branch-less equivalents.  The intent is to remove control-flow from
the innermost loops in order to improve the ability of the
vectorization pass to handle these loops.  This is enabled by default
if vectorization is enabled.

@item -ftree-loop-distribution
@opindex ftree-loop-distribution
Perform loop distribution.  This flag can improve cache performance on
big loop bodies and allow further loop optimizations, like
parallelization or vectorization, to take place.  For example, the loop
@smallexample
DO I = 1, N
  A(I) = B(I) + C
  D(I) = E(I) * F
ENDDO
@end smallexample
is transformed to
@smallexample
DO I = 1, N
   A(I) = B(I) + C
ENDDO
DO I = 1, N
   D(I) = E(I) * F
ENDDO
@end smallexample

@item -ftree-loop-distribute-patterns
@opindex ftree-loop-distribute-patterns
Perform loop distribution of patterns that can be code generated with
calls to a library.  This flag is enabled by default at @option{-O3}.

This pass distributes the initialization loops and generates a call to
memset zero.  For example, the loop
@smallexample
DO I = 1, N
  A(I) = 0
  B(I) = A(I) + I
ENDDO
@end smallexample
is transformed to
@smallexample
DO I = 1, N
   A(I) = 0
ENDDO
DO I = 1, N
   B(I) = A(I) + I
ENDDO
@end smallexample
and the initialization loop is transformed into a call to memset zero.

@item -floop-interchange
@opindex floop-interchange
Perform loop interchange outside of graphite.  This flag can improve cache
performance on loop nest and allow further loop optimizations, like
vectorization, to take place.  For example, the loop
@smallexample
for (int i = 0; i < N; i++)
  for (int j = 0; j < N; j++)
    for (int k = 0; k < N; k++)
      c[i][j] = c[i][j] + a[i][k]*b[k][j];
@end smallexample
is transformed to
@smallexample
for (int i = 0; i < N; i++)
  for (int k = 0; k < N; k++)
    for (int j = 0; j < N; j++)
      c[i][j] = c[i][j] + a[i][k]*b[k][j];
@end smallexample
This flag is enabled by default at @option{-O3}.

@item -floop-unroll-and-jam
@opindex floop-unroll-and-jam
Apply unroll and jam transformations on feasible loops.  In a loop
nest this unrolls the outer loop by some factor and fuses the resulting
multiple inner loops.  This flag is enabled by default at @option{-O3}.

@item -ftree-loop-im
@opindex ftree-loop-im
Perform loop invariant motion on trees.  This pass moves only invariants that
are hard to handle at RTL level (function calls, operations that expand to
nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
operands of conditions that are invariant out of the loop, so that we can use
just trivial invariantness analysis in loop unswitching.  The pass also includes
store motion.

@item -ftree-loop-ivcanon
@opindex ftree-loop-ivcanon
Create a canonical counter for number of iterations in loops for which
determining number of iterations requires complicated analysis.  Later
optimizations then may determine the number easily.  Useful especially
in connection with unrolling.

@item -fivopts
@opindex fivopts
Perform induction variable optimizations (strength reduction, induction
variable merging and induction variable elimination) on trees.

@item -ftree-parallelize-loops=n
@opindex ftree-parallelize-loops
Parallelize loops, i.e., split their iteration space to run in n threads.
This is only possible for loops whose iterations are independent
and can be arbitrarily reordered.  The optimization is only
profitable on multiprocessor machines, for loops that are CPU-intensive,
rather than constrained e.g.@: by memory bandwidth.  This option
implies @option{-pthread}, and thus is only supported on targets
that have support for @option{-pthread}.

@item -ftree-pta
@opindex ftree-pta
Perform function-local points-to analysis on trees.  This flag is
enabled by default at @option{-O} and higher.

@item -ftree-sra
@opindex ftree-sra
Perform scalar replacement of aggregates.  This pass replaces structure
references with scalars to prevent committing structures to memory too
early.  This flag is enabled by default at @option{-O} and higher.

@item -fstore-merging
@opindex fstore-merging
Perform merging of narrow stores to consecutive memory addresses.  This pass
merges contiguous stores of immediate values narrower than a word into fewer
wider stores to reduce the number of instructions.  This is enabled by default
at @option{-O2} and higher as well as @option{-Os}.

@item -ftree-ter
@opindex ftree-ter
Perform temporary expression replacement during the SSA->normal phase.  Single
use/single def temporaries are replaced at their use location with their
defining expression.  This results in non-GIMPLE code, but gives the expanders
much more complex trees to work on resulting in better RTL generation.  This is
enabled by default at @option{-O} and higher.

@item -ftree-slsr
@opindex ftree-slsr
Perform straight-line strength reduction on trees.  This recognizes related
expressions involving multiplications and replaces them by less expensive
calculations when possible.  This is enabled by default at @option{-O} and
higher.

@item -ftree-vectorize
@opindex ftree-vectorize
Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
and @option{-ftree-slp-vectorize} if not explicitly specified.

@item -ftree-loop-vectorize
@opindex ftree-loop-vectorize
Perform loop vectorization on trees. This flag is enabled by default at
@option{-O3} and when @option{-ftree-vectorize} is enabled.

@item -ftree-slp-vectorize
@opindex ftree-slp-vectorize
Perform basic block vectorization on trees. This flag is enabled by default at
@option{-O3} and when @option{-ftree-vectorize} is enabled.

@item -fvect-cost-model=@var{model}
@opindex fvect-cost-model
Alter the cost model used for vectorization.  The @var{model} argument
should be one of @samp{unlimited}, @samp{dynamic} or @samp{cheap}.
With the @samp{unlimited} model the vectorized code-path is assumed
to be profitable while with the @samp{dynamic} model a runtime check
guards the vectorized code-path to enable it only for iteration
counts that will likely execute faster than when executing the original
scalar loop.  The @samp{cheap} model disables vectorization of
loops where doing so would be cost prohibitive for example due to
required runtime checks for data dependence or alignment but otherwise
is equal to the @samp{dynamic} model.
The default cost model depends on other optimization flags and is
either @samp{dynamic} or @samp{cheap}.

@item -fsimd-cost-model=@var{model}
@opindex fsimd-cost-model
Alter the cost model used for vectorization of loops marked with the OpenMP
simd directive.  The @var{model} argument should be one of
@samp{unlimited}, @samp{dynamic}, @samp{cheap}.  All values of @var{model}
have the same meaning as described in @option{-fvect-cost-model} and by
default a cost model defined with @option{-fvect-cost-model} is used.

@item -ftree-vrp
@opindex ftree-vrp
Perform Value Range Propagation on trees.  This is similar to the
constant propagation pass, but instead of values, ranges of values are
propagated.  This allows the optimizers to remove unnecessary range
checks like array bound checks and null pointer checks.  This is
enabled by default at @option{-O2} and higher.  Null pointer check
elimination is only done if @option{-fdelete-null-pointer-checks} is
enabled.

@item -fsplit-paths
@opindex fsplit-paths
Split paths leading to loop backedges.  This can improve dead code
elimination and common subexpression elimination.  This is enabled by
default at @option{-O2} and above.

@item -fsplit-ivs-in-unroller
@opindex fsplit-ivs-in-unroller
Enables expression of values of induction variables in later iterations
of the unrolled loop using the value in the first iteration.  This breaks
long dependency chains, thus improving efficiency of the scheduling passes.

A combination of @option{-fweb} and CSE is often sufficient to obtain the
same effect.  However, that is not reliable in cases where the loop body
is more complicated than a single basic block.  It also does not work at all
on some architectures due to restrictions in the CSE pass.

This optimization is enabled by default.

@item -fvariable-expansion-in-unroller
@opindex fvariable-expansion-in-unroller
With this option, the compiler creates multiple copies of some
local variables when unrolling a loop, which can result in superior code.

@item -fpartial-inlining
@opindex fpartial-inlining
Inline parts of functions.  This option has any effect only
when inlining itself is turned on by the @option{-finline-functions}
or @option{-finline-small-functions} options.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fpredictive-commoning
@opindex fpredictive-commoning
Perform predictive commoning optimization, i.e., reusing computations
(especially memory loads and stores) performed in previous
iterations of loops.

This option is enabled at level @option{-O3}.

@item -fprefetch-loop-arrays
@opindex fprefetch-loop-arrays
If supported by the target machine, generate instructions to prefetch
memory to improve the performance of loops that access large arrays.

This option may generate better or worse code; results are highly
dependent on the structure of loops within the source code.

Disabled at level @option{-Os}.

@item -fno-printf-return-value
@opindex fno-printf-return-value
Do not substitute constants for known return value of formatted output
functions such as @code{sprintf}, @code{snprintf}, @code{vsprintf}, and
@code{vsnprintf} (but not @code{printf} of @code{fprintf}).  This
transformation allows GCC to optimize or even eliminate branches based
on the known return value of these functions called with arguments that
are either constant, or whose values are known to be in a range that
makes determining the exact return value possible.  For example, when
@option{-fprintf-return-value} is in effect, both the branch and the
body of the @code{if} statement (but not the call to @code{snprint})
can be optimized away when @code{i} is a 32-bit or smaller integer
because the return value is guaranteed to be at most 8.

@smallexample
char buf[9];
if (snprintf (buf, "%08x", i) >= sizeof buf)
  @dots{}
@end smallexample

The @option{-fprintf-return-value} option relies on other optimizations
and yields best results with @option{-O2} and above.  It works in tandem
with the @option{-Wformat-overflow} and @option{-Wformat-truncation}
options.  The @option{-fprintf-return-value} option is enabled by default.

@item -fno-peephole
@itemx -fno-peephole2
@opindex fno-peephole
@opindex fno-peephole2
Disable any machine-specific peephole optimizations.  The difference
between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
are implemented in the compiler; some targets use one, some use the
other, a few use both.

@option{-fpeephole} is enabled by default.
@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fno-guess-branch-probability
@opindex fno-guess-branch-probability
Do not guess branch probabilities using heuristics.

GCC uses heuristics to guess branch probabilities if they are
not provided by profiling feedback (@option{-fprofile-arcs}).  These
heuristics are based on the control flow graph.  If some branch probabilities
are specified by @code{__builtin_expect}, then the heuristics are
used to guess branch probabilities for the rest of the control flow graph,
taking the @code{__builtin_expect} info into account.  The interactions
between the heuristics and @code{__builtin_expect} can be complex, and in
some cases, it may be useful to disable the heuristics so that the effects
of @code{__builtin_expect} are easier to understand.

The default is @option{-fguess-branch-probability} at levels
@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -freorder-blocks
@opindex freorder-blocks
Reorder basic blocks in the compiled function in order to reduce number of
taken branches and improve code locality.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -freorder-blocks-algorithm=@var{algorithm}
@opindex freorder-blocks-algorithm
Use the specified algorithm for basic block reordering.  The
@var{algorithm} argument can be @samp{simple}, which does not increase
code size (except sometimes due to secondary effects like alignment),
or @samp{stc}, the ``software trace cache'' algorithm, which tries to
put all often executed code together, minimizing the number of branches
executed by making extra copies of code.

The default is @samp{simple} at levels @option{-O}, @option{-Os}, and
@samp{stc} at levels @option{-O2}, @option{-O3}.

@item -freorder-blocks-and-partition
@opindex freorder-blocks-and-partition
In addition to reordering basic blocks in the compiled function, in order
to reduce number of taken branches, partitions hot and cold basic blocks
into separate sections of the assembly and @file{.o} files, to improve
paging and cache locality performance.

This optimization is automatically turned off in the presence of
exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined
section attribute and on any architecture that does not support named
sections.  When @option{-fsplit-stack} is used this option is not
enabled by default (to avoid linker errors), but may be enabled
explicitly (if using a working linker).

Enabled for x86 at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -freorder-functions
@opindex freorder-functions
Reorder functions in the object file in order to
improve code locality.  This is implemented by using special
subsections @code{.text.hot} for most frequently executed functions and
@code{.text.unlikely} for unlikely executed functions.  Reordering is done by
the linker so object file format must support named sections and linker must
place them in a reasonable way.

Also profile feedback must be available to make this option effective.  See
@option{-fprofile-arcs} for details.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fstrict-aliasing
@opindex fstrict-aliasing
Allow the compiler to assume the strictest aliasing rules applicable to
the language being compiled.  For C (and C++), this activates
optimizations based on the type of expressions.  In particular, an
object of one type is assumed never to reside at the same address as an
object of a different type, unless the types are almost the same.  For
example, an @code{unsigned int} can alias an @code{int}, but not a
@code{void*} or a @code{double}.  A character type may alias any other
type.

@anchor{Type-punning}Pay special attention to code like this:
@smallexample
union a_union @{
  int i;
  double d;
@};

int f() @{
  union a_union t;
  t.d = 3.0;
  return t.i;
@}
@end smallexample
The practice of reading from a different union member than the one most
recently written to (called ``type-punning'') is common.  Even with
@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
is accessed through the union type.  So, the code above works as
expected.  @xref{Structures unions enumerations and bit-fields
implementation}.  However, this code might not:
@smallexample
int f() @{
  union a_union t;
  int* ip;
  t.d = 3.0;
  ip = &t.i;
  return *ip;
@}
@end smallexample

Similarly, access by taking the address, casting the resulting pointer
and dereferencing the result has undefined behavior, even if the cast
uses a union type, e.g.:
@smallexample
int f() @{
  double d = 3.0;
  return ((union a_union *) &d)->i;
@}
@end smallexample

The @option{-fstrict-aliasing} option is enabled at levels
@option{-O2}, @option{-O3}, @option{-Os}.

@item -falign-functions
@itemx -falign-functions=@var{n}
@opindex falign-functions
Align the start of functions to the next power-of-two greater than
@var{n}, skipping up to @var{n} bytes.  For instance,
@option{-falign-functions=32} aligns functions to the next 32-byte
boundary, but @option{-falign-functions=24} aligns to the next
32-byte boundary only if this can be done by skipping 23 bytes or less.

@option{-fno-align-functions} and @option{-falign-functions=1} are
equivalent and mean that functions are not aligned.

Some assemblers only support this flag when @var{n} is a power of two;
in that case, it is rounded up.

If @var{n} is not specified or is zero, use a machine-dependent default.
The maximum allowed @var{n} option value is 65536.

Enabled at levels @option{-O2}, @option{-O3}.

@item -flimit-function-alignment
If this option is enabled, the compiler tries to avoid unnecessarily
overaligning functions. It attempts to instruct the assembler to align
by the amount specified by @option{-falign-functions}, but not to
skip more bytes than the size of the function.

@item -falign-labels
@itemx -falign-labels=@var{n}
@opindex falign-labels
Align all branch targets to a power-of-two boundary, skipping up to
@var{n} bytes like @option{-falign-functions}.  This option can easily
make code slower, because it must insert dummy operations for when the
branch target is reached in the usual flow of the code.

@option{-fno-align-labels} and @option{-falign-labels=1} are
equivalent and mean that labels are not aligned.

If @option{-falign-loops} or @option{-falign-jumps} are applicable and
are greater than this value, then their values are used instead.

If @var{n} is not specified or is zero, use a machine-dependent default
which is very likely to be @samp{1}, meaning no alignment.
The maximum allowed @var{n} option value is 65536.

Enabled at levels @option{-O2}, @option{-O3}.

@item -falign-loops
@itemx -falign-loops=@var{n}
@opindex falign-loops
Align loops to a power-of-two boundary, skipping up to @var{n} bytes
like @option{-falign-functions}.  If the loops are
executed many times, this makes up for any execution of the dummy
operations.

@option{-fno-align-loops} and @option{-falign-loops=1} are
equivalent and mean that loops are not aligned.
The maximum allowed @var{n} option value is 65536.

If @var{n} is not specified or is zero, use a machine-dependent default.

Enabled at levels @option{-O2}, @option{-O3}.

@item -falign-jumps
@itemx -falign-jumps=@var{n}
@opindex falign-jumps
Align branch targets to a power-of-two boundary, for branch targets
where the targets can only be reached by jumping, skipping up to @var{n}
bytes like @option{-falign-functions}.  In this case, no dummy operations
need be executed.

@option{-fno-align-jumps} and @option{-falign-jumps=1} are
equivalent and mean that loops are not aligned.

If @var{n} is not specified or is zero, use a machine-dependent default.
The maximum allowed @var{n} option value is 65536.

Enabled at levels @option{-O2}, @option{-O3}.

@item -funit-at-a-time
@opindex funit-at-a-time
This option is left for compatibility reasons. @option{-funit-at-a-time}
has no effect, while @option{-fno-unit-at-a-time} implies
@option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.

Enabled by default.

@item -fno-toplevel-reorder
@opindex fno-toplevel-reorder
Do not reorder top-level functions, variables, and @code{asm}
statements.  Output them in the same order that they appear in the
input file.  When this option is used, unreferenced static variables
are not removed.  This option is intended to support existing code
that relies on a particular ordering.  For new code, it is better to
use attributes when possible.

Enabled at level @option{-O0}.  When disabled explicitly, it also implies
@option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some
targets.

@item -fweb
@opindex fweb
Constructs webs as commonly used for register allocation purposes and assign
each web individual pseudo register.  This allows the register allocation pass
to operate on pseudos directly, but also strengthens several other optimization
passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
however, make debugging impossible, since variables no longer stay in a
``home register''.

Enabled by default with @option{-funroll-loops}.

@item -fwhole-program
@opindex fwhole-program
Assume that the current compilation unit represents the whole program being
compiled.  All public functions and variables with the exception of @code{main}
and those merged by attribute @code{externally_visible} become static functions
and in effect are optimized more aggressively by interprocedural optimizers.

This option should not be used in combination with @option{-flto}.
Instead relying on a linker plugin should provide safer and more precise
information.

@item -flto[=@var{n}]
@opindex flto
This option runs the standard link-time optimizer.  When invoked
with source code, it generates GIMPLE (one of GCC's internal
representations) and writes it to special ELF sections in the object
file.  When the object files are linked together, all the function
bodies are read from these ELF sections and instantiated as if they
had been part of the same translation unit.

To use the link-time optimizer, @option{-flto} and optimization
options should be specified at compile time and during the final link.
It is recommended that you compile all the files participating in the
same link with the same options and also specify those options at
link time.  
For example:

@smallexample
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
@end smallexample

The first two invocations to GCC save a bytecode representation
of GIMPLE into special ELF sections inside @file{foo.o} and
@file{bar.o}.  The final invocation reads the GIMPLE bytecode from
@file{foo.o} and @file{bar.o}, merges the two files into a single
internal image, and compiles the result as usual.  Since both
@file{foo.o} and @file{bar.o} are merged into a single image, this
causes all the interprocedural analyses and optimizations in GCC to
work across the two files as if they were a single one.  This means,
for example, that the inliner is able to inline functions in
@file{bar.o} into functions in @file{foo.o} and vice-versa.

Another (simpler) way to enable link-time optimization is:

@smallexample
gcc -o myprog -flto -O2 foo.c bar.c
@end smallexample

The above generates bytecode for @file{foo.c} and @file{bar.c},
merges them together into a single GIMPLE representation and optimizes
them as usual to produce @file{myprog}.

The only important thing to keep in mind is that to enable link-time
optimizations you need to use the GCC driver to perform the link step.
GCC then automatically performs link-time optimization if any of the
objects involved were compiled with the @option{-flto} command-line option.  
You generally
should specify the optimization options to be used for link-time
optimization though GCC tries to be clever at guessing an
optimization level to use from the options used at compile time
if you fail to specify one at link time.  You can always override
the automatic decision to do link-time optimization
by passing @option{-fno-lto} to the link command.

To make whole program optimization effective, it is necessary to make
certain whole program assumptions.  The compiler needs to know
what functions and variables can be accessed by libraries and runtime
outside of the link-time optimized unit.  When supported by the linker,
the linker plugin (see @option{-fuse-linker-plugin}) passes information
to the compiler about used and externally visible symbols.  When
the linker plugin is not available, @option{-fwhole-program} should be
used to allow the compiler to make these assumptions, which leads
to more aggressive optimization decisions.

When @option{-fuse-linker-plugin} is not enabled, when a file is
compiled with @option{-flto}, the generated object file is larger than
a regular object file because it contains GIMPLE bytecodes and the usual
final code (see @option{-ffat-lto-objects}.  This means that
object files with LTO information can be linked as normal object
files; if @option{-fno-lto} is passed to the linker, no
interprocedural optimizations are applied.  Note that when
@option{-fno-fat-lto-objects} is enabled the compile stage is faster
but you cannot perform a regular, non-LTO link on them.

Additionally, the optimization flags used to compile individual files
are not necessarily related to those used at link time.  For instance,

@smallexample
gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o
@end smallexample

This produces individual object files with unoptimized assembler
code, but the resulting binary @file{myprog} is optimized at
@option{-O3}.  If, instead, the final binary is generated with
@option{-fno-lto}, then @file{myprog} is not optimized.

When producing the final binary, GCC only
applies link-time optimizations to those files that contain bytecode.
Therefore, you can mix and match object files and libraries with
GIMPLE bytecodes and final object code.  GCC automatically selects
which files to optimize in LTO mode and which files to link without
further processing.

There are some code generation flags preserved by GCC when
generating bytecodes, as they need to be used during the final link
stage.  Generally options specified at link time override those
specified at compile time.

If you do not specify an optimization level option @option{-O} at
link time, then GCC uses the highest optimization level 
used when compiling the object files.

Currently, the following options and their settings are taken from
the first object file that explicitly specifies them: 
@option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon},
@option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm}
and all the @option{-m} target flags.

Certain ABI-changing flags are required to match in all compilation units,
and trying to override this at link time with a conflicting value
is ignored.  This includes options such as @option{-freg-struct-return}
and @option{-fpcc-struct-return}. 

Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
@option{-fwrapv}, @option{-fno-trapv} or @option{-fno-strict-aliasing}
are passed through to the link stage and merged conservatively for
conflicting translation units.  Specifically
@option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
precedence; and for example @option{-ffp-contract=off} takes precedence
over @option{-ffp-contract=fast}.  You can override them at link time.

If LTO encounters objects with C linkage declared with incompatible
types in separate translation units to be linked together (undefined
behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
issued.  The behavior is still undefined at run time.  Similar
diagnostics may be raised for other languages.

Another feature of LTO is that it is possible to apply interprocedural
optimizations on files written in different languages:

@smallexample
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
@end smallexample

Notice that the final link is done with @command{g++} to get the C++
runtime libraries and @option{-lgfortran} is added to get the Fortran
runtime libraries.  In general, when mixing languages in LTO mode, you
should use the same link command options as when mixing languages in a
regular (non-LTO) compilation.

If object files containing GIMPLE bytecode are stored in a library archive, say
@file{libfoo.a}, it is possible to extract and use them in an LTO link if you
are using a linker with plugin support.  To create static libraries suitable
for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar}
and @command{ranlib}; 
to show the symbols of object files with GIMPLE bytecode, use
@command{gcc-nm}.  Those commands require that @command{ar}, @command{ranlib}
and @command{nm} have been compiled with plugin support.  At link time, use the the
flag @option{-fuse-linker-plugin} to ensure that the library participates in
the LTO optimization process:

@smallexample
gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
@end smallexample

With the linker plugin enabled, the linker extracts the needed
GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
to make them part of the aggregated GIMPLE image to be optimized.

If you are not using a linker with plugin support and/or do not
enable the linker plugin, then the objects inside @file{libfoo.a}
are extracted and linked as usual, but they do not participate
in the LTO optimization process.  In order to make a static library suitable
for both LTO optimization and usual linkage, compile its object files with
@option{-flto} @option{-ffat-lto-objects}.

Link-time optimizations do not require the presence of the whole program to
operate.  If the program does not require any symbols to be exported, it is
possible to combine @option{-flto} and @option{-fwhole-program} to allow
the interprocedural optimizers to use more aggressive assumptions which may
lead to improved optimization opportunities.
Use of @option{-fwhole-program} is not needed when linker plugin is
active (see @option{-fuse-linker-plugin}).

The current implementation of LTO makes no
attempt to generate bytecode that is portable between different
types of hosts.  The bytecode files are versioned and there is a
strict version check, so bytecode files generated in one version of
GCC do not work with an older or newer version of GCC.

Link-time optimization does not work well with generation of debugging
information on systems other than those using a combination of ELF and
DWARF.

If you specify the optional @var{n}, the optimization and code
generation done at link time is executed in parallel using @var{n}
parallel jobs by utilizing an installed @command{make} program.  The
environment variable @env{MAKE} may be used to override the program
used.  The default value for @var{n} is 1.

You can also specify @option{-flto=jobserver} to use GNU make's
job server mode to determine the number of parallel jobs. This
is useful when the Makefile calling GCC is already executing in parallel.
You must prepend a @samp{+} to the command recipe in the parent Makefile
for this to work.  This option likely only works if @env{MAKE} is
GNU make.

@item -flto-partition=@var{alg}
@opindex flto-partition
Specify the partitioning algorithm used by the link-time optimizer.
The value is either @samp{1to1} to specify a partitioning mirroring
the original source files or @samp{balanced} to specify partitioning
into equally sized chunks (whenever possible) or @samp{max} to create
new partition for every symbol where possible.  Specifying @samp{none}
as an algorithm disables partitioning and streaming completely. 
The default value is @samp{balanced}. While @samp{1to1} can be used
as an workaround for various code ordering issues, the @samp{max}
partitioning is intended for internal testing only.
The value @samp{one} specifies that exactly one partition should be
used while the value @samp{none} bypasses partitioning and executes
the link-time optimization step directly from the WPA phase.

@item -flto-odr-type-merging
@opindex flto-odr-type-merging
Enable streaming of mangled types names of C++ types and their unification
at link time.  This increases size of LTO object files, but enables
diagnostics about One Definition Rule violations.

@item -flto-compression-level=@var{n}
@opindex flto-compression-level
This option specifies the level of compression used for intermediate
language written to LTO object files, and is only meaningful in
conjunction with LTO mode (@option{-flto}).  Valid
values are 0 (no compression) to 9 (maximum compression).  Values
outside this range are clamped to either 0 or 9.  If the option is not
given, a default balanced compression setting is used.

@item -fuse-linker-plugin
@opindex fuse-linker-plugin
Enables the use of a linker plugin during link-time optimization.  This
option relies on plugin support in the linker, which is available in gold
or in GNU ld 2.21 or newer.

This option enables the extraction of object files with GIMPLE bytecode out
of library archives. This improves the quality of optimization by exposing
more code to the link-time optimizer.  This information specifies what
symbols can be accessed externally (by non-LTO object or during dynamic
linking).  Resulting code quality improvements on binaries (and shared
libraries that use hidden visibility) are similar to @option{-fwhole-program}.
See @option{-flto} for a description of the effect of this flag and how to
use it.

This option is enabled by default when LTO support in GCC is enabled
and GCC was configured for use with
a linker supporting plugins (GNU ld 2.21 or newer or gold).

@item -ffat-lto-objects
@opindex ffat-lto-objects
Fat LTO objects are object files that contain both the intermediate language
and the object code. This makes them usable for both LTO linking and normal
linking. This option is effective only when compiling with @option{-flto}
and is ignored at link time.

@option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
requires the complete toolchain to be aware of LTO. It requires a linker with
linker plugin support for basic functionality.  Additionally,
@command{nm}, @command{ar} and @command{ranlib}
need to support linker plugins to allow a full-featured build environment
(capable of building static libraries etc).  GCC provides the @command{gcc-ar},
@command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options
to these tools. With non fat LTO makefiles need to be modified to use them.

Note that modern binutils provide plugin auto-load mechanism.
Installing the linker plugin into @file{$libdir/bfd-plugins} has the same
effect as usage of the command wrappers (@command{gcc-ar}, @command{gcc-nm} and
@command{gcc-ranlib}).

The default is @option{-fno-fat-lto-objects} on targets with linker plugin
support.

@item -fcompare-elim
@opindex fcompare-elim
After register allocation and post-register allocation instruction splitting,
identify arithmetic instructions that compute processor flags similar to a
comparison operation based on that arithmetic.  If possible, eliminate the
explicit comparison operation.

This pass only applies to certain targets that cannot explicitly represent
the comparison operation before register allocation is complete.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcprop-registers
@opindex fcprop-registers
After register allocation and post-register allocation instruction splitting,
perform a copy-propagation pass to try to reduce scheduling dependencies
and occasionally eliminate the copy.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fprofile-correction
@opindex fprofile-correction
Profiles collected using an instrumented binary for multi-threaded programs may
be inconsistent due to missed counter updates. When this option is specified,
GCC uses heuristics to correct or smooth out such inconsistencies. By
default, GCC emits an error message when an inconsistent profile is detected.

@item -fprofile-use
@itemx -fprofile-use=@var{path}
@opindex fprofile-use
Enable profile feedback-directed optimizations, 
and the following optimizations
which are generally profitable only with profile feedback available:
@option{-fbranch-probabilities}, @option{-fvpt},
@option{-funroll-loops}, @option{-fpeel-loops}, @option{-ftracer}, 
@option{-ftree-vectorize}, and @option{ftree-loop-distribute-patterns}.

Before you can use this option, you must first generate profiling information.
@xref{Instrumentation Options}, for information about the
@option{-fprofile-generate} option.

By default, GCC emits an error message if the feedback profiles do not
match the source code.  This error can be turned into a warning by using
@option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
code.

If @var{path} is specified, GCC looks at the @var{path} to find
the profile feedback data files. See @option{-fprofile-dir}.

@item -fauto-profile
@itemx -fauto-profile=@var{path}
@opindex fauto-profile
Enable sampling-based feedback-directed optimizations, 
and the following optimizations
which are generally profitable only with profile feedback available:
@option{-fbranch-probabilities}, @option{-fvpt},
@option{-funroll-loops}, @option{-fpeel-loops}, @option{-ftracer}, 
@option{-ftree-vectorize},
@option{-finline-functions}, @option{-fipa-cp}, @option{-fipa-cp-clone},
@option{-fpredictive-commoning}, @option{-funswitch-loops},
@option{-fgcse-after-reload}, and @option{-ftree-loop-distribute-patterns}.

@var{path} is the name of a file containing AutoFDO profile information.
If omitted, it defaults to @file{fbdata.afdo} in the current directory.

Producing an AutoFDO profile data file requires running your program
with the @command{perf} utility on a supported GNU/Linux target system.
For more information, see @uref{https://perf.wiki.kernel.org/}.

E.g.
@smallexample
perf record -e br_inst_retired:near_taken -b -o perf.data \
    -- your_program
@end smallexample

Then use the @command{create_gcov} tool to convert the raw profile data
to a format that can be used by GCC.@  You must also supply the 
unstripped binary for your program to this tool.  
See @uref{https://github.com/google/autofdo}.

E.g.
@smallexample
create_gcov --binary=your_program.unstripped --profile=perf.data \
    --gcov=profile.afdo
@end smallexample
@end table

The following options control compiler behavior regarding floating-point 
arithmetic.  These options trade off between speed and
correctness.  All must be specifically enabled.

@table @gcctabopt
@item -ffloat-store
@opindex ffloat-store
Do not store floating-point variables in registers, and inhibit other
options that might change whether a floating-point value is taken from a
register or memory.

@cindex floating-point precision
This option prevents undesirable excess precision on machines such as
the 68000 where the floating registers (of the 68881) keep more
precision than a @code{double} is supposed to have.  Similarly for the
x86 architecture.  For most programs, the excess precision does only
good, but a few programs rely on the precise definition of IEEE floating
point.  Use @option{-ffloat-store} for such programs, after modifying
them to store all pertinent intermediate computations into variables.

@item -fexcess-precision=@var{style}
@opindex fexcess-precision
This option allows further control over excess precision on machines
where floating-point operations occur in a format with more precision or
range than the IEEE standard and interchange floating-point types.  By
default, @option{-fexcess-precision=fast} is in effect; this means that
operations may be carried out in a wider precision than the types specified
in the source if that would result in faster code, and it is unpredictable
when rounding to the types specified in the source code takes place.
When compiling C, if @option{-fexcess-precision=standard} is specified then
excess precision follows the rules specified in ISO C99; in particular,
both casts and assignments cause values to be rounded to their
semantic types (whereas @option{-ffloat-store} only affects
assignments).  This option is enabled by default for C if a strict
conformance option such as @option{-std=c99} is used.
@option{-ffast-math} enables @option{-fexcess-precision=fast} by default
regardless of whether a strict conformance option is used.

@opindex mfpmath
@option{-fexcess-precision=standard} is not implemented for languages
other than C.  On the x86, it has no effect if @option{-mfpmath=sse}
or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
semantics apply without excess precision, and in the latter, rounding
is unpredictable.

@item -ffast-math
@opindex ffast-math
Sets the options @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
@option{-ffinite-math-only}, @option{-fno-rounding-math},
@option{-fno-signaling-nans}, @option{-fcx-limited-range} and
@option{-fexcess-precision=fast}.

This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.

This option is not turned on by any @option{-O} option besides
@option{-Ofast} since it can result in incorrect output for programs
that depend on an exact implementation of IEEE or ISO rules/specifications
for math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.

@item -fno-math-errno
@opindex fno-math-errno
Do not set @code{errno} after calling math functions that are executed
with a single instruction, e.g., @code{sqrt}.  A program that relies on
IEEE exceptions for math error handling may want to use this flag
for speed while maintaining IEEE arithmetic compatibility.

This option is not turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.

The default is @option{-fmath-errno}.

On Darwin systems, the math library never sets @code{errno}.  There is
therefore no reason for the compiler to consider the possibility that
it might, and @option{-fno-math-errno} is the default.

@item -funsafe-math-optimizations
@opindex funsafe-math-optimizations

Allow optimizations for floating-point arithmetic that (a) assume
that arguments and results are valid and (b) may violate IEEE or
ANSI standards.  When used at link time, it may include libraries
or startup files that change the default FPU control word or other
similar optimizations.

This option is not turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.
Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
@option{-fassociative-math} and @option{-freciprocal-math}.

The default is @option{-fno-unsafe-math-optimizations}.

@item -fassociative-math
@opindex fassociative-math

Allow re-association of operands in series of floating-point operations.
This violates the ISO C and C++ language standard by possibly changing
computation result.  NOTE: re-ordering may change the sign of zero as
well as ignore NaNs and inhibit or create underflow or overflow (and
thus cannot be used on code that relies on rounding behavior like
@code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
and thus may not be used when ordered comparisons are required.
This option requires that both @option{-fno-signed-zeros} and
@option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
much sense with @option{-frounding-math}. For Fortran the option
is automatically enabled when both @option{-fno-signed-zeros} and
@option{-fno-trapping-math} are in effect.

The default is @option{-fno-associative-math}.

@item -freciprocal-math
@opindex freciprocal-math

Allow the reciprocal of a value to be used instead of dividing by
the value if this enables optimizations.  For example @code{x / y}
can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
is subject to common subexpression elimination.  Note that this loses
precision and increases the number of flops operating on the value.

The default is @option{-fno-reciprocal-math}.

@item -ffinite-math-only
@opindex ffinite-math-only
Allow optimizations for floating-point arithmetic that assume
that arguments and results are not NaNs or +-Infs.

This option is not turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.

The default is @option{-fno-finite-math-only}.

@item -fno-signed-zeros
@opindex fno-signed-zeros
Allow optimizations for floating-point arithmetic that ignore the
signedness of zero.  IEEE arithmetic specifies the behavior of
distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
This option implies that the sign of a zero result isn't significant.

The default is @option{-fsigned-zeros}.

@item -fno-trapping-math
@opindex fno-trapping-math
Compile code assuming that floating-point operations cannot generate
user-visible traps.  These traps include division by zero, overflow,
underflow, inexact result and invalid operation.  This option requires
that @option{-fno-signaling-nans} be in effect.  Setting this option may
allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.

This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.

The default is @option{-ftrapping-math}.

@item -frounding-math
@opindex frounding-math
Disable transformations and optimizations that assume default floating-point
rounding behavior.  This is round-to-zero for all floating point
to integer conversions, and round-to-nearest for all other arithmetic
truncations.  This option should be specified for programs that change
the FP rounding mode dynamically, or that may be executed with a
non-default rounding mode.  This option disables constant folding of
floating-point expressions at compile time (which may be affected by
rounding mode) and arithmetic transformations that are unsafe in the
presence of sign-dependent rounding modes.

The default is @option{-fno-rounding-math}.

This option is experimental and does not currently guarantee to
disable all GCC optimizations that are affected by rounding mode.
Future versions of GCC may provide finer control of this setting
using C99's @code{FENV_ACCESS} pragma.  This command-line option
will be used to specify the default state for @code{FENV_ACCESS}.

@item -fsignaling-nans
@opindex fsignaling-nans
Compile code assuming that IEEE signaling NaNs may generate user-visible
traps during floating-point operations.  Setting this option disables
optimizations that may change the number of exceptions visible with
signaling NaNs.  This option implies @option{-ftrapping-math}.

This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
be defined.

The default is @option{-fno-signaling-nans}.

This option is experimental and does not currently guarantee to
disable all GCC optimizations that affect signaling NaN behavior.

@item -fno-fp-int-builtin-inexact
@opindex fno-fp-int-builtin-inexact
Do not allow the built-in functions @code{ceil}, @code{floor},
@code{round} and @code{trunc}, and their @code{float} and @code{long
double} variants, to generate code that raises the ``inexact''
floating-point exception for noninteger arguments.  ISO C99 and C11
allow these functions to raise the ``inexact'' exception, but ISO/IEC
TS 18661-1:2014, the C bindings to IEEE 754-2008, does not allow these
functions to do so.

The default is @option{-ffp-int-builtin-inexact}, allowing the
exception to be raised.  This option does nothing unless
@option{-ftrapping-math} is in effect.

Even if @option{-fno-fp-int-builtin-inexact} is used, if the functions
generate a call to a library function then the ``inexact'' exception
may be raised if the library implementation does not follow TS 18661.

@item -fsingle-precision-constant
@opindex fsingle-precision-constant
Treat floating-point constants as single precision instead of
implicitly converting them to double-precision constants.

@item -fcx-limited-range
@opindex fcx-limited-range
When enabled, this option states that a range reduction step is not
needed when performing complex division.  Also, there is no checking
whether the result of a complex multiplication or division is @code{NaN
+ I*NaN}, with an attempt to rescue the situation in that case.  The
default is @option{-fno-cx-limited-range}, but is enabled by
@option{-ffast-math}.

This option controls the default setting of the ISO C99
@code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
all languages.

@item -fcx-fortran-rules
@opindex fcx-fortran-rules
Complex multiplication and division follow Fortran rules.  Range
reduction is done as part of complex division, but there is no checking
whether the result of a complex multiplication or division is @code{NaN
+ I*NaN}, with an attempt to rescue the situation in that case.

The default is @option{-fno-cx-fortran-rules}.

@end table

The following options control optimizations that may improve
performance, but are not enabled by any @option{-O} options.  This
section includes experimental options that may produce broken code.

@table @gcctabopt
@item -fbranch-probabilities
@opindex fbranch-probabilities
After running a program compiled with @option{-fprofile-arcs}
(@pxref{Instrumentation Options}),
you can compile it a second time using
@option{-fbranch-probabilities}, to improve optimizations based on
the number of times each branch was taken.  When a program
compiled with @option{-fprofile-arcs} exits, it saves arc execution
counts to a file called @file{@var{sourcename}.gcda} for each source
file.  The information in this data file is very dependent on the
structure of the generated code, so you must use the same source code
and the same optimization options for both compilations.

With @option{-fbranch-probabilities}, GCC puts a
@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
These can be used to improve optimization.  Currently, they are only
used in one place: in @file{reorg.c}, instead of guessing which path a
branch is most likely to take, the @samp{REG_BR_PROB} values are used to
exactly determine which path is taken more often.

@item -fprofile-values
@opindex fprofile-values
If combined with @option{-fprofile-arcs}, it adds code so that some
data about values of expressions in the program is gathered.

With @option{-fbranch-probabilities}, it reads back the data gathered
from profiling values of expressions for usage in optimizations.

Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.

@item -fprofile-reorder-functions
@opindex fprofile-reorder-functions
Function reordering based on profile instrumentation collects
first time of execution of a function and orders these functions
in ascending order.

Enabled with @option{-fprofile-use}.

@item -fvpt
@opindex fvpt
If combined with @option{-fprofile-arcs}, this option instructs the compiler
to add code to gather information about values of expressions.

With @option{-fbranch-probabilities}, it reads back the data gathered
and actually performs the optimizations based on them.
Currently the optimizations include specialization of division operations
using the knowledge about the value of the denominator.

@item -frename-registers
@opindex frename-registers
Attempt to avoid false dependencies in scheduled code by making use
of registers left over after register allocation.  This optimization
most benefits processors with lots of registers.  Depending on the
debug information format adopted by the target, however, it can
make debugging impossible, since variables no longer stay in
a ``home register''.

Enabled by default with @option{-funroll-loops}.

@item -fschedule-fusion
@opindex fschedule-fusion
Performs a target dependent pass over the instruction stream to schedule
instructions of same type together because target machine can execute them
more efficiently if they are adjacent to each other in the instruction flow.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -ftracer
@opindex ftracer
Perform tail duplication to enlarge superblock size.  This transformation
simplifies the control flow of the function allowing other optimizations to do
a better job.

Enabled with @option{-fprofile-use}.

@item -funroll-loops
@opindex funroll-loops
Unroll loops whose number of iterations can be determined at compile time or
upon entry to the loop.  @option{-funroll-loops} implies
@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
It also turns on complete loop peeling (i.e.@: complete removal of loops with
a small constant number of iterations).  This option makes code larger, and may
or may not make it run faster.

Enabled with @option{-fprofile-use}.

@item -funroll-all-loops
@opindex funroll-all-loops
Unroll all loops, even if their number of iterations is uncertain when
the loop is entered.  This usually makes programs run more slowly.
@option{-funroll-all-loops} implies the same options as
@option{-funroll-loops}.

@item -fpeel-loops
@opindex fpeel-loops
Peels loops for which there is enough information that they do not
roll much (from profile feedback or static analysis).  It also turns on
complete loop peeling (i.e.@: complete removal of loops with small constant
number of iterations).

Enabled with @option{-O3} and/or @option{-fprofile-use}.

@item -fmove-loop-invariants
@opindex fmove-loop-invariants
Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
at level @option{-O1}

@item -fsplit-loops
@opindex fsplit-loops
Split a loop into two if it contains a condition that's always true
for one side of the iteration space and false for the other.

@item -funswitch-loops
@opindex funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicates
of the loop on both branches (modified according to result of the condition).

@item -ffunction-sections
@itemx -fdata-sections
@opindex ffunction-sections
@opindex fdata-sections
Place each function or data item into its own section in the output
file if the target supports arbitrary sections.  The name of the
function or the name of the data item determines the section's name
in the output file.

Use these options on systems where the linker can perform optimizations to
improve locality of reference in the instruction space.  Most systems using the
ELF object format have linkers with such optimizations.  On AIX, the linker
rearranges sections (CSECTs) based on the call graph.  The performance impact
varies.

Together with a linker garbage collection (linker @option{--gc-sections}
option) these options may lead to smaller statically-linked executables (after
stripping).

On ELF/DWARF systems these options do not degenerate the quality of the debug
information.  There could be issues with other object files/debug info formats.

Only use these options when there are significant benefits from doing so.  When
you specify these options, the assembler and linker create larger object and
executable files and are also slower.  These options affect code generation.
They prevent optimizations by the compiler and assembler using relative
locations inside a translation unit since the locations are unknown until
link time.  An example of such an optimization is relaxing calls to short call
instructions.

@item -fbranch-target-load-optimize
@opindex fbranch-target-load-optimize
Perform branch target register load optimization before prologue / epilogue
threading.
The use of target registers can typically be exposed only during reload,
thus hoisting loads out of loops and doing inter-block scheduling needs
a separate optimization pass.

@item -fbranch-target-load-optimize2
@opindex fbranch-target-load-optimize2
Perform branch target register load optimization after prologue / epilogue
threading.

@item -fbtr-bb-exclusive
@opindex fbtr-bb-exclusive
When performing branch target register load optimization, don't reuse
branch target registers within any basic block.

@item -fstdarg-opt
@opindex fstdarg-opt
Optimize the prologue of variadic argument functions with respect to usage of
those arguments.

@item -fsection-anchors
@opindex fsection-anchors
Try to reduce the number of symbolic address calculations by using
shared ``anchor'' symbols to address nearby objects.  This transformation
can help to reduce the number of GOT entries and GOT accesses on some
targets.

For example, the implementation of the following function @code{foo}:

@smallexample
static int a, b, c;
int foo (void) @{ return a + b + c; @}
@end smallexample

@noindent
usually calculates the addresses of all three variables, but if you
compile it with @option{-fsection-anchors}, it accesses the variables
from a common anchor point instead.  The effect is similar to the
following pseudocode (which isn't valid C):

@smallexample
int foo (void)
@{
  register int *xr = &x;
  return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
@}
@end smallexample

Not all targets support this option.

@item --param @var{name}=@var{value}
@opindex param
In some places, GCC uses various constants to control the amount of
optimization that is done.  For example, GCC does not inline functions
that contain more than a certain number of instructions.  You can
control some of these constants on the command line using the
@option{--param} option.

The names of specific parameters, and the meaning of the values, are
tied to the internals of the compiler, and are subject to change
without notice in future releases.

In each case, the @var{value} is an integer.  The allowable choices for
@var{name} are:

@table @gcctabopt
@item predictable-branch-outcome
When branch is predicted to be taken with probability lower than this threshold
(in percent), then it is considered well predictable. The default is 10.

@item max-rtl-if-conversion-insns
RTL if-conversion tries to remove conditional branches around a block and
replace them with conditionally executed instructions.  This parameter
gives the maximum number of instructions in a block which should be
considered for if-conversion.  The default is 10, though the compiler will
also use other heuristics to decide whether if-conversion is likely to be
profitable.

@item max-rtl-if-conversion-predictable-cost
@itemx max-rtl-if-conversion-unpredictable-cost
RTL if-conversion will try to remove conditional branches around a block
and replace them with conditionally executed instructions.  These parameters
give the maximum permissible cost for the sequence that would be generated
by if-conversion depending on whether the branch is statically determined
to be predictable or not.  The units for this parameter are the same as
those for the GCC internal seq_cost metric.  The compiler will try to
provide a reasonable default for this parameter using the BRANCH_COST
target macro.

@item max-crossjump-edges
The maximum number of incoming edges to consider for cross-jumping.
The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
the number of edges incoming to each block.  Increasing values mean
more aggressive optimization, making the compilation time increase with
probably small improvement in executable size.

@item min-crossjump-insns
The minimum number of instructions that must be matched at the end
of two blocks before cross-jumping is performed on them.  This
value is ignored in the case where all instructions in the block being
cross-jumped from are matched.  The default value is 5.

@item max-grow-copy-bb-insns
The maximum code size expansion factor when copying basic blocks
instead of jumping.  The expansion is relative to a jump instruction.
The default value is 8.

@item max-goto-duplication-insns
The maximum number of instructions to duplicate to a block that jumps
to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
passes, GCC factors computed gotos early in the compilation process,
and unfactors them as late as possible.  Only computed jumps at the
end of a basic blocks with no more than max-goto-duplication-insns are
unfactored.  The default value is 8.

@item max-delay-slot-insn-search
The maximum number of instructions to consider when looking for an
instruction to fill a delay slot.  If more than this arbitrary number of
instructions are searched, the time savings from filling the delay slot
are minimal, so stop searching.  Increasing values mean more
aggressive optimization, making the compilation time increase with probably
small improvement in execution time.

@item max-delay-slot-live-search
When trying to fill delay slots, the maximum number of instructions to
consider when searching for a block with valid live register
information.  Increasing this arbitrarily chosen value means more
aggressive optimization, increasing the compilation time.  This parameter
should be removed when the delay slot code is rewritten to maintain the
control-flow graph.

@item max-gcse-memory
The approximate maximum amount of memory that can be allocated in
order to perform the global common subexpression elimination
optimization.  If more memory than specified is required, the
optimization is not done.

@item max-gcse-insertion-ratio
If the ratio of expression insertions to deletions is larger than this value
for any expression, then RTL PRE inserts or removes the expression and thus
leaves partially redundant computations in the instruction stream.  The default value is 20.

@item max-pending-list-length
The maximum number of pending dependencies scheduling allows
before flushing the current state and starting over.  Large functions
with few branches or calls can create excessively large lists which
needlessly consume memory and resources.

@item max-modulo-backtrack-attempts
The maximum number of backtrack attempts the scheduler should make
when modulo scheduling a loop.  Larger values can exponentially increase
compilation time.

@item max-inline-insns-single
Several parameters control the tree inliner used in GCC@.
This number sets the maximum number of instructions (counted in GCC's
internal representation) in a single function that the tree inliner
considers for inlining.  This only affects functions declared
inline and methods implemented in a class declaration (C++).
The default value is 400.

@item max-inline-insns-auto
When you use @option{-finline-functions} (included in @option{-O3}),
a lot of functions that would otherwise not be considered for inlining
by the compiler are investigated.  To those functions, a different
(more restrictive) limit compared to functions declared inline can
be applied.
The default value is 30.

@item inline-min-speedup
When estimated performance improvement of caller + callee runtime exceeds this
threshold (in percent), the function can be inlined regardless of the limit on
@option{--param max-inline-insns-single} and @option{--param
max-inline-insns-auto}.
The default value is 15.

@item large-function-insns
The limit specifying really large functions.  For functions larger than this
limit after inlining, inlining is constrained by
@option{--param large-function-growth}.  This parameter is useful primarily
to avoid extreme compilation time caused by non-linear algorithms used by the
back end.
The default value is 2700.

@item large-function-growth
Specifies maximal growth of large function caused by inlining in percents.
The default value is 100 which limits large function growth to 2.0 times
the original size.

@item large-unit-insns
The limit specifying large translation unit.  Growth caused by inlining of
units larger than this limit is limited by @option{--param inline-unit-growth}.
For small units this might be too tight.
For example, consider a unit consisting of function A
that is inline and B that just calls A three times.  If B is small relative to
A, the growth of unit is 300\% and yet such inlining is very sane.  For very
large units consisting of small inlineable functions, however, the overall unit
growth limit is needed to avoid exponential explosion of code size.  Thus for
smaller units, the size is increased to @option{--param large-unit-insns}
before applying @option{--param inline-unit-growth}.  The default is 10000.

@item inline-unit-growth
Specifies maximal overall growth of the compilation unit caused by inlining.
The default value is 20 which limits unit growth to 1.2 times the original
size. Cold functions (either marked cold via an attribute or by profile
feedback) are not accounted into the unit size.

@item ipcp-unit-growth
Specifies maximal overall growth of the compilation unit caused by
interprocedural constant propagation.  The default value is 10 which limits
unit growth to 1.1 times the original size.

@item large-stack-frame
The limit specifying large stack frames.  While inlining the algorithm is trying
to not grow past this limit too much.  The default value is 256 bytes.

@item large-stack-frame-growth
Specifies maximal growth of large stack frames caused by inlining in percents.
The default value is 1000 which limits large stack frame growth to 11 times
the original size.

@item max-inline-insns-recursive
@itemx max-inline-insns-recursive-auto
Specifies the maximum number of instructions an out-of-line copy of a
self-recursive inline
function can grow into by performing recursive inlining.

@option{--param max-inline-insns-recursive} applies to functions
declared inline.
For functions not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled; @option{--param max-inline-insns-recursive-auto} applies instead.  The
default value is 450.

@item max-inline-recursive-depth
@itemx max-inline-recursive-depth-auto
Specifies the maximum recursion depth used for recursive inlining.

@option{--param max-inline-recursive-depth} applies to functions
declared inline.  For functions not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled; @option{--param max-inline-recursive-depth-auto} applies instead.  The
default value is 8.

@item min-inline-recursive-probability
Recursive inlining is profitable only for function having deep recursion
in average and can hurt for function having little recursion depth by
increasing the prologue size or complexity of function body to other
optimizers.

When profile feedback is available (see @option{-fprofile-generate}) the actual
recursion depth can be guessed from the probability that function recurses
via a given call expression.  This parameter limits inlining only to call
expressions whose probability exceeds the given threshold (in percents).
The default value is 10.

@item early-inlining-insns
Specify growth that the early inliner can make.  In effect it increases
the amount of inlining for code having a large abstraction penalty.
The default value is 14.

@item max-early-inliner-iterations
Limit of iterations of the early inliner.  This basically bounds
the number of nested indirect calls the early inliner can resolve.
Deeper chains are still handled by late inlining.

@item comdat-sharing-probability
Probability (in percent) that C++ inline function with comdat visibility
are shared across multiple compilation units.  The default value is 20.

@item profile-func-internal-id
A parameter to control whether to use function internal id in profile
database lookup. If the value is 0, the compiler uses an id that
is based on function assembler name and filename, which makes old profile
data more tolerant to source changes such as function reordering etc.
The default value is 0.

@item min-vect-loop-bound
The minimum number of iterations under which loops are not vectorized
when @option{-ftree-vectorize} is used.  The number of iterations after
vectorization needs to be greater than the value specified by this option
to allow vectorization.  The default value is 0.

@item gcse-cost-distance-ratio
Scaling factor in calculation of maximum distance an expression
can be moved by GCSE optimizations.  This is currently supported only in the
code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
is with simple expressions, i.e., the expressions that have cost
less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
hoisting of simple expressions.  The default value is 10.

@item gcse-unrestricted-cost
Cost, roughly measured as the cost of a single typical machine
instruction, at which GCSE optimizations do not constrain
the distance an expression can travel.  This is currently
supported only in the code hoisting pass.  The lesser the cost,
the more aggressive code hoisting is.  Specifying 0 
allows all expressions to travel unrestricted distances.
The default value is 3.

@item max-hoist-depth
The depth of search in the dominator tree for expressions to hoist.
This is used to avoid quadratic behavior in hoisting algorithm.
The value of 0 does not limit on the search, but may slow down compilation
of huge functions.  The default value is 30.

@item max-tail-merge-comparisons
The maximum amount of similar bbs to compare a bb with.  This is used to
avoid quadratic behavior in tree tail merging.  The default value is 10.

@item max-tail-merge-iterations
The maximum amount of iterations of the pass over the function.  This is used to
limit compilation time in tree tail merging.  The default value is 2.

@item store-merging-allow-unaligned
Allow the store merging pass to introduce unaligned stores if it is legal to
do so.  The default value is 1.

@item max-stores-to-merge
The maximum number of stores to attempt to merge into wider stores in the store
merging pass.  The minimum value is 2 and the default is 64.

@item max-unrolled-insns
The maximum number of instructions that a loop may have to be unrolled.
If a loop is unrolled, this parameter also determines how many times
the loop code is unrolled.

@item max-average-unrolled-insns
The maximum number of instructions biased by probabilities of their execution
that a loop may have to be unrolled.  If a loop is unrolled,
this parameter also determines how many times the loop code is unrolled.

@item max-unroll-times
The maximum number of unrollings of a single loop.

@item max-peeled-insns
The maximum number of instructions that a loop may have to be peeled.
If a loop is peeled, this parameter also determines how many times
the loop code is peeled.

@item max-peel-times
The maximum number of peelings of a single loop.

@item max-peel-branches
The maximum number of branches on the hot path through the peeled sequence.

@item max-completely-peeled-insns
The maximum number of insns of a completely peeled loop.

@item max-completely-peel-times
The maximum number of iterations of a loop to be suitable for complete peeling.

@item max-completely-peel-loop-nest-depth
The maximum depth of a loop nest suitable for complete peeling.

@item max-unswitch-insns
The maximum number of insns of an unswitched loop.

@item max-unswitch-level
The maximum number of branches unswitched in a single loop.

@item max-loop-headers-insns
The maximum number of insns in loop header duplicated by the copy loop headers
pass.

@item lim-expensive
The minimum cost of an expensive expression in the loop invariant motion.

@item iv-consider-all-candidates-bound
Bound on number of candidates for induction variables, below which
all candidates are considered for each use in induction variable
optimizations.  If there are more candidates than this,
only the most relevant ones are considered to avoid quadratic time complexity.

@item iv-max-considered-uses
The induction variable optimizations give up on loops that contain more
induction variable uses.

@item iv-always-prune-cand-set-bound
If the number of candidates in the set is smaller than this value,
always try to remove unnecessary ivs from the set
when adding a new one.

@item avg-loop-niter
Average number of iterations of a loop.

@item dse-max-object-size
Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
Larger values may result in larger compilation times.

@item scev-max-expr-size
Bound on size of expressions used in the scalar evolutions analyzer.
Large expressions slow the analyzer.

@item scev-max-expr-complexity
Bound on the complexity of the expressions in the scalar evolutions analyzer.
Complex expressions slow the analyzer.

@item max-tree-if-conversion-phi-args
Maximum number of arguments in a PHI supported by TREE if conversion
unless the loop is marked with simd pragma.

@item vect-max-version-for-alignment-checks
The maximum number of run-time checks that can be performed when
doing loop versioning for alignment in the vectorizer.

@item vect-max-version-for-alias-checks
The maximum number of run-time checks that can be performed when
doing loop versioning for alias in the vectorizer.

@item vect-max-peeling-for-alignment
The maximum number of loop peels to enhance access alignment
for vectorizer. Value -1 means no limit.

@item max-iterations-to-track
The maximum number of iterations of a loop the brute-force algorithm
for analysis of the number of iterations of the loop tries to evaluate.

@item hot-bb-count-ws-permille
A basic block profile count is considered hot if it contributes to 
the given permillage (i.e. 0...1000) of the entire profiled execution.

@item hot-bb-frequency-fraction
Select fraction of the entry block frequency of executions of basic block in
function given basic block needs to have to be considered hot.

@item max-predicted-iterations
The maximum number of loop iterations we predict statically.  This is useful
in cases where a function contains a single loop with known bound and
another loop with unknown bound.
The known number of iterations is predicted correctly, while
the unknown number of iterations average to roughly 10.  This means that the
loop without bounds appears artificially cold relative to the other one.

@item builtin-expect-probability
Control the probability of the expression having the specified value. This
parameter takes a percentage (i.e. 0 ... 100) as input.
The default probability of 90 is obtained empirically.

@item align-threshold

Select fraction of the maximal frequency of executions of a basic block in
a function to align the basic block.

@item align-loop-iterations

A loop expected to iterate at least the selected number of iterations is
aligned.

@item tracer-dynamic-coverage
@itemx tracer-dynamic-coverage-feedback

This value is used to limit superblock formation once the given percentage of
executed instructions is covered.  This limits unnecessary code size
expansion.

The @option{tracer-dynamic-coverage-feedback} parameter
is used only when profile
feedback is available.  The real profiles (as opposed to statically estimated
ones) are much less balanced allowing the threshold to be larger value.

@item tracer-max-code-growth
Stop tail duplication once code growth has reached given percentage.  This is
a rather artificial limit, as most of the duplicates are eliminated later in
cross jumping, so it may be set to much higher values than is the desired code
growth.

@item tracer-min-branch-ratio

Stop reverse growth when the reverse probability of best edge is less than this
threshold (in percent).

@item tracer-min-branch-probability
@itemx tracer-min-branch-probability-feedback

Stop forward growth if the best edge has probability lower than this
threshold.

Similarly to @option{tracer-dynamic-coverage} two parameters are
provided.  @option{tracer-min-branch-probability-feedback} is used for
compilation with profile feedback and @option{tracer-min-branch-probability}
compilation without.  The value for compilation with profile feedback
needs to be more conservative (higher) in order to make tracer
effective.

@item stack-clash-protection-guard-size
Specify the size of the operating system provided stack guard as
2 raised to @var{num} bytes.  The default value is 12 (4096 bytes).
Acceptable values are between 12 and 30.  Higher values may reduce the
number of explicit probes, but a value larger than the operating system
provided guard will leave code vulnerable to stack clash style attacks.

@item stack-clash-protection-probe-interval
Stack clash protection involves probing stack space as it is allocated.  This
param controls the maximum distance between probes into the stack as 2 raised
to @var{num} bytes.  Acceptable values are between 10 and 16 and defaults to
12.  Higher values may reduce the number of explicit probes, but a value
larger than the operating system provided guard will leave code vulnerable to
stack clash style attacks.

@item max-cse-path-length

The maximum number of basic blocks on path that CSE considers.
The default is 10.

@item max-cse-insns
The maximum number of instructions CSE processes before flushing.
The default is 1000.

@item ggc-min-expand

GCC uses a garbage collector to manage its own memory allocation.  This
parameter specifies the minimum percentage by which the garbage
collector's heap should be allowed to expand between collections.
Tuning this may improve compilation speed; it has no effect on code
generation.

The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
GCC is not able to calculate RAM on a particular platform, the lower
bound of 30% is used.  Setting this parameter and
@option{ggc-min-heapsize} to zero causes a full collection to occur at
every opportunity.  This is extremely slow, but can be useful for
debugging.

@item ggc-min-heapsize

Minimum size of the garbage collector's heap before it begins bothering
to collect garbage.  The first collection occurs after the heap expands
by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
tuning this may improve compilation speed, and has no effect on code
generation.

The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
with a lower bound of 4096 (four megabytes) and an upper bound of
131072 (128 megabytes).  If GCC is not able to calculate RAM on a
particular platform, the lower bound is used.  Setting this parameter
very large effectively disables garbage collection.  Setting this
parameter and @option{ggc-min-expand} to zero causes a full collection
to occur at every opportunity.

@item max-reload-search-insns
The maximum number of instruction reload should look backward for equivalent
register.  Increasing values mean more aggressive optimization, making the
compilation time increase with probably slightly better performance.
The default value is 100.

@item max-cselib-memory-locations
The maximum number of memory locations cselib should take into account.
Increasing values mean more aggressive optimization, making the compilation time
increase with probably slightly better performance.  The default value is 500.

@item max-sched-ready-insns
The maximum number of instructions ready to be issued the scheduler should
consider at any given time during the first scheduling pass.  Increasing
values mean more thorough searches, making the compilation time increase
with probably little benefit.  The default value is 100.

@item max-sched-region-blocks
The maximum number of blocks in a region to be considered for
interblock scheduling.  The default value is 10.

@item max-pipeline-region-blocks
The maximum number of blocks in a region to be considered for
pipelining in the selective scheduler.  The default value is 15.

@item max-sched-region-insns
The maximum number of insns in a region to be considered for
interblock scheduling.  The default value is 100.

@item max-pipeline-region-insns
The maximum number of insns in a region to be considered for
pipelining in the selective scheduler.  The default value is 200.

@item min-spec-prob
The minimum probability (in percents) of reaching a source block
for interblock speculative scheduling.  The default value is 40.

@item max-sched-extend-regions-iters
The maximum number of iterations through CFG to extend regions.
A value of 0 (the default) disables region extensions.

@item max-sched-insn-conflict-delay
The maximum conflict delay for an insn to be considered for speculative motion.
The default value is 3.

@item sched-spec-prob-cutoff
The minimal probability of speculation success (in percents), so that
speculative insns are scheduled.
The default value is 40.

@item sched-state-edge-prob-cutoff
The minimum probability an edge must have for the scheduler to save its
state across it.
The default value is 10.

@item sched-mem-true-dep-cost
Minimal distance (in CPU cycles) between store and load targeting same
memory locations.  The default value is 1.

@item selsched-max-lookahead
The maximum size of the lookahead window of selective scheduling.  It is a
depth of search for available instructions.
The default value is 50.

@item selsched-max-sched-times
The maximum number of times that an instruction is scheduled during
selective scheduling.  This is the limit on the number of iterations
through which the instruction may be pipelined.  The default value is 2.

@item selsched-insns-to-rename
The maximum number of best instructions in the ready list that are considered
for renaming in the selective scheduler.  The default value is 2.

@item sms-min-sc
The minimum value of stage count that swing modulo scheduler
generates.  The default value is 2.

@item max-last-value-rtl
The maximum size measured as number of RTLs that can be recorded in an expression
in combiner for a pseudo register as last known value of that register.  The default
is 10000.

@item max-combine-insns
The maximum number of instructions the RTL combiner tries to combine.
The default value is 2 at @option{-Og} and 4 otherwise.

@item integer-share-limit
Small integer constants can use a shared data structure, reducing the
compiler's memory usage and increasing its speed.  This sets the maximum
value of a shared integer constant.  The default value is 256.

@item ssp-buffer-size
The minimum size of buffers (i.e.@: arrays) that receive stack smashing
protection when @option{-fstack-protection} is used.

@item min-size-for-stack-sharing
The minimum size of variables taking part in stack slot sharing when not
optimizing. The default value is 32.

@item max-jump-thread-duplication-stmts
Maximum number of statements allowed in a block that needs to be
duplicated when threading jumps.

@item max-fields-for-field-sensitive
Maximum number of fields in a structure treated in
a field sensitive manner during pointer analysis.  The default is zero
for @option{-O0} and @option{-O1},
and 100 for @option{-Os}, @option{-O2}, and @option{-O3}.

@item prefetch-latency
Estimate on average number of instructions that are executed before
prefetch finishes.  The distance prefetched ahead is proportional
to this constant.  Increasing this number may also lead to less
streams being prefetched (see @option{simultaneous-prefetches}).

@item simultaneous-prefetches
Maximum number of prefetches that can run at the same time.

@item l1-cache-line-size
The size of cache line in L1 cache, in bytes.

@item l1-cache-size
The size of L1 cache, in kilobytes.

@item l2-cache-size
The size of L2 cache, in kilobytes.

@item loop-interchange-max-num-stmts
The maximum number of stmts in a loop to be interchanged.

@item loop-interchange-stride-ratio
The minimum ratio between stride of two loops for interchange to be profitable.

@item min-insn-to-prefetch-ratio
The minimum ratio between the number of instructions and the
number of prefetches to enable prefetching in a loop.

@item prefetch-min-insn-to-mem-ratio
The minimum ratio between the number of instructions and the
number of memory references to enable prefetching in a loop.

@item use-canonical-types
Whether the compiler should use the ``canonical'' type system.  By
default, this should always be 1, which uses a more efficient internal
mechanism for comparing types in C++ and Objective-C++.  However, if
bugs in the canonical type system are causing compilation failures,
set this value to 0 to disable canonical types.

@item switch-conversion-max-branch-ratio
Switch initialization conversion refuses to create arrays that are
bigger than @option{switch-conversion-max-branch-ratio} times the number of
branches in the switch.

@item max-partial-antic-length
Maximum length of the partial antic set computed during the tree
partial redundancy elimination optimization (@option{-ftree-pre}) when
optimizing at @option{-O3} and above.  For some sorts of source code
the enhanced partial redundancy elimination optimization can run away,
consuming all of the memory available on the host machine.  This
parameter sets a limit on the length of the sets that are computed,
which prevents the runaway behavior.  Setting a value of 0 for
this parameter allows an unlimited set length.

@item sccvn-max-scc-size
Maximum size of a strongly connected component (SCC) during SCCVN
processing.  If this limit is hit, SCCVN processing for the whole
function is not done and optimizations depending on it are
disabled.  The default maximum SCC size is 10000.

@item sccvn-max-alias-queries-per-access
Maximum number of alias-oracle queries we perform when looking for
redundancies for loads and stores.  If this limit is hit the search
is aborted and the load or store is not considered redundant.  The
number of queries is algorithmically limited to the number of
stores on all paths from the load to the function entry.
The default maximum number of queries is 1000.

@item ira-max-loops-num
IRA uses regional register allocation by default.  If a function
contains more loops than the number given by this parameter, only at most
the given number of the most frequently-executed loops form regions
for regional register allocation.  The default value of the
parameter is 100.

@item ira-max-conflict-table-size 
Although IRA uses a sophisticated algorithm to compress the conflict
table, the table can still require excessive amounts of memory for
huge functions.  If the conflict table for a function could be more
than the size in MB given by this parameter, the register allocator
instead uses a faster, simpler, and lower-quality
algorithm that does not require building a pseudo-register conflict table.  
The default value of the parameter is 2000.

@item ira-loop-reserved-regs
IRA can be used to evaluate more accurate register pressure in loops
for decisions to move loop invariants (see @option{-O3}).  The number
of available registers reserved for some other purposes is given
by this parameter.  The default value of the parameter is 2, which is
the minimal number of registers needed by typical instructions.
This value is the best found from numerous experiments.

@item lra-inheritance-ebb-probability-cutoff
LRA tries to reuse values reloaded in registers in subsequent insns.
This optimization is called inheritance.  EBB is used as a region to
do this optimization.  The parameter defines a minimal fall-through
edge probability in percentage used to add BB to inheritance EBB in
LRA.  The default value of the parameter is 40.  The value was chosen
from numerous runs of SPEC2000 on x86-64.

@item loop-invariant-max-bbs-in-loop
Loop invariant motion can be very expensive, both in compilation time and
in amount of needed compile-time memory, with very large loops.  Loops
with more basic blocks than this parameter won't have loop invariant
motion optimization performed on them.  The default value of the
parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.

@item loop-max-datarefs-for-datadeps
Building data dependencies is expensive for very large loops.  This
parameter limits the number of data references in loops that are
considered for data dependence analysis.  These large loops are no
handled by the optimizations using loop data dependencies.
The default value is 1000.

@item max-vartrack-size
Sets a maximum number of hash table slots to use during variable
tracking dataflow analysis of any function.  If this limit is exceeded
with variable tracking at assignments enabled, analysis for that
function is retried without it, after removing all debug insns from
the function.  If the limit is exceeded even without debug insns, var
tracking analysis is completely disabled for the function.  Setting
the parameter to zero makes it unlimited.

@item max-vartrack-expr-depth
Sets a maximum number of recursion levels when attempting to map
variable names or debug temporaries to value expressions.  This trades
compilation time for more complete debug information.  If this is set too
low, value expressions that are available and could be represented in
debug information may end up not being used; setting this higher may
enable the compiler to find more complex debug expressions, but compile
time and memory use may grow.  The default is 12.

@item max-debug-marker-count
Sets a threshold on the number of debug markers (e.g. begin stmt
markers) to avoid complexity explosion at inlining or expanding to RTL.
If a function has more such gimple stmts than the set limit, such stmts
will be dropped from the inlined copy of a function, and from its RTL
expansion.  The default is 100000.

@item min-nondebug-insn-uid
Use uids starting at this parameter for nondebug insns.  The range below
the parameter is reserved exclusively for debug insns created by
@option{-fvar-tracking-assignments}, but debug insns may get
(non-overlapping) uids above it if the reserved range is exhausted.

@item ipa-sra-ptr-growth-factor
IPA-SRA replaces a pointer to an aggregate with one or more new
parameters only when their cumulative size is less or equal to
@option{ipa-sra-ptr-growth-factor} times the size of the original
pointer parameter.

@item sra-max-scalarization-size-Ospeed
@itemx sra-max-scalarization-size-Osize
The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA) aim to
replace scalar parts of aggregates with uses of independent scalar
variables.  These parameters control the maximum size, in storage units,
of aggregate which is considered for replacement when compiling for
speed
(@option{sra-max-scalarization-size-Ospeed}) or size
(@option{sra-max-scalarization-size-Osize}) respectively.

@item tm-max-aggregate-size
When making copies of thread-local variables in a transaction, this
parameter specifies the size in bytes after which variables are
saved with the logging functions as opposed to save/restore code
sequence pairs.  This option only applies when using
@option{-fgnu-tm}.

@item graphite-max-nb-scop-params
To avoid exponential effects in the Graphite loop transforms, the
number of parameters in a Static Control Part (SCoP) is bounded.  The
default value is 10 parameters, a value of zero can be used to lift
the bound.  A variable whose value is unknown at compilation time and
defined outside a SCoP is a parameter of the SCoP.

@item loop-block-tile-size
Loop blocking or strip mining transforms, enabled with
@option{-floop-block} or @option{-floop-strip-mine}, strip mine each
loop in the loop nest by a given number of iterations.  The strip
length can be changed using the @option{loop-block-tile-size}
parameter.  The default value is 51 iterations.

@item loop-unroll-jam-size
Specify the unroll factor for the @option{-floop-unroll-and-jam} option.  The 
default value is 4.

@item loop-unroll-jam-depth
Specify the dimension to be unrolled (counting from the most inner loop)
for the  @option{-floop-unroll-and-jam}.  The default value is 2.

@item ipa-cp-value-list-size
IPA-CP attempts to track all possible values and types passed to a function's
parameter in order to propagate them and perform devirtualization.
@option{ipa-cp-value-list-size} is the maximum number of values and types it
stores per one formal parameter of a function.

@item ipa-cp-eval-threshold
IPA-CP calculates its own score of cloning profitability heuristics
and performs those cloning opportunities with scores that exceed
@option{ipa-cp-eval-threshold}.

@item ipa-cp-recursion-penalty
Percentage penalty the recursive functions will receive when they
are evaluated for cloning.

@item ipa-cp-single-call-penalty
Percentage penalty functions containing a single call to another
function will receive when they are evaluated for cloning.


@item ipa-max-agg-items
IPA-CP is also capable to propagate a number of scalar values passed
in an aggregate. @option{ipa-max-agg-items} controls the maximum
number of such values per one parameter.

@item ipa-cp-loop-hint-bonus
When IPA-CP determines that a cloning candidate would make the number
of iterations of a loop known, it adds a bonus of
@option{ipa-cp-loop-hint-bonus} to the profitability score of
the candidate.

@item ipa-cp-array-index-hint-bonus
When IPA-CP determines that a cloning candidate would make the index of
an array access known, it adds a bonus of
@option{ipa-cp-array-index-hint-bonus} to the profitability
score of the candidate.

@item ipa-max-aa-steps
During its analysis of function bodies, IPA-CP employs alias analysis
in order to track values pointed to by function parameters.  In order
not spend too much time analyzing huge functions, it gives up and
consider all memory clobbered after examining
@option{ipa-max-aa-steps} statements modifying memory.

@item lto-partitions
Specify desired number of partitions produced during WHOPR compilation.
The number of partitions should exceed the number of CPUs used for compilation.
The default value is 32.

@item lto-min-partition
Size of minimal partition for WHOPR (in estimated instructions).
This prevents expenses of splitting very small programs into too many
partitions.

@item lto-max-partition
Size of max partition for WHOPR (in estimated instructions).
to provide an upper bound for individual size of partition.
Meant to be used only with balanced partitioning.

@item cxx-max-namespaces-for-diagnostic-help
The maximum number of namespaces to consult for suggestions when C++
name lookup fails for an identifier.  The default is 1000.

@item sink-frequency-threshold
The maximum relative execution frequency (in percents) of the target block
relative to a statement's original block to allow statement sinking of a
statement.  Larger numbers result in more aggressive statement sinking.
The default value is 75.  A small positive adjustment is applied for
statements with memory operands as those are even more profitable so sink.

@item max-stores-to-sink
The maximum number of conditional store pairs that can be sunk.  Set to 0
if either vectorization (@option{-ftree-vectorize}) or if-conversion
(@option{-ftree-loop-if-convert}) is disabled.  The default is 2.

@item allow-store-data-races
Allow optimizers to introduce new data races on stores.
Set to 1 to allow, otherwise to 0.  This option is enabled by default
at optimization level @option{-Ofast}.

@item case-values-threshold
The smallest number of different values for which it is best to use a
jump-table instead of a tree of conditional branches.  If the value is
0, use the default for the machine.  The default is 0.

@item tree-reassoc-width
Set the maximum number of instructions executed in parallel in
reassociated tree. This parameter overrides target dependent
heuristics used by default if has non zero value.

@item sched-pressure-algorithm
Choose between the two available implementations of
@option{-fsched-pressure}.  Algorithm 1 is the original implementation
and is the more likely to prevent instructions from being reordered.
Algorithm 2 was designed to be a compromise between the relatively
conservative approach taken by algorithm 1 and the rather aggressive
approach taken by the default scheduler.  It relies more heavily on
having a regular register file and accurate register pressure classes.
See @file{haifa-sched.c} in the GCC sources for more details.

The default choice depends on the target.

@item max-slsr-cand-scan
Set the maximum number of existing candidates that are considered when
seeking a basis for a new straight-line strength reduction candidate.

@item asan-globals
Enable buffer overflow detection for global objects.  This kind
of protection is enabled by default if you are using
@option{-fsanitize=address} option.
To disable global objects protection use @option{--param asan-globals=0}.

@item asan-stack
Enable buffer overflow detection for stack objects.  This kind of
protection is enabled by default when using @option{-fsanitize=address}.
To disable stack protection use @option{--param asan-stack=0} option.

@item asan-instrument-reads
Enable buffer overflow detection for memory reads.  This kind of
protection is enabled by default when using @option{-fsanitize=address}.
To disable memory reads protection use
@option{--param asan-instrument-reads=0}.

@item asan-instrument-writes
Enable buffer overflow detection for memory writes.  This kind of
protection is enabled by default when using @option{-fsanitize=address}.
To disable memory writes protection use
@option{--param asan-instrument-writes=0} option.

@item asan-memintrin
Enable detection for built-in functions.  This kind of protection
is enabled by default when using @option{-fsanitize=address}.
To disable built-in functions protection use
@option{--param asan-memintrin=0}.

@item asan-use-after-return
Enable detection of use-after-return.  This kind of protection
is enabled by default when using the @option{-fsanitize=address} option.
To disable it use @option{--param asan-use-after-return=0}.

Note: By default the check is disabled at run time.  To enable it,
add @code{detect_stack_use_after_return=1} to the environment variable
@env{ASAN_OPTIONS}.

@item asan-instrumentation-with-call-threshold
If number of memory accesses in function being instrumented
is greater or equal to this number, use callbacks instead of inline checks.
E.g. to disable inline code use
@option{--param asan-instrumentation-with-call-threshold=0}.

@item use-after-scope-direct-emission-threshold
If the size of a local variable in bytes is smaller or equal to this
number, directly poison (or unpoison) shadow memory instead of using
run-time callbacks.  The default value is 256.

@item chkp-max-ctor-size
Static constructors generated by Pointer Bounds Checker may become very
large and significantly increase compile time at optimization level
@option{-O1} and higher.  This parameter is a maximum number of statements
in a single generated constructor.  Default value is 5000.

@item max-fsm-thread-path-insns
Maximum number of instructions to copy when duplicating blocks on a
finite state automaton jump thread path.  The default is 100.

@item max-fsm-thread-length
Maximum number of basic blocks on a finite state automaton jump thread
path.  The default is 10.

@item max-fsm-thread-paths
Maximum number of new jump thread paths to create for a finite state
automaton.  The default is 50.

@item parloops-chunk-size
Chunk size of omp schedule for loops parallelized by parloops.  The default
is 0.

@item parloops-schedule
Schedule type of omp schedule for loops parallelized by parloops (static,
dynamic, guided, auto, runtime).  The default is static.

@item parloops-min-per-thread
The minimum number of iterations per thread of an innermost parallelized
loop for which the parallelized variant is prefered over the single threaded
one.  The default is 100.  Note that for a parallelized loop nest the
minimum number of iterations of the outermost loop per thread is two.

@item max-ssa-name-query-depth
Maximum depth of recursion when querying properties of SSA names in things
like fold routines.  One level of recursion corresponds to following a
use-def chain.

@item hsa-gen-debug-stores
Enable emission of special debug stores within HSA kernels which are
then read and reported by libgomp plugin.  Generation of these stores
is disabled by default, use @option{--param hsa-gen-debug-stores=1} to
enable it.

@item max-speculative-devirt-maydefs
The maximum number of may-defs we analyze when looking for a must-def
specifying the dynamic type of an object that invokes a virtual call
we may be able to devirtualize speculatively.

@item max-vrp-switch-assertions
The maximum number of assertions to add along the default edge of a switch
statement during VRP.  The default is 10.

@item unroll-jam-min-percent
The minimum percentage of memory references that must be optimized
away for the unroll-and-jam transformation to be considered profitable.

@item unroll-jam-max-unroll
The maximum number of times the outer loop should be unrolled by
the unroll-and-jam transformation.
@end table
@end table

@node Instrumentation Options
@section Program Instrumentation Options
@cindex instrumentation options
@cindex program instrumentation options
@cindex run-time error checking options
@cindex profiling options
@cindex options, program instrumentation
@cindex options, run-time error checking
@cindex options, profiling

GCC supports a number of command-line options that control adding
run-time instrumentation to the code it normally generates.  
For example, one purpose of instrumentation is collect profiling
statistics for use in finding program hot spots, code coverage
analysis, or profile-guided optimizations.
Another class of program instrumentation is adding run-time checking 
to detect programming errors like invalid pointer
dereferences or out-of-bounds array accesses, as well as deliberately
hostile attacks such as stack smashing or C++ vtable hijacking.
There is also a general hook which can be used to implement other
forms of tracing or function-level instrumentation for debug or
program analysis purposes.

@table @gcctabopt
@cindex @command{prof}
@item -p
@opindex p
Generate extra code to write profile information suitable for the
analysis program @command{prof}.  You must use this option when compiling
the source files you want data about, and you must also use it when
linking.

@cindex @command{gprof}
@item -pg
@opindex pg
Generate extra code to write profile information suitable for the
analysis program @command{gprof}.  You must use this option when compiling
the source files you want data about, and you must also use it when
linking.

@item -fprofile-arcs
@opindex fprofile-arcs
Add code so that program flow @dfn{arcs} are instrumented.  During
execution the program records how many times each branch and call is
executed and how many times it is taken or returns.  On targets that support
constructors with priority support, profiling properly handles constructors,
destructors and C++ constructors (and destructors) of classes which are used
as a type of a global variable.

When the compiled
program exits it saves this data to a file called
@file{@var{auxname}.gcda} for each source file.  The data may be used for
profile-directed optimizations (@option{-fbranch-probabilities}), or for
test coverage analysis (@option{-ftest-coverage}).  Each object file's
@var{auxname} is generated from the name of the output file, if
explicitly specified and it is not the final executable, otherwise it is
the basename of the source file.  In both cases any suffix is removed
(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
@xref{Cross-profiling}.

@cindex @command{gcov}
@item --coverage
@opindex coverage

This option is used to compile and link code instrumented for coverage
analysis.  The option is a synonym for @option{-fprofile-arcs}
@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
linking).  See the documentation for those options for more details.

@itemize

@item
Compile the source files with @option{-fprofile-arcs} plus optimization
and code generation options.  For test coverage analysis, use the
additional @option{-ftest-coverage} option.  You do not need to profile
every source file in a program.

@item
Compile the source files additionally with @option{-fprofile-abs-path}
to create absolute path names in the @file{.gcno} files.  This allows
@command{gcov} to find the correct sources in projects where compilations
occur with different working directories.

@item
Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
(the latter implies the former).

@item
Run the program on a representative workload to generate the arc profile
information.  This may be repeated any number of times.  You can run
concurrent instances of your program, and provided that the file system
supports locking, the data files will be correctly updated.  Unless
a strict ISO C dialect option is in effect, @code{fork} calls are
detected and correctly handled without double counting.

@item
For profile-directed optimizations, compile the source files again with
the same optimization and code generation options plus
@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
Control Optimization}).

@item
For test coverage analysis, use @command{gcov} to produce human readable
information from the @file{.gcno} and @file{.gcda} files.  Refer to the
@command{gcov} documentation for further information.

@end itemize

With @option{-fprofile-arcs}, for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the graph.
Only arcs that are not on the spanning tree have to be instrumented: the
compiler adds code to count the number of times that these arcs are
executed.  When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.

@need 2000
@item -ftest-coverage
@opindex ftest-coverage
Produce a notes file that the @command{gcov} code-coverage utility
(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
show program coverage.  Each source file's note file is called
@file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
above for a description of @var{auxname} and instructions on how to
generate test coverage data.  Coverage data matches the source files
more closely if you do not optimize.

@item -fprofile-abs-path
@opindex fprofile-abs-path
Automatically convert relative source file names to absolute path names
in the @file{.gcno} files.  This allows @command{gcov} to find the correct
sources in projects where compilations occur with different working
directories.

@item -fprofile-dir=@var{path}
@opindex fprofile-dir

Set the directory to search for the profile data files in to @var{path}.
This option affects only the profile data generated by
@option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
and its related options.  Both absolute and relative paths can be used.
By default, GCC uses the current directory as @var{path}, thus the
profile data file appears in the same directory as the object file.

@item -fprofile-generate
@itemx -fprofile-generate=@var{path}
@opindex fprofile-generate

Enable options usually used for instrumenting application to produce
profile useful for later recompilation with profile feedback based
optimization.  You must use @option{-fprofile-generate} both when
compiling and when linking your program.

The following options are enabled: @option{-fprofile-arcs}, @option{-fprofile-values}, @option{-fvpt}.

If @var{path} is specified, GCC looks at the @var{path} to find
the profile feedback data files. See @option{-fprofile-dir}.

To optimize the program based on the collected profile information, use
@option{-fprofile-use}.  @xref{Optimize Options}, for more information.

@item -fprofile-update=@var{method}
@opindex fprofile-update

Alter the update method for an application instrumented for profile
feedback based optimization.  The @var{method} argument should be one of
@samp{single}, @samp{atomic} or @samp{prefer-atomic}.
The first one is useful for single-threaded applications,
while the second one prevents profile corruption by emitting thread-safe code.

@strong{Warning:} When an application does not properly join all threads
(or creates an detached thread), a profile file can be still corrupted.

Using @samp{prefer-atomic} would be transformed either to @samp{atomic},
when supported by a target, or to @samp{single} otherwise.  The GCC driver
automatically selects @samp{prefer-atomic} when @option{-pthread}
is present in the command line.

@item -fsanitize=address
@opindex fsanitize=address
Enable AddressSanitizer, a fast memory error detector.
Memory access instructions are instrumented to detect
out-of-bounds and use-after-free bugs.
The option enables @option{-fsanitize-address-use-after-scope}.
See @uref{https://github.com/google/sanitizers/wiki/AddressSanitizer} for
more details.  The run-time behavior can be influenced using the
@env{ASAN_OPTIONS} environment variable.  When set to @code{help=1},
the available options are shown at startup of the instrumented program.  See
@url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
for a list of supported options.
The option cannot be combined with @option{-fsanitize=thread}
and/or @option{-fcheck-pointer-bounds}.

@item -fsanitize=kernel-address
@opindex fsanitize=kernel-address
Enable AddressSanitizer for Linux kernel.
See @uref{https://github.com/google/kasan/wiki} for more details.
The option cannot be combined with @option{-fcheck-pointer-bounds}.

@item -fsanitize=pointer-compare
@opindex fsanitize=pointer-compare
Instrument comparison operation (<, <=, >, >=) with pointer operands.
The option must be combined with either @option{-fsanitize=kernel-address} or
@option{-fsanitize=address}
The option cannot be combined with @option{-fsanitize=thread}
and/or @option{-fcheck-pointer-bounds}.
Note: By default the check is disabled at run time.  To enable it,
add @code{detect_invalid_pointer_pairs=2} to the environment variable
@env{ASAN_OPTIONS}. Using @code{detect_invalid_pointer_pairs=1} detects
invalid operation only when both pointers are non-null.

@item -fsanitize=pointer-subtract
@opindex fsanitize=pointer-subtract
Instrument subtraction with pointer operands.
The option must be combined with either @option{-fsanitize=kernel-address} or
@option{-fsanitize=address}
The option cannot be combined with @option{-fsanitize=thread}
and/or @option{-fcheck-pointer-bounds}.
Note: By default the check is disabled at run time.  To enable it,
add @code{detect_invalid_pointer_pairs=2} to the environment variable
@env{ASAN_OPTIONS}. Using @code{detect_invalid_pointer_pairs=1} detects
invalid operation only when both pointers are non-null.

@item -fsanitize=thread
@opindex fsanitize=thread
Enable ThreadSanitizer, a fast data race detector.
Memory access instructions are instrumented to detect
data race bugs.  See @uref{https://github.com/google/sanitizers/wiki#threadsanitizer} for more
details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
environment variable; see
@url{https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags} for a list of
supported options.
The option cannot be combined with @option{-fsanitize=address},
@option{-fsanitize=leak} and/or @option{-fcheck-pointer-bounds}.

Note that sanitized atomic builtins cannot throw exceptions when
operating on invalid memory addresses with non-call exceptions
(@option{-fnon-call-exceptions}).

@item -fsanitize=leak
@opindex fsanitize=leak
Enable LeakSanitizer, a memory leak detector.
This option only matters for linking of executables and
the executable is linked against a library that overrides @code{malloc}
and other allocator functions.  See
@uref{https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer} for more
details.  The run-time behavior can be influenced using the
@env{LSAN_OPTIONS} environment variable.
The option cannot be combined with @option{-fsanitize=thread}.

@item -fsanitize=undefined
@opindex fsanitize=undefined
Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
Various computations are instrumented to detect undefined behavior
at runtime.  Current suboptions are:

@table @gcctabopt

@item -fsanitize=shift
@opindex fsanitize=shift
This option enables checking that the result of a shift operation is
not undefined.  Note that what exactly is considered undefined differs
slightly between C and C++, as well as between ISO C90 and C99, etc.
This option has two suboptions, @option{-fsanitize=shift-base} and
@option{-fsanitize=shift-exponent}.

@item -fsanitize=shift-exponent
@opindex fsanitize=shift-exponent
This option enables checking that the second argument of a shift operation
is not negative and is smaller than the precision of the promoted first
argument.

@item -fsanitize=shift-base
@opindex fsanitize=shift-base
If the second argument of a shift operation is within range, check that the
result of a shift operation is not undefined.  Note that what exactly is
considered undefined differs slightly between C and C++, as well as between
ISO C90 and C99, etc.

@item -fsanitize=integer-divide-by-zero
@opindex fsanitize=integer-divide-by-zero
Detect integer division by zero as well as @code{INT_MIN / -1} division.

@item -fsanitize=unreachable
@opindex fsanitize=unreachable
With this option, the compiler turns the @code{__builtin_unreachable}
call into a diagnostics message call instead.  When reaching the
@code{__builtin_unreachable} call, the behavior is undefined.

@item -fsanitize=vla-bound
@opindex fsanitize=vla-bound
This option instructs the compiler to check that the size of a variable
length array is positive.

@item -fsanitize=null
@opindex fsanitize=null
This option enables pointer checking.  Particularly, the application
built with this option turned on will issue an error message when it
tries to dereference a NULL pointer, or if a reference (possibly an
rvalue reference) is bound to a NULL pointer, or if a method is invoked
on an object pointed by a NULL pointer.

@item -fsanitize=return
@opindex fsanitize=return
This option enables return statement checking.  Programs
built with this option turned on will issue an error message
when the end of a non-void function is reached without actually
returning a value.  This option works in C++ only.

@item -fsanitize=signed-integer-overflow
@opindex fsanitize=signed-integer-overflow
This option enables signed integer overflow checking.  We check that
the result of @code{+}, @code{*}, and both unary and binary @code{-}
does not overflow in the signed arithmetics.  Note, integer promotion
rules must be taken into account.  That is, the following is not an
overflow:
@smallexample
signed char a = SCHAR_MAX;
a++;
@end smallexample

@item -fsanitize=bounds
@opindex fsanitize=bounds
This option enables instrumentation of array bounds.  Various out of bounds
accesses are detected.  Flexible array members, flexible array member-like
arrays, and initializers of variables with static storage are not instrumented.
The option cannot be combined with @option{-fcheck-pointer-bounds}.

@item -fsanitize=bounds-strict
@opindex fsanitize=bounds-strict
This option enables strict instrumentation of array bounds.  Most out of bounds
accesses are detected, including flexible array members and flexible array
member-like arrays.  Initializers of variables with static storage are not
instrumented.  The option cannot be combined
with @option{-fcheck-pointer-bounds}.

@item -fsanitize=alignment
@opindex fsanitize=alignment

This option enables checking of alignment of pointers when they are
dereferenced, or when a reference is bound to insufficiently aligned target,
or when a method or constructor is invoked on insufficiently aligned object.

@item -fsanitize=object-size
@opindex fsanitize=object-size
This option enables instrumentation of memory references using the
@code{__builtin_object_size} function.  Various out of bounds pointer
accesses are detected.

@item -fsanitize=float-divide-by-zero
@opindex fsanitize=float-divide-by-zero
Detect floating-point division by zero.  Unlike other similar options,
@option{-fsanitize=float-divide-by-zero} is not enabled by
@option{-fsanitize=undefined}, since floating-point division by zero can
be a legitimate way of obtaining infinities and NaNs.

@item -fsanitize=float-cast-overflow
@opindex fsanitize=float-cast-overflow
This option enables floating-point type to integer conversion checking.
We check that the result of the conversion does not overflow.
Unlike other similar options, @option{-fsanitize=float-cast-overflow} is
not enabled by @option{-fsanitize=undefined}.
This option does not work well with @code{FE_INVALID} exceptions enabled.

@item -fsanitize=nonnull-attribute
@opindex fsanitize=nonnull-attribute

This option enables instrumentation of calls, checking whether null values
are not passed to arguments marked as requiring a non-null value by the
@code{nonnull} function attribute.

@item -fsanitize=returns-nonnull-attribute
@opindex fsanitize=returns-nonnull-attribute

This option enables instrumentation of return statements in functions
marked with @code{returns_nonnull} function attribute, to detect returning
of null values from such functions.

@item -fsanitize=bool
@opindex fsanitize=bool

This option enables instrumentation of loads from bool.  If a value other
than 0/1 is loaded, a run-time error is issued.

@item -fsanitize=enum
@opindex fsanitize=enum

This option enables instrumentation of loads from an enum type.  If
a value outside the range of values for the enum type is loaded,
a run-time error is issued.

@item -fsanitize=vptr
@opindex fsanitize=vptr

This option enables instrumentation of C++ member function calls, member
accesses and some conversions between pointers to base and derived classes,
to verify the referenced object has the correct dynamic type.

@item -fsanitize=pointer-overflow
@opindex fsanitize=pointer-overflow

This option enables instrumentation of pointer arithmetics.  If the pointer
arithmetics overflows, a run-time error is issued.

@item -fsanitize=builtin
@opindex fsanitize=builtin

This option enables instrumentation of arguments to selected builtin
functions.  If an invalid value is passed to such arguments, a run-time
error is issued.  E.g.@ passing 0 as the argument to @code{__builtin_ctz}
or @code{__builtin_clz} invokes undefined behavior and is diagnosed
by this option.

@end table

While @option{-ftrapv} causes traps for signed overflows to be emitted,
@option{-fsanitize=undefined} gives a diagnostic message.
This currently works only for the C family of languages.

@item -fno-sanitize=all
@opindex fno-sanitize=all

This option disables all previously enabled sanitizers.
@option{-fsanitize=all} is not allowed, as some sanitizers cannot be used
together.

@item -fasan-shadow-offset=@var{number}
@opindex fasan-shadow-offset
This option forces GCC to use custom shadow offset in AddressSanitizer checks.
It is useful for experimenting with different shadow memory layouts in
Kernel AddressSanitizer.

@item -fsanitize-sections=@var{s1},@var{s2},...
@opindex fsanitize-sections
Sanitize global variables in selected user-defined sections.  @var{si} may
contain wildcards.

@item -fsanitize-recover@r{[}=@var{opts}@r{]}
@opindex fsanitize-recover
@opindex fno-sanitize-recover
@option{-fsanitize-recover=} controls error recovery mode for sanitizers
mentioned in comma-separated list of @var{opts}.  Enabling this option
for a sanitizer component causes it to attempt to continue
running the program as if no error happened.  This means multiple
runtime errors can be reported in a single program run, and the exit
code of the program may indicate success even when errors
have been reported.  The @option{-fno-sanitize-recover=} option
can be used to alter
this behavior: only the first detected error is reported
and program then exits with a non-zero exit code.

Currently this feature only works for @option{-fsanitize=undefined} (and its suboptions
except for @option{-fsanitize=unreachable} and @option{-fsanitize=return}),
@option{-fsanitize=float-cast-overflow}, @option{-fsanitize=float-divide-by-zero},
@option{-fsanitize=bounds-strict},
@option{-fsanitize=kernel-address} and @option{-fsanitize=address}.
For these sanitizers error recovery is turned on by default,
except @option{-fsanitize=address}, for which this feature is experimental.
@option{-fsanitize-recover=all} and @option{-fno-sanitize-recover=all} is also
accepted, the former enables recovery for all sanitizers that support it,
the latter disables recovery for all sanitizers that support it.

Even if a recovery mode is turned on the compiler side, it needs to be also
enabled on the runtime library side, otherwise the failures are still fatal.
The runtime library defaults to @code{halt_on_error=0} for
ThreadSanitizer and UndefinedBehaviorSanitizer, while default value for
AddressSanitizer is @code{halt_on_error=1}. This can be overridden through
setting the @code{halt_on_error} flag in the corresponding environment variable.

Syntax without an explicit @var{opts} parameter is deprecated.  It is
equivalent to specifying an @var{opts} list of:

@smallexample
undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
@end smallexample

@item -fsanitize-address-use-after-scope
@opindex fsanitize-address-use-after-scope
Enable sanitization of local variables to detect use-after-scope bugs.
The option sets @option{-fstack-reuse} to @samp{none}.

@item -fsanitize-undefined-trap-on-error
@opindex fsanitize-undefined-trap-on-error
The @option{-fsanitize-undefined-trap-on-error} option instructs the compiler to
report undefined behavior using @code{__builtin_trap} rather than
a @code{libubsan} library routine.  The advantage of this is that the
@code{libubsan} library is not needed and is not linked in, so this
is usable even in freestanding environments.

@item -fsanitize-coverage=trace-pc
@opindex fsanitize-coverage=trace-pc
Enable coverage-guided fuzzing code instrumentation.
Inserts a call to @code{__sanitizer_cov_trace_pc} into every basic block.

@item -fsanitize-coverage=trace-cmp
@opindex fsanitize-coverage=trace-cmp
Enable dataflow guided fuzzing code instrumentation.
Inserts a call to @code{__sanitizer_cov_trace_cmp1},
@code{__sanitizer_cov_trace_cmp2}, @code{__sanitizer_cov_trace_cmp4} or
@code{__sanitizer_cov_trace_cmp8} for integral comparison with both operands
variable or @code{__sanitizer_cov_trace_const_cmp1},
@code{__sanitizer_cov_trace_const_cmp2},
@code{__sanitizer_cov_trace_const_cmp4} or
@code{__sanitizer_cov_trace_const_cmp8} for integral comparison with one
operand constant, @code{__sanitizer_cov_trace_cmpf} or
@code{__sanitizer_cov_trace_cmpd} for float or double comparisons and
@code{__sanitizer_cov_trace_switch} for switch statements.

@item -fbounds-check
@opindex fbounds-check
For front ends that support it, generate additional code to check that
indices used to access arrays are within the declared range.  This is
currently only supported by the Fortran front end, where this option
defaults to false.

@item -fcheck-pointer-bounds
@opindex fcheck-pointer-bounds
@opindex fno-check-pointer-bounds
@cindex Pointer Bounds Checker options
Enable Pointer Bounds Checker instrumentation.  Each memory reference
is instrumented with checks of the pointer used for memory access against
bounds associated with that pointer.  

Currently there
is only an implementation for Intel MPX available, thus x86 GNU/Linux target
and @option{-mmpx} are required to enable this feature.  
MPX-based instrumentation requires
a runtime library to enable MPX in hardware and handle bounds
violation signals.  By default when @option{-fcheck-pointer-bounds}
and @option{-mmpx} options are used to link a program, the GCC driver
links against the @file{libmpx} and @file{libmpxwrappers} libraries.
Bounds checking on calls to dynamic libraries requires a linker
with @option{-z bndplt} support; if GCC was configured with a linker
without support for this option (including the Gold linker and older
versions of ld), a warning is given if you link with @option{-mmpx}
without also specifying @option{-static}, since the overall effectiveness
of the bounds checking protection is reduced.
See also @option{-static-libmpxwrappers}.

MPX-based instrumentation
may be used for debugging and also may be included in production code
to increase program security.  Depending on usage, you may
have different requirements for the runtime library.  The current version
of the MPX runtime library is more oriented for use as a debugging
tool.  MPX runtime library usage implies @option{-lpthread}.  See
also @option{-static-libmpx}.  The runtime library  behavior can be
influenced using various @env{CHKP_RT_*} environment variables.  See
@uref{https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler}
for more details.

Generated instrumentation may be controlled by various
@option{-fchkp-*} options and by the @code{bnd_variable_size}
structure field attribute (@pxref{Type Attributes}) and
@code{bnd_legacy}, and @code{bnd_instrument} function attributes
(@pxref{Function Attributes}).  GCC also provides a number of built-in
functions for controlling the Pointer Bounds Checker.  @xref{Pointer
Bounds Checker builtins}, for more information.

@item -fchkp-check-incomplete-type
@opindex fchkp-check-incomplete-type
@opindex fno-chkp-check-incomplete-type
Generate pointer bounds checks for variables with incomplete type.
Enabled by default.

@item -fchkp-narrow-bounds
@opindex fchkp-narrow-bounds
@opindex fno-chkp-narrow-bounds
Controls bounds used by Pointer Bounds Checker for pointers to object
fields.  If narrowing is enabled then field bounds are used.  Otherwise
object bounds are used.  See also @option{-fchkp-narrow-to-innermost-array}
and @option{-fchkp-first-field-has-own-bounds}.  Enabled by default.

@item -fchkp-first-field-has-own-bounds
@opindex fchkp-first-field-has-own-bounds
@opindex fno-chkp-first-field-has-own-bounds
Forces Pointer Bounds Checker to use narrowed bounds for the address of the
first field in the structure.  By default a pointer to the first field has
the same bounds as a pointer to the whole structure.

@item -fchkp-flexible-struct-trailing-arrays
@opindex fchkp-flexible-struct-trailing-arrays
@opindex fno-chkp-flexible-struct-trailing-arrays
Forces Pointer Bounds Checker to treat all trailing arrays in structures as
possibly flexible.  By default only array fields with zero length or that are
marked with attribute bnd_variable_size are treated as flexible.

@item -fchkp-narrow-to-innermost-array
@opindex fchkp-narrow-to-innermost-array
@opindex fno-chkp-narrow-to-innermost-array
Forces Pointer Bounds Checker to use bounds of the innermost arrays in
case of nested static array access.  By default this option is disabled and
bounds of the outermost array are used.

@item -fchkp-optimize
@opindex fchkp-optimize
@opindex fno-chkp-optimize
Enables Pointer Bounds Checker optimizations.  Enabled by default at
optimization levels @option{-O}, @option{-O2}, @option{-O3}.

@item -fchkp-use-fast-string-functions
@opindex fchkp-use-fast-string-functions
@opindex fno-chkp-use-fast-string-functions
Enables use of @code{*_nobnd} versions of string functions (not copying bounds)
by Pointer Bounds Checker.  Disabled by default.

@item -fchkp-use-nochk-string-functions
@opindex fchkp-use-nochk-string-functions
@opindex fno-chkp-use-nochk-string-functions
Enables use of @code{*_nochk} versions of string functions (not checking bounds)
by Pointer Bounds Checker.  Disabled by default.

@item -fchkp-use-static-bounds
@opindex fchkp-use-static-bounds
@opindex fno-chkp-use-static-bounds
Allow Pointer Bounds Checker to generate static bounds holding
bounds of static variables.  Enabled by default.

@item -fchkp-use-static-const-bounds
@opindex fchkp-use-static-const-bounds
@opindex fno-chkp-use-static-const-bounds
Use statically-initialized bounds for constant bounds instead of
generating them each time they are required.  By default enabled when
@option{-fchkp-use-static-bounds} is enabled.

@item -fchkp-treat-zero-dynamic-size-as-infinite
@opindex fchkp-treat-zero-dynamic-size-as-infinite
@opindex fno-chkp-treat-zero-dynamic-size-as-infinite
With this option, objects with incomplete type whose
dynamically-obtained size is zero are treated as having infinite size
instead by Pointer Bounds
Checker.  This option may be helpful if a program is linked with a library
missing size information for some symbols.  Disabled by default.

@item -fchkp-check-read
@opindex fchkp-check-read
@opindex fno-chkp-check-read
Instructs Pointer Bounds Checker to generate checks for all read
accesses to memory.  Enabled by default.

@item -fchkp-check-write
@opindex fchkp-check-write
@opindex fno-chkp-check-write
Instructs Pointer Bounds Checker to generate checks for all write
accesses to memory.  Enabled by default.

@item -fchkp-store-bounds
@opindex fchkp-store-bounds
@opindex fno-chkp-store-bounds
Instructs Pointer Bounds Checker to generate bounds stores for
pointer writes.  Enabled by default.

@item -fchkp-instrument-calls
@opindex fchkp-instrument-calls
@opindex fno-chkp-instrument-calls
Instructs Pointer Bounds Checker to pass pointer bounds to calls.
Enabled by default.

@item -fchkp-instrument-marked-only
@opindex fchkp-instrument-marked-only
@opindex fno-chkp-instrument-marked-only
Instructs Pointer Bounds Checker to instrument only functions
marked with the @code{bnd_instrument} attribute
(@pxref{Function Attributes}).  Disabled by default.

@item -fchkp-use-wrappers
@opindex fchkp-use-wrappers
@opindex fno-chkp-use-wrappers
Allows Pointer Bounds Checker to replace calls to built-in functions
with calls to wrapper functions.  When @option{-fchkp-use-wrappers}
is used to link a program, the GCC driver automatically links
against @file{libmpxwrappers}.  See also @option{-static-libmpxwrappers}.
Enabled by default.

@item -fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{]}
@opindex fcf-protection
Enable code instrumentation of control-flow transfers to increase
program security by checking that target addresses of control-flow
transfer instructions (such as indirect function call, function return,
indirect jump) are valid.  This prevents diverting the flow of control
to an unexpected target.  This is intended to protect against such
threats as Return-oriented Programming (ROP), and similarly
call/jmp-oriented programming (COP/JOP).

The value @code{branch} tells the compiler to implement checking of
validity of control-flow transfer at the point of indirect branch
instructions, i.e. call/jmp instructions.  The value @code{return}
implements checking of validity at the point of returning from a
function.  The value @code{full} is an alias for specifying both
@code{branch} and @code{return}. The value @code{none} turns off
instrumentation.

The macro @code{__CET__} is defined when @option{-fcf-protection} is
used.  The first bit of @code{__CET__} is set to 1 for the value
@code{branch} and the second bit of @code{__CET__} is set to 1 for
the @code{return}.

You can also use the @code{nocf_check} attribute to identify
which functions and calls should be skipped from instrumentation
(@pxref{Function Attributes}).

Currently the x86 GNU/Linux target provides an implementation based
on Intel Control-flow Enforcement Technology (CET).

@item -fstack-protector
@opindex fstack-protector
Emit extra code to check for buffer overflows, such as stack smashing
attacks.  This is done by adding a guard variable to functions with
vulnerable objects.  This includes functions that call @code{alloca}, and
functions with buffers larger than 8 bytes.  The guards are initialized
when a function is entered and then checked when the function exits.
If a guard check fails, an error message is printed and the program exits.

@item -fstack-protector-all
@opindex fstack-protector-all
Like @option{-fstack-protector} except that all functions are protected.

@item -fstack-protector-strong
@opindex fstack-protector-strong
Like @option{-fstack-protector} but includes additional functions to
be protected --- those that have local array definitions, or have
references to local frame addresses.

@item -fstack-protector-explicit
@opindex fstack-protector-explicit
Like @option{-fstack-protector} but only protects those functions which
have the @code{stack_protect} attribute.

@item -fstack-check
@opindex fstack-check
Generate code to verify that you do not go beyond the boundary of the
stack.  You should specify this flag if you are running in an
environment with multiple threads, but you only rarely need to specify it in
a single-threaded environment since stack overflow is automatically
detected on nearly all systems if there is only one stack.

Note that this switch does not actually cause checking to be done; the
operating system or the language runtime must do that.  The switch causes
generation of code to ensure that they see the stack being extended.

You can additionally specify a string parameter: @samp{no} means no
checking, @samp{generic} means force the use of old-style checking,
@samp{specific} means use the best checking method and is equivalent
to bare @option{-fstack-check}.

Old-style checking is a generic mechanism that requires no specific
target support in the compiler but comes with the following drawbacks:

@enumerate
@item
Modified allocation strategy for large objects: they are always
allocated dynamically if their size exceeds a fixed threshold.  Note this
may change the semantics of some code.

@item
Fixed limit on the size of the static frame of functions: when it is
topped by a particular function, stack checking is not reliable and
a warning is issued by the compiler.

@item
Inefficiency: because of both the modified allocation strategy and the
generic implementation, code performance is hampered.
@end enumerate

Note that old-style stack checking is also the fallback method for
@samp{specific} if no target support has been added in the compiler.

@samp{-fstack-check=} is designed for Ada's needs to detect infinite recursion
and stack overflows.  @samp{specific} is an excellent choice when compiling
Ada code.  It is not generally sufficient to protect against stack-clash
attacks.  To protect against those you want @samp{-fstack-clash-protection}.

@item -fstack-clash-protection
@opindex fstack-clash-protection
Generate code to prevent stack clash style attacks.  When this option is
enabled, the compiler will only allocate one page of stack space at a time
and each page is accessed immediately after allocation.  Thus, it prevents
allocations from jumping over any stack guard page provided by the
operating system.

Most targets do not fully support stack clash protection.  However, on
those targets @option{-fstack-clash-protection} will protect dynamic stack
allocations.  @option{-fstack-clash-protection} may also provide limited
protection for static stack allocations if the target supports
@option{-fstack-check=specific}.

@item -fstack-limit-register=@var{reg}
@itemx -fstack-limit-symbol=@var{sym}
@itemx -fno-stack-limit
@opindex fstack-limit-register
@opindex fstack-limit-symbol
@opindex fno-stack-limit
Generate code to ensure that the stack does not grow beyond a certain value,
either the value of a register or the address of a symbol.  If a larger
stack is required, a signal is raised at run time.  For most targets,
the signal is raised before the stack overruns the boundary, so
it is possible to catch the signal without taking special precautions.

For instance, if the stack starts at absolute address @samp{0x80000000}
and grows downwards, you can use the flags
@option{-fstack-limit-symbol=__stack_limit} and
@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
of 128KB@.  Note that this may only work with the GNU linker.

You can locally override stack limit checking by using the
@code{no_stack_limit} function attribute (@pxref{Function Attributes}).

@item -fsplit-stack
@opindex fsplit-stack
Generate code to automatically split the stack before it overflows.
The resulting program has a discontiguous stack which can only
overflow if the program is unable to allocate any more memory.  This
is most useful when running threaded programs, as it is no longer
necessary to calculate a good stack size to use for each thread.  This
is currently only implemented for the x86 targets running
GNU/Linux.

When code compiled with @option{-fsplit-stack} calls code compiled
without @option{-fsplit-stack}, there may not be much stack space
available for the latter code to run.  If compiling all code,
including library code, with @option{-fsplit-stack} is not an option,
then the linker can fix up these calls so that the code compiled
without @option{-fsplit-stack} always has a large stack.  Support for
this is implemented in the gold linker in GNU binutils release 2.21
and later.

@item -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]}
@opindex fvtable-verify
This option is only available when compiling C++ code.
It turns on (or off, if using @option{-fvtable-verify=none}) the security
feature that verifies at run time, for every virtual call, that
the vtable pointer through which the call is made is valid for the type of
the object, and has not been corrupted or overwritten.  If an invalid vtable
pointer is detected at run time, an error is reported and execution of the
program is immediately halted.

This option causes run-time data structures to be built at program startup,
which are used for verifying the vtable pointers.  
The options @samp{std} and @samp{preinit}
control the timing of when these data structures are built.  In both cases the
data structures are built before execution reaches @code{main}.  Using
@option{-fvtable-verify=std} causes the data structures to be built after
shared libraries have been loaded and initialized.
@option{-fvtable-verify=preinit} causes them to be built before shared
libraries have been loaded and initialized.

If this option appears multiple times in the command line with different
values specified, @samp{none} takes highest priority over both @samp{std} and
@samp{preinit}; @samp{preinit} takes priority over @samp{std}.

@item -fvtv-debug
@opindex fvtv-debug
When used in conjunction with @option{-fvtable-verify=std} or 
@option{-fvtable-verify=preinit}, causes debug versions of the 
runtime functions for the vtable verification feature to be called.  
This flag also causes the compiler to log information about which 
vtable pointers it finds for each class.
This information is written to a file named @file{vtv_set_ptr_data.log} 
in the directory named by the environment variable @env{VTV_LOGS_DIR} 
if that is defined or the current working directory otherwise.

Note:  This feature @emph{appends} data to the log file. If you want a fresh log
file, be sure to delete any existing one.

@item -fvtv-counts
@opindex fvtv-counts
This is a debugging flag.  When used in conjunction with
@option{-fvtable-verify=std} or @option{-fvtable-verify=preinit}, this
causes the compiler to keep track of the total number of virtual calls
it encounters and the number of verifications it inserts.  It also
counts the number of calls to certain run-time library functions
that it inserts and logs this information for each compilation unit.
The compiler writes this information to a file named
@file{vtv_count_data.log} in the directory named by the environment
variable @env{VTV_LOGS_DIR} if that is defined or the current working
directory otherwise.  It also counts the size of the vtable pointer sets
for each class, and writes this information to @file{vtv_class_set_sizes.log}
in the same directory.

Note:  This feature @emph{appends} data to the log files.  To get fresh log
files, be sure to delete any existing ones.

@item -finstrument-functions
@opindex finstrument-functions
Generate instrumentation calls for entry and exit to functions.  Just
after function entry and just before function exit, the following
profiling functions are called with the address of the current
function and its call site.  (On some platforms,
@code{__builtin_return_address} does not work beyond the current
function, so the call site information may not be available to the
profiling functions otherwise.)

@smallexample
void __cyg_profile_func_enter (void *this_fn,
                               void *call_site);
void __cyg_profile_func_exit  (void *this_fn,
                               void *call_site);
@end smallexample

The first argument is the address of the start of the current function,
which may be looked up exactly in the symbol table.

This instrumentation is also done for functions expanded inline in other
functions.  The profiling calls indicate where, conceptually, the
inline function is entered and exited.  This means that addressable
versions of such functions must be available.  If all your uses of a
function are expanded inline, this may mean an additional expansion of
code size.  If you use @code{extern inline} in your C code, an
addressable version of such functions must be provided.  (This is
normally the case anyway, but if you get lucky and the optimizer always
expands the functions inline, you might have gotten away without
providing static copies.)

A function may be given the attribute @code{no_instrument_function}, in
which case this instrumentation is not done.  This can be used, for
example, for the profiling functions listed above, high-priority
interrupt routines, and any functions from which the profiling functions
cannot safely be called (perhaps signal handlers, if the profiling
routines generate output or allocate memory).

@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
@opindex finstrument-functions-exclude-file-list

Set the list of functions that are excluded from instrumentation (see
the description of @option{-finstrument-functions}).  If the file that
contains a function definition matches with one of @var{file}, then
that function is not instrumented.  The match is done on substrings:
if the @var{file} parameter is a substring of the file name, it is
considered to be a match.

For example:

@smallexample
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
@end smallexample

@noindent
excludes any inline function defined in files whose pathnames
contain @file{/bits/stl} or @file{include/sys}.

If, for some reason, you want to include letter @samp{,} in one of
@var{sym}, write @samp{\,}. For example,
@option{-finstrument-functions-exclude-file-list='\,\,tmp'}
(note the single quote surrounding the option).

@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
@opindex finstrument-functions-exclude-function-list

This is similar to @option{-finstrument-functions-exclude-file-list},
but this option sets the list of function names to be excluded from
instrumentation.  The function name to be matched is its user-visible
name, such as @code{vector<int> blah(const vector<int> &)}, not the
internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
match is done on substrings: if the @var{sym} parameter is a substring
of the function name, it is considered to be a match.  For C99 and C++
extended identifiers, the function name must be given in UTF-8, not
using universal character names.

@item -fpatchable-function-entry=@var{N}[,@var{M}]
@opindex fpatchable-function-entry
Generate @var{N} NOPs right at the beginning
of each function, with the function entry point before the @var{M}th NOP.
If @var{M} is omitted, it defaults to @code{0} so the
function entry points to the address just at the first NOP.
The NOP instructions reserve extra space which can be used to patch in
any desired instrumentation at run time, provided that the code segment
is writable.  The amount of space is controllable indirectly via
the number of NOPs; the NOP instruction used corresponds to the instruction
emitted by the internal GCC back-end interface @code{gen_nop}.  This behavior
is target-specific and may also depend on the architecture variant and/or
other compilation options.

For run-time identification, the starting addresses of these areas,
which correspond to their respective function entries minus @var{M},
are additionally collected in the @code{__patchable_function_entries}
section of the resulting binary.

Note that the value of @code{__attribute__ ((patchable_function_entry
(N,M)))} takes precedence over command-line option
@option{-fpatchable-function-entry=N,M}.  This can be used to increase
the area size or to remove it completely on a single function.
If @code{N=0}, no pad location is recorded.

The NOP instructions are inserted at---and maybe before, depending on
@var{M}---the function entry address, even before the prologue.

@end table


@node Preprocessor Options
@section Options Controlling the Preprocessor
@cindex preprocessor options
@cindex options, preprocessor

These options control the C preprocessor, which is run on each C source
file before actual compilation.

If you use the @option{-E} option, nothing is done except preprocessing.
Some of these options make sense only together with @option{-E} because
they cause the preprocessor output to be unsuitable for actual
compilation.

In addition to the options listed here, there are a number of options 
to control search paths for include files documented in 
@ref{Directory Options}.  
Options to control preprocessor diagnostics are listed in 
@ref{Warning Options}.

@table @gcctabopt
@include cppopts.texi

@item -Wp,@var{option}
@opindex Wp
You can use @option{-Wp,@var{option}} to bypass the compiler driver
and pass @var{option} directly through to the preprocessor.  If
@var{option} contains commas, it is split into multiple options at the
commas.  However, many options are modified, translated or interpreted
by the compiler driver before being passed to the preprocessor, and
@option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
interface is undocumented and subject to change, so whenever possible
you should avoid using @option{-Wp} and let the driver handle the
options instead.

@item -Xpreprocessor @var{option}
@opindex Xpreprocessor
Pass @var{option} as an option to the preprocessor.  You can use this to
supply system-specific preprocessor options that GCC does not 
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xpreprocessor} twice, once for the option and once for the argument.

@item -no-integrated-cpp
@opindex no-integrated-cpp
Perform preprocessing as a separate pass before compilation.
By default, GCC performs preprocessing as an integrated part of
input tokenization and parsing.
If this option is provided, the appropriate language front end
(@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
and Objective-C, respectively) is instead invoked twice,
once for preprocessing only and once for actual compilation
of the preprocessed input.
This option may be useful in conjunction with the @option{-B} or
@option{-wrapper} options to specify an alternate preprocessor or
perform additional processing of the program source between
normal preprocessing and compilation.

@end table

@node Assembler Options
@section Passing Options to the Assembler

@c prevent bad page break with this line
You can pass options to the assembler.

@table @gcctabopt
@item -Wa,@var{option}
@opindex Wa
Pass @var{option} as an option to the assembler.  If @var{option}
contains commas, it is split into multiple options at the commas.

@item -Xassembler @var{option}
@opindex Xassembler
Pass @var{option} as an option to the assembler.  You can use this to
supply system-specific assembler options that GCC does not
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xassembler} twice, once for the option and once for the argument.

@end table

@node Link Options
@section Options for Linking
@cindex link options
@cindex options, linking

These options come into play when the compiler links object files into
an executable output file.  They are meaningless if the compiler is
not doing a link step.

@table @gcctabopt
@cindex file names
@item @var{object-file-name}
A file name that does not end in a special recognized suffix is
considered to name an object file or library.  (Object files are
distinguished from libraries by the linker according to the file
contents.)  If linking is done, these object files are used as input
to the linker.

@item -c
@itemx -S
@itemx -E
@opindex c
@opindex S
@opindex E
If any of these options is used, then the linker is not run, and
object file names should not be used as arguments.  @xref{Overall
Options}.

@item -fuse-ld=bfd
@opindex fuse-ld=bfd
Use the @command{bfd} linker instead of the default linker.

@item -fuse-ld=gold
@opindex fuse-ld=gold
Use the @command{gold} linker instead of the default linker.

@cindex Libraries
@item -l@var{library}
@itemx -l @var{library}
@opindex l
Search the library named @var{library} when linking.  (The second
alternative with the library as a separate argument is only for
POSIX compliance and is not recommended.)

It makes a difference where in the command you write this option; the
linker searches and processes libraries and object files in the order they
are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
to functions in @samp{z}, those functions may not be loaded.

The linker searches a standard list of directories for the library,
which is actually a file named @file{lib@var{library}.a}.  The linker
then uses this file as if it had been specified precisely by name.

The directories searched include several standard system directories
plus any that you specify with @option{-L}.

Normally the files found this way are library files---archive files
whose members are object files.  The linker handles an archive file by
scanning through it for members which define symbols that have so far
been referenced but not defined.  But if the file that is found is an
ordinary object file, it is linked in the usual fashion.  The only
difference between using an @option{-l} option and specifying a file name
is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
and searches several directories.

@item -lobjc
@opindex lobjc
You need this special case of the @option{-l} option in order to
link an Objective-C or Objective-C++ program.

@item -nostartfiles
@opindex nostartfiles
Do not use the standard system startup files when linking.
The standard system libraries are used normally, unless @option{-nostdlib}
or @option{-nodefaultlibs} is used.

@item -nodefaultlibs
@opindex nodefaultlibs
Do not use the standard system libraries when linking.
Only the libraries you specify are passed to the linker, and options
specifying linkage of the system libraries, such as @option{-static-libgcc}
or @option{-shared-libgcc}, are ignored.  
The standard startup files are used normally, unless @option{-nostartfiles}
is used.  

The compiler may generate calls to @code{memcmp},
@code{memset}, @code{memcpy} and @code{memmove}.
These entries are usually resolved by entries in
libc.  These entry points should be supplied through some other
mechanism when this option is specified.

@item -nostdlib
@opindex nostdlib
Do not use the standard system startup files or libraries when linking.
No startup files and only the libraries you specify are passed to
the linker, and options specifying linkage of the system libraries, such as
@option{-static-libgcc} or @option{-shared-libgcc}, are ignored.

The compiler may generate calls to @code{memcmp}, @code{memset},
@code{memcpy} and @code{memmove}.
These entries are usually resolved by entries in
libc.  These entry points should be supplied through some other
mechanism when this option is specified.

@cindex @option{-lgcc}, use with @option{-nostdlib}
@cindex @option{-nostdlib} and unresolved references
@cindex unresolved references and @option{-nostdlib}
@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
@cindex @option{-nodefaultlibs} and unresolved references
@cindex unresolved references and @option{-nodefaultlibs}
One of the standard libraries bypassed by @option{-nostdlib} and
@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
which GCC uses to overcome shortcomings of particular machines, or special
needs for some languages.
(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
Collection (GCC) Internals},
for more discussion of @file{libgcc.a}.)
In most cases, you need @file{libgcc.a} even when you want to avoid
other standard libraries.  In other words, when you specify @option{-nostdlib}
or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
This ensures that you have no unresolved references to internal GCC
library subroutines.
(An example of such an internal subroutine is @code{__main}, used to ensure C++
constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
GNU Compiler Collection (GCC) Internals}.)

@item -pie
@opindex pie
Produce a dynamically linked position independent executable on targets
that support it.  For predictable results, you must also specify the same
set of options used for compilation (@option{-fpie}, @option{-fPIE},
or model suboptions) when you specify this linker option.

@item -no-pie
@opindex no-pie
Don't produce a dynamically linked position independent executable.

@item -static-pie
@opindex static-pie
Produce a static position independent executable on targets that support
it.  A static position independent executable is similar to a static
executable, but can be loaded at any address without a dynamic linker.
For predictable results, you must also specify the same set of options
used for compilation (@option{-fpie}, @option{-fPIE}, or model
suboptions) when you specify this linker option.

@item -pthread
@opindex pthread
Link with the POSIX threads library.  This option is supported on 
GNU/Linux targets, most other Unix derivatives, and also on 
x86 Cygwin and MinGW targets.  On some targets this option also sets 
flags for the preprocessor, so it should be used consistently for both
compilation and linking.

@item -rdynamic
@opindex rdynamic
Pass the flag @option{-export-dynamic} to the ELF linker, on targets
that support it. This instructs the linker to add all symbols, not
only used ones, to the dynamic symbol table. This option is needed
for some uses of @code{dlopen} or to allow obtaining backtraces
from within a program.

@item -s
@opindex s
Remove all symbol table and relocation information from the executable.

@item -static
@opindex static
On systems that support dynamic linking, this overrides @option{-pie}
and prevents linking with the shared libraries.  On other systems, this
option has no effect.

@item -shared
@opindex shared
Produce a shared object which can then be linked with other objects to
form an executable.  Not all systems support this option.  For predictable
results, you must also specify the same set of options used for compilation
(@option{-fpic}, @option{-fPIC}, or model suboptions) when
you specify this linker option.@footnote{On some systems, @samp{gcc -shared}
needs to build supplementary stub code for constructors to work.  On
multi-libbed systems, @samp{gcc -shared} must select the correct support
libraries to link against.  Failing to supply the correct flags may lead
to subtle defects.  Supplying them in cases where they are not necessary
is innocuous.}

@item -shared-libgcc
@itemx -static-libgcc
@opindex shared-libgcc
@opindex static-libgcc
On systems that provide @file{libgcc} as a shared library, these options
force the use of either the shared or static version, respectively.
If no shared version of @file{libgcc} was built when the compiler was
configured, these options have no effect.

There are several situations in which an application should use the
shared @file{libgcc} instead of the static version.  The most common
of these is when the application wishes to throw and catch exceptions
across different shared libraries.  In that case, each of the libraries
as well as the application itself should use the shared @file{libgcc}.

Therefore, the G++ driver automatically adds @option{-shared-libgcc}
whenever you build a shared library or a main executable, because C++
programs typically use exceptions, so this is the right thing to do.

If, instead, you use the GCC driver to create shared libraries, you may
find that they are not always linked with the shared @file{libgcc}.
If GCC finds, at its configuration time, that you have a non-GNU linker
or a GNU linker that does not support option @option{--eh-frame-hdr},
it links the shared version of @file{libgcc} into shared libraries
by default.  Otherwise, it takes advantage of the linker and optimizes
away the linking with the shared version of @file{libgcc}, linking with
the static version of libgcc by default.  This allows exceptions to
propagate through such shared libraries, without incurring relocation
costs at library load time.

However, if a library or main executable is supposed to throw or catch
exceptions, you must link it using the G++ driver, or using the option
@option{-shared-libgcc}, such that it is linked with the shared
@file{libgcc}.

@item -static-libasan
@opindex static-libasan
When the @option{-fsanitize=address} option is used to link a program,
the GCC driver automatically links against @option{libasan}.  If
@file{libasan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{libasan}.  The @option{-static-libasan} option directs the GCC
driver to link @file{libasan} statically, without necessarily linking
other libraries statically.

@item -static-libtsan
@opindex static-libtsan
When the @option{-fsanitize=thread} option is used to link a program,
the GCC driver automatically links against @option{libtsan}.  If
@file{libtsan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{libtsan}.  The @option{-static-libtsan} option directs the GCC
driver to link @file{libtsan} statically, without necessarily linking
other libraries statically.

@item -static-liblsan
@opindex static-liblsan
When the @option{-fsanitize=leak} option is used to link a program,
the GCC driver automatically links against @option{liblsan}.  If
@file{liblsan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{liblsan}.  The @option{-static-liblsan} option directs the GCC
driver to link @file{liblsan} statically, without necessarily linking
other libraries statically.

@item -static-libubsan
@opindex static-libubsan
When the @option{-fsanitize=undefined} option is used to link a program,
the GCC driver automatically links against @option{libubsan}.  If
@file{libubsan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{libubsan}.  The @option{-static-libubsan} option directs the GCC
driver to link @file{libubsan} statically, without necessarily linking
other libraries statically.

@item -static-libmpx
@opindex static-libmpx
When the @option{-fcheck-pointer bounds} and @option{-mmpx} options are
used to link a program, the GCC driver automatically links against
@file{libmpx}.  If @file{libmpx} is available as a shared library,
and the @option{-static} option is not used, then this links against
the shared version of @file{libmpx}.  The @option{-static-libmpx}
option directs the GCC driver to link @file{libmpx} statically,
without necessarily linking other libraries statically.

@item -static-libmpxwrappers
@opindex static-libmpxwrappers
When the @option{-fcheck-pointer bounds} and @option{-mmpx} options are used
to link a program without also using @option{-fno-chkp-use-wrappers}, the
GCC driver automatically links against @file{libmpxwrappers}.  If
@file{libmpxwrappers} is available as a shared library, and the
@option{-static} option is not used, then this links against the shared
version of @file{libmpxwrappers}.  The @option{-static-libmpxwrappers}
option directs the GCC driver to link @file{libmpxwrappers} statically,
without necessarily linking other libraries statically.

@item -static-libstdc++
@opindex static-libstdc++
When the @command{g++} program is used to link a C++ program, it
normally automatically links against @option{libstdc++}.  If
@file{libstdc++} is available as a shared library, and the
@option{-static} option is not used, then this links against the
shared version of @file{libstdc++}.  That is normally fine.  However, it
is sometimes useful to freeze the version of @file{libstdc++} used by
the program without going all the way to a fully static link.  The
@option{-static-libstdc++} option directs the @command{g++} driver to
link @file{libstdc++} statically, without necessarily linking other
libraries statically.

@item -symbolic
@opindex symbolic
Bind references to global symbols when building a shared object.  Warn
about any unresolved references (unless overridden by the link editor
option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
this option.

@item -T @var{script}
@opindex T
@cindex linker script
Use @var{script} as the linker script.  This option is supported by most
systems using the GNU linker.  On some targets, such as bare-board
targets without an operating system, the @option{-T} option may be required
when linking to avoid references to undefined symbols.

@item -Xlinker @var{option}
@opindex Xlinker
Pass @var{option} as an option to the linker.  You can use this to
supply system-specific linker options that GCC does not recognize.

If you want to pass an option that takes a separate argument, you must use
@option{-Xlinker} twice, once for the option and once for the argument.
For example, to pass @option{-assert definitions}, you must write
@option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
@option{-Xlinker "-assert definitions"}, because this passes the entire
string as a single argument, which is not what the linker expects.

When using the GNU linker, it is usually more convenient to pass
arguments to linker options using the @option{@var{option}=@var{value}}
syntax than as separate arguments.  For example, you can specify
@option{-Xlinker -Map=output.map} rather than
@option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
this syntax for command-line options.

@item -Wl,@var{option}
@opindex Wl
Pass @var{option} as an option to the linker.  If @var{option} contains
commas, it is split into multiple options at the commas.  You can use this
syntax to pass an argument to the option.
For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
linker.  When using the GNU linker, you can also get the same effect with
@option{-Wl,-Map=output.map}.

@item -u @var{symbol}
@opindex u
Pretend the symbol @var{symbol} is undefined, to force linking of
library modules to define it.  You can use @option{-u} multiple times with
different symbols to force loading of additional library modules.

@item -z @var{keyword}
@opindex z
@option{-z} is passed directly on to the linker along with the keyword
@var{keyword}. See the section in the documentation of your linker for
permitted values and their meanings.
@end table

@node Directory Options
@section Options for Directory Search
@cindex directory options
@cindex options, directory search
@cindex search path

These options specify directories to search for header files, for
libraries and for parts of the compiler:

@table @gcctabopt
@include cppdiropts.texi

@item -iplugindir=@var{dir}
@opindex iplugindir=
Set the directory to search for plugins that are passed
by @option{-fplugin=@var{name}} instead of
@option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
to be used by the user, but only passed by the driver.

@item -L@var{dir}
@opindex L
Add directory @var{dir} to the list of directories to be searched
for @option{-l}.

@item -B@var{prefix}
@opindex B
This option specifies where to find the executables, libraries,
include files, and data files of the compiler itself.

The compiler driver program runs one or more of the subprograms
@command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
@var{prefix} as a prefix for each program it tries to run, both with and
without @samp{@var{machine}/@var{version}/} for the corresponding target
machine and compiler version.

For each subprogram to be run, the compiler driver first tries the
@option{-B} prefix, if any.  If that name is not found, or if @option{-B}
is not specified, the driver tries two standard prefixes, 
@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
those results in a file name that is found, the unmodified program
name is searched for using the directories specified in your
@env{PATH} environment variable.

The compiler checks to see if the path provided by @option{-B}
refers to a directory, and if necessary it adds a directory
separator character at the end of the path.

@option{-B} prefixes that effectively specify directory names also apply
to libraries in the linker, because the compiler translates these
options into @option{-L} options for the linker.  They also apply to
include files in the preprocessor, because the compiler translates these
options into @option{-isystem} options for the preprocessor.  In this case,
the compiler appends @samp{include} to the prefix.

The runtime support file @file{libgcc.a} can also be searched for using
the @option{-B} prefix, if needed.  If it is not found there, the two
standard prefixes above are tried, and that is all.  The file is left
out of the link if it is not found by those means.

Another way to specify a prefix much like the @option{-B} prefix is to use
the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
Variables}.

As a special kludge, if the path provided by @option{-B} is
@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
9, then it is replaced by @file{[dir/]include}.  This is to help
with boot-strapping the compiler.

@item -no-canonical-prefixes
@opindex no-canonical-prefixes
Do not expand any symbolic links, resolve references to @samp{/../}
or @samp{/./}, or make the path absolute when generating a relative
prefix.

@item --sysroot=@var{dir}
@opindex sysroot
Use @var{dir} as the logical root directory for headers and libraries.
For example, if the compiler normally searches for headers in
@file{/usr/include} and libraries in @file{/usr/lib}, it instead
searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.

If you use both this option and the @option{-isysroot} option, then
the @option{--sysroot} option applies to libraries, but the
@option{-isysroot} option applies to header files.

The GNU linker (beginning with version 2.16) has the necessary support
for this option.  If your linker does not support this option, the
header file aspect of @option{--sysroot} still works, but the
library aspect does not.

@item --no-sysroot-suffix
@opindex no-sysroot-suffix
For some targets, a suffix is added to the root directory specified
with @option{--sysroot}, depending on the other options used, so that
headers may for example be found in
@file{@var{dir}/@var{suffix}/usr/include} instead of
@file{@var{dir}/usr/include}.  This option disables the addition of
such a suffix.

@end table

@node Code Gen Options
@section Options for Code Generation Conventions
@cindex code generation conventions
@cindex options, code generation
@cindex run-time options

These machine-independent options control the interface conventions
used in code generation.

Most of them have both positive and negative forms; the negative form
of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
one of the forms is listed---the one that is not the default.  You
can figure out the other form by either removing @samp{no-} or adding
it.

@table @gcctabopt
@item -fstack-reuse=@var{reuse-level}
@opindex fstack_reuse
This option controls stack space reuse for user declared local/auto variables
and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
@samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
local variables and temporaries, @samp{named_vars} enables the reuse only for
user defined local variables with names, and @samp{none} disables stack reuse
completely. The default value is @samp{all}. The option is needed when the
program extends the lifetime of a scoped local variable or a compiler generated
temporary beyond the end point defined by the language.  When a lifetime of
a variable ends, and if the variable lives in memory, the optimizing compiler
has the freedom to reuse its stack space with other temporaries or scoped
local variables whose live range does not overlap with it. Legacy code extending
local lifetime is likely to break with the stack reuse optimization.

For example,

@smallexample
   int *p;
   @{
     int local1;

     p = &local1;
     local1 = 10;
     ....
   @}
   @{
      int local2;
      local2 = 20;
      ...
   @}

   if (*p == 10)  // out of scope use of local1
     @{

     @}
@end smallexample

Another example:
@smallexample

   struct A
   @{
       A(int k) : i(k), j(k) @{ @}
       int i;
       int j;
   @};

   A *ap;

   void foo(const A& ar)
   @{
      ap = &ar;
   @}

   void bar()
   @{
      foo(A(10)); // temp object's lifetime ends when foo returns

      @{
        A a(20);
        ....
      @}
      ap->i+= 10;  // ap references out of scope temp whose space
                   // is reused with a. What is the value of ap->i?
   @}

@end smallexample

The lifetime of a compiler generated temporary is well defined by the C++
standard. When a lifetime of a temporary ends, and if the temporary lives
in memory, the optimizing compiler has the freedom to reuse its stack
space with other temporaries or scoped local variables whose live range
does not overlap with it. However some of the legacy code relies on
the behavior of older compilers in which temporaries' stack space is
not reused, the aggressive stack reuse can lead to runtime errors. This
option is used to control the temporary stack reuse optimization.

@item -ftrapv
@opindex ftrapv
This option generates traps for signed overflow on addition, subtraction,
multiplication operations.
The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
@option{-ftrapv} @option{-fwrapv} on the command-line results in
@option{-fwrapv} being effective.  Note that only active options override, so
using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
results in @option{-ftrapv} being effective.

@item -fwrapv
@opindex fwrapv
This option instructs the compiler to assume that signed arithmetic
overflow of addition, subtraction and multiplication wraps around
using twos-complement representation.  This flag enables some optimizations
and disables others.
The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
@option{-ftrapv} @option{-fwrapv} on the command-line results in
@option{-fwrapv} being effective.  Note that only active options override, so
using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
results in @option{-ftrapv} being effective.

@item -fwrapv-pointer
@opindex fwrapv-pointer
This option instructs the compiler to assume that pointer arithmetic
overflow on addition and subtraction wraps around using twos-complement
representation.  This flag disables some optimizations which assume
pointer overflow is invalid.

@item -fstrict-overflow
@opindex fstrict-overflow
This option implies @option{-fno-wrapv} @option{-fno-wrapv-pointer} and when
negated implies @option{-fwrapv} @option{-fwrapv-pointer}.

@item -fexceptions
@opindex fexceptions
Enable exception handling.  Generates extra code needed to propagate
exceptions.  For some targets, this implies GCC generates frame
unwind information for all functions, which can produce significant data
size overhead, although it does not affect execution.  If you do not
specify this option, GCC enables it by default for languages like
C++ that normally require exception handling, and disables it for
languages like C that do not normally require it.  However, you may need
to enable this option when compiling C code that needs to interoperate
properly with exception handlers written in C++.  You may also wish to
disable this option if you are compiling older C++ programs that don't
use exception handling.

@item -fnon-call-exceptions
@opindex fnon-call-exceptions
Generate code that allows trapping instructions to throw exceptions.
Note that this requires platform-specific runtime support that does
not exist everywhere.  Moreover, it only allows @emph{trapping}
instructions to throw exceptions, i.e.@: memory references or floating-point
instructions.  It does not allow exceptions to be thrown from
arbitrary signal handlers such as @code{SIGALRM}.

@item -fdelete-dead-exceptions
@opindex fdelete-dead-exceptions
Consider that instructions that may throw exceptions but don't otherwise
contribute to the execution of the program can be optimized away.
This option is enabled by default for the Ada front end, as permitted by
the Ada language specification.
Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.

@item -funwind-tables
@opindex funwind-tables
Similar to @option{-fexceptions}, except that it just generates any needed
static data, but does not affect the generated code in any other way.
You normally do not need to enable this option; instead, a language processor
that needs this handling enables it on your behalf.

@item -fasynchronous-unwind-tables
@opindex fasynchronous-unwind-tables
Generate unwind table in DWARF format, if supported by target machine.  The
table is exact at each instruction boundary, so it can be used for stack
unwinding from asynchronous events (such as debugger or garbage collector).

@item -fno-gnu-unique
@opindex fno-gnu-unique
On systems with recent GNU assembler and C library, the C++ compiler
uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions
of template static data members and static local variables in inline
functions are unique even in the presence of @code{RTLD_LOCAL}; this
is necessary to avoid problems with a library used by two different
@code{RTLD_LOCAL} plugins depending on a definition in one of them and
therefore disagreeing with the other one about the binding of the
symbol.  But this causes @code{dlclose} to be ignored for affected
DSOs; if your program relies on reinitialization of a DSO via
@code{dlclose} and @code{dlopen}, you can use
@option{-fno-gnu-unique}.

@item -fpcc-struct-return
@opindex fpcc-struct-return
Return ``short'' @code{struct} and @code{union} values in memory like
longer ones, rather than in registers.  This convention is less
efficient, but it has the advantage of allowing intercallability between
GCC-compiled files and files compiled with other compilers, particularly
the Portable C Compiler (pcc).

The precise convention for returning structures in memory depends
on the target configuration macros.

Short structures and unions are those whose size and alignment match
that of some integer type.

@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
switch is not binary compatible with code compiled with the
@option{-freg-struct-return} switch.
Use it to conform to a non-default application binary interface.

@item -freg-struct-return
@opindex freg-struct-return
Return @code{struct} and @code{union} values in registers when possible.
This is more efficient for small structures than
@option{-fpcc-struct-return}.

If you specify neither @option{-fpcc-struct-return} nor
@option{-freg-struct-return}, GCC defaults to whichever convention is
standard for the target.  If there is no standard convention, GCC
defaults to @option{-fpcc-struct-return}, except on targets where GCC is
the principal compiler.  In those cases, we can choose the standard, and
we chose the more efficient register return alternative.

@strong{Warning:} code compiled with the @option{-freg-struct-return}
switch is not binary compatible with code compiled with the
@option{-fpcc-struct-return} switch.
Use it to conform to a non-default application binary interface.

@item -fshort-enums
@opindex fshort-enums
Allocate to an @code{enum} type only as many bytes as it needs for the
declared range of possible values.  Specifically, the @code{enum} type
is equivalent to the smallest integer type that has enough room.

@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fshort-wchar
@opindex fshort-wchar
Override the underlying type for @code{wchar_t} to be @code{short
unsigned int} instead of the default for the target.  This option is
useful for building programs to run under WINE@.

@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fno-common
@opindex fno-common
@cindex tentative definitions
In C code, this option controls the placement of global variables 
defined without an initializer, known as @dfn{tentative definitions} 
in the C standard.  Tentative definitions are distinct from declarations 
of a variable with the @code{extern} keyword, which do not allocate storage.

Unix C compilers have traditionally allocated storage for
uninitialized global variables in a common block.  This allows the
linker to resolve all tentative definitions of the same variable
in different compilation units to the same object, or to a non-tentative
definition.  
This is the behavior specified by @option{-fcommon}, and is the default for 
GCC on most targets.  
On the other hand, this behavior is not required by ISO
C, and on some targets may carry a speed or code size penalty on
variable references.

The @option{-fno-common} option specifies that the compiler should instead
place uninitialized global variables in the data section of the object file.
This inhibits the merging of tentative definitions by the linker so
you get a multiple-definition error if the same 
variable is defined in more than one compilation unit.
Compiling with @option{-fno-common} is useful on targets for which
it provides better performance, or if you wish to verify that the
program will work on other systems that always treat uninitialized
variable definitions this way.

@item -fno-ident
@opindex fno-ident
Ignore the @code{#ident} directive.

@item -finhibit-size-directive
@opindex finhibit-size-directive
Don't output a @code{.size} assembler directive, or anything else that
would cause trouble if the function is split in the middle, and the
two halves are placed at locations far apart in memory.  This option is
used when compiling @file{crtstuff.c}; you should not need to use it
for anything else.

@item -fverbose-asm
@opindex fverbose-asm
Put extra commentary information in the generated assembly code to
make it more readable.  This option is generally only of use to those
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).

@option{-fno-verbose-asm}, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.

The added comments include:

@itemize @bullet

@item
information on the compiler version and command-line options,

@item
the source code lines associated with the assembly instructions,
in the form FILENAME:LINENUMBER:CONTENT OF LINE,

@item
hints on which high-level expressions correspond to
the various assembly instruction operands.

@end itemize

For example, given this C source file:

@smallexample
int test (int n)
@{
  int i;
  int total = 0;

  for (i = 0; i < n; i++)
    total += i * i;

  return total;
@}
@end smallexample

compiling to (x86_64) assembly via @option{-S} and emitting the result
direct to stdout via @option{-o} @option{-}

@smallexample
gcc -S test.c -fverbose-asm -Os -o -
@end smallexample

gives output similar to this:

@smallexample
	.file	"test.c"
# GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
  [...snip...]
# options passed:
  [...snip...]

	.text
	.globl	test
	.type	test, @@function
test:
.LFB0:
	.cfi_startproc
# test.c:4:   int total = 0;
	xorl	%eax, %eax	# <retval>
# test.c:6:   for (i = 0; i < n; i++)
	xorl	%edx, %edx	# i
.L2:
# test.c:6:   for (i = 0; i < n; i++)
	cmpl	%edi, %edx	# n, i
	jge	.L5	#,
# test.c:7:     total += i * i;
	movl	%edx, %ecx	# i, tmp92
	imull	%edx, %ecx	# i, tmp92
# test.c:6:   for (i = 0; i < n; i++)
	incl	%edx	# i
# test.c:7:     total += i * i;
	addl	%ecx, %eax	# tmp92, <retval>
	jmp	.L2	#
.L5:
# test.c:10: @}
	ret
	.cfi_endproc
.LFE0:
	.size	test, .-test
	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
	.section	.note.GNU-stack,"",@@progbits
@end smallexample

The comments are intended for humans rather than machines and hence the
precise format of the comments is subject to change.

@item -frecord-gcc-switches
@opindex frecord-gcc-switches
This switch causes the command line used to invoke the
compiler to be recorded into the object file that is being created.
This switch is only implemented on some targets and the exact format
of the recording is target and binary file format dependent, but it
usually takes the form of a section containing ASCII text.  This
switch is related to the @option{-fverbose-asm} switch, but that
switch only records information in the assembler output file as
comments, so it never reaches the object file.
See also @option{-grecord-gcc-switches} for another
way of storing compiler options into the object file.

@item -fpic
@opindex fpic
@cindex global offset table
@cindex PIC
Generate position-independent code (PIC) suitable for use in a shared
library, if supported for the target machine.  Such code accesses all
constant addresses through a global offset table (GOT)@.  The dynamic
loader resolves the GOT entries when the program starts (the dynamic
loader is not part of GCC; it is part of the operating system).  If
the GOT size for the linked executable exceeds a machine-specific
maximum size, you get an error message from the linker indicating that
@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
instead.  (These maximums are 8k on the SPARC, 28k on AArch64 and 32k
on the m68k and RS/6000.  The x86 has no such limit.)

Position-independent code requires special support, and therefore works
only on certain machines.  For the x86, GCC supports PIC for System V
but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
position-independent.

When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 1.

@item -fPIC
@opindex fPIC
If supported for the target machine, emit position-independent code,
suitable for dynamic linking and avoiding any limit on the size of the
global offset table.  This option makes a difference on AArch64, m68k,
PowerPC and SPARC@.

Position-independent code requires special support, and therefore works
only on certain machines.

When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 2.

@item -fpie
@itemx -fPIE
@opindex fpie
@opindex fPIE
These options are similar to @option{-fpic} and @option{-fPIC}, but
generated position independent code can be only linked into executables.
Usually these options are used when @option{-pie} GCC option is
used during linking.

@option{-fpie} and @option{-fPIE} both define the macros
@code{__pie__} and @code{__PIE__}.  The macros have the value 1
for @option{-fpie} and 2 for @option{-fPIE}.

@item -fno-plt
@opindex fno-plt
Do not use the PLT for external function calls in position-independent code.
Instead, load the callee address at call sites from the GOT and branch to it.
This leads to more efficient code by eliminating PLT stubs and exposing
GOT loads to optimizations.  On architectures such as 32-bit x86 where
PLT stubs expect the GOT pointer in a specific register, this gives more
register allocation freedom to the compiler.
Lazy binding requires use of the PLT; 
with @option{-fno-plt} all external symbols are resolved at load time.

Alternatively, the function attribute @code{noplt} can be used to avoid calls
through the PLT for specific external functions.

In position-dependent code, a few targets also convert calls to
functions that are marked to not use the PLT to use the GOT instead.

@item -fno-jump-tables
@opindex fno-jump-tables
Do not use jump tables for switch statements even where it would be
more efficient than other code generation strategies.  This option is
of use in conjunction with @option{-fpic} or @option{-fPIC} for
building code that forms part of a dynamic linker and cannot
reference the address of a jump table.  On some targets, jump tables
do not require a GOT and this option is not needed.

@item -ffixed-@var{reg}
@opindex ffixed
Treat the register named @var{reg} as a fixed register; generated code
should never refer to it (except perhaps as a stack pointer, frame
pointer or in some other fixed role).

@var{reg} must be the name of a register.  The register names accepted
are machine-specific and are defined in the @code{REGISTER_NAMES}
macro in the machine description macro file.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-used-@var{reg}
@opindex fcall-used
Treat the register named @var{reg} as an allocable register that is
clobbered by function calls.  It may be allocated for temporaries or
variables that do not live across a call.  Functions compiled this way
do not save and restore the register @var{reg}.

It is an error to use this flag with the frame pointer or stack pointer.
Use of this flag for other registers that have fixed pervasive roles in
the machine's execution model produces disastrous results.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-saved-@var{reg}
@opindex fcall-saved
Treat the register named @var{reg} as an allocable register saved by
functions.  It may be allocated even for temporaries or variables that
live across a call.  Functions compiled this way save and restore
the register @var{reg} if they use it.

It is an error to use this flag with the frame pointer or stack pointer.
Use of this flag for other registers that have fixed pervasive roles in
the machine's execution model produces disastrous results.

A different sort of disaster results from the use of this flag for
a register in which function values may be returned.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fpack-struct[=@var{n}]
@opindex fpack-struct
Without a value specified, pack all structure members together without
holes.  When a value is specified (which must be a small power of two), pack
structure members according to this value, representing the maximum
alignment (that is, objects with default alignment requirements larger than
this are output potentially unaligned at the next fitting location.

@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Additionally, it makes the code suboptimal.
Use it to conform to a non-default application binary interface.

@item -fleading-underscore
@opindex fleading-underscore
This option and its counterpart, @option{-fno-leading-underscore}, forcibly
change the way C symbols are represented in the object file.  One use
is to help link with legacy assembly code.

@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
generate code that is not binary compatible with code generated without that
switch.  Use it to conform to a non-default application binary interface.
Not all targets provide complete support for this switch.

@item -ftls-model=@var{model}
@opindex ftls-model
Alter the thread-local storage model to be used (@pxref{Thread-Local}).
The @var{model} argument should be one of @samp{global-dynamic},
@samp{local-dynamic}, @samp{initial-exec} or @samp{local-exec}.
Note that the choice is subject to optimization: the compiler may use
a more efficient model for symbols not visible outside of the translation
unit, or if @option{-fpic} is not given on the command line.

The default without @option{-fpic} is @samp{initial-exec}; with
@option{-fpic} the default is @samp{global-dynamic}.

@item -ftrampolines
@opindex ftrampolines
For targets that normally need trampolines for nested functions, always
generate them instead of using descriptors.  Otherwise, for targets that
do not need them, like for example HP-PA or IA-64, do nothing.

A trampoline is a small piece of code that is created at run time on the
stack when the address of a nested function is taken, and is used to call
the nested function indirectly.  Therefore, it requires the stack to be
made executable in order for the program to work properly.

@option{-fno-trampolines} is enabled by default on a language by language
basis to let the compiler avoid generating them, if it computes that this
is safe, and replace them with descriptors.  Descriptors are made up of data
only, but the generated code must be prepared to deal with them.  As of this
writing, @option{-fno-trampolines} is enabled by default only for Ada.

Moreover, code compiled with @option{-ftrampolines} and code compiled with
@option{-fno-trampolines} are not binary compatible if nested functions are
present.  This option must therefore be used on a program-wide basis and be
manipulated with extreme care.

@item -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]}
@opindex fvisibility
Set the default ELF image symbol visibility to the specified option---all
symbols are marked with this unless overridden within the code.
Using this feature can very substantially improve linking and
load times of shared object libraries, produce more optimized
code, provide near-perfect API export and prevent symbol clashes.
It is @strong{strongly} recommended that you use this in any shared objects
you distribute.

Despite the nomenclature, @samp{default} always means public; i.e.,
available to be linked against from outside the shared object.
@samp{protected} and @samp{internal} are pretty useless in real-world
usage so the only other commonly used option is @samp{hidden}.
The default if @option{-fvisibility} isn't specified is
@samp{default}, i.e., make every symbol public.

A good explanation of the benefits offered by ensuring ELF
symbols have the correct visibility is given by ``How To Write
Shared Libraries'' by Ulrich Drepper (which can be found at
@w{@uref{https://www.akkadia.org/drepper/}})---however a superior
solution made possible by this option to marking things hidden when
the default is public is to make the default hidden and mark things
public.  This is the norm with DLLs on Windows and with @option{-fvisibility=hidden}
and @code{__attribute__ ((visibility("default")))} instead of
@code{__declspec(dllexport)} you get almost identical semantics with
identical syntax.  This is a great boon to those working with
cross-platform projects.

For those adding visibility support to existing code, you may find
@code{#pragma GCC visibility} of use.  This works by you enclosing
the declarations you wish to set visibility for with (for example)
@code{#pragma GCC visibility push(hidden)} and
@code{#pragma GCC visibility pop}.
Bear in mind that symbol visibility should be viewed @strong{as
part of the API interface contract} and thus all new code should
always specify visibility when it is not the default; i.e., declarations
only for use within the local DSO should @strong{always} be marked explicitly
as hidden as so to avoid PLT indirection overheads---making this
abundantly clear also aids readability and self-documentation of the code.
Note that due to ISO C++ specification requirements, @code{operator new} and
@code{operator delete} must always be of default visibility.

Be aware that headers from outside your project, in particular system
headers and headers from any other library you use, may not be
expecting to be compiled with visibility other than the default.  You
may need to explicitly say @code{#pragma GCC visibility push(default)}
before including any such headers.

@code{extern} declarations are not affected by @option{-fvisibility}, so
a lot of code can be recompiled with @option{-fvisibility=hidden} with
no modifications.  However, this means that calls to @code{extern}
functions with no explicit visibility use the PLT, so it is more
effective to use @code{__attribute ((visibility))} and/or
@code{#pragma GCC visibility} to tell the compiler which @code{extern}
declarations should be treated as hidden.

Note that @option{-fvisibility} does affect C++ vague linkage
entities. This means that, for instance, an exception class that is
be thrown between DSOs must be explicitly marked with default
visibility so that the @samp{type_info} nodes are unified between
the DSOs.

An overview of these techniques, their benefits and how to use them
is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.

@item -fstrict-volatile-bitfields
@opindex fstrict-volatile-bitfields
This option should be used if accesses to volatile bit-fields (or other
structure fields, although the compiler usually honors those types
anyway) should use a single access of the width of the
field's type, aligned to a natural alignment if possible.  For
example, targets with memory-mapped peripheral registers might require
all such accesses to be 16 bits wide; with this flag you can
declare all peripheral bit-fields as @code{unsigned short} (assuming short
is 16 bits on these targets) to force GCC to use 16-bit accesses
instead of, perhaps, a more efficient 32-bit access.

If this option is disabled, the compiler uses the most efficient
instruction.  In the previous example, that might be a 32-bit load
instruction, even though that accesses bytes that do not contain
any portion of the bit-field, or memory-mapped registers unrelated to
the one being updated.

In some cases, such as when the @code{packed} attribute is applied to a 
structure field, it may not be possible to access the field with a single
read or write that is correctly aligned for the target machine.  In this
case GCC falls back to generating multiple accesses rather than code that 
will fault or truncate the result at run time.

Note:  Due to restrictions of the C/C++11 memory model, write accesses are
not allowed to touch non bit-field members.  It is therefore recommended
to define all bits of the field's type as bit-field members.

The default value of this option is determined by the application binary
interface for the target processor.

@item -fsync-libcalls
@opindex fsync-libcalls
This option controls whether any out-of-line instance of the @code{__sync}
family of functions may be used to implement the C++11 @code{__atomic}
family of functions.

The default value of this option is enabled, thus the only useful form
of the option is @option{-fno-sync-libcalls}.  This option is used in
the implementation of the @file{libatomic} runtime library.

@end table

@node Developer Options
@section GCC Developer Options
@cindex developer options
@cindex debugging GCC
@cindex debug dump options
@cindex dump options
@cindex compilation statistics

This section describes command-line options that are primarily of
interest to GCC developers, including options to support compiler
testing and investigation of compiler bugs and compile-time
performance problems.  This includes options that produce debug dumps
at various points in the compilation; that print statistics such as
memory use and execution time; and that print information about GCC's
configuration, such as where it searches for libraries.  You should
rarely need to use any of these options for ordinary compilation and
linking tasks.

@table @gcctabopt

@item -d@var{letters}
@itemx -fdump-rtl-@var{pass}
@itemx -fdump-rtl-@var{pass}=@var{filename}
@opindex d
@opindex fdump-rtl-@var{pass}
Says to make debugging dumps during compilation at times specified by
@var{letters}.  This is used for debugging the RTL-based passes of the
compiler.  The file names for most of the dumps are made by appending
a pass number and a word to the @var{dumpname}, and the files are
created in the directory of the output file.  In case of
@option{=@var{filename}} option, the dump is output on the given file
instead of the pass numbered dump files.  Note that the pass number is
assigned as passes are registered into the pass manager.  Most passes
are registered in the order that they will execute and for these passes
the number corresponds to the pass execution order.  However, passes
registered by plugins, passes specific to compilation targets, or
passes that are otherwise registered after all the other passes are
numbered higher than a pass named "final", even if they are executed
earlier.  @var{dumpname} is generated from the name of the output
file if explicitly specified and not an executable, otherwise it is
the basename of the source file.  

Some @option{-d@var{letters}} switches have different meaning when
@option{-E} is used for preprocessing.  @xref{Preprocessor Options},
for information about preprocessor-specific dump options.

Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
@option{-d} option @var{letters}.  Here are the possible
letters for use in @var{pass} and @var{letters}, and their meanings:

@table @gcctabopt

@item -fdump-rtl-alignments
@opindex fdump-rtl-alignments
Dump after branch alignments have been computed.

@item -fdump-rtl-asmcons
@opindex fdump-rtl-asmcons
Dump after fixing rtl statements that have unsatisfied in/out constraints.

@item -fdump-rtl-auto_inc_dec
@opindex fdump-rtl-auto_inc_dec
Dump after auto-inc-dec discovery.  This pass is only run on
architectures that have auto inc or auto dec instructions.

@item -fdump-rtl-barriers
@opindex fdump-rtl-barriers
Dump after cleaning up the barrier instructions.

@item -fdump-rtl-bbpart
@opindex fdump-rtl-bbpart
Dump after partitioning hot and cold basic blocks.

@item -fdump-rtl-bbro
@opindex fdump-rtl-bbro
Dump after block reordering.

@item -fdump-rtl-btl1
@itemx -fdump-rtl-btl2
@opindex fdump-rtl-btl2
@opindex fdump-rtl-btl2
@option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
after the two branch
target load optimization passes.

@item -fdump-rtl-bypass
@opindex fdump-rtl-bypass
Dump after jump bypassing and control flow optimizations.

@item -fdump-rtl-combine
@opindex fdump-rtl-combine
Dump after the RTL instruction combination pass.

@item -fdump-rtl-compgotos
@opindex fdump-rtl-compgotos
Dump after duplicating the computed gotos.

@item -fdump-rtl-ce1
@itemx -fdump-rtl-ce2
@itemx -fdump-rtl-ce3
@opindex fdump-rtl-ce1
@opindex fdump-rtl-ce2
@opindex fdump-rtl-ce3
@option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
@option{-fdump-rtl-ce3} enable dumping after the three
if conversion passes.

@item -fdump-rtl-cprop_hardreg
@opindex fdump-rtl-cprop_hardreg
Dump after hard register copy propagation.

@item -fdump-rtl-csa
@opindex fdump-rtl-csa
Dump after combining stack adjustments.

@item -fdump-rtl-cse1
@itemx -fdump-rtl-cse2
@opindex fdump-rtl-cse1
@opindex fdump-rtl-cse2
@option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
the two common subexpression elimination passes.

@item -fdump-rtl-dce
@opindex fdump-rtl-dce
Dump after the standalone dead code elimination passes.

@item -fdump-rtl-dbr
@opindex fdump-rtl-dbr
Dump after delayed branch scheduling.

@item -fdump-rtl-dce1
@itemx -fdump-rtl-dce2
@opindex fdump-rtl-dce1
@opindex fdump-rtl-dce2
@option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
the two dead store elimination passes.

@item -fdump-rtl-eh
@opindex fdump-rtl-eh
Dump after finalization of EH handling code.

@item -fdump-rtl-eh_ranges
@opindex fdump-rtl-eh_ranges
Dump after conversion of EH handling range regions.

@item -fdump-rtl-expand
@opindex fdump-rtl-expand
Dump after RTL generation.

@item -fdump-rtl-fwprop1
@itemx -fdump-rtl-fwprop2
@opindex fdump-rtl-fwprop1
@opindex fdump-rtl-fwprop2
@option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
dumping after the two forward propagation passes.

@item -fdump-rtl-gcse1
@itemx -fdump-rtl-gcse2
@opindex fdump-rtl-gcse1
@opindex fdump-rtl-gcse2
@option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
after global common subexpression elimination.

@item -fdump-rtl-init-regs
@opindex fdump-rtl-init-regs
Dump after the initialization of the registers.

@item -fdump-rtl-initvals
@opindex fdump-rtl-initvals
Dump after the computation of the initial value sets.

@item -fdump-rtl-into_cfglayout
@opindex fdump-rtl-into_cfglayout
Dump after converting to cfglayout mode.

@item -fdump-rtl-ira
@opindex fdump-rtl-ira
Dump after iterated register allocation.

@item -fdump-rtl-jump
@opindex fdump-rtl-jump
Dump after the second jump optimization.

@item -fdump-rtl-loop2
@opindex fdump-rtl-loop2
@option{-fdump-rtl-loop2} enables dumping after the rtl
loop optimization passes.

@item -fdump-rtl-mach
@opindex fdump-rtl-mach
Dump after performing the machine dependent reorganization pass, if that
pass exists.

@item -fdump-rtl-mode_sw
@opindex fdump-rtl-mode_sw
Dump after removing redundant mode switches.

@item -fdump-rtl-rnreg
@opindex fdump-rtl-rnreg
Dump after register renumbering.

@item -fdump-rtl-outof_cfglayout
@opindex fdump-rtl-outof_cfglayout
Dump after converting from cfglayout mode.

@item -fdump-rtl-peephole2
@opindex fdump-rtl-peephole2
Dump after the peephole pass.

@item -fdump-rtl-postreload
@opindex fdump-rtl-postreload
Dump after post-reload optimizations.

@item -fdump-rtl-pro_and_epilogue
@opindex fdump-rtl-pro_and_epilogue
Dump after generating the function prologues and epilogues.

@item -fdump-rtl-sched1
@itemx -fdump-rtl-sched2
@opindex fdump-rtl-sched1
@opindex fdump-rtl-sched2
@option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
after the basic block scheduling passes.

@item -fdump-rtl-ree
@opindex fdump-rtl-ree
Dump after sign/zero extension elimination.

@item -fdump-rtl-seqabstr
@opindex fdump-rtl-seqabstr
Dump after common sequence discovery.

@item -fdump-rtl-shorten
@opindex fdump-rtl-shorten
Dump after shortening branches.

@item -fdump-rtl-sibling
@opindex fdump-rtl-sibling
Dump after sibling call optimizations.

@item -fdump-rtl-split1
@itemx -fdump-rtl-split2
@itemx -fdump-rtl-split3
@itemx -fdump-rtl-split4
@itemx -fdump-rtl-split5
@opindex fdump-rtl-split1
@opindex fdump-rtl-split2
@opindex fdump-rtl-split3
@opindex fdump-rtl-split4
@opindex fdump-rtl-split5
These options enable dumping after five rounds of
instruction splitting.

@item -fdump-rtl-sms
@opindex fdump-rtl-sms
Dump after modulo scheduling.  This pass is only run on some
architectures.

@item -fdump-rtl-stack
@opindex fdump-rtl-stack
Dump after conversion from GCC's ``flat register file'' registers to the
x87's stack-like registers.  This pass is only run on x86 variants.

@item -fdump-rtl-subreg1
@itemx -fdump-rtl-subreg2
@opindex fdump-rtl-subreg1
@opindex fdump-rtl-subreg2
@option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
the two subreg expansion passes.

@item -fdump-rtl-unshare
@opindex fdump-rtl-unshare
Dump after all rtl has been unshared.

@item -fdump-rtl-vartrack
@opindex fdump-rtl-vartrack
Dump after variable tracking.

@item -fdump-rtl-vregs
@opindex fdump-rtl-vregs
Dump after converting virtual registers to hard registers.

@item -fdump-rtl-web
@opindex fdump-rtl-web
Dump after live range splitting.

@item -fdump-rtl-regclass
@itemx -fdump-rtl-subregs_of_mode_init
@itemx -fdump-rtl-subregs_of_mode_finish
@itemx -fdump-rtl-dfinit
@itemx -fdump-rtl-dfinish
@opindex fdump-rtl-regclass
@opindex fdump-rtl-subregs_of_mode_init
@opindex fdump-rtl-subregs_of_mode_finish
@opindex fdump-rtl-dfinit
@opindex fdump-rtl-dfinish
These dumps are defined but always produce empty files.

@item -da
@itemx -fdump-rtl-all
@opindex da
@opindex fdump-rtl-all
Produce all the dumps listed above.

@item -dA
@opindex dA
Annotate the assembler output with miscellaneous debugging information.

@item -dD
@opindex dD
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.

@item -dH
@opindex dH
Produce a core dump whenever an error occurs.

@item -dp
@opindex dp
Annotate the assembler output with a comment indicating which
pattern and alternative is used.  The length and cost of each instruction are
also printed.

@item -dP
@opindex dP
Dump the RTL in the assembler output as a comment before each instruction.
Also turns on @option{-dp} annotation.

@item -dx
@opindex dx
Just generate RTL for a function instead of compiling it.  Usually used
with @option{-fdump-rtl-expand}.
@end table

@item -fdump-noaddr
@opindex fdump-noaddr
When doing debugging dumps, suppress address output.  This makes it more
feasible to use diff on debugging dumps for compiler invocations with
different compiler binaries and/or different
text / bss / data / heap / stack / dso start locations.

@item -freport-bug
@opindex freport-bug
Collect and dump debug information into a temporary file if an
internal compiler error (ICE) occurs.

@item -fdump-unnumbered
@opindex fdump-unnumbered
When doing debugging dumps, suppress instruction numbers and address output.
This makes it more feasible to use diff on debugging dumps for compiler
invocations with different options, in particular with and without
@option{-g}.

@item -fdump-unnumbered-links
@opindex fdump-unnumbered-links
When doing debugging dumps (see @option{-d} option above), suppress
instruction numbers for the links to the previous and next instructions
in a sequence.

@item -fdump-ipa-@var{switch}
@opindex fdump-ipa
Control the dumping at various stages of inter-procedural analysis
language tree to a file.  The file name is generated by appending a
switch specific suffix to the source file name, and the file is created
in the same directory as the output file.  The following dumps are
possible:

@table @samp
@item all
Enables all inter-procedural analysis dumps.

@item cgraph
Dumps information about call-graph optimization, unused function removal,
and inlining decisions.

@item inline
Dump after function inlining.

@end table

@item -fdump-lang-all
@itemx -fdump-lang-@var{switch}
@itemx -fdump-lang-@var{switch}-@var{options}
@itemx -fdump-lang-@var{switch}-@var{options}=@var{filename}
@opindex fdump-lang-all
@opindex fdump-lang
Control the dumping of language-specific information.  The @var{options}
and @var{filename} portions behave as described in the
@option{-fdump-tree} option.  The following @var{switch} values are
accepted:

@table @samp
@item all

Enable all language-specific dumps.

@item class
Dump class hierarchy information.  Virtual table information is emitted
unless '@option{slim}' is specified.  This option is applicable to C++ only.

@item raw
Dump the raw internal tree data.  This option is applicable to C++ only.

@end table

@item -fdump-passes
@opindex fdump-passes
Print on @file{stderr} the list of optimization passes that are turned
on and off by the current command-line options.

@item -fdump-statistics-@var{option}
@opindex fdump-statistics
Enable and control dumping of pass statistics in a separate file.  The
file name is generated by appending a suffix ending in
@samp{.statistics} to the source file name, and the file is created in
the same directory as the output file.  If the @samp{-@var{option}}
form is used, @samp{-stats} causes counters to be summed over the
whole compilation unit while @samp{-details} dumps every event as
the passes generate them.  The default with no option is to sum
counters for each function compiled.

@item -fdump-tree-all
@itemx -fdump-tree-@var{switch}
@itemx -fdump-tree-@var{switch}-@var{options}
@itemx -fdump-tree-@var{switch}-@var{options}=@var{filename}
@opindex fdump-tree-all
@opindex fdump-tree
Control the dumping at various stages of processing the intermediate
language tree to a file.  The file name is generated by appending a
switch-specific suffix to the source file name, and the file is
created in the same directory as the output file. In case of
@option{=@var{filename}} option, the dump is output on the given file
instead of the auto named dump files.  If the @samp{-@var{options}}
form is used, @var{options} is a list of @samp{-} separated options
which control the details of the dump.  Not all options are applicable
to all dumps; those that are not meaningful are ignored.  The
following options are available

@table @samp
@item address
Print the address of each node.  Usually this is not meaningful as it
changes according to the environment and source file.  Its primary use
is for tying up a dump file with a debug environment.
@item asmname
If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
use working backward from mangled names in the assembly file.
@item slim
When dumping front-end intermediate representations, inhibit dumping
of members of a scope or body of a function merely because that scope
has been reached.  Only dump such items when they are directly reachable
by some other path.

When dumping pretty-printed trees, this option inhibits dumping the
bodies of control structures.

When dumping RTL, print the RTL in slim (condensed) form instead of
the default LISP-like representation.
@item raw
Print a raw representation of the tree.  By default, trees are
pretty-printed into a C-like representation.
@item details
Enable more detailed dumps (not honored by every dump option). Also
include information from the optimization passes.
@item stats
Enable dumping various statistics about the pass (not honored by every dump
option).
@item blocks
Enable showing basic block boundaries (disabled in raw dumps).
@item graph
For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
dump a representation of the control flow graph suitable for viewing with
GraphViz to @file{@var{file}.@var{passid}.@var{pass}.dot}.  Each function in
the file is pretty-printed as a subgraph, so that GraphViz can render them
all in a single plot.

This option currently only works for RTL dumps, and the RTL is always
dumped in slim form.
@item vops
Enable showing virtual operands for every statement.
@item lineno
Enable showing line numbers for statements.
@item uid
Enable showing the unique ID (@code{DECL_UID}) for each variable.
@item verbose
Enable showing the tree dump for each statement.
@item eh
Enable showing the EH region number holding each statement.
@item scev
Enable showing scalar evolution analysis details.
@item optimized
Enable showing optimization information (only available in certain
passes).
@item missed
Enable showing missed optimization information (only available in certain
passes).
@item note
Enable other detailed optimization information (only available in
certain passes).
@item =@var{filename}
Instead of an auto named dump file, output into the given file
name. The file names @file{stdout} and @file{stderr} are treated
specially and are considered already open standard streams. For
example,

@smallexample
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
     -fdump-tree-pre=/dev/stderr file.c
@end smallexample

outputs vectorizer dump into @file{foo.dump}, while the PRE dump is
output on to @file{stderr}. If two conflicting dump filenames are
given for the same pass, then the latter option overrides the earlier
one.

@item all
Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
and @option{lineno}.

@item optall
Turn on all optimization options, i.e., @option{optimized},
@option{missed}, and @option{note}.
@end table

To determine what tree dumps are available or find the dump for a pass
of interest follow the steps below.

@enumerate
@item
Invoke GCC with @option{-fdump-passes} and in the @file{stderr} output
look for a code that corresponds to the pass you are interested in.
For example, the codes @code{tree-evrp}, @code{tree-vrp1}, and
@code{tree-vrp2} correspond to the three Value Range Propagation passes.
The number at the end distinguishes distinct invocations of the same pass.
@item
To enable the creation of the dump file, append the pass code to
the @option{-fdump-} option prefix and invoke GCC with it.  For example,
to enable the dump from the Early Value Range Propagation pass, invoke
GCC with the @option{-fdump-tree-evrp} option.  Optionally, you may
specify the name of the dump file.  If you don't specify one, GCC
creates as described below.
@item
Find the pass dump in a file whose name is composed of three components
separated by a period: the name of the source file GCC was invoked to
compile, a numeric suffix indicating the pass number followed by the
letter @samp{t} for tree passes (and the letter @samp{r} for RTL passes),
and finally the pass code.  For example, the Early VRP pass dump might
be in a file named @file{myfile.c.038t.evrp} in the current working
directory.  Note that the numeric codes are not stable and may change
from one version of GCC to another.
@end enumerate

@item -fopt-info
@itemx -fopt-info-@var{options}
@itemx -fopt-info-@var{options}=@var{filename}
@opindex fopt-info
Controls optimization dumps from various optimization passes. If the
@samp{-@var{options}} form is used, @var{options} is a list of
@samp{-} separated option keywords to select the dump details and
optimizations.  

The @var{options} can be divided into two groups: options describing the
verbosity of the dump, and options describing which optimizations
should be included. The options from both the groups can be freely
mixed as they are non-overlapping. However, in case of any conflicts,
the later options override the earlier options on the command
line. 

The following options control the dump verbosity:

@table @samp
@item optimized
Print information when an optimization is successfully applied. It is
up to a pass to decide which information is relevant. For example, the
vectorizer passes print the source location of loops which are
successfully vectorized.
@item missed
Print information about missed optimizations. Individual passes
control which information to include in the output. 
@item note
Print verbose information about optimizations, such as certain
transformations, more detailed messages about decisions etc.
@item all
Print detailed optimization information. This includes
@samp{optimized}, @samp{missed}, and @samp{note}.
@end table

One or more of the following option keywords can be used to describe a
group of optimizations:

@table @samp
@item ipa
Enable dumps from all interprocedural optimizations.
@item loop
Enable dumps from all loop optimizations.
@item inline
Enable dumps from all inlining optimizations.
@item omp
Enable dumps from all OMP (Offloading and Multi Processing) optimizations.
@item vec
Enable dumps from all vectorization optimizations.
@item optall
Enable dumps from all optimizations. This is a superset of
the optimization groups listed above.
@end table

If @var{options} is
omitted, it defaults to @samp{optimized-optall}, which means to dump all
info about successful optimizations from all the passes.  

If the @var{filename} is provided, then the dumps from all the
applicable optimizations are concatenated into the @var{filename}.
Otherwise the dump is output onto @file{stderr}. Though multiple
@option{-fopt-info} options are accepted, only one of them can include
a @var{filename}. If other filenames are provided then all but the
first such option are ignored.

Note that the output @var{filename} is overwritten
in case of multiple translation units. If a combined output from
multiple translation units is desired, @file{stderr} should be used
instead.

In the following example, the optimization info is output to
@file{stderr}:

@smallexample
gcc -O3 -fopt-info
@end smallexample

This example:
@smallexample
gcc -O3 -fopt-info-missed=missed.all
@end smallexample

@noindent
outputs missed optimization report from all the passes into
@file{missed.all}, and this one:

@smallexample
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
@end smallexample

@noindent
prints information about missed optimization opportunities from
vectorization passes on @file{stderr}.  
Note that @option{-fopt-info-vec-missed} is equivalent to 
@option{-fopt-info-missed-vec}.  The order of the optimization group
names and message types listed after @option{-fopt-info} does not matter.

As another example,
@smallexample
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
@end smallexample

@noindent
outputs information about missed optimizations as well as
optimized locations from all the inlining passes into
@file{inline.txt}.

Finally, consider:

@smallexample
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
@end smallexample

@noindent
Here the two output filenames @file{vec.miss} and @file{loop.opt} are
in conflict since only one output file is allowed. In this case, only
the first option takes effect and the subsequent options are
ignored. Thus only @file{vec.miss} is produced which contains
dumps from the vectorizer about missed opportunities.

@item -fsched-verbose=@var{n}
@opindex fsched-verbose
On targets that use instruction scheduling, this option controls the
amount of debugging output the scheduler prints to the dump files.

For @var{n} greater than zero, @option{-fsched-verbose} outputs the
same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
For @var{n} greater than one, it also output basic block probabilities,
detailed ready list information and unit/insn info.  For @var{n} greater
than two, it includes RTL at abort point, control-flow and regions info.
And for @var{n} over four, @option{-fsched-verbose} also includes
dependence info.



@item -fenable-@var{kind}-@var{pass}
@itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
@opindex fdisable-
@opindex fenable-

This is a set of options that are used to explicitly disable/enable
optimization passes.  These options are intended for use for debugging GCC.
Compiler users should use regular options for enabling/disabling
passes instead.

@table @gcctabopt

@item -fdisable-ipa-@var{pass}
Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
statically invoked in the compiler multiple times, the pass name should be
appended with a sequential number starting from 1.

@item -fdisable-rtl-@var{pass}
@itemx -fdisable-rtl-@var{pass}=@var{range-list}
Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
statically invoked in the compiler multiple times, the pass name should be
appended with a sequential number starting from 1.  @var{range-list} is a 
comma-separated list of function ranges or assembler names.  Each range is a number
pair separated by a colon.  The range is inclusive in both ends.  If the range
is trivial, the number pair can be simplified as a single number.  If the
function's call graph node's @var{uid} falls within one of the specified ranges,
the @var{pass} is disabled for that function.  The @var{uid} is shown in the
function header of a dump file, and the pass names can be dumped by using
option @option{-fdump-passes}.

@item -fdisable-tree-@var{pass}
@itemx -fdisable-tree-@var{pass}=@var{range-list}
Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
option arguments.

@item -fenable-ipa-@var{pass}
Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
statically invoked in the compiler multiple times, the pass name should be
appended with a sequential number starting from 1.

@item -fenable-rtl-@var{pass}
@itemx -fenable-rtl-@var{pass}=@var{range-list}
Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
description and examples.

@item -fenable-tree-@var{pass}
@itemx -fenable-tree-@var{pass}=@var{range-list}
Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
of option arguments.

@end table

Here are some examples showing uses of these options.

@smallexample

# disable ccp1 for all functions
   -fdisable-tree-ccp1
# disable complete unroll for function whose cgraph node uid is 1
   -fenable-tree-cunroll=1
# disable gcse2 for functions at the following ranges [1,1],
# [300,400], and [400,1000]
# disable gcse2 for functions foo and foo2
   -fdisable-rtl-gcse2=foo,foo2
# disable early inlining
   -fdisable-tree-einline
# disable ipa inlining
   -fdisable-ipa-inline
# enable tree full unroll
   -fenable-tree-unroll

@end smallexample

@item -fchecking
@itemx -fchecking=@var{n}
@opindex fchecking
@opindex fno-checking
Enable internal consistency checking.  The default depends on
the compiler configuration.  @option{-fchecking=2} enables further
internal consistency checking that might affect code generation.

@item -frandom-seed=@var{string}
@opindex frandom-seed
This option provides a seed that GCC uses in place of
random numbers in generating certain symbol names
that have to be different in every compiled file.  It is also used to
place unique stamps in coverage data files and the object files that
produce them.  You can use the @option{-frandom-seed} option to produce
reproducibly identical object files.

The @var{string} can either be a number (decimal, octal or hex) or an
arbitrary string (in which case it's converted to a number by
computing CRC32).

The @var{string} should be different for every file you compile.

@item -save-temps
@itemx -save-temps=cwd
@opindex save-temps
Store the usual ``temporary'' intermediate files permanently; place them
in the current directory and name them based on the source file.  Thus,
compiling @file{foo.c} with @option{-c -save-temps} produces files
@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
preprocessed @file{foo.i} output file even though the compiler now
normally uses an integrated preprocessor.

When used in combination with the @option{-x} command-line option,
@option{-save-temps} is sensible enough to avoid over writing an
input source file with the same extension as an intermediate file.
The corresponding intermediate file may be obtained by renaming the
source file before using @option{-save-temps}.

If you invoke GCC in parallel, compiling several different source
files that share a common base name in different subdirectories or the
same source file compiled for multiple output destinations, it is
likely that the different parallel compilers will interfere with each
other, and overwrite the temporary files.  For instance:

@smallexample
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
@end smallexample

may result in @file{foo.i} and @file{foo.o} being written to
simultaneously by both compilers.

@item -save-temps=obj
@opindex save-temps=obj
Store the usual ``temporary'' intermediate files permanently.  If the
@option{-o} option is used, the temporary files are based on the
object file.  If the @option{-o} option is not used, the
@option{-save-temps=obj} switch behaves like @option{-save-temps}.

For example:

@smallexample
gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar
@end smallexample

@noindent
creates @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
@file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
@file{dir2/yfoobar.o}.

@item -time@r{[}=@var{file}@r{]}
@opindex time
Report the CPU time taken by each subprocess in the compilation
sequence.  For C source files, this is the compiler proper and assembler
(plus the linker if linking is done).

Without the specification of an output file, the output looks like this:

@smallexample
# cc1 0.12 0.01
# as 0.00 0.01
@end smallexample

The first number on each line is the ``user time'', that is time spent
executing the program itself.  The second number is ``system time'',
time spent executing operating system routines on behalf of the program.
Both numbers are in seconds.

With the specification of an output file, the output is appended to the
named file, and it looks like this:

@smallexample
0.12 0.01 cc1 @var{options}
0.00 0.01 as @var{options}
@end smallexample

The ``user time'' and the ``system time'' are moved before the program
name, and the options passed to the program are displayed, so that one
can later tell what file was being compiled, and with which options.

@item -fdump-final-insns@r{[}=@var{file}@r{]}
@opindex fdump-final-insns
Dump the final internal representation (RTL) to @var{file}.  If the
optional argument is omitted (or if @var{file} is @code{.}), the name
of the dump file is determined by appending @code{.gkd} to the
compilation output file name.

@item -fcompare-debug@r{[}=@var{opts}@r{]}
@opindex fcompare-debug
@opindex fno-compare-debug
If no error occurs during compilation, run the compiler a second time,
adding @var{opts} and @option{-fcompare-debug-second} to the arguments
passed to the second compilation.  Dump the final internal
representation in both compilations, and print an error if they differ.

If the equal sign is omitted, the default @option{-gtoggle} is used.

The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
and nonzero, implicitly enables @option{-fcompare-debug}.  If
@env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
then it is used for @var{opts}, otherwise the default @option{-gtoggle}
is used.

@option{-fcompare-debug=}, with the equal sign but without @var{opts},
is equivalent to @option{-fno-compare-debug}, which disables the dumping
of the final representation and the second compilation, preventing even
@env{GCC_COMPARE_DEBUG} from taking effect.

To verify full coverage during @option{-fcompare-debug} testing, set
@env{GCC_COMPARE_DEBUG} to say @option{-fcompare-debug-not-overridden},
which GCC rejects as an invalid option in any actual compilation
(rather than preprocessing, assembly or linking).  To get just a
warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
not overridden} will do.

@item -fcompare-debug-second
@opindex fcompare-debug-second
This option is implicitly passed to the compiler for the second
compilation requested by @option{-fcompare-debug}, along with options to
silence warnings, and omitting other options that would cause the compiler
to produce output to files or to standard output as a side effect.  Dump
files and preserved temporary files are renamed so as to contain the
@code{.gk} additional extension during the second compilation, to avoid
overwriting those generated by the first.

When this option is passed to the compiler driver, it causes the
@emph{first} compilation to be skipped, which makes it useful for little
other than debugging the compiler proper.

@item -gtoggle
@opindex gtoggle
Turn off generation of debug info, if leaving out this option
generates it, or turn it on at level 2 otherwise.  The position of this
argument in the command line does not matter; it takes effect after all
other options are processed, and it does so only once, no matter how
many times it is given.  This is mainly intended to be used with
@option{-fcompare-debug}.

@item -fvar-tracking-assignments-toggle
@opindex fvar-tracking-assignments-toggle
@opindex fno-var-tracking-assignments-toggle
Toggle @option{-fvar-tracking-assignments}, in the same way that
@option{-gtoggle} toggles @option{-g}.

@item -Q
@opindex Q
Makes the compiler print out each function name as it is compiled, and
print some statistics about each pass when it finishes.

@item -ftime-report
@opindex ftime-report
Makes the compiler print some statistics about the time consumed by each
pass when it finishes.

@item -ftime-report-details
@opindex ftime-report-details
Record the time consumed by infrastructure parts separately for each pass.

@item -fira-verbose=@var{n}
@opindex fira-verbose
Control the verbosity of the dump file for the integrated register allocator.
The default value is 5.  If the value @var{n} is greater or equal to 10,
the dump output is sent to stderr using the same format as @var{n} minus 10.

@item -flto-report
@opindex flto-report
Prints a report with internal details on the workings of the link-time
optimizer.  The contents of this report vary from version to version.
It is meant to be useful to GCC developers when processing object
files in LTO mode (via @option{-flto}).

Disabled by default.

@item -flto-report-wpa
@opindex flto-report-wpa
Like @option{-flto-report}, but only print for the WPA phase of Link
Time Optimization.

@item -fmem-report
@opindex fmem-report
Makes the compiler print some statistics about permanent memory
allocation when it finishes.

@item -fmem-report-wpa
@opindex fmem-report-wpa
Makes the compiler print some statistics about permanent memory
allocation for the WPA phase only.

@item -fpre-ipa-mem-report
@opindex fpre-ipa-mem-report
@item -fpost-ipa-mem-report
@opindex fpost-ipa-mem-report
Makes the compiler print some statistics about permanent memory
allocation before or after interprocedural optimization.

@item -fprofile-report
@opindex fprofile-report
Makes the compiler print some statistics about consistency of the
(estimated) profile and effect of individual passes.

@item -fstack-usage
@opindex fstack-usage
Makes the compiler output stack usage information for the program, on a
per-function basis.  The filename for the dump is made by appending
@file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
the output file, if explicitly specified and it is not an executable,
otherwise it is the basename of the source file.  An entry is made up
of three fields:

@itemize
@item
The name of the function.
@item
A number of bytes.
@item
One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
@end itemize

The qualifier @code{static} means that the function manipulates the stack
statically: a fixed number of bytes are allocated for the frame on function
entry and released on function exit; no stack adjustments are otherwise made
in the function.  The second field is this fixed number of bytes.

The qualifier @code{dynamic} means that the function manipulates the stack
dynamically: in addition to the static allocation described above, stack
adjustments are made in the body of the function, for example to push/pop
arguments around function calls.  If the qualifier @code{bounded} is also
present, the amount of these adjustments is bounded at compile time and
the second field is an upper bound of the total amount of stack used by
the function.  If it is not present, the amount of these adjustments is
not bounded at compile time and the second field only represents the
bounded part.

@item -fstats
@opindex fstats
Emit statistics about front-end processing at the end of the compilation.
This option is supported only by the C++ front end, and
the information is generally only useful to the G++ development team.

@item -fdbg-cnt-list
@opindex fdbg-cnt-list
Print the name and the counter upper bound for all debug counters.


@item -fdbg-cnt=@var{counter-value-list}
@opindex fdbg-cnt
Set the internal debug counter upper bound.  @var{counter-value-list}
is a comma-separated list of @var{name}:@var{value} pairs
which sets the upper bound of each debug counter @var{name} to @var{value}.
All debug counters have the initial upper bound of @code{UINT_MAX};
thus @code{dbg_cnt} returns true always unless the upper bound
is set by this option.
For example, with @option{-fdbg-cnt=dce:10,tail_call:0},
@code{dbg_cnt(dce)} returns true only for first 10 invocations.

@item -print-file-name=@var{library}
@opindex print-file-name
Print the full absolute name of the library file @var{library} that
would be used when linking---and don't do anything else.  With this
option, GCC does not compile or link anything; it just prints the
file name.

@item -print-multi-directory
@opindex print-multi-directory
Print the directory name corresponding to the multilib selected by any
other switches present in the command line.  This directory is supposed
to exist in @env{GCC_EXEC_PREFIX}.

@item -print-multi-lib
@opindex print-multi-lib
Print the mapping from multilib directory names to compiler switches
that enable them.  The directory name is separated from the switches by
@samp{;}, and each switch starts with an @samp{@@} instead of the
@samp{-}, without spaces between multiple switches.  This is supposed to
ease shell processing.

@item -print-multi-os-directory
@opindex print-multi-os-directory
Print the path to OS libraries for the selected
multilib, relative to some @file{lib} subdirectory.  If OS libraries are
present in the @file{lib} subdirectory and no multilibs are used, this is
usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
@file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.

@item -print-multiarch
@opindex print-multiarch
Print the path to OS libraries for the selected multiarch,
relative to some @file{lib} subdirectory.

@item -print-prog-name=@var{program}
@opindex print-prog-name
Like @option{-print-file-name}, but searches for a program such as @command{cpp}.

@item -print-libgcc-file-name
@opindex print-libgcc-file-name
Same as @option{-print-file-name=libgcc.a}.

This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
but you do want to link with @file{libgcc.a}.  You can do:

@smallexample
gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
@end smallexample

@item -print-search-dirs
@opindex print-search-dirs
Print the name of the configured installation directory and a list of
program and library directories @command{gcc} searches---and don't do anything else.

This is useful when @command{gcc} prints the error message
@samp{installation problem, cannot exec cpp0: No such file or directory}.
To resolve this you either need to put @file{cpp0} and the other compiler
components where @command{gcc} expects to find them, or you can set the environment
variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
Don't forget the trailing @samp{/}.
@xref{Environment Variables}.

@item -print-sysroot
@opindex print-sysroot
Print the target sysroot directory that is used during
compilation.  This is the target sysroot specified either at configure
time or using the @option{--sysroot} option, possibly with an extra
suffix that depends on compilation options.  If no target sysroot is
specified, the option prints nothing.

@item -print-sysroot-headers-suffix
@opindex print-sysroot-headers-suffix
Print the suffix added to the target sysroot when searching for
headers, or give an error if the compiler is not configured with such
a suffix---and don't do anything else.

@item -dumpmachine
@opindex dumpmachine
Print the compiler's target machine (for example,
@samp{i686-pc-linux-gnu})---and don't do anything else.

@item -dumpversion
@opindex dumpversion
Print the compiler version (for example, @code{3.0}, @code{6.3.0} or @code{7})---and don't do
anything else.  This is the compiler version used in filesystem paths,
specs, can be depending on how the compiler has been configured just
a single number (major version), two numbers separated by dot (major and
minor version) or three numbers separated by dots (major, minor and patchlevel
version).

@item -dumpfullversion
@opindex dumpfullversion
Print the full compiler version, always 3 numbers separated by dots,
major, minor and patchlevel version.

@item -dumpspecs
@opindex dumpspecs
Print the compiler's built-in specs---and don't do anything else.  (This
is used when GCC itself is being built.)  @xref{Spec Files}.
@end table

@node Submodel Options
@section Machine-Dependent Options
@cindex submodel options
@cindex specifying hardware config
@cindex hardware models and configurations, specifying
@cindex target-dependent options
@cindex machine-dependent options

Each target machine supported by GCC can have its own options---for
example, to allow you to compile for a particular processor variant or
ABI, or to control optimizations specific to that machine.  By
convention, the names of machine-specific options start with
@samp{-m}.

Some configurations of the compiler also support additional target-specific
options, usually for compatibility with other compilers on the same
platform.

@c This list is ordered alphanumerically by subsection name.
@c It should be the same order and spelling as these options are listed
@c in Machine Dependent Options

@menu
* AArch64 Options::
* Adapteva Epiphany Options::
* ARC Options::
* ARM Options::
* AVR Options::
* Blackfin Options::
* C6X Options::
* CRIS Options::
* CR16 Options::
* Darwin Options::
* DEC Alpha Options::
* FR30 Options::
* FT32 Options::
* FRV Options::
* GNU/Linux Options::
* H8/300 Options::
* HPPA Options::
* IA-64 Options::
* LM32 Options::
* M32C Options::
* M32R/D Options::
* M680x0 Options::
* MCore Options::
* MeP Options::
* MicroBlaze Options::
* MIPS Options::
* MMIX Options::
* MN10300 Options::
* Moxie Options::
* MSP430 Options::
* NDS32 Options::
* Nios II Options::
* Nvidia PTX Options::
* PDP-11 Options::
* picoChip Options::
* PowerPC Options::
* PowerPC SPE Options::
* RISC-V Options::
* RL78 Options::
* RS/6000 and PowerPC Options::
* RX Options::
* S/390 and zSeries Options::
* Score Options::
* SH Options::
* Solaris 2 Options::
* SPARC Options::
* SPU Options::
* System V Options::
* TILE-Gx Options::
* TILEPro Options::
* V850 Options::
* VAX Options::
* Visium Options::
* VMS Options::
* VxWorks Options::
* x86 Options::
* x86 Windows Options::
* Xstormy16 Options::
* Xtensa Options::
* zSeries Options::
@end menu

@node AArch64 Options
@subsection AArch64 Options
@cindex AArch64 Options

These options are defined for AArch64 implementations:

@table @gcctabopt

@item -mabi=@var{name}
@opindex mabi
Generate code for the specified data model.  Permissible values
are @samp{ilp32} for SysV-like data model where int, long int and pointers
are 32 bits, and @samp{lp64} for SysV-like data model where int is 32 bits,
but long int and pointers are 64 bits.

The default depends on the specific target configuration.  Note that
the LP64 and ILP32 ABIs are not link-compatible; you must compile your
entire program with the same ABI, and link with a compatible set of libraries.

@item -mbig-endian
@opindex mbig-endian
Generate big-endian code.  This is the default when GCC is configured for an
@samp{aarch64_be-*-*} target.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code which uses only the general-purpose registers.  This will prevent
the compiler from using floating-point and Advanced SIMD registers but will not
impose any restrictions on the assembler.

@item -mlittle-endian
@opindex mlittle-endian
Generate little-endian code.  This is the default when GCC is configured for an
@samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.

@item -mcmodel=tiny
@opindex mcmodel=tiny
Generate code for the tiny code model.  The program and its statically defined
symbols must be within 1MB of each other.  Programs can be statically or
dynamically linked.

@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small code model.  The program and its statically defined
symbols must be within 4GB of each other.  Programs can be statically or
dynamically linked.  This is the default code model.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large code model.  This makes no assumptions about
addresses and sizes of sections.  Programs can be statically linked only.

@item -mstrict-align
@opindex mstrict-align
Avoid generating memory accesses that may not be aligned on a natural object
boundary as described in the architecture specification.

@item -momit-leaf-frame-pointer
@itemx -mno-omit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
@opindex mno-omit-leaf-frame-pointer
Omit or keep the frame pointer in leaf functions.  The former behavior is the
default.

@item -mtls-dialect=desc
@opindex mtls-dialect=desc
Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
of TLS variables.  This is the default.

@item -mtls-dialect=traditional
@opindex mtls-dialect=traditional
Use traditional TLS as the thread-local storage mechanism for dynamic accesses
of TLS variables.

@item -mtls-size=@var{size}
@opindex mtls-size
Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
This option requires binutils 2.26 or newer.

@item -mfix-cortex-a53-835769
@itemx -mno-fix-cortex-a53-835769
@opindex mfix-cortex-a53-835769
@opindex mno-fix-cortex-a53-835769
Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
This involves inserting a NOP instruction between memory instructions and
64-bit integer multiply-accumulate instructions.

@item -mfix-cortex-a53-843419
@itemx -mno-fix-cortex-a53-843419
@opindex mfix-cortex-a53-843419
@opindex mno-fix-cortex-a53-843419
Enable or disable the workaround for the ARM Cortex-A53 erratum number 843419.
This erratum workaround is made at link time and this will only pass the
corresponding flag to the linker.

@item -mlow-precision-recip-sqrt
@itemx -mno-low-precision-recip-sqrt
@opindex mlow-precision-recip-sqrt
@opindex mno-low-precision-recip-sqrt
Enable or disable the reciprocal square root approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of reciprocal square root results to about 16 bits for
single precision and to 32 bits for double precision.

@item -mlow-precision-sqrt
@itemx -mno-low-precision-sqrt
@opindex -mlow-precision-sqrt
@opindex -mno-low-precision-sqrt
Enable or disable the square root approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of square root results to about 16 bits for
single precision and to 32 bits for double precision.
If enabled, it implies @option{-mlow-precision-recip-sqrt}.

@item -mlow-precision-div
@itemx -mno-low-precision-div
@opindex -mlow-precision-div
@opindex -mno-low-precision-div
Enable or disable the division approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of division results to about 16 bits for
single precision and to 32 bits for double precision.

@item -march=@var{name}
@opindex march
Specify the name of the target architecture and, optionally, one or
more feature modifiers.  This option has the form
@option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}.

The permissible values for @var{arch} are @samp{armv8-a},
@samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a} or @samp{armv8.4-a}
or @var{native}.

The value @samp{armv8.4-a} implies @samp{armv8.3-a} and enables compiler
support for the ARMv8.4-A architecture extensions.

The value @samp{armv8.3-a} implies @samp{armv8.2-a} and enables compiler
support for the ARMv8.3-A architecture extensions.

The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler
support for the ARMv8.2-A architecture extensions.

The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler
support for the ARMv8.1-A architecture extension.  In particular, it
enables the @samp{+crc}, @samp{+lse}, and @samp{+rdma} features.

The value @samp{native} is available on native AArch64 GNU/Linux and
causes the compiler to pick the architecture of the host system.  This
option has no effect if the compiler is unable to recognize the
architecture of the host system,

The permissible values for @var{feature} are listed in the sub-section
on @ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
Feature Modifiers}.  Where conflicting feature modifiers are
specified, the right-most feature is used.

GCC uses @var{name} to determine what kind of instructions it can emit
when generating assembly code.  If @option{-march} is specified
without either of @option{-mtune} or @option{-mcpu} also being
specified, the code is tuned to perform well across a range of target
processors implementing the target architecture.

@item -mtune=@var{name}
@opindex mtune
Specify the name of the target processor for which GCC should tune the
performance of the code.  Permissible values for this option are:
@samp{generic}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55},
@samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75},
@samp{exynos-m1}, @samp{falkor}, @samp{qdf24xx}, @samp{saphira},
@samp{xgene1}, @samp{vulcan}, @samp{thunderx},
@samp{thunderxt88}, @samp{thunderxt88p1}, @samp{thunderxt81},
@samp{thunderxt83}, @samp{thunderx2t99}, @samp{cortex-a57.cortex-a53},
@samp{cortex-a72.cortex-a53}, @samp{cortex-a73.cortex-a35},
@samp{cortex-a73.cortex-a53}, @samp{cortex-a75.cortex-a55},
@samp{native}.

The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55} specify that GCC should tune for a
big.LITTLE system.

Additionally on native AArch64 GNU/Linux systems the value
@samp{native} tunes performance to the host system.  This option has no effect
if the compiler is unable to recognize the processor of the host system.

Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
are specified, the code is tuned to perform well across a range
of target processors.

This option cannot be suffixed by feature modifiers.

@item -mcpu=@var{name}
@opindex mcpu
Specify the name of the target processor, optionally suffixed by one
or more feature modifiers.  This option has the form
@option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where
the permissible values for @var{cpu} are the same as those available
for @option{-mtune}.  The permissible values for @var{feature} are
documented in the sub-section on
@ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
Feature Modifiers}.  Where conflicting feature modifiers are
specified, the right-most feature is used.

GCC uses @var{name} to determine what kind of instructions it can emit when
generating assembly code (as if by @option{-march}) and to determine
the target processor for which to tune for performance (as if
by @option{-mtune}).  Where this option is used in conjunction
with @option{-march} or @option{-mtune}, those options take precedence
over the appropriate part of this option.

@item -moverride=@var{string}
@opindex moverride
Override tuning decisions made by the back-end in response to a
@option{-mtune=} switch.  The syntax, semantics, and accepted values
for @var{string} in this option are not guaranteed to be consistent
across releases.

This option is only intended to be useful when developing GCC.

@item -mverbose-cost-dump
@opindex mverbose-cost-dump
Enable verbose cost model dumping in the debug dump files.  This option is
provided for use in debugging the compiler.

@item -mpc-relative-literal-loads
@itemx -mno-pc-relative-literal-loads
@opindex mpc-relative-literal-loads
@opindex mno-pc-relative-literal-loads
Enable or disable PC-relative literal loads.  With this option literal pools are
accessed using a single instruction and emitted after each function.  This
limits the maximum size of functions to 1MB.  This is enabled by default for
@option{-mcmodel=tiny}.

@item -msign-return-address=@var{scope}
@opindex msign-return-address
Select the function scope on which return address signing will be applied.
Permissible values are @samp{none}, which disables return address signing,
@samp{non-leaf}, which enables pointer signing for functions which are not leaf
functions, and @samp{all}, which enables pointer signing for all functions.  The
default value is @samp{none}.

@item -msve-vector-bits=@var{bits}
@opindex msve-vector-bits
Specify the number of bits in an SVE vector register.  This option only has
an effect when SVE is enabled.

GCC supports two forms of SVE code generation: ``vector-length
agnostic'' output that works with any size of vector register and
``vector-length specific'' output that only works when the vector
registers are a particular size.  Replacing @var{bits} with
@samp{scalable} selects vector-length agnostic output while
replacing it with a number selects vector-length specific output.
The possible lengths in the latter case are: 128, 256, 512, 1024
and 2048.  @samp{scalable} is the default.

At present, @samp{-msve-vector-bits=128} produces the same output
as @samp{-msve-vector-bits=scalable}.

@end table

@subsubsection @option{-march} and @option{-mcpu} Feature Modifiers
@anchor{aarch64-feature-modifiers}
@cindex @option{-march} feature modifiers
@cindex @option{-mcpu} feature modifiers
Feature modifiers used with @option{-march} and @option{-mcpu} can be any of
the following and their inverses @option{no@var{feature}}:

@table @samp
@item crc
Enable CRC extension.  This is on by default for
@option{-march=armv8.1-a}.
@item crypto
Enable Crypto extension.  This also enables Advanced SIMD and floating-point
instructions.
@item fp
Enable floating-point instructions.  This is on by default for all possible
values for options @option{-march} and @option{-mcpu}.
@item simd
Enable Advanced SIMD instructions.  This also enables floating-point
instructions.  This is on by default for all possible values for options
@option{-march} and @option{-mcpu}.
@item sve
Enable Scalable Vector Extension instructions.  This also enables Advanced
SIMD and floating-point instructions.
@item lse
Enable Large System Extension instructions.  This is on by default for
@option{-march=armv8.1-a}.
@item rdma
Enable Round Double Multiply Accumulate instructions.  This is on by default
for @option{-march=armv8.1-a}.
@item fp16
Enable FP16 extension.  This also enables floating-point instructions.
@item fp16fml
Enable FP16 fmla extension.  This also enables FP16 extensions and
floating-point instructions. This option is enabled by default for @option{-march=armv8.4-a}. Use of this option with architectures prior to Armv8.2-A is not supported.

@item rcpc
Enable the RcPc extension.  This does not change code generation from GCC,
but is passed on to the assembler, enabling inline asm statements to use
instructions from the RcPc extension.
@item dotprod
Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
@item aes
Enable the Armv8-a aes and pmull crypto extension.  This also enables Advanced
SIMD instructions.
@item sha2
Enable the Armv8-a sha2 crypto extension.  This also enables Advanced SIMD instructions.
@item sha3
Enable the sha512 and sha3 crypto extension.  This also enables Advanced SIMD
instructions. Use of this option with architectures prior to Armv8.2-A is not supported.
@item sm4
Enable the sm3 and sm4 crypto extension.  This also enables Advanced SIMD instructions.
Use of this option with architectures prior to Armv8.2-A is not supported.

@end table

Feature @option{crypto} implies @option{aes}, @option{sha2}, and @option{simd},
which implies @option{fp}.
Conversely, @option{nofp} implies @option{nosimd}, which implies
@option{nocrypto}, @option{noaes} and @option{nosha2}.

@node Adapteva Epiphany Options
@subsection Adapteva Epiphany Options

These @samp{-m} options are defined for Adapteva Epiphany:

@table @gcctabopt
@item -mhalf-reg-file
@opindex mhalf-reg-file
Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
That allows code to run on hardware variants that lack these registers.

@item -mprefer-short-insn-regs
@opindex mprefer-short-insn-regs
Preferentially allocate registers that allow short instruction generation.
This can result in increased instruction count, so this may either reduce or
increase overall code size.

@item -mbranch-cost=@var{num}
@opindex mbranch-cost
Set the cost of branches to roughly @var{num} ``simple'' instructions.
This cost is only a heuristic and is not guaranteed to produce
consistent results across releases.

@item -mcmove
@opindex mcmove
Enable the generation of conditional moves.

@item -mnops=@var{num}
@opindex mnops
Emit @var{num} NOPs before every other generated instruction.

@item -mno-soft-cmpsf
@opindex mno-soft-cmpsf
For single-precision floating-point comparisons, emit an @code{fsub} instruction
and test the flags.  This is faster than a software comparison, but can
get incorrect results in the presence of NaNs, or when two different small
numbers are compared such that their difference is calculated as zero.
The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
software comparisons.

@item -mstack-offset=@var{num}
@opindex mstack-offset
Set the offset between the top of the stack and the stack pointer.
E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
can be used by leaf functions without stack allocation.
Values other than @samp{8} or @samp{16} are untested and unlikely to work.
Note also that this option changes the ABI; compiling a program with a
different stack offset than the libraries have been compiled with
generally does not work.
This option can be useful if you want to evaluate if a different stack
offset would give you better code, but to actually use a different stack
offset to build working programs, it is recommended to configure the
toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.

@item -mno-round-nearest
@opindex mno-round-nearest
Make the scheduler assume that the rounding mode has been set to
truncating.  The default is @option{-mround-nearest}.

@item -mlong-calls
@opindex mlong-calls
If not otherwise specified by an attribute, assume all calls might be beyond
the offset range of the @code{b} / @code{bl} instructions, and therefore load the
function address into a register before performing a (otherwise direct) call.
This is the default.

@item -mshort-calls
@opindex short-calls
If not otherwise specified by an attribute, assume all direct calls are
in the range of the @code{b} / @code{bl} instructions, so use these instructions
for direct calls.  The default is @option{-mlong-calls}.

@item -msmall16
@opindex msmall16
Assume addresses can be loaded as 16-bit unsigned values.  This does not
apply to function addresses for which @option{-mlong-calls} semantics
are in effect.

@item -mfp-mode=@var{mode}
@opindex mfp-mode
Set the prevailing mode of the floating-point unit.
This determines the floating-point mode that is provided and expected
at function call and return time.  Making this mode match the mode you
predominantly need at function start can make your programs smaller and
faster by avoiding unnecessary mode switches.

@var{mode} can be set to one the following values:

@table @samp
@item caller
Any mode at function entry is valid, and retained or restored when
the function returns, and when it calls other functions.
This mode is useful for compiling libraries or other compilation units
you might want to incorporate into different programs with different
prevailing FPU modes, and the convenience of being able to use a single
object file outweighs the size and speed overhead for any extra
mode switching that might be needed, compared with what would be needed
with a more specific choice of prevailing FPU mode.

@item truncate
This is the mode used for floating-point calculations with
truncating (i.e.@: round towards zero) rounding mode.  That includes
conversion from floating point to integer.

@item round-nearest
This is the mode used for floating-point calculations with
round-to-nearest-or-even rounding mode.

@item int
This is the mode used to perform integer calculations in the FPU, e.g.@:
integer multiply, or integer multiply-and-accumulate.
@end table

The default is @option{-mfp-mode=caller}

@item -mnosplit-lohi
@itemx -mno-postinc
@itemx -mno-postmodify
@opindex mnosplit-lohi
@opindex mno-postinc
@opindex mno-postmodify
Code generation tweaks that disable, respectively, splitting of 32-bit
loads, generation of post-increment addresses, and generation of
post-modify addresses.  The defaults are @option{msplit-lohi},
@option{-mpost-inc}, and @option{-mpost-modify}.

@item -mnovect-double
@opindex mno-vect-double
Change the preferred SIMD mode to SImode.  The default is
@option{-mvect-double}, which uses DImode as preferred SIMD mode.

@item -max-vect-align=@var{num}
@opindex max-vect-align
The maximum alignment for SIMD vector mode types.
@var{num} may be 4 or 8.  The default is 8.
Note that this is an ABI change, even though many library function
interfaces are unaffected if they don't use SIMD vector modes
in places that affect size and/or alignment of relevant types.

@item -msplit-vecmove-early
@opindex msplit-vecmove-early
Split vector moves into single word moves before reload.  In theory this
can give better register allocation, but so far the reverse seems to be
generally the case.

@item -m1reg-@var{reg}
@opindex m1reg-
Specify a register to hold the constant @minus{}1, which makes loading small negative
constants and certain bitmasks faster.
Allowable values for @var{reg} are @samp{r43} and @samp{r63},
which specify use of that register as a fixed register,
and @samp{none}, which means that no register is used for this
purpose.  The default is @option{-m1reg-none}.

@end table

@node ARC Options
@subsection ARC Options
@cindex ARC options

The following options control the architecture variant for which code
is being compiled:

@c architecture variants
@table @gcctabopt

@item -mbarrel-shifter
@opindex mbarrel-shifter
Generate instructions supported by barrel shifter.  This is the default
unless @option{-mcpu=ARC601} or @samp{-mcpu=ARCEM} is in effect.

@item -mjli-always
@opindex mjli-alawys
Force to call a function using jli_s instruction.  This option is
valid only for ARCv2 architecture.

@item -mcpu=@var{cpu}
@opindex mcpu
Set architecture type, register usage, and instruction scheduling
parameters for @var{cpu}.  There are also shortcut alias options
available for backward compatibility and convenience.  Supported
values for @var{cpu} are

@table @samp
@opindex mA6
@opindex mARC600
@item arc600
Compile for ARC600.  Aliases: @option{-mA6}, @option{-mARC600}.

@item arc601
@opindex mARC601
Compile for ARC601.  Alias: @option{-mARC601}.

@item arc700
@opindex mA7
@opindex mARC700
Compile for ARC700.  Aliases: @option{-mA7}, @option{-mARC700}.
This is the default when configured with @option{--with-cpu=arc700}@.

@item arcem
Compile for ARC EM.

@item archs
Compile for ARC HS.

@item em
Compile for ARC EM CPU with no hardware extensions.

@item em4
Compile for ARC EM4 CPU.

@item em4_dmips
Compile for ARC EM4 DMIPS CPU.

@item em4_fpus
Compile for ARC EM4 DMIPS CPU with the single-precision floating-point
extension.

@item em4_fpuda
Compile for ARC EM4 DMIPS CPU with single-precision floating-point and
double assist instructions.

@item hs
Compile for ARC HS CPU with no hardware extensions except the atomic
instructions.

@item hs34
Compile for ARC HS34 CPU.

@item hs38
Compile for ARC HS38 CPU.

@item hs38_linux
Compile for ARC HS38 CPU with all hardware extensions on.

@item arc600_norm
Compile for ARC 600 CPU with @code{norm} instructions enabled.

@item arc600_mul32x16
Compile for ARC 600 CPU with @code{norm} and 32x16-bit multiply 
instructions enabled.

@item arc600_mul64
Compile for ARC 600 CPU with @code{norm} and @code{mul64}-family 
instructions enabled.

@item arc601_norm
Compile for ARC 601 CPU with @code{norm} instructions enabled.

@item arc601_mul32x16
Compile for ARC 601 CPU with @code{norm} and 32x16-bit multiply
instructions enabled.

@item arc601_mul64
Compile for ARC 601 CPU with @code{norm} and @code{mul64}-family
instructions enabled.

@item nps400
Compile for ARC 700 on NPS400 chip.

@item em_mini
Compile for ARC EM minimalist configuration featuring reduced register
set.

@end table

@item -mdpfp
@opindex mdpfp
@itemx -mdpfp-compact
@opindex mdpfp-compact
Generate double-precision FPX instructions, tuned for the compact
implementation.

@item -mdpfp-fast
@opindex mdpfp-fast
Generate double-precision FPX instructions, tuned for the fast
implementation.

@item -mno-dpfp-lrsr
@opindex mno-dpfp-lrsr
Disable @code{lr} and @code{sr} instructions from using FPX extension
aux registers.

@item -mea
@opindex mea
Generate extended arithmetic instructions.  Currently only
@code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
supported.  This is always enabled for @option{-mcpu=ARC700}.

@item -mno-mpy
@opindex mno-mpy
Do not generate @code{mpy}-family instructions for ARC700.  This option is
deprecated.

@item -mmul32x16
@opindex mmul32x16
Generate 32x16-bit multiply and multiply-accumulate instructions.

@item -mmul64
@opindex mmul64
Generate @code{mul64} and @code{mulu64} instructions.  
Only valid for @option{-mcpu=ARC600}.

@item -mnorm
@opindex mnorm
Generate @code{norm} instructions.  This is the default if @option{-mcpu=ARC700}
is in effect.

@item -mspfp
@opindex mspfp
@itemx -mspfp-compact
@opindex mspfp-compact
Generate single-precision FPX instructions, tuned for the compact
implementation.

@item -mspfp-fast
@opindex mspfp-fast
Generate single-precision FPX instructions, tuned for the fast
implementation.

@item -msimd
@opindex msimd
Enable generation of ARC SIMD instructions via target-specific
builtins.  Only valid for @option{-mcpu=ARC700}.

@item -msoft-float
@opindex msoft-float
This option ignored; it is provided for compatibility purposes only.
Software floating-point code is emitted by default, and this default
can overridden by FPX options; @option{-mspfp}, @option{-mspfp-compact}, or
@option{-mspfp-fast} for single precision, and @option{-mdpfp},
@option{-mdpfp-compact}, or @option{-mdpfp-fast} for double precision.

@item -mswap
@opindex mswap
Generate @code{swap} instructions.

@item -matomic
@opindex matomic
This enables use of the locked load/store conditional extension to implement
atomic memory built-in functions.  Not available for ARC 6xx or ARC
EM cores.

@item -mdiv-rem
@opindex mdiv-rem
Enable @code{div} and @code{rem} instructions for ARCv2 cores.

@item -mcode-density
@opindex mcode-density
Enable code density instructions for ARC EM.  
This option is on by default for ARC HS.

@item -mll64
@opindex mll64
Enable double load/store operations for ARC HS cores.

@item -mtp-regno=@var{regno}
@opindex mtp-regno
Specify thread pointer register number.

@item -mmpy-option=@var{multo}
@opindex mmpy-option
Compile ARCv2 code with a multiplier design option.  You can specify 
the option using either a string or numeric value for @var{multo}.  
@samp{wlh1} is the default value.  The recognized values are:

@table @samp
@item 0
@itemx none
No multiplier available.

@item 1
@itemx w
16x16 multiplier, fully pipelined.
The following instructions are enabled: @code{mpyw} and @code{mpyuw}.

@item 2
@itemx wlh1
32x32 multiplier, fully
pipelined (1 stage).  The following instructions are additionally
enabled: @code{mpy}, @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 3
@itemx wlh2
32x32 multiplier, fully pipelined
(2 stages).  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 4
@itemx wlh3
Two 16x16 multipliers, blocking,
sequential.  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 5
@itemx wlh4
One 16x16 multiplier, blocking,
sequential.  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 6
@itemx wlh5
One 32x4 multiplier, blocking,
sequential.  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 7
@itemx plus_dmpy
ARC HS SIMD support.

@item 8
@itemx plus_macd
ARC HS SIMD support.

@item 9
@itemx plus_qmacw
ARC HS SIMD support.

@end table

This option is only available for ARCv2 cores@.

@item -mfpu=@var{fpu}
@opindex mfpu
Enables support for specific floating-point hardware extensions for ARCv2
cores.  Supported values for @var{fpu} are:

@table @samp

@item fpus
Enables support for single-precision floating-point hardware
extensions@.

@item fpud
Enables support for double-precision floating-point hardware
extensions.  The single-precision floating-point extension is also
enabled.  Not available for ARC EM@.

@item fpuda
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.  The single-precision
floating-point extension is also enabled.  This option is
only available for ARC EM@.

@item fpuda_div
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.
The single-precision floating-point, square-root, and divide 
extensions are also enabled.  This option is
only available for ARC EM@.

@item fpuda_fma
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.
The single-precision floating-point and fused multiply and add 
hardware extensions are also enabled.  This option is
only available for ARC EM@.

@item fpuda_all
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.
All single-precision floating-point hardware extensions are also
enabled.  This option is only available for ARC EM@.

@item fpus_div
Enables support for single-precision floating-point, square-root and divide 
hardware extensions@.

@item fpud_div
Enables support for double-precision floating-point, square-root and divide 
hardware extensions.  This option
includes option @samp{fpus_div}. Not available for ARC EM@.

@item fpus_fma
Enables support for single-precision floating-point and 
fused multiply and add hardware extensions@.

@item fpud_fma
Enables support for double-precision floating-point and 
fused multiply and add hardware extensions.  This option
includes option @samp{fpus_fma}.  Not available for ARC EM@.

@item fpus_all
Enables support for all single-precision floating-point hardware
extensions@.

@item fpud_all
Enables support for all single- and double-precision floating-point
hardware extensions.  Not available for ARC EM@.

@end table

@item -mirq-ctrl-saved=@var{register-range}, @var{blink}, @var{lp_count}
@opindex mirq-ctrl-saved
Specifies general-purposes registers that the processor automatically
saves/restores on interrupt entry and exit.  @var{register-range} is
specified as two registers separated by a dash.  The register range
always starts with @code{r0}, the upper limit is @code{fp} register.
@var{blink} and @var{lp_count} are optional.  This option is only
valid for ARC EM and ARC HS cores.

@item -mrgf-banked-regs=@var{number}
@opindex mrgf-banked-regs
Specifies the number of registers replicated in second register bank
on entry to fast interrupt.  Fast interrupts are interrupts with the
highest priority level P0.  These interrupts save only PC and STATUS32
registers to avoid memory transactions during interrupt entry and exit
sequences.  Use this option when you are using fast interrupts in an
ARC V2 family processor.  Permitted values are 4, 8, 16, and 32.

@item -mlpc-width=@var{width}
@opindex mlpc-width
Specify the width of the @code{lp_count} register.  Valid values for
@var{width} are 8, 16, 20, 24, 28 and 32 bits.  The default width is
fixed to 32 bits.  If the width is less than 32, the compiler does not
attempt to transform loops in your program to use the zero-delay loop
mechanism unless it is known that the @code{lp_count} register can
hold the required loop-counter value.  Depending on the width
specified, the compiler and run-time library might continue to use the
loop mechanism for various needs.  This option defines macro
@code{__ARC_LPC_WIDTH__} with the value of @var{width}.

@item -mrf16
@opindex mrf16
This option instructs the compiler to generate code for a 16-entry
register file.  This option defines the @code{__ARC_RF16__}
preprocessor macro.

@end table

The following options are passed through to the assembler, and also
define preprocessor macro symbols.

@c Flags used by the assembler, but for which we define preprocessor
@c macro symbols as well.
@table @gcctabopt
@item -mdsp-packa
@opindex mdsp-packa
Passed down to the assembler to enable the DSP Pack A extensions.
Also sets the preprocessor symbol @code{__Xdsp_packa}.  This option is
deprecated.

@item -mdvbf
@opindex mdvbf
Passed down to the assembler to enable the dual Viterbi butterfly
extension.  Also sets the preprocessor symbol @code{__Xdvbf}.  This
option is deprecated.

@c ARC700 4.10 extension instruction
@item -mlock
@opindex mlock
Passed down to the assembler to enable the locked load/store
conditional extension.  Also sets the preprocessor symbol
@code{__Xlock}.

@item -mmac-d16
@opindex mmac-d16
Passed down to the assembler.  Also sets the preprocessor symbol
@code{__Xxmac_d16}.  This option is deprecated.

@item -mmac-24
@opindex mmac-24
Passed down to the assembler.  Also sets the preprocessor symbol
@code{__Xxmac_24}.  This option is deprecated.

@c ARC700 4.10 extension instruction
@item -mrtsc
@opindex mrtsc
Passed down to the assembler to enable the 64-bit time-stamp counter
extension instruction.  Also sets the preprocessor symbol
@code{__Xrtsc}.  This option is deprecated.

@c ARC700 4.10 extension instruction
@item -mswape
@opindex mswape
Passed down to the assembler to enable the swap byte ordering
extension instruction.  Also sets the preprocessor symbol
@code{__Xswape}.

@item -mtelephony
@opindex mtelephony
Passed down to the assembler to enable dual- and single-operand
instructions for telephony.  Also sets the preprocessor symbol
@code{__Xtelephony}.  This option is deprecated.

@item -mxy
@opindex mxy
Passed down to the assembler to enable the XY memory extension.  Also
sets the preprocessor symbol @code{__Xxy}.

@end table

The following options control how the assembly code is annotated:

@c Assembly annotation options
@table @gcctabopt
@item -misize
@opindex misize
Annotate assembler instructions with estimated addresses.

@item -mannotate-align
@opindex mannotate-align
Explain what alignment considerations lead to the decision to make an
instruction short or long.

@end table

The following options are passed through to the linker:

@c options passed through to the linker
@table @gcctabopt
@item -marclinux
@opindex marclinux
Passed through to the linker, to specify use of the @code{arclinux} emulation.
This option is enabled by default in tool chains built for
@w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
when profiling is not requested.

@item -marclinux_prof
@opindex marclinux_prof
Passed through to the linker, to specify use of the
@code{arclinux_prof} emulation.  This option is enabled by default in
tool chains built for @w{@code{arc-linux-uclibc}} and
@w{@code{arceb-linux-uclibc}} targets when profiling is requested.

@end table

The following options control the semantics of generated code:

@c semantically relevant code generation options
@table @gcctabopt
@item -mlong-calls
@opindex mlong-calls
Generate calls as register indirect calls, thus providing access
to the full 32-bit address range.

@item -mmedium-calls
@opindex mmedium-calls
Don't use less than 25-bit addressing range for calls, which is the
offset available for an unconditional branch-and-link
instruction.  Conditional execution of function calls is suppressed, to
allow use of the 25-bit range, rather than the 21-bit range with
conditional branch-and-link.  This is the default for tool chains built
for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets.

@item -G @var{num}
@opindex G
Put definitions of externally-visible data in a small data section if
that data is no bigger than @var{num} bytes.  The default value of
@var{num} is 4 for any ARC configuration, or 8 when we have double
load/store operations.

@item -mno-sdata
@opindex mno-sdata
Do not generate sdata references.  This is the default for tool chains
built for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}}
targets.

@item -mvolatile-cache
@opindex mvolatile-cache
Use ordinarily cached memory accesses for volatile references.  This is the
default.

@item -mno-volatile-cache
@opindex mno-volatile-cache
Enable cache bypass for volatile references.

@end table

The following options fine tune code generation:
@c code generation tuning options
@table @gcctabopt
@item -malign-call
@opindex malign-call
Do alignment optimizations for call instructions.

@item -mauto-modify-reg
@opindex mauto-modify-reg
Enable the use of pre/post modify with register displacement.

@item -mbbit-peephole
@opindex mbbit-peephole
Enable bbit peephole2.

@item -mno-brcc
@opindex mno-brcc
This option disables a target-specific pass in @file{arc_reorg} to
generate compare-and-branch (@code{br@var{cc}}) instructions.  
It has no effect on
generation of these instructions driven by the combiner pass.

@item -mcase-vector-pcrel
@opindex mcase-vector-pcrel
Use PC-relative switch case tables to enable case table shortening.
This is the default for @option{-Os}.

@item -mcompact-casesi
@opindex mcompact-casesi
Enable compact @code{casesi} pattern.  This is the default for @option{-Os},
and only available for ARCv1 cores.

@item -mno-cond-exec
@opindex mno-cond-exec
Disable the ARCompact-specific pass to generate conditional 
execution instructions.

Due to delay slot scheduling and interactions between operand numbers,
literal sizes, instruction lengths, and the support for conditional execution,
the target-independent pass to generate conditional execution is often lacking,
so the ARC port has kept a special pass around that tries to find more
conditional execution generation opportunities after register allocation,
branch shortening, and delay slot scheduling have been done.  This pass
generally, but not always, improves performance and code size, at the cost of
extra compilation time, which is why there is an option to switch it off.
If you have a problem with call instructions exceeding their allowable
offset range because they are conditionalized, you should consider using
@option{-mmedium-calls} instead.

@item -mearly-cbranchsi
@opindex mearly-cbranchsi
Enable pre-reload use of the @code{cbranchsi} pattern.

@item -mexpand-adddi
@opindex mexpand-adddi
Expand @code{adddi3} and @code{subdi3} at RTL generation time into
@code{add.f}, @code{adc} etc.  This option is deprecated.

@item -mindexed-loads
@opindex mindexed-loads
Enable the use of indexed loads.  This can be problematic because some
optimizers then assume that indexed stores exist, which is not
the case.

@item -mlra
@opindex mlra
Enable Local Register Allocation.  This is still experimental for ARC,
so by default the compiler uses standard reload
(i.e. @option{-mno-lra}).

@item -mlra-priority-none
@opindex mlra-priority-none
Don't indicate any priority for target registers.

@item -mlra-priority-compact
@opindex mlra-priority-compact
Indicate target register priority for r0..r3 / r12..r15.

@item -mlra-priority-noncompact
@opindex mlra-priority-noncompact
Reduce target register priority for r0..r3 / r12..r15.

@item -mno-millicode
@opindex mno-millicode
When optimizing for size (using @option{-Os}), prologues and epilogues
that have to save or restore a large number of registers are often
shortened by using call to a special function in libgcc; this is
referred to as a @emph{millicode} call.  As these calls can pose
performance issues, and/or cause linking issues when linking in a
nonstandard way, this option is provided to turn off millicode call
generation.

@item -mmixed-code
@opindex mmixed-code
Tweak register allocation to help 16-bit instruction generation.
This generally has the effect of decreasing the average instruction size
while increasing the instruction count.

@item -mq-class
@opindex mq-class
Enable @samp{q} instruction alternatives.
This is the default for @option{-Os}.

@item -mRcq
@opindex mRcq
Enable @samp{Rcq} constraint handling.  
Most short code generation depends on this.
This is the default.

@item -mRcw
@opindex mRcw
Enable @samp{Rcw} constraint handling.  
Most ccfsm condexec mostly depends on this.
This is the default.

@item -msize-level=@var{level}
@opindex msize-level
Fine-tune size optimization with regards to instruction lengths and alignment.
The recognized values for @var{level} are:
@table @samp
@item 0
No size optimization.  This level is deprecated and treated like @samp{1}.

@item 1
Short instructions are used opportunistically.

@item 2
In addition, alignment of loops and of code after barriers are dropped.

@item 3
In addition, optional data alignment is dropped, and the option @option{Os} is enabled.

@end table

This defaults to @samp{3} when @option{-Os} is in effect.  Otherwise,
the behavior when this is not set is equivalent to level @samp{1}.

@item -mtune=@var{cpu}
@opindex mtune
Set instruction scheduling parameters for @var{cpu}, overriding any implied
by @option{-mcpu=}.

Supported values for @var{cpu} are

@table @samp
@item ARC600
Tune for ARC600 CPU.

@item ARC601
Tune for ARC601 CPU.

@item ARC700
Tune for ARC700 CPU with standard multiplier block.

@item ARC700-xmac
Tune for ARC700 CPU with XMAC block.

@item ARC725D
Tune for ARC725D CPU.

@item ARC750D
Tune for ARC750D CPU.

@end table

@item -mmultcost=@var{num}
@opindex mmultcost
Cost to assume for a multiply instruction, with @samp{4} being equal to a
normal instruction.

@item -munalign-prob-threshold=@var{probability}
@opindex munalign-prob-threshold
Set probability threshold for unaligning branches.
When tuning for @samp{ARC700} and optimizing for speed, branches without
filled delay slot are preferably emitted unaligned and long, unless
profiling indicates that the probability for the branch to be taken
is below @var{probability}.  @xref{Cross-profiling}.
The default is (REG_BR_PROB_BASE/2), i.e.@: 5000.

@end table

The following options are maintained for backward compatibility, but
are now deprecated and will be removed in a future release:

@c Deprecated options
@table @gcctabopt

@item -margonaut
@opindex margonaut
Obsolete FPX.

@item -mbig-endian
@opindex mbig-endian
@itemx -EB
@opindex EB
Compile code for big-endian targets.  Use of these options is now
deprecated.  Big-endian code is supported by configuring GCC to build
@w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets,
for which big endian is the default.

@item -mlittle-endian
@opindex mlittle-endian
@itemx -EL
@opindex EL
Compile code for little-endian targets.  Use of these options is now
deprecated.  Little-endian code is supported by configuring GCC to build 
@w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets,
for which little endian is the default.

@item -mbarrel_shifter
@opindex mbarrel_shifter
Replaced by @option{-mbarrel-shifter}.

@item -mdpfp_compact
@opindex mdpfp_compact
Replaced by @option{-mdpfp-compact}.

@item -mdpfp_fast
@opindex mdpfp_fast
Replaced by @option{-mdpfp-fast}.

@item -mdsp_packa
@opindex mdsp_packa
Replaced by @option{-mdsp-packa}.

@item -mEA
@opindex mEA
Replaced by @option{-mea}.

@item -mmac_24
@opindex mmac_24
Replaced by @option{-mmac-24}.

@item -mmac_d16
@opindex mmac_d16
Replaced by @option{-mmac-d16}.

@item -mspfp_compact
@opindex mspfp_compact
Replaced by @option{-mspfp-compact}.

@item -mspfp_fast
@opindex mspfp_fast
Replaced by @option{-mspfp-fast}.

@item -mtune=@var{cpu}
@opindex mtune
Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
@samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
@samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively.

@item -multcost=@var{num}
@opindex multcost
Replaced by @option{-mmultcost}.

@end table

@node ARM Options
@subsection ARM Options
@cindex ARM options

These @samp{-m} options are defined for the ARM port:

@table @gcctabopt
@item -mabi=@var{name}
@opindex mabi
Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.

@item -mapcs-frame
@opindex mapcs-frame
Generate a stack frame that is compliant with the ARM Procedure Call
Standard for all functions, even if this is not strictly necessary for
correct execution of the code.  Specifying @option{-fomit-frame-pointer}
with this option causes the stack frames not to be generated for
leaf functions.  The default is @option{-mno-apcs-frame}.
This option is deprecated.

@item -mapcs
@opindex mapcs
This is a synonym for @option{-mapcs-frame} and is deprecated.

@ignore
@c not currently implemented
@item -mapcs-stack-check
@opindex mapcs-stack-check
Generate code to check the amount of stack space available upon entry to
every function (that actually uses some stack space).  If there is
insufficient space available then either the function
@code{__rt_stkovf_split_small} or @code{__rt_stkovf_split_big} is
called, depending upon the amount of stack space required.  The runtime
system is required to provide these functions.  The default is
@option{-mno-apcs-stack-check}, since this produces smaller code.

@c not currently implemented
@item -mapcs-reentrant
@opindex mapcs-reentrant
Generate reentrant, position-independent code.  The default is
@option{-mno-apcs-reentrant}.
@end ignore

@item -mthumb-interwork
@opindex mthumb-interwork
Generate code that supports calling between the ARM and Thumb
instruction sets.  Without this option, on pre-v5 architectures, the
two instruction sets cannot be reliably used inside one program.  The
default is @option{-mno-thumb-interwork}, since slightly larger code
is generated when @option{-mthumb-interwork} is specified.  In AAPCS
configurations this option is meaningless.

@item -mno-sched-prolog
@opindex mno-sched-prolog
Prevent the reordering of instructions in the function prologue, or the
merging of those instruction with the instructions in the function's
body.  This means that all functions start with a recognizable set
of instructions (or in fact one of a choice from a small set of
different function prologues), and this information can be used to
locate the start of functions inside an executable piece of code.  The
default is @option{-msched-prolog}.

@item -mfloat-abi=@var{name}
@opindex mfloat-abi
Specifies which floating-point ABI to use.  Permissible values
are: @samp{soft}, @samp{softfp} and @samp{hard}.

Specifying @samp{soft} causes GCC to generate output containing
library calls for floating-point operations.
@samp{softfp} allows the generation of code using hardware floating-point
instructions, but still uses the soft-float calling conventions.
@samp{hard} allows generation of floating-point instructions
and uses FPU-specific calling conventions.

The default depends on the specific target configuration.  Note that
the hard-float and soft-float ABIs are not link-compatible; you must
compile your entire program with the same ABI, and link with a
compatible set of libraries.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a processor running in little-endian mode.  This is
the default for all standard configurations.

@item -mbig-endian
@opindex mbig-endian
Generate code for a processor running in big-endian mode; the default is
to compile code for a little-endian processor.

@item -mbe8
@itemx -mbe32
@opindex mbe8
When linking a big-endian image select between BE8 and BE32 formats.
The option has no effect for little-endian images and is ignored.  The
default is dependent on the selected target architecture.  For ARMv6
and later architectures the default is BE8, for older architectures
the default is BE32.  BE32 format has been deprecated by ARM.

@item -march=@var{name}@r{[}+extension@dots{}@r{]}
@opindex march
This specifies the name of the target ARM architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  This option can be used in conjunction with or instead
of the @option{-mcpu=} option.

Permissible names are:
@samp{armv4t},
@samp{armv5t}, @samp{armv5te},
@samp{armv6}, @samp{armv6j}, @samp{armv6k}, @samp{armv6kz}, @samp{armv6t2},
@samp{armv6z}, @samp{armv6zk},
@samp{armv7}, @samp{armv7-a}, @samp{armv7ve}, 
@samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a},
@samp{armv8.4-a},
@samp{armv7-r},
@samp{armv8-r},
@samp{armv6-m}, @samp{armv6s-m},
@samp{armv7-m}, @samp{armv7e-m},
@samp{armv8-m.base}, @samp{armv8-m.main},
@samp{iwmmxt} and @samp{iwmmxt2}.

Additionally, the following architectures, which lack support for the
Thumb execution state, are recognized but support is deprecated:
@samp{armv2}, @samp{armv2a}, @samp{armv3}, @samp{armv3m},
@samp{armv4}, @samp{armv5} and @samp{armv5e}.

Many of the architectures support extensions.  These can be added by
appending @samp{+@var{extension}} to the architecture name.  Extension
options are processed in order and capabilities accumulate.  An extension
will also enable any necessary base extensions
upon which it depends.  For example, the @samp{+crypto} extension
will always enable the @samp{+simd} extension.  The exception to the
additive construction is for extensions that are prefixed with
@samp{+no@dots{}}: these extensions disable the specified option and
any other extensions that may depend on the presence of that
extension.

For example, @samp{-march=armv7-a+simd+nofp+vfpv4} is equivalent to
writing @samp{-march=armv7-a+vfpv4} since the @samp{+simd} option is
entirely disabled by the @samp{+nofp} option that follows it.

Most extension names are generically named, but have an effect that is
dependent upon the architecture to which it is applied.  For example,
the @samp{+simd} option can be applied to both @samp{armv7-a} and
@samp{armv8-a} architectures, but will enable the original ARMv7-A
Advanced SIMD (Neon) extensions for @samp{armv7-a} and the ARMv8-A
variant for @samp{armv8-a}.

The table below lists the supported extensions for each architecture.
Architectures not mentioned do not support any extensions.

@table @samp
@item  armv5e
@itemx armv5te
@itemx armv6
@itemx armv6j
@itemx armv6k
@itemx armv6kz
@itemx armv6t2
@itemx armv6z
@itemx armv6zk
@table @samp
@item +fp
The VFPv2 floating-point instructions.  The extension @samp{+vfpv2} can be
used as an alias for this extension.

@item +nofp
Disable the floating-point instructions.
@end table

@item armv7
The common subset of the ARMv7-A, ARMv7-R and ARMv7-M architectures.
@table @samp
@item +fp
The VFPv3 floating-point instructions, with 16 double-precision
registers.  The extension @samp{+vfpv3-d16} can be used as an alias
for this extension.  Note that floating-point is not supported by the
base ARMv7-M architecture, but is compatible with both the ARMv7-A and
ARMv7-R architectures.

@item +nofp
Disable the floating-point instructions.
@end table

@item armv7-a
@table @samp
@item +fp
The VFPv3 floating-point instructions, with 16 double-precision
registers.  The extension @samp{+vfpv3-d16} can be used as an alias
for this extension.

@item +simd
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions.
The extensions @samp{+neon} and @samp{+neon-vfpv3} can be used as aliases
for this extension.

@item +vfpv3
The VFPv3 floating-point instructions, with 32 double-precision
registers.

@item +vfpv3-d16-fp16
The VFPv3 floating-point instructions, with 16 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv3-fp16
The VFPv3 floating-point instructions, with 32 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv4-d16
The VFPv4 floating-point instructions, with 16 double-precision
registers.

@item +vfpv4
The VFPv4 floating-point instructions, with 32 double-precision
registers.

@item +neon-fp16
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions, with
the half-precision floating-point conversion operations.

@item +neon-vfpv4
The Advanced SIMD (Neon) v2 and the VFPv4 floating-point instructions.

@item +nosimd
Disable the Advanced SIMD instructions (does not disable floating point).

@item +nofp
Disable the floating-point and Advanced SIMD instructions.
@end table

@item armv7ve
The extended version of the ARMv7-A architecture with support for
virtualization.
@table @samp
@item +fp
The VFPv4 floating-point instructions, with 16 double-precision registers.
The extension @samp{+vfpv4-d16} can be used as an alias for this extension.

@item +simd
The Advanced SIMD (Neon) v2 and the VFPv4 floating-point instructions.  The
extension @samp{+neon-vfpv4} can be used as an alias for this extension.

@item +vfpv3-d16
The VFPv3 floating-point instructions, with 16 double-precision
registers.

@item +vfpv3
The VFPv3 floating-point instructions, with 32 double-precision
registers.

@item +vfpv3-d16-fp16
The VFPv3 floating-point instructions, with 16 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv3-fp16
The VFPv3 floating-point instructions, with 32 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv4-d16
The VFPv4 floating-point instructions, with 16 double-precision
registers.

@item +vfpv4
The VFPv4 floating-point instructions, with 32 double-precision
registers.

@item +neon
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions.
The extension @samp{+neon-vfpv3} can be used as an alias for this extension.

@item +neon-fp16
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions, with
the half-precision floating-point conversion operations.

@item +nosimd
Disable the Advanced SIMD instructions (does not disable floating point).

@item +nofp
Disable the floating-point and Advanced SIMD instructions.
@end table

@item armv8-a
@table @samp
@item +crc
The Cyclic Redundancy Check (CRC) instructions.
@item +simd
The ARMv8-A Advanced SIMD and floating-point instructions.
@item +crypto
The cryptographic instructions.
@item +nocrypto
Disable the cryptographic instructions.
@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table

@item armv8.1-a
@table @samp
@item +simd
The ARMv8.1-A Advanced SIMD and floating-point instructions.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions.

@item +nocrypto
Disable the cryptographic instructions.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table

@item armv8.2-a
@itemx armv8.3-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions.

@item +fp16fml
The half-precision floating-point fmla extension.  This also enables
the half-precision floating-point extension and Advanced SIMD and
floating-point instructions.

@item +simd
The ARMv8.1-A Advanced SIMD and floating-point instructions.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions.

@item +dotprod
Enable the Dot Product extension.  This also enables Advanced SIMD instructions.

@item +nocrypto
Disable the cryptographic extension.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table

@item armv8.4-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions as well
as the Dot Product extension and the half-precision floating-point fmla
extension.

@item +simd
The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
Dot Product extension.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions as well as the Dot Product extension.

@item +nocrypto
Disable the cryptographic extension.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table

@item armv7-r
@table @samp
@item +fp.sp
The single-precision VFPv3 floating-point instructions.  The extension
@samp{+vfpv3xd} can be used as an alias for this extension.

@item +fp
The VFPv3 floating-point instructions with 16 double-precision registers.
The extension +vfpv3-d16 can be used as an alias for this extension.

@item +nofp
Disable the floating-point extension.

@item +idiv
The ARM-state integer division instructions.

@item +noidiv
Disable the ARM-state integer division extension.
@end table

@item armv7e-m
@table @samp
@item +fp
The single-precision VFPv4 floating-point instructions.

@item +fpv5
The single-precision FPv5 floating-point instructions.

@item +fp.dp
The single- and double-precision FPv5 floating-point instructions.

@item +nofp
Disable the floating-point extensions.
@end table

@item  armv8-m.main
@table @samp
@item +dsp
The DSP instructions.

@item +nodsp
Disable the DSP extension.

@item +fp
The single-precision floating-point instructions.

@item +fp.dp
The single- and double-precision floating-point instructions.

@item +nofp
Disable the floating-point extension.
@end table

@item armv8-r
@table @samp
@item +crc
The Cyclic Redundancy Check (CRC) instructions.
@item +fp.sp
The single-precision FPv5 floating-point instructions.
@item +simd
The ARMv8-A Advanced SIMD and floating-point instructions.
@item +crypto
The cryptographic instructions.
@item +nocrypto
Disable the cryptographic instructions.
@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table

@end table

@option{-march=native} causes the compiler to auto-detect the architecture
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect
is unsuccessful the option has no effect.

@item -mtune=@var{name}
@opindex mtune
This option specifies the name of the target ARM processor for
which GCC should tune the performance of the code.
For some ARM implementations better performance can be obtained by using
this option.
Permissible names are: @samp{arm2}, @samp{arm250},
@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
@samp{arm720},
@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
@samp{arm710t}, @samp{arm720t}, @samp{arm740t},
@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
@samp{strongarm1110},
@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
@samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
@samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8},
@samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17},
@samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55},
@samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75},
@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7},
@samp{cortex-r8}, @samp{cortex-r52},
@samp{cortex-m33},
@samp{cortex-m23},
@samp{cortex-m7},
@samp{cortex-m4},
@samp{cortex-m3},
@samp{cortex-m1},
@samp{cortex-m0},
@samp{cortex-m0plus},
@samp{cortex-m1.small-multiply},
@samp{cortex-m0.small-multiply},
@samp{cortex-m0plus.small-multiply},
@samp{exynos-m1},
@samp{marvell-pj4},
@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312},
@samp{fa526}, @samp{fa626},
@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te},
@samp{xgene1}.

Additionally, this option can specify that GCC should tune the performance
of the code for a big.LITTLE system.  Permissible names are:
@samp{cortex-a15.cortex-a7}, @samp{cortex-a17.cortex-a7},
@samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a72.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55}.

@option{-mtune=generic-@var{arch}} specifies that GCC should tune the
performance for a blend of processors within architecture @var{arch}.
The aim is to generate code that run well on the current most popular
processors, balancing between optimizations that benefit some CPUs in the
range, and avoiding performance pitfalls of other CPUs.  The effects of
this option may change in future GCC versions as CPU models come and go.

@option{-mtune} permits the same extension options as @option{-mcpu}, but
the extension options do not affect the tuning of the generated code.

@option{-mtune=native} causes the compiler to auto-detect the CPU
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect is
unsuccessful the option has no effect.

@item -mcpu=@var{name}@r{[}+extension@dots{}@r{]}
@opindex mcpu
This specifies the name of the target ARM processor.  GCC uses this name
to derive the name of the target ARM architecture (as if specified
by @option{-march}) and the ARM processor type for which to tune for
performance (as if specified by @option{-mtune}).  Where this option
is used in conjunction with @option{-march} or @option{-mtune},
those options take precedence over the appropriate part of this option.

Many of the supported CPUs implement optional architectural
extensions.  Where this is so the architectural extensions are
normally enabled by default.  If implementations that lack the
extension exist, then the extension syntax can be used to disable
those extensions that have been omitted.  For floating-point and
Advanced SIMD (Neon) instructions, the settings of the options
@option{-mfloat-abi} and @option{-mfpu} must also be considered:
floating-point and Advanced SIMD instructions will only be used if
@option{-mfloat-abi} is not set to @samp{soft}; and any setting of
@option{-mfpu} other than @samp{auto} will override the available
floating-point and SIMD extension instructions.

For example, @samp{cortex-a9} can be found in three major
configurations: integer only, with just a floating-point unit or with
floating-point and Advanced SIMD.  The default is to enable all the
instructions, but the extensions @samp{+nosimd} and @samp{+nofp} can
be used to disable just the SIMD or both the SIMD and floating-point
instructions respectively.

Permissible names for this option are the same as those for
@option{-mtune}.

The following extension options are common to the listed CPUs:

@table @samp
@item +nodsp
Disable the DSP instructions on @samp{cortex-m33}.

@item  +nofp
Disables the floating-point instructions on @samp{arm9e},
@samp{arm946e-s}, @samp{arm966e-s}, @samp{arm968e-s}, @samp{arm10e},
@samp{arm1020e}, @samp{arm1022e}, @samp{arm926ej-s},
@samp{arm1026ej-s}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8},
@samp{cortex-m4}, @samp{cortex-m7} and @samp{cortex-m33}.
Disables the floating-point and SIMD instructions on
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7},
@samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a12},
@samp{cortex-a15}, @samp{cortex-a17}, @samp{cortex-a15.cortex-a7},
@samp{cortex-a17.cortex-a7}, @samp{cortex-a32}, @samp{cortex-a35},
@samp{cortex-a53} and @samp{cortex-a55}.

@item +nofp.dp
Disables the double-precision component of the floating-point instructions
on @samp{cortex-r5}, @samp{cortex-r52} and @samp{cortex-m7}.

@item +nosimd
Disables the SIMD (but not floating-point) instructions on
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}
and @samp{cortex-a9}.

@item +crypto
Enables the cryptographic instructions on @samp{cortex-a32},
@samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55}, @samp{cortex-a57},
@samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75}, @samp{exynos-m1},
@samp{xgene1}, @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53} and
@samp{cortex-a75.cortex-a55}.
@end table

Additionally the @samp{generic-armv7-a} pseudo target defaults to
VFPv3 with 16 double-precision registers.  It supports the following
extension options: @samp{vfpv3-d16}, @samp{vfpv3},
@samp{vfpv3-d16-fp16}, @samp{vfpv3-fp16}, @samp{vfpv4-d16},
@samp{vfpv4}, @samp{neon}, @samp{neon-vfpv3}, @samp{neon-fp16},
@samp{neon-vfpv4}.  The meanings are the same as for the extensions to
@option{-march=armv7-a}.

@option{-mcpu=generic-@var{arch}} is also permissible, and is
equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
See @option{-mtune} for more information.

@option{-mcpu=native} causes the compiler to auto-detect the CPU
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect
is unsuccessful the option has no effect.

@item -mfpu=@var{name}
@opindex mfpu
This specifies what floating-point hardware (or hardware emulation) is
available on the target.  Permissible names are: @samp{auto}, @samp{vfpv2},
@samp{vfpv3},
@samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
@samp{vfpv3xd-fp16}, @samp{neon-vfpv3}, @samp{neon-fp16}, @samp{vfpv4},
@samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
@samp{fpv5-d16}, @samp{fpv5-sp-d16},
@samp{fp-armv8}, @samp{neon-fp-armv8} and @samp{crypto-neon-fp-armv8}.
Note that @samp{neon} is an alias for @samp{neon-vfpv3} and @samp{vfp}
is an alias for @samp{vfpv2}.

The setting @samp{auto} is the default and is special.  It causes the
compiler to select the floating-point and Advanced SIMD instructions
based on the settings of @option{-mcpu} and @option{-march}.

If the selected floating-point hardware includes the NEON extension
(e.g. @option{-mfpu=neon}), note that floating-point
operations are not generated by GCC's auto-vectorization pass unless
@option{-funsafe-math-optimizations} is also specified.  This is
because NEON hardware does not fully implement the IEEE 754 standard for
floating-point arithmetic (in particular denormal values are treated as
zero), so the use of NEON instructions may lead to a loss of precision.

You can also set the fpu name at function level by using the @code{target("fpu=")} function attributes (@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mfp16-format=@var{name}
@opindex mfp16-format
Specify the format of the @code{__fp16} half-precision floating-point type.
Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
the default is @samp{none}, in which case the @code{__fp16} type is not
defined.  @xref{Half-Precision}, for more information.

@item -mstructure-size-boundary=@var{n}
@opindex mstructure-size-boundary
The sizes of all structures and unions are rounded up to a multiple
of the number of bits set by this option.  Permissible values are 8, 32
and 64.  The default value varies for different toolchains.  For the COFF
targeted toolchain the default value is 8.  A value of 64 is only allowed
if the underlying ABI supports it.

Specifying a larger number can produce faster, more efficient code, but
can also increase the size of the program.  Different values are potentially
incompatible.  Code compiled with one value cannot necessarily expect to
work with code or libraries compiled with another value, if they exchange
information using structures or unions.

This option is deprecated.

@item -mabort-on-noreturn
@opindex mabort-on-noreturn
Generate a call to the function @code{abort} at the end of a
@code{noreturn} function.  It is executed if the function tries to
return.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
lies outside of the 64-megabyte addressing range of the offset-based
version of subroutine call instruction.

Even if this switch is enabled, not all function calls are turned
into long calls.  The heuristic is that static functions, functions
that have the @code{short_call} attribute, functions that are inside
the scope of a @code{#pragma no_long_calls} directive, and functions whose
definitions have already been compiled within the current compilation
unit are not turned into long calls.  The exceptions to this rule are
that weak function definitions, functions with the @code{long_call}
attribute or the @code{section} attribute, and functions that are within
the scope of a @code{#pragma long_calls} directive are always
turned into long calls.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} restores the default behavior, as does
placing the function calls within the scope of a @code{#pragma
long_calls_off} directive.  Note these switches have no effect on how
the compiler generates code to handle function calls via function
pointers.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The runtime system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mpic-register=@var{reg}
@opindex mpic-register
Specify the register to be used for PIC addressing.
For standard PIC base case, the default is any suitable register
determined by compiler.  For single PIC base case, the default is
@samp{R9} if target is EABI based or stack-checking is enabled,
otherwise the default is @samp{R10}.

@item -mpic-data-is-text-relative
@opindex mpic-data-is-text-relative
Assume that the displacement between the text and data segments is fixed
at static link time.  This permits using PC-relative addressing
operations to access data known to be in the data segment.  For
non-VxWorks RTP targets, this option is enabled by default.  When
disabled on such targets, it will enable @option{-msingle-pic-base} by
default.

@item -mpoke-function-name
@opindex mpoke-function-name
Write the name of each function into the text section, directly
preceding the function prologue.  The generated code is similar to this:

@smallexample
     t0
         .ascii "arm_poke_function_name", 0
         .align
     t1
         .word 0xff000000 + (t1 - t0)
     arm_poke_function_name
         mov     ip, sp
         stmfd   sp!, @{fp, ip, lr, pc@}
         sub     fp, ip, #4
@end smallexample

When performing a stack backtrace, code can inspect the value of
@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
location @code{pc - 12} and the top 8 bits are set, then we know that
there is a function name embedded immediately preceding this location
and has length @code{((pc[-3]) & 0xff000000)}.

@item -mthumb
@itemx -marm
@opindex marm
@opindex mthumb

Select between generating code that executes in ARM and Thumb
states.  The default for most configurations is to generate code
that executes in ARM state, but the default can be changed by
configuring GCC with the @option{--with-mode=}@var{state}
configure option.

You can also override the ARM and Thumb mode for each function
by using the @code{target("thumb")} and @code{target("arm")} function attributes
(@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mflip-thumb 
@opindex mflip-thumb
Switch ARM/Thumb modes on alternating functions.
This option is provided for regression testing of mixed Thumb/ARM code
generation, and is not intended for ordinary use in compiling code.

@item -mtpcs-frame
@opindex mtpcs-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all non-leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-tpcs-frame}.

@item -mtpcs-leaf-frame
@opindex mtpcs-leaf-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.

@item -mcallee-super-interworking
@opindex mcallee-super-interworking
Gives all externally visible functions in the file being compiled an ARM
instruction set header which switches to Thumb mode before executing the
rest of the function.  This allows these functions to be called from
non-interworking code.  This option is not valid in AAPCS configurations
because interworking is enabled by default.

@item -mcaller-super-interworking
@opindex mcaller-super-interworking
Allows calls via function pointers (including virtual functions) to
execute correctly regardless of whether the target code has been
compiled for interworking or not.  There is a small overhead in the cost
of executing a function pointer if this option is enabled.  This option
is not valid in AAPCS configurations because interworking is enabled
by default.

@item -mtp=@var{name}
@opindex mtp
Specify the access model for the thread local storage pointer.  The valid
models are @samp{soft}, which generates calls to @code{__aeabi_read_tp},
@samp{cp15}, which fetches the thread pointer from @code{cp15} directly
(supported in the arm6k architecture), and @samp{auto}, which uses the
best available method for the selected processor.  The default setting is
@samp{auto}.

@item -mtls-dialect=@var{dialect}
@opindex mtls-dialect
Specify the dialect to use for accessing thread local storage.  Two
@var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
@samp{gnu} dialect selects the original GNU scheme for supporting
local and global dynamic TLS models.  The @samp{gnu2} dialect
selects the GNU descriptor scheme, which provides better performance
for shared libraries.  The GNU descriptor scheme is compatible with
the original scheme, but does require new assembler, linker and
library support.  Initial and local exec TLS models are unaffected by
this option and always use the original scheme.

@item -mword-relocations
@opindex mword-relocations
Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
This is enabled by default on targets (uClinux, SymbianOS) where the runtime
loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
is specified.

@item -mfix-cortex-m3-ldrd
@opindex mfix-cortex-m3-ldrd
Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
with overlapping destination and base registers are used.  This option avoids
generating these instructions.  This option is enabled by default when
@option{-mcpu=cortex-m3} is specified.

@item -munaligned-access
@itemx -mno-unaligned-access
@opindex munaligned-access
@opindex mno-unaligned-access
Enables (or disables) reading and writing of 16- and 32- bit values
from addresses that are not 16- or 32- bit aligned.  By default
unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
ARMv8-M Baseline architectures, and enabled for all other
architectures.  If unaligned access is not enabled then words in packed
data structures are accessed a byte at a time.

The ARM attribute @code{Tag_CPU_unaligned_access} is set in the
generated object file to either true or false, depending upon the
setting of this option.  If unaligned access is enabled then the
preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} is also
defined.

@item -mneon-for-64bits
@opindex mneon-for-64bits
Enables using Neon to handle scalar 64-bits operations. This is
disabled by default since the cost of moving data from core registers
to Neon is high.

@item -mslow-flash-data
@opindex mslow-flash-data
Assume loading data from flash is slower than fetching instruction.
Therefore literal load is minimized for better performance.
This option is only supported when compiling for ARMv7 M-profile and
off by default.

@item -masm-syntax-unified
@opindex masm-syntax-unified
Assume inline assembler is using unified asm syntax.  The default is
currently off which implies divided syntax.  This option has no impact
on Thumb2. However, this may change in future releases of GCC.
Divided syntax should be considered deprecated.

@item -mrestrict-it
@opindex mrestrict-it
Restricts generation of IT blocks to conform to the rules of ARMv8-A.
IT blocks can only contain a single 16-bit instruction from a select
set of instructions. This option is on by default for ARMv8-A Thumb mode.

@item -mprint-tune-info
@opindex mprint-tune-info
Print CPU tuning information as comment in assembler file.  This is
an option used only for regression testing of the compiler and not
intended for ordinary use in compiling code.  This option is disabled
by default.

@item -mverbose-cost-dump
@opindex mverbose-cost-dump
Enable verbose cost model dumping in the debug dump files.  This option is
provided for use in debugging the compiler.

@item -mpure-code
@opindex mpure-code
Do not allow constant data to be placed in code sections.
Additionally, when compiling for ELF object format give all text sections the
ELF processor-specific section attribute @code{SHF_ARM_PURECODE}.  This option
is only available when generating non-pic code for M-profile targets with the
MOVT instruction.

@item -mcmse
@opindex mcmse
Generate secure code as per the "ARMv8-M Security Extensions: Requirements on
Development Tools Engineering Specification", which can be found on
@url{http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf}.
@end table

@node AVR Options
@subsection AVR Options
@cindex AVR Options

These options are defined for AVR implementations:

@table @gcctabopt
@item -mmcu=@var{mcu}
@opindex mmcu
Specify Atmel AVR instruction set architectures (ISA) or MCU type.

The default for this option is@tie{}@samp{avr2}.

GCC supports the following AVR devices and ISAs:

@include avr-mmcu.texi

@item -mabsdata
@opindex mabsdata

Assume that all data in static storage can be accessed by LDS / STS
instructions.  This option has only an effect on reduced Tiny devices like
ATtiny40.  See also the @code{absdata}
@ref{AVR Variable Attributes,variable attribute}.

@item -maccumulate-args
@opindex maccumulate-args
Accumulate outgoing function arguments and acquire/release the needed
stack space for outgoing function arguments once in function
prologue/epilogue.  Without this option, outgoing arguments are pushed
before calling a function and popped afterwards.

Popping the arguments after the function call can be expensive on
AVR so that accumulating the stack space might lead to smaller
executables because arguments need not be removed from the
stack after such a function call.

This option can lead to reduced code size for functions that perform
several calls to functions that get their arguments on the stack like
calls to printf-like functions.

@item -mbranch-cost=@var{cost}
@opindex mbranch-cost
Set the branch costs for conditional branch instructions to
@var{cost}.  Reasonable values for @var{cost} are small, non-negative
integers. The default branch cost is 0.

@item -mcall-prologues
@opindex mcall-prologues
Functions prologues/epilogues are expanded as calls to appropriate
subroutines.  Code size is smaller.

@item -mgas-isr-prologues
@opindex mgas-isr-prologues
Interrupt service routines (ISRs) may use the @code{__gcc_isr} pseudo
instruction supported by GNU Binutils.
If this option is on, the feature can still be disabled for individual
ISRs by means of the @ref{AVR Function Attributes,,@code{no_gccisr}}
function attribute.  This feature is activated per default
if optimization is on (but not with @option{-Og}, @pxref{Optimize Options}),
and if GNU Binutils support @w{@uref{https://sourceware.org/PR21683,PR21683}}.

@item -mint8
@opindex mint8
Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
@code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
and @code{long long} is 4 bytes.  Please note that this option does not
conform to the C standards, but it results in smaller code
size.

@item -mmain-is-OS_task
@opindex mmain-is-OS_task
Do not save registers in @code{main}.  The effect is the same like
attaching attribute @ref{AVR Function Attributes,,@code{OS_task}}
to @code{main}. It is activated per default if optimization is on.

@item -mn-flash=@var{num}
@opindex mn-flash
Assume that the flash memory has a size of 
@var{num} times 64@tie{}KiB.

@item -mno-interrupts
@opindex mno-interrupts
Generated code is not compatible with hardware interrupts.
Code size is smaller.

@item -mrelax
@opindex mrelax
Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
@code{RCALL} resp.@: @code{RJMP} instruction if applicable.
Setting @option{-mrelax} just adds the @option{--mlink-relax} option to
the assembler's command line and the @option{--relax} option to the
linker's command line.

Jump relaxing is performed by the linker because jump offsets are not
known before code is located. Therefore, the assembler code generated by the
compiler is the same, but the instructions in the executable may
differ from instructions in the assembler code.

Relaxing must be turned on if linker stubs are needed, see the
section on @code{EIND} and linker stubs below.

@item -mrmw
@opindex mrmw
Assume that the device supports the Read-Modify-Write
instructions @code{XCH}, @code{LAC}, @code{LAS} and @code{LAT}.

@item -mshort-calls
@opindex mshort-calls

Assume that @code{RJMP} and @code{RCALL} can target the whole
program memory.

This option is used internally for multilib selection.  It is
not an optimization option, and you don't need to set it by hand.

@item -msp8
@opindex msp8
Treat the stack pointer register as an 8-bit register,
i.e.@: assume the high byte of the stack pointer is zero.
In general, you don't need to set this option by hand.

This option is used internally by the compiler to select and
build multilibs for architectures @code{avr2} and @code{avr25}.
These architectures mix devices with and without @code{SPH}.
For any setting other than @option{-mmcu=avr2} or @option{-mmcu=avr25}
the compiler driver adds or removes this option from the compiler
proper's command line, because the compiler then knows if the device
or architecture has an 8-bit stack pointer and thus no @code{SPH}
register or not.

@item -mstrict-X
@opindex mstrict-X
Use address register @code{X} in a way proposed by the hardware.  This means
that @code{X} is only used in indirect, post-increment or
pre-decrement addressing.

Without this option, the @code{X} register may be used in the same way
as @code{Y} or @code{Z} which then is emulated by additional
instructions.  
For example, loading a value with @code{X+const} addressing with a
small non-negative @code{const < 64} to a register @var{Rn} is
performed as

@example
adiw r26, const   ; X += const
ld   @var{Rn}, X        ; @var{Rn} = *X
sbiw r26, const   ; X -= const
@end example

@item -mtiny-stack
@opindex mtiny-stack
Only change the lower 8@tie{}bits of the stack pointer.

@item -mfract-convert-truncate
@opindex mfract-convert-truncate
Allow to use truncation instead of rounding towards zero for fractional fixed-point types.

@item -nodevicelib
@opindex nodevicelib
Don't link against AVR-LibC's device specific library @code{lib<mcu>.a}.

@item -Waddr-space-convert
@opindex Waddr-space-convert
Warn about conversions between address spaces in the case where the
resulting address space is not contained in the incoming address space.

@item -Wmisspelled-isr
@opindex Wmisspelled-isr
Warn if the ISR is misspelled, i.e. without __vector prefix.
Enabled by default.
@end table

@subsubsection @code{EIND} and Devices with More Than 128 Ki Bytes of Flash
@cindex @code{EIND}
Pointers in the implementation are 16@tie{}bits wide.
The address of a function or label is represented as word address so
that indirect jumps and calls can target any code address in the
range of 64@tie{}Ki words.

In order to facilitate indirect jump on devices with more than 128@tie{}Ki
bytes of program memory space, there is a special function register called
@code{EIND} that serves as most significant part of the target address
when @code{EICALL} or @code{EIJMP} instructions are used.

Indirect jumps and calls on these devices are handled as follows by
the compiler and are subject to some limitations:

@itemize @bullet

@item
The compiler never sets @code{EIND}.

@item
The compiler uses @code{EIND} implicitly in @code{EICALL}/@code{EIJMP}
instructions or might read @code{EIND} directly in order to emulate an
indirect call/jump by means of a @code{RET} instruction.

@item
The compiler assumes that @code{EIND} never changes during the startup
code or during the application. In particular, @code{EIND} is not
saved/restored in function or interrupt service routine
prologue/epilogue.

@item
For indirect calls to functions and computed goto, the linker
generates @emph{stubs}. Stubs are jump pads sometimes also called
@emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
The stub contains a direct jump to the desired address.

@item
Linker relaxation must be turned on so that the linker generates
the stubs correctly in all situations. See the compiler option
@option{-mrelax} and the linker option @option{--relax}.
There are corner cases where the linker is supposed to generate stubs
but aborts without relaxation and without a helpful error message.

@item
The default linker script is arranged for code with @code{EIND = 0}.
If code is supposed to work for a setup with @code{EIND != 0}, a custom
linker script has to be used in order to place the sections whose
name start with @code{.trampolines} into the segment where @code{EIND}
points to.

@item
The startup code from libgcc never sets @code{EIND}.
Notice that startup code is a blend of code from libgcc and AVR-LibC.
For the impact of AVR-LibC on @code{EIND}, see the
@w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}.

@item
It is legitimate for user-specific startup code to set up @code{EIND}
early, for example by means of initialization code located in
section @code{.init3}. Such code runs prior to general startup code
that initializes RAM and calls constructors, but after the bit
of startup code from AVR-LibC that sets @code{EIND} to the segment
where the vector table is located.
@example
#include <avr/io.h>

static void
__attribute__((section(".init3"),naked,used,no_instrument_function))
init3_set_eind (void)
@{
  __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
                  "out %i0,r24" :: "n" (&EIND) : "r24","memory");
@}
@end example

@noindent
The @code{__trampolines_start} symbol is defined in the linker script.

@item
Stubs are generated automatically by the linker if
the following two conditions are met:
@itemize @minus

@item The address of a label is taken by means of the @code{gs} modifier
(short for @emph{generate stubs}) like so:
@example
LDI r24, lo8(gs(@var{func}))
LDI r25, hi8(gs(@var{func}))
@end example
@item The final location of that label is in a code segment
@emph{outside} the segment where the stubs are located.
@end itemize

@item
The compiler emits such @code{gs} modifiers for code labels in the
following situations:
@itemize @minus
@item Taking address of a function or code label.
@item Computed goto.
@item If prologue-save function is used, see @option{-mcall-prologues}
command-line option.
@item Switch/case dispatch tables. If you do not want such dispatch
tables you can specify the @option{-fno-jump-tables} command-line option.
@item C and C++ constructors/destructors called during startup/shutdown.
@item If the tools hit a @code{gs()} modifier explained above.
@end itemize

@item
Jumping to non-symbolic addresses like so is @emph{not} supported:

@example
int main (void)
@{
    /* Call function at word address 0x2 */
    return ((int(*)(void)) 0x2)();
@}
@end example

Instead, a stub has to be set up, i.e.@: the function has to be called
through a symbol (@code{func_4} in the example):

@example
int main (void)
@{
    extern int func_4 (void);

    /* Call function at byte address 0x4 */
    return func_4();
@}
@end example

and the application be linked with @option{-Wl,--defsym,func_4=0x4}.
Alternatively, @code{func_4} can be defined in the linker script.
@end itemize

@subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
@cindex @code{RAMPD}
@cindex @code{RAMPX}
@cindex @code{RAMPY}
@cindex @code{RAMPZ}
Some AVR devices support memories larger than the 64@tie{}KiB range
that can be accessed with 16-bit pointers.  To access memory locations
outside this 64@tie{}KiB range, the content of a @code{RAMP}
register is used as high part of the address:
The @code{X}, @code{Y}, @code{Z} address register is concatenated
with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
register, respectively, to get a wide address. Similarly,
@code{RAMPD} is used together with direct addressing.

@itemize
@item
The startup code initializes the @code{RAMP} special function
registers with zero.

@item
If a @ref{AVR Named Address Spaces,named address space} other than
generic or @code{__flash} is used, then @code{RAMPZ} is set
as needed before the operation.

@item
If the device supports RAM larger than 64@tie{}KiB and the compiler
needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
is reset to zero after the operation.

@item
If the device comes with a specific @code{RAMP} register, the ISR
prologue/epilogue saves/restores that SFR and initializes it with
zero in case the ISR code might (implicitly) use it.

@item
RAM larger than 64@tie{}KiB is not supported by GCC for AVR targets.
If you use inline assembler to read from locations outside the
16-bit address range and change one of the @code{RAMP} registers,
you must reset it to zero after the access.

@end itemize

@subsubsection AVR Built-in Macros

GCC defines several built-in macros so that the user code can test
for the presence or absence of features.  Almost any of the following
built-in macros are deduced from device capabilities and thus
triggered by the @option{-mmcu=} command-line option.

For even more AVR-specific built-in macros see
@ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.

@table @code

@item __AVR_ARCH__
Build-in macro that resolves to a decimal number that identifies the
architecture and depends on the @option{-mmcu=@var{mcu}} option.
Possible values are:

@code{2}, @code{25}, @code{3}, @code{31}, @code{35},
@code{4}, @code{5}, @code{51}, @code{6}

for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3}, @code{avr31},
@code{avr35}, @code{avr4}, @code{avr5}, @code{avr51}, @code{avr6},

respectively and

@code{100},
@code{102}, @code{103}, @code{104},
@code{105}, @code{106}, @code{107}

for @var{mcu}=@code{avrtiny},
@code{avrxmega2}, @code{avrxmega3}, @code{avrxmega4},
@code{avrxmega5}, @code{avrxmega6}, @code{avrxmega7}, respectively.
If @var{mcu} specifies a device, this built-in macro is set
accordingly. For example, with @option{-mmcu=atmega8} the macro is
defined to @code{4}.

@item __AVR_@var{Device}__
Setting @option{-mmcu=@var{device}} defines this built-in macro which reflects
the device's name. For example, @option{-mmcu=atmega8} defines the
built-in macro @code{__AVR_ATmega8__}, @option{-mmcu=attiny261a} defines
@code{__AVR_ATtiny261A__}, etc.

The built-in macros' names follow
the scheme @code{__AVR_@var{Device}__} where @var{Device} is
the device name as from the AVR user manual. The difference between
@var{Device} in the built-in macro and @var{device} in
@option{-mmcu=@var{device}} is that the latter is always lowercase.

If @var{device} is not a device but only a core architecture like
@samp{avr51}, this macro is not defined.

@item __AVR_DEVICE_NAME__
Setting @option{-mmcu=@var{device}} defines this built-in macro to
the device's name. For example, with @option{-mmcu=atmega8} the macro
is defined to @code{atmega8}.

If @var{device} is not a device but only a core architecture like
@samp{avr51}, this macro is not defined.

@item __AVR_XMEGA__
The device / architecture belongs to the XMEGA family of devices.

@item __AVR_HAVE_ELPM__
The device has the @code{ELPM} instruction.

@item __AVR_HAVE_ELPMX__
The device has the @code{ELPM R@var{n},Z} and @code{ELPM
R@var{n},Z+} instructions.

@item __AVR_HAVE_MOVW__
The device has the @code{MOVW} instruction to perform 16-bit
register-register moves.

@item __AVR_HAVE_LPMX__
The device has the @code{LPM R@var{n},Z} and
@code{LPM R@var{n},Z+} instructions.

@item __AVR_HAVE_MUL__
The device has a hardware multiplier. 

@item __AVR_HAVE_JMP_CALL__
The device has the @code{JMP} and @code{CALL} instructions.
This is the case for devices with more than 8@tie{}KiB of program
memory.

@item __AVR_HAVE_EIJMP_EICALL__
@itemx __AVR_3_BYTE_PC__
The device has the @code{EIJMP} and @code{EICALL} instructions.
This is the case for devices with more than 128@tie{}KiB of program memory.
This also means that the program counter
(PC) is 3@tie{}bytes wide.

@item __AVR_2_BYTE_PC__
The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
with up to 128@tie{}KiB of program memory.

@item __AVR_HAVE_8BIT_SP__
@itemx __AVR_HAVE_16BIT_SP__
The stack pointer (SP) register is treated as 8-bit respectively
16-bit register by the compiler.
The definition of these macros is affected by @option{-mtiny-stack}.

@item __AVR_HAVE_SPH__
@itemx __AVR_SP8__
The device has the SPH (high part of stack pointer) special function
register or has an 8-bit stack pointer, respectively.
The definition of these macros is affected by @option{-mmcu=} and
in the cases of @option{-mmcu=avr2} and @option{-mmcu=avr25} also
by @option{-msp8}.

@item __AVR_HAVE_RAMPD__
@itemx __AVR_HAVE_RAMPX__
@itemx __AVR_HAVE_RAMPY__
@itemx __AVR_HAVE_RAMPZ__
The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
@code{RAMPZ} special function register, respectively.

@item __NO_INTERRUPTS__
This macro reflects the @option{-mno-interrupts} command-line option.

@item __AVR_ERRATA_SKIP__
@itemx __AVR_ERRATA_SKIP_JMP_CALL__
Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
instructions because of a hardware erratum.  Skip instructions are
@code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
set.

@item __AVR_ISA_RMW__
The device has Read-Modify-Write instructions (XCH, LAC, LAS and LAT).

@item __AVR_SFR_OFFSET__=@var{offset}
Instructions that can address I/O special function registers directly
like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
address as if addressed by an instruction to access RAM like @code{LD}
or @code{STS}. This offset depends on the device architecture and has
to be subtracted from the RAM address in order to get the
respective I/O@tie{}address.

@item __AVR_SHORT_CALLS__
The @option{-mshort-calls} command line option is set.

@item __AVR_PM_BASE_ADDRESS__=@var{addr}
Some devices support reading from flash memory by means of @code{LD*}
instructions.  The flash memory is seen in the data address space
at an offset of @code{__AVR_PM_BASE_ADDRESS__}.  If this macro
is not defined, this feature is not available.  If defined,
the address space is linear and there is no need to put
@code{.rodata} into RAM.  This is handled by the default linker
description file, and is currently available for
@code{avrtiny} and @code{avrxmega3}.  Even more convenient,
there is no need to use address spaces like @code{__flash} or
features like attribute @code{progmem} and @code{pgm_read_*}.

@item __WITH_AVRLIBC__
The compiler is configured to be used together with AVR-Libc.
See the @option{--with-avrlibc} configure option.

@end table

@node Blackfin Options
@subsection Blackfin Options
@cindex Blackfin Options

@table @gcctabopt
@item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
@opindex mcpu=
Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
@samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
@samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
@samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
@samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
@samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
@samp{bf561}, @samp{bf592}.

The optional @var{sirevision} specifies the silicon revision of the target
Blackfin processor.  Any workarounds available for the targeted silicon revision
are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
hexadecimal digits representing the major and minor numbers in the silicon
revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
is not defined.  If @var{sirevision} is @samp{any}, the
@code{__SILICON_REVISION__} is defined to be @code{0xffff}.
If this optional @var{sirevision} is not used, GCC assumes the latest known
silicon revision of the targeted Blackfin processor.

GCC defines a preprocessor macro for the specified @var{cpu}.
For the @samp{bfin-elf} toolchain, this option causes the hardware BSP
provided by libgloss to be linked in if @option{-msim} is not given.

Without this option, @samp{bf532} is used as the processor by default.

Note that support for @samp{bf561} is incomplete.  For @samp{bf561},
only the preprocessor macro is defined.

@item -msim
@opindex msim
Specifies that the program will be run on the simulator.  This causes
the simulator BSP provided by libgloss to be linked in.  This option
has effect only for @samp{bfin-elf} toolchain.
Certain other options, such as @option{-mid-shared-library} and
@option{-mfdpic}, imply @option{-msim}.

@item -momit-leaf-frame-pointer
@opindex 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.

@item -mspecld-anomaly
@opindex mspecld-anomaly
When enabled, the compiler ensures that the generated code does not
contain speculative loads after jump instructions. If this option is used,
@code{__WORKAROUND_SPECULATIVE_LOADS} is defined.

@item -mno-specld-anomaly
@opindex mno-specld-anomaly
Don't generate extra code to prevent speculative loads from occurring.

@item -mcsync-anomaly
@opindex mcsync-anomaly
When enabled, the compiler ensures that the generated code does not
contain CSYNC or SSYNC instructions too soon after conditional branches.
If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.

@item -mno-csync-anomaly
@opindex mno-csync-anomaly
Don't generate extra code to prevent CSYNC or SSYNC instructions from
occurring too soon after a conditional branch.

@item -mlow-64k
@opindex mlow-64k
When enabled, the compiler is free to take advantage of the knowledge that
the entire program fits into the low 64k of memory.

@item -mno-low-64k
@opindex mno-low-64k
Assume that the program is arbitrarily large.  This is the default.

@item -mstack-check-l1
@opindex mstack-check-l1
Do stack checking using information placed into L1 scratchpad memory by the
uClinux kernel.

@item -mid-shared-library
@opindex mid-shared-library
Generate code that supports shared libraries via the library ID method.
This allows for execute in place and shared libraries in an environment
without virtual memory management.  This option implies @option{-fPIC}.
With a @samp{bfin-elf} target, this option implies @option{-msim}.

@item -mno-id-shared-library
@opindex mno-id-shared-library
Generate code that doesn't assume ID-based shared libraries are being used.
This is the default.

@item -mleaf-id-shared-library
@opindex mleaf-id-shared-library
Generate code that supports shared libraries via the library ID method,
but assumes that this library or executable won't link against any other
ID shared libraries.  That allows the compiler to use faster code for jumps
and calls.

@item -mno-leaf-id-shared-library
@opindex mno-leaf-id-shared-library
Do not assume that the code being compiled won't link against any ID shared
libraries.  Slower code is generated for jump and call insns.

@item -mshared-library-id=n
@opindex mshared-library-id
Specifies the identification number of the ID-based shared library being
compiled.  Specifying a value of 0 generates more compact code; specifying
other values forces the allocation of that number to the current
library but is no more space- or time-efficient than omitting this option.

@item -msep-data
@opindex msep-data
Generate code that allows the data segment to be located in a different
area of memory from the text segment.  This allows for execute in place in
an environment without virtual memory management by eliminating relocations
against the text section.

@item -mno-sep-data
@opindex mno-sep-data
Generate code that assumes that the data segment follows the text segment.
This is the default.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
lies outside of the 24-bit addressing range of the offset-based
version of subroutine call instruction.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} restores the default behavior.  Note these
switches have no effect on how the compiler generates code to handle
function calls via function pointers.

@item -mfast-fp
@opindex mfast-fp
Link with the fast floating-point library. This library relaxes some of
the IEEE floating-point standard's rules for checking inputs against
Not-a-Number (NAN), in the interest of performance.

@item -minline-plt
@opindex minline-plt
Enable inlining of PLT entries in function calls to functions that are
not known to bind locally.  It has no effect without @option{-mfdpic}.

@item -mmulticore
@opindex mmulticore
Build a standalone application for multicore Blackfin processors. 
This option causes proper start files and link scripts supporting 
multicore to be used, and defines the macro @code{__BFIN_MULTICORE}. 
It can only be used with @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. 

This option can be used with @option{-mcorea} or @option{-mcoreb}, which
selects the one-application-per-core programming model.  Without
@option{-mcorea} or @option{-mcoreb}, the single-application/dual-core
programming model is used. In this model, the main function of Core B
should be named as @code{coreb_main}.

If this option is not used, the single-core application programming
model is used.

@item -mcorea
@opindex mcorea
Build a standalone application for Core A of BF561 when using
the one-application-per-core programming model. Proper start files
and link scripts are used to support Core A, and the macro
@code{__BFIN_COREA} is defined.
This option can only be used in conjunction with @option{-mmulticore}.

@item -mcoreb
@opindex mcoreb
Build a standalone application for Core B of BF561 when using
the one-application-per-core programming model. Proper start files
and link scripts are used to support Core B, and the macro
@code{__BFIN_COREB} is defined. When this option is used, @code{coreb_main}
should be used instead of @code{main}. 
This option can only be used in conjunction with @option{-mmulticore}.

@item -msdram
@opindex msdram
Build a standalone application for SDRAM. Proper start files and
link scripts are used to put the application into SDRAM, and the macro
@code{__BFIN_SDRAM} is defined.
The loader should initialize SDRAM before loading the application.

@item -micplb
@opindex micplb
Assume that ICPLBs are enabled at run time.  This has an effect on certain
anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
are enabled; for standalone applications the default is off.
@end table

@node C6X Options
@subsection C6X Options
@cindex C6X Options

@table @gcctabopt
@item -march=@var{name}
@opindex march
This specifies the name of the target architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  Permissible names are: @samp{c62x},
@samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.

@item -mbig-endian
@opindex mbig-endian
Generate code for a big-endian target.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.  This is the default.

@item -msim
@opindex msim
Choose startup files and linker script suitable for the simulator.

@item -msdata=default
@opindex msdata=default
Put small global and static data in the @code{.neardata} section,
which is pointed to by register @code{B14}.  Put small uninitialized
global and static data in the @code{.bss} section, which is adjacent
to the @code{.neardata} section.  Put small read-only data into the
@code{.rodata} section.  The corresponding sections used for large
pieces of data are @code{.fardata}, @code{.far} and @code{.const}.

@item -msdata=all
@opindex msdata=all
Put all data, not just small objects, into the sections reserved for
small data, and use addressing relative to the @code{B14} register to
access them.

@item -msdata=none
@opindex msdata=none
Make no use of the sections reserved for small data, and use absolute
addresses to access all data.  Put all initialized global and static
data in the @code{.fardata} section, and all uninitialized data in the
@code{.far} section.  Put all constant data into the @code{.const}
section.
@end table

@node CRIS Options
@subsection CRIS Options
@cindex CRIS Options

These options are defined specifically for the CRIS ports.

@table @gcctabopt
@item -march=@var{architecture-type}
@itemx -mcpu=@var{architecture-type}
@opindex march
@opindex mcpu
Generate code for the specified architecture.  The choices for
@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
@samp{v10}.

@item -mtune=@var{architecture-type}
@opindex mtune
Tune to @var{architecture-type} everything applicable about the generated
code, except for the ABI and the set of available instructions.  The
choices for @var{architecture-type} are the same as for
@option{-march=@var{architecture-type}}.

@item -mmax-stack-frame=@var{n}
@opindex mmax-stack-frame
Warn when the stack frame of a function exceeds @var{n} bytes.

@item -metrax4
@itemx -metrax100
@opindex metrax4
@opindex metrax100
The options @option{-metrax4} and @option{-metrax100} are synonyms for
@option{-march=v3} and @option{-march=v8} respectively.

@item -mmul-bug-workaround
@itemx -mno-mul-bug-workaround
@opindex mmul-bug-workaround
@opindex mno-mul-bug-workaround
Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
models where it applies.  This option is active by default.

@item -mpdebug
@opindex mpdebug
Enable CRIS-specific verbose debug-related information in the assembly
code.  This option also has the effect of turning off the @samp{#NO_APP}
formatted-code indicator to the assembler at the beginning of the
assembly file.

@item -mcc-init
@opindex mcc-init
Do not use condition-code results from previous instruction; always emit
compare and test instructions before use of condition codes.

@item -mno-side-effects
@opindex mno-side-effects
Do not emit instructions with side effects in addressing modes other than
post-increment.

@item -mstack-align
@itemx -mno-stack-align
@itemx -mdata-align
@itemx -mno-data-align
@itemx -mconst-align
@itemx -mno-const-align
@opindex mstack-align
@opindex mno-stack-align
@opindex mdata-align
@opindex mno-data-align
@opindex mconst-align
@opindex mno-const-align
These options (@samp{no-} options) arrange (eliminate arrangements) for the
stack frame, individual data and constants to be aligned for the maximum
single data access size for the chosen CPU model.  The default is to
arrange for 32-bit alignment.  ABI details such as structure layout are
not affected by these options.

@item -m32-bit
@itemx -m16-bit
@itemx -m8-bit
@opindex m32-bit
@opindex m16-bit
@opindex m8-bit
Similar to the stack- data- and const-align options above, these options
arrange for stack frame, writable data and constants to all be 32-bit,
16-bit or 8-bit aligned.  The default is 32-bit alignment.

@item -mno-prologue-epilogue
@itemx -mprologue-epilogue
@opindex mno-prologue-epilogue
@opindex mprologue-epilogue
With @option{-mno-prologue-epilogue}, the normal function prologue and
epilogue which set up the stack frame are omitted and no return
instructions or return sequences are generated in the code.  Use this
option only together with visual inspection of the compiled code: no
warnings or errors are generated when call-saved registers must be saved,
or storage for local variables needs to be allocated.

@item -mno-gotplt
@itemx -mgotplt
@opindex mno-gotplt
@opindex mgotplt
With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
instruction sequences that load addresses for functions from the PLT part
of the GOT rather than (traditional on other architectures) calls to the
PLT@.  The default is @option{-mgotplt}.

@item -melf
@opindex melf
Legacy no-op option only recognized with the cris-axis-elf and
cris-axis-linux-gnu targets.

@item -mlinux
@opindex mlinux
Legacy no-op option only recognized with the cris-axis-linux-gnu target.

@item -sim
@opindex sim
This option, recognized for the cris-axis-elf, arranges
to link with input-output functions from a simulator library.  Code,
initialized data and zero-initialized data are allocated consecutively.

@item -sim2
@opindex sim2
Like @option{-sim}, but pass linker options to locate initialized data at
0x40000000 and zero-initialized data at 0x80000000.
@end table

@node CR16 Options
@subsection CR16 Options
@cindex CR16 Options

These options are defined specifically for the CR16 ports.

@table @gcctabopt

@item -mmac
@opindex mmac
Enable the use of multiply-accumulate instructions. Disabled by default.

@item -mcr16cplus
@itemx -mcr16c
@opindex mcr16cplus
@opindex mcr16c
Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 
is default.

@item -msim
@opindex msim
Links the library libsim.a which is in compatible with simulator. Applicable
to ELF compiler only.

@item -mint32
@opindex mint32
Choose integer type as 32-bit wide.

@item -mbit-ops
@opindex mbit-ops
Generates @code{sbit}/@code{cbit} instructions for bit manipulations.

@item -mdata-model=@var{model}
@opindex mdata-model
Choose a data model. The choices for @var{model} are @samp{near},
@samp{far} or @samp{medium}. @samp{medium} is default.
However, @samp{far} is not valid with @option{-mcr16c}, as the
CR16C architecture does not support the far data model.
@end table

@node Darwin Options
@subsection Darwin Options
@cindex Darwin options

These options are defined for all architectures running the Darwin operating
system.

FSF GCC on Darwin does not create ``fat'' object files; it creates
an object file for the single architecture that GCC was built to
target.  Apple's GCC on Darwin does create ``fat'' files if multiple
@option{-arch} options are used; it does so by running the compiler or
linker multiple times and joining the results together with
@file{lipo}.

The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
@samp{i686}) is determined by the flags that specify the ISA
that GCC is targeting, like @option{-mcpu} or @option{-march}.  The
@option{-force_cpusubtype_ALL} option can be used to override this.

The Darwin tools vary in their behavior when presented with an ISA
mismatch.  The assembler, @file{as}, only permits instructions to
be used that are valid for the subtype of the file it is generating,
so you cannot put 64-bit instructions in a @samp{ppc750} object file.
The linker for shared libraries, @file{/usr/bin/libtool}, fails
and prints an error if asked to create a shared library with a less
restrictive subtype than its input files (for instance, trying to put
a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
for executables, @command{ld}, quietly gives the executable the most
restrictive subtype of any of its input files.

@table @gcctabopt
@item -F@var{dir}
@opindex F
Add the framework directory @var{dir} to the head of the list of
directories to be searched for header files.  These directories are
interleaved with those specified by @option{-I} options and are
scanned in a left-to-right order.

A framework directory is a directory with frameworks in it.  A
framework is a directory with a @file{Headers} and/or
@file{PrivateHeaders} directory contained directly in it that ends
in @file{.framework}.  The name of a framework is the name of this
directory excluding the @file{.framework}.  Headers associated with
the framework are found in one of those two directories, with
@file{Headers} being searched first.  A subframework is a framework
directory that is in a framework's @file{Frameworks} directory.
Includes of subframework headers can only appear in a header of a
framework that contains the subframework, or in a sibling subframework
header.  Two subframeworks are siblings if they occur in the same
framework.  A subframework should not have the same name as a
framework; a warning is issued if this is violated.  Currently a
subframework cannot have subframeworks; in the future, the mechanism
may be extended to support this.  The standard frameworks can be found
in @file{/System/Library/Frameworks} and
@file{/Library/Frameworks}.  An example include looks like
@code{#include <Framework/header.h>}, where @file{Framework} denotes
the name of the framework and @file{header.h} is found in the
@file{PrivateHeaders} or @file{Headers} directory.

@item -iframework@var{dir}
@opindex iframework
Like @option{-F} except the directory is a treated as a system
directory.  The main difference between this @option{-iframework} and
@option{-F} is that with @option{-iframework} the compiler does not
warn about constructs contained within header files found via
@var{dir}.  This option is valid only for the C family of languages.

@item -gused
@opindex gused
Emit debugging information for symbols that are used.  For stabs
debugging format, this enables @option{-feliminate-unused-debug-symbols}.
This is by default ON@.

@item -gfull
@opindex gfull
Emit debugging information for all symbols and types.

@item -mmacosx-version-min=@var{version}
The earliest version of MacOS X that this executable will run on
is @var{version}.  Typical values of @var{version} include @code{10.1},
@code{10.2}, and @code{10.3.9}.

If the compiler was built to use the system's headers by default,
then the default for this option is the system version on which the
compiler is running, otherwise the default is to make choices that
are compatible with as many systems and code bases as possible.

@item -mkernel
@opindex mkernel
Enable kernel development mode.  The @option{-mkernel} option sets
@option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
@option{-fno-exceptions}, @option{-fno-non-call-exceptions},
@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
applicable.  This mode also sets @option{-mno-altivec},
@option{-msoft-float}, @option{-fno-builtin} and
@option{-mlong-branch} for PowerPC targets.

@item -mone-byte-bool
@opindex mone-byte-bool
Override the defaults for @code{bool} so that @code{sizeof(bool)==1}.
By default @code{sizeof(bool)} is @code{4} when compiling for
Darwin/PowerPC and @code{1} when compiling for Darwin/x86, so this
option has no effect on x86.

@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
to generate code that is not binary compatible with code generated
without that switch.  Using this switch may require recompiling all
other modules in a program, including system libraries.  Use this
switch to conform to a non-default data model.

@item -mfix-and-continue
@itemx -ffix-and-continue
@itemx -findirect-data
@opindex mfix-and-continue
@opindex ffix-and-continue
@opindex findirect-data
Generate code suitable for fast turnaround development, such as to
allow GDB to dynamically load @file{.o} files into already-running
programs.  @option{-findirect-data} and @option{-ffix-and-continue}
are provided for backwards compatibility.

@item -all_load
@opindex all_load
Loads all members of static archive libraries.
See man ld(1) for more information.

@item -arch_errors_fatal
@opindex arch_errors_fatal
Cause the errors having to do with files that have the wrong architecture
to be fatal.

@item -bind_at_load
@opindex bind_at_load
Causes the output file to be marked such that the dynamic linker will
bind all undefined references when the file is loaded or launched.

@item -bundle
@opindex bundle
Produce a Mach-o bundle format file.
See man ld(1) for more information.

@item -bundle_loader @var{executable}
@opindex bundle_loader
This option specifies the @var{executable} that will load the build
output file being linked.  See man ld(1) for more information.

@item -dynamiclib
@opindex dynamiclib
When passed this option, GCC produces a dynamic library instead of
an executable when linking, using the Darwin @file{libtool} command.

@item -force_cpusubtype_ALL
@opindex force_cpusubtype_ALL
This causes GCC's output file to have the @samp{ALL} subtype, instead of
one controlled by the @option{-mcpu} or @option{-march} option.

@item -allowable_client  @var{client_name}
@itemx -client_name
@itemx -compatibility_version
@itemx -current_version
@itemx -dead_strip
@itemx -dependency-file
@itemx -dylib_file
@itemx -dylinker_install_name
@itemx -dynamic
@itemx -exported_symbols_list
@itemx -filelist
@need 800
@itemx -flat_namespace
@itemx -force_flat_namespace
@itemx -headerpad_max_install_names
@itemx -image_base
@itemx -init
@itemx -install_name
@itemx -keep_private_externs
@itemx -multi_module
@itemx -multiply_defined
@itemx -multiply_defined_unused
@need 800
@itemx -noall_load
@itemx -no_dead_strip_inits_and_terms
@itemx -nofixprebinding
@itemx -nomultidefs
@itemx -noprebind
@itemx -noseglinkedit
@itemx -pagezero_size
@itemx -prebind
@itemx -prebind_all_twolevel_modules
@itemx -private_bundle
@need 800
@itemx -read_only_relocs
@itemx -sectalign
@itemx -sectobjectsymbols
@itemx -whyload
@itemx -seg1addr
@itemx -sectcreate
@itemx -sectobjectsymbols
@itemx -sectorder
@itemx -segaddr
@itemx -segs_read_only_addr
@need 800
@itemx -segs_read_write_addr
@itemx -seg_addr_table
@itemx -seg_addr_table_filename
@itemx -seglinkedit
@itemx -segprot
@itemx -segs_read_only_addr
@itemx -segs_read_write_addr
@itemx -single_module
@itemx -static
@itemx -sub_library
@need 800
@itemx -sub_umbrella
@itemx -twolevel_namespace
@itemx -umbrella
@itemx -undefined
@itemx -unexported_symbols_list
@itemx -weak_reference_mismatches
@itemx -whatsloaded
@opindex allowable_client
@opindex client_name
@opindex compatibility_version
@opindex current_version
@opindex dead_strip
@opindex dependency-file
@opindex dylib_file
@opindex dylinker_install_name
@opindex dynamic
@opindex exported_symbols_list
@opindex filelist
@opindex flat_namespace
@opindex force_flat_namespace
@opindex headerpad_max_install_names
@opindex image_base
@opindex init
@opindex install_name
@opindex keep_private_externs
@opindex multi_module
@opindex multiply_defined
@opindex multiply_defined_unused
@opindex noall_load
@opindex no_dead_strip_inits_and_terms
@opindex nofixprebinding
@opindex nomultidefs
@opindex noprebind
@opindex noseglinkedit
@opindex pagezero_size
@opindex prebind
@opindex prebind_all_twolevel_modules
@opindex private_bundle
@opindex read_only_relocs
@opindex sectalign
@opindex sectobjectsymbols
@opindex whyload
@opindex seg1addr
@opindex sectcreate
@opindex sectobjectsymbols
@opindex sectorder
@opindex segaddr
@opindex segs_read_only_addr
@opindex segs_read_write_addr
@opindex seg_addr_table
@opindex seg_addr_table_filename
@opindex seglinkedit
@opindex segprot
@opindex segs_read_only_addr
@opindex segs_read_write_addr
@opindex single_module
@opindex static
@opindex sub_library
@opindex sub_umbrella
@opindex twolevel_namespace
@opindex umbrella
@opindex undefined
@opindex unexported_symbols_list
@opindex weak_reference_mismatches
@opindex whatsloaded
These options are passed to the Darwin linker.  The Darwin linker man page
describes them in detail.
@end table

@node DEC Alpha Options
@subsection DEC Alpha Options

These @samp{-m} options are defined for the DEC Alpha implementations:

@table @gcctabopt
@item -mno-soft-float
@itemx -msoft-float
@opindex mno-soft-float
@opindex msoft-float
Use (do not use) the hardware floating-point instructions for
floating-point operations.  When @option{-msoft-float} is specified,
functions in @file{libgcc.a} 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.

Note that Alpha implementations without floating-point operations are
required to have floating-point registers.

@item -mfp-reg
@itemx -mno-fp-regs
@opindex mfp-reg
@opindex mno-fp-regs
Generate code that uses (does not use) the floating-point register set.
@option{-mno-fp-regs} implies @option{-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 @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
so any function with a floating-point argument or return value called by code
compiled with @option{-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 restore, any floating-point registers.

@item -mieee
@opindex mieee
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
@emph{except} that the @var{inexact-flag} is not maintained (see below).
If this option is turned on, the preprocessor macro @code{_IEEE_FP} 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 @option{-ieee_with_no_inexact}.

@item -mieee-with-inexact
@opindex mieee-with-inexact
This is like @option{-mieee} except the generated code also maintains
the IEEE @var{inexact-flag}.  Turning on this option causes the
generated code to implement fully-compliant IEEE math.  In addition to
@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} 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}, you should
normally not specify this option.  Other Alpha compilers call this
option @option{-ieee_with_inexact}.

@item -mfp-trap-mode=@var{trap-mode}
@opindex mfp-trap-mode
This option controls what floating-point related traps are enabled.
Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
The trap mode can be set to one of four values:

@table @samp
@item n
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).

@item u
In addition to the traps enabled by @samp{n}, underflow traps are enabled
as well.

@item su
Like @samp{u}, but the instructions are marked to be safe for software
completion (see Alpha architecture manual for details).

@item sui
Like @samp{su}, but inexact traps are enabled as well.
@end table

@item -mfp-rounding-mode=@var{rounding-mode}
@opindex mfp-rounding-mode
Selects the IEEE rounding mode.  Other Alpha compilers call this option
@option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
of:

@table @samp
@item n
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.

@item m
Round towards minus infinity.

@item c
Chopped rounding mode.  Floating-point numbers are rounded towards zero.

@item d
Dynamic rounding mode.  A field in the floating-point control register
(@var{fpcr}, 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}, @samp{d} corresponds to round towards plus infinity.
@end table

@item -mtrap-precision=@var{trap-precision}
@opindex mtrap-precision
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:

@table @samp
@item p
Program precision.  This option is the default and means a trap handler
can only identify which program caused a floating-point exception.

@item f
Function precision.  The trap handler can determine the function that
caused a floating-point exception.

@item i
Instruction precision.  The trap handler can determine the exact
instruction that caused a floating-point exception.
@end table

Other Alpha compilers provide the equivalent options called
@option{-scope_safe} and @option{-resumption_safe}.

@item -mieee-conformant
@opindex mieee-conformant
This option marks the generated code as IEEE conformant.  You must not
use this option unless you also specify @option{-mtrap-precision=i} and either
@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
is to emit the line @samp{.eflag 48} in the function prologue of the
generated assembly file.

@item -mbuild-constants
@opindex mbuild-constants
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.

Use this option to require GCC to construct @emph{all} integer constants
using code, even if it takes more instructions (the maximum is six).

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.

@item -mbwx
@itemx -mno-bwx
@itemx -mcix
@itemx -mno-cix
@itemx -mfix
@itemx -mno-fix
@itemx -mmax
@itemx -mno-max
@opindex mbwx
@opindex mno-bwx
@opindex mcix
@opindex mno-cix
@opindex mfix
@opindex mno-fix
@opindex mmax
@opindex mno-max
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 @option{-mcpu=} option or that
of the CPU on which GCC was built if none is specified.

@item -mfloat-vax
@itemx -mfloat-ieee
@opindex mfloat-vax
@opindex mfloat-ieee
Generate code that uses (does not use) VAX F and G floating-point
arithmetic instead of IEEE single and double precision.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-relocs
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.

@item -msmall-data
@itemx -mlarge-data
@opindex msmall-data
@opindex mlarge-data
When @option{-mexplicit-relocs} is in effect, static data is
accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
(the @code{.sdata} and @code{.sbss} sections) and are accessed via
16-bit relocations off of the @code{$gp} register.  This limits the
size of the small data area to 64KB, but allows the variables to be
directly accessed via a single instruction.

The default is @option{-mlarge-data}.  With this option the data area
is limited to just below 2GB@.  Programs that require more than 2GB of
data must use @code{malloc} or @code{mmap} to allocate the data in the
heap instead of in the program's data segment.

When generating code for shared libraries, @option{-fpic} implies
@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.

@item -msmall-text
@itemx -mlarge-text
@opindex msmall-text
@opindex mlarge-text
When @option{-msmall-text} 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 @option{-msmall-data}
is used, the compiler can assume that all local symbols share the
same @code{$gp} value, and thus reduce the number of instructions
required for a function call from 4 to 1.

The default is @option{-mlarge-text}.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set and instruction scheduling parameters for
machine type @var{cpu_type}.  You can specify either the @samp{EV}
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.

Supported values for @var{cpu_type} are

@table @samp
@item ev4
@itemx ev45
@itemx 21064
Schedules as an EV4 and has no instruction set extensions.

@item ev5
@itemx 21164
Schedules as an EV5 and has no instruction set extensions.

@item ev56
@itemx 21164a
Schedules as an EV5 and supports the BWX extension.

@item pca56
@itemx 21164pc
@itemx 21164PC
Schedules as an EV5 and supports the BWX and MAX extensions.

@item ev6
@itemx 21264
Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.

@item ev67
@itemx 21264a
Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
@end table

Native toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@option{-mcpu=native} has no effect if GCC does not recognize
the processor.

@item -mtune=@var{cpu_type}
@opindex mtune
Set only the instruction scheduling parameters for machine type
@var{cpu_type}.  The instruction set is not changed.

Native toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@option{-mtune=native} has no effect if GCC does not recognize
the processor.

@item -mmemory-latency=@var{time}
@opindex mmemory-latency
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.

Valid options for @var{time} are

@table @samp
@item @var{number}
A decimal number representing clock cycles.

@item L1
@itemx L2
@itemx L3
@itemx main
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.

@end table
@end table

@node FR30 Options
@subsection FR30 Options
@cindex FR30 Options

These options are defined specifically for the FR30 port.

@table @gcctabopt

@item -msmall-model
@opindex msmall-model
Use the small address space model.  This can produce smaller code, but
it does assume that all symbolic values and addresses fit into a
20-bit range.

@item -mno-lsim
@opindex mno-lsim
Assume that runtime support has been provided and so there is no need
to include the simulator library (@file{libsim.a}) on the linker
command line.

@end table

@node FT32 Options
@subsection FT32 Options
@cindex FT32 Options

These options are defined specifically for the FT32 port.

@table @gcctabopt

@item -msim
@opindex msim
Specifies that the program will be run on the simulator.  This causes
an alternate runtime startup and library to be linked.
You must not use this option when generating programs that will run on
real hardware; you must provide your own runtime library for whatever
I/O functions are needed.

@item -mlra
@opindex mlra
Enable Local Register Allocation.  This is still experimental for FT32,
so by default the compiler uses standard reload.

@item -mnodiv
@opindex mnodiv
Do not use div and mod instructions.

@item -mft32b
@opindex mft32b
Enable use of the extended instructions of the FT32B processor.

@item -mcompress
@opindex mcompress
Compress all code using the Ft32B code compression scheme.

@item -mnopm
@opindex  mnopm
Do not generate code that reads program memory.

@end table

@node FRV Options
@subsection FRV Options
@cindex FRV Options

@table @gcctabopt
@item -mgpr-32
@opindex mgpr-32

Only use the first 32 general-purpose registers.

@item -mgpr-64
@opindex mgpr-64

Use all 64 general-purpose registers.

@item -mfpr-32
@opindex mfpr-32

Use only the first 32 floating-point registers.

@item -mfpr-64
@opindex mfpr-64

Use all 64 floating-point registers.

@item -mhard-float
@opindex mhard-float

Use hardware instructions for floating-point operations.

@item -msoft-float
@opindex msoft-float

Use library routines for floating-point operations.

@item -malloc-cc
@opindex malloc-cc

Dynamically allocate condition code registers.

@item -mfixed-cc
@opindex mfixed-cc

Do not try to dynamically allocate condition code registers, only
use @code{icc0} and @code{fcc0}.

@item -mdword
@opindex mdword

Change ABI to use double word insns.

@item -mno-dword
@opindex mno-dword

Do not use double word instructions.

@item -mdouble
@opindex mdouble

Use floating-point double instructions.

@item -mno-double
@opindex mno-double

Do not use floating-point double instructions.

@item -mmedia
@opindex mmedia

Use media instructions.

@item -mno-media
@opindex mno-media

Do not use media instructions.

@item -mmuladd
@opindex mmuladd

Use multiply and add/subtract instructions.

@item -mno-muladd
@opindex mno-muladd

Do not use multiply and add/subtract instructions.

@item -mfdpic
@opindex mfdpic

Select the FDPIC ABI, which uses function descriptors to represent
pointers to functions.  Without any PIC/PIE-related options, it
implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
assumes GOT entries and small data are within a 12-bit range from the
GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
are computed with 32 bits.
With a @samp{bfin-elf} target, this option implies @option{-msim}.

@item -minline-plt
@opindex minline-plt

Enable inlining of PLT entries in function calls to functions that are
not known to bind locally.  It has no effect without @option{-mfdpic}.
It's enabled by default if optimizing for speed and compiling for
shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
optimization option such as @option{-O3} or above is present in the
command line.

@item -mTLS
@opindex mTLS

Assume a large TLS segment when generating thread-local code.

@item -mtls
@opindex mtls

Do not assume a large TLS segment when generating thread-local code.

@item -mgprel-ro
@opindex mgprel-ro

Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
that is known to be in read-only sections.  It's enabled by default,
except for @option{-fpic} or @option{-fpie}: even though it may help
make the global offset table smaller, it trades 1 instruction for 4.
With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
one of which may be shared by multiple symbols, and it avoids the need
for a GOT entry for the referenced symbol, so it's more likely to be a
win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.

@item -multilib-library-pic
@opindex multilib-library-pic

Link with the (library, not FD) pic libraries.  It's implied by
@option{-mlibrary-pic}, as well as by @option{-fPIC} and
@option{-fpic} without @option{-mfdpic}.  You should never have to use
it explicitly.

@item -mlinked-fp
@opindex mlinked-fp

Follow the EABI requirement of always creating a frame pointer whenever
a stack frame is allocated.  This option is enabled by default and can
be disabled with @option{-mno-linked-fp}.

@item -mlong-calls
@opindex mlong-calls

Use indirect addressing to call functions outside the current
compilation unit.  This allows the functions to be placed anywhere
within the 32-bit address space.

@item -malign-labels
@opindex malign-labels

Try to align labels to an 8-byte boundary by inserting NOPs into the
previous packet.  This option only has an effect when VLIW packing
is enabled.  It doesn't create new packets; it merely adds NOPs to
existing ones.

@item -mlibrary-pic
@opindex mlibrary-pic

Generate position-independent EABI code.

@item -macc-4
@opindex macc-4

Use only the first four media accumulator registers.

@item -macc-8
@opindex macc-8

Use all eight media accumulator registers.

@item -mpack
@opindex mpack

Pack VLIW instructions.

@item -mno-pack
@opindex mno-pack

Do not pack VLIW instructions.

@item -mno-eflags
@opindex mno-eflags

Do not mark ABI switches in e_flags.

@item -mcond-move
@opindex mcond-move

Enable the use of conditional-move instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-cond-move
@opindex mno-cond-move

Disable the use of conditional-move instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mscc
@opindex mscc

Enable the use of conditional set instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-scc
@opindex mno-scc

Disable the use of conditional set instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mcond-exec
@opindex mcond-exec

Enable the use of conditional execution (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-cond-exec
@opindex mno-cond-exec

Disable the use of conditional execution.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mvliw-branch
@opindex mvliw-branch

Run a pass to pack branches into VLIW instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-vliw-branch
@opindex mno-vliw-branch

Do not run a pass to pack branches into VLIW instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mmulti-cond-exec
@opindex mmulti-cond-exec

Enable optimization of @code{&&} and @code{||} in conditional execution
(default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-multi-cond-exec
@opindex mno-multi-cond-exec

Disable optimization of @code{&&} and @code{||} in conditional execution.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mnested-cond-exec
@opindex mnested-cond-exec

Enable nested conditional execution optimizations (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-nested-cond-exec
@opindex mno-nested-cond-exec

Disable nested conditional execution optimizations.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -moptimize-membar
@opindex moptimize-membar

This switch removes redundant @code{membar} instructions from the
compiler-generated code.  It is enabled by default.

@item -mno-optimize-membar
@opindex mno-optimize-membar

This switch disables the automatic removal of redundant @code{membar}
instructions from the generated code.

@item -mtomcat-stats
@opindex mtomcat-stats

Cause gas to print out tomcat statistics.

@item -mcpu=@var{cpu}
@opindex mcpu

Select the processor type for which to generate code.  Possible values are
@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.

@end table

@node GNU/Linux Options
@subsection GNU/Linux Options

These @samp{-m} options are defined for GNU/Linux targets:

@table @gcctabopt
@item -mglibc
@opindex mglibc
Use the GNU C library.  This is the default except
on @samp{*-*-linux-*uclibc*}, @samp{*-*-linux-*musl*} and
@samp{*-*-linux-*android*} targets.

@item -muclibc
@opindex muclibc
Use uClibc C library.  This is the default on
@samp{*-*-linux-*uclibc*} targets.

@item -mmusl
@opindex mmusl
Use the musl C library.  This is the default on
@samp{*-*-linux-*musl*} targets.

@item -mbionic
@opindex mbionic
Use Bionic C library.  This is the default on
@samp{*-*-linux-*android*} targets.

@item -mandroid
@opindex mandroid
Compile code compatible with Android platform.  This is the default on
@samp{*-*-linux-*android*} targets.

When compiling, this option enables @option{-mbionic}, @option{-fPIC},
@option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
this option makes the GCC driver pass Android-specific options to the linker.
Finally, this option causes the preprocessor macro @code{__ANDROID__}
to be defined.

@item -tno-android-cc
@opindex tno-android-cc
Disable compilation effects of @option{-mandroid}, i.e., do not enable
@option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
@option{-fno-rtti} by default.

@item -tno-android-ld
@opindex tno-android-ld
Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
linking options to the linker.

@end table

@node H8/300 Options
@subsection H8/300 Options

These @samp{-m} options are defined for the H8/300 implementations:

@table @gcctabopt
@item -mrelax
@opindex mrelax
Shorten some address references at link time, when possible; uses the
linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
ld, Using ld}, for a fuller description.

@item -mh
@opindex mh
Generate code for the H8/300H@.

@item -ms
@opindex ms
Generate code for the H8S@.

@item -mn
@opindex mn
Generate code for the H8S and H8/300H in the normal mode.  This switch
must be used either with @option{-mh} or @option{-ms}.

@item -ms2600
@opindex ms2600
Generate code for the H8S/2600.  This switch must be used with @option{-ms}.

@item -mexr
@opindex mexr
Extended registers are stored on stack before execution of function
with monitor attribute. Default option is @option{-mexr}.
This option is valid only for H8S targets.

@item -mno-exr
@opindex mno-exr
Extended registers are not stored on stack before execution of function 
with monitor attribute. Default option is @option{-mno-exr}. 
This option is valid only for H8S targets.

@item -mint32
@opindex mint32
Make @code{int} data 32 bits by default.

@item -malign-300
@opindex malign-300
On the H8/300H and H8S, use the same alignment rules as for the H8/300.
The default for the H8/300H and H8S is to align longs and floats on
4-byte boundaries.
@option{-malign-300} causes them to be aligned on 2-byte boundaries.
This option has no effect on the H8/300.
@end table

@node HPPA Options
@subsection HPPA Options
@cindex HPPA Options

These @samp{-m} options are defined for the HPPA family of computers:

@table @gcctabopt
@item -march=@var{architecture-type}
@opindex march
Generate code for the specified architecture.  The choices for
@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
architecture option for your machine.  Code compiled for lower numbered
architectures runs on higher numbered architectures, but not the
other way around.

@item -mpa-risc-1-0
@itemx -mpa-risc-1-1
@itemx -mpa-risc-2-0
@opindex mpa-risc-1-0
@opindex mpa-risc-1-1
@opindex mpa-risc-2-0
Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.

@item -mcaller-copies
@opindex mcaller-copies
The caller copies function arguments passed by hidden reference.  This
option should be used with care as it is not compatible with the default
32-bit runtime.  However, only aggregates larger than eight bytes are
passed by hidden reference and the option provides better compatibility
with OpenMP.

@item -mjump-in-delay
@opindex mjump-in-delay
This option is ignored and provided for compatibility purposes only.

@item -mdisable-fpregs
@opindex mdisable-fpregs
Prevent floating-point registers from being used in any manner.  This is
necessary for compiling kernels that perform lazy context switching of
floating-point registers.  If you use this option and attempt to perform
floating-point operations, the compiler aborts.

@item -mdisable-indexing
@opindex mdisable-indexing
Prevent the compiler from using indexing address modes.  This avoids some
rather obscure problems when compiling MIG generated code under MACH@.

@item -mno-space-regs
@opindex 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.

@item -mfast-indirect-calls
@opindex mfast-indirect-calls
Generate code that assumes calls never cross space boundaries.  This
allows GCC to emit code that performs faster indirect calls.

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

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot use.  This is
useful when compiling kernel code.  A register range is specified as
two registers separated by a dash.  Multiple register ranges can be
specified separated by a comma.

@item -mlong-load-store
@opindex mlong-load-store
Generate 3-instruction load and store sequences as sometimes required by
the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
the HP compilers.

@item -mportable-runtime
@opindex mportable-runtime
Use the portable calling conventions proposed by HP for ELF systems.

@item -mgas
@opindex mgas
Enable the use of assembler directives only GAS understands.

@item -mschedule=@var{cpu-type}
@opindex mschedule
Schedule code according to the constraints for the machine type
@var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
to @file{/usr/lib/sched.models} on an HP-UX system to determine the
proper scheduling option for your machine.  The default scheduling is
@samp{8000}.

@item -mlinker-opt
@opindex 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.

@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{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.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -msio
@opindex msio
Generate the predefine, @code{_SIO}, for server IO@.  The default is
@option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
options are available under HP-UX and HI-UX@.

@item -mgnu-ld
@opindex mgnu-ld
Use options specific to GNU @command{ld}.
This passes @option{-shared} to @command{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
affect which @command{ld} is called; it only changes what parameters
are passed to that @command{ld}.
The @command{ld} that is called is determined by the
@option{--with-ld} configure option, GCC's program search path, and
finally by the user's @env{PATH}.  The linker used by GCC can be printed
using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.

@item -mhp-ld
@opindex mhp-ld
Use options specific to HP @command{ld}.
This passes @option{-b} to @command{ld} when building
a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
links.  It is the default when GCC is configured, explicitly or
implicitly, with the HP linker.  This option does not affect
which @command{ld} is called; it only changes what parameters are passed to that
@command{ld}.
The @command{ld} that is called is determined by the @option{--with-ld}
configure option, GCC's program search path, and finally by the user's
@env{PATH}.  The linker used by GCC can be printed using @samp{which
`gcc -print-prog-name=ld`}.  This option is only available on the 64-bit
HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.

@item -mlong-calls
@opindex mno-long-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
@option{-ffunction-sections} option, or when using the @option{-mgas}
and @option{-mno-portable-runtime} options together under HP-UX with
the SOM linker.

It is normally not desirable to use this option as it degrades
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.

@item -munix=@var{unix-std}
@opindex march
Generate compiler predefines and select a startfile for the specified
UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
and later.

@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.

It is @emph{important} to note that this option changes the interfaces
for various library routines.  It also affects the operational behavior
of the C library.  Thus, @emph{extreme} care is needed in using this
option.

Library code that is intended to operate with more than one UNIX
standard must test, set and restore the variable @code{__xpg4_extended_mask}
as appropriate.  Most GNU software doesn't provide this capability.

@item -nolibdld
@opindex nolibdld
Suppress the generation of link options to search libdld.sl when the
@option{-static} option is specified on HP-UX 10 and later.

@item -static
@opindex 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 @option{-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 @option{-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
@option{-nolibdld} option can be used to prevent the GCC driver from
adding these link options.

@item -threads
@opindex threads
Add support for multithreading with the @dfn{dce thread} library
under HP-UX@.  This option sets flags for both the preprocessor and
linker.
@end table

@node IA-64 Options
@subsection IA-64 Options
@cindex IA-64 Options

These are the @samp{-m} options defined for the Intel IA-64 architecture.

@table @gcctabopt
@item -mbig-endian
@opindex mbig-endian
Generate code for a big-endian target.  This is the default for HP-UX@.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.  This is the default for AIX5
and GNU/Linux.

@item -mgnu-as
@itemx -mno-gnu-as
@opindex mgnu-as
@opindex mno-gnu-as
Generate (or don't) code for the GNU assembler.  This is the default.
@c Also, this is the default if the configure option @option{--with-gnu-as}
@c is used.

@item -mgnu-ld
@itemx -mno-gnu-ld
@opindex mgnu-ld
@opindex mno-gnu-ld
Generate (or don't) code for the GNU linker.  This is the default.
@c Also, this is the default if the configure option @option{--with-gnu-ld}
@c is used.

@item -mno-pic
@opindex mno-pic
Generate code that does not use a global pointer register.  The result
is not position independent code, and violates the IA-64 ABI@.

@item -mvolatile-asm-stop
@itemx -mno-volatile-asm-stop
@opindex mvolatile-asm-stop
@opindex mno-volatile-asm-stop
Generate (or don't) a stop bit immediately before and after volatile asm
statements.

@item -mregister-names
@itemx -mno-register-names
@opindex mregister-names
@opindex mno-register-names
Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
the stacked registers.  This may make assembler output more readable.

@item -mno-sdata
@itemx -msdata
@opindex mno-sdata
@opindex msdata
Disable (or enable) optimizations that use the small data section.  This may
be useful for working around optimizer bugs.

@item -mconstant-gp
@opindex mconstant-gp
Generate code that uses a single constant global pointer value.  This is
useful when compiling kernel code.

@item -mauto-pic
@opindex mauto-pic
Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
This is useful when compiling firmware code.

@item -minline-float-divide-min-latency
@opindex minline-float-divide-min-latency
Generate code for inline divides of floating-point values
using the minimum latency algorithm.

@item -minline-float-divide-max-throughput
@opindex minline-float-divide-max-throughput
Generate code for inline divides of floating-point values
using the maximum throughput algorithm.

@item -mno-inline-float-divide
@opindex mno-inline-float-divide
Do not generate inline code for divides of floating-point values.

@item -minline-int-divide-min-latency
@opindex minline-int-divide-min-latency
Generate code for inline divides of integer values
using the minimum latency algorithm.

@item -minline-int-divide-max-throughput
@opindex minline-int-divide-max-throughput
Generate code for inline divides of integer values
using the maximum throughput algorithm.

@item -mno-inline-int-divide
@opindex mno-inline-int-divide
Do not generate inline code for divides of integer values.

@item -minline-sqrt-min-latency
@opindex minline-sqrt-min-latency
Generate code for inline square roots
using the minimum latency algorithm.

@item -minline-sqrt-max-throughput
@opindex minline-sqrt-max-throughput
Generate code for inline square roots
using the maximum throughput algorithm.

@item -mno-inline-sqrt
@opindex mno-inline-sqrt
Do not generate inline code for @code{sqrt}.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Do (don't) generate code that uses the fused multiply/add or multiply/subtract
instructions.  The default is to use these instructions.

@item -mno-dwarf2-asm
@itemx -mdwarf2-asm
@opindex mno-dwarf2-asm
@opindex mdwarf2-asm
Don't (or do) generate assembler code for the DWARF line number debugging
info.  This may be useful when not using the GNU assembler.

@item -mearly-stop-bits
@itemx -mno-early-stop-bits
@opindex mearly-stop-bits
@opindex mno-early-stop-bits
Allow stop bits to be placed earlier than immediately preceding the
instruction that triggered the stop bit.  This can improve instruction
scheduling, but does not always do so.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot use.  This is
useful when compiling kernel code.  A register range is specified as
two registers separated by a dash.  Multiple register ranges can be
specified separated by a comma.

@item -mtls-size=@var{tls-size}
@opindex mtls-size
Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
64.

@item -mtune=@var{cpu-type}
@opindex mtune
Tune the instruction scheduling for a particular CPU, Valid values are
@samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
and @samp{mckinley}.

@item -milp32
@itemx -mlp64
@opindex milp32
@opindex mlp64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits.  These are HP-UX specific flags.

@item -mno-sched-br-data-spec
@itemx -msched-br-data-spec
@opindex mno-sched-br-data-spec
@opindex msched-br-data-spec
(Dis/En)able data speculative scheduling before reload.
This results in generation of @code{ld.a} instructions and
the corresponding check instructions (@code{ld.c} / @code{chk.a}).
The default setting is disabled.

@item -msched-ar-data-spec
@itemx -mno-sched-ar-data-spec
@opindex msched-ar-data-spec
@opindex mno-sched-ar-data-spec
(En/Dis)able data speculative scheduling after reload.
This results in generation of @code{ld.a} instructions and
the corresponding check instructions (@code{ld.c} / @code{chk.a}).
The default setting is enabled.

@item -mno-sched-control-spec
@itemx -msched-control-spec
@opindex mno-sched-control-spec
@opindex msched-control-spec
(Dis/En)able control speculative scheduling.  This feature is
available only during region scheduling (i.e.@: before reload).
This results in generation of the @code{ld.s} instructions and
the corresponding check instructions @code{chk.s}.
The default setting is disabled.

@item -msched-br-in-data-spec
@itemx -mno-sched-br-in-data-spec
@opindex msched-br-in-data-spec
@opindex mno-sched-br-in-data-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads before reload.
This is effective only with @option{-msched-br-data-spec} enabled.
The default setting is enabled.

@item -msched-ar-in-data-spec
@itemx -mno-sched-ar-in-data-spec
@opindex msched-ar-in-data-spec
@opindex mno-sched-ar-in-data-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads after reload.
This is effective only with @option{-msched-ar-data-spec} enabled.
The default setting is enabled.

@item -msched-in-control-spec
@itemx -mno-sched-in-control-spec
@opindex msched-in-control-spec
@opindex mno-sched-in-control-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the control speculative loads.
This is effective only with @option{-msched-control-spec} enabled.
The default setting is enabled.

@item -mno-sched-prefer-non-data-spec-insns
@itemx -msched-prefer-non-data-spec-insns
@opindex mno-sched-prefer-non-data-spec-insns
@opindex msched-prefer-non-data-spec-insns
If enabled, data-speculative instructions are chosen for schedule
only if there are no other choices at the moment.  This makes
the use of the data speculation much more conservative.
The default setting is disabled.

@item -mno-sched-prefer-non-control-spec-insns
@itemx -msched-prefer-non-control-spec-insns
@opindex mno-sched-prefer-non-control-spec-insns
@opindex msched-prefer-non-control-spec-insns
If enabled, control-speculative instructions are chosen for schedule
only if there are no other choices at the moment.  This makes
the use of the control speculation much more conservative.
The default setting is disabled.

@item -mno-sched-count-spec-in-critical-path
@itemx -msched-count-spec-in-critical-path
@opindex mno-sched-count-spec-in-critical-path
@opindex msched-count-spec-in-critical-path
If enabled, speculative dependencies are considered during
computation of the instructions priorities.  This makes the use of the
speculation a bit more conservative.
The default setting is disabled.

@item -msched-spec-ldc
@opindex msched-spec-ldc
Use a simple data speculation check.  This option is on by default.

@item -msched-control-spec-ldc
@opindex msched-spec-ldc
Use a simple check for control speculation.  This option is on by default.

@item -msched-stop-bits-after-every-cycle
@opindex msched-stop-bits-after-every-cycle
Place a stop bit after every cycle when scheduling.  This option is on
by default.

@item -msched-fp-mem-deps-zero-cost
@opindex msched-fp-mem-deps-zero-cost
Assume that floating-point stores and loads are not likely to cause a conflict
when placed into the same instruction group.  This option is disabled by
default.

@item -msel-sched-dont-check-control-spec
@opindex msel-sched-dont-check-control-spec
Generate checks for control speculation in selective scheduling.
This flag is disabled by default.

@item -msched-max-memory-insns=@var{max-insns}
@opindex msched-max-memory-insns
Limit on the number of memory insns per instruction group, giving lower
priority to subsequent memory insns attempting to schedule in the same
instruction group. Frequently useful to prevent cache bank conflicts.
The default value is 1.

@item -msched-max-memory-insns-hard-limit
@opindex msched-max-memory-insns-hard-limit
Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
disallowing more than that number in an instruction group.
Otherwise, the limit is ``soft'', meaning that non-memory operations
are preferred when the limit is reached, but memory operations may still
be scheduled.

@end table

@node LM32 Options
@subsection LM32 Options
@cindex LM32 options

These @option{-m} options are defined for the LatticeMico32 architecture:

@table @gcctabopt
@item -mbarrel-shift-enabled
@opindex mbarrel-shift-enabled
Enable barrel-shift instructions.

@item -mdivide-enabled
@opindex mdivide-enabled
Enable divide and modulus instructions.

@item -mmultiply-enabled
@opindex multiply-enabled
Enable multiply instructions.

@item -msign-extend-enabled
@opindex msign-extend-enabled
Enable sign extend instructions.

@item -muser-enabled
@opindex muser-enabled
Enable user-defined instructions.

@end table

@node M32C Options
@subsection M32C Options
@cindex M32C options

@table @gcctabopt
@item -mcpu=@var{name}
@opindex mcpu=
Select the CPU for which code is generated.  @var{name} may be one of
@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
the M32C/80 series.

@item -msim
@opindex msim
Specifies that the program will be run on the simulator.  This causes
an alternate runtime library to be linked in which supports, for
example, file I/O@.  You must not use this option when generating
programs that will run on real hardware; you must provide your own
runtime library for whatever I/O functions are needed.

@item -memregs=@var{number}
@opindex memregs=
Specifies the number of memory-based pseudo-registers GCC uses
during code generation.  These pseudo-registers are used like real
registers, so there is a tradeoff between GCC's ability to fit the
code into available registers, and the performance penalty of using
memory instead of registers.  Note that all modules in a program must
be compiled with the same value for this option.  Because of that, you
must not use this option with GCC's default runtime libraries.

@end table

@node M32R/D Options
@subsection M32R/D Options
@cindex M32R/D options

These @option{-m} options are defined for Renesas M32R/D architectures:

@table @gcctabopt
@item -m32r2
@opindex m32r2
Generate code for the M32R/2@.

@item -m32rx
@opindex m32rx
Generate code for the M32R/X@.

@item -m32r
@opindex m32r
Generate code for the M32R@.  This is the default.

@item -mmodel=small
@opindex mmodel=small
Assume all objects live in the lower 16MB of memory (so that their addresses
can be loaded with the @code{ld24} instruction), and assume all subroutines
are reachable with the @code{bl} instruction.
This is the default.

The addressability of a particular object can be set with the
@code{model} attribute.

@item -mmodel=medium
@opindex mmodel=medium
Assume objects may be anywhere in the 32-bit address space (the compiler
generates @code{seth/add3} instructions to load their addresses), and
assume all subroutines are reachable with the @code{bl} instruction.

@item -mmodel=large
@opindex mmodel=large
Assume objects may be anywhere in the 32-bit address space (the compiler
generates @code{seth/add3} instructions to load their addresses), and
assume subroutines may not be reachable with the @code{bl} instruction
(the compiler generates the much slower @code{seth/add3/jl}
instruction sequence).

@item -msdata=none
@opindex msdata=none
Disable use of the small data area.  Variables are put into
one of @code{.data}, @code{.bss}, or @code{.rodata} (unless the
@code{section} attribute has been specified).
This is the default.

The small data area consists of sections @code{.sdata} and @code{.sbss}.
Objects may be explicitly put in the small data area with the
@code{section} attribute using one of these sections.

@item -msdata=sdata
@opindex msdata=sdata
Put small global and static data in the small data area, but do not
generate special code to reference them.

@item -msdata=use
@opindex msdata=use
Put small global and static data in the small data area, and generate
special instructions to reference them.

@item -G @var{num}
@opindex G
@cindex smaller data references
Put global and static objects less than or equal to @var{num} bytes
into the small data or BSS sections instead of the normal data or BSS
sections.  The default value of @var{num} is 8.
The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
for this option to have any effect.

All modules should be compiled with the same @option{-G @var{num}} value.
Compiling with different values of @var{num} may or may not work; if it
doesn't the linker gives an error message---incorrect code is not
generated.

@item -mdebug
@opindex mdebug
Makes the M32R-specific code in the compiler display some statistics
that might help in debugging programs.

@item -malign-loops
@opindex malign-loops
Align all loops to a 32-byte boundary.

@item -mno-align-loops
@opindex mno-align-loops
Do not enforce a 32-byte alignment for loops.  This is the default.

@item -missue-rate=@var{number}
@opindex missue-rate=@var{number}
Issue @var{number} instructions per cycle.  @var{number} can only be 1
or 2.

@item -mbranch-cost=@var{number}
@opindex mbranch-cost=@var{number}
@var{number} can only be 1 or 2.  If it is 1 then branches are
preferred over conditional code, if it is 2, then the opposite applies.

@item -mflush-trap=@var{number}
@opindex mflush-trap=@var{number}
Specifies the trap number to use to flush the cache.  The default is
12.  Valid numbers are between 0 and 15 inclusive.

@item -mno-flush-trap
@opindex mno-flush-trap
Specifies that the cache cannot be flushed by using a trap.

@item -mflush-func=@var{name}
@opindex mflush-func=@var{name}
Specifies the name of the operating system function to call to flush
the cache.  The default is @samp{_flush_cache}, but a function call
is only used if a trap is not available.

@item -mno-flush-func
@opindex mno-flush-func
Indicates that there is no OS function for flushing the cache.

@end table

@node M680x0 Options
@subsection M680x0 Options
@cindex M680x0 options

These are the @samp{-m} options defined for M680x0 and ColdFire processors.
The default settings depend on which architecture was selected when
the compiler was configured; the defaults for the most common choices
are given below.

@table @gcctabopt
@item -march=@var{arch}
@opindex march
Generate code for a specific M680x0 or ColdFire instruction set
architecture.  Permissible values of @var{arch} for M680x0
architectures are: @samp{68000}, @samp{68010}, @samp{68020},
@samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
architectures are selected according to Freescale's ISA classification
and the permissible values are: @samp{isaa}, @samp{isaaplus},
@samp{isab} and @samp{isac}.

GCC defines a macro @code{__mcf@var{arch}__} whenever it is generating
code for a ColdFire target.  The @var{arch} in this macro is one of the
@option{-march} arguments given above.

When used together, @option{-march} and @option{-mtune} select code
that runs on a family of similar processors but that is optimized
for a particular microarchitecture.

@item -mcpu=@var{cpu}
@opindex mcpu
Generate code for a specific M680x0 or ColdFire processor.
The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
@samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
below, which also classifies the CPUs into families:

@multitable @columnfractions 0.20 0.80
@item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
@item @samp{51} @tab @samp{51} @samp{51ac} @samp{51ag} @samp{51cn} @samp{51em} @samp{51je} @samp{51jf} @samp{51jg} @samp{51jm} @samp{51mm} @samp{51qe} @samp{51qm}
@item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
@item @samp{5206e} @tab @samp{5206e}
@item @samp{5208} @tab @samp{5207} @samp{5208}
@item @samp{5211a} @tab @samp{5210a} @samp{5211a}
@item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
@item @samp{5216} @tab @samp{5214} @samp{5216}
@item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
@item @samp{5225} @tab @samp{5224} @samp{5225}
@item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
@item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
@item @samp{5249} @tab @samp{5249}
@item @samp{5250} @tab @samp{5250}
@item @samp{5271} @tab @samp{5270} @samp{5271}
@item @samp{5272} @tab @samp{5272}
@item @samp{5275} @tab @samp{5274} @samp{5275}
@item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
@item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
@item @samp{5307} @tab @samp{5307}
@item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
@item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
@item @samp{5407} @tab @samp{5407}
@item @samp{5475} @tab @samp{5470} @samp{5471} @samp{5472} @samp{5473} @samp{5474} @samp{5475} @samp{547x} @samp{5480} @samp{5481} @samp{5482} @samp{5483} @samp{5484} @samp{5485}
@end multitable

@option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
@var{arch} is compatible with @var{cpu}.  Other combinations of
@option{-mcpu} and @option{-march} are rejected.

GCC defines the macro @code{__mcf_cpu_@var{cpu}} when ColdFire target
@var{cpu} is selected.  It also defines @code{__mcf_family_@var{family}},
where the value of @var{family} is given by the table above.

@item -mtune=@var{tune}
@opindex mtune
Tune the code for a particular microarchitecture within the
constraints set by @option{-march} and @option{-mcpu}.
The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
@samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
and @samp{cpu32}.  The ColdFire microarchitectures
are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.

You can also use @option{-mtune=68020-40} for code that needs
to run relatively well on 68020, 68030 and 68040 targets.
@option{-mtune=68020-60} is similar but includes 68060 targets
as well.  These two options select the same tuning decisions as
@option{-m68020-40} and @option{-m68020-60} respectively.

GCC defines the macros @code{__mc@var{arch}} and @code{__mc@var{arch}__}
when tuning for 680x0 architecture @var{arch}.  It also defines
@code{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
option is used.  If GCC is tuning for a range of architectures,
as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
it defines the macros for every architecture in the range.

GCC also defines the macro @code{__m@var{uarch}__} when tuning for
ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
of the arguments given above.

@item -m68000
@itemx -mc68000
@opindex m68000
@opindex mc68000
Generate output for a 68000.  This is the default
when the compiler is configured for 68000-based systems.
It is equivalent to @option{-march=68000}.

Use this option for microcontrollers with a 68000 or EC000 core,
including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.

@item -m68010
@opindex m68010
Generate output for a 68010.  This is the default
when the compiler is configured for 68010-based systems.
It is equivalent to @option{-march=68010}.

@item -m68020
@itemx -mc68020
@opindex m68020
@opindex mc68020
Generate output for a 68020.  This is the default
when the compiler is configured for 68020-based systems.
It is equivalent to @option{-march=68020}.

@item -m68030
@opindex m68030
Generate output for a 68030.  This is the default when the compiler is
configured for 68030-based systems.  It is equivalent to
@option{-march=68030}.

@item -m68040
@opindex m68040
Generate output for a 68040.  This is the default when the compiler is
configured for 68040-based systems.  It is equivalent to
@option{-march=68040}.

This option inhibits the use of 68881/68882 instructions that have to be
emulated by software on the 68040.  Use this option if your 68040 does not
have code to emulate those instructions.

@item -m68060
@opindex m68060
Generate output for a 68060.  This is the default when the compiler is
configured for 68060-based systems.  It is equivalent to
@option{-march=68060}.

This option inhibits the use of 68020 and 68881/68882 instructions that
have to be emulated by software on the 68060.  Use this option if your 68060
does not have code to emulate those instructions.

@item -mcpu32
@opindex mcpu32
Generate output for a CPU32.  This is the default
when the compiler is configured for CPU32-based systems.
It is equivalent to @option{-march=cpu32}.

Use this option for microcontrollers with a
CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
68336, 68340, 68341, 68349 and 68360.

@item -m5200
@opindex m5200
Generate output for a 520X ColdFire CPU@.  This is the default
when the compiler is configured for 520X-based systems.
It is equivalent to @option{-mcpu=5206}, and is now deprecated
in favor of that option.

Use this option for microcontroller with a 5200 core, including
the MCF5202, MCF5203, MCF5204 and MCF5206.

@item -m5206e
@opindex m5206e
Generate output for a 5206e ColdFire CPU@.  The option is now
deprecated in favor of the equivalent @option{-mcpu=5206e}.

@item -m528x
@opindex m528x
Generate output for a member of the ColdFire 528X family.
The option is now deprecated in favor of the equivalent
@option{-mcpu=528x}.

@item -m5307
@opindex m5307
Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
in favor of the equivalent @option{-mcpu=5307}.

@item -m5407
@opindex m5407
Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
in favor of the equivalent @option{-mcpu=5407}.

@item -mcfv4e
@opindex mcfv4e
Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
This includes use of hardware floating-point instructions.
The option is equivalent to @option{-mcpu=547x}, and is now
deprecated in favor of that option.

@item -m68020-40
@opindex m68020-40
Generate output for a 68040, without using any of the new instructions.
This results in code that can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.  The generated code does use the
68881 instructions that are emulated on the 68040.

The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.

@item -m68020-60
@opindex m68020-60
Generate output for a 68060, without using any of the new instructions.
This results in code that can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.  The generated code does use the
68881 instructions that are emulated on the 68060.

The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.

@item -mhard-float
@itemx -m68881
@opindex mhard-float
@opindex m68881
Generate floating-point instructions.  This is the default for 68020
and above, and for ColdFire devices that have an FPU@.  It defines the
macro @code{__HAVE_68881__} on M680x0 targets and @code{__mcffpu__}
on ColdFire targets.

@item -msoft-float
@opindex msoft-float
Do not generate floating-point instructions; use library calls instead.
This is the default for 68000, 68010, and 68832 targets.  It is also
the default for ColdFire devices that have no FPU.

@item -mdiv
@itemx -mno-div
@opindex mdiv
@opindex mno-div
Generate (do not generate) ColdFire hardware divide and remainder
instructions.  If @option{-march} is used without @option{-mcpu},
the default is ``on'' for ColdFire architectures and ``off'' for M680x0
architectures.  Otherwise, the default is taken from the target CPU
(either the default CPU, or the one specified by @option{-mcpu}).  For
example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
@option{-mcpu=5206e}.

GCC defines the macro @code{__mcfhwdiv__} when this option is enabled.

@item -mshort
@opindex mshort
Consider type @code{int} to be 16 bits wide, like @code{short int}.
Additionally, parameters passed on the stack are also aligned to a
16-bit boundary even on targets whose API mandates promotion to 32-bit.

@item -mno-short
@opindex mno-short
Do not consider type @code{int} to be 16 bits wide.  This is the default.

@item -mnobitfield
@itemx -mno-bitfield
@opindex mnobitfield
@opindex mno-bitfield
Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
and @option{-m5200} options imply @w{@option{-mnobitfield}}.

@item -mbitfield
@opindex mbitfield
Do use the bit-field instructions.  The @option{-m68020} option implies
@option{-mbitfield}.  This is the default if you use a configuration
designed for a 68020.

@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions
that take a fixed number of arguments return with the @code{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 @code{printf});
otherwise incorrect code is generated for calls to those
functions.

In addition, seriously incorrect code results if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)

The @code{rtd} instruction is supported by the 68010, 68020, 68030,
68040, 68060 and CPU32 processors, but not by the 68000 or 5200.

@item -mno-rtd
@opindex mno-rtd
Do not use the calling conventions selected by @option{-mrtd}.
This is the default.

@item -malign-int
@itemx -mno-align-int
@opindex malign-int
@opindex mno-align-int
Control whether GCC aligns @code{int}, @code{long}, @code{long long},
@code{float}, @code{double}, and @code{long double} variables on a 32-bit
boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
Aligning variables on 32-bit boundaries produces code that runs somewhat
faster on processors with 32-bit busses at the expense of more memory.

@strong{Warning:} if you use the @option{-malign-int} switch, GCC
aligns structures containing the above types differently than
most published application binary interface specifications for the m68k.

@item -mpcrel
@opindex mpcrel
Use the pc-relative addressing mode of the 68000 directly, instead of
using a global offset table.  At present, this option implies @option{-fpic},
allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
not presently supported with @option{-mpcrel}, though this could be supported for
68020 and higher processors.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
Do not (do) assume that unaligned memory references are handled by
the system.

@item -msep-data
Generate code that allows the data segment to be located in a different
area of memory from the text segment.  This allows for execute-in-place in
an environment without virtual memory management.  This option implies
@option{-fPIC}.

@item -mno-sep-data
Generate code that assumes that the data segment follows the text segment.
This is the default.

@item -mid-shared-library
Generate code that supports shared libraries via the library ID method.
This allows for execute-in-place and shared libraries in an environment
without virtual memory management.  This option implies @option{-fPIC}.

@item -mno-id-shared-library
Generate code that doesn't assume ID-based shared libraries are being used.
This is the default.

@item -mshared-library-id=n
Specifies the identification number of the ID-based shared library being
compiled.  Specifying a value of 0 generates more compact code; specifying
other values forces the allocation of that number to the current
library, but is no more space- or time-efficient than omitting this option.

@item -mxgot
@itemx -mno-xgot
@opindex mxgot
@opindex mno-xgot
When generating position-independent code for ColdFire, generate code
that works if the GOT has more than 8192 entries.  This code is
larger and slower than code generated without this option.  On M680x0
processors, this option is not needed; @option{-fPIC} suffices.

GCC normally uses a single instruction to load values from the GOT@.
While this is relatively efficient, it only works if the GOT
is smaller than about 64k.  Anything larger causes the linker
to report an error such as:

@cindex relocation truncated to fit (ColdFire)
@smallexample
relocation truncated to fit: R_68K_GOT16O foobar
@end smallexample

If this happens, you should recompile your code with @option{-mxgot}.
It should then work with very large GOTs.  However, code generated with
@option{-mxgot} is less efficient, since it takes 4 instructions to fetch
the value of a global symbol.

Note that some linkers, including newer versions of the GNU linker,
can create multiple GOTs and sort GOT entries.  If you have such a linker,
you should only need to use @option{-mxgot} when compiling a single
object file that accesses more than 8192 GOT entries.  Very few do.

These options have no effect unless GCC is generating
position-independent code.

@item -mlong-jump-table-offsets
@opindex mlong-jump-table-offsets
Use 32-bit offsets in @code{switch} tables.  The default is to use
16-bit offsets.

@end table

@node MCore Options
@subsection MCore Options
@cindex MCore options

These are the @samp{-m} options defined for the Motorola M*Core
processors.

@table @gcctabopt

@item -mhardlit
@itemx -mno-hardlit
@opindex mhardlit
@opindex mno-hardlit
Inline constants into the code stream if it can be done in two
instructions or less.

@item -mdiv
@itemx -mno-div
@opindex mdiv
@opindex mno-div
Use the divide instruction.  (Enabled by default).

@item -mrelax-immediate
@itemx -mno-relax-immediate
@opindex mrelax-immediate
@opindex mno-relax-immediate
Allow arbitrary-sized immediates in bit operations.

@item -mwide-bitfields
@itemx -mno-wide-bitfields
@opindex mwide-bitfields
@opindex mno-wide-bitfields
Always treat bit-fields as @code{int}-sized.

@item -m4byte-functions
@itemx -mno-4byte-functions
@opindex m4byte-functions
@opindex mno-4byte-functions
Force all functions to be aligned to a 4-byte boundary.

@item -mcallgraph-data
@itemx -mno-callgraph-data
@opindex mcallgraph-data
@opindex mno-callgraph-data
Emit callgraph information.

@item -mslow-bytes
@itemx -mno-slow-bytes
@opindex mslow-bytes
@opindex mno-slow-bytes
Prefer word access when reading byte quantities.

@item -mlittle-endian
@itemx -mbig-endian
@opindex mlittle-endian
@opindex mbig-endian
Generate code for a little-endian target.

@item -m210
@itemx -m340
@opindex m210
@opindex m340
Generate code for the 210 processor.

@item -mno-lsim
@opindex mno-lsim
Assume that runtime support has been provided and so omit the
simulator library (@file{libsim.a)} from the linker command line.

@item -mstack-increment=@var{size}
@opindex mstack-increment
Set the maximum amount for a single stack increment operation.  Large
values can increase the speed of programs that contain functions
that need a large amount of stack space, but they can also trigger a
segmentation fault if the stack is extended too much.  The default
value is 0x1000.

@end table

@node MeP Options
@subsection MeP Options
@cindex MeP options

@table @gcctabopt

@item -mabsdiff
@opindex mabsdiff
Enables the @code{abs} instruction, which is the absolute difference
between two registers.

@item -mall-opts
@opindex mall-opts
Enables all the optional instructions---average, multiply, divide, bit
operations, leading zero, absolute difference, min/max, clip, and
saturation.


@item -maverage
@opindex maverage
Enables the @code{ave} instruction, which computes the average of two
registers.

@item -mbased=@var{n}
@opindex mbased=
Variables of size @var{n} bytes or smaller are placed in the
@code{.based} section by default.  Based variables use the @code{$tp}
register as a base register, and there is a 128-byte limit to the
@code{.based} section.

@item -mbitops
@opindex mbitops
Enables the bit operation instructions---bit test (@code{btstm}), set
(@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
test-and-set (@code{tas}).

@item -mc=@var{name}
@opindex mc=
Selects which section constant data is placed in.  @var{name} may
be @samp{tiny}, @samp{near}, or @samp{far}.

@item -mclip
@opindex mclip
Enables the @code{clip} instruction.  Note that @option{-mclip} is not
useful unless you also provide @option{-mminmax}.

@item -mconfig=@var{name}
@opindex mconfig=
Selects one of the built-in core configurations.  Each MeP chip has
one or more modules in it; each module has a core CPU and a variety of
coprocessors, optional instructions, and peripherals.  The
@code{MeP-Integrator} tool, not part of GCC, provides these
configurations through this option; using this option is the same as
using all the corresponding command-line options.  The default
configuration is @samp{default}.

@item -mcop
@opindex mcop
Enables the coprocessor instructions.  By default, this is a 32-bit
coprocessor.  Note that the coprocessor is normally enabled via the
@option{-mconfig=} option.

@item -mcop32
@opindex mcop32
Enables the 32-bit coprocessor's instructions.

@item -mcop64
@opindex mcop64
Enables the 64-bit coprocessor's instructions.

@item -mivc2
@opindex mivc2
Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.

@item -mdc
@opindex mdc
Causes constant variables to be placed in the @code{.near} section.

@item -mdiv
@opindex mdiv
Enables the @code{div} and @code{divu} instructions.

@item -meb
@opindex meb
Generate big-endian code.

@item -mel
@opindex mel
Generate little-endian code.

@item -mio-volatile
@opindex mio-volatile
Tells the compiler that any variable marked with the @code{io}
attribute is to be considered volatile.

@item -ml
@opindex ml
Causes variables to be assigned to the @code{.far} section by default.

@item -mleadz
@opindex mleadz
Enables the @code{leadz} (leading zero) instruction.

@item -mm
@opindex mm
Causes variables to be assigned to the @code{.near} section by default.

@item -mminmax
@opindex mminmax
Enables the @code{min} and @code{max} instructions.

@item -mmult
@opindex mmult
Enables the multiplication and multiply-accumulate instructions.

@item -mno-opts
@opindex mno-opts
Disables all the optional instructions enabled by @option{-mall-opts}.

@item -mrepeat
@opindex mrepeat
Enables the @code{repeat} and @code{erepeat} instructions, used for
low-overhead looping.

@item -ms
@opindex ms
Causes all variables to default to the @code{.tiny} section.  Note
that there is a 65536-byte limit to this section.  Accesses to these
variables use the @code{%gp} base register.

@item -msatur
@opindex msatur
Enables the saturation instructions.  Note that the compiler does not
currently generate these itself, but this option is included for
compatibility with other tools, like @code{as}.

@item -msdram
@opindex msdram
Link the SDRAM-based runtime instead of the default ROM-based runtime.

@item -msim
@opindex msim
Link the simulator run-time libraries.

@item -msimnovec
@opindex msimnovec
Link the simulator runtime libraries, excluding built-in support
for reset and exception vectors and tables.

@item -mtf
@opindex mtf
Causes all functions to default to the @code{.far} section.  Without
this option, functions default to the @code{.near} section.

@item -mtiny=@var{n}
@opindex mtiny=
Variables that are @var{n} bytes or smaller are allocated to the
@code{.tiny} section.  These variables use the @code{$gp} base
register.  The default for this option is 4, but note that there's a
65536-byte limit to the @code{.tiny} section.

@end table

@node MicroBlaze Options
@subsection MicroBlaze Options
@cindex MicroBlaze Options

@table @gcctabopt

@item -msoft-float
@opindex msoft-float
Use software emulation for floating point (default).

@item -mhard-float
@opindex mhard-float
Use hardware floating-point instructions.

@item -mmemcpy
@opindex mmemcpy
Do not optimize block moves, use @code{memcpy}.

@item -mno-clearbss
@opindex mno-clearbss
This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.

@item -mcpu=@var{cpu-type}
@opindex mcpu=
Use features of, and schedule code for, the given CPU.
Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
where @var{X} is a major version, @var{YY} is the minor version, and
@var{Z} is compatibility code.  Example values are @samp{v3.00.a},
@samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}.

@item -mxl-soft-mul
@opindex mxl-soft-mul
Use software multiply emulation (default).

@item -mxl-soft-div
@opindex mxl-soft-div
Use software emulation for divides (default).

@item -mxl-barrel-shift
@opindex mxl-barrel-shift
Use the hardware barrel shifter.

@item -mxl-pattern-compare
@opindex mxl-pattern-compare
Use pattern compare instructions.

@item -msmall-divides
@opindex msmall-divides
Use table lookup optimization for small signed integer divisions.

@item -mxl-stack-check
@opindex mxl-stack-check
This option is deprecated.  Use @option{-fstack-check} instead.

@item -mxl-gp-opt
@opindex mxl-gp-opt
Use GP-relative @code{.sdata}/@code{.sbss} sections.

@item -mxl-multiply-high
@opindex mxl-multiply-high
Use multiply high instructions for high part of 32x32 multiply.

@item -mxl-float-convert
@opindex mxl-float-convert
Use hardware floating-point conversion instructions.

@item -mxl-float-sqrt
@opindex mxl-float-sqrt
Use hardware floating-point square root instruction.

@item -mbig-endian
@opindex mbig-endian
Generate code for a big-endian target.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.

@item -mxl-reorder
@opindex mxl-reorder
Use reorder instructions (swap and byte reversed load/store).

@item -mxl-mode-@var{app-model}
Select application model @var{app-model}.  Valid models are
@table @samp
@item executable
normal executable (default), uses startup code @file{crt0.o}.

@item xmdstub
for use with Xilinx Microprocessor Debugger (XMD) based
software intrusive debug agent called xmdstub. This uses startup file
@file{crt1.o} and sets the start address of the program to 0x800.

@item bootstrap
for applications that are loaded using a bootloader.
This model uses startup file @file{crt2.o} which does not contain a processor
reset vector handler. This is suitable for transferring control on a
processor reset to the bootloader rather than the application.

@item novectors
for applications that do not require any of the
MicroBlaze vectors. This option may be useful for applications running
within a monitoring application. This model uses @file{crt3.o} as a startup file.
@end table

Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
@option{-mxl-mode-@var{app-model}}.

@end table

@node MIPS Options
@subsection MIPS Options
@cindex MIPS options

@table @gcctabopt

@item -EB
@opindex EB
Generate big-endian code.

@item -EL
@opindex EL
Generate little-endian code.  This is the default for @samp{mips*el-*-*}
configurations.

@item -march=@var{arch}
@opindex march
Generate code that runs on @var{arch}, which can be the name of a
generic MIPS ISA, or the name of a particular processor.
The ISA names are:
@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
@samp{mips32}, @samp{mips32r2}, @samp{mips32r3}, @samp{mips32r5},
@samp{mips32r6}, @samp{mips64}, @samp{mips64r2}, @samp{mips64r3},
@samp{mips64r5} and @samp{mips64r6}.
The processor names are:
@samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
@samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
@samp{5kc}, @samp{5kf},
@samp{20kc},
@samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
@samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
@samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, @samp{34kn},
@samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
@samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
@samp{i6400},
@samp{interaptiv},
@samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a},
@samp{m4k},
@samp{m14k}, @samp{m14kc}, @samp{m14ke}, @samp{m14kec},
@samp{m5100}, @samp{m5101},
@samp{octeon}, @samp{octeon+}, @samp{octeon2}, @samp{octeon3},
@samp{orion},
@samp{p5600},
@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
@samp{r4600}, @samp{r4650}, @samp{r4700}, @samp{r6000}, @samp{r8000},
@samp{rm7000}, @samp{rm9000},
@samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
@samp{sb1},
@samp{sr71000},
@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
@samp{vr5000}, @samp{vr5400}, @samp{vr5500},
@samp{xlr} and @samp{xlp}.
The special value @samp{from-abi} selects the
most compatible architecture for the selected ABI (that is,
@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.

The native Linux/GNU toolchain also supports the value @samp{native},
which selects the best architecture option for the host processor.
@option{-march=native} has no effect if GCC does not recognize
the processor.

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

Names of the form @samp{@var{n}f2_1} refer to processors with
FPUs clocked at half the rate of the core, names of the form
@samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
rate as the core, and names of the form @samp{@var{n}f3_2} refer to
processors with FPUs clocked a ratio of 3:2 with respect to the core.
For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
accepted as synonyms for @samp{@var{n}f1_1}.

GCC defines two macros based on the value of this option.  The first
is @code{_MIPS_ARCH}, which gives the name of target architecture, as
a string.  The second has the form @code{_MIPS_ARCH_@var{foo}},
where @var{foo} is the capitalized value of @code{_MIPS_ARCH}@.
For example, @option{-march=r2000} sets @code{_MIPS_ARCH}
to @code{"r2000"} and defines the macro @code{_MIPS_ARCH_R2000}.

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

@item -mtune=@var{arch}
@opindex mtune
Optimize for @var{arch}.  Among other things, this option controls
the way instructions are scheduled, and the perceived cost of arithmetic
operations.  The list of @var{arch} values is the same as for
@option{-march}.

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

@option{-mtune} defines the macros @code{_MIPS_TUNE} and
@code{_MIPS_TUNE_@var{foo}}, which work in the same way as the
@option{-march} ones described above.

@item -mips1
@opindex mips1
Equivalent to @option{-march=mips1}.

@item -mips2
@opindex mips2
Equivalent to @option{-march=mips2}.

@item -mips3
@opindex mips3
Equivalent to @option{-march=mips3}.

@item -mips4
@opindex mips4
Equivalent to @option{-march=mips4}.

@item -mips32
@opindex mips32
Equivalent to @option{-march=mips32}.

@item -mips32r3
@opindex mips32r3
Equivalent to @option{-march=mips32r3}.

@item -mips32r5
@opindex mips32r5
Equivalent to @option{-march=mips32r5}.

@item -mips32r6
@opindex mips32r6
Equivalent to @option{-march=mips32r6}.

@item -mips64
@opindex mips64
Equivalent to @option{-march=mips64}.

@item -mips64r2
@opindex mips64r2
Equivalent to @option{-march=mips64r2}.

@item -mips64r3
@opindex mips64r3
Equivalent to @option{-march=mips64r3}.

@item -mips64r5
@opindex mips64r5
Equivalent to @option{-march=mips64r5}.

@item -mips64r6
@opindex mips64r6
Equivalent to @option{-march=mips64r6}.

@item -mips16
@itemx -mno-mips16
@opindex mips16
@opindex mno-mips16
Generate (do not generate) MIPS16 code.  If GCC is targeting a
MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.

MIPS16 code generation can also be controlled on a per-function basis
by means of @code{mips16} and @code{nomips16} attributes.
@xref{Function Attributes}, for more information.

@item -mflip-mips16
@opindex mflip-mips16
Generate MIPS16 code on alternating functions.  This option is provided
for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
not intended for ordinary use in compiling user code.

@item -minterlink-compressed
@itemx -mno-interlink-compressed
@opindex minterlink-compressed
@opindex mno-interlink-compressed
Require (do not require) that code using the standard (uncompressed) MIPS ISA
be link-compatible with MIPS16 and microMIPS code, and vice versa.

For example, code using the standard ISA encoding cannot jump directly
to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
@option{-minterlink-compressed} therefore disables direct jumps unless GCC
knows that the target of the jump is not compressed.

@item -minterlink-mips16
@itemx -mno-interlink-mips16
@opindex minterlink-mips16
@opindex mno-interlink-mips16
Aliases of @option{-minterlink-compressed} and
@option{-mno-interlink-compressed}.  These options predate the microMIPS ASE
and are retained for backwards compatibility.

@item -mabi=32
@itemx -mabi=o64
@itemx -mabi=n32
@itemx -mabi=64
@itemx -mabi=eabi
@opindex mabi=32
@opindex mabi=o64
@opindex mabi=n32
@opindex mabi=64
@opindex mabi=eabi
Generate code for the given ABI@.

Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
generates 64-bit code when you select a 64-bit architecture, but you
can use @option{-mgp32} to get 32-bit code instead.

For information about the O64 ABI, see
@uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.

GCC supports a variant of the o32 ABI in which floating-point registers
are 64 rather than 32 bits wide.  You can select this combination with
@option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
and @code{mfhc1} instructions and is therefore only supported for
MIPS32R2, MIPS32R3 and MIPS32R5 processors.

The register assignments for arguments and return values remain the
same, but each scalar value is passed in a single 64-bit register
rather than a pair of 32-bit registers.  For example, scalar
floating-point values are returned in @samp{$f0} only, not a
@samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
remains the same in that the even-numbered double-precision registers
are saved.

Two additional variants of the o32 ABI are supported to enable
a transition from 32-bit to 64-bit registers.  These are FPXX
(@option{-mfpxx}) and FP64A (@option{-mfp64} @option{-mno-odd-spreg}).
The FPXX extension mandates that all code must execute correctly
when run using 32-bit or 64-bit registers.  The code can be interlinked
with either FP32 or FP64, but not both.
The FP64A extension is similar to the FP64 extension but forbids the
use of odd-numbered single-precision registers.  This can be used
in conjunction with the @code{FRE} mode of FPUs in MIPS32R5
processors and allows both FP32 and FP64A code to interlink and
run in the same process without changing FPU modes.

@item -mabicalls
@itemx -mno-abicalls
@opindex mabicalls
@opindex mno-abicalls
Generate (do not generate) code that is suitable for SVR4-style
dynamic objects.  @option{-mabicalls} is the default for SVR4-based
systems.

@item -mshared
@itemx -mno-shared
Generate (do not generate) code that is fully position-independent,
and that can therefore be linked into shared libraries.  This option
only affects @option{-mabicalls}.

All @option{-mabicalls} code has traditionally been position-independent,
regardless of options like @option{-fPIC} and @option{-fpic}.  However,
as an extension, the GNU toolchain allows executables to use absolute
accesses for locally-binding symbols.  It can also use shorter GP
initialization sequences and generate direct calls to locally-defined
functions.  This mode is selected by @option{-mno-shared}.

@option{-mno-shared} depends on binutils 2.16 or higher and generates
objects that can only be linked by the GNU linker.  However, the option
does not affect the ABI of the final executable; it only affects the ABI
of relocatable objects.  Using @option{-mno-shared} generally makes
executables both smaller and quicker.

@option{-mshared} is the default.

@item -mplt
@itemx -mno-plt
@opindex mplt
@opindex mno-plt
Assume (do not assume) that the static and dynamic linkers
support PLTs and copy relocations.  This option only affects
@option{-mno-shared -mabicalls}.  For the n64 ABI, this option
has no effect without @option{-msym32}.

You can make @option{-mplt} the default by configuring
GCC with @option{--with-mips-plt}.  The default is
@option{-mno-plt} otherwise.

@item -mxgot
@itemx -mno-xgot
@opindex mxgot
@opindex mno-xgot
Lift (do not lift) the usual restrictions on the size of the global
offset table.

GCC normally uses a single instruction to load values from the GOT@.
While this is relatively efficient, it only works if the GOT
is smaller than about 64k.  Anything larger causes the linker
to report an error such as:

@cindex relocation truncated to fit (MIPS)
@smallexample
relocation truncated to fit: R_MIPS_GOT16 foobar
@end smallexample

If this happens, you should recompile your code with @option{-mxgot}.
This works with very large GOTs, although the code is also
less efficient, since it takes three instructions to fetch the
value of a global symbol.

Note that some linkers can create multiple GOTs.  If you have such a
linker, you should only need to use @option{-mxgot} when a single object
file accesses more than 64k's worth of GOT entries.  Very few do.

These options have no effect unless GCC is generating position
independent code.

@item -mgp32
@opindex mgp32
Assume that general-purpose registers are 32 bits wide.

@item -mgp64
@opindex mgp64
Assume that general-purpose registers are 64 bits wide.

@item -mfp32
@opindex mfp32
Assume that floating-point registers are 32 bits wide.

@item -mfp64
@opindex mfp64
Assume that floating-point registers are 64 bits wide.

@item -mfpxx
@opindex mfpxx
Do not assume the width of floating-point registers.

@item -mhard-float
@opindex mhard-float
Use floating-point coprocessor instructions.

@item -msoft-float
@opindex msoft-float
Do not use floating-point coprocessor instructions.  Implement
floating-point calculations using library calls instead.

@item -mno-float
@opindex mno-float
Equivalent to @option{-msoft-float}, but additionally asserts that the
program being compiled does not perform any floating-point operations.
This option is presently supported only by some bare-metal MIPS
configurations, where it may select a special set of libraries
that lack all floating-point support (including, for example, the
floating-point @code{printf} formats).  
If code compiled with @option{-mno-float} accidentally contains
floating-point operations, it is likely to suffer a link-time
or run-time failure.

@item -msingle-float
@opindex msingle-float
Assume that the floating-point coprocessor only supports single-precision
operations.

@item -mdouble-float
@opindex mdouble-float
Assume that the floating-point coprocessor supports double-precision
operations.  This is the default.

@item -modd-spreg
@itemx -mno-odd-spreg
@opindex modd-spreg
@opindex mno-odd-spreg
Enable the use of odd-numbered single-precision floating-point registers
for the o32 ABI.  This is the default for processors that are known to
support these registers.  When using the o32 FPXX ABI, @option{-mno-odd-spreg}
is set by default.

@item -mabs=2008
@itemx -mabs=legacy
@opindex mabs=2008
@opindex mabs=legacy
These options control the treatment of the special not-a-number (NaN)
IEEE 754 floating-point data with the @code{abs.@i{fmt}} and
@code{neg.@i{fmt}} machine instructions.

By default or when @option{-mabs=legacy} is used the legacy
treatment is selected.  In this case these instructions are considered
arithmetic and avoided where correct operation is required and the
input operand might be a NaN.  A longer sequence of instructions that
manipulate the sign bit of floating-point datum manually is used
instead unless the @option{-ffinite-math-only} option has also been
specified.

The @option{-mabs=2008} option selects the IEEE 754-2008 treatment.  In
this case these instructions are considered non-arithmetic and therefore
operating correctly in all cases, including in particular where the
input operand is a NaN.  These instructions are therefore always used
for the respective operations.

@item -mnan=2008
@itemx -mnan=legacy
@opindex mnan=2008
@opindex mnan=legacy
These options control the encoding of the special not-a-number (NaN)
IEEE 754 floating-point data.

The @option{-mnan=legacy} option selects the legacy encoding.  In this
case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
significand field being 0, whereas signaling NaNs (sNaNs) are denoted
by the first bit of their trailing significand field being 1.

The @option{-mnan=2008} option selects the IEEE 754-2008 encoding.  In
this case qNaNs are denoted by the first bit of their trailing
significand field being 1, whereas sNaNs are denoted by the first bit of
their trailing significand field being 0.

The default is @option{-mnan=legacy} unless GCC has been configured with
@option{--with-nan=2008}.

@item -mllsc
@itemx -mno-llsc
@opindex mllsc
@opindex mno-llsc
Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
implement atomic memory built-in functions.  When neither option is
specified, GCC uses the instructions if the target architecture
supports them.

@option{-mllsc} is useful if the runtime environment can emulate the
instructions and @option{-mno-llsc} can be useful when compiling for
nonstandard ISAs.  You can make either option the default by
configuring GCC with @option{--with-llsc} and @option{--without-llsc}
respectively.  @option{--with-llsc} is the default for some
configurations; see the installation documentation for details.

@item -mdsp
@itemx -mno-dsp
@opindex mdsp
@opindex mno-dsp
Use (do not use) revision 1 of the MIPS DSP ASE@.
@xref{MIPS DSP Built-in Functions}.  This option defines the
preprocessor macro @code{__mips_dsp}.  It also defines
@code{__mips_dsp_rev} to 1.

@item -mdspr2
@itemx -mno-dspr2
@opindex mdspr2
@opindex mno-dspr2
Use (do not use) revision 2 of the MIPS DSP ASE@.
@xref{MIPS DSP Built-in Functions}.  This option defines the
preprocessor macros @code{__mips_dsp} and @code{__mips_dspr2}.
It also defines @code{__mips_dsp_rev} to 2.

@item -msmartmips
@itemx -mno-smartmips
@opindex msmartmips
@opindex mno-smartmips
Use (do not use) the MIPS SmartMIPS ASE.

@item -mpaired-single
@itemx -mno-paired-single
@opindex mpaired-single
@opindex mno-paired-single
Use (do not use) paired-single floating-point instructions.
@xref{MIPS Paired-Single Support}.  This option requires
hardware floating-point support to be enabled.

@item -mdmx
@itemx -mno-mdmx
@opindex mdmx
@opindex mno-mdmx
Use (do not use) MIPS Digital Media Extension instructions.
This option can only be used when generating 64-bit code and requires
hardware floating-point support to be enabled.

@item -mips3d
@itemx -mno-mips3d
@opindex mips3d
@opindex mno-mips3d
Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
The option @option{-mips3d} implies @option{-mpaired-single}.

@item -mmicromips
@itemx -mno-micromips
@opindex mmicromips
@opindex mno-mmicromips
Generate (do not generate) microMIPS code.

MicroMIPS code generation can also be controlled on a per-function basis
by means of @code{micromips} and @code{nomicromips} attributes.
@xref{Function Attributes}, for more information.

@item -mmt
@itemx -mno-mt
@opindex mmt
@opindex mno-mt
Use (do not use) MT Multithreading instructions.

@item -mmcu
@itemx -mno-mcu
@opindex mmcu
@opindex mno-mcu
Use (do not use) the MIPS MCU ASE instructions.

@item -meva
@itemx -mno-eva
@opindex meva
@opindex mno-eva
Use (do not use) the MIPS Enhanced Virtual Addressing instructions.

@item -mvirt
@itemx -mno-virt
@opindex mvirt
@opindex mno-virt
Use (do not use) the MIPS Virtualization (VZ) instructions.

@item -mxpa
@itemx -mno-xpa
@opindex mxpa
@opindex mno-xpa
Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.

@item -mlong64
@opindex mlong64
Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
an explanation of the default and the way that the pointer size is
determined.

@item -mlong32
@opindex mlong32
Force @code{long}, @code{int}, and pointer types to be 32 bits wide.

The default size of @code{int}s, @code{long}s and pointers depends on
the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
32-bit @code{long}s.  Pointers are the same size as @code{long}s,
or the same size as integer registers, whichever is smaller.

@item -msym32
@itemx -mno-sym32
@opindex msym32
@opindex mno-sym32
Assume (do not assume) that all symbols have 32-bit values, regardless
of the selected ABI@.  This option is useful in combination with
@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
to generate shorter and faster references to symbolic addresses.

@item -G @var{num}
@opindex G
Put definitions of externally-visible data in a small data section
if that data is no bigger than @var{num} bytes.  GCC can then generate
more efficient accesses to the data; see @option{-mgpopt} for details.

The default @option{-G} option depends on the configuration.

@item -mlocal-sdata
@itemx -mno-local-sdata
@opindex mlocal-sdata
@opindex mno-local-sdata
Extend (do not extend) the @option{-G} behavior to local data too,
such as to static variables in C@.  @option{-mlocal-sdata} is the
default for all configurations.

If the linker complains that an application is using too much small data,
you might want to try rebuilding the less performance-critical parts with
@option{-mno-local-sdata}.  You might also want to build large
libraries with @option{-mno-local-sdata}, so that the libraries leave
more room for the main program.

@item -mextern-sdata
@itemx -mno-extern-sdata
@opindex mextern-sdata
@opindex mno-extern-sdata
Assume (do not assume) that externally-defined data is in
a small data section if the size of that data is within the @option{-G} limit.
@option{-mextern-sdata} is the default for all configurations.

If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
@var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
that is no bigger than @var{num} bytes, you must make sure that @var{Var}
is placed in a small data section.  If @var{Var} is defined by another
module, you must either compile that module with a high-enough
@option{-G} setting or attach a @code{section} attribute to @var{Var}'s
definition.  If @var{Var} is common, you must link the application
with a high-enough @option{-G} setting.

The easiest way of satisfying these restrictions is to compile
and link every module with the same @option{-G} option.  However,
you may wish to build a library that supports several different
small data limits.  You can do this by compiling the library with
the highest supported @option{-G} setting and additionally using
@option{-mno-extern-sdata} to stop the library from making assumptions
about externally-defined data.

@item -mgpopt
@itemx -mno-gpopt
@opindex mgpopt
@opindex mno-gpopt
Use (do not use) GP-relative accesses for symbols that are known to be
in a small data section; see @option{-G}, @option{-mlocal-sdata} and
@option{-mextern-sdata}.  @option{-mgpopt} is the default for all
configurations.

@option{-mno-gpopt} is useful for cases where the @code{$gp} register
might not hold the value of @code{_gp}.  For example, if the code is
part of a library that might be used in a boot monitor, programs that
call boot monitor routines pass an unknown value in @code{$gp}.
(In such situations, the boot monitor itself is usually compiled
with @option{-G0}.)

@option{-mno-gpopt} implies @option{-mno-local-sdata} and
@option{-mno-extern-sdata}.

@item -membedded-data
@itemx -mno-embedded-data
@opindex membedded-data
@opindex 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.

@item -muninit-const-in-rodata
@itemx -mno-uninit-const-in-rodata
@opindex muninit-const-in-rodata
@opindex mno-uninit-const-in-rodata
Put uninitialized @code{const} variables in the read-only data section.
This option is only meaningful in conjunction with @option{-membedded-data}.

@item -mcode-readable=@var{setting}
@opindex mcode-readable
Specify whether GCC may generate code that reads from executable sections.
There are three possible settings:

@table @gcctabopt
@item -mcode-readable=yes
Instructions may freely access executable sections.  This is the
default setting.

@item -mcode-readable=pcrel
MIPS16 PC-relative load instructions can access executable sections,
but other instructions must not do so.  This option is useful on 4KSc
and 4KSd processors when the code TLBs have the Read Inhibit bit set.
It is also useful on processors that can be configured to have a dual
instruction/data SRAM interface and that, like the M4K, automatically
redirect PC-relative loads to the instruction RAM.

@item -mcode-readable=no
Instructions must not access executable sections.  This option can be
useful on targets that are configured to have a dual instruction/data
SRAM interface but that (unlike the M4K) do not automatically redirect
PC-relative loads to the instruction RAM.
@end table

@item -msplit-addresses
@itemx -mno-split-addresses
@opindex msplit-addresses
@opindex mno-split-addresses
Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
relocation operators.  This option has been superseded by
@option{-mexplicit-relocs} but is retained for backwards compatibility.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-relocs
Use (do not use) assembler relocation operators when dealing with symbolic
addresses.  The alternative, selected by @option{-mno-explicit-relocs},
is to use assembler macros instead.

@option{-mexplicit-relocs} is the default if GCC was configured
to use an assembler that supports relocation operators.

@item -mcheck-zero-division
@itemx -mno-check-zero-division
@opindex mcheck-zero-division
@opindex mno-check-zero-division
Trap (do not trap) on integer division by zero.

The default is @option{-mcheck-zero-division}.

@item -mdivide-traps
@itemx -mdivide-breaks
@opindex mdivide-traps
@opindex mdivide-breaks
MIPS systems check for division by zero by generating either a
conditional trap or a break instruction.  Using traps results in
smaller code, but is only supported on MIPS II and later.  Also, some
versions of the Linux kernel have a bug that prevents trap from
generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
allow conditional traps on architectures that support them and
@option{-mdivide-breaks} to force the use of breaks.

The default is usually @option{-mdivide-traps}, but this can be
overridden at configure time using @option{--with-divide=breaks}.
Divide-by-zero checks can be completely disabled using
@option{-mno-check-zero-division}.

@item -mload-store-pairs
@itemx -mno-load-store-pairs
@opindex mload-store-pairs
@opindex mno-load-store-pairs
Enable (disable) an optimization that pairs consecutive load or store
instructions to enable load/store bonding.  This option is enabled by
default but only takes effect when the selected architecture is known
to support bonding.

@item -mmemcpy
@itemx -mno-memcpy
@opindex mmemcpy
@opindex mno-memcpy
Force (do not force) the use of @code{memcpy} for non-trivial block
moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
most constant-sized copies.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Disable (do not disable) use of the @code{jal} instruction.  Calling
functions using @code{jal} is more efficient but requires the caller
and callee to be in the same 256 megabyte segment.

This option has no effect on abicalls code.  The default is
@option{-mno-long-calls}.

@item -mmad
@itemx -mno-mad
@opindex mmad
@opindex mno-mad
Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
instructions, as provided by the R4650 ISA@.

@item -mimadd
@itemx -mno-imadd
@opindex mimadd
@opindex mno-imadd
Enable (disable) use of the @code{madd} and @code{msub} integer
instructions.  The default is @option{-mimadd} on architectures
that support @code{madd} and @code{msub} except for the 74k 
architecture where it was found to generate slower code.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Enable (disable) use of the floating-point multiply-accumulate
instructions, when they are available.  The default is
@option{-mfused-madd}.

On the R8000 CPU when multiply-accumulate instructions are used,
the intermediate product is calculated to infinite precision
and is not subject to the FCSR Flush to Zero bit.  This may be
undesirable in some circumstances.  On other processors the result
is numerically identical to the equivalent computation using
separate multiply, add, subtract and negate instructions.

@item -nocpp
@opindex nocpp
Tell the MIPS assembler to not run its preprocessor over user
assembler files (with a @samp{.s} suffix) when assembling them.

@item -mfix-24k
@itemx -mno-fix-24k
@opindex mfix-24k
@opindex mno-fix-24k
Work around the 24K E48 (lost data on stores during refill) errata.
The workarounds are implemented by the assembler rather than by GCC@.

@item -mfix-r4000
@itemx -mno-fix-r4000
@opindex mfix-r4000
@opindex mno-fix-r4000
Work around certain R4000 CPU errata:
@itemize @minus
@item
A double-word or a variable shift may give an incorrect result if executed
immediately after starting an integer division.
@item
A double-word or a variable shift may give an incorrect result if executed
while an integer multiplication is in progress.
@item
An integer division may give an incorrect result if started in a delay slot
of a taken branch or a jump.
@end itemize

@item -mfix-r4400
@itemx -mno-fix-r4400
@opindex mfix-r4400
@opindex mno-fix-r4400
Work around certain R4400 CPU errata:
@itemize @minus
@item
A double-word or a variable shift may give an incorrect result if executed
immediately after starting an integer division.
@end itemize

@item -mfix-r10000
@itemx -mno-fix-r10000
@opindex mfix-r10000
@opindex mno-fix-r10000
Work around certain R10000 errata:
@itemize @minus
@item
@code{ll}/@code{sc} sequences may not behave atomically on revisions
prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
@end itemize

This option can only be used if the target architecture supports
branch-likely instructions.  @option{-mfix-r10000} is the default when
@option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
otherwise.

@item -mfix-rm7000
@itemx -mno-fix-rm7000
@opindex mfix-rm7000
Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
workarounds are implemented by the assembler rather than by GCC@.

@item -mfix-vr4120
@itemx -mno-fix-vr4120
@opindex mfix-vr4120
Work around certain VR4120 errata:
@itemize @minus
@item
@code{dmultu} does not always produce the correct result.
@item
@code{div} and @code{ddiv} do not always produce the correct result if one
of the operands is negative.
@end itemize
The workarounds for the division errata rely on special functions in
@file{libgcc.a}.  At present, these functions are only provided by
the @code{mips64vr*-elf} configurations.

Other VR4120 errata require a NOP to be inserted between certain pairs of
instructions.  These errata are handled by the assembler, not by GCC itself.

@item -mfix-vr4130
@opindex mfix-vr4130
Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
workarounds are implemented by the assembler rather than by GCC,
although GCC avoids using @code{mflo} and @code{mfhi} if the
VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
instructions are available instead.

@item -mfix-sb1
@itemx -mno-fix-sb1
@opindex mfix-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.)

@item -mr10k-cache-barrier=@var{setting}
@opindex mr10k-cache-barrier
Specify whether GCC should insert cache barriers to avoid the
side effects of speculation on R10K processors.

In common with many processors, the R10K tries to predict the outcome
of a conditional branch and speculatively executes instructions from
the ``taken'' branch.  It later aborts these instructions if the
predicted outcome is wrong.  However, on the R10K, even aborted
instructions can have side effects.

This problem only affects kernel stores and, depending on the system,
kernel loads.  As an example, a speculatively-executed store may load
the target memory into cache and mark the cache line as dirty, even if
the store itself is later aborted.  If a DMA operation writes to the
same area of memory before the ``dirty'' line is flushed, the cached
data overwrites the DMA-ed data.  See the R10K processor manual
for a full description, including other potential problems.

One workaround is to insert cache barrier instructions before every memory
access that might be speculatively executed and that might have side
effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
controls GCC's implementation of this workaround.  It assumes that
aborted accesses to any byte in the following regions does not have
side effects:

@enumerate
@item
the memory occupied by the current function's stack frame;

@item
the memory occupied by an incoming stack argument;

@item
the memory occupied by an object with a link-time-constant address.
@end enumerate

It is the kernel's responsibility to ensure that speculative
accesses to these regions are indeed safe.

If the input program contains a function declaration such as:

@smallexample
void foo (void);
@end smallexample

then the implementation of @code{foo} must allow @code{j foo} and
@code{jal foo} to be executed speculatively.  GCC honors this
restriction for functions it compiles itself.  It expects non-GCC
functions (such as hand-written assembly code) to do the same.

The option has three forms:

@table @gcctabopt
@item -mr10k-cache-barrier=load-store
Insert a cache barrier before a load or store that might be
speculatively executed and that might have side effects even
if aborted.

@item -mr10k-cache-barrier=store
Insert a cache barrier before a store that might be speculatively
executed and that might have side effects even if aborted.

@item -mr10k-cache-barrier=none
Disable the insertion of cache barriers.  This is the default setting.
@end table

@item -mflush-func=@var{func}
@itemx -mno-flush-func
@opindex mflush-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 @code{_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
@code{_flush_func} or @code{__cpu_flush}.

@item mbranch-cost=@var{num}
@opindex mbranch-cost
Set the cost of branches to roughly @var{num} ``simple'' instructions.
This cost is only a heuristic and is not guaranteed to produce
consistent results across releases.  A zero cost redundantly selects
the default, which is based on the @option{-mtune} setting.

@item -mbranch-likely
@itemx -mno-branch-likely
@opindex mbranch-likely
@opindex 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 that implement those architectures; for those, Branch
Likely instructions are not be generated by default because the MIPS32
and MIPS64 architectures specifically deprecate their use.

@item -mcompact-branches=never
@itemx -mcompact-branches=optimal
@itemx -mcompact-branches=always
@opindex mcompact-branches=never
@opindex mcompact-branches=optimal
@opindex mcompact-branches=always
These options control which form of branches will be generated.  The
default is @option{-mcompact-branches=optimal}.

The @option{-mcompact-branches=never} option ensures that compact branch
instructions will never be generated.

The @option{-mcompact-branches=always} option ensures that a compact
branch instruction will be generated if available.  If a compact branch
instruction is not available, a delay slot form of the branch will be
used instead.

This option is supported from MIPS Release 6 onwards.

The @option{-mcompact-branches=optimal} option will cause a delay slot
branch to be used if one is available in the current ISA and the delay
slot is successfully filled.  If the delay slot is not filled, a compact
branch will be chosen if one is available.

@item -mfp-exceptions
@itemx -mno-fp-exceptions
@opindex mfp-exceptions
Specifies whether FP exceptions are enabled.  This affects how
FP instructions are scheduled for some processors.
The default is that FP exceptions are
enabled.

For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
FP pipe.

@item -mvr4130-align
@itemx -mno-vr4130-align
@opindex mvr4130-align
The VR4130 pipeline is two-way superscalar, but can only issue two
instructions together if the first one is 8-byte aligned.  When this
option is enabled, GCC aligns pairs of instructions that it
thinks should execute in parallel.

This option only has an effect when optimizing for the VR4130.
It normally makes code faster, but at the expense of making it bigger.
It is enabled by default at optimization level @option{-O3}.

@item -msynci
@itemx -mno-synci
@opindex msynci
Enable (disable) generation of @code{synci} instructions on
architectures that support it.  The @code{synci} instructions (if
enabled) are generated when @code{__builtin___clear_cache} is
compiled.

This option defaults to @option{-mno-synci}, but the default can be
overridden by configuring GCC with @option{--with-synci}.

When compiling code for single processor systems, it is generally safe
to use @code{synci}.  However, on many multi-core (SMP) systems, it
does not invalidate the instruction caches on all cores and may lead
to undefined behavior.

@item -mrelax-pic-calls
@itemx -mno-relax-pic-calls
@opindex mrelax-pic-calls
Try to turn PIC calls that are normally dispatched via register
@code{$25} into direct calls.  This is only possible if the linker can
resolve the destination at link time and if the destination is within
range for a direct call.

@option{-mrelax-pic-calls} is the default if GCC was configured to use
an assembler and a linker that support the @code{.reloc} assembly
directive and @option{-mexplicit-relocs} is in effect.  With
@option{-mno-explicit-relocs}, this optimization can be performed by the
assembler and the linker alone without help from the compiler.

@item -mmcount-ra-address
@itemx -mno-mcount-ra-address
@opindex mmcount-ra-address
@opindex mno-mcount-ra-address
Emit (do not emit) code that allows @code{_mcount} to modify the
calling function's return address.  When enabled, this option extends
the usual @code{_mcount} interface with a new @var{ra-address}
parameter, which has type @code{intptr_t *} and is passed in register
@code{$12}.  @code{_mcount} can then modify the return address by
doing both of the following:
@itemize
@item
Returning the new address in register @code{$31}.
@item
Storing the new address in @code{*@var{ra-address}},
if @var{ra-address} is nonnull.
@end itemize

The default is @option{-mno-mcount-ra-address}.

@item -mframe-header-opt
@itemx -mno-frame-header-opt
@opindex mframe-header-opt
Enable (disable) frame header optimization in the o32 ABI.  When using the
o32 ABI, calling functions will allocate 16 bytes on the stack for the called
function to write out register arguments.  When enabled, this optimization
will suppress the allocation of the frame header if it can be determined that
it is unused.

This optimization is off by default at all optimization levels.

@item -mlxc1-sxc1
@itemx -mno-lxc1-sxc1
@opindex mlxc1-sxc1
When applicable, enable (disable) the generation of @code{lwxc1},
@code{swxc1}, @code{ldxc1}, @code{sdxc1} instructions.  Enabled by default.

@item -mmadd4
@itemx -mno-madd4
@opindex mmadd4
When applicable, enable (disable) the generation of 4-operand @code{madd.s},
@code{madd.d} and related instructions.  Enabled by default.

@end table

@node MMIX Options
@subsection MMIX Options
@cindex MMIX Options

These options are defined for the MMIX:

@table @gcctabopt
@item -mlibfuncs
@itemx -mno-libfuncs
@opindex mlibfuncs
@opindex mno-libfuncs
Specify that intrinsic library functions are being compiled, passing all
values in registers, no matter the size.

@item -mepsilon
@itemx -mno-epsilon
@opindex mepsilon
@opindex mno-epsilon
Generate floating-point comparison instructions that compare with respect
to the @code{rE} epsilon register.

@item -mabi=mmixware
@itemx -mabi=gnu
@opindex mabi=mmixware
@opindex mabi=gnu
Generate code that passes function parameters and return values that (in
the called function) are seen as registers @code{$0} and up, as opposed to
the GNU ABI which uses global registers @code{$231} and up.

@item -mzero-extend
@itemx -mno-zero-extend
@opindex mzero-extend
@opindex mno-zero-extend
When reading data from memory in sizes shorter than 64 bits, use (do not
use) zero-extending load instructions by default, rather than
sign-extending ones.

@item -mknuthdiv
@itemx -mno-knuthdiv
@opindex mknuthdiv
@opindex mno-knuthdiv
Make the result of a division yielding a remainder have the same sign as
the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
remainder follows the sign of the dividend.  Both methods are
arithmetically valid, the latter being almost exclusively used.

@item -mtoplevel-symbols
@itemx -mno-toplevel-symbols
@opindex mtoplevel-symbols
@opindex mno-toplevel-symbols
Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
code can be used with the @code{PREFIX} assembly directive.

@item -melf
@opindex melf
Generate an executable in the ELF format, rather than the default
@samp{mmo} format used by the @command{mmix} simulator.

@item -mbranch-predict
@itemx -mno-branch-predict
@opindex mbranch-predict
@opindex mno-branch-predict
Use (do not use) the probable-branch instructions, when static branch
prediction indicates a probable branch.

@item -mbase-addresses
@itemx -mno-base-addresses
@opindex mbase-addresses
@opindex mno-base-addresses
Generate (do not generate) code that uses @emph{base addresses}.  Using a
base address automatically generates a request (handled by the assembler
and the linker) for a constant to be set up in a global register.  The
register is used for one or more base address requests within the range 0
to 255 from the value held in the register.  The generally leads to short
and fast code, but the number of different data items that can be
addressed is limited.  This means that a program that uses lots of static
data may require @option{-mno-base-addresses}.

@item -msingle-exit
@itemx -mno-single-exit
@opindex msingle-exit
@opindex mno-single-exit
Force (do not force) generated code to have a single exit point in each
function.
@end table

@node MN10300 Options
@subsection MN10300 Options
@cindex MN10300 options

These @option{-m} options are defined for Matsushita MN10300 architectures:

@table @gcctabopt
@item -mmult-bug
@opindex mmult-bug
Generate code to avoid bugs in the multiply instructions for the MN10300
processors.  This is the default.

@item -mno-mult-bug
@opindex mno-mult-bug
Do not generate code to avoid bugs in the multiply instructions for the
MN10300 processors.

@item -mam33
@opindex mam33
Generate code using features specific to the AM33 processor.

@item -mno-am33
@opindex mno-am33
Do not generate code using features specific to the AM33 processor.  This
is the default.

@item -mam33-2
@opindex mam33-2
Generate code using features specific to the AM33/2.0 processor.

@item -mam34
@opindex mam34
Generate code using features specific to the AM34 processor.

@item -mtune=@var{cpu-type}
@opindex mtune
Use the timing characteristics of the indicated CPU type when
scheduling instructions.  This does not change the targeted processor
type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
@samp{am33-2} or @samp{am34}.

@item -mreturn-pointer-on-d0
@opindex mreturn-pointer-on-d0
When generating a function that returns a pointer, return the pointer
in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
only in @code{a0}, and attempts to call such functions without a prototype
result in errors.  Note that this option is on by default; use
@option{-mno-return-pointer-on-d0} to disable it.

@item -mno-crt0
@opindex mno-crt0
Do not link in the C run-time initialization object file.

@item -mrelax
@opindex mrelax
Indicate to the linker that it should perform a relaxation optimization pass
to shorten branches, calls and absolute memory addresses.  This option only
has an effect when used on the command line for the final link step.

This option makes symbolic debugging impossible.

@item -mliw
@opindex mliw
Allow the compiler to generate @emph{Long Instruction Word}
instructions if the target is the @samp{AM33} or later.  This is the
default.  This option defines the preprocessor macro @code{__LIW__}.

@item -mnoliw
@opindex mnoliw
Do not allow the compiler to generate @emph{Long Instruction Word}
instructions.  This option defines the preprocessor macro
@code{__NO_LIW__}.

@item -msetlb
@opindex msetlb
Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
instructions if the target is the @samp{AM33} or later.  This is the
default.  This option defines the preprocessor macro @code{__SETLB__}.

@item -mnosetlb
@opindex mnosetlb
Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
instructions.  This option defines the preprocessor macro
@code{__NO_SETLB__}.

@end table

@node Moxie Options
@subsection Moxie Options
@cindex Moxie Options

@table @gcctabopt

@item -meb
@opindex meb
Generate big-endian code.  This is the default for @samp{moxie-*-*}
configurations.

@item -mel
@opindex mel
Generate little-endian code.

@item -mmul.x
@opindex mmul.x
Generate mul.x and umul.x instructions.  This is the default for
@samp{moxiebox-*-*} configurations.

@item -mno-crt0
@opindex mno-crt0
Do not link in the C run-time initialization object file.

@end table

@node MSP430 Options
@subsection MSP430 Options
@cindex MSP430 Options

These options are defined for the MSP430:

@table @gcctabopt

@item -masm-hex
@opindex masm-hex
Force assembly output to always use hex constants.  Normally such
constants are signed decimals, but this option is available for
testsuite and/or aesthetic purposes.

@item -mmcu=
@opindex mmcu=
Select the MCU to target.  This is used to create a C preprocessor
symbol based upon the MCU name, converted to upper case and pre- and
post-fixed with @samp{__}.  This in turn is used by the
@file{msp430.h} header file to select an MCU-specific supplementary
header file.

The option also sets the ISA to use.  If the MCU name is one that is
known to only support the 430 ISA then that is selected, otherwise the
430X ISA is selected.  A generic MCU name of @samp{msp430} can also be
used to select the 430 ISA.  Similarly the generic @samp{msp430x} MCU
name selects the 430X ISA.

In addition an MCU-specific linker script is added to the linker
command line.  The script's name is the name of the MCU with
@file{.ld} appended.  Thus specifying @option{-mmcu=xxx} on the @command{gcc}
command line defines the C preprocessor symbol @code{__XXX__} and
cause the linker to search for a script called @file{xxx.ld}.

This option is also passed on to the assembler.

@item -mwarn-mcu
@itemx -mno-warn-mcu
@opindex mwarn-mcu
@opindex mno-warn-mcu
This option enables or disables warnings about conflicts between the
MCU name specified by the @option{-mmcu} option and the ISA set by the
@option{-mcpu} option and/or the hardware multiply support set by the
@option{-mhwmult} option.  It also toggles warnings about unrecognized
MCU names.  This option is on by default.

@item -mcpu=
@opindex mcpu=
Specifies the ISA to use.  Accepted values are @samp{msp430},
@samp{msp430x} and @samp{msp430xv2}.  This option is deprecated.  The
@option{-mmcu=} option should be used to select the ISA.

@item -msim
@opindex msim
Link to the simulator runtime libraries and linker script.  Overrides
any scripts that would be selected by the @option{-mmcu=} option.

@item -mlarge
@opindex mlarge
Use large-model addressing (20-bit pointers, 32-bit @code{size_t}).

@item -msmall
@opindex msmall
Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).

@item -mrelax
@opindex mrelax
This option is passed to the assembler and linker, and allows the
linker to perform certain optimizations that cannot be done until
the final link.

@item mhwmult=
@opindex mhwmult=
Describes the type of hardware multiply supported by the target.
Accepted values are @samp{none} for no hardware multiply, @samp{16bit}
for the original 16-bit-only multiply supported by early MCUs.
@samp{32bit} for the 16/32-bit multiply supported by later MCUs and
@samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
A value of @samp{auto} can also be given.  This tells GCC to deduce
the hardware multiply support based upon the MCU name provided by the
@option{-mmcu} option.  If no @option{-mmcu} option is specified or if
the MCU name is not recognized then no hardware multiply support is
assumed.  @code{auto} is the default setting.

Hardware multiplies are normally performed by calling a library
routine.  This saves space in the generated code.  When compiling at
@option{-O3} or higher however the hardware multiplier is invoked
inline.  This makes for bigger, but faster code.

The hardware multiply routines disable interrupts whilst running and
restore the previous interrupt state when they finish.  This makes
them safe to use inside interrupt handlers as well as in normal code.

@item -minrt
@opindex minrt
Enable the use of a minimum runtime environment - no static
initializers or constructors.  This is intended for memory-constrained
devices.  The compiler includes special symbols in some objects
that tell the linker and runtime which code fragments are required.

@item -mcode-region=
@itemx -mdata-region=
@opindex mcode-region
@opindex mdata-region
These options tell the compiler where to place functions and data that
do not have one of the @code{lower}, @code{upper}, @code{either} or
@code{section} attributes.  Possible values are @code{lower},
@code{upper}, @code{either} or @code{any}.  The first three behave
like the corresponding attribute.  The fourth possible value -
@code{any} - is the default.  It leaves placement entirely up to the
linker script and how it assigns the standard sections
(@code{.text}, @code{.data}, etc) to the memory regions.

@item -msilicon-errata=
@opindex msilicon-errata
This option passes on a request to assembler to enable the fixes for
the named silicon errata.

@item -msilicon-errata-warn=
@opindex msilicon-errata-warn
This option passes on a request to the assembler to enable warning
messages when a silicon errata might need to be applied.

@end table

@node NDS32 Options
@subsection NDS32 Options
@cindex NDS32 Options

These options are defined for NDS32 implementations:

@table @gcctabopt

@item -mbig-endian
@opindex mbig-endian
Generate code in big-endian mode.

@item -mlittle-endian
@opindex mlittle-endian
Generate code in little-endian mode.

@item -mreduced-regs
@opindex mreduced-regs
Use reduced-set registers for register allocation.

@item -mfull-regs
@opindex mfull-regs
Use full-set registers for register allocation.

@item -mcmov
@opindex mcmov
Generate conditional move instructions.

@item -mno-cmov
@opindex mno-cmov
Do not generate conditional move instructions.

@item -mext-perf
@opindex mperf-ext
Generate performance extension instructions.

@item -mno-ext-perf
@opindex mno-perf-ext
Do not generate performance extension instructions.

@item -mext-perf2
@opindex mperf-ext
Generate performance extension 2 instructions.

@item -mno-ext-perf2
@opindex mno-perf-ext
Do not generate performance extension 2 instructions.

@item -mext-string
@opindex mperf-ext
Generate string extension instructions.

@item -mno-ext-string
@opindex mno-perf-ext
Do not generate string extension instructions.

@item -mv3push
@opindex mv3push
Generate v3 push25/pop25 instructions.

@item -mno-v3push
@opindex mno-v3push
Do not generate v3 push25/pop25 instructions.

@item -m16-bit
@opindex m16-bit
Generate 16-bit instructions.

@item -mno-16-bit
@opindex mno-16-bit
Do not generate 16-bit instructions.

@item -misr-vector-size=@var{num}
@opindex misr-vector-size
Specify the size of each interrupt vector, which must be 4 or 16.

@item -mcache-block-size=@var{num}
@opindex mcache-block-size
Specify the size of each cache block,
which must be a power of 2 between 4 and 512.

@item -march=@var{arch}
@opindex march
Specify the name of the target architecture.

@item -mcmodel=@var{code-model}
@opindex mcmodel
Set the code model to one of
@table @asis
@item @samp{small}
All the data and read-only data segments must be within 512KB addressing space.
The text segment must be within 16MB addressing space.
@item @samp{medium}
The data segment must be within 512KB while the read-only data segment can be
within 4GB addressing space.  The text segment should be still within 16MB
addressing space.
@item @samp{large}
All the text and data segments can be within 4GB addressing space.
@end table

@item -mctor-dtor
@opindex mctor-dtor
Enable constructor/destructor feature.

@item -mrelax
@opindex mrelax
Guide linker to relax instructions.

@end table

@node Nios II Options
@subsection Nios II Options
@cindex Nios II options
@cindex Altera Nios II options

These are the options defined for the Altera Nios II processor.

@table @gcctabopt

@item -G @var{num}
@opindex G
@cindex smaller data references
Put global and static objects less than or equal to @var{num} bytes
into the small data or BSS sections instead of the normal data or BSS
sections.  The default value of @var{num} is 8.

@item -mgpopt=@var{option}
@itemx -mgpopt
@itemx -mno-gpopt
@opindex mgpopt
@opindex mno-gpopt
Generate (do not generate) GP-relative accesses.  The following 
@var{option} names are recognized:

@table @samp

@item none
Do not generate GP-relative accesses.

@item local
Generate GP-relative accesses for small data objects that are not 
external, weak, or uninitialized common symbols.  
Also use GP-relative addressing for objects that
have been explicitly placed in a small data section via a @code{section}
attribute.

@item global
As for @samp{local}, but also generate GP-relative accesses for
small data objects that are external, weak, or common.  If you use this option,
you must ensure that all parts of your program (including libraries) are
compiled with the same @option{-G} setting.

@item data
Generate GP-relative accesses for all data objects in the program.  If you
use this option, the entire data and BSS segments
of your program must fit in 64K of memory and you must use an appropriate
linker script to allocate them within the addressable range of the
global pointer.

@item all
Generate GP-relative addresses for function pointers as well as data
pointers.  If you use this option, the entire text, data, and BSS segments
of your program must fit in 64K of memory and you must use an appropriate
linker script to allocate them within the addressable range of the
global pointer.

@end table

@option{-mgpopt} is equivalent to @option{-mgpopt=local}, and
@option{-mno-gpopt} is equivalent to @option{-mgpopt=none}.

The default is @option{-mgpopt} except when @option{-fpic} or
@option{-fPIC} is specified to generate position-independent code.
Note that the Nios II ABI does not permit GP-relative accesses from
shared libraries.

You may need to specify @option{-mno-gpopt} explicitly when building
programs that include large amounts of small data, including large
GOT data sections.  In this case, the 16-bit offset for GP-relative
addressing may not be large enough to allow access to the entire 
small data section.

@item -mgprel-sec=@var{regexp}
@opindex mgprel-sec
This option specifies additional section names that can be accessed via
GP-relative addressing.  It is most useful in conjunction with 
@code{section} attributes on variable declarations 
(@pxref{Common Variable Attributes}) and a custom linker script.  
The @var{regexp} is a POSIX Extended Regular Expression.

This option does not affect the behavior of the @option{-G} option, and 
and the specified sections are in addition to the standard @code{.sdata} 
and @code{.sbss} small-data sections that are recognized by @option{-mgpopt}.

@item -mr0rel-sec=@var{regexp}
@opindex mr0rel-sec
This option specifies names of sections that can be accessed via a 
16-bit offset from @code{r0}; that is, in the low 32K or high 32K 
of the 32-bit address space.  It is most useful in conjunction with 
@code{section} attributes on variable declarations 
(@pxref{Common Variable Attributes}) and a custom linker script.  
The @var{regexp} is a POSIX Extended Regular Expression.

In contrast to the use of GP-relative addressing for small data, 
zero-based addressing is never generated by default and there are no 
conventional section names used in standard linker scripts for sections
in the low or high areas of memory.

@item -mel
@itemx -meb
@opindex mel
@opindex meb
Generate little-endian (default) or big-endian (experimental) code,
respectively.

@item -march=@var{arch}
@opindex march
This specifies the name of the target Nios II architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  Permissible names are: @samp{r1}, @samp{r2}.

The preprocessor macro @code{__nios2_arch__} is available to programs,
with value 1 or 2, indicating the targeted ISA level.

@item -mbypass-cache
@itemx -mno-bypass-cache
@opindex mno-bypass-cache
@opindex mbypass-cache
Force all load and store instructions to always bypass cache by 
using I/O variants of the instructions. The default is not to
bypass the cache.

@item -mno-cache-volatile 
@itemx -mcache-volatile       
@opindex mcache-volatile 
@opindex mno-cache-volatile
Volatile memory access bypass the cache using the I/O variants of 
the load and store instructions. The default is not to bypass the cache.

@item -mno-fast-sw-div
@itemx -mfast-sw-div
@opindex mno-fast-sw-div
@opindex mfast-sw-div
Do not use table-based fast divide for small numbers. The default 
is to use the fast divide at @option{-O3} and above.

@item -mno-hw-mul
@itemx -mhw-mul
@itemx -mno-hw-mulx
@itemx -mhw-mulx
@itemx -mno-hw-div
@itemx -mhw-div
@opindex mno-hw-mul
@opindex mhw-mul
@opindex mno-hw-mulx
@opindex mhw-mulx
@opindex mno-hw-div
@opindex mhw-div
Enable or disable emitting @code{mul}, @code{mulx} and @code{div} family of 
instructions by the compiler. The default is to emit @code{mul}
and not emit @code{div} and @code{mulx}.

@item -mbmx
@itemx -mno-bmx
@itemx -mcdx
@itemx -mno-cdx
Enable or disable generation of Nios II R2 BMX (bit manipulation) and
CDX (code density) instructions.  Enabling these instructions also
requires @option{-march=r2}.  Since these instructions are optional
extensions to the R2 architecture, the default is not to emit them.

@item -mcustom-@var{insn}=@var{N}
@itemx -mno-custom-@var{insn}
@opindex mcustom-@var{insn}
@opindex mno-custom-@var{insn}
Each @option{-mcustom-@var{insn}=@var{N}} option enables use of a
custom instruction with encoding @var{N} when generating code that uses 
@var{insn}.  For example, @option{-mcustom-fadds=253} generates custom
instruction 253 for single-precision floating-point add operations instead
of the default behavior of using a library call.

The following values of @var{insn} are supported.  Except as otherwise
noted, floating-point operations are expected to be implemented with
normal IEEE 754 semantics and correspond directly to the C operators or the
equivalent GCC built-in functions (@pxref{Other Builtins}).

Single-precision floating point:
@table @asis

@item @samp{fadds}, @samp{fsubs}, @samp{fdivs}, @samp{fmuls}
Binary arithmetic operations.

@item @samp{fnegs}
Unary negation.

@item @samp{fabss}
Unary absolute value.

@item @samp{fcmpeqs}, @samp{fcmpges}, @samp{fcmpgts}, @samp{fcmples}, @samp{fcmplts}, @samp{fcmpnes}
Comparison operations.

@item @samp{fmins}, @samp{fmaxs}
Floating-point minimum and maximum.  These instructions are only
generated if @option{-ffinite-math-only} is specified.

@item @samp{fsqrts}
Unary square root operation.

@item @samp{fcoss}, @samp{fsins}, @samp{ftans}, @samp{fatans}, @samp{fexps}, @samp{flogs}
Floating-point trigonometric and exponential functions.  These instructions
are only generated if @option{-funsafe-math-optimizations} is also specified.

@end table

Double-precision floating point:
@table @asis

@item @samp{faddd}, @samp{fsubd}, @samp{fdivd}, @samp{fmuld}
Binary arithmetic operations.

@item @samp{fnegd}
Unary negation.

@item @samp{fabsd}
Unary absolute value.

@item @samp{fcmpeqd}, @samp{fcmpged}, @samp{fcmpgtd}, @samp{fcmpled}, @samp{fcmpltd}, @samp{fcmpned}
Comparison operations.

@item @samp{fmind}, @samp{fmaxd}
Double-precision minimum and maximum.  These instructions are only
generated if @option{-ffinite-math-only} is specified.

@item @samp{fsqrtd}
Unary square root operation.

@item @samp{fcosd}, @samp{fsind}, @samp{ftand}, @samp{fatand}, @samp{fexpd}, @samp{flogd}
Double-precision trigonometric and exponential functions.  These instructions
are only generated if @option{-funsafe-math-optimizations} is also specified.

@end table

Conversions:
@table @asis
@item @samp{fextsd}
Conversion from single precision to double precision.

@item @samp{ftruncds}
Conversion from double precision to single precision.

@item @samp{fixsi}, @samp{fixsu}, @samp{fixdi}, @samp{fixdu}
Conversion from floating point to signed or unsigned integer types, with
truncation towards zero.

@item @samp{round}
Conversion from single-precision floating point to signed integer,
rounding to the nearest integer and ties away from zero.
This corresponds to the @code{__builtin_lroundf} function when
@option{-fno-math-errno} is used.

@item @samp{floatis}, @samp{floatus}, @samp{floatid}, @samp{floatud}
Conversion from signed or unsigned integer types to floating-point types.

@end table

In addition, all of the following transfer instructions for internal
registers X and Y must be provided to use any of the double-precision
floating-point instructions.  Custom instructions taking two
double-precision source operands expect the first operand in the
64-bit register X.  The other operand (or only operand of a unary
operation) is given to the custom arithmetic instruction with the
least significant half in source register @var{src1} and the most
significant half in @var{src2}.  A custom instruction that returns a
double-precision result returns the most significant 32 bits in the
destination register and the other half in 32-bit register Y.  
GCC automatically generates the necessary code sequences to write
register X and/or read register Y when double-precision floating-point
instructions are used.

@table @asis

@item @samp{fwrx}
Write @var{src1} into the least significant half of X and @var{src2} into
the most significant half of X.

@item @samp{fwry}
Write @var{src1} into Y.

@item @samp{frdxhi}, @samp{frdxlo}
Read the most or least (respectively) significant half of X and store it in
@var{dest}.

@item @samp{frdy}
Read the value of Y and store it into @var{dest}.
@end table

Note that you can gain more local control over generation of Nios II custom
instructions by using the @code{target("custom-@var{insn}=@var{N}")}
and @code{target("no-custom-@var{insn}")} function attributes
(@pxref{Function Attributes})
or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mcustom-fpu-cfg=@var{name}
@opindex mcustom-fpu-cfg

This option enables a predefined, named set of custom instruction encodings
(see @option{-mcustom-@var{insn}} above).  
Currently, the following sets are defined:

@option{-mcustom-fpu-cfg=60-1} is equivalent to:
@gccoptlist{-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-fsingle-precision-constant}

@option{-mcustom-fpu-cfg=60-2} is equivalent to:
@gccoptlist{-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-mcustom-fdivs=255 @gol
-fsingle-precision-constant}

@option{-mcustom-fpu-cfg=72-3} is equivalent to:
@gccoptlist{-mcustom-floatus=243 @gol
-mcustom-fixsi=244 @gol
-mcustom-floatis=245 @gol
-mcustom-fcmpgts=246 @gol
-mcustom-fcmples=249 @gol
-mcustom-fcmpeqs=250 @gol
-mcustom-fcmpnes=251 @gol
-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-mcustom-fdivs=255 @gol
-fsingle-precision-constant}

Custom instruction assignments given by individual
@option{-mcustom-@var{insn}=} options override those given by
@option{-mcustom-fpu-cfg=}, regardless of the
order of the options on the command line.

Note that you can gain more local control over selection of a FPU
configuration by using the @code{target("custom-fpu-cfg=@var{name}")}
function attribute (@pxref{Function Attributes})
or pragma (@pxref{Function Specific Option Pragmas}).

@end table

These additional @samp{-m} options are available for the Altera Nios II
ELF (bare-metal) target:

@table @gcctabopt

@item -mhal
@opindex mhal
Link with HAL BSP.  This suppresses linking with the GCC-provided C runtime
startup and termination code, and is typically used in conjunction with
@option{-msys-crt0=} to specify the location of the alternate startup code
provided by the HAL BSP.

@item -msmallc
@opindex msmallc
Link with a limited version of the C library, @option{-lsmallc}, rather than
Newlib.

@item -msys-crt0=@var{startfile}
@opindex msys-crt0
@var{startfile} is the file name of the startfile (crt0) to use 
when linking.  This option is only useful in conjunction with @option{-mhal}.

@item -msys-lib=@var{systemlib}
@opindex msys-lib
@var{systemlib} is the library name of the library that provides
low-level system calls required by the C library,
e.g. @code{read} and @code{write}.
This option is typically used to link with a library provided by a HAL BSP.

@end table

@node Nvidia PTX Options
@subsection Nvidia PTX Options
@cindex Nvidia PTX options
@cindex nvptx options

These options are defined for Nvidia PTX:

@table @gcctabopt

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for 32-bit or 64-bit ABI.

@item -mmainkernel
@opindex mmainkernel
Link in code for a __main kernel.  This is for stand-alone instead of
offloading execution.

@item -moptimize
@opindex moptimize
Apply partitioned execution optimizations.  This is the default when any
level of optimization is selected.

@item -msoft-stack
@opindex msoft-stack
Generate code that does not use @code{.local} memory
directly for stack storage. Instead, a per-warp stack pointer is
maintained explicitly. This enables variable-length stack allocation (with
variable-length arrays or @code{alloca}), and when global memory is used for
underlying storage, makes it possible to access automatic variables from other
threads, or with atomic instructions. This code generation variant is used
for OpenMP offloading, but the option is exposed on its own for the purpose
of testing the compiler; to generate code suitable for linking into programs
using OpenMP offloading, use option @option{-mgomp}.

@item -muniform-simt
@opindex muniform-simt
Switch to code generation variant that allows to execute all threads in each
warp, while maintaining memory state and side effects as if only one thread
in each warp was active outside of OpenMP SIMD regions.  All atomic operations
and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
current lane index equals the master lane index), and the register being
assigned is copied via a shuffle instruction from the master lane.  Outside of
SIMD regions lane 0 is the master; inside, each thread sees itself as the
master.  Shared memory array @code{int __nvptx_uni[]} stores all-zeros or
all-ones bitmasks for each warp, indicating current mode (0 outside of SIMD
regions).  Each thread can bitwise-and the bitmask at position @code{tid.y}
with current lane index to compute the master lane index.

@item -mgomp
@opindex mgomp
Generate code for use in OpenMP offloading: enables @option{-msoft-stack} and
@option{-muniform-simt} options, and selects corresponding multilib variant.

@end table

@node PDP-11 Options
@subsection PDP-11 Options
@cindex PDP-11 Options

These options are defined for the PDP-11:

@table @gcctabopt
@item -mfpu
@opindex mfpu
Use hardware FPP floating point.  This is the default.  (FIS floating
point on the PDP-11/40 is not supported.)

@item -msoft-float
@opindex msoft-float
Do not use hardware floating point.

@item -mac0
@opindex mac0
Return floating-point results in ac0 (fr0 in Unix assembler syntax).

@item -mno-ac0
@opindex mno-ac0
Return floating-point results in memory.  This is the default.

@item -m40
@opindex m40
Generate code for a PDP-11/40.

@item -m45
@opindex m45
Generate code for a PDP-11/45.  This is the default.

@item -m10
@opindex m10
Generate code for a PDP-11/10.

@item -mbcopy-builtin
@opindex mbcopy-builtin
Use inline @code{movmemhi} patterns for copying memory.  This is the
default.

@item -mbcopy
@opindex mbcopy
Do not use inline @code{movmemhi} patterns for copying memory.

@item -mint16
@itemx -mno-int32
@opindex mint16
@opindex mno-int32
Use 16-bit @code{int}.  This is the default.

@item -mint32
@itemx -mno-int16
@opindex mint32
@opindex mno-int16
Use 32-bit @code{int}.

@item -mfloat64
@itemx -mno-float32
@opindex mfloat64
@opindex mno-float32
Use 64-bit @code{float}.  This is the default.

@item -mfloat32
@itemx -mno-float64
@opindex mfloat32
@opindex mno-float64
Use 32-bit @code{float}.

@item -mabshi
@opindex mabshi
Use @code{abshi2} pattern.  This is the default.

@item -mno-abshi
@opindex mno-abshi
Do not use @code{abshi2} pattern.

@item -mbranch-expensive
@opindex mbranch-expensive
Pretend that branches are expensive.  This is for experimenting with
code generation only.

@item -mbranch-cheap
@opindex mbranch-cheap
Do not pretend that branches are expensive.  This is the default.

@item -munix-asm
@opindex munix-asm
Use Unix assembler syntax.  This is the default when configured for
@samp{pdp11-*-bsd}.

@item -mdec-asm
@opindex mdec-asm
Use DEC assembler syntax.  This is the default when configured for any
PDP-11 target other than @samp{pdp11-*-bsd}.
@end table

@node picoChip Options
@subsection picoChip Options
@cindex picoChip options

These @samp{-m} options are defined for picoChip implementations:

@table @gcctabopt

@item -mae=@var{ae_type}
@opindex mcpu
Set the instruction set, register set, and instruction scheduling
parameters for array element type @var{ae_type}.  Supported values
for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.

@option{-mae=ANY} selects a completely generic AE type.  Code
generated with this option runs on any of the other AE types.  The
code is not as efficient as it would be if compiled for a specific
AE type, and some types of operation (e.g., multiplication) do not
work properly on all types of AE.

@option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
for compiled code, and is the default.

@option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
option may suffer from poor performance of byte (char) manipulation,
since the DSP AE does not provide hardware support for byte load/stores.

@item -msymbol-as-address
Enable the compiler to directly use a symbol name as an address in a
load/store instruction, without first loading it into a
register.  Typically, the use of this option generates larger
programs, which run faster than when the option isn't used.  However, the
results vary from program to program, so it is left as a user option,
rather than being permanently enabled.

@item -mno-inefficient-warnings
Disables warnings about the generation of inefficient code.  These
warnings can be generated, for example, when compiling code that
performs byte-level memory operations on the MAC AE type.  The MAC AE has
no hardware support for byte-level memory operations, so all byte
load/stores must be synthesized from word load/store operations.  This is
inefficient and a warning is generated to indicate
that you should rewrite the code to avoid byte operations, or to target
an AE type that has the necessary hardware support.  This option disables
these warnings.

@end table

@node PowerPC Options
@subsection PowerPC Options
@cindex PowerPC options

These are listed under @xref{RS/6000 and PowerPC Options}.

@node PowerPC SPE Options
@subsection PowerPC SPE Options
@cindex PowerPC SPE options

These @samp{-m} options are defined for PowerPC SPE:
@table @gcctabopt
@item -mmfcrf
@itemx -mno-mfcrf
@itemx -mpopcntb
@itemx -mno-popcntb
@opindex mmfcrf
@opindex mno-mfcrf
@opindex mpopcntb
@opindex mno-popcntb
You use these options to specify which instructions are available on the
processor you are using.  The default value of these options is
determined when configuring GCC@.  Specifying the
@option{-mcpu=@var{cpu_type}} overrides the specification of these
options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
rather than the options listed above.

The @option{-mmfcrf} option allows GCC to generate the move from
condition register field instruction implemented on the POWER4
processor and other processors that support the PowerPC V2.01
architecture.
The @option{-mpopcntb} option allows GCC to generate the popcount and
double-precision FP reciprocal estimate instruction implemented on the
POWER5 processor and other processors that support the PowerPC V2.02
architecture.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set architecture type, register usage, and
instruction scheduling parameters for machine type @var{cpu_type}.
Supported values for @var{cpu_type} are @samp{8540}, @samp{8548},
and @samp{native}.

@option{-mcpu=powerpc} specifies pure 32-bit PowerPC (either
endian), with an appropriate, generic processor model assumed for
scheduling purposes.

Specifying @samp{native} as cpu type detects and selects the
architecture option that corresponds to the host processor of the
system performing the compilation.
@option{-mcpu=native} has no effect if GCC does not recognize the
processor.

The other options specify a specific processor.  Code generated under
those options runs best on that processor, and may not run at all on
others.

The @option{-mcpu} options automatically enable or disable the
following options:

@gccoptlist{-mhard-float  -mmfcrf  -mmultiple @gol
-mpopcntb -mpopcntd @gol
-msingle-float -mdouble-float @gol
-mfloat128}

The particular options set for any particular CPU varies between
compiler versions, depending on what setting seems to produce optimal
code for that CPU; it doesn't necessarily reflect the actual hardware's
capabilities.  If you wish to set an individual option to a particular
value, you may specify it after the @option{-mcpu} option, like
@option{-mcpu=8548}.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the architecture type or register usage,
as @option{-mcpu=@var{cpu_type}} does.  The same
values for @var{cpu_type} are used for @option{-mtune} as for
@option{-mcpu}.  If both are specified, the code generated uses the
architecture and registers set by @option{-mcpu}, but the
scheduling parameters set by @option{-mtune}.

@item -msecure-plt
@opindex msecure-plt
Generate code that allows @command{ld} and @command{ld.so}
to build executables and shared
libraries with non-executable @code{.plt} and @code{.got} sections.
This is a PowerPC
32-bit SYSV ABI option.

@item -mbss-plt
@opindex mbss-plt
Generate code that uses a BSS @code{.plt} section that @command{ld.so}
fills in, and
requires @code{.plt} and @code{.got}
sections that are both writable and executable.
This is a PowerPC 32-bit SYSV ABI option.

@item -misel
@itemx -mno-isel
@opindex misel
@opindex mno-isel
This switch enables or disables the generation of ISEL instructions.

@item -misel=@var{yes/no}
This switch has been deprecated.  Use @option{-misel} and
@option{-mno-isel} instead.

@item -mspe
@itemx -mno-spe
@opindex mspe
@opindex mno-spe
This switch enables or disables the generation of SPE simd
instructions.

@item -mspe=@var{yes/no}
This option has been deprecated.  Use @option{-mspe} and
@option{-mno-spe} instead.

@item -mfloat128
@itemx -mno-float128
@opindex mfloat128
@opindex mno-float128
Enable/disable the @var{__float128} keyword for IEEE 128-bit floating point
and use either software emulation for IEEE 128-bit floating point or
hardware instructions.

@item -mfloat-gprs=@var{yes/single/double/no}
@itemx -mfloat-gprs
@opindex mfloat-gprs
This switch enables or disables the generation of floating-point
operations on the general-purpose registers for architectures that
support it.

The argument @samp{yes} or @samp{single} enables the use of
single-precision floating-point operations.

The argument @samp{double} enables the use of single and
double-precision floating-point operations.

The argument @samp{no} disables floating-point operations on the
general-purpose registers.

This option is currently only available on the MPC854x.

@item -mfull-toc
@itemx -mno-fp-in-toc
@itemx -mno-sum-in-toc
@itemx -mminimal-toc
@opindex mfull-toc
@opindex mno-fp-in-toc
@opindex mno-sum-in-toc
@opindex mminimal-toc
Modify generation of the TOC (Table Of Contents), which is created for
every executable file.  The @option{-mfull-toc} option is selected by
default.  In that case, GCC allocates at least one TOC entry for
each unique non-automatic variable reference in your program.  GCC
also places floating-point constants in the TOC@.  However, only
16,384 entries are available in the TOC@.

If you receive a linker error message that saying you have overflowed
the available TOC space, you can reduce the amount of TOC space used
with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
@option{-mno-fp-in-toc} prevents GCC from putting floating-point
constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
generate code to calculate the sum of an address and a constant at
run time instead of putting that sum into the TOC@.  You may specify one
or both of these options.  Each causes GCC to produce very slightly
slower and larger code at the expense of conserving TOC space.

If you still run out of space in the TOC even when you specify both of
these options, specify @option{-mminimal-toc} instead.  This option causes
GCC to make only one TOC entry for every file.  When you specify this
option, GCC produces code that is slower and larger but which
uses extremely little TOC space.  You may wish to use this option
only on files that contain less frequently-executed code.

@item -maix32
@opindex maix32
Disables the 64-bit ABI.  GCC defaults to @option{-maix32}.

@item -mxl-compat
@itemx -mno-xl-compat
@opindex mxl-compat
@opindex mno-xl-compat
Produce code that conforms more closely to IBM XL compiler semantics
when using AIX-compatible ABI@.  Pass floating-point arguments to
prototyped functions beyond the register save area (RSA) on the stack
in addition to argument FPRs.  Do not assume that most significant
double in 128-bit long double value is properly rounded when comparing
values and converting to double.  Use XL symbol names for long double
support routines.

The AIX calling convention was extended but not initially documented to
handle an obscure K&R C case of calling a function that takes the
address of its arguments with fewer arguments than declared.  IBM XL
compilers access floating-point arguments that do not fit in the
RSA from the stack when a subroutine is compiled without
optimization.  Because always storing floating-point arguments on the
stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by IBM
XL compilers without optimization.

@item -malign-natural
@itemx -malign-power
@opindex malign-natural
@opindex malign-power
On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
@option{-malign-natural} overrides the ABI-defined alignment of larger
types, such as floating-point doubles, on their natural size-based boundary.
The option @option{-malign-power} instructs GCC to follow the ABI-specified
alignment rules.  GCC defaults to the standard alignment defined in the ABI@.

On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
is not supported.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Generate code that does not use (uses) the floating-point register set.
Software floating-point emulation is provided if you use the
@option{-msoft-float} option, and pass the option to GCC when linking.

@item -msingle-float
@itemx -mdouble-float
@opindex msingle-float
@opindex mdouble-float
Generate code for single- or double-precision floating-point operations.
@option{-mdouble-float} implies @option{-msingle-float}.

@item -mmultiple
@itemx -mno-multiple
@opindex mmultiple
@opindex mno-multiple
Generate code that uses (does not use) the load multiple word
instructions and the store multiple word instructions.  These
instructions are generated by default on POWER systems, and not
generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
PowerPC systems, since those instructions do not work when the
processor is in little-endian mode.  The exceptions are PPC740 and
PPC750 which permit these instructions in little-endian mode.

@item -mupdate
@itemx -mno-update
@opindex mupdate
@opindex mno-update
Generate code that uses (does not use) the load or store instructions
that update the base register to the address of the calculated memory
location.  These instructions are generated by default.  If you use
@option{-mno-update}, there is a small window between the time that the
stack pointer is updated and the address of the previous frame is
stored, which means code that walks the stack frame across interrupts or
signals may get corrupted data.

@item -mavoid-indexed-addresses
@itemx -mno-avoid-indexed-addresses
@opindex mavoid-indexed-addresses
@opindex mno-avoid-indexed-addresses
Generate code that tries to avoid (not avoid) the use of indexed load
or store instructions. These instructions can incur a performance
penalty on Power6 processors in certain situations, such as when
stepping through large arrays that cross a 16M boundary.  This option
is enabled by default when targeting Power6 and disabled otherwise.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default
if hardware floating point is used.  The machine-dependent
@option{-mfused-madd} option is now mapped to the machine-independent
@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
mapped to @option{-ffp-contract=off}.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
On System V.4 and embedded PowerPC systems do not (do) assume that
unaligned memory references are handled by the system.

@item -mrelocatable
@itemx -mno-relocatable
@opindex mrelocatable
@opindex mno-relocatable
Generate code that allows (does not allow) a static executable to be
relocated to a different address at run time.  A simple embedded
PowerPC system loader should relocate the entire contents of
@code{.got2} and 4-byte locations listed in the @code{.fixup} section,
a table of 32-bit addresses generated by this option.  For this to
work, all objects linked together must be compiled with
@option{-mrelocatable} or @option{-mrelocatable-lib}.
@option{-mrelocatable} code aligns the stack to an 8-byte boundary.

@item -mrelocatable-lib
@itemx -mno-relocatable-lib
@opindex mrelocatable-lib
@opindex mno-relocatable-lib
Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
@code{.fixup} section to allow static executables to be relocated at
run time, but @option{-mrelocatable-lib} does not use the smaller stack
alignment of @option{-mrelocatable}.  Objects compiled with
@option{-mrelocatable-lib} may be linked with objects compiled with
any combination of the @option{-mrelocatable} options.

@item -mno-toc
@itemx -mtoc
@opindex mno-toc
@opindex mtoc
On System V.4 and embedded PowerPC systems do not (do) assume that
register 2 contains a pointer to a global area pointing to the addresses
used in the program.

@item -mlittle
@itemx -mlittle-endian
@opindex mlittle
@opindex mlittle-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in little-endian mode.  The @option{-mlittle-endian} option is
the same as @option{-mlittle}.

@item -mbig
@itemx -mbig-endian
@opindex mbig
@opindex mbig-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in big-endian mode.  The @option{-mbig-endian} option is
the same as @option{-mbig}.

@item -mdynamic-no-pic
@opindex mdynamic-no-pic
On Darwin and Mac OS X systems, compile code so that it is not
relocatable, but that its external references are relocatable.  The
resulting code is suitable for applications, but not shared
libraries.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The runtime system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mprioritize-restricted-insns=@var{priority}
@opindex mprioritize-restricted-insns
This option controls the priority that is assigned to
dispatch-slot restricted instructions during the second scheduling
pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
or @samp{2} to assign no, highest, or second-highest (respectively)
priority to dispatch-slot restricted
instructions.

@item -msched-costly-dep=@var{dependence_type}
@opindex msched-costly-dep
This option controls which dependences are considered costly
by the target during instruction scheduling.  The argument
@var{dependence_type} takes one of the following values:

@table @asis
@item @samp{no}
No dependence is costly.

@item @samp{all}
All dependences are costly.

@item @samp{true_store_to_load}
A true dependence from store to load is costly.

@item @samp{store_to_load}
Any dependence from store to load is costly.

@item @var{number}
Any dependence for which the latency is greater than or equal to
@var{number} is costly.
@end table

@item -minsert-sched-nops=@var{scheme}
@opindex minsert-sched-nops
This option controls which NOP insertion scheme is used during
the second scheduling pass.  The argument @var{scheme} takes one of the
following values:

@table @asis
@item @samp{no}
Don't insert NOPs.

@item @samp{pad}
Pad with NOPs any dispatch group that has vacant issue slots,
according to the scheduler's grouping.

@item @samp{regroup_exact}
Insert NOPs to force costly dependent insns into
separate groups.  Insert exactly as many NOPs as needed to force an insn
to a new group, according to the estimated processor grouping.

@item @var{number}
Insert NOPs to force costly dependent insns into
separate groups.  Insert @var{number} NOPs to force an insn to a new group.
@end table

@item -mcall-sysv
@opindex mcall-sysv
On System V.4 and embedded PowerPC systems compile code using calling
conventions that adhere to the March 1995 draft of the System V
Application Binary Interface, PowerPC processor supplement.  This is the
default unless you configured GCC using @samp{powerpc-*-eabiaix}.

@item -mcall-sysv-eabi
@itemx -mcall-eabi
@opindex mcall-sysv-eabi
@opindex mcall-eabi
Specify both @option{-mcall-sysv} and @option{-meabi} options.

@item -mcall-sysv-noeabi
@opindex mcall-sysv-noeabi
Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.

@item -mcall-aixdesc
@opindex m
On System V.4 and embedded PowerPC systems compile code for the AIX
operating system.

@item -mcall-linux
@opindex mcall-linux
On System V.4 and embedded PowerPC systems compile code for the
Linux-based GNU system.

@item -mcall-freebsd
@opindex mcall-freebsd
On System V.4 and embedded PowerPC systems compile code for the
FreeBSD operating system.

@item -mcall-netbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
NetBSD operating system.

@item -mcall-openbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
OpenBSD operating system.

@item -maix-struct-return
@opindex maix-struct-return
Return all structures in memory (as specified by the AIX ABI)@.

@item -msvr4-struct-return
@opindex msvr4-struct-return
Return structures smaller than 8 bytes in registers (as specified by the
SVR4 ABI)@.

@item -mabi=@var{abi-type}
@opindex mabi
Extend the current ABI with a particular extension, or remove such extension.
Valid values are @samp{altivec}, @samp{no-altivec}, @samp{spe},
@samp{no-spe}, @samp{ibmlongdouble}, @samp{ieeelongdouble},
@samp{elfv1}, @samp{elfv2}@.

@item -mabi=spe
@opindex mabi=spe
Extend the current ABI with SPE ABI extensions.  This does not change
the default ABI, instead it adds the SPE ABI extensions to the current
ABI@.

@item -mabi=no-spe
@opindex mabi=no-spe
Disable Book-E SPE ABI extensions for the current ABI@.

@item -mabi=ibmlongdouble
@opindex mabi=ibmlongdouble
Change the current ABI to use IBM extended-precision long double.
This is not likely to work if your system defaults to using IEEE
extended-precision long double.  If you change the long double type
from IEEE extended-precision, the compiler will issue a warning unless
you use the @option{-Wno-psabi} option.

@item -mabi=ieeelongdouble
@opindex mabi=ieeelongdouble
Change the current ABI to use IEEE extended-precision long double.
This is not likely to work if your system defaults to using IBM
extended-precision long double.  If you change the long double type
from IBM extended-precision, the compiler will issue a warning unless
you use the @option{-Wno-psabi} option.

@item -mabi=elfv1
@opindex mabi=elfv1
Change the current ABI to use the ELFv1 ABI.
This is the default ABI for big-endian PowerPC 64-bit Linux.
Overriding the default ABI requires special system support and is
likely to fail in spectacular ways.

@item -mabi=elfv2
@opindex mabi=elfv2
Change the current ABI to use the ELFv2 ABI.
This is the default ABI for little-endian PowerPC 64-bit Linux.
Overriding the default ABI requires special system support and is
likely to fail in spectacular ways.

@item -mgnu-attribute
@itemx -mno-gnu-attribute
@opindex mgnu-attribute
@opindex mno-gnu-attribute
Emit .gnu_attribute assembly directives to set tag/value pairs in a
.gnu.attributes section that specify ABI variations in function
parameters or return values.

@item -mprototype
@itemx -mno-prototype
@opindex mprototype
@opindex mno-prototype
On System V.4 and embedded PowerPC systems assume that all calls to
variable argument functions are properly prototyped.  Otherwise, the
compiler must insert an instruction before every non-prototyped call to
set or clear bit 6 of the condition code register (@code{CR}) to
indicate whether floating-point values are passed in the floating-point
registers in case the function takes variable arguments.  With
@option{-mprototype}, only calls to prototyped variable argument functions
set or clear the bit.

@item -msim
@opindex msim
On embedded PowerPC systems, assume that the startup module is called
@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
@file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
configurations.

@item -mmvme
@opindex mmvme
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
@file{libc.a}.

@item -mads
@opindex mads
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libads.a} and
@file{libc.a}.

@item -myellowknife
@opindex myellowknife
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libyk.a} and
@file{libc.a}.

@item -mvxworks
@opindex mvxworks
On System V.4 and embedded PowerPC systems, specify that you are
compiling for a VxWorks system.

@item -memb
@opindex memb
On embedded PowerPC systems, set the @code{PPC_EMB} bit in the ELF flags
header to indicate that @samp{eabi} extended relocations are used.

@item -meabi
@itemx -mno-eabi
@opindex meabi
@opindex mno-eabi
On System V.4 and embedded PowerPC systems do (do not) adhere to the
Embedded Applications Binary Interface (EABI), which is a set of
modifications to the System V.4 specifications.  Selecting @option{-meabi}
means that the stack is aligned to an 8-byte boundary, a function
@code{__eabi} is called from @code{main} to set up the EABI
environment, and the @option{-msdata} option can use both @code{r2} and
@code{r13} to point to two separate small data areas.  Selecting
@option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
no EABI initialization function is called from @code{main}, and the
@option{-msdata} option only uses @code{r13} to point to a single
small data area.  The @option{-meabi} option is on by default if you
configured GCC using one of the @samp{powerpc*-*-eabi*} options.

@item -msdata=eabi
@opindex msdata=eabi
On System V.4 and embedded PowerPC systems, put small initialized
@code{const} global and static data in the @code{.sdata2} section, which
is pointed to by register @code{r2}.  Put small initialized
non-@code{const} global and static data in the @code{.sdata} section,
which is pointed to by register @code{r13}.  Put small uninitialized
global and static data in the @code{.sbss} section, which is adjacent to
the @code{.sdata} section.  The @option{-msdata=eabi} option is
incompatible with the @option{-mrelocatable} option.  The
@option{-msdata=eabi} option also sets the @option{-memb} option.

@item -msdata=sysv
@opindex msdata=sysv
On System V.4 and embedded PowerPC systems, put small global and static
data in the @code{.sdata} section, which is pointed to by register
@code{r13}.  Put small uninitialized global and static data in the
@code{.sbss} section, which is adjacent to the @code{.sdata} section.
The @option{-msdata=sysv} option is incompatible with the
@option{-mrelocatable} option.

@item -msdata=default
@itemx -msdata
@opindex msdata=default
@opindex msdata
On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
compile code the same as @option{-msdata=eabi}, otherwise compile code the
same as @option{-msdata=sysv}.

@item -msdata=data
@opindex msdata=data
On System V.4 and embedded PowerPC systems, put small global
data in the @code{.sdata} section.  Put small uninitialized global
data in the @code{.sbss} section.  Do not use register @code{r13}
to address small data however.  This is the default behavior unless
other @option{-msdata} options are used.

@item -msdata=none
@itemx -mno-sdata
@opindex msdata=none
@opindex mno-sdata
On embedded PowerPC systems, put all initialized global and static data
in the @code{.data} section, and all uninitialized data in the
@code{.bss} section.

@item -mblock-move-inline-limit=@var{num}
@opindex mblock-move-inline-limit
Inline all block moves (such as calls to @code{memcpy} or structure
copies) less than or equal to @var{num} bytes.  The minimum value for
@var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
targets.  The default value is target-specific.

@item -G @var{num}
@opindex G
@cindex smaller data references (PowerPC)
@cindex .sdata/.sdata2 references (PowerPC)
On embedded PowerPC systems, put global and static items less than or
equal to @var{num} bytes into the small data or BSS sections instead of
the normal data or BSS section.  By default, @var{num} is 8.  The
@option{-G @var{num}} switch is also passed to the linker.
All modules should be compiled with the same @option{-G @var{num}} value.

@item -mregnames
@itemx -mno-regnames
@opindex mregnames
@opindex mno-regnames
On System V.4 and embedded PowerPC systems do (do not) emit register
names in the assembly language output using symbolic forms.

@item -mlongcall
@itemx -mno-longcall
@opindex mlongcall
@opindex mno-longcall
By default assume that all calls are far away so that a longer and more
expensive calling sequence is required.  This is required for calls
farther than 32 megabytes (33,554,432 bytes) from the current location.
A short call is generated if the compiler knows
the call cannot be that far away.  This setting can be overridden by
the @code{shortcall} function attribute, or by @code{#pragma
longcall(0)}.

Some linkers are capable of detecting out-of-range calls and generating
glue code on the fly.  On these systems, long calls are unnecessary and
generate slower code.  As of this writing, the AIX linker can do this,
as can the GNU linker for PowerPC/64.  It is planned to add this feature
to the GNU linker for 32-bit PowerPC systems as well.

In the future, GCC may ignore all longcall specifications
when the linker is known to generate glue.

@item -mtls-markers
@itemx -mno-tls-markers
@opindex mtls-markers
@opindex mno-tls-markers
Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
specifying the function argument.  The relocation allows the linker to
reliably associate function call with argument setup instructions for
TLS optimization, which in turn allows GCC to better schedule the
sequence.

@item -mrecip
@itemx -mno-recip
@opindex mrecip
This option enables use of the reciprocal estimate and
reciprocal square root estimate instructions with additional
Newton-Raphson steps to increase precision instead of doing a divide or
square root and divide for floating-point arguments.  You should use
the @option{-ffast-math} option when using @option{-mrecip} (or at
least @option{-funsafe-math-optimizations},
@option{-ffinite-math-only}, @option{-freciprocal-math} and
@option{-fno-trapping-math}).  Note that while the throughput of the
sequence is generally higher than the throughput of the non-reciprocal
instruction, the precision of the sequence can be decreased by up to 2
ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
roots.

@item -mrecip=@var{opt}
@opindex mrecip=opt
This option controls which reciprocal estimate instructions
may be used.  @var{opt} is a comma-separated list of options, which may
be preceded by a @code{!} to invert the option:

@table @samp

@item all
Enable all estimate instructions.

@item default
Enable the default instructions, equivalent to @option{-mrecip}.

@item none
Disable all estimate instructions, equivalent to @option{-mno-recip}.

@item div
Enable the reciprocal approximation instructions for both
single and double precision.

@item divf
Enable the single-precision reciprocal approximation instructions.

@item divd
Enable the double-precision reciprocal approximation instructions.

@item rsqrt
Enable the reciprocal square root approximation instructions for both
single and double precision.

@item rsqrtf
Enable the single-precision reciprocal square root approximation instructions.

@item rsqrtd
Enable the double-precision reciprocal square root approximation instructions.

@end table

So, for example, @option{-mrecip=all,!rsqrtd} enables
all of the reciprocal estimate instructions, except for the
@code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
which handle the double-precision reciprocal square root calculations.

@item -mrecip-precision
@itemx -mno-recip-precision
@opindex mrecip-precision
Assume (do not assume) that the reciprocal estimate instructions
provide higher-precision estimates than is mandated by the PowerPC
ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
@option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
The double-precision square root estimate instructions are not generated by
default on low-precision machines, since they do not provide an
estimate that converges after three steps.

@item -mpointers-to-nested-functions
@itemx -mno-pointers-to-nested-functions
@opindex mpointers-to-nested-functions
Generate (do not generate) code to load up the static chain register
(@code{r11}) when calling through a pointer on AIX and 64-bit Linux
systems where a function pointer points to a 3-word descriptor giving
the function address, TOC value to be loaded in register @code{r2}, and
static chain value to be loaded in register @code{r11}.  The
@option{-mpointers-to-nested-functions} is on by default.  You cannot
call through pointers to nested functions or pointers
to functions compiled in other languages that use the static chain if
you use @option{-mno-pointers-to-nested-functions}.

@item -msave-toc-indirect
@itemx -mno-save-toc-indirect
@opindex msave-toc-indirect
Generate (do not generate) code to save the TOC value in the reserved
stack location in the function prologue if the function calls through
a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
saved in the prologue, it is saved just before the call through the
pointer.  The @option{-mno-save-toc-indirect} option is the default.

@item -mcompat-align-parm
@itemx -mno-compat-align-parm
@opindex mcompat-align-parm
Generate (do not generate) code to pass structure parameters with a
maximum alignment of 64 bits, for compatibility with older versions
of GCC.

Older versions of GCC (prior to 4.9.0) incorrectly did not align a
structure parameter on a 128-bit boundary when that structure contained
a member requiring 128-bit alignment.  This is corrected in more
recent versions of GCC.  This option may be used to generate code
that is compatible with functions compiled with older versions of
GCC.

The @option{-mno-compat-align-parm} option is the default.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@itemx -mstack-protector-guard-symbol=@var{symbol}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
@opindex mstack-protector-guard-symbol
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default with GNU libc version 2.4 or later).

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which register to use as base register for reading the canary, and from what
offset from that base register. The default for those is as specified in the
relevant ABI.  @option{-mstack-protector-guard-symbol=@var{symbol}} overrides
the offset with a symbol reference to a canary in the TLS block.
@end table


@node RISC-V Options
@subsection RISC-V Options
@cindex RISC-V Options

These command-line options are defined for RISC-V targets:

@table @gcctabopt
@item -mbranch-cost=@var{n}
@opindex mbranch-cost
Set the cost of branches to roughly @var{n} instructions.

@item -mplt
@itemx -mno-plt
@opindex plt
When generating PIC code, do or don't allow the use of PLTs. Ignored for
non-PIC.  The default is @option{-mplt}.

@item -mabi=@var{ABI-string}
@opindex mabi
Specify integer and floating-point calling convention.  @var{ABI-string}
contains two parts: the size of integer types and the registers used for
floating-point types.  For example @samp{-march=rv64ifd -mabi=lp64d} means that
@samp{long} and pointers are 64-bit (implicitly defining @samp{int} to be
32-bit), and that floating-point values up to 64 bits wide are passed in F
registers.  Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still
allows the compiler to generate code that uses the F and D extensions but only
allows floating-point values up to 32 bits long to be passed in registers; or
@samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments will be
passed in registers.

The default for this argument is system dependent, users who want a specific
calling convention should specify one explicitly.  The valid calling
conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64},
@samp{lp64f}, and @samp{lp64d}.  Some calling conventions are impossible to
implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is
invalid because the ABI requires 64-bit values be passed in F registers, but F
registers are only 32 bits wide.

@item -mfdiv
@itemx -mno-fdiv
@opindex mfdiv
Do or don't use hardware floating-point divide and square root instructions.
This requires the F or D extensions for floating-point registers.  The default
is to use them if the specified architecture has these instructions.

@item -mdiv
@itemx -mno-div
@opindex mdiv
Do or don't use hardware instructions for integer division.  This requires the
M extension.  The default is to use them if the specified architecture has
these instructions.

@item -march=@var{ISA-string}
@opindex march
Generate code for given RISC-V ISA (e.g.@ @samp{rv64im}).  ISA strings must be
lower-case.  Examples include @samp{rv64i}, @samp{rv32g}, and @samp{rv32imaf}.

@item -mtune=@var{processor-string}
@opindex mtune
Optimize the output for the given processor, specified by microarchitecture
name.

@item -mpreferred-stack-boundary=@var{num}
@opindex mpreferred-stack-boundary
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128-bits).

@strong{Warning:} If you use this switch, then you must build all modules with
the same value, including any libraries.  This includes the system libraries
and startup modules.

@item -msmall-data-limit=@var{n}
@opindex msmall-data-limit
Put global and static data smaller than @var{n} bytes into a special section
(on some targets).

@item -msave-restore
@itemx -mno-save-restore
@opindex msave-restore
Do or don't use smaller but slower prologue and epilogue code that uses
library function calls.  The default is to use fast inline prologues and
epilogues.

@item -mstrict-align
@itemx -mno-strict-align
@opindex mstrict-align
Do not or do generate unaligned memory accesses.  The default is set depending
on whether the processor we are optimizing for supports fast unaligned access
or not.

@item -mcmodel=medlow
@opindex mcmodel=medlow
Generate code for the medium-low code model. The program and its statically
defined symbols must lie within a single 2 GiB address range and must lie
between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be
statically or dynamically linked. This is the default code model.

@item -mcmodel=medany
@opindex mcmodel=medany
Generate code for the medium-any code model. The program and its statically
defined symbols must be within any single 2 GiB address range. Programs can be
statically or dynamically linked.

@item -mexplicit-relocs
@itemx -mno-exlicit-relocs
Use or do not use assembler relocation operators when dealing with symbolic
addresses.  The alternative is to use assembler macros instead, which may
limit optimization.

@item -mrelax
@itemx -mno-relax
Take advantage of linker relaxations to reduce the number of instructions
required to materialize symbol addresses. The default is to take advantage of
linker relaxations.

@end table

@node RL78 Options
@subsection RL78 Options
@cindex RL78 Options

@table @gcctabopt

@item -msim
@opindex msim
Links in additional target libraries to support operation within a
simulator.

@item -mmul=none
@itemx -mmul=g10
@itemx -mmul=g13
@itemx -mmul=g14
@itemx -mmul=rl78
@opindex mmul
Specifies the type of hardware multiplication and division support to
be used.  The simplest is @code{none}, which uses software for both
multiplication and division.  This is the default.  The @code{g13}
value is for the hardware multiply/divide peripheral found on the
RL78/G13 (S2 core) targets.  The @code{g14} value selects the use of
the multiplication and division instructions supported by the RL78/G14
(S3 core) parts.  The value @code{rl78} is an alias for @code{g14} and
the value @code{mg10} is an alias for @code{none}.

In addition a C preprocessor macro is defined, based upon the setting
of this option.  Possible values are: @code{__RL78_MUL_NONE__},
@code{__RL78_MUL_G13__} or @code{__RL78_MUL_G14__}.

@item -mcpu=g10
@itemx -mcpu=g13
@itemx -mcpu=g14
@itemx -mcpu=rl78
@opindex mcpu
Specifies the RL78 core to target.  The default is the G14 core, also
known as an S3 core or just RL78.  The G13 or S2 core does not have
multiply or divide instructions, instead it uses a hardware peripheral
for these operations.  The G10 or S1 core does not have register
banks, so it uses a different calling convention.

If this option is set it also selects the type of hardware multiply
support to use, unless this is overridden by an explicit
@option{-mmul=none} option on the command line.  Thus specifying
@option{-mcpu=g13} enables the use of the G13 hardware multiply
peripheral and specifying @option{-mcpu=g10} disables the use of
hardware multiplications altogether.

Note, although the RL78/G14 core is the default target, specifying
@option{-mcpu=g14} or @option{-mcpu=rl78} on the command line does
change the behavior of the toolchain since it also enables G14
hardware multiply support.  If these options are not specified on the
command line then software multiplication routines will be used even
though the code targets the RL78 core.  This is for backwards
compatibility with older toolchains which did not have hardware
multiply and divide support.

In addition a C preprocessor macro is defined, based upon the setting
of this option.  Possible values are: @code{__RL78_G10__},
@code{__RL78_G13__} or @code{__RL78_G14__}.

@item -mg10
@itemx -mg13
@itemx -mg14
@itemx -mrl78
@opindex mg10
@opindex mg13
@opindex mg14
@opindex mrl78
These are aliases for the corresponding @option{-mcpu=} option.  They
are provided for backwards compatibility.

@item -mallregs
@opindex mallregs
Allow the compiler to use all of the available registers.  By default
registers @code{r24..r31} are reserved for use in interrupt handlers.
With this option enabled these registers can be used in ordinary
functions as well.

@item -m64bit-doubles
@itemx -m32bit-doubles
@opindex m64bit-doubles
@opindex m32bit-doubles
Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
or 32 bits (@option{-m32bit-doubles}) in size.  The default is
@option{-m32bit-doubles}.

@item -msave-mduc-in-interrupts
@itemx -mno-save-mduc-in-interrupts
@opindex msave-mduc-in-interrupts
@opindex mno-save-mduc-in-interrupts
Specifies that interrupt handler functions should preserve the
MDUC registers.  This is only necessary if normal code might use
the MDUC registers, for example because it performs multiplication
and division operations.  The default is to ignore the MDUC registers
as this makes the interrupt handlers faster.  The target option -mg13
needs to be passed for this to work as this feature is only available
on the G13 target (S2 core).  The MDUC registers will only be saved
if the interrupt handler performs a multiplication or division
operation or it calls another function.

@end table

@node RS/6000 and PowerPC Options
@subsection IBM RS/6000 and PowerPC Options
@cindex RS/6000 and PowerPC Options
@cindex IBM RS/6000 and PowerPC Options

These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
@table @gcctabopt
@item -mpowerpc-gpopt
@itemx -mno-powerpc-gpopt
@itemx -mpowerpc-gfxopt
@itemx -mno-powerpc-gfxopt
@need 800
@itemx -mpowerpc64
@itemx -mno-powerpc64
@itemx -mmfcrf
@itemx -mno-mfcrf
@itemx -mpopcntb
@itemx -mno-popcntb
@itemx -mpopcntd
@itemx -mno-popcntd
@itemx -mfprnd
@itemx -mno-fprnd
@need 800
@itemx -mcmpb
@itemx -mno-cmpb
@itemx -mmfpgpr
@itemx -mno-mfpgpr
@itemx -mhard-dfp
@itemx -mno-hard-dfp
@opindex mpowerpc-gpopt
@opindex mno-powerpc-gpopt
@opindex mpowerpc-gfxopt
@opindex mno-powerpc-gfxopt
@opindex mpowerpc64
@opindex mno-powerpc64
@opindex mmfcrf
@opindex mno-mfcrf
@opindex mpopcntb
@opindex mno-popcntb
@opindex mpopcntd
@opindex mno-popcntd
@opindex mfprnd
@opindex mno-fprnd
@opindex mcmpb
@opindex mno-cmpb
@opindex mmfpgpr
@opindex mno-mfpgpr
@opindex mhard-dfp
@opindex mno-hard-dfp
You use these options to specify which instructions are available on the
processor you are using.  The default value of these options is
determined when configuring GCC@.  Specifying the
@option{-mcpu=@var{cpu_type}} overrides the specification of these
options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
rather than the options listed above.

Specifying @option{-mpowerpc-gpopt} allows
GCC to use the optional PowerPC architecture instructions in the
General Purpose group, including floating-point square root.  Specifying
@option{-mpowerpc-gfxopt} allows GCC to
use the optional PowerPC architecture instructions in the Graphics
group, including floating-point select.

The @option{-mmfcrf} option allows GCC to generate the move from
condition register field instruction implemented on the POWER4
processor and other processors that support the PowerPC V2.01
architecture.
The @option{-mpopcntb} option allows GCC to generate the popcount and
double-precision FP reciprocal estimate instruction implemented on the
POWER5 processor and other processors that support the PowerPC V2.02
architecture.
The @option{-mpopcntd} option allows GCC to generate the popcount
instruction implemented on the POWER7 processor and other processors
that support the PowerPC V2.06 architecture.
The @option{-mfprnd} option allows GCC to generate the FP round to
integer instructions implemented on the POWER5+ processor and other
processors that support the PowerPC V2.03 architecture.
The @option{-mcmpb} option allows GCC to generate the compare bytes
instruction implemented on the POWER6 processor and other processors
that support the PowerPC V2.05 architecture.
The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
general-purpose register instructions implemented on the POWER6X
processor and other processors that support the extended PowerPC V2.05
architecture.
The @option{-mhard-dfp} option allows GCC to generate the decimal
floating-point instructions implemented on some POWER processors.

The @option{-mpowerpc64} option allows GCC to generate the additional
64-bit instructions that are found in the full PowerPC64 architecture
and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
@option{-mno-powerpc64}.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set architecture type, register usage, and
instruction scheduling parameters for machine type @var{cpu_type}.
Supported values for @var{cpu_type} are @samp{401}, @samp{403},
@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
@samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
@samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
@samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
@samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
@samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
@samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8},
@samp{power9}, @samp{powerpc}, @samp{powerpc64}, @samp{powerpc64le},
@samp{rs64}, and @samp{native}.

@option{-mcpu=powerpc}, @option{-mcpu=powerpc64}, and
@option{-mcpu=powerpc64le} specify pure 32-bit PowerPC (either
endian), 64-bit big endian PowerPC and 64-bit little endian PowerPC
architecture machine types, with an appropriate, generic processor
model assumed for scheduling purposes.

Specifying @samp{native} as cpu type detects and selects the
architecture option that corresponds to the host processor of the
system performing the compilation.
@option{-mcpu=native} has no effect if GCC does not recognize the
processor.

The other options specify a specific processor.  Code generated under
those options runs best on that processor, and may not run at all on
others.

The @option{-mcpu} options automatically enable or disable the
following options:

@gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
-mpopcntb -mpopcntd  -mpowerpc64 @gol
-mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
-msimple-fpu  -mmulhw  -mdlmzb  -mmfpgpr -mvsx @gol
-mcrypto -mhtm -mpower8-fusion -mpower8-vector @gol
-mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware}

The particular options set for any particular CPU varies between
compiler versions, depending on what setting seems to produce optimal
code for that CPU; it doesn't necessarily reflect the actual hardware's
capabilities.  If you wish to set an individual option to a particular
value, you may specify it after the @option{-mcpu} option, like
@option{-mcpu=970 -mno-altivec}.

On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
not enabled or disabled by the @option{-mcpu} option at present because
AIX does not have full support for these options.  You may still
enable or disable them individually if you're sure it'll work in your
environment.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the architecture type or register usage,
as @option{-mcpu=@var{cpu_type}} does.  The same
values for @var{cpu_type} are used for @option{-mtune} as for
@option{-mcpu}.  If both are specified, the code generated uses the
architecture and registers set by @option{-mcpu}, but the
scheduling parameters set by @option{-mtune}.

@item -mcmodel=small
@opindex mcmodel=small
Generate PowerPC64 code for the small model: The TOC is limited to
64k.

@item -mcmodel=medium
@opindex mcmodel=medium
Generate PowerPC64 code for the medium model: The TOC and other static
data may be up to a total of 4G in size.  This is the default for 64-bit
Linux.

@item -mcmodel=large
@opindex mcmodel=large
Generate PowerPC64 code for the large model: The TOC may be up to 4G
in size.  Other data and code is only limited by the 64-bit address
space.

@item -maltivec
@itemx -mno-altivec
@opindex maltivec
@opindex mno-altivec
Generate code that uses (does not use) AltiVec instructions, and also
enable the use of built-in functions that allow more direct access to
the AltiVec instruction set.  You may also need to set
@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
enhancements.

When @option{-maltivec} is used, rather than @option{-maltivec=le} or
@option{-maltivec=be}, the element order for AltiVec intrinsics such
as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} 
match array element order corresponding to the endianness of the
target.  That is, element zero identifies the leftmost element in a
vector register when targeting a big-endian platform, and identifies
the rightmost element in a vector register when targeting a
little-endian platform.

@item -maltivec=be
@opindex maltivec=be
Generate AltiVec instructions using big-endian element order,
regardless of whether the target is big- or little-endian.  This is
the default when targeting a big-endian platform.  Using this option
is currently deprecated.  Support for this feature will be removed in
GCC 9.

The element order is used to interpret element numbers in AltiVec
intrinsics such as @code{vec_splat}, @code{vec_extract}, and
@code{vec_insert}.  By default, these match array element order
corresponding to the endianness for the target.

@item -maltivec=le
@opindex maltivec=le
Generate AltiVec instructions using little-endian element order,
regardless of whether the target is big- or little-endian.  This is
the default when targeting a little-endian platform.  This option is
currently ignored when targeting a big-endian platform.

The element order is used to interpret element numbers in AltiVec
intrinsics such as @code{vec_splat}, @code{vec_extract}, and
@code{vec_insert}.  By default, these match array element order
corresponding to the endianness for the target.

@item -mvrsave
@itemx -mno-vrsave
@opindex mvrsave
@opindex mno-vrsave
Generate VRSAVE instructions when generating AltiVec code.

@item -msecure-plt
@opindex msecure-plt
Generate code that allows @command{ld} and @command{ld.so}
to build executables and shared
libraries with non-executable @code{.plt} and @code{.got} sections.
This is a PowerPC
32-bit SYSV ABI option.

@item -mbss-plt
@opindex mbss-plt
Generate code that uses a BSS @code{.plt} section that @command{ld.so}
fills in, and
requires @code{.plt} and @code{.got}
sections that are both writable and executable.
This is a PowerPC 32-bit SYSV ABI option.

@item -misel
@itemx -mno-isel
@opindex misel
@opindex mno-isel
This switch enables or disables the generation of ISEL instructions.

@item -misel=@var{yes/no}
This switch has been deprecated.  Use @option{-misel} and
@option{-mno-isel} instead.

@item -mpaired
@itemx -mno-paired
@opindex mpaired
@opindex mno-paired
This switch enables or disables the generation of PAIRED simd
instructions.

@item -mvsx
@itemx -mno-vsx
@opindex mvsx
@opindex mno-vsx
Generate code that uses (does not use) vector/scalar (VSX)
instructions, and also enable the use of built-in functions that allow
more direct access to the VSX instruction set.

@item -mcrypto
@itemx -mno-crypto
@opindex mcrypto
@opindex mno-crypto
Enable the use (disable) of the built-in functions that allow direct
access to the cryptographic instructions that were added in version
2.07 of the PowerPC ISA.

@item -mhtm
@itemx -mno-htm
@opindex mhtm
@opindex mno-htm
Enable (disable) the use of the built-in functions that allow direct
access to the Hardware Transactional Memory (HTM) instructions that
were added in version 2.07 of the PowerPC ISA.

@item -mpower8-fusion
@itemx -mno-power8-fusion
@opindex mpower8-fusion
@opindex mno-power8-fusion
Generate code that keeps (does not keeps) some integer operations
adjacent so that the instructions can be fused together on power8 and
later processors.

@item -mpower8-vector
@itemx -mno-power8-vector
@opindex mpower8-vector
@opindex mno-power8-vector
Generate code that uses (does not use) the vector and scalar
instructions that were added in version 2.07 of the PowerPC ISA.  Also
enable the use of built-in functions that allow more direct access to
the vector instructions.

@item -mquad-memory
@itemx -mno-quad-memory
@opindex mquad-memory
@opindex mno-quad-memory
Generate code that uses (does not use) the non-atomic quad word memory
instructions.  The @option{-mquad-memory} option requires use of
64-bit mode.

@item -mquad-memory-atomic
@itemx -mno-quad-memory-atomic
@opindex mquad-memory-atomic
@opindex mno-quad-memory-atomic
Generate code that uses (does not use) the atomic quad word memory
instructions.  The @option{-mquad-memory-atomic} option requires use of
64-bit mode.

@item -mfloat128
@itemx -mno-float128
@opindex mfloat128
@opindex mno-float128
Enable/disable the @var{__float128} keyword for IEEE 128-bit floating point
and use either software emulation for IEEE 128-bit floating point or
hardware instructions.

The VSX instruction set (@option{-mvsx}, @option{-mcpu=power7},
@option{-mcpu=power8}), or @option{-mcpu=power9} must be enabled to
use the IEEE 128-bit floating point support.  The IEEE 128-bit
floating point support only works on PowerPC Linux systems.

The default for @option{-mfloat128} is enabled on PowerPC Linux
systems using the VSX instruction set, and disabled on other systems.

If you use the ISA 3.0 instruction set (@option{-mpower9-vector} or
@option{-mcpu=power9}) on a 64-bit system, the IEEE 128-bit floating
point support will also enable the generation of ISA 3.0 IEEE 128-bit
floating point instructions.  Otherwise, if you do not specify to
generate ISA 3.0 instructions or you are targeting a 32-bit big endian
system, IEEE 128-bit floating point will be done with software
emulation.

@item -mfloat128-hardware
@itemx -mno-float128-hardware
@opindex mfloat128-hardware
@opindex mno-float128-hardware
Enable/disable using ISA 3.0 hardware instructions to support the
@var{__float128} data type.

The default for @option{-mfloat128-hardware} is enabled on PowerPC
Linux systems using the ISA 3.0 instruction set, and disabled on other
systems.

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for 32-bit or 64-bit environments of Darwin and SVR4
targets (including GNU/Linux).  The 32-bit environment sets int, long
and pointer to 32 bits and generates code that runs on any PowerPC
variant.  The 64-bit environment sets int to 32 bits and long and
pointer to 64 bits, and generates code for PowerPC64, as for
@option{-mpowerpc64}.

@item -mfull-toc
@itemx -mno-fp-in-toc
@itemx -mno-sum-in-toc
@itemx -mminimal-toc
@opindex mfull-toc
@opindex mno-fp-in-toc
@opindex mno-sum-in-toc
@opindex mminimal-toc
Modify generation of the TOC (Table Of Contents), which is created for
every executable file.  The @option{-mfull-toc} option is selected by
default.  In that case, GCC allocates at least one TOC entry for
each unique non-automatic variable reference in your program.  GCC
also places floating-point constants in the TOC@.  However, only
16,384 entries are available in the TOC@.

If you receive a linker error message that saying you have overflowed
the available TOC space, you can reduce the amount of TOC space used
with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
@option{-mno-fp-in-toc} prevents GCC from putting floating-point
constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
generate code to calculate the sum of an address and a constant at
run time instead of putting that sum into the TOC@.  You may specify one
or both of these options.  Each causes GCC to produce very slightly
slower and larger code at the expense of conserving TOC space.

If you still run out of space in the TOC even when you specify both of
these options, specify @option{-mminimal-toc} instead.  This option causes
GCC to make only one TOC entry for every file.  When you specify this
option, GCC produces code that is slower and larger but which
uses extremely little TOC space.  You may wish to use this option
only on files that contain less frequently-executed code.

@item -maix64
@itemx -maix32
@opindex maix64
@opindex maix32
Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
@code{long} type, and the infrastructure needed to support them.
Specifying @option{-maix64} implies @option{-mpowerpc64},
while @option{-maix32} disables the 64-bit ABI and
implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.

@item -mxl-compat
@itemx -mno-xl-compat
@opindex mxl-compat
@opindex mno-xl-compat
Produce code that conforms more closely to IBM XL compiler semantics
when using AIX-compatible ABI@.  Pass floating-point arguments to
prototyped functions beyond the register save area (RSA) on the stack
in addition to argument FPRs.  Do not assume that most significant
double in 128-bit long double value is properly rounded when comparing
values and converting to double.  Use XL symbol names for long double
support routines.

The AIX calling convention was extended but not initially documented to
handle an obscure K&R C case of calling a function that takes the
address of its arguments with fewer arguments than declared.  IBM XL
compilers access floating-point arguments that do not fit in the
RSA from the stack when a subroutine is compiled without
optimization.  Because always storing floating-point arguments on the
stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by IBM
XL compilers without optimization.

@item -mpe
@opindex mpe
Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
application written to use message passing with special startup code to
enable the application to run.  The system must have PE installed in the
standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
must be overridden with the @option{-specs=} option to specify the
appropriate directory location.  The Parallel Environment does not
support threads, so the @option{-mpe} option and the @option{-pthread}
option are incompatible.

@item -malign-natural
@itemx -malign-power
@opindex malign-natural
@opindex malign-power
On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
@option{-malign-natural} overrides the ABI-defined alignment of larger
types, such as floating-point doubles, on their natural size-based boundary.
The option @option{-malign-power} instructs GCC to follow the ABI-specified
alignment rules.  GCC defaults to the standard alignment defined in the ABI@.

On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
is not supported.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Generate code that does not use (uses) the floating-point register set.
Software floating-point emulation is provided if you use the
@option{-msoft-float} option, and pass the option to GCC when linking.

@item -msingle-float
@itemx -mdouble-float
@opindex msingle-float
@opindex mdouble-float
Generate code for single- or double-precision floating-point operations.
@option{-mdouble-float} implies @option{-msingle-float}.

@item -msimple-fpu
@opindex msimple-fpu
Do not generate @code{sqrt} and @code{div} instructions for hardware
floating-point unit.

@item -mfpu=@var{name}
@opindex mfpu
Specify type of floating-point unit.  Valid values for @var{name} are
@samp{sp_lite} (equivalent to @option{-msingle-float -msimple-fpu}),
@samp{dp_lite} (equivalent to @option{-mdouble-float -msimple-fpu}),
@samp{sp_full} (equivalent to @option{-msingle-float}),
and @samp{dp_full} (equivalent to @option{-mdouble-float}).

@item -mxilinx-fpu
@opindex mxilinx-fpu
Perform optimizations for the floating-point unit on Xilinx PPC 405/440.

@item -mmultiple
@itemx -mno-multiple
@opindex mmultiple
@opindex mno-multiple
Generate code that uses (does not use) the load multiple word
instructions and the store multiple word instructions.  These
instructions are generated by default on POWER systems, and not
generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
PowerPC systems, since those instructions do not work when the
processor is in little-endian mode.  The exceptions are PPC740 and
PPC750 which permit these instructions in little-endian mode.

@item -mupdate
@itemx -mno-update
@opindex mupdate
@opindex mno-update
Generate code that uses (does not use) the load or store instructions
that update the base register to the address of the calculated memory
location.  These instructions are generated by default.  If you use
@option{-mno-update}, there is a small window between the time that the
stack pointer is updated and the address of the previous frame is
stored, which means code that walks the stack frame across interrupts or
signals may get corrupted data.

@item -mavoid-indexed-addresses
@itemx -mno-avoid-indexed-addresses
@opindex mavoid-indexed-addresses
@opindex mno-avoid-indexed-addresses
Generate code that tries to avoid (not avoid) the use of indexed load
or store instructions. These instructions can incur a performance
penalty on Power6 processors in certain situations, such as when
stepping through large arrays that cross a 16M boundary.  This option
is enabled by default when targeting Power6 and disabled otherwise.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default
if hardware floating point is used.  The machine-dependent
@option{-mfused-madd} option is now mapped to the machine-independent
@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
mapped to @option{-ffp-contract=off}.

@item -mmulhw
@itemx -mno-mulhw
@opindex mmulhw
@opindex mno-mulhw
Generate code that uses (does not use) the half-word multiply and
multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
These instructions are generated by default when targeting those
processors.

@item -mdlmzb
@itemx -mno-dlmzb
@opindex mdlmzb
@opindex mno-dlmzb
Generate code that uses (does not use) the string-search @samp{dlmzb}
instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
generated by default when targeting those processors.

@item -mno-bit-align
@itemx -mbit-align
@opindex mno-bit-align
@opindex mbit-align
On System V.4 and embedded PowerPC systems do not (do) force structures
and unions that contain bit-fields to be aligned to the base type of the
bit-field.

For example, by default a structure containing nothing but 8
@code{unsigned} bit-fields of length 1 is aligned to a 4-byte
boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
the structure is aligned to a 1-byte boundary and is 1 byte in
size.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
On System V.4 and embedded PowerPC systems do not (do) assume that
unaligned memory references are handled by the system.

@item -mrelocatable
@itemx -mno-relocatable
@opindex mrelocatable
@opindex mno-relocatable
Generate code that allows (does not allow) a static executable to be
relocated to a different address at run time.  A simple embedded
PowerPC system loader should relocate the entire contents of
@code{.got2} and 4-byte locations listed in the @code{.fixup} section,
a table of 32-bit addresses generated by this option.  For this to
work, all objects linked together must be compiled with
@option{-mrelocatable} or @option{-mrelocatable-lib}.
@option{-mrelocatable} code aligns the stack to an 8-byte boundary.

@item -mrelocatable-lib
@itemx -mno-relocatable-lib
@opindex mrelocatable-lib
@opindex mno-relocatable-lib
Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
@code{.fixup} section to allow static executables to be relocated at
run time, but @option{-mrelocatable-lib} does not use the smaller stack
alignment of @option{-mrelocatable}.  Objects compiled with
@option{-mrelocatable-lib} may be linked with objects compiled with
any combination of the @option{-mrelocatable} options.

@item -mno-toc
@itemx -mtoc
@opindex mno-toc
@opindex mtoc
On System V.4 and embedded PowerPC systems do not (do) assume that
register 2 contains a pointer to a global area pointing to the addresses
used in the program.

@item -mlittle
@itemx -mlittle-endian
@opindex mlittle
@opindex mlittle-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in little-endian mode.  The @option{-mlittle-endian} option is
the same as @option{-mlittle}.

@item -mbig
@itemx -mbig-endian
@opindex mbig
@opindex mbig-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in big-endian mode.  The @option{-mbig-endian} option is
the same as @option{-mbig}.

@item -mdynamic-no-pic
@opindex mdynamic-no-pic
On Darwin and Mac OS X systems, compile code so that it is not
relocatable, but that its external references are relocatable.  The
resulting code is suitable for applications, but not shared
libraries.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The runtime system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mprioritize-restricted-insns=@var{priority}
@opindex mprioritize-restricted-insns
This option controls the priority that is assigned to
dispatch-slot restricted instructions during the second scheduling
pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
or @samp{2} to assign no, highest, or second-highest (respectively) 
priority to dispatch-slot restricted
instructions.

@item -msched-costly-dep=@var{dependence_type}
@opindex msched-costly-dep
This option controls which dependences are considered costly
by the target during instruction scheduling.  The argument
@var{dependence_type} takes one of the following values:

@table @asis
@item @samp{no}
No dependence is costly.

@item @samp{all}
All dependences are costly.

@item @samp{true_store_to_load}
A true dependence from store to load is costly.

@item @samp{store_to_load}
Any dependence from store to load is costly.

@item @var{number}
Any dependence for which the latency is greater than or equal to 
@var{number} is costly.
@end table

@item -minsert-sched-nops=@var{scheme}
@opindex minsert-sched-nops
This option controls which NOP insertion scheme is used during
the second scheduling pass.  The argument @var{scheme} takes one of the
following values:

@table @asis
@item @samp{no}
Don't insert NOPs.

@item @samp{pad}
Pad with NOPs any dispatch group that has vacant issue slots,
according to the scheduler's grouping.

@item @samp{regroup_exact}
Insert NOPs to force costly dependent insns into
separate groups.  Insert exactly as many NOPs as needed to force an insn
to a new group, according to the estimated processor grouping.

@item @var{number}
Insert NOPs to force costly dependent insns into
separate groups.  Insert @var{number} NOPs to force an insn to a new group.
@end table

@item -mcall-sysv
@opindex mcall-sysv
On System V.4 and embedded PowerPC systems compile code using calling
conventions that adhere to the March 1995 draft of the System V
Application Binary Interface, PowerPC processor supplement.  This is the
default unless you configured GCC using @samp{powerpc-*-eabiaix}.

@item -mcall-sysv-eabi
@itemx -mcall-eabi
@opindex mcall-sysv-eabi
@opindex mcall-eabi
Specify both @option{-mcall-sysv} and @option{-meabi} options.

@item -mcall-sysv-noeabi
@opindex mcall-sysv-noeabi
Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.

@item -mcall-aixdesc
@opindex m
On System V.4 and embedded PowerPC systems compile code for the AIX
operating system.

@item -mcall-linux
@opindex mcall-linux
On System V.4 and embedded PowerPC systems compile code for the
Linux-based GNU system.

@item -mcall-freebsd
@opindex mcall-freebsd
On System V.4 and embedded PowerPC systems compile code for the
FreeBSD operating system.

@item -mcall-netbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
NetBSD operating system.

@item -mcall-openbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
OpenBSD operating system.

@item -mtraceback=@var{traceback_type}
@opindex mtraceback
Select the type of traceback table. Valid values for @var{traceback_type}
are @samp{full}, @samp{part}, and @samp{no}.

@item -maix-struct-return
@opindex maix-struct-return
Return all structures in memory (as specified by the AIX ABI)@.

@item -msvr4-struct-return
@opindex msvr4-struct-return
Return structures smaller than 8 bytes in registers (as specified by the
SVR4 ABI)@.

@item -mabi=@var{abi-type}
@opindex mabi
Extend the current ABI with a particular extension, or remove such extension.
Valid values are @samp{altivec}, @samp{no-altivec}, @samp{spe},
@samp{no-spe}, @samp{ibmlongdouble}, @samp{ieeelongdouble},
@samp{elfv1}, @samp{elfv2}@.

@item -mabi=ibmlongdouble
@opindex mabi=ibmlongdouble
Change the current ABI to use IBM extended-precision long double.
This is not likely to work if your system defaults to using IEEE
extended-precision long double.  If you change the long double type
from IEEE extended-precision, the compiler will issue a warning unless
you use the @option{-Wno-psabi} option.

@item -mabi=ieeelongdouble
@opindex mabi=ieeelongdouble
Change the current ABI to use IEEE extended-precision long double.
This is not likely to work if your system defaults to using IBM
extended-precision long double.  If you change the long double type
from IBM extended-precision, the compiler will issue a warning unless
you use the @option{-Wno-psabi} option.

@item -mabi=elfv1
@opindex mabi=elfv1
Change the current ABI to use the ELFv1 ABI.
This is the default ABI for big-endian PowerPC 64-bit Linux.
Overriding the default ABI requires special system support and is
likely to fail in spectacular ways.

@item -mabi=elfv2
@opindex mabi=elfv2
Change the current ABI to use the ELFv2 ABI.
This is the default ABI for little-endian PowerPC 64-bit Linux.
Overriding the default ABI requires special system support and is
likely to fail in spectacular ways.

@item -mgnu-attribute
@itemx -mno-gnu-attribute
@opindex mgnu-attribute
@opindex mno-gnu-attribute
Emit .gnu_attribute assembly directives to set tag/value pairs in a
.gnu.attributes section that specify ABI variations in function
parameters or return values.

@item -mprototype
@itemx -mno-prototype
@opindex mprototype
@opindex mno-prototype
On System V.4 and embedded PowerPC systems assume that all calls to
variable argument functions are properly prototyped.  Otherwise, the
compiler must insert an instruction before every non-prototyped call to
set or clear bit 6 of the condition code register (@code{CR}) to
indicate whether floating-point values are passed in the floating-point
registers in case the function takes variable arguments.  With
@option{-mprototype}, only calls to prototyped variable argument functions
set or clear the bit.

@item -msim
@opindex msim
On embedded PowerPC systems, assume that the startup module is called
@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
@file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
configurations.

@item -mmvme
@opindex mmvme
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
@file{libc.a}.

@item -mads
@opindex mads
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libads.a} and
@file{libc.a}.

@item -myellowknife
@opindex myellowknife
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libyk.a} and
@file{libc.a}.

@item -mvxworks
@opindex mvxworks
On System V.4 and embedded PowerPC systems, specify that you are
compiling for a VxWorks system.

@item -memb
@opindex memb
On embedded PowerPC systems, set the @code{PPC_EMB} bit in the ELF flags
header to indicate that @samp{eabi} extended relocations are used.

@item -meabi
@itemx -mno-eabi
@opindex meabi
@opindex mno-eabi
On System V.4 and embedded PowerPC systems do (do not) adhere to the
Embedded Applications Binary Interface (EABI), which is a set of
modifications to the System V.4 specifications.  Selecting @option{-meabi}
means that the stack is aligned to an 8-byte boundary, a function
@code{__eabi} is called from @code{main} to set up the EABI
environment, and the @option{-msdata} option can use both @code{r2} and
@code{r13} to point to two separate small data areas.  Selecting
@option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
no EABI initialization function is called from @code{main}, and the
@option{-msdata} option only uses @code{r13} to point to a single
small data area.  The @option{-meabi} option is on by default if you
configured GCC using one of the @samp{powerpc*-*-eabi*} options.

@item -msdata=eabi
@opindex msdata=eabi
On System V.4 and embedded PowerPC systems, put small initialized
@code{const} global and static data in the @code{.sdata2} section, which
is pointed to by register @code{r2}.  Put small initialized
non-@code{const} global and static data in the @code{.sdata} section,
which is pointed to by register @code{r13}.  Put small uninitialized
global and static data in the @code{.sbss} section, which is adjacent to
the @code{.sdata} section.  The @option{-msdata=eabi} option is
incompatible with the @option{-mrelocatable} option.  The
@option{-msdata=eabi} option also sets the @option{-memb} option.

@item -msdata=sysv
@opindex msdata=sysv
On System V.4 and embedded PowerPC systems, put small global and static
data in the @code{.sdata} section, which is pointed to by register
@code{r13}.  Put small uninitialized global and static data in the
@code{.sbss} section, which is adjacent to the @code{.sdata} section.
The @option{-msdata=sysv} option is incompatible with the
@option{-mrelocatable} option.

@item -msdata=default
@itemx -msdata
@opindex msdata=default
@opindex msdata
On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
compile code the same as @option{-msdata=eabi}, otherwise compile code the
same as @option{-msdata=sysv}.

@item -msdata=data
@opindex msdata=data
On System V.4 and embedded PowerPC systems, put small global
data in the @code{.sdata} section.  Put small uninitialized global
data in the @code{.sbss} section.  Do not use register @code{r13}
to address small data however.  This is the default behavior unless
other @option{-msdata} options are used.

@item -msdata=none
@itemx -mno-sdata
@opindex msdata=none
@opindex mno-sdata
On embedded PowerPC systems, put all initialized global and static data
in the @code{.data} section, and all uninitialized data in the
@code{.bss} section.

@item -mreadonly-in-sdata
@itemx -mreadonly-in-sdata
@opindex mreadonly-in-sdata
@opindex mno-readonly-in-sdata
Put read-only objects in the @code{.sdata} section as well.  This is the
default.

@item -mblock-move-inline-limit=@var{num}
@opindex mblock-move-inline-limit
Inline all block moves (such as calls to @code{memcpy} or structure
copies) less than or equal to @var{num} bytes.  The minimum value for
@var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
targets.  The default value is target-specific.

@item -mblock-compare-inline-limit=@var{num}
@opindex mblock-compare-inline-limit
Generate non-looping inline code for all block compares (such as calls
to @code{memcmp} or structure compares) less than or equal to @var{num}
bytes. If @var{num} is 0, all inline expansion (non-loop and loop) of
block compare is disabled. The default value is target-specific.

@item -mblock-compare-inline-loop-limit=@var{num}
@opindex mblock-compare-inline-loop-limit
Generate an inline expansion using loop code for all block compares that
are less than or equal to @var{num} bytes, but greater than the limit
for non-loop inline block compare expansion. If the block length is not
constant, at most @var{num} bytes will be compared before @code{memcmp}
is called to compare the remainder of the block. The default value is
target-specific.

@item -mstring-compare-inline-limit=@var{num}
@opindex mstring-compare-inline-limit
Generate at most @var{num} pairs of load instructions to compare the
string inline. If the difference or end of string is not found at the
end of the inline compare a call to @code{strcmp} or @code{strncmp} will
take care of the rest of the comparison. The default is 8 pairs of
loads, which will compare 64 bytes on a 64-bit target and 32 bytes on a
32-bit target.

@item -G @var{num}
@opindex G
@cindex smaller data references (PowerPC)
@cindex .sdata/.sdata2 references (PowerPC)
On embedded PowerPC systems, put global and static items less than or
equal to @var{num} bytes into the small data or BSS sections instead of
the normal data or BSS section.  By default, @var{num} is 8.  The
@option{-G @var{num}} switch is also passed to the linker.
All modules should be compiled with the same @option{-G @var{num}} value.

@item -mregnames
@itemx -mno-regnames
@opindex mregnames
@opindex mno-regnames
On System V.4 and embedded PowerPC systems do (do not) emit register
names in the assembly language output using symbolic forms.

@item -mlongcall
@itemx -mno-longcall
@opindex mlongcall
@opindex mno-longcall
By default assume that all calls are far away so that a longer and more
expensive calling sequence is required.  This is required for calls
farther than 32 megabytes (33,554,432 bytes) from the current location.
A short call is generated if the compiler knows
the call cannot be that far away.  This setting can be overridden by
the @code{shortcall} function attribute, or by @code{#pragma
longcall(0)}.

Some linkers are capable of detecting out-of-range calls and generating
glue code on the fly.  On these systems, long calls are unnecessary and
generate slower code.  As of this writing, the AIX linker can do this,
as can the GNU linker for PowerPC/64.  It is planned to add this feature
to the GNU linker for 32-bit PowerPC systems as well.

On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
callee, L42}, plus a @dfn{branch island} (glue code).  The two target
addresses represent the callee and the branch island.  The
Darwin/PPC linker prefers the first address and generates a @code{bl
callee} if the PPC @code{bl} instruction reaches the callee directly;
otherwise, the linker generates @code{bl L42} to call the branch
island.  The branch island is appended to the body of the
calling function; it computes the full 32-bit address of the callee
and jumps to it.

On Mach-O (Darwin) systems, this option directs the compiler emit to
the glue for every direct call, and the Darwin linker decides whether
to use or discard it.

In the future, GCC may ignore all longcall specifications
when the linker is known to generate glue.

@item -mtls-markers
@itemx -mno-tls-markers
@opindex mtls-markers
@opindex mno-tls-markers
Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
specifying the function argument.  The relocation allows the linker to
reliably associate function call with argument setup instructions for
TLS optimization, which in turn allows GCC to better schedule the
sequence.

@item -mrecip
@itemx -mno-recip
@opindex mrecip
This option enables use of the reciprocal estimate and
reciprocal square root estimate instructions with additional
Newton-Raphson steps to increase precision instead of doing a divide or
square root and divide for floating-point arguments.  You should use
the @option{-ffast-math} option when using @option{-mrecip} (or at
least @option{-funsafe-math-optimizations},
@option{-ffinite-math-only}, @option{-freciprocal-math} and
@option{-fno-trapping-math}).  Note that while the throughput of the
sequence is generally higher than the throughput of the non-reciprocal
instruction, the precision of the sequence can be decreased by up to 2
ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
roots.

@item -mrecip=@var{opt}
@opindex mrecip=opt
This option controls which reciprocal estimate instructions
may be used.  @var{opt} is a comma-separated list of options, which may
be preceded by a @code{!} to invert the option:

@table @samp

@item all
Enable all estimate instructions.

@item default 
Enable the default instructions, equivalent to @option{-mrecip}.

@item none 
Disable all estimate instructions, equivalent to @option{-mno-recip}.

@item div 
Enable the reciprocal approximation instructions for both 
single and double precision.

@item divf 
Enable the single-precision reciprocal approximation instructions.

@item divd 
Enable the double-precision reciprocal approximation instructions.

@item rsqrt 
Enable the reciprocal square root approximation instructions for both
single and double precision.

@item rsqrtf 
Enable the single-precision reciprocal square root approximation instructions.

@item rsqrtd 
Enable the double-precision reciprocal square root approximation instructions.

@end table

So, for example, @option{-mrecip=all,!rsqrtd} enables
all of the reciprocal estimate instructions, except for the
@code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
which handle the double-precision reciprocal square root calculations.

@item -mrecip-precision
@itemx -mno-recip-precision
@opindex mrecip-precision
Assume (do not assume) that the reciprocal estimate instructions
provide higher-precision estimates than is mandated by the PowerPC
ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
@option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
The double-precision square root estimate instructions are not generated by
default on low-precision machines, since they do not provide an
estimate that converges after three steps.

@item -mveclibabi=@var{type}
@opindex mveclibabi
Specifies the ABI type to use for vectorizing intrinsics using an
external library.  The only type supported at present is @samp{mass},
which specifies to use IBM's Mathematical Acceleration Subsystem
(MASS) libraries for vectorizing intrinsics using external libraries.
GCC currently emits calls to @code{acosd2}, @code{acosf4},
@code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
@code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
@code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
@code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
@code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
@code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
@code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
@code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
@code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
@code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
@code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
@code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
@code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
for power7.  Both @option{-ftree-vectorize} and
@option{-funsafe-math-optimizations} must also be enabled.  The MASS
libraries must be specified at link time.

@item -mfriz
@itemx -mno-friz
@opindex mfriz
Generate (do not generate) the @code{friz} instruction when the
@option{-funsafe-math-optimizations} option is used to optimize
rounding of floating-point values to 64-bit integer and back to floating
point.  The @code{friz} instruction does not return the same value if
the floating-point number is too large to fit in an integer.

@item -mpointers-to-nested-functions
@itemx -mno-pointers-to-nested-functions
@opindex mpointers-to-nested-functions
Generate (do not generate) code to load up the static chain register
(@code{r11}) when calling through a pointer on AIX and 64-bit Linux
systems where a function pointer points to a 3-word descriptor giving
the function address, TOC value to be loaded in register @code{r2}, and
static chain value to be loaded in register @code{r11}.  The
@option{-mpointers-to-nested-functions} is on by default.  You cannot
call through pointers to nested functions or pointers
to functions compiled in other languages that use the static chain if
you use @option{-mno-pointers-to-nested-functions}.

@item -msave-toc-indirect
@itemx -mno-save-toc-indirect
@opindex msave-toc-indirect
Generate (do not generate) code to save the TOC value in the reserved
stack location in the function prologue if the function calls through
a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
saved in the prologue, it is saved just before the call through the
pointer.  The @option{-mno-save-toc-indirect} option is the default.

@item -mcompat-align-parm
@itemx -mno-compat-align-parm
@opindex mcompat-align-parm
Generate (do not generate) code to pass structure parameters with a
maximum alignment of 64 bits, for compatibility with older versions
of GCC.

Older versions of GCC (prior to 4.9.0) incorrectly did not align a
structure parameter on a 128-bit boundary when that structure contained
a member requiring 128-bit alignment.  This is corrected in more
recent versions of GCC.  This option may be used to generate code
that is compatible with functions compiled with older versions of
GCC.

The @option{-mno-compat-align-parm} option is the default.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@itemx -mstack-protector-guard-symbol=@var{symbol}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
@opindex mstack-protector-guard-symbol
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default with GNU libc version 2.4 or later).

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which register to use as base register for reading the canary, and from what
offset from that base register. The default for those is as specified in the
relevant ABI.  @option{-mstack-protector-guard-symbol=@var{symbol}} overrides
the offset with a symbol reference to a canary in the TLS block.
@end table

@node RX Options
@subsection RX Options
@cindex RX Options

These command-line options are defined for RX targets:

@table @gcctabopt
@item -m64bit-doubles
@itemx -m32bit-doubles
@opindex m64bit-doubles
@opindex m32bit-doubles
Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
or 32 bits (@option{-m32bit-doubles}) in size.  The default is
@option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
works on 32-bit values, which is why the default is
@option{-m32bit-doubles}.

@item -fpu
@itemx -nofpu
@opindex fpu
@opindex nofpu
Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
floating-point hardware.  The default is enabled for the RX600
series and disabled for the RX200 series.

Floating-point instructions are only generated for 32-bit floating-point 
values, however, so the FPU hardware is not used for doubles if the
@option{-m64bit-doubles} option is used.

@emph{Note} If the @option{-fpu} option is enabled then
@option{-funsafe-math-optimizations} is also enabled automatically.
This is because the RX FPU instructions are themselves unsafe.

@item -mcpu=@var{name}
@opindex mcpu
Selects the type of RX CPU to be targeted.  Currently three types are
supported, the generic @samp{RX600} and @samp{RX200} series hardware and
the specific @samp{RX610} CPU.  The default is @samp{RX600}.

The only difference between @samp{RX600} and @samp{RX610} is that the
@samp{RX610} does not support the @code{MVTIPL} instruction.

The @samp{RX200} series does not have a hardware floating-point unit
and so @option{-nofpu} is enabled by default when this type is
selected.

@item -mbig-endian-data
@itemx -mlittle-endian-data
@opindex mbig-endian-data
@opindex mlittle-endian-data
Store data (but not code) in the big-endian format.  The default is
@option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
format.

@item -msmall-data-limit=@var{N}
@opindex msmall-data-limit
Specifies the maximum size in bytes of global and static variables
which can be placed into the small data area.  Using the small data
area can lead to smaller and faster code, but the size of area is
limited and it is up to the programmer to ensure that the area does
not overflow.  Also when the small data area is used one of the RX's
registers (usually @code{r13}) is reserved for use pointing to this
area, so it is no longer available for use by the compiler.  This
could result in slower and/or larger code if variables are pushed onto
the stack instead of being held in this register.

Note, common variables (variables that have not been initialized) and
constants are not placed into the small data area as they are assigned
to other sections in the output executable.

The default value is zero, which disables this feature.  Note, this
feature is not enabled by default with higher optimization levels
(@option{-O2} etc) because of the potentially detrimental effects of
reserving a register.  It is up to the programmer to experiment and
discover whether this feature is of benefit to their program.  See the
description of the @option{-mpid} option for a description of how the
actual register to hold the small data area pointer is chosen.

@item -msim
@itemx -mno-sim
@opindex msim
@opindex mno-sim
Use the simulator runtime.  The default is to use the libgloss
board-specific runtime.

@item -mas100-syntax
@itemx -mno-as100-syntax
@opindex mas100-syntax
@opindex mno-as100-syntax
When generating assembler output use a syntax that is compatible with
Renesas's AS100 assembler.  This syntax can also be handled by the GAS
assembler, but it has some restrictions so it is not generated by default.

@item -mmax-constant-size=@var{N}
@opindex mmax-constant-size
Specifies the maximum size, in bytes, of a constant that can be used as
an operand in a RX instruction.  Although the RX instruction set does
allow constants of up to 4 bytes in length to be used in instructions,
a longer value equates to a longer instruction.  Thus in some
circumstances it can be beneficial to restrict the size of constants
that are used in instructions.  Constants that are too big are instead
placed into a constant pool and referenced via register indirection.

The value @var{N} can be between 0 and 4.  A value of 0 (the default)
or 4 means that constants of any size are allowed.

@item -mrelax
@opindex mrelax
Enable linker relaxation.  Linker relaxation is a process whereby the
linker attempts to reduce the size of a program by finding shorter
versions of various instructions.  Disabled by default.

@item -mint-register=@var{N}
@opindex mint-register
Specify the number of registers to reserve for fast interrupt handler
functions.  The value @var{N} can be between 0 and 4.  A value of 1
means that register @code{r13} is reserved for the exclusive use
of fast interrupt handlers.  A value of 2 reserves @code{r13} and
@code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
@code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
A value of 0, the default, does not reserve any registers.

@item -msave-acc-in-interrupts
@opindex msave-acc-in-interrupts
Specifies that interrupt handler functions should preserve the
accumulator register.  This is only necessary if normal code might use
the accumulator register, for example because it performs 64-bit
multiplications.  The default is to ignore the accumulator as this
makes the interrupt handlers faster.

@item -mpid
@itemx -mno-pid
@opindex mpid
@opindex mno-pid
Enables the generation of position independent data.  When enabled any
access to constant data is done via an offset from a base address
held in a register.  This allows the location of constant data to be
determined at run time without requiring the executable to be
relocated, which is a benefit to embedded applications with tight
memory constraints.  Data that can be modified is not affected by this
option.

Note, using this feature reserves a register, usually @code{r13}, for
the constant data base address.  This can result in slower and/or
larger code, especially in complicated functions.

The actual register chosen to hold the constant data base address
depends upon whether the @option{-msmall-data-limit} and/or the
@option{-mint-register} command-line options are enabled.  Starting
with register @code{r13} and proceeding downwards, registers are
allocated first to satisfy the requirements of @option{-mint-register},
then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
is possible for the small data area register to be @code{r8} if both
@option{-mint-register=4} and @option{-mpid} are specified on the
command line.

By default this feature is not enabled.  The default can be restored
via the @option{-mno-pid} command-line option.

@item -mno-warn-multiple-fast-interrupts
@itemx -mwarn-multiple-fast-interrupts
@opindex mno-warn-multiple-fast-interrupts
@opindex mwarn-multiple-fast-interrupts
Prevents GCC from issuing a warning message if it finds more than one
fast interrupt handler when it is compiling a file.  The default is to
issue a warning for each extra fast interrupt handler found, as the RX
only supports one such interrupt.

@item -mallow-string-insns
@itemx -mno-allow-string-insns
@opindex mallow-string-insns
@opindex mno-allow-string-insns
Enables or disables the use of the string manipulation instructions
@code{SMOVF}, @code{SCMPU}, @code{SMOVB}, @code{SMOVU}, @code{SUNTIL}
@code{SWHILE} and also the @code{RMPA} instruction.  These
instructions may prefetch data, which is not safe to do if accessing
an I/O register.  (See section 12.2.7 of the RX62N Group User's Manual
for more information).

The default is to allow these instructions, but it is not possible for
GCC to reliably detect all circumstances where a string instruction
might be used to access an I/O register, so their use cannot be
disabled automatically.  Instead it is reliant upon the programmer to
use the @option{-mno-allow-string-insns} option if their program
accesses I/O space.

When the instructions are enabled GCC defines the C preprocessor
symbol @code{__RX_ALLOW_STRING_INSNS__}, otherwise it defines the
symbol @code{__RX_DISALLOW_STRING_INSNS__}.

@item -mjsr
@itemx -mno-jsr
@opindex mjsr
@opindex mno-jsr
Use only (or not only) @code{JSR} instructions to access functions.
This option can be used when code size exceeds the range of @code{BSR}
instructions.  Note that @option{-mno-jsr} does not mean to not use
@code{JSR} but instead means that any type of branch may be used.
@end table

@emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
has special significance to the RX port when used with the
@code{interrupt} function attribute.  This attribute indicates a
function intended to process fast interrupts.  GCC ensures
that it only uses the registers @code{r10}, @code{r11}, @code{r12}
and/or @code{r13} and only provided that the normal use of the
corresponding registers have been restricted via the
@option{-ffixed-@var{reg}} or @option{-mint-register} command-line
options.

@node S/390 and zSeries Options
@subsection S/390 and zSeries Options
@cindex S/390 and zSeries Options

These are the @samp{-m} options defined for the S/390 and zSeries architecture.

@table @gcctabopt
@item -mhard-float
@itemx -msoft-float
@opindex mhard-float
@opindex msoft-float
Use (do not use) the hardware floating-point instructions and registers
for floating-point operations.  When @option{-msoft-float} is specified,
functions in @file{libgcc.a} are used to perform floating-point
operations.  When @option{-mhard-float} is specified, the compiler
generates IEEE floating-point instructions.  This is the default.

@item -mhard-dfp
@itemx -mno-hard-dfp
@opindex mhard-dfp
@opindex mno-hard-dfp
Use (do not use) the hardware decimal-floating-point instructions for
decimal-floating-point operations.  When @option{-mno-hard-dfp} is
specified, functions in @file{libgcc.a} are used to perform
decimal-floating-point operations.  When @option{-mhard-dfp} is
specified, the compiler generates decimal-floating-point hardware
instructions.  This is the default for @option{-march=z9-ec} or higher.

@item -mlong-double-64
@itemx -mlong-double-128
@opindex mlong-double-64
@opindex mlong-double-128
These switches control the size of @code{long double} type. A size
of 64 bits makes the @code{long double} type equivalent to the @code{double}
type. This is the default.

@item -mbackchain
@itemx -mno-backchain
@opindex mbackchain
@opindex mno-backchain
Store (do not store) the address of the caller's frame as backchain pointer
into the callee's stack frame.
A backchain may be needed to allow debugging using tools that do not understand
DWARF call frame information.
When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
the backchain is placed into the topmost word of the 96/160 byte register
save area.

In general, code compiled with @option{-mbackchain} is call-compatible with
code compiled with @option{-mmo-backchain}; however, use of the backchain
for debugging purposes usually requires that the whole binary is built with
@option{-mbackchain}.  Note that the combination of @option{-mbackchain},
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
to build a linux kernel use @option{-msoft-float}.

The default is to not maintain the backchain.

@item -mpacked-stack
@itemx -mno-packed-stack
@opindex mpacked-stack
@opindex mno-packed-stack
Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
specified, the compiler uses the all fields of the 96/160 byte register save
area only for their default purpose; unused fields still take up stack space.
When @option{-mpacked-stack} is specified, register save slots are densely
packed at the top of the register save area; unused space is reused for other
purposes, allowing for more efficient use of the available stack space.
However, when @option{-mbackchain} is also in effect, the topmost word of
the save area is always used to store the backchain, and the return address
register is always saved two words below the backchain.

As long as the stack frame backchain is not used, code generated with
@option{-mpacked-stack} is call-compatible with code generated with
@option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
S/390 or zSeries generated code that uses the stack frame backchain at run
time, not just for debugging purposes.  Such code is not call-compatible
with code compiled with @option{-mpacked-stack}.  Also, note that the
combination of @option{-mbackchain},
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
to build a linux kernel use @option{-msoft-float}.

The default is to not use the packed stack layout.

@item -msmall-exec
@itemx -mno-small-exec
@opindex msmall-exec
@opindex mno-small-exec
Generate (or do not generate) code using the @code{bras} instruction
to do subroutine calls.
This only works reliably if the total executable size does not
exceed 64k.  The default is to use the @code{basr} instruction instead,
which does not have this limitation.

@item -m64
@itemx -m31
@opindex m64
@opindex m31
When @option{-m31} is specified, generate code compliant to the
GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
particular to generate 64-bit instructions.  For the @samp{s390}
targets, the default is @option{-m31}, while the @samp{s390x}
targets default to @option{-m64}.

@item -mzarch
@itemx -mesa
@opindex mzarch
@opindex mesa
When @option{-mzarch} is specified, generate code using the
instructions available on z/Architecture.
When @option{-mesa} is specified, generate code using the
instructions available on ESA/390.  Note that @option{-mesa} is
not possible with @option{-m64}.
When generating code compliant to the GNU/Linux for S/390 ABI,
the default is @option{-mesa}.  When generating code compliant
to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.

@item -mhtm
@itemx -mno-htm
@opindex mhtm
@opindex mno-htm
The @option{-mhtm} option enables a set of builtins making use of
instructions available with the transactional execution facility
introduced with the IBM zEnterprise EC12 machine generation
@ref{S/390 System z Built-in Functions}.
@option{-mhtm} is enabled by default when using @option{-march=zEC12}.

@item -mvx
@itemx -mno-vx
@opindex mvx
@opindex mno-vx
When @option{-mvx} is specified, generate code using the instructions
available with the vector extension facility introduced with the IBM
z13 machine generation.
This option changes the ABI for some vector type values with regard to
alignment and calling conventions.  In case vector type values are
being used in an ABI-relevant context a GAS @samp{.gnu_attribute}
command will be added to mark the resulting binary with the ABI used.
@option{-mvx} is enabled by default when using @option{-march=z13}.

@item -mzvector
@itemx -mno-zvector
@opindex mzvector
@opindex mno-zvector
The @option{-mzvector} option enables vector language extensions and
builtins using instructions available with the vector extension
facility introduced with the IBM z13 machine generation.
This option adds support for @samp{vector} to be used as a keyword to
define vector type variables and arguments.  @samp{vector} is only
available when GNU extensions are enabled.  It will not be expanded
when requesting strict standard compliance e.g. with @option{-std=c99}.
In addition to the GCC low-level builtins @option{-mzvector} enables
a set of builtins added for compatibility with AltiVec-style
implementations like Power and Cell.  In order to make use of these
builtins the header file @file{vecintrin.h} needs to be included.
@option{-mzvector} is disabled by default.

@item -mmvcle
@itemx -mno-mvcle
@opindex mmvcle
@opindex mno-mvcle
Generate (or do not generate) code using the @code{mvcle} instruction
to perform block moves.  When @option{-mno-mvcle} is specified,
use a @code{mvc} loop instead.  This is the default unless optimizing for
size.

@item -mdebug
@itemx -mno-debug
@opindex mdebug
@opindex mno-debug
Print (or do not print) additional debug information when compiling.
The default is to not print debug information.

@item -march=@var{cpu-type}
@opindex march
Generate code that runs on @var{cpu-type}, which is the name of a
system representing a certain processor type.  Possible values for
@var{cpu-type} are @samp{z900}/@samp{arch5}, @samp{z990}/@samp{arch6},
@samp{z9-109}, @samp{z9-ec}/@samp{arch7}, @samp{z10}/@samp{arch8},
@samp{z196}/@samp{arch9}, @samp{zEC12}, @samp{z13}/@samp{arch11},
@samp{z14}/@samp{arch12}, and @samp{native}.

The default is @option{-march=z900}.  @samp{g5}/@samp{arch3} and
@samp{g6} are deprecated and will be removed with future releases.

Specifying @samp{native} as cpu type can be used to select the best
architecture option for the host processor.
@option{-march=native} has no effect if GCC does not recognize the
processor.

@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code,
except for the ABI and the set of available instructions.
The list of @var{cpu-type} values is the same as for @option{-march}.
The default is the value used for @option{-march}.

@item -mtpf-trace
@itemx -mno-tpf-trace
@opindex mtpf-trace
@opindex mno-tpf-trace
Generate code that adds (does not add) in TPF OS specific branches to trace
routines in the operating system.  This option is off by default, even
when compiling for the TPF OS@.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default if
hardware floating point is used.

@item -mwarn-framesize=@var{framesize}
@opindex mwarn-framesize
Emit a warning if the current function exceeds the given frame size.  Because
this is a compile-time check it doesn't need to be a real problem when the program
runs.  It is intended to identify functions that most probably cause
a stack overflow.  It is useful to be used in an environment with limited stack
size e.g.@: the linux kernel.

@item -mwarn-dynamicstack
@opindex mwarn-dynamicstack
Emit a warning if the function calls @code{alloca} or uses dynamically-sized
arrays.  This is generally a bad idea with a limited stack size.

@item -mstack-guard=@var{stack-guard}
@itemx -mstack-size=@var{stack-size}
@opindex mstack-guard
@opindex mstack-size
If these options are provided the S/390 back end emits additional instructions in
the function prologue that trigger a trap if the stack size is @var{stack-guard}
bytes above the @var{stack-size} (remember that the stack on S/390 grows downward).
If the @var{stack-guard} option is omitted the smallest power of 2 larger than
the frame size of the compiled function is chosen.
These options are intended to be used to help debugging stack overflow problems.
The additionally emitted code causes only little overhead and hence can also be
used in production-like systems without greater performance degradation.  The given
values have to be exact powers of 2 and @var{stack-size} has to be greater than
@var{stack-guard} without exceeding 64k.
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by @var{stack-size}.
The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.

@item -mhotpatch=@var{pre-halfwords},@var{post-halfwords}
@opindex mhotpatch
If the hotpatch option is enabled, a ``hot-patching'' function
prologue is generated for all functions in the compilation unit.
The funtion label is prepended with the given number of two-byte
NOP instructions (@var{pre-halfwords}, maximum 1000000).  After
the label, 2 * @var{post-halfwords} bytes are appended, using the
largest NOP like instructions the architecture allows (maximum
1000000).

If both arguments are zero, hotpatching is disabled.

This option can be overridden for individual functions with the
@code{hotpatch} attribute.
@end table

@node Score Options
@subsection Score Options
@cindex Score Options

These options are defined for Score implementations:

@table @gcctabopt
@item -meb
@opindex meb
Compile code for big-endian mode.  This is the default.

@item -mel
@opindex mel
Compile code for little-endian mode.

@item -mnhwloop
@opindex mnhwloop
Disable generation of @code{bcnz} instructions.

@item -muls
@opindex muls
Enable generation of unaligned load and store instructions.

@item -mmac
@opindex mmac
Enable the use of multiply-accumulate instructions. Disabled by default.

@item -mscore5
@opindex mscore5
Specify the SCORE5 as the target architecture.

@item -mscore5u
@opindex mscore5u
Specify the SCORE5U of the target architecture.

@item -mscore7
@opindex mscore7
Specify the SCORE7 as the target architecture. This is the default.

@item -mscore7d
@opindex mscore7d
Specify the SCORE7D as the target architecture.
@end table

@node SH Options
@subsection SH Options

These @samp{-m} options are defined for the SH implementations:

@table @gcctabopt
@item -m1
@opindex m1
Generate code for the SH1.

@item -m2
@opindex m2
Generate code for the SH2.

@item -m2e
Generate code for the SH2e.

@item -m2a-nofpu
@opindex m2a-nofpu
Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
that the floating-point unit is not used.

@item -m2a-single-only
@opindex m2a-single-only
Generate code for the SH2a-FPU, in such a way that no double-precision
floating-point operations are used.

@item -m2a-single
@opindex m2a-single
Generate code for the SH2a-FPU assuming the floating-point unit is in
single-precision mode by default.

@item -m2a
@opindex m2a
Generate code for the SH2a-FPU assuming the floating-point unit is in
double-precision mode by default.

@item -m3
@opindex m3
Generate code for the SH3.

@item -m3e
@opindex m3e
Generate code for the SH3e.

@item -m4-nofpu
@opindex m4-nofpu
Generate code for the SH4 without a floating-point unit.

@item -m4-single-only
@opindex m4-single-only
Generate code for the SH4 with a floating-point unit that only
supports single-precision arithmetic.

@item -m4-single
@opindex m4-single
Generate code for the SH4 assuming the floating-point unit is in
single-precision mode by default.

@item -m4
@opindex m4
Generate code for the SH4.

@item -m4-100
@opindex m4-100
Generate code for SH4-100.

@item -m4-100-nofpu
@opindex m4-100-nofpu
Generate code for SH4-100 in such a way that the
floating-point unit is not used.

@item -m4-100-single
@opindex m4-100-single
Generate code for SH4-100 assuming the floating-point unit is in
single-precision mode by default.

@item -m4-100-single-only
@opindex m4-100-single-only
Generate code for SH4-100 in such a way that no double-precision
floating-point operations are used.

@item -m4-200
@opindex m4-200
Generate code for SH4-200.

@item -m4-200-nofpu
@opindex m4-200-nofpu
Generate code for SH4-200 without in such a way that the
floating-point unit is not used.

@item -m4-200-single
@opindex m4-200-single
Generate code for SH4-200 assuming the floating-point unit is in
single-precision mode by default.

@item -m4-200-single-only
@opindex m4-200-single-only
Generate code for SH4-200 in such a way that no double-precision
floating-point operations are used.

@item -m4-300
@opindex m4-300
Generate code for SH4-300.

@item -m4-300-nofpu
@opindex m4-300-nofpu
Generate code for SH4-300 without in such a way that the
floating-point unit is not used.

@item -m4-300-single
@opindex m4-300-single
Generate code for SH4-300 in such a way that no double-precision
floating-point operations are used.

@item -m4-300-single-only
@opindex m4-300-single-only
Generate code for SH4-300 in such a way that no double-precision
floating-point operations are used.

@item -m4-340
@opindex m4-340
Generate code for SH4-340 (no MMU, no FPU).

@item -m4-500
@opindex m4-500
Generate code for SH4-500 (no FPU).  Passes @option{-isa=sh4-nofpu} to the
assembler.

@item -m4a-nofpu
@opindex m4a-nofpu
Generate code for the SH4al-dsp, or for a SH4a in such a way that the
floating-point unit is not used.

@item -m4a-single-only
@opindex m4a-single-only
Generate code for the SH4a, in such a way that no double-precision
floating-point operations are used.

@item -m4a-single
@opindex m4a-single
Generate code for the SH4a assuming the floating-point unit is in
single-precision mode by default.

@item -m4a
@opindex m4a
Generate code for the SH4a.

@item -m4al
@opindex m4al
Same as @option{-m4a-nofpu}, except that it implicitly passes
@option{-dsp} to the assembler.  GCC doesn't generate any DSP
instructions at the moment.

@item -mb
@opindex mb
Compile code for the processor in big-endian mode.

@item -ml
@opindex ml
Compile code for the processor in little-endian mode.

@item -mdalign
@opindex mdalign
Align doubles at 64-bit boundaries.  Note that this changes the calling
conventions, and thus some functions from the standard C library do
not work unless you recompile it first with @option{-mdalign}.

@item -mrelax
@opindex mrelax
Shorten some address references at link time, when possible; uses the
linker option @option{-relax}.

@item -mbigtable
@opindex mbigtable
Use 32-bit offsets in @code{switch} tables.  The default is to use
16-bit offsets.

@item -mbitops
@opindex mbitops
Enable the use of bit manipulation instructions on SH2A.

@item -mfmovd
@opindex mfmovd
Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
alignment constraints.

@item -mrenesas
@opindex mrenesas
Comply with the calling conventions defined by Renesas.

@item -mno-renesas
@opindex mno-renesas
Comply with the calling conventions defined for GCC before the Renesas
conventions were available.  This option is the default for all
targets of the SH toolchain.

@item -mnomacsave
@opindex mnomacsave
Mark the @code{MAC} register as call-clobbered, even if
@option{-mrenesas} is given.

@item -mieee
@itemx -mno-ieee
@opindex mieee
@opindex mno-ieee
Control the IEEE compliance of floating-point comparisons, which affects the
handling of cases where the result of a comparison is unordered.  By default
@option{-mieee} is implicitly enabled.  If @option{-ffinite-math-only} is
enabled @option{-mno-ieee} is implicitly set, which results in faster
floating-point greater-equal and less-equal comparisons.  The implicit settings
can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.

@item -minline-ic_invalidate
@opindex minline-ic_invalidate
Inline code to invalidate instruction cache entries after setting up
nested function trampolines.
This option has no effect if @option{-musermode} is in effect and the selected
code generation option (e.g. @option{-m4}) does not allow the use of the @code{icbi}
instruction.
If the selected code generation option does not allow the use of the @code{icbi}
instruction, and @option{-musermode} is not in effect, the inlined code
manipulates the instruction cache address array directly with an associative
write.  This not only requires privileged mode at run time, but it also
fails if the cache line had been mapped via the TLB and has become unmapped.

@item -misize
@opindex misize
Dump instruction size and location in the assembly code.

@item -mpadstruct
@opindex mpadstruct
This option is deprecated.  It pads structures to multiple of 4 bytes,
which is incompatible with the SH ABI@.

@item -matomic-model=@var{model}
@opindex matomic-model=@var{model}
Sets the model of atomic operations and additional parameters as a comma
separated list.  For details on the atomic built-in functions see
@ref{__atomic Builtins}.  The following models and parameters are supported:

@table @samp

@item none
Disable compiler generated atomic sequences and emit library calls for atomic
operations.  This is the default if the target is not @code{sh*-*-linux*}.

@item soft-gusa
Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
built-in functions.  The generated atomic sequences require additional support
from the interrupt/exception handling code of the system and are only suitable
for SH3* and SH4* single-core systems.  This option is enabled by default when
the target is @code{sh*-*-linux*} and SH3* or SH4*.  When the target is SH4A,
this option also partially utilizes the hardware atomic instructions
@code{movli.l} and @code{movco.l} to create more efficient code, unless
@samp{strict} is specified.  

@item soft-tcb
Generate software atomic sequences that use a variable in the thread control
block.  This is a variation of the gUSA sequences which can also be used on
SH1* and SH2* targets.  The generated atomic sequences require additional
support from the interrupt/exception handling code of the system and are only
suitable for single-core systems.  When using this model, the @samp{gbr-offset=}
parameter has to be specified as well.

@item soft-imask
Generate software atomic sequences that temporarily disable interrupts by
setting @code{SR.IMASK = 1111}.  This model works only when the program runs
in privileged mode and is only suitable for single-core systems.  Additional
support from the interrupt/exception handling code of the system is not
required.  This model is enabled by default when the target is
@code{sh*-*-linux*} and SH1* or SH2*.

@item hard-llcs
Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
instructions only.  This is only available on SH4A and is suitable for
multi-core systems.  Since the hardware instructions support only 32 bit atomic
variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
Code compiled with this option is also compatible with other software
atomic model interrupt/exception handling systems if executed on an SH4A
system.  Additional support from the interrupt/exception handling code of the
system is not required for this model.

@item gbr-offset=
This parameter specifies the offset in bytes of the variable in the thread
control block structure that should be used by the generated atomic sequences
when the @samp{soft-tcb} model has been selected.  For other models this
parameter is ignored.  The specified value must be an integer multiple of four
and in the range 0-1020.

@item strict
This parameter prevents mixed usage of multiple atomic models, even if they
are compatible, and makes the compiler generate atomic sequences of the
specified model only.

@end table

@item -mtas
@opindex mtas
Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
Notice that depending on the particular hardware and software configuration
this can degrade overall performance due to the operand cache line flushes
that are implied by the @code{tas.b} instruction.  On multi-core SH4A
processors the @code{tas.b} instruction must be used with caution since it
can result in data corruption for certain cache configurations.

@item -mprefergot
@opindex mprefergot
When generating position-independent code, emit function calls using
the Global Offset Table instead of the Procedure Linkage Table.

@item -musermode
@itemx -mno-usermode
@opindex musermode
@opindex mno-usermode
Don't allow (allow) the compiler generating privileged mode code.  Specifying
@option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
inlined code would not work in user mode.  @option{-musermode} is the default
when the target is @code{sh*-*-linux*}.  If the target is SH1* or SH2*
@option{-musermode} has no effect, since there is no user mode.

@item -multcost=@var{number}
@opindex multcost=@var{number}
Set the cost to assume for a multiply insn.

@item -mdiv=@var{strategy}
@opindex mdiv=@var{strategy}
Set the division strategy to be used for integer division operations.
@var{strategy} can be one of: 

@table @samp

@item call-div1
Calls a library function that uses the single-step division instruction
@code{div1} to perform the operation.  Division by zero calculates an
unspecified result and does not trap.  This is the default except for SH4,
SH2A and SHcompact.

@item call-fp
Calls a library function that performs the operation in double precision
floating point.  Division by zero causes a floating-point exception.  This is
the default for SHcompact with FPU.  Specifying this for targets that do not
have a double precision FPU defaults to @code{call-div1}.

@item call-table
Calls a library function that uses a lookup table for small divisors and
the @code{div1} instruction with case distinction for larger divisors.  Division
by zero calculates an unspecified result and does not trap.  This is the default
for SH4.  Specifying this for targets that do not have dynamic shift
instructions defaults to @code{call-div1}.

@end table

When a division strategy has not been specified the default strategy is
selected based on the current target.  For SH2A the default strategy is to
use the @code{divs} and @code{divu} instructions instead of library function
calls.

@item -maccumulate-outgoing-args
@opindex maccumulate-outgoing-args
Reserve space once for outgoing arguments in the function prologue rather
than around each call.  Generally beneficial for performance and size.  Also
needed for unwinding to avoid changing the stack frame around conditional code.

@item -mdivsi3_libfunc=@var{name}
@opindex mdivsi3_libfunc=@var{name}
Set the name of the library function used for 32-bit signed division to
@var{name}.
This only affects the name used in the @samp{call} division strategies, and
the compiler still expects the same sets of input/output/clobbered registers as
if this option were not present.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator can not use.  This is
useful when compiling kernel code.  A register range is specified as
two registers separated by a dash.  Multiple register ranges can be
specified separated by a comma.

@item -mbranch-cost=@var{num}
@opindex mbranch-cost=@var{num}
Assume @var{num} to be the cost for a branch instruction.  Higher numbers
make the compiler try to generate more branch-free code if possible.  
If not specified the value is selected depending on the processor type that
is being compiled for.

@item -mzdcbranch
@itemx -mno-zdcbranch
@opindex mzdcbranch
@opindex mno-zdcbranch
Assume (do not assume) that zero displacement conditional branch instructions
@code{bt} and @code{bf} are fast.  If @option{-mzdcbranch} is specified, the
compiler prefers zero displacement branch code sequences.  This is
enabled by default when generating code for SH4 and SH4A.  It can be explicitly
disabled by specifying @option{-mno-zdcbranch}.

@item -mcbranch-force-delay-slot
@opindex mcbranch-force-delay-slot
Force the usage of delay slots for conditional branches, which stuffs the delay
slot with a @code{nop} if a suitable instruction cannot be found.  By default
this option is disabled.  It can be enabled to work around hardware bugs as
found in the original SH7055.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default
if hardware floating point is used.  The machine-dependent
@option{-mfused-madd} option is now mapped to the machine-independent
@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
mapped to @option{-ffp-contract=off}.

@item -mfsca
@itemx -mno-fsca
@opindex mfsca
@opindex mno-fsca
Allow or disallow the compiler to emit the @code{fsca} instruction for sine
and cosine approximations.  The option @option{-mfsca} must be used in
combination with @option{-funsafe-math-optimizations}.  It is enabled by default
when generating code for SH4A.  Using @option{-mno-fsca} disables sine and cosine
approximations even if @option{-funsafe-math-optimizations} is in effect.

@item -mfsrra
@itemx -mno-fsrra
@opindex mfsrra
@opindex mno-fsrra
Allow or disallow the compiler to emit the @code{fsrra} instruction for
reciprocal square root approximations.  The option @option{-mfsrra} must be used
in combination with @option{-funsafe-math-optimizations} and
@option{-ffinite-math-only}.  It is enabled by default when generating code for
SH4A.  Using @option{-mno-fsrra} disables reciprocal square root approximations
even if @option{-funsafe-math-optimizations} and @option{-ffinite-math-only} are
in effect.

@item -mpretend-cmove
@opindex mpretend-cmove
Prefer zero-displacement conditional branches for conditional move instruction
patterns.  This can result in faster code on the SH4 processor.

@item -mfdpic
@opindex fdpic
Generate code using the FDPIC ABI.

@end table

@node Solaris 2 Options
@subsection Solaris 2 Options
@cindex Solaris 2 options

These @samp{-m} options are supported on Solaris 2:

@table @gcctabopt
@item -mclear-hwcap
@opindex mclear-hwcap
@option{-mclear-hwcap} tells the compiler to remove the hardware
capabilities generated by the Solaris assembler.  This is only necessary
when object files use ISA extensions not supported by the current
machine, but check at runtime whether or not to use them.

@item -mimpure-text
@opindex mimpure-text
@option{-mimpure-text}, used in addition to @option{-shared}, tells
the compiler to not pass @option{-z text} to the linker when linking a
shared object.  Using this option, you can link position-dependent
code into a shared object.

@option{-mimpure-text} suppresses the ``relocations remain against
allocatable but non-writable sections'' linker error message.
However, the necessary relocations trigger copy-on-write, and the
shared object is not actually shared across processes.  Instead of
using @option{-mimpure-text}, you should compile all source code with
@option{-fpic} or @option{-fPIC}.

@end table

These switches are supported in addition to the above on Solaris 2:

@table @gcctabopt
@item -pthreads
@opindex pthreads
This is a synonym for @option{-pthread}.
@end table

@node SPARC Options
@subsection SPARC Options
@cindex SPARC options

These @samp{-m} options are supported on the SPARC:

@table @gcctabopt
@item -mno-app-regs
@itemx -mapp-regs
@opindex mno-app-regs
@opindex mapp-regs
Specify @option{-mapp-regs} to generate output using the global registers
2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
global register 1, each global register 2 through 4 is then treated as an
allocable register that is clobbered by function calls.  This is the default.

To be fully SVR4 ABI-compliant at the cost of some performance loss,
specify @option{-mno-app-regs}.  You should compile libraries and system
software with this option.

@item -mflat
@itemx -mno-flat
@opindex mflat
@opindex mno-flat
With @option{-mflat}, the compiler does not generate save/restore instructions
and uses a ``flat'' or single register window model.  This model is compatible
with the regular register window model.  The local registers and the input
registers (0--5) are still treated as ``call-saved'' registers and are
saved on the stack as needed.

With @option{-mno-flat} (the default), the compiler generates save/restore
instructions (except for leaf functions).  This is the normal operating mode.

@item -mfpu
@itemx -mhard-float
@opindex mfpu
@opindex mhard-float
Generate output containing floating-point instructions.  This is the
default.

@item -mno-fpu
@itemx -msoft-float
@opindex mno-fpu
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all SPARC
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 targets @samp{sparc-*-aout} and
@samp{sparclite-*-*} do provide software floating-point support.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -mhard-quad-float
@opindex mhard-quad-float
Generate output containing quad-word (long double) floating-point
instructions.

@item -msoft-quad-float
@opindex msoft-quad-float
Generate output containing library calls for quad-word (long double)
floating-point instructions.  The functions called are those specified
in the SPARC ABI@.  This is the default.

As of this writing, there are no SPARC implementations that have hardware
support for the quad-word floating-point instructions.  They all invoke
a trap handler for one of these instructions, and then the trap handler
emulates the effect of the instruction.  Because of the trap handler overhead,
this is much slower than calling the ABI library routines.  Thus the
@option{-msoft-quad-float} option is the default.

@item -mno-unaligned-doubles
@itemx -munaligned-doubles
@opindex mno-unaligned-doubles
@opindex munaligned-doubles
Assume that doubles have 8-byte alignment.  This is the default.

With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
alignment only if they are contained in another type, or if they have an
absolute address.  Otherwise, it assumes they have 4-byte alignment.
Specifying this option avoids some rare compatibility problems with code
generated by other compilers.  It is not the default because it results
in a performance loss, especially for floating-point code.

@item -muser-mode
@itemx -mno-user-mode
@opindex muser-mode
@opindex mno-user-mode
Do not generate code that can only run in supervisor mode.  This is relevant
only for the @code{casa} instruction emitted for the LEON3 processor.  This
is the default.

@item -mfaster-structs
@itemx -mno-faster-structs
@opindex mfaster-structs
@opindex mno-faster-structs
With @option{-mfaster-structs}, the compiler assumes that structures
should have 8-byte alignment.  This enables the use of pairs of
@code{ldd} and @code{std} instructions for copies in structure
assignment, in place of twice as many @code{ld} and @code{st} pairs.
However, the use of this changed alignment directly violates the SPARC
ABI@.  Thus, it's intended only for use on targets where the developer
acknowledges that their resulting code is not directly in line with
the rules of the ABI@.

@item -mstd-struct-return
@itemx -mno-std-struct-return
@opindex mstd-struct-return
@opindex mno-std-struct-return
With @option{-mstd-struct-return}, the compiler generates checking code
in functions returning structures or unions to detect size mismatches
between the two sides of function calls, as per the 32-bit ABI@.

The default is @option{-mno-std-struct-return}.  This option has no effect
in 64-bit mode.

@item -mlra
@itemx -mno-lra
@opindex mlra
@opindex mno-lra
Enable Local Register Allocation.  This is the default for SPARC since GCC 7
so @option{-mno-lra} needs to be passed to get old Reload.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set, register set, and instruction scheduling parameters
for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
@samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{sparclite}, @samp{f930},
@samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
@samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
@samp{niagara3}, @samp{niagara4}, @samp{niagara7} and @samp{m8}.

Native Solaris and GNU/Linux toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@option{-mcpu=native} has no effect if GCC does not recognize
the processor.

Default instruction scheduling parameters are used for values that select
an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
@samp{sparclite}, @samp{sparclet}, @samp{v9}.

Here is a list of each supported architecture and their supported
implementations.

@table @asis
@item v7
cypress, leon3v7

@item v8
supersparc, hypersparc, leon, leon3

@item sparclite
f930, f934, sparclite86x

@item sparclet
tsc701

@item v9
ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
niagara7, m8
@end table

By default (unless configured otherwise), GCC generates code for the V7
variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
additionally optimizes it 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 @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
architecture.  The only difference 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.  With @option{-mcpu=supersparc}, the compiler additionally
optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
2000 series.

With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
the SPARC architecture.  This adds the integer multiply, integer divide step
and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
With @option{-mcpu=f930}, the compiler additionally optimizes it for the
Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
MB86934 chip, which is the more recent SPARClite with FPU@.

With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
optimizes it for the TEMIC SPARClet chip.

With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
architecture.  This adds 64-bit integer and floating-point move instructions,
3 additional floating-point condition code registers and conditional move
instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
@option{-mcpu=niagara}, the compiler additionally optimizes it for
Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
additionally optimizes it for Sun UltraSPARC T2 chips. With
@option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
additionally optimizes it for Sun UltraSPARC T4 chips.  With
@option{-mcpu=niagara7}, the compiler additionally optimizes it for
Oracle SPARC M7 chips.  With @option{-mcpu=m8}, the compiler
additionally optimizes it for Oracle M8 chips.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the instruction set or register set that the
option @option{-mcpu=@var{cpu_type}} does.

The same values for @option{-mcpu=@var{cpu_type}} can be used for
@option{-mtune=@var{cpu_type}}, but the only useful values are those
that select a particular CPU implementation.  Those are
@samp{cypress}, @samp{supersparc}, @samp{hypersparc}, @samp{leon},
@samp{leon3}, @samp{leon3v7}, @samp{f930}, @samp{f934},
@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3},
@samp{niagara4}, @samp{niagara7} and @samp{m8}.  With native Solaris
and GNU/Linux toolchains, @samp{native} can also be used.

@item -mv8plus
@itemx -mno-v8plus
@opindex mv8plus
@opindex mno-v8plus
With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
difference from the V8 ABI is that the global and out registers are
considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
mode for all SPARC-V9 processors.

@item -mvis
@itemx -mno-vis
@opindex mvis
@opindex mno-vis
With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
Visual Instruction Set extensions.  The default is @option{-mno-vis}.

@item -mvis2
@itemx -mno-vis2
@opindex mvis2
@opindex mno-vis2
With @option{-mvis2}, GCC generates code that takes advantage of
version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
default is @option{-mvis2} when targeting a cpu that supports such
instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
also sets @option{-mvis}.

@item -mvis3
@itemx -mno-vis3
@opindex mvis3
@opindex mno-vis3
With @option{-mvis3}, GCC generates code that takes advantage of
version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
default is @option{-mvis3} when targeting a cpu that supports such
instructions, such as niagara-3 and later.  Setting @option{-mvis3}
also sets @option{-mvis2} and @option{-mvis}.

@item -mvis4
@itemx -mno-vis4
@opindex mvis4
@opindex mno-vis4
With @option{-mvis4}, GCC generates code that takes advantage of
version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
default is @option{-mvis4} when targeting a cpu that supports such
instructions, such as niagara-7 and later.  Setting @option{-mvis4}
also sets @option{-mvis3}, @option{-mvis2} and @option{-mvis}.

@item -mvis4b
@itemx -mno-vis4b
@opindex mvis4b
@opindex mno-vis4b
With @option{-mvis4b}, GCC generates code that takes advantage of
version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
the additional VIS instructions introduced in the Oracle SPARC
Architecture 2017.  The default is @option{-mvis4b} when targeting a
cpu that supports such instructions, such as m8 and later.  Setting
@option{-mvis4b} also sets @option{-mvis4}, @option{-mvis3},
@option{-mvis2} and @option{-mvis}.

@item -mcbcond
@itemx -mno-cbcond
@opindex mcbcond
@opindex mno-cbcond
With @option{-mcbcond}, GCC generates code that takes advantage of the UltraSPARC
Compare-and-Branch-on-Condition instructions.  The default is @option{-mcbcond}
when targeting a CPU that supports such instructions, such as Niagara-4 and
later.

@item -mfmaf
@itemx -mno-fmaf
@opindex mfmaf
@opindex mno-fmaf
With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
Fused Multiply-Add Floating-point instructions.  The default is @option{-mfmaf}
when targeting a CPU that supports such instructions, such as Niagara-3 and
later.

@item -mfsmuld
@itemx -mno-fsmuld
@opindex mfsmuld
@opindex mno-fsmuld
With @option{-mfsmuld}, GCC generates code that takes advantage of the
Floating-point Multiply Single to Double (FsMULd) instruction.  The default is
@option{-mfsmuld} when targeting a CPU supporting the architecture versions V8
or V9 with FPU except @option{-mcpu=leon}.

@item -mpopc
@itemx -mno-popc
@opindex mpopc
@opindex mno-popc
With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
Population Count instruction.  The default is @option{-mpopc}
when targeting a CPU that supports such an instruction, such as Niagara-2 and
later.

@item -msubxc
@itemx -mno-subxc
@opindex msubxc
@opindex mno-subxc
With @option{-msubxc}, GCC generates code that takes advantage of the UltraSPARC
Subtract-Extended-with-Carry instruction.  The default is @option{-msubxc}
when targeting a CPU that supports such an instruction, such as Niagara-7 and
later.

@item -mfix-at697f
@opindex mfix-at697f
Enable the documented workaround for the single erratum of the Atmel AT697F
processor (which corresponds to erratum #13 of the AT697E processor).

@item -mfix-ut699
@opindex mfix-ut699
Enable the documented workarounds for the floating-point errata and the data
cache nullify errata of the UT699 processor.

@item -mfix-ut700
@opindex mfix-ut700
Enable the documented workaround for the back-to-back store errata of
the UT699E/UT700 processor.

@item -mfix-gr712rc
@opindex mfix-gr712rc
Enable the documented workaround for the back-to-back store errata of
the GR712RC processor.
@end table

These @samp{-m} options are supported in addition to the above
on SPARC-V9 processors in 64-bit environments:

@table @gcctabopt
@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits.

@item -mcmodel=@var{which}
@opindex mcmodel
Set the code model to one of

@table @samp
@item medlow
The Medium/Low code model: 64-bit addresses, programs
must be linked in the low 32 bits of memory.  Programs can be statically
or dynamically linked.

@item medmid
The Medium/Middle code model: 64-bit addresses, programs
must be linked in the low 44 bits of memory, the text and data segments must
be less than 2GB in size and the data segment must be located within 2GB of
the text segment.

@item medany
The Medium/Anywhere code model: 64-bit addresses, programs
may be linked anywhere in memory, the text and data segments must be less
than 2GB in size and the data segment must be located within 2GB of the
text segment.

@item embmedany
The Medium/Anywhere code model for embedded systems:
64-bit addresses, the text and data segments must be less than 2GB in
size, both starting anywhere in memory (determined at link time).  The
global register %g4 points to the base of the data segment.  Programs
are statically linked and PIC is not supported.
@end table

@item -mmemory-model=@var{mem-model}
@opindex mmemory-model
Set the memory model in force on the processor to one of

@table @samp
@item default
The default memory model for the processor and operating system.

@item rmo
Relaxed Memory Order

@item pso
Partial Store Order

@item tso
Total Store Order

@item sc
Sequential Consistency
@end table

These memory models are formally defined in Appendix D of the SPARC-V9
architecture manual, as set in the processor's @code{PSTATE.MM} field.

@item -mstack-bias
@itemx -mno-stack-bias
@opindex mstack-bias
@opindex mno-stack-bias
With @option{-mstack-bias}, GCC assumes that the stack pointer, and
frame pointer if present, are offset by @minus{}2047 which must be added back
when making stack frame references.  This is the default in 64-bit mode.
Otherwise, assume no such offset is present.
@end table

@node SPU Options
@subsection SPU Options
@cindex SPU options

These @samp{-m} options are supported on the SPU:

@table @gcctabopt
@item -mwarn-reloc
@itemx -merror-reloc
@opindex mwarn-reloc
@opindex merror-reloc

The loader for SPU does not handle dynamic relocations.  By default, GCC
gives an error when it generates code that requires a dynamic
relocation.  @option{-mno-error-reloc} disables the error,
@option{-mwarn-reloc} generates a warning instead.

@item -msafe-dma
@itemx -munsafe-dma
@opindex msafe-dma
@opindex munsafe-dma

Instructions that initiate or test completion of DMA must not be
reordered with respect to loads and stores of the memory that is being
accessed.
With @option{-munsafe-dma} you must use the @code{volatile} keyword to protect
memory accesses, but that can lead to inefficient code in places where the
memory is known to not change.  Rather than mark the memory as volatile,
you can use @option{-msafe-dma} to tell the compiler to treat
the DMA instructions as potentially affecting all memory.  

@item -mbranch-hints
@opindex mbranch-hints

By default, GCC generates a branch hint instruction to avoid
pipeline stalls for always-taken or probably-taken branches.  A hint
is not generated closer than 8 instructions away from its branch.
There is little reason to disable them, except for debugging purposes,
or to make an object a little bit smaller.

@item -msmall-mem
@itemx -mlarge-mem
@opindex msmall-mem
@opindex mlarge-mem

By default, GCC generates code assuming that addresses are never larger
than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
a full 32-bit address.

@item -mstdmain
@opindex mstdmain

By default, GCC links against startup code that assumes the SPU-style
main function interface (which has an unconventional parameter list).
With @option{-mstdmain}, GCC links your program against startup
code that assumes a C99-style interface to @code{main}, including a
local copy of @code{argv} strings.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot use.  This is
useful when compiling kernel code.  A register range is specified as
two registers separated by a dash.  Multiple register ranges can be
specified separated by a comma.

@item -mea32
@itemx -mea64
@opindex mea32
@opindex mea64
Compile code assuming that pointers to the PPU address space accessed
via the @code{__ea} named address space qualifier are either 32 or 64
bits wide.  The default is 32 bits.  As this is an ABI-changing option,
all object code in an executable must be compiled with the same setting.

@item -maddress-space-conversion
@itemx -mno-address-space-conversion
@opindex maddress-space-conversion
@opindex mno-address-space-conversion
Allow/disallow treating the @code{__ea} address space as superset
of the generic address space.  This enables explicit type casts
between @code{__ea} and generic pointer as well as implicit
conversions of generic pointers to @code{__ea} pointers.  The
default is to allow address space pointer conversions.

@item -mcache-size=@var{cache-size}
@opindex mcache-size
This option controls the version of libgcc that the compiler links to an
executable and selects a software-managed cache for accessing variables
in the @code{__ea} address space with a particular cache size.  Possible
options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
and @samp{128}.  The default cache size is 64KB.

@item -matomic-updates
@itemx -mno-atomic-updates
@opindex matomic-updates
@opindex mno-atomic-updates
This option controls the version of libgcc that the compiler links to an
executable and selects whether atomic updates to the software-managed
cache of PPU-side variables are used.  If you use atomic updates, changes
to a PPU variable from SPU code using the @code{__ea} named address space
qualifier do not interfere with changes to other PPU variables residing
in the same cache line from PPU code.  If you do not use atomic updates,
such interference may occur; however, writing back cache lines is
more efficient.  The default behavior is to use atomic updates.

@item -mdual-nops
@itemx -mdual-nops=@var{n}
@opindex mdual-nops
By default, GCC inserts NOPs to increase dual issue when it expects
it to increase performance.  @var{n} can be a value from 0 to 10.  A
smaller @var{n} inserts fewer NOPs.  10 is the default, 0 is the
same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.

@item -mhint-max-nops=@var{n}
@opindex mhint-max-nops
Maximum number of NOPs to insert for a branch hint.  A branch hint must
be at least 8 instructions away from the branch it is affecting.  GCC
inserts up to @var{n} NOPs to enforce this, otherwise it does not
generate the branch hint.

@item -mhint-max-distance=@var{n}
@opindex mhint-max-distance
The encoding of the branch hint instruction limits the hint to be within
256 instructions of the branch it is affecting.  By default, GCC makes
sure it is within 125.

@item -msafe-hints
@opindex msafe-hints
Work around a hardware bug that causes the SPU to stall indefinitely.
By default, GCC inserts the @code{hbrp} instruction to make sure
this stall won't happen.

@end table

@node System V Options
@subsection Options for System V

These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:

@table @gcctabopt
@item -G
@opindex G
Create a shared object.
It is recommended that @option{-symbolic} or @option{-shared} be used instead.

@item -Qy
@opindex Qy
Identify the versions of each tool used by the compiler, in a
@code{.ident} assembler directive in the output.

@item -Qn
@opindex Qn
Refrain from adding @code{.ident} directives to the output file (this is
the default).

@item -YP,@var{dirs}
@opindex YP
Search the directories @var{dirs}, and no others, for libraries
specified with @option{-l}.

@item -Ym,@var{dir}
@opindex Ym
Look in the directory @var{dir} to find the M4 preprocessor.
The assembler uses this option.
@c This is supposed to go with a -Yd for predefined M4 macro files, but
@c the generic assembler that comes with Solaris takes just -Ym.
@end table

@node TILE-Gx Options
@subsection TILE-Gx Options
@cindex TILE-Gx options

These @samp{-m} options are supported on the TILE-Gx:

@table @gcctabopt
@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small model.  The distance for direct calls is
limited to 500M in either direction.  PC-relative addresses are 32
bits.  Absolute addresses support the full address range.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large model.  There is no limitation on call
distance, pc-relative addresses, or absolute addresses.

@item -mcpu=@var{name}
@opindex mcpu
Selects the type of CPU to be targeted.  Currently the only supported
type is @samp{tilegx}.

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for a 32-bit or 64-bit environment.  The 32-bit
environment sets int, long, and pointer to 32 bits.  The 64-bit
environment sets int to 32 bits and long and pointer to 64 bits.

@item -mbig-endian
@itemx -mlittle-endian
@opindex mbig-endian
@opindex mlittle-endian
Generate code in big/little endian mode, respectively.
@end table

@node TILEPro Options
@subsection TILEPro Options
@cindex TILEPro options

These @samp{-m} options are supported on the TILEPro:

@table @gcctabopt
@item -mcpu=@var{name}
@opindex mcpu
Selects the type of CPU to be targeted.  Currently the only supported
type is @samp{tilepro}.

@item -m32
@opindex m32
Generate code for a 32-bit environment, which sets int, long, and
pointer to 32 bits.  This is the only supported behavior so the flag
is essentially ignored.
@end table

@node V850 Options
@subsection V850 Options
@cindex V850 Options

These @samp{-m} options are defined for V850 implementations:

@table @gcctabopt
@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Treat all calls as being far away (near).  If calls are assumed to be
far away, the compiler always loads the function's address into a
register, and calls indirect through the pointer.

@item -mno-ep
@itemx -mep
@opindex mno-ep
@opindex mep
Do not optimize (do optimize) basic blocks that use the same index
pointer 4 or more times to copy pointer into the @code{ep} register, and
use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
option is on by default if you optimize.

@item -mno-prolog-function
@itemx -mprolog-function
@opindex mno-prolog-function
@opindex mprolog-function
Do not use (do use) external functions to save and restore registers
at the prologue and epilogue of a function.  The external functions
are slower, but use less code space if more than one function saves
the same number of registers.  The @option{-mprolog-function} option
is on by default if you optimize.

@item -mspace
@opindex mspace
Try to make the code as small as possible.  At present, this just turns
on the @option{-mep} and @option{-mprolog-function} options.

@item -mtda=@var{n}
@opindex mtda
Put static or global variables whose size is @var{n} bytes or less into
the tiny data area that register @code{ep} points to.  The tiny data
area can hold up to 256 bytes in total (128 bytes for byte references).

@item -msda=@var{n}
@opindex msda
Put static or global variables whose size is @var{n} bytes or less into
the small data area that register @code{gp} points to.  The small data
area can hold up to 64 kilobytes.

@item -mzda=@var{n}
@opindex mzda
Put static or global variables whose size is @var{n} bytes or less into
the first 32 kilobytes of memory.

@item -mv850
@opindex mv850
Specify that the target processor is the V850.

@item -mv850e3v5
@opindex mv850e3v5
Specify that the target processor is the V850E3V5.  The preprocessor
constant @code{__v850e3v5__} is defined if this option is used.

@item -mv850e2v4
@opindex mv850e2v4
Specify that the target processor is the V850E3V5.  This is an alias for
the @option{-mv850e3v5} option.

@item -mv850e2v3
@opindex mv850e2v3
Specify that the target processor is the V850E2V3.  The preprocessor
constant @code{__v850e2v3__} is defined if this option is used.

@item -mv850e2
@opindex mv850e2
Specify that the target processor is the V850E2.  The preprocessor
constant @code{__v850e2__} is defined if this option is used.

@item -mv850e1
@opindex mv850e1
Specify that the target processor is the V850E1.  The preprocessor
constants @code{__v850e1__} and @code{__v850e__} are defined if
this option is used.

@item -mv850es
@opindex mv850es
Specify that the target processor is the V850ES.  This is an alias for
the @option{-mv850e1} option.

@item -mv850e
@opindex mv850e
Specify that the target processor is the V850E@.  The preprocessor
constant @code{__v850e__} is defined if this option is used.

If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
nor @option{-mv850e2} nor @option{-mv850e2v3} nor @option{-mv850e3v5}
are defined then a default target processor is chosen and the
relevant @samp{__v850*__} preprocessor constant is defined.

The preprocessor constants @code{__v850} and @code{__v851__} are always
defined, regardless of which processor variant is the target.

@item -mdisable-callt
@itemx -mno-disable-callt
@opindex mdisable-callt
@opindex mno-disable-callt
This option suppresses generation of the @code{CALLT} instruction for the
v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
architecture.

This option is enabled by default when the RH850 ABI is
in use (see @option{-mrh850-abi}), and disabled by default when the
GCC ABI is in use.  If @code{CALLT} instructions are being generated
then the C preprocessor symbol @code{__V850_CALLT__} is defined.

@item -mrelax
@itemx -mno-relax
@opindex mrelax
@opindex mno-relax
Pass on (or do not pass on) the @option{-mrelax} command-line option
to the assembler.

@item -mlong-jumps
@itemx -mno-long-jumps
@opindex mlong-jumps
@opindex mno-long-jumps
Disable (or re-enable) the generation of PC-relative jump instructions.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Disable (or re-enable) the generation of hardware floating point
instructions.  This option is only significant when the target
architecture is @samp{V850E2V3} or higher.  If hardware floating point
instructions are being generated then the C preprocessor symbol
@code{__FPU_OK__} is defined, otherwise the symbol
@code{__NO_FPU__} is defined.

@item -mloop
@opindex mloop
Enables the use of the e3v5 LOOP instruction.  The use of this
instruction is not enabled by default when the e3v5 architecture is
selected because its use is still experimental.

@item -mrh850-abi
@itemx -mghs
@opindex mrh850-abi
@opindex mghs
Enables support for the RH850 version of the V850 ABI.  This is the
default.  With this version of the ABI the following rules apply:

@itemize
@item
Integer sized structures and unions are returned via a memory pointer
rather than a register.

@item
Large structures and unions (more than 8 bytes in size) are passed by
value.

@item
Functions are aligned to 16-bit boundaries.

@item
The @option{-m8byte-align} command-line option is supported.

@item
The @option{-mdisable-callt} command-line option is enabled by
default.  The @option{-mno-disable-callt} command-line option is not
supported.
@end itemize

When this version of the ABI is enabled the C preprocessor symbol
@code{__V850_RH850_ABI__} is defined.

@item -mgcc-abi
@opindex mgcc-abi
Enables support for the old GCC version of the V850 ABI.  With this
version of the ABI the following rules apply:

@itemize
@item
Integer sized structures and unions are returned in register @code{r10}.

@item
Large structures and unions (more than 8 bytes in size) are passed by
reference.

@item
Functions are aligned to 32-bit boundaries, unless optimizing for
size.

@item
The @option{-m8byte-align} command-line option is not supported.

@item
The @option{-mdisable-callt} command-line option is supported but not
enabled by default.
@end itemize

When this version of the ABI is enabled the C preprocessor symbol
@code{__V850_GCC_ABI__} is defined.

@item -m8byte-align
@itemx -mno-8byte-align
@opindex m8byte-align
@opindex mno-8byte-align
Enables support for @code{double} and @code{long long} types to be
aligned on 8-byte boundaries.  The default is to restrict the
alignment of all objects to at most 4-bytes.  When
@option{-m8byte-align} is in effect the C preprocessor symbol
@code{__V850_8BYTE_ALIGN__} is defined.

@item -mbig-switch
@opindex 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.

@item -mapp-regs
@opindex mapp-regs
This option causes r2 and r5 to be used in the code generated by
the compiler.  This setting is the default.

@item -mno-app-regs
@opindex mno-app-regs
This option causes r2 and r5 to be treated as fixed registers.

@end table

@node VAX Options
@subsection VAX Options
@cindex VAX options

These @samp{-m} options are defined for the VAX:

@table @gcctabopt
@item -munix
@opindex munix
Do not output certain jump instructions (@code{aobleq} and so on)
that the Unix assembler for the VAX cannot handle across long
ranges.

@item -mgnu
@opindex mgnu
Do output those jump instructions, on the assumption that the
GNU assembler is being used.

@item -mg
@opindex mg
Output code for G-format floating-point numbers instead of D-format.
@end table

@node Visium Options
@subsection Visium Options
@cindex Visium options

@table @gcctabopt

@item -mdebug
@opindex mdebug
A program which performs file I/O and is destined to run on an MCM target
should be linked with this option.  It causes the libraries libc.a and
libdebug.a to be linked.  The program should be run on the target under
the control of the GDB remote debugging stub.

@item -msim
@opindex msim
A program which performs file I/O and is destined to run on the simulator
should be linked with option.  This causes libraries libc.a and libsim.a to
be linked.

@item -mfpu
@itemx -mhard-float
@opindex mfpu
@opindex mhard-float
Generate code containing floating-point instructions.  This is the
default.

@item -mno-fpu
@itemx -msoft-float
@opindex mno-fpu
@opindex msoft-float
Generate code containing library calls for floating-point.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set, register set, and instruction scheduling parameters
for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
@samp{mcm}, @samp{gr5} and @samp{gr6}.

@samp{mcm} is a synonym of @samp{gr5} present for backward compatibility.

By default (unless configured otherwise), GCC generates code for the GR5
variant of the Visium architecture.  

With @option{-mcpu=gr6}, GCC generates code for the GR6 variant of the Visium
architecture.  The only difference from GR5 code is that the compiler will
generate block move instructions.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type @var{cpu_type},
but do not set the instruction set or register set that the option
@option{-mcpu=@var{cpu_type}} would.

@item -msv-mode
@opindex msv-mode
Generate code for the supervisor mode, where there are no restrictions on
the access to general registers.  This is the default.

@item -muser-mode
@opindex muser-mode
Generate code for the user mode, where the access to some general registers
is forbidden: on the GR5, registers r24 to r31 cannot be accessed in this
mode; on the GR6, only registers r29 to r31 are affected.
@end table

@node VMS Options
@subsection VMS Options

These @samp{-m} options are defined for the VMS implementations:

@table @gcctabopt
@item -mvms-return-codes
@opindex mvms-return-codes
Return VMS condition codes from @code{main}. The default is to return POSIX-style
condition (e.g.@ error) codes.

@item -mdebug-main=@var{prefix}
@opindex mdebug-main=@var{prefix}
Flag the first routine whose name starts with @var{prefix} as the main
routine for the debugger.

@item -mmalloc64
@opindex mmalloc64
Default to 64-bit memory allocation routines.

@item -mpointer-size=@var{size}
@opindex mpointer-size=@var{size}
Set the default size of pointers. Possible options for @var{size} are
@samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
The later option disables @code{pragma pointer_size}.
@end table

@node VxWorks Options
@subsection VxWorks Options
@cindex VxWorks Options

The options in this section are defined for all VxWorks targets.
Options specific to the target hardware are listed with the other
options for that target.

@table @gcctabopt
@item -mrtp
@opindex mrtp
GCC can generate code for both VxWorks kernels and real time processes
(RTPs).  This option switches from the former to the latter.  It also
defines the preprocessor macro @code{__RTP__}.

@item -non-static
@opindex non-static
Link an RTP executable against shared libraries rather than static
libraries.  The options @option{-static} and @option{-shared} can
also be used for RTPs (@pxref{Link Options}); @option{-static}
is the default.

@item -Bstatic
@itemx -Bdynamic
@opindex Bstatic
@opindex Bdynamic
These options are passed down to the linker.  They are defined for
compatibility with Diab.

@item -Xbind-lazy
@opindex Xbind-lazy
Enable lazy binding of function calls.  This option is equivalent to
@option{-Wl,-z,now} and is defined for compatibility with Diab.

@item -Xbind-now
@opindex Xbind-now
Disable lazy binding of function calls.  This option is the default and
is defined for compatibility with Diab.
@end table

@node x86 Options
@subsection x86 Options
@cindex x86 Options

These @samp{-m} options are defined for the x86 family of computers.

@table @gcctabopt

@item -march=@var{cpu-type}
@opindex march
Generate instructions for the machine type @var{cpu-type}.  In contrast to
@option{-mtune=@var{cpu-type}}, which merely tunes the generated code 
for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
to generate code that may not run at all on processors other than the one
indicated.  Specifying @option{-march=@var{cpu-type}} implies 
@option{-mtune=@var{cpu-type}}.

The choices for @var{cpu-type} are:

@table @samp
@item native
This selects the CPU to generate code for at compilation time by determining
the processor type of the compiling machine.  Using @option{-march=native}
enables all instruction subsets supported by the local machine (hence
the result might not run on different machines).  Using @option{-mtune=native}
produces code optimized for the local machine under the constraints
of the selected instruction set.  

@item x86-64
A generic CPU with 64-bit extensions.

@item i386
Original Intel i386 CPU@.

@item i486
Intel i486 CPU@.  (No scheduling is implemented for this chip.)

@item i586
@itemx pentium
Intel Pentium CPU with no MMX support.

@item lakemont
Intel Lakemont MCU, based on Intel Pentium CPU.

@item pentium-mmx
Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.

@item pentiumpro
Intel Pentium Pro CPU@.

@item i686
When used with @option{-march}, the Pentium Pro
instruction set is used, so the code runs on all i686 family chips.
When used with @option{-mtune}, it has the same meaning as @samp{generic}.

@item pentium2
Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
support.

@item pentium3
@itemx pentium3m
Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
set support.

@item pentium-m
Intel Pentium M; low-power version of Intel Pentium III CPU
with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.

@item pentium4
@itemx pentium4m
Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.

@item prescott
Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
set support.

@item nocona
Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
SSE2 and SSE3 instruction set support.

@item core2
Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.

@item nehalem
Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2 and POPCNT instruction set support.

@item westmere
Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction set support.

@item sandybridge
Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL instruction set support.

@item ivybridge
Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C
instruction set support.

@item haswell
Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2 and F16C instruction set support.

@item broadwell
Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX and PREFETCHW instruction set support.

@item skylake
Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and
XSAVES instruction set support.

@item bonnell
Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.

@item silvermont
Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and RDRND instruction set support.

@item knl
Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and
AVX512CD instruction set support.

@item knm
Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD,
AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.

@item skylake-avx512
Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set support.

@item cannonlake
Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA and UMIP instruction set support.

@item icelake-client
Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set support.

@item icelake-server
Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and WBNOINVD instruction
set support.

@item k6
AMD K6 CPU with MMX instruction set support.

@item k6-2
@itemx k6-3
Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.

@item athlon
@itemx athlon-tbird
AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
support.

@item athlon-4
@itemx athlon-xp
@itemx athlon-mp
Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
instruction set support.

@item k8
@itemx opteron
@itemx athlon64
@itemx athlon-fx
Processors based on the AMD K8 core with x86-64 instruction set support,
including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
(This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
instruction set extensions.)

@item k8-sse3
@itemx opteron-sse3
@itemx athlon64-sse3
Improved versions of AMD K8 cores with SSE3 instruction set support.

@item amdfam10
@itemx barcelona
CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
instruction set extensions.)

@item bdver1
CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
@item bdver2
AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX,
SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
extensions.)
@item bdver3
AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 
64-bit instruction set extensions.
@item bdver4
AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 
SSE4.2, ABM and 64-bit instruction set extensions.

@item znver1
AMD Family 17h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
instruction set extensions.

@item btver1
CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
instruction set extensions.)

@item btver2
CPUs based on AMD Family 16h cores with x86-64 instruction set support. This
includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM,
SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set extensions.

@item winchip-c6
IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
set support.

@item winchip2
IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
instruction set support.

@item c3
VIA C3 CPU with MMX and 3DNow!@: instruction set support.
(No scheduling is implemented for this chip.)

@item c3-2
VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
(No scheduling is implemented for this chip.)

@item c7
VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
(No scheduling is implemented for this chip.)

@item samuel-2
VIA Eden Samuel 2 CPU with MMX and 3DNow!@: instruction set support.
(No scheduling is implemented for this chip.)

@item nehemiah
VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
(No scheduling is implemented for this chip.)

@item esther
VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
(No scheduling is implemented for this chip.)

@item eden-x2
VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3 instruction set support.
(No scheduling is implemented for this chip.)

@item eden-x4
VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
AVX and AVX2 instruction set support.
(No scheduling is implemented for this chip.)

@item nano
Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-1000
VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-2000
VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-3000
VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-x2
VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-x4
VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
instruction set support.
(No scheduling is implemented for this chip.)

@item geode
AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
@end table

@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code, except
for the ABI and the set of available instructions.  
While picking a specific @var{cpu-type} schedules things appropriately
for that particular chip, the compiler does not generate any code that
cannot run on the default machine type unless you use a
@option{-march=@var{cpu-type}} option.
For example, if GCC is configured for i686-pc-linux-gnu
then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
but still runs on i686 machines.

The choices for @var{cpu-type} are the same as for @option{-march}.
In addition, @option{-mtune} supports 2 extra choices for @var{cpu-type}:

@table @samp
@item generic
Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
If you know the CPU on which your code will run, then you should use
the corresponding @option{-mtune} or @option{-march} option instead of
@option{-mtune=generic}.  But, if you do not know exactly what CPU users
of your application will have, then you should use this option.

As new processors are deployed in the marketplace, the behavior of this
option will change.  Therefore, if you upgrade to a newer version of
GCC, code generation controlled by this option will change to reflect
the processors
that are most common at the time that version of GCC is released.

There is no @option{-march=generic} option because @option{-march}
indicates the instruction set the compiler can use, and there is no
generic instruction set applicable to all processors.  In contrast,
@option{-mtune} indicates the processor (or, in this case, collection of
processors) for which the code is optimized.

@item intel
Produce code optimized for the most current Intel processors, which are
Haswell and Silvermont for this version of GCC.  If you know the CPU
on which your code will run, then you should use the corresponding
@option{-mtune} or @option{-march} option instead of @option{-mtune=intel}.
But, if you want your application performs better on both Haswell and
Silvermont, then you should use this option.

As new Intel processors are deployed in the marketplace, the behavior of
this option will change.  Therefore, if you upgrade to a newer version of
GCC, code generation controlled by this option will change to reflect
the most current Intel processors at the time that version of GCC is
released.

There is no @option{-march=intel} option because @option{-march} indicates
the instruction set the compiler can use, and there is no common
instruction set applicable to all processors.  In contrast,
@option{-mtune} indicates the processor (or, in this case, collection of
processors) for which the code is optimized.
@end table

@item -mcpu=@var{cpu-type}
@opindex mcpu
A deprecated synonym for @option{-mtune}.

@item -mfpmath=@var{unit}
@opindex mfpmath
Generate floating-point arithmetic for selected unit @var{unit}.  The choices
for @var{unit} are:

@table @samp
@item 387
Use the standard 387 floating-point coprocessor present on the majority of chips and
emulated otherwise.  Code compiled with this option runs almost everywhere.
The temporary results are computed in 80-bit precision instead of the precision
specified by the type, resulting in slightly different results compared to most
of other chips.  See @option{-ffloat-store} for more detailed description.

This is the default choice for non-Darwin x86-32 targets.

@item sse
Use scalar floating-point instructions present in the SSE instruction set.
This instruction set is supported by Pentium III and newer chips,
and in the AMD line
by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
instruction set supports only single-precision arithmetic, thus the double and
extended-precision arithmetic are still done using 387.  A later version, present
only in Pentium 4 and AMD x86-64 chips, supports double-precision
arithmetic too.

For the x86-32 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
or @option{-msse2} switches to enable SSE extensions and make this option
effective.  For the x86-64 compiler, these extensions are enabled by default.

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

This is the default choice for the x86-64 compiler, Darwin x86-32 targets,
and the default choice for x86-32 targets with the SSE2 instruction set
when @option{-ffast-math} is enabled.

@item sse,387
@itemx sse+387
@itemx both
Attempt to utilize both instruction sets at once.  This effectively doubles 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 the GCC register allocator does not model separate
functional units well, resulting in unstable performance.
@end table

@item -masm=@var{dialect}
@opindex masm=@var{dialect}
Output assembly instructions using selected @var{dialect}.  Also affects
which dialect is used for basic @code{asm} (@pxref{Basic Asm}) and
extended @code{asm} (@pxref{Extended Asm}). Supported choices (in dialect
order) are @samp{att} or @samp{intel}. The default is @samp{att}. Darwin does
not support @samp{intel}.

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

@item -m80387
@itemx -mhard-float
@opindex 80387
@opindex mhard-float
Generate output containing 80387 instructions for floating point.

@item -mno-80387
@itemx -msoft-float
@opindex no-80387
@opindex msoft-float
Generate output containing library calls for floating point.

@strong{Warning:} the requisite libraries are not part of GCC@.
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.

On machines where a function returns floating-point results in the 80387
register stack, some floating-point opcodes may be emitted even if
@option{-msoft-float} is used.

@item -mno-fp-ret-in-387
@opindex 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
@code{float} and @code{double} in an FPU register, even if there
is no FPU@.  The idea is that the operating system should emulate
an FPU@.

The option @option{-mno-fp-ret-in-387} causes such values to be returned
in ordinary CPU registers instead.

@item -mno-fancy-math-387
@opindex mno-fancy-math-387
Some 387 emulators do not support the @code{sin}, @code{cos} and
@code{sqrt} instructions for the 387.  Specify this option to avoid
generating those instructions.  This option is the default on
OpenBSD and NetBSD@.  This option is overridden when @option{-march}
indicates that the target CPU always has an FPU and so the
instruction does not need emulation.  These
instructions are not generated unless you also use the
@option{-funsafe-math-optimizations} switch.

@item -malign-double
@itemx -mno-align-double
@opindex malign-double
@opindex mno-align-double
Control whether GCC aligns @code{double}, @code{long double}, and
@code{long long} variables on a two-word boundary or a one-word
boundary.  Aligning @code{double} variables on a two-word boundary
produces code that runs somewhat faster on a Pentium at the
expense of more memory.

On x86-64, @option{-malign-double} is enabled by default.

@strong{Warning:} if you use the @option{-malign-double} switch,
structures containing the above types are aligned differently than
the published application binary interface specifications for the x86-32
and are not binary compatible with structures in code compiled
without that switch.

@item -m96bit-long-double
@itemx -m128bit-long-double
@opindex m96bit-long-double
@opindex m128bit-long-double
These switches control the size of @code{long double} type.  The x86-32
application binary interface specifies the size to be 96 bits,
so @option{-m96bit-long-double} is the default in 32-bit mode.

Modern architectures (Pentium and newer) prefer @code{long double}
to be aligned to an 8- or 16-byte boundary.  In arrays or structures
conforming to the ABI, this is not possible.  So specifying
@option{-m128bit-long-double} aligns @code{long double}
to a 16-byte boundary by padding the @code{long double} with an additional
32-bit zero.

In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
its ABI specifies that @code{long double} is aligned on 16-byte boundary.

Notice that neither of these options enable any extra precision over the x87
standard of 80 bits for a @code{long double}.

@strong{Warning:} if you override the default value for your target ABI, this
changes the size of 
structures and arrays containing @code{long double} variables,
as well as modifying the function calling convention for functions taking
@code{long double}.  Hence they are not binary-compatible
with code compiled without that switch.

@item -mlong-double-64
@itemx -mlong-double-80
@itemx -mlong-double-128
@opindex mlong-double-64
@opindex mlong-double-80
@opindex mlong-double-128
These switches control the size of @code{long double} type. A size
of 64 bits makes the @code{long double} type equivalent to the @code{double}
type. This is the default for 32-bit Bionic C library.  A size
of 128 bits makes the @code{long double} type equivalent to the
@code{__float128} type. This is the default for 64-bit Bionic C library.

@strong{Warning:} if you override the default value for your target ABI, this
changes the size of
structures and arrays containing @code{long double} variables,
as well as modifying the function calling convention for functions taking
@code{long double}.  Hence they are not binary-compatible
with code compiled without that switch.

@item -malign-data=@var{type}
@opindex malign-data
Control how GCC aligns variables.  Supported values for @var{type} are
@samp{compat} uses increased alignment value compatible uses GCC 4.8
and earlier, @samp{abi} uses alignment value as specified by the
psABI, and @samp{cacheline} uses increased alignment value to match
the cache line size.  @samp{compat} is the default.

@item -mlarge-data-threshold=@var{threshold}
@opindex mlarge-data-threshold
When @option{-mcmodel=medium} is specified, data objects larger than
@var{threshold} are placed in the large data section.  This value must be the
same across all objects linked into the binary, and defaults to 65535.

@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions that
take a fixed number of arguments return with the @code{ret @var{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 @code{stdcall}.  You can also
override the @option{-mrtd} option by using the function attribute
@code{cdecl}.  @xref{Function Attributes}.

@strong{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 @code{printf});
otherwise incorrect code is generated for calls to those
functions.

In addition, seriously incorrect code results if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)

@item -mregparm=@var{num}
@opindex mregparm
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 @code{regparm}.
@xref{Function Attributes}.

@strong{Warning:} if you use this switch, and
@var{num} is nonzero, then you must build all modules with the same
value, including any libraries.  This includes the system libraries and
startup modules.

@item -msseregparm
@opindex msseregparm
Use SSE register passing conventions for float and double arguments
and return values.  You can control this behavior for a specific
function by using the function attribute @code{sseregparm}.
@xref{Function Attributes}.

@strong{Warning:} if you use this switch then you must build all
modules with the same value, including any libraries.  This includes
the system libraries and startup modules.

@item -mvect8-ret-in-mem
@opindex mvect8-ret-in-mem
Return 8-byte vectors in memory instead of MMX registers.  This is the
default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun
Studio compilers until version 12.  Later compiler versions (starting
with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which
is the default on Solaris@tie{}10 and later.  @emph{Only} use this option if
you need to remain compatible with existing code produced by those
previous compiler versions or older versions of GCC@.

@item -mpc32
@itemx -mpc64
@itemx -mpc80
@opindex mpc32
@opindex mpc64
@opindex mpc80

Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
is specified, the significands of results of floating-point operations are
rounded to 24 bits (single precision); @option{-mpc64} rounds the
significands of results of floating-point operations to 53 bits (double
precision) and @option{-mpc80} rounds the significands of results of
floating-point operations to 64 bits (extended double precision), which is
the default.  When this option is used, floating-point operations in higher
precisions are not available to the programmer without setting the FPU
control word explicitly.

Setting the rounding of floating-point operations to less than the default
80 bits can speed some programs by 2% or more.  Note that some mathematical
libraries assume that extended-precision (80-bit) floating-point operations
are enabled by default; routines in such libraries could suffer significant
loss of accuracy, typically through so-called ``catastrophic cancellation'',
when this option is used to set the precision to less than extended precision.

@item -mstackrealign
@opindex mstackrealign
Realign the stack at entry.  On the x86, the @option{-mstackrealign}
option generates an alternate prologue and epilogue that realigns the
run-time stack if necessary.  This supports mixing legacy codes that keep
4-byte stack alignment with modern codes that keep 16-byte stack alignment for
SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
applicable to individual functions.

@item -mpreferred-stack-boundary=@var{num}
@opindex mpreferred-stack-boundary
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128 bits).

@strong{Warning:} When generating code for the x86-64 architecture with
SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
used to keep the stack boundary aligned to 8 byte boundary.  Since
x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
intended to be used in controlled environment where stack space is
important limitation.  This option leads to wrong code when functions
compiled with 16 byte stack alignment (such as functions from a standard
library) are called with misaligned stack.  In this case, SSE
instructions may lead to misaligned memory access traps.  In addition,
variable arguments are handled incorrectly for 16 byte aligned
objects (including x87 long double and __int128), leading to wrong
results.  You must build all modules with
@option{-mpreferred-stack-boundary=3}, including any libraries.  This
includes the system libraries and startup modules.

@item -mincoming-stack-boundary=@var{num}
@opindex mincoming-stack-boundary
Assume the incoming stack is aligned to a 2 raised to @var{num} byte
boundary.  If @option{-mincoming-stack-boundary} is not specified,
the one specified by @option{-mpreferred-stack-boundary} is used.

On Pentium and Pentium Pro, @code{double} and @code{long double} values
should be aligned to an 8-byte boundary (see @option{-malign-double}) or
suffer significant run time performance penalties.  On Pentium III, the
Streaming SIMD Extension (SSE) data type @code{__m128} may not work
properly 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 most likely misaligns 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 @option{-mpreferred-stack-boundary=2}.

@need 200
@item -mmmx
@opindex mmmx
@need 200
@itemx -msse
@opindex msse
@need 200
@itemx -msse2
@opindex msse2
@need 200
@itemx -msse3
@opindex msse3
@need 200
@itemx -mssse3
@opindex mssse3
@need 200
@itemx -msse4
@opindex msse4
@need 200
@itemx -msse4a
@opindex msse4a
@need 200
@itemx -msse4.1
@opindex msse4.1
@need 200
@itemx -msse4.2
@opindex msse4.2
@need 200
@itemx -mavx
@opindex mavx
@need 200
@itemx -mavx2
@opindex mavx2
@need 200
@itemx -mavx512f
@opindex mavx512f
@need 200
@itemx -mavx512pf
@opindex mavx512pf
@need 200
@itemx -mavx512er
@opindex mavx512er
@need 200
@itemx -mavx512cd
@opindex mavx512cd
@need 200
@itemx -mavx512vl
@opindex mavx512vl
@need 200
@itemx -mavx512bw
@opindex mavx512bw
@need 200
@itemx -mavx512dq
@opindex mavx512dq
@need 200
@itemx -mavx512ifma
@opindex mavx512ifma
@need 200
@itemx -mavx512vbmi
@opindex mavx512vbmi
@need 200
@itemx -msha
@opindex msha
@need 200
@itemx -maes
@opindex maes
@need 200
@itemx -mpclmul
@opindex mpclmul
@need 200
@itemx -mclflushopt
@opindex mclflushopt
@need 200
@itemx -mfsgsbase
@opindex mfsgsbase
@need 200
@itemx -mrdrnd
@opindex mrdrnd
@need 200
@itemx -mf16c
@opindex mf16c
@need 200
@itemx -mfma
@opindex mfma
@need 200
@itemx -mpconfig
@opindex mpconfig
@need 200
@itemx -mwbnoinvd
@opindex mwbnoinvd
@need 200
@itemx -mfma4
@opindex mfma4
@need 200
@itemx -mprefetchwt1
@opindex mprefetchwt1
@need 200
@itemx -mxop
@opindex mxop
@need 200
@itemx -mlwp
@opindex mlwp
@need 200
@itemx -m3dnow
@opindex m3dnow
@need 200
@itemx -m3dnowa
@opindex m3dnowa
@need 200
@itemx -mpopcnt
@opindex mpopcnt
@need 200
@itemx -mabm
@opindex mabm
@need 200
@itemx -mbmi
@opindex mbmi
@need 200
@itemx -mbmi2
@need 200
@itemx -mlzcnt
@opindex mlzcnt
@need 200
@itemx -mfxsr
@opindex mfxsr
@need 200
@itemx -mxsave
@opindex mxsave
@need 200
@itemx -mxsaveopt
@opindex mxsaveopt
@need 200
@itemx -mxsavec
@opindex mxsavec
@need 200
@itemx -mxsaves
@opindex mxsaves
@need 200
@itemx -mrtm
@opindex mrtm
@need 200
@itemx -mtbm
@opindex mtbm
@need 200
@itemx -mmpx
@opindex mmpx
@need 200
@itemx -mmwaitx
@opindex mmwaitx
@need 200
@itemx -mclzero
@opindex mclzero
@need 200
@itemx -mpku
@opindex mpku
@need 200
@itemx -mavx512vbmi2
@opindex mavx512vbmi2
@need 200
@itemx -mgfni
@opindex mgfni
@need 200
@itemx -mvaes
@opindex mvaes
@need 200
@itemx -mvpclmulqdq
@opindex mvpclmulqdq
@need 200
@itemx -mavx512bitalg
@opindex mavx512bitalg
@need 200
@itemx -mmovdiri
@opindex mmovdiri
@need 200
@itemx -mmovdir64b
@opindex mmovdir64b
@need 200
@itemx -mavx512vpopcntdq
@opindex mavx512vpopcntdq
These switches enable the use of instructions in the MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD,
SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM,
AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, BMI, BMI2, VAES,
FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, MPX, MWAITX, PKU, IBT, SHSTK, AVX512VBMI2,
GFNI, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
AVX512VPOPCNTDQ3DNow!@: or enhanced 3DNow!@: extended instruction sets.
Each has a corresponding @option{-mno-} option to disable use of these
instructions.

These extensions are also available as built-in functions: see
@ref{x86 Built-in Functions}, for details of the functions enabled and
disabled by these switches.

To generate SSE/SSE2 instructions automatically from floating-point
code (as opposed to 387 instructions), see @option{-mfpmath=sse}.

GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
generates new AVX instructions or AVX equivalence for all SSEx instructions
when needed.

These options enable GCC to use these extended instructions in
generated code, even without @option{-mfpmath=sse}.  Applications that
perform run-time CPU detection must compile separate files for each
supported architecture, using the appropriate flags.  In particular,
the file containing the CPU detection code should be compiled without
these options.

@item -mdump-tune-features
@opindex mdump-tune-features
This option instructs GCC to dump the names of the x86 performance 
tuning features and default settings. The names can be used in 
@option{-mtune-ctrl=@var{feature-list}}.

@item -mtune-ctrl=@var{feature-list}
@opindex mtune-ctrl=@var{feature-list}
This option is used to do fine grain control of x86 code generation features.
@var{feature-list} is a comma separated list of @var{feature} names. See also
@option{-mdump-tune-features}. When specified, the @var{feature} is turned
on if it is not preceded with @samp{^}, otherwise, it is turned off. 
@option{-mtune-ctrl=@var{feature-list}} is intended to be used by GCC
developers. Using it may lead to code paths not covered by testing and can
potentially result in compiler ICEs or runtime errors.

@item -mno-default
@opindex mno-default
This option instructs GCC to turn off all tunable features. See also 
@option{-mtune-ctrl=@var{feature-list}} and @option{-mdump-tune-features}.

@item -mcld
@opindex mcld
This option instructs GCC to emit a @code{cld} instruction in the prologue
of functions that use string instructions.  String instructions depend on
the DF flag to select between autoincrement or autodecrement mode.  While the
ABI specifies the DF flag to be cleared on function entry, some operating
systems violate this specification by not clearing the DF flag in their
exception dispatchers.  The exception handler can be invoked with the DF flag
set, which leads to wrong direction mode when string instructions are used.
This option can be enabled by default on 32-bit x86 targets by configuring
GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
instructions can be suppressed with the @option{-mno-cld} compiler option
in this case.

@item -mvzeroupper
@opindex mvzeroupper
This option instructs GCC to emit a @code{vzeroupper} instruction
before a transfer of control flow out of the function to minimize
the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
intrinsics.

@item -mprefer-avx128
@opindex mprefer-avx128
This option instructs GCC to use 128-bit AVX instructions instead of
256-bit AVX instructions in the auto-vectorizer.

@item -mprefer-vector-width=@var{opt}
@opindex mprefer-vector-width
This option instructs GCC to use @var{opt}-bit vector width in instructions
instead of default on the selected platform.

@table @samp
@item none
No extra limitations applied to GCC other than defined by the selected platform.

@item 128
Prefer 128-bit vector width for instructions.

@item 256
Prefer 256-bit vector width for instructions.

@item 512
Prefer 512-bit vector width for instructions.
@end table

@item -mcx16
@opindex mcx16
This option enables GCC to generate @code{CMPXCHG16B} instructions in 64-bit
code to implement compare-and-exchange operations on 16-byte aligned 128-bit
objects.  This is useful for atomic updates of data structures exceeding one
machine word in size.  The compiler uses this instruction to implement
@ref{__sync Builtins}.  However, for @ref{__atomic Builtins} operating on
128-bit integers, a library call is always used.

@item -msahf
@opindex msahf
This option enables generation of @code{SAHF} instructions in 64-bit code.
Early Intel Pentium 4 CPUs with Intel 64 support,
prior to the introduction of Pentium 4 G1 step in December 2005,
lacked the @code{LAHF} and @code{SAHF} instructions
which are supported by AMD64.
These are load and store instructions, respectively, for certain status flags.
In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
@code{drem}, and @code{remainder} built-in functions;
see @ref{Other Builtins} for details.

@item -mmovbe
@opindex mmovbe
This option enables use of the @code{movbe} instruction to implement
@code{__builtin_bswap32} and @code{__builtin_bswap64}.

@item -mshstk
@opindex mshstk
The @option{-mshstk} option enables shadow stack built-in functions
from x86 Control-flow Enforcement Technology (CET).

@item -mcrc32
@opindex mcrc32
This option enables built-in functions @code{__builtin_ia32_crc32qi},
@code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
@code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.

@item -mrecip
@opindex mrecip
This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
(and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
with an additional Newton-Raphson step
to increase precision instead of @code{DIVSS} and @code{SQRTSS}
(and their vectorized
variants) for single-precision floating-point arguments.  These instructions
are generated only when @option{-funsafe-math-optimizations} is enabled
together with @option{-ffinite-math-only} and @option{-fno-trapping-math}.
Note that while the throughput of the sequence is higher than the throughput
of the non-reciprocal instruction, the precision of the sequence can be
decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).

Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
(or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
combination), and doesn't need @option{-mrecip}.

Also note that GCC emits the above sequence with additional Newton-Raphson step
for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
already with @option{-ffast-math} (or the above option combination), and
doesn't need @option{-mrecip}.

@item -mrecip=@var{opt}
@opindex mrecip=opt
This option controls which reciprocal estimate instructions
may be used.  @var{opt} is a comma-separated list of options, which may
be preceded by a @samp{!} to invert the option:

@table @samp
@item all
Enable all estimate instructions.

@item default
Enable the default instructions, equivalent to @option{-mrecip}.

@item none
Disable all estimate instructions, equivalent to @option{-mno-recip}.

@item div
Enable the approximation for scalar division.

@item vec-div
Enable the approximation for vectorized division.

@item sqrt
Enable the approximation for scalar square root.

@item vec-sqrt
Enable the approximation for vectorized square root.
@end table

So, for example, @option{-mrecip=all,!sqrt} enables
all of the reciprocal approximations, except for square root.

@item -mveclibabi=@var{type}
@opindex mveclibabi
Specifies the ABI type to use for vectorizing intrinsics using an
external library.  Supported values for @var{type} are @samp{svml} 
for the Intel short
vector math library and @samp{acml} for the AMD math core library.
To use this option, both @option{-ftree-vectorize} and
@option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML 
ABI-compatible library must be specified at link time.

GCC currently emits calls to @code{vmldExp2},
@code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
@code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
@code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
@code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
@code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
@code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
@code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
@code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
@code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin},
@code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
@code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
@code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
@code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type
when @option{-mveclibabi=acml} is used.  

@item -mabi=@var{name}
@opindex mabi
Generate code for the specified calling convention.  Permissible values
are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
@samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
You can control this behavior for specific functions by
using the function attributes @code{ms_abi} and @code{sysv_abi}.
@xref{Function Attributes}.

@item -mforce-indirect-call
@opindex mforce-indirect-call
Force all calls to functions to be indirect. This is useful
when using Intel Processor Trace where it generates more precise timing
information for function calls.

@item -mcall-ms2sysv-xlogues
@opindex mcall-ms2sysv-xlogues
@opindex mno-call-ms2sysv-xlogues
Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
System V ABI function must consider RSI, RDI and XMM6-15 as clobbered.  By
default, the code for saving and restoring these registers is emitted inline,
resulting in fairly lengthy prologues and epilogues.  Using
@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
use stubs in the static portion of libgcc to perform these saves and restores,
thus reducing function size at the cost of a few extra instructions.

@item -mtls-dialect=@var{type}
@opindex mtls-dialect
Generate code to access thread-local storage using the @samp{gnu} or
@samp{gnu2} conventions.  @samp{gnu} is the conservative default;
@samp{gnu2} is more efficient, but it may add compile- and run-time
requirements that cannot be satisfied on all systems.

@item -mpush-args
@itemx -mno-push-args
@opindex mpush-args
@opindex 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.

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

@item -mthreads
@opindex mthreads
Support thread-safe exception handling on MinGW.  Programs that rely
on thread-safe exception handling must compile and link all code with the
@option{-mthreads} option.  When compiling, @option{-mthreads} defines
@option{-D_MT}; when linking, it links in a special thread helper library
@option{-lmingwthrd} which cleans up per-thread exception-handling data.

@item -mms-bitfields
@itemx -mno-ms-bitfields
@opindex mms-bitfields
@opindex mno-ms-bitfields

Enable/disable bit-field layout compatible with the native Microsoft
Windows compiler.  

If @code{packed} is used on a structure, or if bit-fields are used,
it may be that the Microsoft ABI lays out the structure differently
than the way GCC normally does.  Particularly when moving packed
data between functions compiled with GCC and the native Microsoft compiler
(either via function call or as data in a file), it may be necessary to access
either format.

This option is enabled by default for Microsoft Windows
targets.  This behavior can also be controlled locally by use of variable
or type attributes.  For more information, see @ref{x86 Variable Attributes}
and @ref{x86 Type Attributes}.

The Microsoft structure layout algorithm is fairly simple with the exception
of the bit-field packing.  
The padding and alignment of members of structures and whether a bit-field 
can straddle a storage-unit boundary are determine by these rules:

@enumerate
@item Structure members are stored sequentially in the order in which they are
declared: the first member has the lowest memory address and the last member
the highest.

@item Every data object has an alignment requirement.  The alignment requirement
for all data except structures, unions, and arrays is either the size of the
object or the current packing size (specified with either the
@code{aligned} attribute or the @code{pack} pragma),
whichever is less.  For structures, unions, and arrays,
the alignment requirement is the largest alignment requirement of its members.
Every object is allocated an offset so that:

@smallexample
offset % alignment_requirement == 0
@end smallexample

@item Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation
unit if the integral types are the same size and if the next bit-field fits
into the current allocation unit without crossing the boundary imposed by the
common alignment requirements of the bit-fields.
@end enumerate

MSVC interprets zero-length bit-fields in the following ways:

@enumerate
@item If a zero-length bit-field is inserted between two bit-fields that
are normally coalesced, the bit-fields are not coalesced.

For example:

@smallexample
struct
 @{
   unsigned long bf_1 : 12;
   unsigned long : 0;
   unsigned long bf_2 : 12;
 @} t1;
@end smallexample

@noindent
The size of @code{t1} is 8 bytes with the zero-length bit-field.  If the
zero-length bit-field were removed, @code{t1}'s size would be 4 bytes.

@item If a zero-length bit-field is inserted after a bit-field, @code{foo}, and the
alignment of the zero-length bit-field is greater than the member that follows it,
@code{bar}, @code{bar} is aligned as the type of the zero-length bit-field.

For example:

@smallexample
struct
 @{
   char foo : 4;
   short : 0;
   char bar;
 @} t2;

struct
 @{
   char foo : 4;
   short : 0;
   double bar;
 @} t3;
@end smallexample

@noindent
For @code{t2}, @code{bar} is placed at offset 2, rather than offset 1.
Accordingly, the size of @code{t2} is 4.  For @code{t3}, the zero-length
bit-field does not affect the alignment of @code{bar} or, as a result, the size
of the structure.

Taking this into account, it is important to note the following:

@enumerate
@item If a zero-length bit-field follows a normal bit-field, the type of the
zero-length bit-field may affect the alignment of the structure as whole. For
example, @code{t2} has a size of 4 bytes, since the zero-length bit-field follows a
normal bit-field, and is of type short.

@item Even if a zero-length bit-field is not followed by a normal bit-field, it may
still affect the alignment of the structure:

@smallexample
struct
 @{
   char foo : 6;
   long : 0;
 @} t4;
@end smallexample

@noindent
Here, @code{t4} takes up 4 bytes.
@end enumerate

@item Zero-length bit-fields following non-bit-field members are ignored:

@smallexample
struct
 @{
   char foo;
   long : 0;
   char bar;
 @} t5;
@end smallexample

@noindent
Here, @code{t5} takes up 2 bytes.
@end enumerate


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

@item -minline-all-stringops
@opindex minline-all-stringops
By default GCC inlines string operations only when the destination is 
known to be aligned to least a 4-byte boundary.  
This enables more inlining and increases code
size, but may improve performance of code that depends on fast
@code{memcpy}, @code{strlen},
and @code{memset} for short lengths.

@item -minline-stringops-dynamically
@opindex minline-stringops-dynamically
For string operations of unknown size, use run-time checks with
inline code for small blocks and a library call for large blocks.

@item -mstringop-strategy=@var{alg}
@opindex mstringop-strategy=@var{alg}
Override the internal decision heuristic for the particular algorithm to use
for inlining string operations.  The allowed values for @var{alg} are:

@table @samp
@item rep_byte
@itemx rep_4byte
@itemx rep_8byte
Expand using i386 @code{rep} prefix of the specified size.

@item byte_loop
@itemx loop
@itemx unrolled_loop
Expand into an inline loop.

@item libcall
Always use a library call.
@end table

@item -mmemcpy-strategy=@var{strategy}
@opindex mmemcpy-strategy=@var{strategy}
Override the internal decision heuristic to decide if @code{__builtin_memcpy}
should be inlined and what inline algorithm to use when the expected size
of the copy operation is known. @var{strategy} 
is a comma-separated list of @var{alg}:@var{max_size}:@var{dest_align} triplets. 
@var{alg} is specified in @option{-mstringop-strategy}, @var{max_size} specifies
the max byte size with which inline algorithm @var{alg} is allowed.  For the last
triplet, the @var{max_size} must be @code{-1}. The @var{max_size} of the triplets
in the list must be specified in increasing order.  The minimal byte size for 
@var{alg} is @code{0} for the first triplet and @code{@var{max_size} + 1} of the 
preceding range.

@item -mmemset-strategy=@var{strategy}
@opindex mmemset-strategy=@var{strategy}
The option is similar to @option{-mmemcpy-strategy=} except that it is to control
@code{__builtin_memset} expansion.

@item -momit-leaf-frame-pointer
@opindex 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
@option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
which might make debugging harder.

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

For systems that use the GNU C Library, the default is on.

@item -msse2avx
@itemx -mno-sse2avx
@opindex msse2avx
Specify that the assembler should encode SSE instructions with VEX
prefix.  The option @option{-mavx} turns this on by default.

@item -mfentry
@itemx -mno-fentry
@opindex mfentry
If profiling is active (@option{-pg}), put the profiling
counter call before the prologue.
Note: On x86 architectures the attribute @code{ms_hook_prologue}
isn't possible at the moment for @option{-mfentry} and @option{-pg}.

@item -mrecord-mcount
@itemx -mno-record-mcount
@opindex mrecord-mcount
If profiling is active (@option{-pg}), generate a __mcount_loc section
that contains pointers to each profiling call. This is useful for
automatically patching and out calls.

@item -mnop-mcount
@itemx -mno-nop-mcount
@opindex mnop-mcount
If profiling is active (@option{-pg}), generate the calls to
the profiling functions as NOPs. This is useful when they
should be patched in later dynamically. This is likely only
useful together with @option{-mrecord-mcount}.

@item -mskip-rax-setup
@itemx -mno-skip-rax-setup
@opindex mskip-rax-setup
When generating code for the x86-64 architecture with SSE extensions
disabled, @option{-mskip-rax-setup} can be used to skip setting up RAX
register when there are no variable arguments passed in vector registers.

@strong{Warning:} Since RAX register is used to avoid unnecessarily
saving vector registers on stack when passing variable arguments, the
impacts of this option are callees may waste some stack space,
misbehave or jump to a random location.  GCC 4.4 or newer don't have
those issues, regardless the RAX register value.

@item -m8bit-idiv
@itemx -mno-8bit-idiv
@opindex m8bit-idiv
On some processors, like Intel Atom, 8-bit unsigned integer divide is
much faster than 32-bit/64-bit integer divide.  This option generates a
run-time check.  If both dividend and divisor are within range of 0
to 255, 8-bit unsigned integer divide is used instead of
32-bit/64-bit integer divide.

@item -mavx256-split-unaligned-load
@itemx -mavx256-split-unaligned-store
@opindex mavx256-split-unaligned-load
@opindex mavx256-split-unaligned-store
Split 32-byte AVX unaligned load and store.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default).  This option has effect only when
@option{-fstack-protector} or @option{-fstack-protector-all} is specified.

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which segment register (@code{%fs} or @code{%gs}) to use as base register
for reading the canary, and from what offset from that base register.
The default for those is as specified in the relevant ABI.

@item -mmitigate-rop
@opindex mmitigate-rop
Try to avoid generating code sequences that contain unintended return
opcodes, to mitigate against certain forms of attack. At the moment,
this option is limited in what it can do and should not be relied
on to provide serious protection.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code that uses only the general-purpose registers.  This
prevents the compiler from using floating-point, vector, mask and bound
registers.

@item -mindirect-branch=@var{choice}
@opindex -mindirect-branch
Convert indirect call and jump with @var{choice}.  The default is
@samp{keep}, which keeps indirect call and jump unmodified.
@samp{thunk} converts indirect call and jump to call and return thunk.
@samp{thunk-inline} converts indirect call and jump to inlined call
and return thunk.  @samp{thunk-extern} converts indirect call and jump
to external call and return thunk provided in a separate object file.
You can control this behavior for a specific function by using the
function attribute @code{indirect_branch}.  @xref{Function Attributes}.

Note that @option{-mcmodel=large} is incompatible with
@option{-mindirect-branch=thunk} and
@option{-mindirect-branch=thunk-extern} since the thunk function may
not be reachable in the large code model.

Note that @option{-mindirect-branch=thunk-extern} is incompatible with
@option{-fcf-protection=branch} and @option{-fcheck-pointer-bounds}
since the external thunk can not be modified to disable control-flow
check.

@item -mfunction-return=@var{choice}
@opindex -mfunction-return
Convert function return with @var{choice}.  The default is @samp{keep},
which keeps function return unmodified.  @samp{thunk} converts function
return to call and return thunk.  @samp{thunk-inline} converts function
return to inlined call and return thunk.  @samp{thunk-extern} converts
function return to external call and return thunk provided in a separate
object file.  You can control this behavior for a specific function by
using the function attribute @code{function_return}.
@xref{Function Attributes}.

Note that @option{-mcmodel=large} is incompatible with
@option{-mfunction-return=thunk} and
@option{-mfunction-return=thunk-extern} since the thunk function may
not be reachable in the large code model.


@item -mindirect-branch-register
@opindex -mindirect-branch-register
Force indirect call and jump via register.

@end table

These @samp{-m} switches are supported in addition to the above
on x86-64 processors in 64-bit environments.

@table @gcctabopt
@item -m32
@itemx -m64
@itemx -mx32
@itemx -m16
@itemx -miamcu
@opindex m32
@opindex m64
@opindex mx32
@opindex m16
@opindex miamcu
Generate code for a 16-bit, 32-bit or 64-bit environment.
The @option{-m32} option sets @code{int}, @code{long}, and pointer types
to 32 bits, and
generates code that runs on any i386 system.

The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
types to 64 bits, and generates code for the x86-64 architecture.
For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
and @option{-mdynamic-no-pic} options.

The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
to 32 bits, and
generates code for the x86-64 architecture.

The @option{-m16} option is the same as @option{-m32}, except for that
it outputs the @code{.code16gcc} assembly directive at the beginning of
the assembly output so that the binary can run in 16-bit mode.

The @option{-miamcu} option generates code which conforms to Intel MCU
psABI.  It requires the @option{-m32} option to be turned on.

@item -mno-red-zone
@opindex 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 is not modified by signal or interrupt handlers
and therefore can be used for temporary data without adjusting the stack
pointer.  The flag @option{-mno-red-zone} disables this red zone.

@item -mcmodel=small
@opindex 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.

@item -mcmodel=kernel
@opindex 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.

@item -mcmodel=medium
@opindex mcmodel=medium
Generate code for the medium model: the program is linked in the lower 2
GB of the address space.  Small symbols are also placed there.  Symbols
with sizes larger than @option{-mlarge-data-threshold} are put into
large data or BSS sections and can be located above 2GB.  Programs can
be statically or dynamically linked.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large model.  This model makes no assumptions
about addresses and sizes of sections.

@item -maddress-mode=long
@opindex maddress-mode=long
Generate code for long address mode.  This is only supported for 64-bit
and x32 environments.  It is the default address mode for 64-bit
environments.

@item -maddress-mode=short
@opindex maddress-mode=short
Generate code for short address mode.  This is only supported for 32-bit
and x32 environments.  It is the default address mode for 32-bit and
x32 environments.
@end table

@node x86 Windows Options
@subsection x86 Windows Options
@cindex x86 Windows Options
@cindex Windows Options for x86

These additional options are available for Microsoft Windows targets:

@table @gcctabopt
@item -mconsole
@opindex mconsole
This option
specifies that a console application is to be generated, by
instructing the linker to set the PE header subsystem type
required for console applications.
This option is available for Cygwin and MinGW targets and is
enabled by default on those targets.

@item -mdll
@opindex mdll
This option is available for Cygwin and MinGW targets.  It
specifies that a DLL---a dynamic link library---is to be
generated, enabling the selection of the required runtime
startup object and entry point.

@item -mnop-fun-dllimport
@opindex mnop-fun-dllimport
This option is available for Cygwin and MinGW targets.  It
specifies that the @code{dllimport} attribute should be ignored.

@item -mthread
@opindex mthread
This option is available for MinGW targets. It specifies
that MinGW-specific thread support is to be used.

@item -municode
@opindex municode
This option is available for MinGW-w64 targets.  It causes
the @code{UNICODE} preprocessor macro to be predefined, and
chooses Unicode-capable runtime startup code.

@item -mwin32
@opindex mwin32
This option is available for Cygwin and MinGW targets.  It
specifies that the typical Microsoft Windows predefined macros are to
be set in the pre-processor, but does not influence the choice
of runtime library/startup code.

@item -mwindows
@opindex mwindows
This option is available for Cygwin and MinGW targets.  It
specifies that a GUI application is to be generated by
instructing the linker to set the PE header subsystem type
appropriately.

@item -fno-set-stack-executable
@opindex fno-set-stack-executable
This option is available for MinGW targets. It specifies that
the executable flag for the stack used by nested functions isn't
set. This is necessary for binaries running in kernel mode of
Microsoft Windows, as there the User32 API, which is used to set executable
privileges, isn't available.

@item -fwritable-relocated-rdata
@opindex fno-writable-relocated-rdata
This option is available for MinGW and Cygwin targets.  It specifies
that relocated-data in read-only section is put into the @code{.data}
section.  This is a necessary for older runtimes not supporting
modification of @code{.rdata} sections for pseudo-relocation.

@item -mpe-aligned-commons
@opindex mpe-aligned-commons
This option is available for Cygwin and MinGW targets.  It
specifies that the GNU extension to the PE file format that
permits the correct alignment of COMMON variables should be
used when generating code.  It is enabled by default if
GCC detects that the target assembler found during configuration
supports the feature.
@end table

See also under @ref{x86 Options} for standard options.

@node Xstormy16 Options
@subsection Xstormy16 Options
@cindex Xstormy16 Options

These options are defined for Xstormy16:

@table @gcctabopt
@item -msim
@opindex msim
Choose startup files and linker script suitable for the simulator.
@end table

@node Xtensa Options
@subsection Xtensa Options
@cindex Xtensa Options

These options are supported for Xtensa targets:

@table @gcctabopt
@item -mconst16
@itemx -mno-const16
@opindex mconst16
@opindex mno-const16
Enable or disable use of @code{CONST16} instructions for loading
constant values.  The @code{CONST16} instruction is currently not a
standard option from Tensilica.  When enabled, @code{CONST16}
instructions are always used in place of the standard @code{L32R}
instructions.  The use of @code{CONST16} is enabled by default only if
the @code{L32R} instruction is not available.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Enable or disable use of fused multiply/add and multiply/subtract
instructions in the floating-point option.  This has no effect if the
floating-point option is not also enabled.  Disabling fused multiply/add
and multiply/subtract instructions forces the compiler to use separate
instructions for the multiply and add/subtract operations.  This may be
desirable in some cases where strict IEEE 754-compliant results are
required: the fused multiply add/subtract instructions do not round the
intermediate result, thereby producing results with @emph{more} bits of
precision than specified by the IEEE standard.  Disabling fused multiply
add/subtract instructions also ensures that the program output is not
sensitive to the compiler's ability to combine multiply and add/subtract
operations.

@item -mserialize-volatile
@itemx -mno-serialize-volatile
@opindex mserialize-volatile
@opindex mno-serialize-volatile
When this option is enabled, GCC inserts @code{MEMW} instructions before
@code{volatile} memory references to guarantee sequential consistency.
The default is @option{-mserialize-volatile}.  Use
@option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.

@item -mforce-no-pic
@opindex mforce-no-pic
For targets, like GNU/Linux, where all user-mode Xtensa code must be
position-independent code (PIC), this option disables PIC for compiling
kernel code.

@item -mtext-section-literals
@itemx -mno-text-section-literals
@opindex mtext-section-literals
@opindex mno-text-section-literals
These options control the treatment of literal pools.  The default is
@option{-mno-text-section-literals}, which places literals in a separate
section in the output file.  This allows the literal pool to be placed
in a data RAM/ROM, and it also allows the linker to combine literal
pools from separate object files to remove redundant literals and
improve code size.  With @option{-mtext-section-literals}, the literals
are interspersed in the text section in order to keep them as close as
possible to their references.  This may be necessary for large assembly
files.  Literals for each function are placed right before that function.

@item -mauto-litpools
@itemx -mno-auto-litpools
@opindex mauto-litpools
@opindex mno-auto-litpools
These options control the treatment of literal pools.  The default is
@option{-mno-auto-litpools}, which places literals in a separate
section in the output file unless @option{-mtext-section-literals} is
used.  With @option{-mauto-litpools} the literals are interspersed in
the text section by the assembler.  Compiler does not produce explicit
@code{.literal} directives and loads literals into registers with
@code{MOVI} instructions instead of @code{L32R} to let the assembler
do relaxation and place literals as necessary.  This option allows
assembler to create several literal pools per function and assemble
very big functions, which may not be possible with
@option{-mtext-section-literals}.

@item -mtarget-align
@itemx -mno-target-align
@opindex mtarget-align
@opindex mno-target-align
When this option is enabled, GCC instructs the assembler to
automatically align instructions to reduce branch penalties at the
expense of some code density.  The assembler attempts to widen density
instructions to align branch targets and the instructions following call
instructions.  If there are not enough preceding safe density
instructions to align a target, no widening is performed.  The
default is @option{-mtarget-align}.  These options do not affect the
treatment of auto-aligned instructions like @code{LOOP}, which the
assembler always aligns, either by widening density instructions or
by inserting NOP instructions.

@item -mlongcalls
@itemx -mno-longcalls
@opindex mlongcalls
@opindex mno-longcalls
When this option is enabled, GCC instructs the assembler to translate
direct calls to indirect calls unless it can determine that the target
of a direct call is in the range allowed by the call instruction.  This
translation typically occurs for calls to functions in other source
files.  Specifically, the assembler translates a direct @code{CALL}
instruction into an @code{L32R} followed by a @code{CALLX} instruction.
The default is @option{-mno-longcalls}.  This option should be used in
programs where the call target can potentially be out of range.  This
option is implemented in the assembler, not the compiler, so the
assembly code generated by GCC still shows direct call
instructions---look at the disassembled object code to see the actual
instructions.  Note that the assembler uses an indirect call for
every cross-file call, not just those that really are out of range.
@end table

@node zSeries Options
@subsection zSeries Options
@cindex zSeries options

These are listed under @xref{S/390 and zSeries Options}.


@c man end

@node Spec Files
@section Specifying Subprocesses and the Switches to Pass to Them
@cindex Spec Files

@command{gcc} is a driver program.  It performs its job by invoking a
sequence of other programs to do the work of compiling, assembling and
linking.  GCC interprets its command-line parameters and uses these to
deduce which programs it should invoke, and which command-line options
it ought to place on their command lines.  This behavior is controlled
by @dfn{spec strings}.  In most cases there is one spec string for each
program that GCC can invoke, but a few programs have multiple spec
strings to control their behavior.  The spec strings built into GCC can
be overridden by using the @option{-specs=} command-line switch to specify
a spec file.

@dfn{Spec files} are plain-text files that are used to construct spec
strings.  They consist of a sequence of directives separated by blank
lines.  The type of directive is determined by the first non-whitespace
character on the line, which can be one of the following:

@table @code
@item %@var{command}
Issues a @var{command} to the spec file processor.  The commands that can
appear here are:

@table @code
@item %include <@var{file}>
@cindex @code{%include}
Search for @var{file} and insert its text at the current point in the
specs file.

@item %include_noerr <@var{file}>
@cindex @code{%include_noerr}
Just like @samp{%include}, but do not generate an error message if the include
file cannot be found.

@item %rename @var{old_name} @var{new_name}
@cindex @code{%rename}
Rename the spec string @var{old_name} to @var{new_name}.

@end table

@item *[@var{spec_name}]:
This tells the compiler to create, override or delete the named spec
string.  All lines after this directive up to the next directive or
blank line are considered to be the text for the spec string.  If this
results in an empty string then the spec is deleted.  (Or, if the
spec did not exist, then nothing happens.)  Otherwise, if the spec
does not currently exist a new spec is created.  If the spec does
exist then its contents are overridden by the text of this
directive, unless the first character of that text is the @samp{+}
character, in which case the text is appended to the spec.

@item [@var{suffix}]:
Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
and up to the next directive or blank line are considered to make up the
spec string for the indicated suffix.  When the compiler encounters an
input file with the named suffix, it processes the spec string in
order to work out how to compile that file.  For example:

@smallexample
.ZZ:
z-compile -input %i
@end smallexample

This says that any input file whose name ends in @samp{.ZZ} should be
passed to the program @samp{z-compile}, which should be invoked with the
command-line switch @option{-input} and with the result of performing the
@samp{%i} substitution.  (See below.)

As an alternative to providing a spec string, the text following a
suffix directive can be one of the following:

@table @code
@item @@@var{language}
This says that the suffix is an alias for a known @var{language}.  This is
similar to using the @option{-x} command-line switch to GCC to specify a
language explicitly.  For example:

@smallexample
.ZZ:
@@c++
@end smallexample

Says that .ZZ files are, in fact, C++ source files.

@item #@var{name}
This causes an error messages saying:

@smallexample
@var{name} compiler not installed on this system.
@end smallexample
@end table

GCC already has an extensive list of suffixes built into it.
This directive adds an entry to the end of the list of suffixes, but
since the list is searched from the end backwards, it is effectively
possible to override earlier entries using this technique.

@end table

GCC has the following spec strings built into it.  Spec files can
override these strings or create their own.  Note that individual
targets can also add their own spec strings to this list.

@smallexample
asm          Options to pass to the assembler
asm_final    Options to pass to the assembler post-processor
cpp          Options to pass to the C preprocessor
cc1          Options to pass to the C compiler
cc1plus      Options to pass to the C++ compiler
endfile      Object files to include at the end of the link
link         Options to pass to the linker
lib          Libraries to include on the command line to the linker
libgcc       Decides which GCC support library to pass to the linker
linker       Sets the name of the linker
predefines   Defines to be passed to the C preprocessor
signed_char  Defines to pass to CPP to say whether @code{char} is signed
             by default
startfile    Object files to include at the start of the link
@end smallexample

Here is a small example of a spec file:

@smallexample
%rename lib                 old_lib

*lib:
--start-group -lgcc -lc -leval1 --end-group %(old_lib)
@end smallexample

This example renames the spec called @samp{lib} to @samp{old_lib} and
then overrides the previous definition of @samp{lib} with a new one.
The new definition adds in some extra command-line options before
including the text of the old definition.

@dfn{Spec strings} are a list of command-line options to be passed to their
corresponding program.  In addition, the spec strings can contain
@samp{%}-prefixed sequences to substitute variable text or to
conditionally insert text into the command line.  Using these constructs
it is possible to generate quite complex command lines.

Here is a table of all defined @samp{%}-sequences for spec
strings.  Note that spaces are not generated automatically around the
results of expanding these sequences.  Therefore you can concatenate them
together or combine them with constant text in a single argument.

@table @code
@item %%
Substitute one @samp{%} into the program name or argument.

@item %i
Substitute the name of the input file being processed.

@item %b
Substitute the basename of the input file being processed.
This is the substring up to (and not including) the last period
and not including the directory.

@item %B
This is the same as @samp{%b}, but include the file suffix (text after
the last period).

@item %d
Marks the argument containing or following the @samp{%d} as a
temporary file name, so that that file is deleted if GCC exits
successfully.  Unlike @samp{%g}, this contributes no text to the
argument.

@item %g@var{suffix}
Substitute a file name that has suffix @var{suffix} and is chosen
once per compilation, and mark the argument in the same way as
@samp{%d}.  To reduce exposure to denial-of-service attacks, the file
name is now chosen in a way that is hard to predict even when previously
chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
was simply substituted with a file name chosen once per compilation,
without regard to any appended suffix (which was therefore treated
just like ordinary text), making such attacks more likely to succeed.

@item %u@var{suffix}
Like @samp{%g}, but generates a new temporary file name
each time it appears instead of once per compilation.

@item %U@var{suffix}
Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
new one if there is no such last file name.  In the absence of any
@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
involves the generation of two distinct file names, one
for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
simply substituted with a file name chosen for the previous @samp{%u},
without regard to any appended suffix.

@item %j@var{suffix}
Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
writable, and if @option{-save-temps} is not used; 
otherwise, substitute the name
of a temporary file, just like @samp{%u}.  This temporary file is not
meant for communication between processes, but rather as a junk
disposal mechanism.

@item %|@var{suffix}
@itemx %m@var{suffix}
Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
all.  These are the two most common ways to instruct a program that it
should read from standard input or write to standard output.  If you
need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
construct: see for example @file{f/lang-specs.h}.

@item %.@var{SUFFIX}
Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
terminated by the next space or %.

@item %w
Marks the argument containing or following the @samp{%w} as the
designated output file of this compilation.  This puts the argument
into the sequence of arguments that @samp{%o} substitutes.

@item %o
Substitutes the names of all the output files, with spaces
automatically placed around them.  You should write spaces
around the @samp{%o} as well or the results are undefined.
@samp{%o} is for use in the specs for running the linker.
Input files whose names have no recognized suffix are not compiled
at all, but they are included among the output files, so they are
linked.

@item %O
Substitutes the suffix for object files.  Note that this is
handled specially when it immediately follows @samp{%g, %u, or %U},
because of the need for those to form complete file names.  The
handling is such that @samp{%O} is treated exactly as if it had already
been substituted, except that @samp{%g, %u, and %U} do not currently
support additional @var{suffix} characters following @samp{%O} as they do
following, for example, @samp{.o}.

@item %p
Substitutes the standard macro predefinitions for the
current target machine.  Use this when running @command{cpp}.

@item %P
Like @samp{%p}, but puts @samp{__} before and after the name of each
predefined macro, except for macros that start with @samp{__} or with
@samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
C@.

@item %I
Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
and @option{-imultilib} as necessary.

@item %s
Current argument is the name of a library or startup file of some sort.
Search for that file in a standard list of directories and substitute
the full name found.  The current working directory is included in the
list of directories scanned.

@item %T
Current argument is the name of a linker script.  Search for that file
in the current list of directories to scan for libraries. If the file
is located insert a @option{--script} option into the command line
followed by the full path name found.  If the file is not found then
generate an error message.  Note: the current working directory is not
searched.

@item %e@var{str}
Print @var{str} as an error message.  @var{str} is terminated by a newline.
Use this when inconsistent options are detected.

@item %(@var{name})
Substitute the contents of spec string @var{name} at this point.

@item %x@{@var{option}@}
Accumulate an option for @samp{%X}.

@item %X
Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
spec string.

@item %Y
Output the accumulated assembler options specified by @option{-Wa}.

@item %Z
Output the accumulated preprocessor options specified by @option{-Wp}.

@item %a
Process the @code{asm} spec.  This is used to compute the
switches to be passed to the assembler.

@item %A
Process the @code{asm_final} spec.  This is a spec string for
passing switches to an assembler post-processor, if such a program is
needed.

@item %l
Process the @code{link} spec.  This is the spec for computing the
command line passed to the linker.  Typically it makes use of the
@samp{%L %G %S %D and %E} sequences.

@item %D
Dump out a @option{-L} option for each directory that GCC believes might
contain startup files.  If the target supports multilibs then the
current multilib directory is prepended to each of these paths.

@item %L
Process the @code{lib} spec.  This is a spec string for deciding which
libraries are included on the command line to the linker.

@item %G
Process the @code{libgcc} spec.  This is a spec string for deciding
which GCC support library is included on the command line to the linker.

@item %S
Process the @code{startfile} spec.  This is a spec for deciding which
object files are the first ones passed to the linker.  Typically
this might be a file named @file{crt0.o}.

@item %E
Process the @code{endfile} spec.  This is a spec string that specifies
the last object files that are passed to the linker.

@item %C
Process the @code{cpp} spec.  This is used to construct the arguments
to be passed to the C preprocessor.

@item %1
Process the @code{cc1} spec.  This is used to construct the options to be
passed to the actual C compiler (@command{cc1}).

@item %2
Process the @code{cc1plus} spec.  This is used to construct the options to be
passed to the actual C++ compiler (@command{cc1plus}).

@item %*
Substitute the variable part of a matched option.  See below.
Note that each comma in the substituted string is replaced by
a single space.

@item %<S
Remove all occurrences of @code{-S} from the command line.  Note---this
command is position dependent.  @samp{%} commands in the spec string
before this one see @code{-S}, @samp{%} commands in the spec string
after this one do not.

@item %:@var{function}(@var{args})
Call the named function @var{function}, passing it @var{args}.
@var{args} is first processed as a nested spec string, then split
into an argument vector in the usual fashion.  The function returns
a string which is processed as if it had appeared literally as part
of the current spec.

The following built-in spec functions are provided:

@table @code
@item @code{getenv}
The @code{getenv} spec function takes two arguments: an environment
variable name and a string.  If the environment variable is not
defined, a fatal error is issued.  Otherwise, the return value is the
value of the environment variable concatenated with the string.  For
example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:

@smallexample
%:getenv(TOPDIR /include)
@end smallexample

expands to @file{/path/to/top/include}.

@item @code{if-exists}
The @code{if-exists} spec function takes one argument, an absolute
pathname to a file.  If the file exists, @code{if-exists} returns the
pathname.  Here is a small example of its usage:

@smallexample
*startfile:
crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
@end smallexample

@item @code{if-exists-else}
The @code{if-exists-else} spec function is similar to the @code{if-exists}
spec function, except that it takes two arguments.  The first argument is
an absolute pathname to a file.  If the file exists, @code{if-exists-else}
returns the pathname.  If it does not exist, it returns the second argument.
This way, @code{if-exists-else} can be used to select one file or another,
based on the existence of the first.  Here is a small example of its usage:

@smallexample
*startfile:
crt0%O%s %:if-exists(crti%O%s) \
%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
@end smallexample

@item @code{replace-outfile}
The @code{replace-outfile} spec function takes two arguments.  It looks for the
first argument in the outfiles array and replaces it with the second argument.  Here
is a small example of its usage:

@smallexample
%@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
@end smallexample

@item @code{remove-outfile}
The @code{remove-outfile} spec function takes one argument.  It looks for the
first argument in the outfiles array and removes it.  Here is a small example
its usage:

@smallexample
%:remove-outfile(-lm)
@end smallexample

@item @code{pass-through-libs}
The @code{pass-through-libs} spec function takes any number of arguments.  It
finds any @option{-l} options and any non-options ending in @file{.a} (which it
assumes are the names of linker input library archive files) and returns a
result containing all the found arguments each prepended by
@option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
intended to be passed to the LTO linker plugin.

@smallexample
%:pass-through-libs(%G %L %G)
@end smallexample

@item @code{print-asm-header}
The @code{print-asm-header} function takes no arguments and simply
prints a banner like:

@smallexample
Assembler options
=================

Use "-Wa,OPTION" to pass "OPTION" to the assembler.
@end smallexample

It is used to separate compiler options from assembler options
in the @option{--target-help} output.
@end table

@item %@{S@}
Substitutes the @code{-S} switch, if that switch is given to GCC@.
If that switch is not specified, this substitutes nothing.  Note that
the leading dash is omitted when specifying this option, and it is
automatically inserted if the substitution is performed.  Thus the spec
string @samp{%@{foo@}} matches the command-line option @option{-foo}
and outputs the command-line option @option{-foo}.

@item %W@{S@}
Like %@{@code{S}@} but mark last argument supplied within as a file to be
deleted on failure.

@item %@{S*@}
Substitutes all the switches specified to GCC whose names start
with @code{-S}, but which also take an argument.  This is used for
switches like @option{-o}, @option{-D}, @option{-I}, etc.
GCC considers @option{-o foo} as being
one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
text, including the space.  Thus two arguments are generated.

@item %@{S*&T*@}
Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
(the order of @code{S} and @code{T} in the spec is not significant).
There can be any number of ampersand-separated variables; for each the
wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.

@item %@{S:X@}
Substitutes @code{X}, if the @option{-S} switch is given to GCC@.

@item %@{!S:X@}
Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.

@item %@{S*:X@}
Substitutes @code{X} if one or more switches whose names start with
@code{-S} are specified to GCC@.  Normally @code{X} is substituted only
once, no matter how many such switches appeared.  However, if @code{%*}
appears somewhere in @code{X}, then @code{X} is substituted once
for each matching switch, with the @code{%*} replaced by the part of
that switch matching the @code{*}.

If @code{%*} appears as the last part of a spec sequence then a space
is added after the end of the last substitution.  If there is more
text in the sequence, however, then a space is not generated.  This
allows the @code{%*} substitution to be used as part of a larger
string.  For example, a spec string like this:

@smallexample
%@{mcu=*:--script=%*/memory.ld@}
@end smallexample

@noindent
when matching an option like @option{-mcu=newchip} produces:

@smallexample
--script=newchip/memory.ld
@end smallexample

@item %@{.S:X@}
Substitutes @code{X}, if processing a file with suffix @code{S}.

@item %@{!.S:X@}
Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.

@item %@{,S:X@}
Substitutes @code{X}, if processing a file for language @code{S}.

@item %@{!,S:X@}
Substitutes @code{X}, if not processing a file for language @code{S}.

@item %@{S|P:X@}
Substitutes @code{X} if either @code{-S} or @code{-P} is given to
GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
@code{*} sequences as well, although they have a stronger binding than
the @samp{|}.  If @code{%*} appears in @code{X}, all of the
alternatives must be starred, and only the first matching alternative
is substituted.

For example, a spec string like this:

@smallexample
%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
@end smallexample

@noindent
outputs the following command-line options from the following input
command-line options:

@smallexample
fred.c        -foo -baz
jim.d         -bar -boggle
-d fred.c     -foo -baz -boggle
-d jim.d      -bar -baz -boggle
@end smallexample

@item %@{S:X; T:Y; :D@}

If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
be as many clauses as you need.  This may be combined with @code{.},
@code{,}, @code{!}, @code{|}, and @code{*} as needed.


@end table

The switch matching text @code{S} in a @samp{%@{S@}}, @samp{%@{S:X@}}
or similar construct can use a backslash to ignore the special meaning
of the character following it, thus allowing literal matching of a
character that is otherwise specially treated.  For example,
@samp{%@{std=iso9899\:1999:X@}} substitutes @code{X} if the
@option{-std=iso9899:1999} option is given.

The conditional text @code{X} in a @samp{%@{S:X@}} or similar
construct may contain other nested @samp{%} constructs or spaces, or
even newlines.  They are processed as usual, as described above.
Trailing white space in @code{X} is ignored.  White space may also
appear anywhere on the left side of the colon in these constructs,
except between @code{.} or @code{*} and the corresponding word.

The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
handled specifically in these constructs.  If another value of
@option{-O} or the negated form of a @option{-f}, @option{-m}, or
@option{-W} switch is found later in the command line, the earlier
switch value is ignored, except with @{@code{S}*@} where @code{S} is
just one letter, which passes all matching options.

The character @samp{|} at the beginning of the predicate text is used to
indicate that a command should be piped to the following command, but
only if @option{-pipe} is specified.

It is built into GCC which switches take arguments and which do not.
(You might think it would be useful to generalize this to allow each
compiler's spec to say which switches take arguments.  But this cannot
be done in a consistent fashion.  GCC cannot even decide which input
files have been specified without knowing which switches take arguments,
and it must know which input files to compile in order to tell which
compilers to run).

GCC also knows implicitly that arguments starting in @option{-l} are to be
treated as compiler output files, and passed to the linker in their
proper position among the other output files.

@node Environment Variables
@section Environment Variables Affecting GCC
@cindex environment variables

@c man begin ENVIRONMENT
This section describes several environment variables that affect how GCC
operates.  Some of them work by specifying directories or prefixes to use
when searching for various kinds of files.  Some are used to specify other
aspects of the compilation environment.

Note that you can also specify places to search using options such as
@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
take precedence over places specified using environment variables, which
in turn take precedence over those specified by the configuration of GCC@.
@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
GNU Compiler Collection (GCC) Internals}.

@table @env
@item LANG
@itemx LC_CTYPE
@c @itemx LC_COLLATE
@itemx LC_MESSAGES
@c @itemx LC_MONETARY
@c @itemx LC_NUMERIC
@c @itemx LC_TIME
@itemx LC_ALL
@findex LANG
@findex LC_CTYPE
@c @findex LC_COLLATE
@findex LC_MESSAGES
@c @findex LC_MONETARY
@c @findex LC_NUMERIC
@c @findex LC_TIME
@findex LC_ALL
@cindex locale
These environment variables control the way that GCC uses
localization information which allows GCC to work with different
national conventions.  GCC inspects the locale categories
@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
so.  These locale categories can be set to any value supported by your
installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
Kingdom encoded in UTF-8.

The @env{LC_CTYPE} environment variable specifies character
classification.  GCC uses it to determine the character boundaries in
a string; this is needed for some multibyte encodings that contain quote
and escape characters that are otherwise interpreted as a string
end or escape.

The @env{LC_MESSAGES} environment variable specifies the language to
use in diagnostic messages.

If the @env{LC_ALL} environment variable is set, it overrides the value
of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
and @env{LC_MESSAGES} default to the value of the @env{LANG}
environment variable.  If none of these variables are set, GCC
defaults to traditional C English behavior.

@item TMPDIR
@findex TMPDIR
If @env{TMPDIR} is set, it specifies the directory to use for temporary
files.  GCC uses temporary files to hold the output of one stage of
compilation which is to be used as input to the next stage: for example,
the output of the preprocessor, which is the input to the compiler
proper.

@item GCC_COMPARE_DEBUG
@findex GCC_COMPARE_DEBUG
Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
@option{-fcompare-debug} to the compiler driver.  See the documentation
of this option for more details.

@item GCC_EXEC_PREFIX
@findex GCC_EXEC_PREFIX
If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
names of the subprograms executed by the compiler.  No slash is added
when this prefix is combined with the name of a subprogram, but you can
specify a prefix that ends with a slash if you wish.

If @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
an appropriate prefix to use based on the pathname it is invoked with.

If GCC cannot find the subprogram using the specified prefix, it
tries looking in the usual places for the subprogram.

The default value of @env{GCC_EXEC_PREFIX} is
@file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
the installed compiler. In many cases @var{prefix} is the value
of @code{prefix} when you ran the @file{configure} script.

Other prefixes specified with @option{-B} take precedence over this prefix.

This prefix is also used for finding files such as @file{crt0.o} that are
used for linking.

In addition, the prefix is used in an unusual way in finding the
directories to search for header files.  For each of the standard
directories whose name normally begins with @samp{/usr/local/lib/gcc}
(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
replacing that beginning with the specified prefix to produce an
alternate directory name.  Thus, with @option{-Bfoo/}, GCC searches
@file{foo/bar} just before it searches the standard directory 
@file{/usr/local/lib/bar}.
If a standard directory begins with the configured
@var{prefix} then the value of @var{prefix} is replaced by
@env{GCC_EXEC_PREFIX} when looking for header files.

@item COMPILER_PATH
@findex COMPILER_PATH
The value of @env{COMPILER_PATH} is a colon-separated list of
directories, much like @env{PATH}.  GCC tries the directories thus
specified when searching for subprograms, if it cannot find the
subprograms using @env{GCC_EXEC_PREFIX}.

@item LIBRARY_PATH
@findex LIBRARY_PATH
The value of @env{LIBRARY_PATH} is a colon-separated list of
directories, much like @env{PATH}.  When configured as a native compiler,
GCC tries the directories thus specified when searching for special
linker files, if it cannot find them using @env{GCC_EXEC_PREFIX}.  Linking
using GCC also uses these directories when searching for ordinary
libraries for the @option{-l} option (but directories specified with
@option{-L} come first).

@item LANG
@findex LANG
@cindex locale definition
This variable is used to pass locale information to the compiler.  One way in
which this information is used is to determine the character set to be used
when character literals, string literals and comments are parsed in C and C++.
When the compiler is configured to allow multibyte characters,
the following values for @env{LANG} are recognized:

@table @samp
@item C-JIS
Recognize JIS characters.
@item C-SJIS
Recognize SJIS characters.
@item C-EUCJP
Recognize EUCJP characters.
@end table

If @env{LANG} is not defined, or if it has some other value, then the
compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
recognize and translate multibyte characters.
@end table

@noindent
Some additional environment variables affect the behavior of the
preprocessor.

@include cppenv.texi

@c man end

@node Precompiled Headers
@section Using Precompiled Headers
@cindex precompiled headers
@cindex speed of compilation

Often large projects have many header files that are included in every
source file.  The time the compiler takes to process these header files
over and over again can account for nearly all of the time required to
build the project.  To make builds faster, GCC allows you to
@dfn{precompile} a header file.

To create a precompiled header file, simply compile it as you would any
other file, if necessary using the @option{-x} option to make the driver
treat it as a C or C++ header file.  You may want to use a
tool like @command{make} to keep the precompiled header up-to-date when
the headers it contains change.

A precompiled header file is searched for when @code{#include} is
seen in the compilation.  As it searches for the included file
(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
compiler looks for a precompiled header in each directory just before it
looks for the include file in that directory.  The name searched for is
the name specified in the @code{#include} with @samp{.gch} appended.  If
the precompiled header file cannot be used, it is ignored.

For instance, if you have @code{#include "all.h"}, and you have
@file{all.h.gch} in the same directory as @file{all.h}, then the
precompiled header file is used if possible, and the original
header is used otherwise.

Alternatively, you might decide to put the precompiled header file in a
directory and use @option{-I} to ensure that directory is searched
before (or instead of) the directory containing the original header.
Then, if you want to check that the precompiled header file is always
used, you can put a file of the same name as the original header in this
directory containing an @code{#error} command.

This also works with @option{-include}.  So yet another way to use
precompiled headers, good for projects not designed with precompiled
header files in mind, is to simply take most of the header files used by
a project, include them from another header file, precompile that header
file, and @option{-include} the precompiled header.  If the header files
have guards against multiple inclusion, they are skipped because
they've already been included (in the precompiled header).

If you need to precompile the same header file for different
languages, targets, or compiler options, you can instead make a
@emph{directory} named like @file{all.h.gch}, and put each precompiled
header in the directory, perhaps using @option{-o}.  It doesn't matter
what you call the files in the directory; every precompiled header in
the directory is considered.  The first precompiled header
encountered in the directory that is valid for this compilation is
used; they're searched in no particular order.

There are many other possibilities, limited only by your imagination,
good sense, and the constraints of your build system.

A precompiled header file can be used only when these conditions apply:

@itemize
@item
Only one precompiled header can be used in a particular compilation.

@item
A precompiled header cannot be used once the first C token is seen.  You
can have preprocessor directives before a precompiled header; you cannot
include a precompiled header from inside another header.

@item
The precompiled header file must be produced for the same language as
the current compilation.  You cannot use a C precompiled header for a C++
compilation.

@item
The precompiled header file must have been produced by the same compiler
binary as the current compilation is using.

@item
Any macros defined before the precompiled header is included must
either be defined in the same way as when the precompiled header was
generated, or must not affect the precompiled header, which usually
means that they don't appear in the precompiled header at all.

The @option{-D} option is one way to define a macro before a
precompiled header is included; using a @code{#define} can also do it.
There are also some options that define macros implicitly, like
@option{-O} and @option{-Wdeprecated}; the same rule applies to macros
defined this way.

@item If debugging information is output when using the precompiled
header, using @option{-g} or similar, the same kind of debugging information
must have been output when building the precompiled header.  However,
a precompiled header built using @option{-g} can be used in a compilation
when no debugging information is being output.

@item The same @option{-m} options must generally be used when building
and using the precompiled header.  @xref{Submodel Options},
for any cases where this rule is relaxed.

@item Each of the following options must be the same when building and using
the precompiled header:

@gccoptlist{-fexceptions}

@item
Some other command-line options starting with @option{-f},
@option{-p}, or @option{-O} must be defined in the same way as when
the precompiled header was generated.  At present, it's not clear
which options are safe to change and which are not; the safest choice
is to use exactly the same options when generating and using the
precompiled header.  The following are known to be safe:

@gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
-fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
-fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
-pedantic-errors}

@end itemize

For all of these except the last, the compiler automatically
ignores the precompiled header if the conditions aren't met.  If you
find an option combination that doesn't work and doesn't cause the
precompiled header to be ignored, please consider filing a bug report,
see @ref{Bugs}.

If you do use differing options when generating and using the
precompiled header, the actual behavior is a mixture of the
behavior for the options.  For instance, if you use @option{-g} to
generate the precompiled header but not when using it, you may or may
not get debugging information for routines in the precompiled header.
