X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fdoc%2Finvoke.texi;h=0bcd3d9d85c57a4edc8b03e98203f874a94d95c2;hp=cb6f175eb47941927ee0950731a31ee62e19abc2;hb=7600133d975d4e391db5ed900725414cc43476b9;hpb=55234eff0ef5ed2a038ef64e0d372d598fa7fe16 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index cb6f175eb47..0bcd3d9d85c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -185,7 +185,7 @@ in the following sections. -fno-default-inline -fvisibility-inlines-hidden @gol -Wabi -Wctor-dtor-privacy @gol -Wnon-virtual-dtor -Wreorder @gol --Weffc++ -Wno-deprecated @gol +-Weffc++ -Wno-deprecated -Wstrict-null-sentinel @gol -Wno-non-template-friend -Wold-style-cast @gol -Woverloaded-virtual -Wno-pmf-conversions @gol -Wsign-promo} @@ -197,21 +197,28 @@ Objective-C and Objective-C++ Dialects}. -fconstant-string-class=@var{class-name} @gol -fgnu-runtime -fnext-runtime @gol -fno-nil-receivers @gol +-fobjc-call-cxx-cdtors @gol +-fobjc-direct-dispatch @gol -fobjc-exceptions @gol +-fobjc-gc @gol -freplace-objc-classes @gol -fzero-link @gol -gen-decls @gol --Wno-protocol -Wselector -Wundeclared-selector} +-Wassign-intercept @gol +-Wno-protocol -Wselector @gol +-Wstrict-selector-match @gol +-Wundeclared-selector} @item Language Independent Options @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. @gccoptlist{-fmessage-length=@var{n} @gol --fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}} +-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}} @gol +-fdiagnostics-show-options @item Warning Options @xref{Warning Options,,Options to Request or Suppress Warnings}. @gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol --w -Wextra -Wall -Waggregate-return @gol +-w -Wextra -Wall -Waggregate-return -Wno-attributes @gol -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol -Wconversion -Wno-deprecated-declarations @gol -Wdisabled-optimization -Wno-div-by-zero -Wno-endif-labels @gol @@ -221,13 +228,15 @@ Objective-C and Objective-C++ Dialects}. -Wformat-security -Wformat-y2k @gol -Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol -Wimport -Wno-import -Winit-self -Winline @gol +-Wno-int-to-pointer-cast @gol -Wno-invalid-offsetof -Winvalid-pch @gol -Wlarger-than-@var{len} -Wlong-long @gol -Wmain -Wmissing-braces -Wmissing-field-initializers @gol -Wmissing-format-attribute -Wmissing-include-dirs @gol -Wmissing-noreturn @gol -Wno-multichar -Wnonnull -Wpacked -Wpadded @gol --Wparentheses -Wpointer-arith -Wredundant-decls @gol +-Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast @gol +-Wredundant-decls @gol -Wreturn-type -Wsequence-point -Wshadow @gol -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 @gol -Wswitch -Wswitch-default -Wswitch-enum @gol @@ -268,6 +277,7 @@ Objective-C and Objective-C++ Dialects}. -fdump-tree-sra@r{[}-@var{n}@r{]} @gol -fdump-tree-salias @gol -fdump-tree-fre@r{[}-@var{n}@r{]} @gol +-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol -ftree-vectorizer-verbose=@var{n} @gol -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol @@ -557,7 +567,7 @@ Objective-C and Objective-C++ Dialects}. -mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfp64 @gol -mhard-float -msoft-float -msingle-float -mdouble-float @gol -mpaired-single -mips3d @gol --mint64 -mlong64 -mlong32 -msym32 -mno-sym32 @gol +-mlong64 -mlong32 -msym32 -mno-sym32 @gol -G@var{num} -membedded-data -mno-embedded-data @gol -muninit-const-in-rodata -mno-uninit-const-in-rodata @gol -msplit-addresses -mno-split-addresses @gol @@ -627,10 +637,12 @@ See RS/6000 and PowerPC Options. -minsert-sched-nops=@var{scheme} @gol -mcall-sysv -mcall-netbsd @gol -maix-struct-return -msvr4-struct-return @gol --mabi=altivec -mabi=no-altivec @gol --mabi=spe -mabi=no-spe @gol +-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol +-misel -mno-isel @gol -misel=yes -misel=no @gol +-mspe -mno-spe @gol -mspe=yes -mspe=no @gol +-mvrsave -mno-vrsave @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 @@ -655,7 +667,10 @@ See RS/6000 and PowerPC Options. -mb -ml -mdalign -mrelax @gol -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol -mieee -misize -mpadstruct -mspace @gol --mprefergot -musermode} +-mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol +-mdivsi3_libfunc=@var{name} @gol +-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol + -minvalid-symbols} @emph{SPARC Options} @gccoptlist{-mcpu=@var{cpu-type} @gol @@ -718,6 +733,7 @@ See S/390 and zSeries Options. -finhibit-size-directive -finstrument-functions @gol -fno-common -fno-ident @gol -fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol +-fno-jump-tables @gol -freg-struct-return -fshared-data -fshort-enums @gol -fshort-double -fshort-wchar @gol -fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol @@ -808,6 +824,13 @@ C++ source code which 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 which must be preprocessed. + +@item @var{file}.mii +Objective-C++ source code which should not be preprocessed. + @item @var{file}.hh @itemx @var{file}.H C++ header file to be turned into a precompiled header. @@ -1739,6 +1762,14 @@ to filter out those warnings. @opindex Wno-deprecated Do not warn about usage of deprecated features. @xref{Deprecated Features}. +@item -Wstrict-null-sentinel @r{(C++ only)} +@opindex Wstrict-null-sentinel +Warn also 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 not a null pointer, +it is guaranteed to of the same size as a pointer. But this use is +not portable across different compilers. + @item -Wno-non-template-friend @r{(C++ only)} @opindex Wno-non-template-friend Disable warnings when non-templatized friend functions are declared @@ -1881,6 +1912,35 @@ is not @code{nil}. This allows for more efficient entry points in the runtime to be used. Currently, this option is only available in conjunction with the NeXT runtime on Mac OS X 10.3 and later. +@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 that will run +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 that will run +all such default destructors, in reverse order. + +The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods +thusly generated will 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 +will be invoked by the runtime immediately after a new object +instance is allocated; the @code{- (void) .cxx_destruct} methods will +be 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, @@ -1973,6 +2033,10 @@ Unlike Java, Objective-C does not allow for entire methods to be marked @code{@@synchronized} blocks is allowed, and will cause the guarding object to be unlocked properly. +@item -fobjc-gc +@opindex fobjc-gc +Enable garbage collection (GC) in Objective-C and Objective-C++ programs. + @item -freplace-objc-classes @opindex freplace-objc-classes Emit a special marker instructing @command{ld(1)} not to statically link in @@ -1999,6 +2063,11 @@ for individual class implementations to be modified during program execution. Dump interface declarations for all classes seen in the source file to a file named @file{@var{sourcename}.decl}. +@item -Wassign-intercept +@opindex Wassign-intercept +Warn whenever an Objective-C assignment is being intercepted by the +garbage collector. + @item -Wno-protocol @opindex Wno-protocol If a class is declared to implement a protocol, a warning is issued for @@ -2022,6 +2091,15 @@ 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 +@opindex Wstrict-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 will omit such warnings +if any differences found are confined to types which share the same size +and alignment. + @item -Wundeclared-selector @opindex Wundeclared-selector Warn if a @code{@@selector(@dots{})} expression referring to an @@ -2080,6 +2158,13 @@ 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-show-options +@opindex fdiagnostics-show-options +This option instructs the diagnostic machinery to add text to each +diagnostic emitted, which indicates which command line option directly +controls that diagnostic, when such an option is known to the +diagnostic machinery. + @end table @node Warning Options @@ -2542,11 +2627,13 @@ get these warnings. If you want to warn about code which uses the uninitialized value of the variable in its own initializer, use the @option{-Winit-self} option. -These warnings occur only for variables that are candidates for -register allocation. Therefore, they do not occur for a variable that -is declared @code{volatile}, or whose address is taken, or whose size -is other than 1, 2, 4 or 8 bytes. Also, they do not occur for -structures, unions or arrays, even when they are in registers. +These warnings occur for individual uninitialized or clobbered +elements of structure, union or array variables as well as for +variables which 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 will depend 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 @@ -2961,6 +3048,14 @@ 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-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 will not stop errors for incorrect use of supported +attributes. + @item -Wstrict-prototypes @r{(C only)} @opindex Wstrict-prototypes Warn if a function is declared or defined without specifying the @@ -3179,6 +3274,16 @@ warning about it. The restrictions on @samp{offsetof} may be relaxed in a future version of the C++ standard. +@item -Wno-int-to-pointer-cast @r{(C only)} +@opindex Wno-int-to-pointer-cast +Suppress warnings from casts to pointer type of an integer of a +different size. + +@item -Wno-pointer-to-int-cast @r{(C only)} +@opindex Wno-pointer-to-int-cast +Suppress warnings from casts from a pointer to an integer type of a +different size. + @item -Winvalid-pch @opindex Winvalid-pch Warn if a precompiled header (@pxref{Precompiled Headers}) is found in @@ -3392,6 +3497,7 @@ 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 @@ -3751,8 +3857,8 @@ numbers and line number note 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-translation-unit @r{(C and C++ only)} -@itemx -fdump-translation-unit-@var{options} @r{(C and C++ only)} +@item -fdump-translation-unit @r{(C++ only)} +@itemx -fdump-translation-unit-@var{options} @r{(C++ only)} @opindex fdump-translation-unit Dump a representation of the tree structure for the entire translation unit to a file. The file name is made by appending @file{.tu} to the @@ -3962,6 +4068,11 @@ file name. Dump each function after applying vectorization of loops. The file name is made by appending @file{.vect} to the source file name. +@item vrp +@opindex fdump-tree-vrp +Dump each function after Value Range Propagation (VRP). The file name +is made by appending @file{.vrp} to the source file name. + @item all @opindex fdump-tree-all Enable all the available tree dumps with the flags provided in this option. @@ -4216,6 +4327,7 @@ also turns on the following optimization flags: -funit-at-a-time @gol -falign-functions -falign-jumps @gol -falign-loops -falign-labels @gol +-ftree-vrp @gol -ftree-pre} Please note the warning under @option{-fgcse} about @@ -4366,7 +4478,7 @@ See below for a documentation of the individual parameters controlling inlining. @emph{Note:} pseudo instruction represents, in this particular context, an -abstract measurement of function's size. In no way, it represents a count +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. @@ -4858,6 +4970,15 @@ optimization later. This is enabled by default at @option{-O} and higher. @item -ftree-vectorize Perform loop vectorization on trees. +@item -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 -ftracer @opindex ftracer Perform tail duplication to enlarge superblock size. This transformation @@ -5668,6 +5789,10 @@ If number of candidates in the set is smaller than this value, we always try to remove unnecessary ivs from the set during its optimization when a new iv is added to the set. +@item scev-max-expr-size +Bound on size of expressions used in the scalar evolutions analyzer. +Large expressions slow the analyzer. + @item max-iterations-to-track The maximum number of iterations of a loop the brute force algorithm @@ -5811,6 +5936,18 @@ 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's. The default value is 256. +@item min-virtual-mappings +Specifies the minimum number of virtual mappings in the incremental +SSA updater that should be registered to trigger the virtual mappings +heuristic defined by virtual-mappings-ratio. The default value is +100. + +@item virtual-mappings-ratio +If the number of virtual mappings is virtual-mappings-ratio bigger +than the number of virtual symbols to be updated, then the incremental +SSA updater switches to a full update for those symbols. The default +ratio is 3. + @end table @end table @@ -6763,10 +6900,6 @@ Some configurations of the compiler also support additional special options, usually for compatibility with other compilers on the same platform. -These options are defined by the macro @code{TARGET_SWITCHES} in the -machine description. The default for the options is also defined by -that macro, which enables you to change the defaults. - @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 @@ -7251,7 +7384,7 @@ by default. Don't generate extra code to prevent speculative loads from occurring. @item -mlow-64k -@opindex +@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. @@ -9811,14 +9944,6 @@ support to be enabled. Use (do not use) the MIPS-3D ASE@. @xref{MIPS-3D Built-in Functions}. The option @option{-mips3d} implies @option{-mpaired-single}. -@item -mint64 -@opindex mint64 -Force @code{int} and @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. - -This option has been deprecated and will be removed in a future release. - @item -mlong64 @opindex mlong64 Force @code{long} types to be 64 bits wide. See @option{-mlong32} for @@ -10549,7 +10674,7 @@ Supported values for @var{cpu_type} are @samp{401}, @samp{403}, @samp{860}, @samp{970}, @samp{8540}, @samp{common}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64}, -@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64a}. +@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}. @option{-mcpu=common} selects a completely generic processor. Code generated under this option will run on any POWER or PowerPC processor. @@ -10605,6 +10730,12 @@ the AltiVec instruction set. You may also need to set @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI enhancements. +@item -mvrsave +@item -mno-vrsave +@opindex mvrsave +@opindex mno-vrsave +Generate VRSAVE instructions when generating AltiVec code. + @item -mabi=spe @opindex mabi=spe Extend the current ABI with SPE ABI extensions. This does not change @@ -10615,17 +10746,39 @@ ABI@. @opindex mabi=no-spe Disable Booke SPE ABI extensions for the current ABI@. -@item -misel=@var{yes/no} -@itemx -misel +@item -msecure-plt +@opindex msecure-plt +Generate code that allows ld and ld.so to build executables and shared +libraries with non-exec .plt and .got sections. This is a PowerPC +32-bit SYSV ABI option. + +@item -mbss-plt +@opindex mbss-plt +Generate code that uses a BSS .plt section that ld.so fills in, and +requires .plt and .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 -mspe=@var{yes/no} -@itemx -mspe +@item -misel=@var{yes/no} +This switch has been deprecated. Use @option{-misel} and +@option{-mno-isel} instead. + +@item -mspe +@itemx -mno-isel @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 -mfloat-gprs=@var{yes/single/double/no} @itemx -mfloat-gprs @opindex mfloat-gprs @@ -10942,15 +11095,11 @@ Return all structures in memory (as specified by the AIX ABI)@. Return structures smaller than 8 bytes in registers (as specified by the SVR4 ABI)@. -@item -mabi=altivec -@opindex mabi=altivec -Extend the current ABI with AltiVec ABI extensions. This does not -change the default ABI, instead it adds the AltiVec ABI extensions to -the current ABI@. - -@item -mabi=no-altivec -@opindex mabi=no-altivec -Disable AltiVec ABI extensions for the current ABI@. +@item -mabi=@var{abi-type} +@opindex mabi +Extend the current ABI with a particular extension, or remove such extension. +Valid values are @var{altivec}, @var{no-altivec}, @var{spe}, +@var{no-spe}@. @item -mprototype @itemx -mno-prototype @@ -11416,6 +11565,11 @@ Mark the @code{MAC} register as call-clobbered, even if @item -mieee @opindex mieee Increase IEEE-compliance of floating-point code. +At the moment, this is equivalent to @option{-fno-finite-math-only}. +When generating 16 bit SH opcodes, getting IEEE-conforming results for +comparisons of NANs / infinities incurs extra overhead in every +floating point comparison, therefore the default is set to +@option{-ffinite-math-only}. @item -misize @opindex misize @@ -11441,6 +11595,107 @@ Generate a library function call to invalidate instruction cache entries, after fixing up a trampoline. This library function call doesn't assume it can write to the whole memory address space. This is the default when the target is @code{sh-*-linux*}. + +@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 use for SHmedia code. @var{strategy} must be +one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, +inv:call2, inv:fp . +"fp" performs the operation in floating point. This has a very high latency, +but needs only a few instructions, so it might be a good choice if +your code has enough easily exploitable ILP to allow the compiler to +schedule the floating point instructions together with other instructions. +Division by zero causes a floating point exception. +"inv" uses integer operations to calculate the inverse of the divisor, +and then multiplies the dividend with the inverse. This strategy allows +cse and hoisting of the inverse calculation. Division by zero calculates +an unspecified result, but does not trap. +"inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities +have been found, or if the entire operation has been hoisted to the same +place, the last stages of the inverse calculation are intertwined with the +final multiply to reduce the overall latency, at the expense of using a few +more instructions, and thus offering fewer scheduling opportunities with +other code. +"call" calls a library function that usually implements the inv:minlat +strategy. +This gives high code density for m5-*media-nofpu compilations. +"call2" uses a different entry point of the same library function, where it +assumes that a pointer to a lookup table has already been set up, which +exposes the pointer load to cse / code hoisting optimizations. +"inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial +code generation, but if the code stays unoptimized, revert to the "call", +"call2", or "fp" strategies, respectively. Note that the +potentially-trapping side effect of division by zero is carried by a +separate instruction, so it is possible that all the integer instructions +are hoisted out, but the marker for the side effect stays where it is. +A recombination to fp operations or a call is not possible in that case. +"inv20u" and "inv20l" are variants of the "inv:minlat" strategy. In the case +that the inverse calculation was nor separated from the multiply, they speed +up division where the dividend fits into 20 bits (plus sign where applicable), +by inserting a test to skip a number of operations in this case; this test +slows down the case of larger dividends. inv20u assumes the case of a such +a small dividend to be unlikely, and inv20l assumes it to be likely. + +@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 affect the name used in the call and inv:call +division strategies, and the compiler will still expect the same +sets of input/output/clobbered registers as if this option was not present. + +@item -madjust-unroll +@opindex madjust-unroll +Throttle unrolling to avoid thrashing target registers. +This option only has an effect if the gcc code base supports the +TARGET_ADJUST_UNROLL_MAX target hook. + +@item -mindexed-addressing +@opindex mindexed-addressing +Enable the use of the indexed addressing mode for SHmedia32/SHcompact. +This is only safe if the hardware and/or OS implement 32 bit wrap-around +semantics for the indexed addressing mode. The architecture allows the +implementation of processors with 64 bit MMU, which the OS could use to +get 32 bit addressing, but since no current hardware implementation supports +this or any other way to make the indexed addressing mode safe to use in +the 32 bit ABI, the default is -mno-indexed-addressing. + +@item -mgettrcost=@var{number} +@opindex mgettrcost=@var{number} +Set the cost assumed for the gettr instruction to @var{number}. +The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise. + +@item -mpt-fixed +@opindex mpt-fixed +Assume pt* instructions won't trap. This will generally generate better +scheduled code, but is unsafe on current hardware. The current architecture +definition says that ptabs and ptrel trap when the target anded with 3 is 3. +This has the unintentional effect of making it unsafe to schedule ptabs / +ptrel before a branch, or hoist it out of a loop. For example, +__do_global_ctors, a part of libgcc that runs constructors at program +startup, calls functions in a list which is delimited by -1. With the +-mpt-fixed option, the ptabs will be done before testing against -1. +That means that all the constructors will be run a bit quicker, but when +the loop comes to the end of the list, the program crashes because ptabs +loads -1 into a target register. Since this option is unsafe for any +hardware implementing the current architecture specification, the default +is -mno-pt-fixed. Unless the user specifies a specific cost with +@option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100}; +this deters register allocation using target registers for storing +ordinary integers. + +@item -minvalid-symbols +@opindex minvalid-symbols +Assume symbols might be invalid. Ordinary function symbols generated by +the compiler will always be valid to load with movi/shori/ptabs or +movi/shori/ptrel, but with assembler and/or linker tricks it is possible +to generate symbols that will cause ptabs / ptrel to trap. +This option is only meaningful when @option{-mno-pt-fixed} is in effect. +It will then prevent cross-basic-block cse, hoisting and most scheduling +of symbol loads. The default is @option{-mno-invalid-symbols}. @end table @node SPARC Options @@ -12344,6 +12599,15 @@ generated position independent code can be only linked into executables. Usually these options are used when @option{-pie} GCC option will be used during linking. +@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 which 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 @@ -12544,8 +12808,8 @@ For those adding visibility support to existing code, you may find @samp{#pragma GCC visibility} of use. This works by you enclosing the declarations you wish to set visibility for with (for example) @samp{#pragma GCC visibility push(hidden)} and -@samp{#pragma GCC visibility pop}. These can be nested up to sixteen -times. Bear in mind that symbol visibility should be viewed @strong{as +@samp{#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 ie; declarations only for use within the local DSO should @strong{always} be marked explicitly @@ -12719,13 +12983,6 @@ build the project. To make builds faster, GCC allows users to `precompile' a header file; then, if builds can use the precompiled header file they will be much faster. -@strong{Caution:} There are a few known situations where GCC will -crash when trying to use a precompiled header. If you have trouble -with a precompiled header, you should remove the precompiled header -and compile without it. In addition, please use GCC's on-line -defect-tracking system to report any problems you encounter with -precompiled headers. @xref{Bugs}. - 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 will probably want to use a @@ -12790,10 +13047,8 @@ the current compilation. You can't use a C precompiled header for a C++ compilation. @item -The precompiled header file must be produced by the same compiler -version and configuration as the current compilation is using. -The easiest way to guarantee this is to use the same compiler binary -for creating and using precompiled headers. +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 @@ -12830,7 +13085,10 @@ 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{-fpreprocessed -pedantic-errors} +@gccoptlist{-fpreprocessed +-fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous +-fsched-verbose= -fschedule-insns +-pedantic-errors} @end itemize