X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gcc%2Fdoc%2Finvoke.texi;h=b6c7665353439ba7a2f9bca9928f0f07d1d5a45e;hb=863d2a5760cc1e9c2e64ab97c471cd37b7e254ca;hp=0761733170e6b216a429afbea754f34b9df879dd;hpb=f85138bc84767bdbf1e405461578432629df11a7;p=platform%2Fupstream%2Fgcc.git diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 0761733..b6c7665 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -315,54 +315,52 @@ Objective-C and Objective-C++ Dialects}. @item Optimization Options @xref{Optimize Options,,Options that Control Optimization}. -@gccoptlist{-falign-functions=@var{n} -falign-jumps=@var{n} @gol --falign-labels=@var{n} -falign-loops=@var{n} @gol --fbounds-check -fmudflap -fmudflapth -fmudflapir @gol --fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol --fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol --fcaller-saves -fcprop-registers -fcse-follow-jumps @gol --fcse-skip-blocks -fcx-limited-range -fdata-sections @gol --fdelayed-branch -fdelete-null-pointer-checks -fearly-inlining @gol --fexpensive-optimizations -ffast-math -ffloat-store @gol --fforce-addr -fforward-propagate -ffunction-sections @gol --fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload @gol --fcrossjumping -fif-conversion -fif-conversion2 @gol --finline-functions -finline-functions-called-once @gol --finline-small-functions -finline-limit=@var{n} -fkeep-inline-functions @gol --fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol --fmodulo-sched -fmodulo-sched-allow-regmoves -fno-branch-count-reg @gol --fno-default-inline -fno-defer-pop -fmove-loop-invariants @gol --fno-function-cse -fno-guess-branch-probability @gol --fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol --funsafe-math-optimizations -funsafe-loop-optimizations @gol --ffinite-math-only -fno-signed-zeros @gol --fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol --fomit-frame-pointer -foptimize-register-move @gol --foptimize-sibling-calls -fpredictive-commoning -fprefetch-loop-arrays @gol --fprofile-generate -fprofile-use @gol --fregmove -frename-registers @gol --freorder-blocks -freorder-blocks-and-partition -freorder-functions @gol --frerun-cse-after-loop @gol --frounding-math -frtl-abstract-sequences @gol --fschedule-insns -fschedule-insns2 @gol --fno-sched-interblock -fno-sched-spec -fsched-spec-load @gol --fsched-spec-load-dangerous @gol --fsched-stalled-insns=@var{n} -fsched-stalled-insns-dep=@var{n} @gol --fsched2-use-superblocks @gol --fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops @gol --fsection-anchors -fsignaling-nans -fsingle-precision-constant @gol --fno-split-wide-types -fstack-protector -fstack-protector-all @gol --fstrict-aliasing -fstrict-overflow -ftracer -fthread-jumps @gol --funroll-all-loops -funroll-loops -fpeel-loops @gol --fsplit-ivs-in-unroller -funswitch-loops @gol --fvariable-expansion-in-unroller -ftree-reassoc @gol --ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize @gol --ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol --fcheck-data-deps @gol --ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol --ftree-ch -ftree-sra -ftree-ter -ftree-fre -ftree-vectorize @gol --ftree-vect-loop-version -fvect-cost-model -ftree-salias -fipa-pta -fweb @gol --ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program @gol +@gccoptlist{ +-falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol +-falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol +-fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol +-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol +-fcheck-data-deps -fcprop-registers -fcrossjumping -fcse-follow-jumps @gol +-fcse-skip-blocks -fcx-limited-range -fdata-sections -fdce -fdce @gol +-fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol +-fearly-inlining -fexpensive-optimizations -ffast-math @gol +-ffinite-math-only -ffloat-store -fforward-propagate @gol +-ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol +-fgcse-sm -fif-conversion -fif-conversion2 -finline-functions @gol +-finline-functions-called-once -finline-limit=@var{n} @gol +-finline-small-functions -fipa-cp -fipa-marix-reorg -fipa-pta @gol +-fipa-pure-const -fipa-reference -fipa-struct-reorg @gol +-fipa-type-escape -fivopts -fkeep-inline-functions -fkeep-static-consts @gol +-fmerge-all-constants -fmerge-constants -fmodulo-sched @gol +-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap @gol +-fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline @gol +-fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol +-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol +-fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol +-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol +-fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol +-fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol +-fprofile-generate -fprofile-use -fprofile-values -freciprocal-math @gol +-fregmove -frename-registers -freorder-blocks @gol +-freorder-blocks-and-partition -freorder-functions @gol +-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol +-frounding-math -frtl-abstract-sequences -fsched2-use-superblocks @gol +-fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous @gol +-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol +-fschedule-insns -fschedule-insns2 -fsection-anchors -fsee @gol +-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol +-fsplit-wide-types -fstack-protector -fstack-protector-all @gol +-fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer -ftree-ccp @gol +-ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-dce @gol +-ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im @gol +-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol +-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-reassoc -ftree-salias @gol +-ftree-sink -ftree-sra -ftree-store-ccp -ftree-ter @gol +-ftree-vect-loop-version -ftree-vectorize -ftree-vrp -funit-at-a-time @gol +-funroll-all-loops -funroll-loops -funsafe-loop-optimizations @gol +-funsafe-math-optimizations -funswitch-loops @gol +-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol +-fwhole-program @gol --param @var{name}=@var{value} -O -O0 -O1 -O2 -O3 -Os} @@ -444,13 +442,14 @@ Objective-C and Objective-C++ Dialects}. -mcall-prologues -mno-tablejump -mtiny-stack -mint8} @emph{Blackfin Options} -@gccoptlist{-mcpu=@var{cpu} -msim -momit-leaf-frame-pointer @gol --mno-omit-leaf-frame-pointer -mspecld-anomaly -mno-specld-anomaly @gol --mcsync-anomaly -mno-csync-anomaly -mlow-64k -mno-low64k @gol --mstack-check-l1 -mid-shared-library -mno-id-shared-library @gol --mshared-library-id=@var{n} -mleaf-id-shared-library @gol --mno-leaf-id-shared-library -msep-data -mno-sep-data -mlong-calls @gol --mno-long-calls -mfast-fp -minline-plt} +@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} @emph{CRIS Options} @gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol @@ -553,14 +552,15 @@ Objective-C and Objective-C++ Dialects}. -mno-wide-multiply -mrtd -malign-double @gol -mpreferred-stack-boundary=@var{num} -mcx16 -msahf -mrecip @gol -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 @gol --msse4a -m3dnow -mpopcnt -mabm @gol +-msse4a -m3dnow -mpopcnt -mabm -msse5 @gol -mthreads -mno-align-stringops -minline-all-stringops @gol -mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol -m96bit-long-double -mregparm=@var{num} -msseregparm @gol -mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol -mcmodel=@var{code-model} @gol --m32 -m64 -mlarge-data-threshold=@var{num}} +-m32 -m64 -mlarge-data-threshold=@var{num} @gol +-mfused-madd -mno-fused-madd} @emph{IA-64 Options} @gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol @@ -621,13 +621,14 @@ Objective-C and Objective-C++ Dialects}. @gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol -mips16 -mno-mips16 -mflip-mips16 @gol +-minterlink-mips16 -mno-interlink-mips16 @gol -mabi=@var{abi} -mabicalls -mno-abicalls @gol -mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 @gol -mfp32 -mfp64 -mhard-float -msoft-float @gol -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol -msmartmips -mno-smartmips @gol -mpaired-single -mno-paired-single -mdmx -mno-mdmx @gol --mips3d -mno-mips3d -mmt -mno-mt @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 @@ -685,7 +686,7 @@ See RS/6000 and PowerPC Options. -mpowerpc-gpopt -mno-powerpc-gpopt @gol -mpowerpc-gfxopt -mno-powerpc-gfxopt @gol -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd @gol --mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mdfp -mno-dfp @gol +-mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol -mnew-mnemonics -mold-mnemonics @gol -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol -m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol @@ -827,8 +828,8 @@ See S/390 and zSeries Options. -fshort-double -fshort-wchar @gol -fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol --fargument-alias -fargument-noalias @gol --fargument-noalias-global -fargument-noalias-anything +-fno-stack-limit -fargument-alias -fargument-noalias @gol +-fargument-noalias-global -fargument-noalias-anything @gol -fleading-underscore -ftls-model=@var{model} @gol -ftrapv -fwrapv -fbounds-check @gol -fvisibility} @@ -978,6 +979,7 @@ package body). Such files are also called @dfn{bodies}. Assembler code. @item @var{file}.S +@itemx @var{file}.sx Assembler code which must be preprocessed. @item @var{other} @@ -2520,17 +2522,8 @@ Warnings are diagnostic messages that report constructions which are not inherently erroneous but which are risky or suggest there may have been an error. -You can request many specific warnings with options beginning @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. - -The following options control the amount and kinds of warnings produced -by GCC; for further, language-specific options also refer to -@ref{C++ Dialect Options} and @ref{Objective-C and Objective-C++ Dialect -Options}. +The following language-independent options do not enable specific +warnings but control the kinds of diagnostics produced by GCC. @table @gcctabopt @cindex syntax checking @@ -2538,6 +2531,48 @@ Options}. @opindex fsyntax-only Check the code for syntax errors, but don't do anything beyond that. +@item -w +@opindex w +Inhibit all warning messages. + +@item -Werror +@opindex Werror +Make all warnings into errors. + +@item -Werror= +@opindex Werror= +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. You can use the @option{-fdiagnostics-show-option} +option to have each controllable warning amended with the option which +controls it, to determine what to use with this option. + +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 +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 +@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}. + +@table @gcctabopt @item -pedantic @opindex pedantic Issue all the warnings demanded by strict ISO C and ISO C++; @@ -2584,9 +2619,104 @@ nothing to warn about.) Like @option{-pedantic}, except that errors are produced rather than warnings. -@item -w -@opindex w -Inhibit all warning messages. +@item -Wall +@opindex Wall +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 @r{(only with} @option{-O2}@r{)} @gol +-Wc++0x-compat @gol +-Wchar-subscripts @gol +-Wimplicit-int @gol +-Wimplicit-function-declaration @gol +-Wcomment @gol +-Wformat @gol +-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)} @gol +-Wmissing-braces @gol +-Wnonnull @gol +-Wparentheses @gol +-Wpointer-sign @gol +-Wreorder @gol +-Wreturn-type @gol +-Wsequence-point @gol +-Wsign-compare @r{(only in C++)} @gol +-Wstrict-aliasing @gol +-Wstrict-overflow @gol +-Wswitch @gol +-Wtrigraphs @gol +-Wuninitialized @r{(only with} @option{-O1} @r{and above)} @gol +-Wunknown-pragmas @gol +-Wunused-function @gol +-Wunused-label @gol +-Wunused-value @gol +-Wunused-variable @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 +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 +-Wempty-body @gol +-Wmissing-field-initializers @gol +-Wmissing-parameter-type @r{(C only)} @gol +-Wold-style-declaration @r{(C only)} @gol +-Woverride-init @gol +-Wsign-compare @gol +-Wtype-limits @gol +-Wuninitialized @r{(only with} @option{-O1} @r{and above)} @gol +-Wunused-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 @samp{<}, @samp{<=}, +@samp{>}, or @samp{>=}. + +@item +(C++ only) An enumerator and a non-enumerator both appear in a +conditional expression. + +@item +(C++ only) A non-static reference or non-static @samp{const} member +appears in a class without constructors. + +@item +(C++ only) Ambiguous virtual bases. + +@item +(C++ only) Subscripting an array which has been declared @samp{register}. + +@item +(C++ only) Taking the address of a variable which has been declared +@samp{register}. + +@item +(C++ only) A base class is not initialized in a derived class' copy +constructor. + +@end itemize @item -Wno-import @opindex Wno-import @@ -2605,12 +2735,6 @@ Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*} comment, or whenever a Backslash-Newline appears in a @samp{//} comment. This warning is enabled by @option{-Wall}. -@item -Wfatal-errors -@opindex Wfatal-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. - @item -Wformat @opindex Wformat @opindex ffreestanding @@ -3043,7 +3167,8 @@ 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}. +This warning is enabled by @option{-Wall} or @option{-Wextra} in +optimizing compilations (@option{-O1} and above). @item -Wunknown-pragmas @opindex Wunknown-pragmas @@ -3069,7 +3194,7 @@ It warns about code which 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 -Wstrict-aliasing=3 +It is equivalent to @option{-Wstrict-aliasing=3} @item -Wstrict-aliasing=n @opindex Wstrict-aliasing=n @@ -3164,108 +3289,6 @@ This option is only active when @option{-ftree-vrp} is active (default for -O2 and above). It warns about subscripts to arrays that are always out of bounds. This warning is enabled by @option{-Wall}. -@item -Wall -@opindex Wall -All of the above @samp{-W} options combined. 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}. -@end table - -The following @option{-W@dots{}} options 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. - -@table @gcctabopt -@item -Wextra -@opindex W -@opindex Wextra -(This option used to be called @option{-W}. The older name is still -supported, but the newer name is more descriptive.) Print extra warning -messages for these events: - -@itemize @bullet -@item -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 -@samp{<} or @samp{>=}. This warning can be independently controlled -by @option{-Wtype-limits}. - -@item @r{(C only)} -Storage-class specifiers like @code{static} are not the first things -in a declaration. According to the C Standard, this usage is -obsolescent. This warning can be independently controlled by -@option{-Wold-style-declaration}. - -@item -If @option{-Wall} or @option{-Wunused} is also specified, warn about unused -arguments. - -@item -A comparison between signed and unsigned values could produce an -incorrect result when the signed value is converted to unsigned. -(But don't warn if @option{-Wno-sign-compare} is also specified.) - -@item -An aggregate has an initializer which does not initialize all members. -This warning can be independently controlled by -@option{-Wmissing-field-initializers}. - -@item -An initialized field without side effects is overridden when using -designated initializers (@pxref{Designated Inits, , Designated -Initializers}). This warning can be independently controlled by -@option{-Woverride-init}. - -@item @r{(C only)} -A function parameter is declared without a type specifier in K&R-style -functions. This warning can be independently controlled by -@option{-Wmissing-parameter-type}. - -@item -An empty body occurs in an @samp{if}, @samp{else} or -@samp{do while} statement. This warning can be independently -controlled by @option{-Wempty-body}. - -@item @r{(C++ only)} -An empty body occurs in a @samp{while} or @samp{for} statement with no -whitespacing before the semicolon. This warning can be independently -controlled by @option{-Wempty-body}. - -@item -A pointer is compared against integer zero with @samp{<}, @samp{<=}, -@samp{>}, or @samp{>=}. - -@item -A variable might be changed by @samp{longjmp} or @samp{vfork}. -This warning can be independently controlled by @option{-Wclobbered}. - -@item @r{(C++ only)} -An enumerator and a non-enumerator both appear in a conditional expression. - -@item @r{(C++ only)} -A non-static reference or non-static @samp{const} member appears in a -class without constructors. - -@item @r{(C++ only)} -Ambiguous virtual bases. - -@item @r{(C++ only)} -Subscripting an array which has been declared @samp{register}. - -@item @r{(C++ only)} -Taking the address of a variable which has been declared @samp{register}. - -@item @r{(C++ only)} -A base class is not initialized in a derived class' copy constructor. -@end itemize - @item -Wno-div-by-zero @opindex Wno-div-by-zero @opindex Wdiv-by-zero @@ -3898,26 +3921,6 @@ This option is only supported for C and Objective-C@. It is implied by @option{-Wall} and by @option{-pedantic}, which can be disabled with @option{-Wno-pointer-sign}. -@item -Werror -@opindex Werror -Make all warnings into errors. - -@item -Werror= -@opindex Werror= -Make the specified warning into an errors. 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. You can use the @option{-fdiagnostics-show-option} -option to have each controllable warning amended with the option which -controls it, to determine what to use with this option. - -Note that specifying @option{-Werror=}@var{foo} automatically implies -@option{-W}@var{foo}. However, @option{-Wno-error=}@var{foo} does not -imply anything. - @item -Wstack-protector @opindex Wstack-protector This option is only active when @option{-fstack-protector} is active. It @@ -5019,25 +5022,31 @@ time, without performing any optimizations that take a great deal of compilation time. @option{-O} turns on the following optimization flags: -@gccoptlist{-fdefer-pop @gol +@gccoptlist{ +-fauto-inc-dec @gol +-fcprop-registers @gol +-fdce @gol +-fdefer-pop @gol -fdelayed-branch @gol +-fdse @gol -fguess-branch-probability @gol --fcprop-registers @gol --fif-conversion @gol -fif-conversion2 @gol +-fif-conversion @gol +-finline-small-functions @gol +-fipa-pure-const @gol +-fipa-reference @gol +-fmerge-constants -fsplit-wide-types @gol -ftree-ccp @gol +-ftree-ch @gol +-ftree-copyrename @gol -ftree-dce @gol -ftree-dominator-opts @gol -ftree-dse @gol --ftree-ter @gol --ftree-sra @gol --ftree-copyrename @gol -ftree-fre @gol --ftree-ch @gol --funit-at-a-time @gol --finline-small-functions @gol --fmerge-constants} +-ftree-sra @gol +-ftree-ter @gol +-funit-at-a-time} @option{-O} also turns on @option{-fomit-frame-pointer} on machines where doing so does not interfere with debugging. @@ -5053,24 +5062,24 @@ 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 --foptimize-sibling-calls @gol -fcse-follow-jumps -fcse-skip-blocks @gol --fgcse -fgcse-lm @gol +-fdelete-null-pointer-checks @gol -fexpensive-optimizations @gol --frerun-cse-after-loop @gol --fcaller-saves @gol +-fgcse -fgcse-lm @gol +-foptimize-sibling-calls @gol -fpeephole2 @gol --fschedule-insns -fschedule-insns2 @gol --fsched-interblock -fsched-spec @gol -fregmove @gol --fstrict-aliasing -fstrict-overflow @gol --fdelete-null-pointer-checks @gol -freorder-blocks -freorder-functions @gol --falign-functions -falign-jumps @gol --falign-loops -falign-labels @gol --ftree-vrp @gol --ftree-pre} +-frerun-cse-after-loop @gol +-fsched-interblock -fsched-spec @gol +-fschedule-insns -fschedule-insns2 @gol +-fstrict-aliasing -fstrict-overflow @gol +-ftree-pre @gol +-ftree-vrp} Please note the warning under @option{-fgcse} about invoking @option{-O2} on programs that use computed gotos. @@ -5132,11 +5141,6 @@ function calls and pops them all at once. Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. -@item -fforce-addr -@opindex fforce-addr -Force memory address constants to be copied into registers before -doing arithmetic on them. - @item -fforward-propagate @opindex fforward-propagate Perform a forward propagation pass on RTL. The pass tries to combine two @@ -5272,6 +5276,7 @@ check if the variable was 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. @@ -5282,6 +5287,7 @@ 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 @@ -5339,13 +5345,6 @@ assumptions based on that. The default is @option{-fzero-initialized-in-bss}. -@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 Java and Fortran front-ends, where -this option defaults to true and false respectively. - @item -fmudflap -fmudflapth -fmudflapir @opindex fmudflap @opindex fmudflapth @@ -5394,7 +5393,7 @@ Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @item -fcse-follow-jumps @opindex fcse-follow-jumps -In common subexpression elimination, scan through jump instructions +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 will follow the jump when the condition @@ -5474,14 +5473,31 @@ Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you if it finds this kind of loop. @item -fcrossjumping -@opindex crossjumping +@opindex fcrossjumping Perform cross-jumping transformation. This transformation unifies equivalent code and save 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 if-conversion +@opindex fif-conversion Attempt to transform conditional jumps into branch-less equivalents. This include use of conditional moves, min, max, set flags and abs instructions, and some tricks doable by standard arithmetics. The use of conditional execution @@ -5490,7 +5506,7 @@ on chips where it is available is controlled by @code{if-conversion2}. Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. @item -fif-conversion2 -@opindex if-conversion2 +@opindex fif-conversion2 Use conditional execution (where available) to transform conditional jumps into branch-less equivalents. @@ -5581,17 +5597,28 @@ 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=@var{n} +@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. - -@item -fsched-stalled-insns-dep=@var{n} +@option{-fno-sched-stalled-insns} means that no insns will be 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) will be examined for a dependency on a stalled insn that is candidate for premature removal from the queue -of stalled insns. Has an effect only during the second scheduling pass, -and only if @option{-fsched-stalled-insns} is used and its value is not zero. +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 @@ -5619,11 +5646,11 @@ sense when scheduling after register allocation, i.e.@: with @item -fsee @opindex fsee -Eliminates redundant extension instructions and move the non redundant -ones to optimal placement using LCM. +Eliminate redundant sign extension instructions and move the non-redundant +ones to optimal placement using lazy code motion (LCM). @item -freschedule-modulo-scheduled-loops -@opindex fscheduling-in-modulo-scheduled-loops +@opindex freschedule-modulo-scheduled-loops The modulo scheduling comes before the traditional scheduling, if a loop was modulo scheduled we may want to prevent the later scheduling passes from changing its schedule, we use this option to control that. @@ -5641,58 +5668,111 @@ those which have no call-preserved registers to use instead. Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. @item -ftree-reassoc -Perform Reassociation on trees This flag is enabled by default +@opindex ftree-reassoc +Perform reassociation on trees. This flag is enabled by default at @option{-O} and higher. @item -ftree-pre -Perform Partial Redundancy Elimination (PRE) on trees. This flag is +@opindex ftree-pre +Perform partial redundancy elimination (PRE) on trees. This flag is enabled by default at @option{-O2} and @option{-O3}. @item -ftree-fre -Perform Full Redundancy Elimination (FRE) on trees. The difference +@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-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 -ftree-store-copy-prop -Perform copy propagation of memory loads and stores. This pass -eliminates unnecessary copy operations in memory references -(structures, global variables, arrays, etc). This flag is enabled by -default at @option{-O2} and higher. - @item -ftree-salias +@opindex ftree-salias Perform structural alias analysis on trees. 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 cannot escape the +compilation unit. +Enabled by default at @option{-O} and higher. + +@item -fipa-struct-reorg +@opindex fipa-struct-reorg +Perform structure reorganization optimization, that change C-like structures +layout in order to better utilize spatial locality. This transformation is +affective for programs containing arrays of structures. Available in two +compilation modes: profile-based (enabled with @option{-fprofile-generate}) +or static (which uses built-in heuristics). Require @option{-fipa-type-escape} +to provide the safety of this transformation. It works only in whole program +mode, so it requires @option{-fwhole-program} and @option{-combine} to be +enabled. Structures considered @samp{cold} by this transformation are not +affected (see @option{--param struct-reorg-cold-struct-ratio=@var{value}}). + +With this flag, the program debug info reflects a new structure layout. + @item -fipa-pta +@opindex fipa-pta Perform interprocedural pointer analysis. +@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, but +because this optimization can create multiple copies of functions, +it may significantly increase code size. + +@item -fipa-matrix-reorg +@opindex fipa-matrix-reorg +Perform matrix flattening and transposing. +Matrix flattening tries to replace a m-dimensional matrix +with its equivalent n-dimensional matrix, where n < m. +This reduces the level of indirection needed for accessing the elements +of the matrix. The second optimization is matrix transposing that +attemps to change the order of the matrix's dimensions in order to +improve cache locality. +Both optimizations need fwhole-program flag. +Transposing is enabled only if profiling information is avaliable. + + @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-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 -ftree-store-ccp +@opindex ftree-store-ccp Perform sparse conditional constant propagation (CCP) on trees. This pass operates on both local scalar variables and memory stores and loads (global variables, structures, arrays, etc). This flag is enabled by default at @option{-O2} and higher. @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-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 @@ -5707,24 +5787,29 @@ 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 +@opindex ftree-loop-linear Perform linear loop transformations on tree. This flag can improve cache performance and allow further loop optimizations to take place. @item -fcheck-data-deps +@opindex fcheck-data-deps Compare the results of several data dependence analyzers. This option is used for debugging the data dependence analyzers. @item -ftree-loop-im +@opindex ftree-loop-im Perform loop invariant motion on trees. This pass moves only invariants that would be hard to handle at RTL level (function calls, operations that expand to nontrivial sequences of insns). With @option{-funswitch-loops} it also moves @@ -5733,27 +5818,40 @@ 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 the loop for that 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. + @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 -ftree-copyrename +@opindex ftree-copyrename Perform copy renaming on trees. This pass attempts to rename compiler temporaries to other variables at copy locations, usually resulting in variable names which more closely resemble the original variables. This flag is enabled by default at @option{-O} and higher. @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 @@ -5761,6 +5859,7 @@ much more complex trees to work on resulting in better RTL generation. This is enabled by default at @option{-O} and higher. @item -ftree-vectorize +@opindex ftree-vectorize Perform loop vectorization on trees. @item -ftree-vect-loop-version @@ -5773,9 +5872,11 @@ to control which version is executed. This option is enabled by default except at level @option{-Os} where it is disabled. @item -fvect-cost-model +@opindex fvect-cost-model Enable cost model for vectorization. @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 @@ -6104,14 +6205,15 @@ programs consisting of single file, in combination with option programs since the functions and variables become local for the whole combined compilation unit, not for the single source file itself. +This option is not supported for Fortran programs. -@item -fno-cprop-registers -@opindex fno-cprop-registers +@item -fcprop-registers +@opindex fcprop-registers After register allocation and post-register allocation instruction splitting, we perform a copy-propagation pass to try to reduce scheduling dependencies and occasionally eliminate the copy. -Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. +Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. @item -fprofile-generate @opindex fprofile-generate @@ -6159,10 +6261,9 @@ them to store all pertinent intermediate computations into variables. @item -ffast-math @opindex ffast-math -Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @* -@option{-fno-trapping-math}, @option{-ffinite-math-only}, -@option{-fno-rounding-math}, @option{-fno-signaling-nans}, -@option{-fno-signed-zeros} and @option{fcx-limited-range}. +Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, +@option{-ffinite-math-only}, @option{-fno-rounding-math}, +@option{-fno-signaling-nans} and @option{-fcx-limited-range}. This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. @@ -6205,12 +6306,13 @@ it can result in incorrect output for programs which 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{-freciprocal-math} and @option{-fassociative-math}. +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 +@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 @@ -6219,13 +6321,14 @@ well as ignore NaNs and inhibit or create underflow or overflow (and thus cannot be used on a code which 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 flag doesn't make much sense without @option{-fno-signed-zeros} -or @option{-fno-trapping-math} or with @option{-frounding-math}. +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}. The default is @option{-fno-associative-math}. @item -freciprocal-math -@opindex -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} @@ -6262,9 +6365,9 @@ The default is @option{-fsigned-zeros}. @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 implies -@option{-fno-signaling-nans}. Setting this option may allow faster -code if one relies on ``non-stop'' IEEE arithmetic, for example. +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 which depend on @@ -6322,9 +6425,7 @@ Treat floating point constant as single precision constant instead of implicitly converting it to double precision constant. @item -fcx-limited-range -@itemx -fno-cx-limited-range @opindex fcx-limited-range -@opindex fno-cx-limited-range When enabled, this option states that a range reduction step is not needed when performing complex division. The default is @option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}. @@ -6477,6 +6578,7 @@ When performing branch target register load optimization, don't reuse branch target registers in within any basic block. @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 alloca, and @@ -6485,6 +6587,7 @@ 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 -fsection-anchors @@ -6554,6 +6657,15 @@ of bytes in instantiated fields to the number of bytes in the complete structure exceeds this parameter, then block copies are not used. The default is 75. +@item struct-reorg-cold-struct-ratio +The threshold ratio (as a percentage) between a structure frequency +and the frequency of the hottest structure in the program. This parameter +is used by struct-reorg optimization enabled by @option{-fipa-struct-reorg}. +We say that if the ratio of a structure frequency, calculated by profiling, +to the hottest structure frequency in the program is less than this +parameter, then structure reorganization is not applied to this structure. +The default is 10. + @item max-crossjump-edges The maximum number of incoming edges to consider for crossjumping. The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in @@ -6708,7 +6820,7 @@ functions and at the same time increases size of leaf function that is believed reduce function size by being inlined. In effect it increases amount of inlining for code having large abstraction penalty (many functions that just pass the arguments to other functions) and decrease inlining for code with low -abstraction penalty. The default value is 16. +abstraction penalty. The default value is 12. @item min-vect-loop-bound The minimum number of iterations under which a loop will not get vectorized @@ -6829,6 +6941,16 @@ with unknown. We predict the known number of iterations correctly, while the unknown number of iterations average to roughly 10. This means that the loop without bounds would appear artificially cold relative to the other one. +@item align-threshold + +Select fraction of the maximal frequency of executions of basic block in +function given basic block will get aligned. + +@item align-loop-iterations + +A loop expected to iterate at lest the selected number of iterations will get +aligned. + @item tracer-dynamic-coverage @itemx tracer-dynamic-coverage-feedback @@ -7050,6 +7172,22 @@ 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 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 behaviour. Setting a value of 0 for +this paramter will allow 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 will not be done and optimizations depending on it will +be disabled. The default maximum SCC size is 10000. + @end table @end table @@ -8546,22 +8684,40 @@ size. @cindex Blackfin Options @table @gcctabopt -@item -mcpu=@var{cpu} +@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{bf531}, @samp{bf532}, @samp{bf533}, -@samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf561}. +Specifies the name of the target Blackfin processor. Currently, @var{cpu} +can be one of @samp{bf522}, @samp{bf525}, @samp{bf527}, +@samp{bf531}, @samp{bf532}, @samp{bf533}, @samp{bf534}, +@samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539}, +@samp{bf542}, @samp{bf544}, @samp{bf548}, @samp{bf549}, +@samp{bf561}. +The optional @var{sirevision} specifies the silicon revision of the target +Blackfin processor. Any workarounds available for the targeted silicon revision +will be enabled. If @var{sirevision} is @samp{none}, no workarounds are enabled. +If @var{sirevision} is @samp{any}, all workarounds for the targeted processor +will be 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. + +Support for @samp{bf561} is incomplete. For @samp{bf561}, +Only the processor macro is defined. Without this option, @samp{bf532} is used as the processor by default. The corresponding predefined processor macros for @var{cpu} is to -be defined. For the @samp{bfin-elf} toolchain, this causes the hardware -BSP provided by libgloss to be linked in if @samp{-msim} is not given. -Support for @samp{bf561} is incomplete; only the processor macro is defined. +be defined. And for @samp{bfin-elf} toolchain, this causes the hardware BSP +provided by libgloss to be linked in if @option{-msim} is not given. @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 @@ -8574,8 +8730,8 @@ which might make debugging harder. @item -mspecld-anomaly @opindex mspecld-anomaly When enabled, the compiler will ensure that the generated code does not -contain speculative loads after jump instructions. This option is enabled -by default. +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 @@ -8585,7 +8741,7 @@ Don't generate extra code to prevent speculative loads from occurring. @opindex mcsync-anomaly When enabled, the compiler will ensure that the generated code does not contain CSYNC or SSYNC instructions too soon after conditional branches. -This option is enabled by default. +If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined. @item -mno-csync-anomaly @opindex mno-csync-anomaly @@ -8611,6 +8767,7 @@ uClinux kernel. 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 @@ -9536,6 +9693,7 @@ 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 @@ -10437,6 +10595,8 @@ preferred alignment to @option{-mpreferred-stack-boundary=2}. @itemx -mno-sse4 @item -msse4a @item -mno-sse4a +@item -msse5 +@itemx -mno-sse5 @item -m3dnow @itemx -mno-3dnow @item -mpopcnt @@ -10450,7 +10610,7 @@ preferred alignment to @option{-mpreferred-stack-boundary=2}. @opindex m3dnow @opindex mno-3dnow These switches enable or disable the use of instructions in the MMX, -SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4A, ABM or 3DNow! extended +SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4A, SSE5, ABM or 3DNow! extended instruction sets. These extensions are also available as built-in functions: see @ref{X86 Built-in Functions}, for details of the functions enabled and @@ -10572,6 +10732,14 @@ is legal depends on the operating system, and whether it maps the segment to cover the entire TLS area. For systems that use GNU libc, the default is on. + +@item -mfused-madd +@itemx -mno-fused-madd +@opindex mfused-madd +Enable automatic generation of fused floating point multiply-add instructions +if the ISA supports such instructions. The -mfused-madd option is on by +default. The fused multiply-add instructions have a different +rounding behavior compared to executing a multiply followed by an add. @end table These @samp{-m} switches are supported in addition to the above @@ -11076,6 +11244,7 @@ below, which also classifies the CPUs into families: @multitable @columnfractions 0.20 0.80 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments} +@item @samp{51qe} @tab @samp{51qe} @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206} @item @samp{5206e} @tab @samp{5206e} @item @samp{5208} @tab @samp{5207} @samp{5208} @@ -11113,7 +11282,7 @@ 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{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}. +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. @@ -11646,6 +11815,18 @@ 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-mips16 +@itemx -mno-interlink-mips16 +@opindex minterlink-mips16 +@opindex mno-interlink-mips16 +Require (do not require) that non-MIPS16 code be link-compatible with +MIPS16 code. + +For example, non-MIPS16 code cannot jump directly to MIPS16 code; +it must either use a call or an indirect jump. @option{-minterlink-mips16} +therefore disables direct jumps unless GCC knows that the target of the +jump is not MIPS16. + @item -mabi=32 @itemx -mabi=o64 @itemx -mabi=n32 @@ -11771,6 +11952,22 @@ operations. Assume that the floating-point coprocessor supports double-precision operations. This is the default. +@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 will use 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 @@ -11800,9 +11997,8 @@ Use (do not use) the MIPS SmartMIPS ASE. @opindex mpaired-single @opindex mno-paired-single Use (do not use) paired-single floating-point instructions. -@xref{MIPS Paired-Single Support}. This option can only be used -when generating 64-bit code and requires hardware floating-point -support to be enabled. +@xref{MIPS Paired-Single Support}. This option requires +hardware floating-point support to be enabled. @item -mdmx @itemx -mno-mdmx @@ -12471,8 +12667,8 @@ These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: @itemx -mno-cmpb @itemx -mmfpgpr @itemx -mno-mfpgpr -@itemx -mdfp -@itemx -mno-dfp +@itemx -mhard-dfp +@itemx -mno-hard-dfp @opindex mpower @opindex mno-power @opindex mpower2 @@ -12495,8 +12691,8 @@ These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: @opindex mno-cmpb @opindex mmfpgpr @opindex mno-mfpgpr -@opindex mdfp -@opindex mno-dfp +@opindex mhard-dfp +@opindex mno-hard-dfp GCC supports two related instruction set architectures for the RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those instructions supported by the @samp{rios} chip set used in the original @@ -12548,7 +12744,7 @@ 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{-mdfp} option allows GCC to generate the decimal floating +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 @@ -13847,7 +14043,7 @@ for machine type @var{cpu_type}. Supported values for @var{cpu_type} are @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite}, @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, -@samp{ultrasparc3}, and @samp{niagara}. +@samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}. Default instruction scheduling parameters are used for values that select an architecture and not an implementation. These are @samp{v7}, @samp{v8}, @@ -13861,7 +14057,7 @@ implementations. v8: supersparc, hypersparc sparclite: f930, f934, sparclite86x sparclet: tsc701 - v9: ultrasparc, ultrasparc3, niagara + v9: ultrasparc, ultrasparc3, niagara, niagara2 @end smallexample By default (unless configured otherwise), GCC generates code for the V7 @@ -13899,7 +14095,8 @@ 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. +Sun UltraSPARC T1 chips. With @option{-mcpu=niagara2}, the compiler +additionally optimizes it for Sun UltraSPARC T2 chips. @item -mtune=@var{cpu_type} @opindex mtune @@ -13912,7 +14109,7 @@ The same values for @option{-mcpu=@var{cpu_type}} can be used for that select a particular cpu implementation. Those are @samp{cypress}, @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, -@samp{ultrasparc3}, and @samp{niagara}. +@samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}. @item -mv8plus @itemx -mno-v8plus @@ -14966,6 +15163,7 @@ 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 @code{global-dynamic}, @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.