* doc/invoke.texi (-flinker-output): Document
[official-gcc.git] / gcc / doc / invoke.texi
blobf2c95248bb7798d6ddf62b8a6f517727a69904db
1 @c Copyright (C) 1988-2018 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @ignore
6 @c man begin INCLUDE
7 @include gcc-vers.texi
8 @c man end
10 @c man begin COPYRIGHT
11 Copyright @copyright{} 1988-2018 Free Software Foundation, Inc.
13 Permission is granted to copy, distribute and/or modify this document
14 under the terms of the GNU Free Documentation License, Version 1.3 or
15 any later version published by the Free Software Foundation; with the
16 Invariant Sections being ``GNU General Public License'' and ``Funding
17 Free Software'', the Front-Cover texts being (a) (see below), and with
18 the Back-Cover Texts being (b) (see below).  A copy of the license is
19 included in the gfdl(7) man page.
21 (a) The FSF's Front-Cover Text is:
23      A GNU Manual
25 (b) The FSF's Back-Cover Text is:
27      You have freedom to copy and modify this GNU Manual, like GNU
28      software.  Copies published by the Free Software Foundation raise
29      funds for GNU development.
30 @c man end
31 @c Set file name and title for the man page.
32 @setfilename gcc
33 @settitle GNU project C and C++ compiler
34 @c man begin SYNOPSIS
35 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
36     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
37     [@option{-W}@var{warn}@dots{}] [@option{-Wpedantic}]
38     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
39     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
40     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
41     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
43 Only the most useful options are listed here; see below for the
44 remainder.  @command{g++} accepts mostly the same options as @command{gcc}.
45 @c man end
46 @c man begin SEEALSO
47 gpl(7), gfdl(7), fsf-funding(7),
48 cpp(1), gcov(1), as(1), ld(1), gdb(1), dbx(1)
49 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
50 @file{ld}, @file{binutils} and @file{gdb}.
51 @c man end
52 @c man begin BUGS
53 For instructions on reporting bugs, see
54 @w{@value{BUGURL}}.
55 @c man end
56 @c man begin AUTHOR
57 See the Info entry for @command{gcc}, or
58 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
59 for contributors to GCC@.
60 @c man end
61 @end ignore
63 @node Invoking GCC
64 @chapter GCC Command Options
65 @cindex GCC command options
66 @cindex command options
67 @cindex options, GCC command
69 @c man begin DESCRIPTION
70 When you invoke GCC, it normally does preprocessing, compilation,
71 assembly and linking.  The ``overall options'' allow you to stop this
72 process at an intermediate stage.  For example, the @option{-c} option
73 says not to run the linker.  Then the output consists of object files
74 output by the assembler.
75 @xref{Overall Options,,Options Controlling the Kind of Output}.
77 Other options are passed on to one or more stages of processing.  Some options
78 control the preprocessor and others the compiler itself.  Yet other
79 options control the assembler and linker; most of these are not
80 documented here, since you rarely need to use any of them.
82 @cindex C compilation options
83 Most of the command-line options that you can use with GCC are useful
84 for C programs; when an option is only useful with another language
85 (usually C++), the explanation says so explicitly.  If the description
86 for a particular option does not mention a source language, you can use
87 that option with all supported languages.
89 @cindex cross compiling
90 @cindex specifying machine version
91 @cindex specifying compiler version and target machine
92 @cindex compiler version, specifying
93 @cindex target machine, specifying
94 The usual way to run GCC is to run the executable called @command{gcc}, or
95 @command{@var{machine}-gcc} when cross-compiling, or
96 @command{@var{machine}-gcc-@var{version}} to run a specific version of GCC.
97 When you compile C++ programs, you should invoke GCC as @command{g++} 
98 instead.  @xref{Invoking G++,,Compiling C++ Programs}, 
99 for information about the differences in behavior between @command{gcc} 
100 and @code{g++} when compiling C++ programs.
102 @cindex grouping options
103 @cindex options, grouping
104 The @command{gcc} program accepts options and file names as operands.  Many
105 options have multi-letter names; therefore multiple single-letter options
106 may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
107 -v}}.
109 @cindex order of options
110 @cindex options, order
111 You can mix options and other arguments.  For the most part, the order
112 you use doesn't matter.  Order does matter when you use several
113 options of the same kind; for example, if you specify @option{-L} more
114 than once, the directories are searched in the order specified.  Also,
115 the placement of the @option{-l} option is significant.
117 Many options have long names starting with @samp{-f} or with
118 @samp{-W}---for example,
119 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
120 these have both positive and negative forms; the negative form of
121 @option{-ffoo} is @option{-fno-foo}.  This manual documents
122 only one of these two forms, whichever one is not the default.
124 @c man end
126 @xref{Option Index}, for an index to GCC's options.
128 @menu
129 * Option Summary::      Brief list of all options, without explanations.
130 * Overall Options::     Controlling the kind of output:
131                         an executable, object files, assembler files,
132                         or preprocessed source.
133 * Invoking G++::        Compiling C++ programs.
134 * C Dialect Options::   Controlling the variant of C language compiled.
135 * C++ Dialect Options:: Variations on C++.
136 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
137                         and Objective-C++.
138 * Diagnostic Message Formatting Options:: Controlling how diagnostics should
139                         be formatted.
140 * Warning Options::     How picky should the compiler be?
141 * Debugging Options::   Producing debuggable code.
142 * Optimize Options::    How much optimization?
143 * Instrumentation Options:: Enabling profiling and extra run-time error checking.
144 * Preprocessor Options:: Controlling header files and macro definitions.
145                          Also, getting dependency information for Make.
146 * Assembler Options::   Passing options to the assembler.
147 * Link Options::        Specifying libraries and so on.
148 * Directory Options::   Where to find header files and libraries.
149                         Where to find the compiler executable files.
150 * Code Gen Options::    Specifying conventions for function calls, data layout
151                         and register usage.
152 * Developer Options::   Printing GCC configuration info, statistics, and
153                         debugging dumps.
154 * Submodel Options::    Target-specific options, such as compiling for a
155                         specific processor variant.
156 * Spec Files::          How to pass switches to sub-processes.
157 * Environment Variables:: Env vars that affect GCC.
158 * Precompiled Headers:: Compiling a header once, and using it many times.
159 @end menu
161 @c man begin OPTIONS
163 @node Option Summary
164 @section Option Summary
166 Here is a summary of all the options, grouped by type.  Explanations are
167 in the following sections.
169 @table @emph
170 @item Overall Options
171 @xref{Overall Options,,Options Controlling the Kind of Output}.
172 @gccoptlist{-c  -S  -E  -o @var{file}  -x @var{language}  @gol
173 -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  --version @gol
174 -pass-exit-codes  -pipe  -specs=@var{file}  -wrapper  @gol
175 @@@var{file}  -ffile-prefix-map=@var{old}=@var{new}  @gol
176 -fplugin=@var{file}  -fplugin-arg-@var{name}=@var{arg}  @gol
177 -fdump-ada-spec@r{[}-slim@r{]}  -fada-spec-parent=@var{unit}  -fdump-go-spec=@var{file}}
179 @item C Language Options
180 @xref{C Dialect Options,,Options Controlling C Dialect}.
181 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
182 -fpermitted-flt-eval-methods=@var{standard} @gol
183 -aux-info @var{filename}  -fallow-parameterless-variadic-functions @gol
184 -fno-asm  -fno-builtin  -fno-builtin-@var{function}  -fgimple@gol
185 -fhosted  -ffreestanding  -fopenacc  -fopenmp  -fopenmp-simd @gol
186 -fms-extensions  -fplan9-extensions  -fsso-struct=@var{endianness} @gol
187 -fallow-single-precision  -fcond-mismatch  -flax-vector-conversions @gol
188 -fsigned-bitfields  -fsigned-char @gol
189 -funsigned-bitfields  -funsigned-char}
191 @item C++ Language Options
192 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
193 @gccoptlist{-fabi-version=@var{n}  -fno-access-control @gol
194 -faligned-new=@var{n}  -fargs-in-order=@var{n}  -fcheck-new @gol
195 -fconstexpr-depth=@var{n}  -fconstexpr-loop-limit=@var{n} @gol
196 -fno-elide-constructors @gol
197 -fno-enforce-eh-specs @gol
198 -fno-gnu-keywords @gol
199 -fno-implicit-templates @gol
200 -fno-implicit-inline-templates @gol
201 -fno-implement-inlines  -fms-extensions @gol
202 -fnew-inheriting-ctors @gol
203 -fnew-ttp-matching @gol
204 -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
205 -fno-optional-diags  -fpermissive @gol
206 -fno-pretty-templates @gol
207 -frepo  -fno-rtti  -fsized-deallocation @gol
208 -ftemplate-backtrace-limit=@var{n} @gol
209 -ftemplate-depth=@var{n} @gol
210 -fno-threadsafe-statics  -fuse-cxa-atexit @gol
211 -fno-weak  -nostdinc++ @gol
212 -fvisibility-inlines-hidden @gol
213 -fvisibility-ms-compat @gol
214 -fext-numeric-literals @gol
215 -Wabi=@var{n}  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy @gol
216 -Wdelete-non-virtual-dtor -Wdeprecated-copy  -Wliteral-suffix @gol
217 -Wmultiple-inheritance @gol
218 -Wnamespaces  -Wnarrowing @gol
219 -Wnoexcept  -Wnoexcept-type  -Wclass-memaccess @gol
220 -Wnon-virtual-dtor  -Wreorder  -Wregister @gol
221 -Weffc++  -Wstrict-null-sentinel  -Wtemplates @gol
222 -Wno-non-template-friend  -Wold-style-cast @gol
223 -Woverloaded-virtual  -Wno-pmf-conversions @gol
224 -Wsign-promo  -Wvirtual-inheritance}
226 @item Objective-C and Objective-C++ Language Options
227 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
228 Objective-C and Objective-C++ Dialects}.
229 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
230 -fgnu-runtime  -fnext-runtime @gol
231 -fno-nil-receivers @gol
232 -fobjc-abi-version=@var{n} @gol
233 -fobjc-call-cxx-cdtors @gol
234 -fobjc-direct-dispatch @gol
235 -fobjc-exceptions @gol
236 -fobjc-gc @gol
237 -fobjc-nilcheck @gol
238 -fobjc-std=objc1 @gol
239 -fno-local-ivars @gol
240 -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]} @gol
241 -freplace-objc-classes @gol
242 -fzero-link @gol
243 -gen-decls @gol
244 -Wassign-intercept @gol
245 -Wno-protocol  -Wselector @gol
246 -Wstrict-selector-match @gol
247 -Wundeclared-selector}
249 @item Diagnostic Message Formatting Options
250 @xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
251 @gccoptlist{-fmessage-length=@var{n}  @gol
252 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
253 -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
254 -fno-diagnostics-show-option  -fno-diagnostics-show-caret @gol
255 -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch @gol
256 -fdiagnostics-show-template-tree -fno-elide-type @gol
257 -fno-show-column}
259 @item Warning Options
260 @xref{Warning Options,,Options to Request or Suppress Warnings}.
261 @gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
262 -pedantic-errors @gol
263 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  @gol
264 -Walloc-zero  -Walloc-size-larger-than=@var{n}
265 -Walloca  -Walloca-larger-than=@var{n} @gol
266 -Wno-aggressive-loop-optimizations  -Warray-bounds  -Warray-bounds=@var{n} @gol
267 -Wno-attributes  -Wbool-compare  -Wbool-operation @gol
268 -Wno-builtin-declaration-mismatch @gol
269 -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat @gol
270 -Wc++-compat  -Wc++11-compat  -Wc++14-compat  @gol
271 -Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual  @gol
272 -Wchar-subscripts  -Wchkp  -Wcatch-value  -Wcatch-value=@var{n} @gol
273 -Wclobbered  -Wcomment  -Wconditionally-supported @gol
274 -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wdangling-else  -Wdate-time @gol
275 -Wdelete-incomplete @gol
276 -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init @gol
277 -Wdisabled-optimization @gol
278 -Wno-discarded-qualifiers  -Wno-discarded-array-qualifiers @gol
279 -Wno-div-by-zero  -Wdouble-promotion @gol
280 -Wduplicated-branches  -Wduplicated-cond @gol
281 -Wempty-body  -Wenum-compare  -Wno-endif-labels  -Wexpansion-to-defined @gol
282 -Werror  -Werror=*  -Wextra-semi  -Wfatal-errors @gol
283 -Wfloat-equal  -Wformat  -Wformat=2 @gol
284 -Wno-format-contains-nul  -Wno-format-extra-args  @gol
285 -Wformat-nonliteral -Wformat-overflow=@var{n} @gol
286 -Wformat-security  -Wformat-signedness  -Wformat-truncation=@var{n} @gol
287 -Wformat-y2k  -Wframe-address @gol
288 -Wframe-larger-than=@var{len}  -Wno-free-nonheap-object  -Wjump-misses-init @gol
289 -Wif-not-aligned @gol
290 -Wignored-qualifiers  -Wignored-attributes  -Wincompatible-pointer-types @gol
291 -Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=@var{n} @gol
292 -Wimplicit-function-declaration  -Wimplicit-int @gol
293 -Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context @gol
294 -Wno-int-to-pointer-cast  -Winvalid-memory-model  -Wno-invalid-offsetof @gol
295 -Winvalid-pch  -Wlarger-than=@var{len} @gol
296 -Wlogical-op  -Wlogical-not-parentheses  -Wlong-long @gol
297 -Wmain  -Wmaybe-uninitialized  -Wmemset-elt-size  -Wmemset-transposed-args @gol
298 -Wmisleading-indentation  -Wmissing-attributes -Wmissing-braces @gol
299 -Wmissing-field-initializers  -Wmissing-include-dirs @gol
300 -Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare @gol
301 -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol
302 -Wnull-dereference  -Wodr  -Wno-overflow  -Wopenmp-simd  @gol
303 -Woverride-init-side-effects  -Woverlength-strings @gol
304 -Wpacked  -Wpacked-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
305 -Wparentheses  -Wno-pedantic-ms-format @gol
306 -Wplacement-new  -Wplacement-new=@var{n} @gol
307 -Wpointer-arith  -Wpointer-compare  -Wno-pointer-to-int-cast @gol
308 -Wno-pragmas  -Wredundant-decls  -Wrestrict  -Wno-return-local-addr @gol
309 -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar @gol
310 -Wshadow=global,  -Wshadow=local,  -Wshadow=compatible-local @gol
311 -Wshift-overflow  -Wshift-overflow=@var{n} @gol
312 -Wshift-count-negative  -Wshift-count-overflow  -Wshift-negative-value @gol
313 -Wsign-compare  -Wsign-conversion  -Wfloat-conversion @gol
314 -Wno-scalar-storage-order  -Wsizeof-pointer-div @gol
315 -Wsizeof-pointer-memaccess  -Wsizeof-array-argument @gol
316 -Wstack-protector  -Wstack-usage=@var{len}  -Wstrict-aliasing @gol
317 -Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=@var{n} @gol
318 -Wstringop-overflow=@var{n} -Wstringop-truncation @gol
319 -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}malloc@r{]} @gol
320 -Wsuggest-final-types @gol  -Wsuggest-final-methods  -Wsuggest-override @gol
321 -Wmissing-format-attribute  -Wsubobject-linkage @gol
322 -Wswitch  -Wswitch-bool  -Wswitch-default  -Wswitch-enum @gol
323 -Wswitch-unreachable  -Wsync-nand @gol
324 -Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs @gol
325 -Wtype-limits  -Wundef @gol
326 -Wuninitialized  -Wunknown-pragmas  -Wunsafe-loop-optimizations @gol
327 -Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
328 -Wunused-label  -Wunused-local-typedefs  -Wunused-macros @gol
329 -Wunused-parameter  -Wno-unused-result @gol
330 -Wunused-value  -Wunused-variable @gol
331 -Wunused-const-variable  -Wunused-const-variable=@var{n} @gol
332 -Wunused-but-set-parameter  -Wunused-but-set-variable @gol
333 -Wuseless-cast  -Wvariadic-macros  -Wvector-operation-performance @gol
334 -Wvla  -Wvla-larger-than=@var{n}  -Wvolatile-register-var  -Wwrite-strings @gol
335 -Wzero-as-null-pointer-constant  -Whsa}
337 @item C and Objective-C-only Warning Options
338 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
339 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
340 -Wold-style-declaration  -Wold-style-definition @gol
341 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
342 -Wdeclaration-after-statement  -Wpointer-sign}
344 @item Debugging Options
345 @xref{Debugging Options,,Options for Debugging Your Program}.
346 @gccoptlist{-g  -g@var{level}  -gdwarf  -gdwarf-@var{version} @gol
347 -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
348 -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
349 -gas-loc-support  -gno-as-loc-support @gol
350 -gas-locview-support  -gno-as-locview-support @gol
351 -gcolumn-info  -gno-column-info @gol
352 -gstatement-frontiers  -gno-statement-frontiers @gol
353 -gvariable-location-views  -gno-variable-location-views @gol
354 -ginternal-reset-location-views  -gno-internal-reset-location-views @gol
355 -ginline-points  -gno-inline-points @gol
356 -gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
357 -fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
358 -fno-eliminate-unused-debug-types @gol
359 -femit-struct-debug-baseonly  -femit-struct-debug-reduced @gol
360 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
361 -feliminate-unused-debug-symbols  -femit-class-debug-always @gol
362 -fno-merge-debug-strings  -fno-dwarf2-cfi-asm @gol
363 -fvar-tracking  -fvar-tracking-assignments}
365 @item Optimization Options
366 @xref{Optimize Options,,Options that Control Optimization}.
367 @gccoptlist{-faggressive-loop-optimizations  -falign-functions[=@var{n}] @gol
368 -falign-jumps[=@var{n}] @gol
369 -falign-labels[=@var{n}]  -falign-loops[=@var{n}] @gol
370 -fassociative-math  -fauto-profile  -fauto-profile[=@var{path}] @gol
371 -fauto-inc-dec  -fbranch-probabilities @gol
372 -fbranch-target-load-optimize  -fbranch-target-load-optimize2 @gol
373 -fbtr-bb-exclusive  -fcaller-saves @gol
374 -fcombine-stack-adjustments  -fconserve-stack @gol
375 -fcompare-elim  -fcprop-registers  -fcrossjumping @gol
376 -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules @gol
377 -fcx-limited-range @gol
378 -fdata-sections  -fdce  -fdelayed-branch @gol
379 -fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively @gol
380 -fdevirtualize-at-ltrans  -fdse @gol
381 -fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects @gol
382 -ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=@var{style} @gol
383 -fforward-propagate  -ffp-contract=@var{style}  -ffunction-sections @gol
384 -fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity @gol
385 -fgcse-sm  -fhoist-adjacent-loads  -fif-conversion @gol
386 -fif-conversion2  -findirect-inlining @gol
387 -finline-functions  -finline-functions-called-once  -finline-limit=@var{n} @gol
388 -finline-small-functions  -fipa-cp  -fipa-cp-clone @gol
389 -fipa-bit-cp -fipa-vrp @gol
390 -fipa-pta  -fipa-profile  -fipa-pure-const  -fipa-reference  -fipa-icf @gol
391 -fira-algorithm=@var{algorithm} @gol
392 -fira-region=@var{region}  -fira-hoist-pressure @gol
393 -fira-loop-pressure  -fno-ira-share-save-slots @gol
394 -fno-ira-share-spill-slots @gol
395 -fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute @gol
396 -fivopts  -fkeep-inline-functions  -fkeep-static-functions @gol
397 -fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage @gol
398 -floop-block  -floop-interchange  -floop-strip-mine @gol
399 -floop-unroll-and-jam  -floop-nest-optimize @gol
400 -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level @gol
401 -flto-partition=@var{alg}  -fmerge-all-constants @gol
402 -fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves @gol
403 -fmove-loop-invariants  -fno-branch-count-reg @gol
404 -fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse @gol
405 -fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole @gol
406 -fno-peephole2  -fno-printf-return-value  -fno-sched-interblock @gol
407 -fno-sched-spec  -fno-signed-zeros @gol
408 -fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss @gol
409 -fomit-frame-pointer  -foptimize-sibling-calls @gol
410 -fpartial-inlining  -fpeel-loops  -fpredictive-commoning @gol
411 -fprefetch-loop-arrays @gol
412 -fprofile-correction @gol
413 -fprofile-use  -fprofile-use=@var{path}  -fprofile-values @gol
414 -fprofile-reorder-functions @gol
415 -freciprocal-math  -free  -frename-registers  -freorder-blocks @gol
416 -freorder-blocks-algorithm=@var{algorithm} @gol
417 -freorder-blocks-and-partition  -freorder-functions @gol
418 -frerun-cse-after-loop  -freschedule-modulo-scheduled-loops @gol
419 -frounding-math  -fsched2-use-superblocks  -fsched-pressure @gol
420 -fsched-spec-load  -fsched-spec-load-dangerous @gol
421 -fsched-stalled-insns-dep[=@var{n}]  -fsched-stalled-insns[=@var{n}] @gol
422 -fsched-group-heuristic  -fsched-critical-path-heuristic @gol
423 -fsched-spec-insn-heuristic  -fsched-rank-heuristic @gol
424 -fsched-last-insn-heuristic  -fsched-dep-count-heuristic @gol
425 -fschedule-fusion @gol
426 -fschedule-insns  -fschedule-insns2  -fsection-anchors @gol
427 -fselective-scheduling  -fselective-scheduling2 @gol
428 -fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops @gol
429 -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate @gol
430 -fsignaling-nans @gol
431 -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops@gol
432 -fsplit-paths @gol
433 -fsplit-wide-types  -fssa-backprop  -fssa-phiopt @gol
434 -fstdarg-opt  -fstore-merging  -fstrict-aliasing @gol
435 -fthread-jumps  -ftracer  -ftree-bit-ccp @gol
436 -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch @gol
437 -ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts @gol
438 -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting @gol
439 -ftree-loop-if-convert  -ftree-loop-im @gol
440 -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns @gol
441 -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize @gol
442 -ftree-loop-vectorize @gol
443 -ftree-parallelize-loops=@var{n}  -ftree-pre  -ftree-partial-pre  -ftree-pta @gol
444 -ftree-reassoc  -ftree-sink  -ftree-slsr  -ftree-sra @gol
445 -ftree-switch-conversion  -ftree-tail-merge @gol
446 -ftree-ter  -ftree-vectorize  -ftree-vrp  -funconstrained-commons @gol
447 -funit-at-a-time  -funroll-all-loops  -funroll-loops @gol
448 -funsafe-math-optimizations  -funswitch-loops @gol
449 -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt @gol
450 -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin @gol
451 --param @var{name}=@var{value}
452 -O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og}
454 @item Program Instrumentation Options
455 @xref{Instrumentation Options,,Program Instrumentation Options}.
456 @gccoptlist{-p  -pg  -fprofile-arcs  --coverage  -ftest-coverage @gol
457 -fprofile-abs-path @gol
458 -fprofile-dir=@var{path}  -fprofile-generate  -fprofile-generate=@var{path} @gol
459 -fsanitize=@var{style}  -fsanitize-recover  -fsanitize-recover=@var{style} @gol
460 -fasan-shadow-offset=@var{number}  -fsanitize-sections=@var{s1},@var{s2},... @gol
461 -fsanitize-undefined-trap-on-error  -fbounds-check @gol
462 -fcheck-pointer-bounds  -fchkp-check-incomplete-type @gol
463 -fchkp-first-field-has-own-bounds  -fchkp-narrow-bounds @gol
464 -fchkp-narrow-to-innermost-array  -fchkp-optimize @gol
465 -fchkp-use-fast-string-functions  -fchkp-use-nochk-string-functions @gol
466 -fchkp-use-static-bounds  -fchkp-use-static-const-bounds @gol
467 -fchkp-treat-zero-dynamic-size-as-infinite  -fchkp-check-read @gol
468 -fchkp-check-read  -fchkp-check-write  -fchkp-store-bounds @gol
469 -fchkp-instrument-calls  -fchkp-instrument-marked-only @gol
470 -fchkp-use-wrappers  -fchkp-flexible-struct-trailing-arrays@gol
471 -fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{]} @gol
472 -fstack-protector  -fstack-protector-all  -fstack-protector-strong @gol
473 -fstack-protector-explicit  -fstack-check @gol
474 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
475 -fno-stack-limit  -fsplit-stack @gol
476 -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol
477 -fvtv-counts  -fvtv-debug @gol
478 -finstrument-functions @gol
479 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
480 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}}
482 @item Preprocessor Options
483 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
484 @gccoptlist{-A@var{question}=@var{answer} @gol
485 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
486 -C  -CC  -D@var{macro}@r{[}=@var{defn}@r{]} @gol
487 -dD  -dI  -dM  -dN  -dU @gol
488 -fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers  @gol
489 -fexec-charset=@var{charset}  -fextended-identifiers  @gol
490 -finput-charset=@var{charset} -fmacro-prefix-map=@var{old}=@var{new}  @gol
491 -fno-canonical-system-headers @gol -fpch-deps  -fpch-preprocess  @gol
492 -fpreprocessed -ftabstop=@var{width}  -ftrack-macro-expansion  @gol
493 -fwide-exec-charset=@var{charset}  -fworking-directory @gol
494 -H  -imacros @var{file}  -include @var{file} @gol
495 -M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT @gol
496 -no-integrated-cpp  -P  -pthread  -remap @gol
497 -traditional  -traditional-cpp  -trigraphs @gol
498 -U@var{macro}  -undef  @gol
499 -Wp,@var{option}  -Xpreprocessor @var{option}}
501 @item Assembler Options
502 @xref{Assembler Options,,Passing Options to the Assembler}.
503 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
505 @item Linker Options
506 @xref{Link Options,,Options for Linking}.
507 @gccoptlist{@var{object-file-name}  -fuse-ld=@var{linker}  -l@var{library} @gol
508 -nostartfiles  -nodefaultlibs  -nostdlib  -pie  -pthread  -rdynamic @gol
509 -s  -static -static-pie -static-libgcc  -static-libstdc++ @gol
510 -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan @gol
511 -static-libmpx  -static-libmpxwrappers @gol
512 -shared  -shared-libgcc  -symbolic @gol
513 -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
514 -u @var{symbol}  -z @var{keyword}}
516 @item Directory Options
517 @xref{Directory Options,,Options for Directory Search}.
518 @gccoptlist{-B@var{prefix}  -I@var{dir}  -I- @gol
519 -idirafter @var{dir} @gol
520 -imacros @var{file}  -imultilib @var{dir} @gol
521 -iplugindir=@var{dir}  -iprefix @var{file} @gol
522 -iquote @var{dir}  -isysroot @var{dir}  -isystem @var{dir} @gol
523 -iwithprefix @var{dir}  -iwithprefixbefore @var{dir}  @gol
524 -L@var{dir}  -no-canonical-prefixes  --no-sysroot-suffix @gol
525 -nostdinc  -nostdinc++  --sysroot=@var{dir}}
527 @item Code Generation Options
528 @xref{Code Gen Options,,Options for Code Generation Conventions}.
529 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
530 -ffixed-@var{reg}  -fexceptions @gol
531 -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
532 -fasynchronous-unwind-tables @gol
533 -fno-gnu-unique @gol
534 -finhibit-size-directive  -fno-common  -fno-ident @gol
535 -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt @gol
536 -fno-jump-tables @gol
537 -frecord-gcc-switches @gol
538 -freg-struct-return  -fshort-enums  -fshort-wchar @gol
539 -fverbose-asm  -fpack-struct[=@var{n}]  @gol
540 -fleading-underscore  -ftls-model=@var{model} @gol
541 -fstack-reuse=@var{reuse_level} @gol
542 -ftrampolines  -ftrapv  -fwrapv @gol
543 -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @gol
544 -fstrict-volatile-bitfields  -fsync-libcalls}
546 @item Developer Options
547 @xref{Developer Options,,GCC Developer Options}.
548 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
549 -dumpfullversion  -fchecking  -fchecking=@var{n}  -fdbg-cnt-list @gol
550 -fdbg-cnt=@var{counter-value-list} @gol
551 -fdisable-ipa-@var{pass_name} @gol
552 -fdisable-rtl-@var{pass_name} @gol
553 -fdisable-rtl-@var{pass-name}=@var{range-list} @gol
554 -fdisable-tree-@var{pass_name} @gol
555 -fdisable-tree-@var{pass-name}=@var{range-list} @gol
556 -fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links @gol
557 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
558 -fdump-final-insns@r{[}=@var{file}@r{]} @gol
559 -fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline @gol
560 -fdump-lang-all @gol
561 -fdump-lang-@var{switch} @gol
562 -fdump-lang-@var{switch}-@var{options} @gol
563 -fdump-lang-@var{switch}-@var{options}=@var{filename} @gol
564 -fdump-passes @gol
565 -fdump-rtl-@var{pass}  -fdump-rtl-@var{pass}=@var{filename} @gol
566 -fdump-statistics @gol
567 -fdump-tree-all @gol
568 -fdump-tree-@var{switch} @gol
569 -fdump-tree-@var{switch}-@var{options} @gol
570 -fdump-tree-@var{switch}-@var{options}=@var{filename} @gol
571 -fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
572 -fenable-@var{kind}-@var{pass} @gol
573 -fenable-@var{kind}-@var{pass}=@var{range-list} @gol
574 -fira-verbose=@var{n} @gol
575 -flto-report  -flto-report-wpa  -fmem-report-wpa @gol
576 -fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report @gol
577 -fopt-info  -fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol
578 -fprofile-report @gol
579 -frandom-seed=@var{string}  -fsched-verbose=@var{n} @gol
580 -fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose @gol
581 -fstats  -fstack-usage  -ftime-report  -ftime-report-details @gol
582 -fvar-tracking-assignments-toggle  -gtoggle @gol
583 -print-file-name=@var{library}  -print-libgcc-file-name @gol
584 -print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
585 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
586 -print-sysroot  -print-sysroot-headers-suffix @gol
587 -save-temps  -save-temps=cwd  -save-temps=obj  -time@r{[}=@var{file}@r{]}}
589 @item Machine-Dependent Options
590 @xref{Submodel Options,,Machine-Dependent Options}.
591 @c This list is ordered alphanumerically by subsection name.
592 @c Try and put the significant identifier (CPU or system) first,
593 @c so users have a clue at guessing where the ones they want will be.
595 @emph{AArch64 Options}
596 @gccoptlist{-mabi=@var{name}  -mbig-endian  -mlittle-endian @gol
597 -mgeneral-regs-only @gol
598 -mcmodel=tiny  -mcmodel=small  -mcmodel=large @gol
599 -mstrict-align -mno-strict-align @gol
600 -momit-leaf-frame-pointer @gol
601 -mtls-dialect=desc  -mtls-dialect=traditional @gol
602 -mtls-size=@var{size} @gol
603 -mfix-cortex-a53-835769  -mfix-cortex-a53-843419 @gol
604 -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div @gol
605 -mpc-relative-literal-loads @gol
606 -msign-return-address=@var{scope} @gol
607 -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}  @gol
608 -moverride=@var{string}  -mverbose-cost-dump}
610 @emph{Adapteva Epiphany Options}
611 @gccoptlist{-mhalf-reg-file  -mprefer-short-insn-regs @gol
612 -mbranch-cost=@var{num}  -mcmove  -mnops=@var{num}  -msoft-cmpsf @gol
613 -msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=@var{num} @gol
614 -mround-nearest  -mlong-calls  -mshort-calls  -msmall16 @gol
615 -mfp-mode=@var{mode}  -mvect-double  -max-vect-align=@var{num} @gol
616 -msplit-vecmove-early  -m1reg-@var{reg}}
618 @emph{ARC Options}
619 @gccoptlist{-mbarrel-shifter -mjli-always @gol
620 -mcpu=@var{cpu}  -mA6  -mARC600  -mA7  -mARC700 @gol
621 -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr @gol
622 -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic @gol
623 -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap @gol
624 -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape @gol
625 -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof @gol
626 -mlong-calls  -mmedium-calls  -msdata -mirq-ctrl-saved @gol
627 -mrgf-banked-regs -mlpc-width=@var{width} -G @var{num} @gol
628 -mvolatile-cache  -mtp-regno=@var{regno} @gol
629 -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc @gol
630 -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi @gol
631 -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none @gol
632 -mlra-priority-compact mlra-priority-noncompact  -mno-millicode @gol
633 -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=@var{level} @gol
634 -mtune=@var{cpu}  -mmultcost=@var{num} @gol
635 -munalign-prob-threshold=@var{probability}  -mmpy-option=@var{multo} @gol
636 -mdiv-rem  -mcode-density  -mll64  -mfpu=@var{fpu} -mrf16}
638 @emph{ARM Options}
639 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
640 -mabi=@var{name} @gol
641 -mapcs-stack-check  -mno-apcs-stack-check @gol
642 -mapcs-reentrant  -mno-apcs-reentrant @gol
643 -msched-prolog  -mno-sched-prolog @gol
644 -mlittle-endian  -mbig-endian @gol
645 -mbe8 -mbe32 @gol
646 -mfloat-abi=@var{name} @gol
647 -mfp16-format=@var{name}
648 -mthumb-interwork  -mno-thumb-interwork @gol
649 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
650 -mtune=@var{name}  -mprint-tune-info @gol
651 -mstructure-size-boundary=@var{n} @gol
652 -mabort-on-noreturn @gol
653 -mlong-calls  -mno-long-calls @gol
654 -msingle-pic-base  -mno-single-pic-base @gol
655 -mpic-register=@var{reg} @gol
656 -mnop-fun-dllimport @gol
657 -mpoke-function-name @gol
658 -mthumb  -marm  -mflip-thumb @gol
659 -mtpcs-frame  -mtpcs-leaf-frame @gol
660 -mcaller-super-interworking  -mcallee-super-interworking @gol
661 -mtp=@var{name}  -mtls-dialect=@var{dialect} @gol
662 -mword-relocations @gol
663 -mfix-cortex-m3-ldrd @gol
664 -munaligned-access @gol
665 -mneon-for-64bits @gol
666 -mslow-flash-data @gol
667 -masm-syntax-unified @gol
668 -mrestrict-it @gol
669 -mverbose-cost-dump @gol
670 -mpure-code @gol
671 -mcmse}
673 @emph{AVR Options}
674 @gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args @gol
675 -mbranch-cost=@var{cost} @gol
676 -mcall-prologues  -mgas-isr-prologues  -mint8 @gol
677 -mn_flash=@var{size}  -mno-interrupts @gol
678 -mmain-is-OS_task -mrelax  -mrmw  -mstrict-X  -mtiny-stack @gol
679 -mfract-convert-truncate @gol
680 -mshort-calls  -nodevicelib @gol
681 -Waddr-space-convert  -Wmisspelled-isr}
683 @emph{Blackfin Options}
684 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
685 -msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
686 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
687 -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
688 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
689 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
690 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
691 -mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram @gol
692 -micplb}
694 @emph{C6X Options}
695 @gccoptlist{-mbig-endian  -mlittle-endian  -march=@var{cpu} @gol
696 -msim  -msdata=@var{sdata-type}}
698 @emph{CRIS Options}
699 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
700 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
701 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
702 -mstack-align  -mdata-align  -mconst-align @gol
703 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
704 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
705 -mmul-bug-workaround  -mno-mul-bug-workaround}
707 @emph{CR16 Options}
708 @gccoptlist{-mmac @gol
709 -mcr16cplus  -mcr16c @gol
710 -msim  -mint32  -mbit-ops
711 -mdata-model=@var{model}}
713 @emph{Darwin Options}
714 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
715 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
716 -client_name  -compatibility_version  -current_version @gol
717 -dead_strip @gol
718 -dependency-file  -dylib_file  -dylinker_install_name @gol
719 -dynamic  -dynamiclib  -exported_symbols_list @gol
720 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
721 -force_flat_namespace  -headerpad_max_install_names @gol
722 -iframework @gol
723 -image_base  -init  -install_name  -keep_private_externs @gol
724 -multi_module  -multiply_defined  -multiply_defined_unused @gol
725 -noall_load   -no_dead_strip_inits_and_terms @gol
726 -nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit @gol
727 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
728 -private_bundle  -read_only_relocs  -sectalign @gol
729 -sectobjectsymbols  -whyload  -seg1addr @gol
730 -sectcreate  -sectobjectsymbols  -sectorder @gol
731 -segaddr  -segs_read_only_addr  -segs_read_write_addr @gol
732 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
733 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
734 -single_module  -static  -sub_library  -sub_umbrella @gol
735 -twolevel_namespace  -umbrella  -undefined @gol
736 -unexported_symbols_list  -weak_reference_mismatches @gol
737 -whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=@var{version} @gol
738 -mkernel  -mone-byte-bool}
740 @emph{DEC Alpha Options}
741 @gccoptlist{-mno-fp-regs  -msoft-float @gol
742 -mieee  -mieee-with-inexact  -mieee-conformant @gol
743 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
744 -mtrap-precision=@var{mode}  -mbuild-constants @gol
745 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
746 -mbwx  -mmax  -mfix  -mcix @gol
747 -mfloat-vax  -mfloat-ieee @gol
748 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
749 -msmall-text  -mlarge-text @gol
750 -mmemory-latency=@var{time}}
752 @emph{FR30 Options}
753 @gccoptlist{-msmall-model  -mno-lsim}
755 @emph{FT32 Options}
756 @gccoptlist{-msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm}
758 @emph{FRV Options}
759 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
760 -mhard-float  -msoft-float @gol
761 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
762 -mdouble  -mno-double @gol
763 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
764 -mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic @gol
765 -mlinked-fp  -mlong-calls  -malign-labels @gol
766 -mlibrary-pic  -macc-4  -macc-8 @gol
767 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
768 -moptimize-membar  -mno-optimize-membar @gol
769 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
770 -mvliw-branch  -mno-vliw-branch @gol
771 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
772 -mno-nested-cond-exec  -mtomcat-stats @gol
773 -mTLS  -mtls @gol
774 -mcpu=@var{cpu}}
776 @emph{GNU/Linux Options}
777 @gccoptlist{-mglibc  -muclibc  -mmusl  -mbionic  -mandroid @gol
778 -tno-android-cc  -tno-android-ld}
780 @emph{H8/300 Options}
781 @gccoptlist{-mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300}
783 @emph{HPPA Options}
784 @gccoptlist{-march=@var{architecture-type} @gol
785 -mcaller-copies  -mdisable-fpregs  -mdisable-indexing @gol
786 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
787 -mfixed-range=@var{register-range} @gol
788 -mjump-in-delay  -mlinker-opt  -mlong-calls @gol
789 -mlong-load-store  -mno-disable-fpregs @gol
790 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
791 -mno-jump-in-delay  -mno-long-load-store @gol
792 -mno-portable-runtime  -mno-soft-float @gol
793 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
794 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
795 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
796 -munix=@var{unix-std}  -nolibdld  -static  -threads}
798 @emph{IA-64 Options}
799 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
800 -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata @gol
801 -mconstant-gp  -mauto-pic  -mfused-madd @gol
802 -minline-float-divide-min-latency @gol
803 -minline-float-divide-max-throughput @gol
804 -mno-inline-float-divide @gol
805 -minline-int-divide-min-latency @gol
806 -minline-int-divide-max-throughput  @gol
807 -mno-inline-int-divide @gol
808 -minline-sqrt-min-latency  -minline-sqrt-max-throughput @gol
809 -mno-inline-sqrt @gol
810 -mdwarf2-asm  -mearly-stop-bits @gol
811 -mfixed-range=@var{register-range}  -mtls-size=@var{tls-size} @gol
812 -mtune=@var{cpu-type}  -milp32  -mlp64 @gol
813 -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec @gol
814 -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec @gol
815 -msched-spec-ldc  -msched-spec-control-ldc @gol
816 -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns @gol
817 -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path @gol
818 -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost @gol
819 -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=@var{max-insns}}
821 @emph{LM32 Options}
822 @gccoptlist{-mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled @gol
823 -msign-extend-enabled  -muser-enabled}
825 @emph{M32R/D Options}
826 @gccoptlist{-m32r2  -m32rx  -m32r @gol
827 -mdebug @gol
828 -malign-loops  -mno-align-loops @gol
829 -missue-rate=@var{number} @gol
830 -mbranch-cost=@var{number} @gol
831 -mmodel=@var{code-size-model-type} @gol
832 -msdata=@var{sdata-type} @gol
833 -mno-flush-func  -mflush-func=@var{name} @gol
834 -mno-flush-trap  -mflush-trap=@var{number} @gol
835 -G @var{num}}
837 @emph{M32C Options}
838 @gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}
840 @emph{M680x0 Options}
841 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune} @gol
842 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
843 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
844 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
845 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
846 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
847 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
848 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
849 -mxgot  -mno-xgot  -mlong-jump-table-offsets}
851 @emph{MCore Options}
852 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
853 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
854 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
855 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
856 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
858 @emph{MeP Options}
859 @gccoptlist{-mabsdiff  -mall-opts  -maverage  -mbased=@var{n}  -mbitops @gol
860 -mc=@var{n}  -mclip  -mconfig=@var{name}  -mcop  -mcop32  -mcop64  -mivc2 @gol
861 -mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax @gol
862 -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf @gol
863 -mtiny=@var{n}}
865 @emph{MicroBlaze Options}
866 @gccoptlist{-msoft-float  -mhard-float  -msmall-divides  -mcpu=@var{cpu} @gol
867 -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift @gol
868 -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss @gol
869 -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt @gol
870 -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-@var{app-model}
871 -mpic-data-is-text-relative}
873 @emph{MIPS Options}
874 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
875 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 @gol
876 -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 @gol
877 -mips16  -mno-mips16  -mflip-mips16 @gol
878 -minterlink-compressed  -mno-interlink-compressed @gol
879 -minterlink-mips16  -mno-interlink-mips16 @gol
880 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
881 -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
882 -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float @gol
883 -mno-float  -msingle-float  -mdouble-float @gol
884 -modd-spreg  -mno-odd-spreg @gol
885 -mabs=@var{mode}  -mnan=@var{encoding} @gol
886 -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
887 -mmcu  -mmno-mcu @gol
888 -meva  -mno-eva @gol
889 -mvirt  -mno-virt @gol
890 -mxpa  -mno-xpa @gol
891 -mmicromips  -mno-micromips @gol
892 -mmsa  -mno-msa @gol
893 -mfpu=@var{fpu-type} @gol
894 -msmartmips  -mno-smartmips @gol
895 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
896 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
897 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
898 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
899 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
900 -membedded-data  -mno-embedded-data @gol
901 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
902 -mcode-readable=@var{setting} @gol
903 -msplit-addresses  -mno-split-addresses @gol
904 -mexplicit-relocs  -mno-explicit-relocs @gol
905 -mcheck-zero-division  -mno-check-zero-division @gol
906 -mdivide-traps  -mdivide-breaks @gol
907 -mload-store-pairs  -mno-load-store-pairs @gol
908 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
909 -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp @gol
910 -mfix-24k  -mno-fix-24k @gol
911 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
912 -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000 @gol
913 -mfix-vr4120  -mno-fix-vr4120 @gol
914 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
915 -mflush-func=@var{func}  -mno-flush-func @gol
916 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
917 -mcompact-branches=@var{policy} @gol
918 -mfp-exceptions  -mno-fp-exceptions @gol
919 -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci @gol
920 -mlxc1-sxc1 -mno-lxc1-sxc1 -mmadd4 -mno-madd4 @gol
921 -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address @gol
922 -mframe-header-opt  -mno-frame-header-opt}
924 @emph{MMIX Options}
925 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
926 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
927 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
928 -mno-base-addresses  -msingle-exit  -mno-single-exit}
930 @emph{MN10300 Options}
931 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
932 -mno-am33  -mam33  -mam33-2  -mam34 @gol
933 -mtune=@var{cpu-type} @gol
934 -mreturn-pointer-on-d0 @gol
935 -mno-crt0  -mrelax  -mliw  -msetlb}
937 @emph{Moxie Options}
938 @gccoptlist{-meb  -mel  -mmul.x  -mno-crt0}
940 @emph{MSP430 Options}
941 @gccoptlist{-msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax @gol
942 -mwarn-mcu @gol
943 -mcode-region=  -mdata-region= @gol
944 -msilicon-errata=  -msilicon-errata-warn= @gol
945 -mhwmult=  -minrt}
947 @emph{NDS32 Options}
948 @gccoptlist{-mbig-endian  -mlittle-endian @gol
949 -mreduced-regs  -mfull-regs @gol
950 -mcmov  -mno-cmov @gol
951 -mext-perf  -mno-ext-perf @gol
952 -mext-perf2  -mno-ext-perf2 @gol
953 -mext-string  -mno-ext-string @gol
954 -mv3push  -mno-v3push @gol
955 -m16bit  -mno-16bit @gol
956 -misr-vector-size=@var{num} @gol
957 -mcache-block-size=@var{num} @gol
958 -march=@var{arch} @gol
959 -mcmodel=@var{code-model} @gol
960 -mctor-dtor  -mrelax}
962 @emph{Nios II Options}
963 @gccoptlist{-G @var{num}  -mgpopt=@var{option}  -mgpopt  -mno-gpopt @gol
964 -mgprel-sec=@var{regexp} -mr0rel-sec=@var{regexp} @gol
965 -mel  -meb @gol
966 -mno-bypass-cache  -mbypass-cache @gol
967 -mno-cache-volatile  -mcache-volatile @gol
968 -mno-fast-sw-div  -mfast-sw-div @gol
969 -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div @gol
970 -mcustom-@var{insn}=@var{N}  -mno-custom-@var{insn} @gol
971 -mcustom-fpu-cfg=@var{name} @gol
972 -mhal  -msmallc  -msys-crt0=@var{name}  -msys-lib=@var{name} @gol
973 -march=@var{arch}  -mbmx  -mno-bmx  -mcdx  -mno-cdx}
975 @emph{Nvidia PTX Options}
976 @gccoptlist{-m32  -m64  -mmainkernel  -moptimize}
978 @emph{PDP-11 Options}
979 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
980 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
981 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
982 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
983 -mbranch-expensive  -mbranch-cheap @gol
984 -munix-asm  -mdec-asm}
986 @emph{picoChip Options}
987 @gccoptlist{-mae=@var{ae_type}  -mvliw-lookahead=@var{N} @gol
988 -msymbol-as-address  -mno-inefficient-warnings}
990 @emph{PowerPC Options}
991 See RS/6000 and PowerPC Options.
993 @emph{PowerPC SPE Options}
994 @gccoptlist{-mcpu=@var{cpu-type} @gol
995 -mtune=@var{cpu-type} @gol
996 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb @gol
997 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
998 -m32  -mxl-compat  -mno-xl-compat @gol
999 -malign-power  -malign-natural @gol
1000 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
1001 -msingle-float  -mdouble-float @gol
1002 -mupdate  -mno-update @gol
1003 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
1004 -mstrict-align  -mno-strict-align  -mrelocatable @gol
1005 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
1006 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
1007 -msingle-pic-base @gol
1008 -mprioritize-restricted-insns=@var{priority} @gol
1009 -msched-costly-dep=@var{dependence_type} @gol
1010 -minsert-sched-nops=@var{scheme} @gol
1011 -mcall-sysv  -mcall-netbsd @gol
1012 -maix-struct-return  -msvr4-struct-return @gol
1013 -mabi=@var{abi-type}  -msecure-plt  -mbss-plt @gol
1014 -mblock-move-inline-limit=@var{num} @gol
1015 -misel  -mno-isel @gol
1016 -misel=yes  -misel=no @gol
1017 -mspe  -mno-spe @gol
1018 -mspe=yes  -mspe=no @gol
1019 -mfloat-gprs=yes  -mfloat-gprs=no  -mfloat-gprs=single  -mfloat-gprs=double @gol
1020 -mprototype  -mno-prototype @gol
1021 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
1022 -msdata=@var{opt}  -mvxworks  -G @var{num} @gol
1023 -mrecip  -mrecip=@var{opt}  -mno-recip  -mrecip-precision @gol
1024 -mno-recip-precision @gol
1025 -mpointers-to-nested-functions  -mno-pointers-to-nested-functions @gol
1026 -msave-toc-indirect  -mno-save-toc-indirect @gol
1027 -mcompat-align-parm  -mno-compat-align-parm @gol
1028 -mfloat128  -mno-float128 @gol
1029 -mgnu-attribute  -mno-gnu-attribute @gol
1030 -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
1031 -mstack-protector-guard-offset=@var{offset}}
1033 @emph{RISC-V Options}
1034 @gccoptlist{-mbranch-cost=@var{N-instruction} @gol
1035 -mplt  -mno-plt @gol
1036 -mabi=@var{ABI-string} @gol
1037 -mfdiv  -mno-fdiv @gol
1038 -mdiv  -mno-div @gol
1039 -march=@var{ISA-string} @gol
1040 -mtune=@var{processor-string} @gol
1041 -mpreferred-stack-boundary=@var{num} @gol
1042 -msmall-data-limit=@var{N-bytes} @gol
1043 -msave-restore  -mno-save-restore @gol
1044 -mstrict-align -mno-strict-align @gol
1045 -mcmodel=medlow -mcmodel=medany @gol
1046 -mexplicit-relocs  -mno-explicit-relocs @gol
1047 -mrelax -mno-relax @gol}
1049 @emph{RL78 Options}
1050 @gccoptlist{-msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs @gol
1051 -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14 @gol
1052 -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts}
1054 @emph{RS/6000 and PowerPC Options}
1055 @gccoptlist{-mcpu=@var{cpu-type} @gol
1056 -mtune=@var{cpu-type} @gol
1057 -mcmodel=@var{code-model} @gol
1058 -mpowerpc64 @gol
1059 -maltivec  -mno-altivec @gol
1060 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
1061 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
1062 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd @gol
1063 -mfprnd  -mno-fprnd @gol
1064 -mcmpb  -mno-cmpb  -mmfpgpr  -mno-mfpgpr  -mhard-dfp  -mno-hard-dfp @gol
1065 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
1066 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
1067 -malign-power  -malign-natural @gol
1068 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
1069 -mupdate  -mno-update @gol
1070 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
1071 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
1072 -mstrict-align  -mno-strict-align  -mrelocatable @gol
1073 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
1074 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
1075 -mdynamic-no-pic  -maltivec  -mswdiv  -msingle-pic-base @gol
1076 -mprioritize-restricted-insns=@var{priority} @gol
1077 -msched-costly-dep=@var{dependence_type} @gol
1078 -minsert-sched-nops=@var{scheme} @gol
1079 -mcall-aixdesc  -mcall-eabi  -mcall-freebsd  @gol
1080 -mcall-linux  -mcall-netbsd  -mcall-openbsd  @gol
1081 -mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi @gol
1082 -mtraceback=@var{traceback_type} @gol
1083 -maix-struct-return  -msvr4-struct-return @gol
1084 -mabi=@var{abi-type}  -msecure-plt  -mbss-plt @gol
1085 -mblock-move-inline-limit=@var{num} @gol
1086 -mblock-compare-inline-limit=@var{num} @gol
1087 -mblock-compare-inline-loop-limit=@var{num} @gol
1088 -mstring-compare-inline-limit=@var{num} @gol
1089 -misel  -mno-isel @gol
1090 -misel=yes  -misel=no @gol
1091 -mvrsave  -mno-vrsave @gol
1092 -mmulhw  -mno-mulhw @gol
1093 -mdlmzb  -mno-dlmzb @gol
1094 -mprototype  -mno-prototype @gol
1095 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
1096 -msdata=@var{opt}  -mreadonly-in-sdata  -mvxworks  -G @var{num} @gol
1097 -mrecip  -mrecip=@var{opt}  -mno-recip  -mrecip-precision @gol
1098 -mno-recip-precision @gol
1099 -mveclibabi=@var{type}  -mfriz  -mno-friz @gol
1100 -mpointers-to-nested-functions  -mno-pointers-to-nested-functions @gol
1101 -msave-toc-indirect  -mno-save-toc-indirect @gol
1102 -mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector @gol
1103 -mcrypto  -mno-crypto  -mhtm  -mno-htm @gol
1104 -mquad-memory  -mno-quad-memory @gol
1105 -mquad-memory-atomic  -mno-quad-memory-atomic @gol
1106 -mcompat-align-parm  -mno-compat-align-parm @gol
1107 -mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware @gol
1108 -mgnu-attribute  -mno-gnu-attribute @gol
1109 -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
1110 -mstack-protector-guard-offset=@var{offset}}
1112 @emph{RX Options}
1113 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
1114 -mcpu=@gol
1115 -mbig-endian-data  -mlittle-endian-data @gol
1116 -msmall-data @gol
1117 -msim  -mno-sim@gol
1118 -mas100-syntax  -mno-as100-syntax@gol
1119 -mrelax@gol
1120 -mmax-constant-size=@gol
1121 -mint-register=@gol
1122 -mpid@gol
1123 -mallow-string-insns  -mno-allow-string-insns@gol
1124 -mjsr@gol
1125 -mno-warn-multiple-fast-interrupts@gol
1126 -msave-acc-in-interrupts}
1128 @emph{S/390 and zSeries Options}
1129 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
1130 -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp @gol
1131 -mlong-double-64  -mlong-double-128 @gol
1132 -mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack @gol
1133 -msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle @gol
1134 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
1135 -mhtm  -mvx  -mzvector @gol
1136 -mtpf-trace  -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
1137 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard @gol
1138 -mhotpatch=@var{halfwords},@var{halfwords}}
1140 @emph{Score Options}
1141 @gccoptlist{-meb  -mel @gol
1142 -mnhwloop @gol
1143 -muls @gol
1144 -mmac @gol
1145 -mscore5  -mscore5u  -mscore7  -mscore7d}
1147 @emph{SH Options}
1148 @gccoptlist{-m1  -m2  -m2e @gol
1149 -m2a-nofpu  -m2a-single-only  -m2a-single  -m2a @gol
1150 -m3  -m3e @gol
1151 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
1152 -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al @gol
1153 -mb  -ml  -mdalign  -mrelax @gol
1154 -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave @gol
1155 -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct @gol
1156 -mprefergot  -musermode  -multcost=@var{number}  -mdiv=@var{strategy} @gol
1157 -mdivsi3_libfunc=@var{name}  -mfixed-range=@var{register-range} @gol
1158 -maccumulate-outgoing-args @gol
1159 -matomic-model=@var{atomic-model} @gol
1160 -mbranch-cost=@var{num}  -mzdcbranch  -mno-zdcbranch @gol
1161 -mcbranch-force-delay-slot @gol
1162 -mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra @gol
1163 -mpretend-cmove  -mtas}
1165 @emph{Solaris 2 Options}
1166 @gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text @gol
1167 -pthreads}
1169 @emph{SPARC Options}
1170 @gccoptlist{-mcpu=@var{cpu-type} @gol
1171 -mtune=@var{cpu-type} @gol
1172 -mcmodel=@var{code-model} @gol
1173 -mmemory-model=@var{mem-model} @gol
1174 -m32  -m64  -mapp-regs  -mno-app-regs @gol
1175 -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
1176 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
1177 -mhard-quad-float  -msoft-quad-float @gol
1178 -mstack-bias  -mno-stack-bias @gol
1179 -mstd-struct-return  -mno-std-struct-return @gol
1180 -munaligned-doubles  -mno-unaligned-doubles @gol
1181 -muser-mode  -mno-user-mode @gol
1182 -mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
1183 -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
1184 -mvis4 -mno-vis4 -mvis4b -mno-vis4b @gol
1185 -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld  @gol
1186 -mpopc  -mno-popc  -msubxc  -mno-subxc @gol
1187 -mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc @gol
1188 -mlra  -mno-lra}
1190 @emph{SPU Options}
1191 @gccoptlist{-mwarn-reloc  -merror-reloc @gol
1192 -msafe-dma  -munsafe-dma @gol
1193 -mbranch-hints @gol
1194 -msmall-mem  -mlarge-mem  -mstdmain @gol
1195 -mfixed-range=@var{register-range} @gol
1196 -mea32  -mea64 @gol
1197 -maddress-space-conversion  -mno-address-space-conversion @gol
1198 -mcache-size=@var{cache-size} @gol
1199 -matomic-updates  -mno-atomic-updates}
1201 @emph{System V Options}
1202 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
1204 @emph{TILE-Gx Options}
1205 @gccoptlist{-mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian @gol
1206 -mcmodel=@var{code-model}}
1208 @emph{TILEPro Options}
1209 @gccoptlist{-mcpu=@var{cpu}  -m32}
1211 @emph{V850 Options}
1212 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
1213 -mprolog-function  -mno-prolog-function  -mspace @gol
1214 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
1215 -mapp-regs  -mno-app-regs @gol
1216 -mdisable-callt  -mno-disable-callt @gol
1217 -mv850e2v3  -mv850e2  -mv850e1  -mv850es @gol
1218 -mv850e  -mv850  -mv850e3v5 @gol
1219 -mloop @gol
1220 -mrelax @gol
1221 -mlong-jumps @gol
1222 -msoft-float @gol
1223 -mhard-float @gol
1224 -mgcc-abi @gol
1225 -mrh850-abi @gol
1226 -mbig-switch}
1228 @emph{VAX Options}
1229 @gccoptlist{-mg  -mgnu  -munix}
1231 @emph{Visium Options}
1232 @gccoptlist{-mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
1233 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type}  -msv-mode  -muser-mode}
1235 @emph{VMS Options}
1236 @gccoptlist{-mvms-return-codes  -mdebug-main=@var{prefix}  -mmalloc64 @gol
1237 -mpointer-size=@var{size}}
1239 @emph{VxWorks Options}
1240 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
1241 -Xbind-lazy  -Xbind-now}
1243 @emph{x86 Options}
1244 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
1245 -mtune-ctrl=@var{feature-list}  -mdump-tune-features  -mno-default @gol
1246 -mfpmath=@var{unit} @gol
1247 -masm=@var{dialect}  -mno-fancy-math-387 @gol
1248 -mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float @gol
1249 -mno-wide-multiply  -mrtd  -malign-double @gol
1250 -mpreferred-stack-boundary=@var{num} @gol
1251 -mincoming-stack-boundary=@var{num} @gol
1252 -mcld  -mcx16  -msahf  -mmovbe  -mcrc32 @gol
1253 -mrecip  -mrecip=@var{opt} @gol
1254 -mvzeroupper  -mprefer-avx128 -mprefer-vector-width=@var{opt} @gol
1255 -mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx @gol
1256 -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl @gol
1257 -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes @gol
1258 -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma -mpconfig -mwbnoinvd @gol
1259 -mprefetchwt1  -mclflushopt  -mxsavec  -mxsaves @gol
1260 -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop @gol
1261 -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mlwp  -mmpx  @gol
1262 -mmwaitx  -mclzero  -mpku  -mthreads -mgfni  -mvaes  -mwaitpkg @gol
1263 -mshstk -mforce-indirect-call -mavx512vbmi2 @gol
1264 -mvpclmulqdq -mavx512bitalg -mmovdiri -mmovdir64b -mavx512vpopcntdq
1265 -mcldemote @gol
1266 -mms-bitfields  -mno-align-stringops  -minline-all-stringops @gol
1267 -minline-stringops-dynamically  -mstringop-strategy=@var{alg} @gol
1268 -mmemcpy-strategy=@var{strategy}  -mmemset-strategy=@var{strategy} @gol
1269 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
1270 -m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128 @gol
1271 -mregparm=@var{num}  -msseregparm @gol
1272 -mveclibabi=@var{type}  -mvect8-ret-in-mem @gol
1273 -mpc32  -mpc64  -mpc80  -mstackrealign @gol
1274 -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs @gol
1275 -mcmodel=@var{code-model}  -mabi=@var{name}  -maddress-mode=@var{mode} @gol
1276 -m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=@var{num} @gol
1277 -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv @gol
1278 -mavx256-split-unaligned-load  -mavx256-split-unaligned-store @gol
1279 -malign-data=@var{type}  -mstack-protector-guard=@var{guard} @gol
1280 -mstack-protector-guard-reg=@var{reg} @gol
1281 -mstack-protector-guard-offset=@var{offset} @gol
1282 -mstack-protector-guard-symbol=@var{symbol} -mmitigate-rop @gol
1283 -mgeneral-regs-only -mcall-ms2sysv-xlogues @gol
1284 -mindirect-branch=@var{choice} -mfunction-return=@var{choice} @gol
1285 -mindirect-branch-register}
1287 @emph{x86 Windows Options}
1288 @gccoptlist{-mconsole  -mcygwin  -mno-cygwin  -mdll @gol
1289 -mnop-fun-dllimport  -mthread @gol
1290 -municode  -mwin32  -mwindows  -fno-set-stack-executable}
1292 @emph{Xstormy16 Options}
1293 @gccoptlist{-msim}
1295 @emph{Xtensa Options}
1296 @gccoptlist{-mconst16  -mno-const16 @gol
1297 -mfused-madd  -mno-fused-madd @gol
1298 -mforce-no-pic @gol
1299 -mserialize-volatile  -mno-serialize-volatile @gol
1300 -mtext-section-literals  -mno-text-section-literals @gol
1301 -mauto-litpools  -mno-auto-litpools @gol
1302 -mtarget-align  -mno-target-align @gol
1303 -mlongcalls  -mno-longcalls}
1305 @emph{zSeries Options}
1306 See S/390 and zSeries Options.
1307 @end table
1310 @node Overall Options
1311 @section Options Controlling the Kind of Output
1313 Compilation can involve up to four stages: preprocessing, compilation
1314 proper, assembly and linking, always in that order.  GCC is capable of
1315 preprocessing and compiling several files either into several
1316 assembler input files, or into one assembler input file; then each
1317 assembler input file produces an object file, and linking combines all
1318 the object files (those newly compiled, and those specified as input)
1319 into an executable file.
1321 @cindex file name suffix
1322 For any given input file, the file name suffix determines what kind of
1323 compilation is done:
1325 @table @gcctabopt
1326 @item @var{file}.c
1327 C source code that must be preprocessed.
1329 @item @var{file}.i
1330 C source code that should not be preprocessed.
1332 @item @var{file}.ii
1333 C++ source code that should not be preprocessed.
1335 @item @var{file}.m
1336 Objective-C source code.  Note that you must link with the @file{libobjc}
1337 library to make an Objective-C program work.
1339 @item @var{file}.mi
1340 Objective-C source code that should not be preprocessed.
1342 @item @var{file}.mm
1343 @itemx @var{file}.M
1344 Objective-C++ source code.  Note that you must link with the @file{libobjc}
1345 library to make an Objective-C++ program work.  Note that @samp{.M} refers
1346 to a literal capital M@.
1348 @item @var{file}.mii
1349 Objective-C++ source code that should not be preprocessed.
1351 @item @var{file}.h
1352 C, C++, Objective-C or Objective-C++ header file to be turned into a
1353 precompiled header (default), or C, C++ header file to be turned into an
1354 Ada spec (via the @option{-fdump-ada-spec} switch).
1356 @item @var{file}.cc
1357 @itemx @var{file}.cp
1358 @itemx @var{file}.cxx
1359 @itemx @var{file}.cpp
1360 @itemx @var{file}.CPP
1361 @itemx @var{file}.c++
1362 @itemx @var{file}.C
1363 C++ source code that must be preprocessed.  Note that in @samp{.cxx},
1364 the last two letters must both be literally @samp{x}.  Likewise,
1365 @samp{.C} refers to a literal capital C@.
1367 @item @var{file}.mm
1368 @itemx @var{file}.M
1369 Objective-C++ source code that must be preprocessed.
1371 @item @var{file}.mii
1372 Objective-C++ source code that should not be preprocessed.
1374 @item @var{file}.hh
1375 @itemx @var{file}.H
1376 @itemx @var{file}.hp
1377 @itemx @var{file}.hxx
1378 @itemx @var{file}.hpp
1379 @itemx @var{file}.HPP
1380 @itemx @var{file}.h++
1381 @itemx @var{file}.tcc
1382 C++ header file to be turned into a precompiled header or Ada spec.
1384 @item @var{file}.f
1385 @itemx @var{file}.for
1386 @itemx @var{file}.ftn
1387 Fixed form Fortran source code that should not be preprocessed.
1389 @item @var{file}.F
1390 @itemx @var{file}.FOR
1391 @itemx @var{file}.fpp
1392 @itemx @var{file}.FPP
1393 @itemx @var{file}.FTN
1394 Fixed form Fortran source code that must be preprocessed (with the traditional
1395 preprocessor).
1397 @item @var{file}.f90
1398 @itemx @var{file}.f95
1399 @itemx @var{file}.f03
1400 @itemx @var{file}.f08
1401 Free form Fortran source code that should not be preprocessed.
1403 @item @var{file}.F90
1404 @itemx @var{file}.F95
1405 @itemx @var{file}.F03
1406 @itemx @var{file}.F08
1407 Free form Fortran source code that must be preprocessed (with the
1408 traditional preprocessor).
1410 @item @var{file}.go
1411 Go source code.
1413 @item @var{file}.brig
1414 BRIG files (binary representation of HSAIL).
1416 @item @var{file}.ads
1417 Ada source code file that contains a library unit declaration (a
1418 declaration of a package, subprogram, or generic, or a generic
1419 instantiation), or a library unit renaming declaration (a package,
1420 generic, or subprogram renaming declaration).  Such files are also
1421 called @dfn{specs}.
1423 @item @var{file}.adb
1424 Ada source code file containing a library unit body (a subprogram or
1425 package body).  Such files are also called @dfn{bodies}.
1427 @c GCC also knows about some suffixes for languages not yet included:
1428 @c Pascal:
1429 @c @var{file}.p
1430 @c @var{file}.pas
1431 @c Ratfor:
1432 @c @var{file}.r
1434 @item @var{file}.s
1435 Assembler code.
1437 @item @var{file}.S
1438 @itemx @var{file}.sx
1439 Assembler code that must be preprocessed.
1441 @item @var{other}
1442 An object file to be fed straight into linking.
1443 Any file name with no recognized suffix is treated this way.
1444 @end table
1446 @opindex x
1447 You can specify the input language explicitly with the @option{-x} option:
1449 @table @gcctabopt
1450 @item -x @var{language}
1451 Specify explicitly the @var{language} for the following input files
1452 (rather than letting the compiler choose a default based on the file
1453 name suffix).  This option applies to all following input files until
1454 the next @option{-x} option.  Possible values for @var{language} are:
1455 @smallexample
1456 c  c-header  cpp-output
1457 c++  c++-header  c++-cpp-output
1458 objective-c  objective-c-header  objective-c-cpp-output
1459 objective-c++ objective-c++-header objective-c++-cpp-output
1460 assembler  assembler-with-cpp
1462 f77  f77-cpp-input f95  f95-cpp-input
1464 brig
1465 @end smallexample
1467 @item -x none
1468 Turn off any specification of a language, so that subsequent files are
1469 handled according to their file name suffixes (as they are if @option{-x}
1470 has not been used at all).
1471 @end table
1473 If you only want some of the stages of compilation, you can use
1474 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1475 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1476 @command{gcc} is to stop.  Note that some combinations (for example,
1477 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1479 @table @gcctabopt
1480 @item -c
1481 @opindex c
1482 Compile or assemble the source files, but do not link.  The linking
1483 stage simply is not done.  The ultimate output is in the form of an
1484 object file for each source file.
1486 By default, the object file name for a source file is made by replacing
1487 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1489 Unrecognized input files, not requiring compilation or assembly, are
1490 ignored.
1492 @item -S
1493 @opindex S
1494 Stop after the stage of compilation proper; do not assemble.  The output
1495 is in the form of an assembler code file for each non-assembler input
1496 file specified.
1498 By default, the assembler file name for a source file is made by
1499 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1501 Input files that don't require compilation are ignored.
1503 @item -E
1504 @opindex E
1505 Stop after the preprocessing stage; do not run the compiler proper.  The
1506 output is in the form of preprocessed source code, which is sent to the
1507 standard output.
1509 Input files that don't require preprocessing are ignored.
1511 @cindex output file option
1512 @item -o @var{file}
1513 @opindex o
1514 Place output in file @var{file}.  This applies to whatever
1515 sort of output is being produced, whether it be an executable file,
1516 an object file, an assembler file or preprocessed C code.
1518 If @option{-o} is not specified, the default is to put an executable
1519 file in @file{a.out}, the object file for
1520 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1521 assembler file in @file{@var{source}.s}, a precompiled header file in
1522 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1523 standard output.
1525 @item -v
1526 @opindex v
1527 Print (on standard error output) the commands executed to run the stages
1528 of compilation.  Also print the version number of the compiler driver
1529 program and of the preprocessor and the compiler proper.
1531 @item -###
1532 @opindex ###
1533 Like @option{-v} except the commands are not executed and arguments
1534 are quoted unless they contain only alphanumeric characters or @code{./-_}.
1535 This is useful for shell scripts to capture the driver-generated command lines.
1537 @item --help
1538 @opindex help
1539 Print (on the standard output) a description of the command-line options
1540 understood by @command{gcc}.  If the @option{-v} option is also specified
1541 then @option{--help} is also passed on to the various processes
1542 invoked by @command{gcc}, so that they can display the command-line options
1543 they accept.  If the @option{-Wextra} option has also been specified
1544 (prior to the @option{--help} option), then command-line options that
1545 have no documentation associated with them are also displayed.
1547 @item --target-help
1548 @opindex target-help
1549 Print (on the standard output) a description of target-specific command-line
1550 options for each tool.  For some targets extra target-specific
1551 information may also be printed.
1553 @item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1554 Print (on the standard output) a description of the command-line
1555 options understood by the compiler that fit into all specified classes
1556 and qualifiers.  These are the supported classes:
1558 @table @asis
1559 @item @samp{optimizers}
1560 Display all of the optimization options supported by the
1561 compiler.
1563 @item @samp{warnings}
1564 Display all of the options controlling warning messages
1565 produced by the compiler.
1567 @item @samp{target}
1568 Display target-specific options.  Unlike the
1569 @option{--target-help} option however, target-specific options of the
1570 linker and assembler are not displayed.  This is because those
1571 tools do not currently support the extended @option{--help=} syntax.
1573 @item @samp{params}
1574 Display the values recognized by the @option{--param}
1575 option.
1577 @item @var{language}
1578 Display the options supported for @var{language}, where
1579 @var{language} is the name of one of the languages supported in this
1580 version of GCC@.
1582 @item @samp{common}
1583 Display the options that are common to all languages.
1584 @end table
1586 These are the supported qualifiers:
1588 @table @asis
1589 @item @samp{undocumented}
1590 Display only those options that are undocumented.
1592 @item @samp{joined}
1593 Display options taking an argument that appears after an equal
1594 sign in the same continuous piece of text, such as:
1595 @samp{--help=target}.
1597 @item @samp{separate}
1598 Display options taking an argument that appears as a separate word
1599 following the original option, such as: @samp{-o output-file}.
1600 @end table
1602 Thus for example to display all the undocumented target-specific
1603 switches supported by the compiler, use:
1605 @smallexample
1606 --help=target,undocumented
1607 @end smallexample
1609 The sense of a qualifier can be inverted by prefixing it with the
1610 @samp{^} character, so for example to display all binary warning
1611 options (i.e., ones that are either on or off and that do not take an
1612 argument) that have a description, use:
1614 @smallexample
1615 --help=warnings,^joined,^undocumented
1616 @end smallexample
1618 The argument to @option{--help=} should not consist solely of inverted
1619 qualifiers.
1621 Combining several classes is possible, although this usually
1622 restricts the output so much that there is nothing to display.  One
1623 case where it does work, however, is when one of the classes is
1624 @var{target}.  For example, to display all the target-specific
1625 optimization options, use:
1627 @smallexample
1628 --help=target,optimizers
1629 @end smallexample
1631 The @option{--help=} option can be repeated on the command line.  Each
1632 successive use displays its requested class of options, skipping
1633 those that have already been displayed.
1635 If the @option{-Q} option appears on the command line before the
1636 @option{--help=} option, then the descriptive text displayed by
1637 @option{--help=} is changed.  Instead of describing the displayed
1638 options, an indication is given as to whether the option is enabled,
1639 disabled or set to a specific value (assuming that the compiler
1640 knows this at the point where the @option{--help=} option is used).
1642 Here is a truncated example from the ARM port of @command{gcc}:
1644 @smallexample
1645   % gcc -Q -mabi=2 --help=target -c
1646   The following options are target specific:
1647   -mabi=                                2
1648   -mabort-on-noreturn                   [disabled]
1649   -mapcs                                [disabled]
1650 @end smallexample
1652 The output is sensitive to the effects of previous command-line
1653 options, so for example it is possible to find out which optimizations
1654 are enabled at @option{-O2} by using:
1656 @smallexample
1657 -Q -O2 --help=optimizers
1658 @end smallexample
1660 Alternatively you can discover which binary optimizations are enabled
1661 by @option{-O3} by using:
1663 @smallexample
1664 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1665 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1666 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1667 @end smallexample
1669 @item --version
1670 @opindex version
1671 Display the version number and copyrights of the invoked GCC@.
1673 @item -pass-exit-codes
1674 @opindex pass-exit-codes
1675 Normally the @command{gcc} program exits with the code of 1 if any
1676 phase of the compiler returns a non-success return code.  If you specify
1677 @option{-pass-exit-codes}, the @command{gcc} program instead returns with
1678 the numerically highest error produced by any phase returning an error
1679 indication.  The C, C++, and Fortran front ends return 4 if an internal
1680 compiler error is encountered.
1682 @item -pipe
1683 @opindex pipe
1684 Use pipes rather than temporary files for communication between the
1685 various stages of compilation.  This fails to work on some systems where
1686 the assembler is unable to read from a pipe; but the GNU assembler has
1687 no trouble.
1689 @item -specs=@var{file}
1690 @opindex specs
1691 Process @var{file} after the compiler reads in the standard @file{specs}
1692 file, in order to override the defaults which the @command{gcc} driver
1693 program uses when determining what switches to pass to @command{cc1},
1694 @command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
1695 @option{-specs=@var{file}} can be specified on the command line, and they
1696 are processed in order, from left to right.  @xref{Spec Files}, for
1697 information about the format of the @var{file}.
1699 @item -wrapper
1700 @opindex wrapper
1701 Invoke all subcommands under a wrapper program.  The name of the
1702 wrapper program and its parameters are passed as a comma separated
1703 list.
1705 @smallexample
1706 gcc -c t.c -wrapper gdb,--args
1707 @end smallexample
1709 @noindent
1710 This invokes all subprograms of @command{gcc} under
1711 @samp{gdb --args}, thus the invocation of @command{cc1} is
1712 @samp{gdb --args cc1 @dots{}}.
1714 @item -ffile-prefix-map=@var{old}=@var{new}
1715 @opindex ffile-prefix-map
1716 When compiling files residing in directory @file{@var{old}}, record
1717 any references to them in the result of the compilation as if the
1718 files resided in directory @file{@var{new}} instead.  Specifying this
1719 option is equivalent to specifying all the individual
1720 @option{-f*-prefix-map} options.  This can be used to make reproducible
1721 builds that are location independent.  See also
1722 @option{-fmacro-prefix-map} and @option{-fdebug-prefix-map}.
1724 @item -fplugin=@var{name}.so
1725 @opindex fplugin
1726 Load the plugin code in file @var{name}.so, assumed to be a
1727 shared object to be dlopen'd by the compiler.  The base name of
1728 the shared object file is used to identify the plugin for the
1729 purposes of argument parsing (See
1730 @option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1731 Each plugin should define the callback functions specified in the
1732 Plugins API.
1734 @item -fplugin-arg-@var{name}-@var{key}=@var{value}
1735 @opindex fplugin-arg
1736 Define an argument called @var{key} with a value of @var{value}
1737 for the plugin called @var{name}.
1739 @item -fdump-ada-spec@r{[}-slim@r{]}
1740 @opindex fdump-ada-spec
1741 For C and C++ source and include files, generate corresponding Ada specs.
1742 @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
1743 GNAT User's Guide}, which provides detailed documentation on this feature.
1745 @item -fada-spec-parent=@var{unit}
1746 @opindex fada-spec-parent
1747 In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
1748 Ada specs as child units of parent @var{unit}.
1750 @item -fdump-go-spec=@var{file}
1751 @opindex fdump-go-spec
1752 For input files in any language, generate corresponding Go
1753 declarations in @var{file}.  This generates Go @code{const},
1754 @code{type}, @code{var}, and @code{func} declarations which may be a
1755 useful way to start writing a Go interface to code written in some
1756 other language.
1758 @include @value{srcdir}/../libiberty/at-file.texi
1759 @end table
1761 @node Invoking G++
1762 @section Compiling C++ Programs
1764 @cindex suffixes for C++ source
1765 @cindex C++ source file suffixes
1766 C++ source files conventionally use one of the suffixes @samp{.C},
1767 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1768 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1769 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1770 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1771 files with these names and compiles them as C++ programs even if you
1772 call the compiler the same way as for compiling C programs (usually
1773 with the name @command{gcc}).
1775 @findex g++
1776 @findex c++
1777 However, the use of @command{gcc} does not add the C++ library.
1778 @command{g++} is a program that calls GCC and automatically specifies linking
1779 against the C++ library.  It treats @samp{.c},
1780 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1781 files unless @option{-x} is used.  This program is also useful when
1782 precompiling a C header file with a @samp{.h} extension for use in C++
1783 compilations.  On many systems, @command{g++} is also installed with
1784 the name @command{c++}.
1786 @cindex invoking @command{g++}
1787 When you compile C++ programs, you may specify many of the same
1788 command-line options that you use for compiling programs in any
1789 language; or command-line options meaningful for C and related
1790 languages; or options that are meaningful only for C++ programs.
1791 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1792 explanations of options for languages related to C@.
1793 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1794 explanations of options that are meaningful only for C++ programs.
1796 @node C Dialect Options
1797 @section Options Controlling C Dialect
1798 @cindex dialect options
1799 @cindex language dialect options
1800 @cindex options, dialect
1802 The following options control the dialect of C (or languages derived
1803 from C, such as C++, Objective-C and Objective-C++) that the compiler
1804 accepts:
1806 @table @gcctabopt
1807 @cindex ANSI support
1808 @cindex ISO support
1809 @item -ansi
1810 @opindex ansi
1811 In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
1812 equivalent to @option{-std=c++98}.
1814 This turns off certain features of GCC that are incompatible with ISO
1815 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1816 such as the @code{asm} and @code{typeof} keywords, and
1817 predefined macros such as @code{unix} and @code{vax} that identify the
1818 type of system you are using.  It also enables the undesirable and
1819 rarely used ISO trigraph feature.  For the C compiler,
1820 it disables recognition of C++ style @samp{//} comments as well as
1821 the @code{inline} keyword.
1823 The alternate keywords @code{__asm__}, @code{__extension__},
1824 @code{__inline__} and @code{__typeof__} continue to work despite
1825 @option{-ansi}.  You would not want to use them in an ISO C program, of
1826 course, but it is useful to put them in header files that might be included
1827 in compilations done with @option{-ansi}.  Alternate predefined macros
1828 such as @code{__unix__} and @code{__vax__} are also available, with or
1829 without @option{-ansi}.
1831 The @option{-ansi} option does not cause non-ISO programs to be
1832 rejected gratuitously.  For that, @option{-Wpedantic} is required in
1833 addition to @option{-ansi}.  @xref{Warning Options}.
1835 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1836 option is used.  Some header files may notice this macro and refrain
1837 from declaring certain functions or defining certain macros that the
1838 ISO standard doesn't call for; this is to avoid interfering with any
1839 programs that might use these names for other things.
1841 Functions that are normally built in but do not have semantics
1842 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1843 functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1844 built-in functions provided by GCC}, for details of the functions
1845 affected.
1847 @item -std=
1848 @opindex std
1849 Determine the language standard. @xref{Standards,,Language Standards
1850 Supported by GCC}, for details of these standard versions.  This option
1851 is currently only supported when compiling C or C++.
1853 The compiler can accept several base standards, such as @samp{c90} or
1854 @samp{c++98}, and GNU dialects of those standards, such as
1855 @samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
1856 compiler accepts all programs following that standard plus those
1857 using GNU extensions that do not contradict it.  For example,
1858 @option{-std=c90} turns off certain features of GCC that are
1859 incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1860 keywords, but not other GNU extensions that do not have a meaning in
1861 ISO C90, such as omitting the middle term of a @code{?:}
1862 expression. On the other hand, when a GNU dialect of a standard is
1863 specified, all features supported by the compiler are enabled, even when
1864 those features change the meaning of the base standard.  As a result, some
1865 strict-conforming programs may be rejected.  The particular standard
1866 is used by @option{-Wpedantic} to identify which features are GNU
1867 extensions given that version of the standard. For example
1868 @option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
1869 comments, while @option{-std=gnu99 -Wpedantic} does not.
1871 A value for this option must be provided; possible values are
1873 @table @samp
1874 @item c90
1875 @itemx c89
1876 @itemx iso9899:1990
1877 Support all ISO C90 programs (certain GNU extensions that conflict
1878 with ISO C90 are disabled). Same as @option{-ansi} for C code.
1880 @item iso9899:199409
1881 ISO C90 as modified in amendment 1.
1883 @item c99
1884 @itemx c9x
1885 @itemx iso9899:1999
1886 @itemx iso9899:199x
1887 ISO C99.  This standard is substantially completely supported, modulo
1888 bugs and floating-point issues
1889 (mainly but not entirely relating to optional C99 features from
1890 Annexes F and G).  See
1891 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1892 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1894 @item c11
1895 @itemx c1x
1896 @itemx iso9899:2011
1897 ISO C11, the 2011 revision of the ISO C standard.  This standard is
1898 substantially completely supported, modulo bugs, floating-point issues
1899 (mainly but not entirely relating to optional C11 features from
1900 Annexes F and G) and the optional Annexes K (Bounds-checking
1901 interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.
1903 @item c17
1904 @itemx c18
1905 @itemx iso9899:2017
1906 @itemx iso9899:2018
1907 ISO C17, the 2017 revision of the ISO C standard (expected to be
1908 published in 2018).  This standard is
1909 same as C11 except for corrections of defects (all of which are also
1910 applied with @option{-std=c11}) and a new value of
1911 @code{__STDC_VERSION__}, and so is supported to the same extent as C11.
1913 @item gnu90
1914 @itemx gnu89
1915 GNU dialect of ISO C90 (including some C99 features).
1917 @item gnu99
1918 @itemx gnu9x
1919 GNU dialect of ISO C99.  The name @samp{gnu9x} is deprecated.
1921 @item gnu11
1922 @itemx gnu1x
1923 GNU dialect of ISO C11.
1924 The name @samp{gnu1x} is deprecated.
1926 @item gnu17
1927 @itemx gnu18
1928 GNU dialect of ISO C17.  This is the default for C code.
1930 @item c++98
1931 @itemx c++03
1932 The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
1933 additional defect reports. Same as @option{-ansi} for C++ code.
1935 @item gnu++98
1936 @itemx gnu++03
1937 GNU dialect of @option{-std=c++98}.
1939 @item c++11
1940 @itemx c++0x
1941 The 2011 ISO C++ standard plus amendments.
1942 The name @samp{c++0x} is deprecated.
1944 @item gnu++11
1945 @itemx gnu++0x
1946 GNU dialect of @option{-std=c++11}.
1947 The name @samp{gnu++0x} is deprecated.
1949 @item c++14
1950 @itemx c++1y
1951 The 2014 ISO C++ standard plus amendments.
1952 The name @samp{c++1y} is deprecated.
1954 @item gnu++14
1955 @itemx gnu++1y
1956 GNU dialect of @option{-std=c++14}.
1957 This is the default for C++ code.
1958 The name @samp{gnu++1y} is deprecated.
1960 @item c++17
1961 @itemx c++1z
1962 The 2017 ISO C++ standard plus amendments.
1963 The name @samp{c++1z} is deprecated.
1965 @item gnu++17
1966 @itemx gnu++1z
1967 GNU dialect of @option{-std=c++17}.
1968 The name @samp{gnu++1z} is deprecated.
1970 @item c++2a
1971 The next revision of the ISO C++ standard, tentatively planned for
1972 2020.  Support is highly experimental, and will almost certainly
1973 change in incompatible ways in future releases.
1975 @item gnu++2a
1976 GNU dialect of @option{-std=c++2a}.  Support is highly experimental,
1977 and will almost certainly change in incompatible ways in future
1978 releases.
1979 @end table
1981 @item -fgnu89-inline
1982 @opindex fgnu89-inline
1983 The option @option{-fgnu89-inline} tells GCC to use the traditional
1984 GNU semantics for @code{inline} functions when in C99 mode.
1985 @xref{Inline,,An Inline Function is As Fast As a Macro}.
1986 Using this option is roughly equivalent to adding the
1987 @code{gnu_inline} function attribute to all inline functions
1988 (@pxref{Function Attributes}).
1990 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1991 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1992 specifies the default behavior).
1993 This option is not supported in @option{-std=c90} or
1994 @option{-std=gnu90} mode.
1996 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1997 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1998 in effect for @code{inline} functions.  @xref{Common Predefined
1999 Macros,,,cpp,The C Preprocessor}.
2001 @item -fpermitted-flt-eval-methods=@var{style}
2002 @opindex fpermitted-flt-eval-methods
2003 @opindex fpermitted-flt-eval-methods=c11
2004 @opindex fpermitted-flt-eval-methods=ts-18661-3
2005 ISO/IEC TS 18661-3 defines new permissible values for
2006 @code{FLT_EVAL_METHOD} that indicate that operations and constants with
2007 a semantic type that is an interchange or extended format should be
2008 evaluated to the precision and range of that type.  These new values are
2009 a superset of those permitted under C99/C11, which does not specify the
2010 meaning of other positive values of @code{FLT_EVAL_METHOD}.  As such, code
2011 conforming to C11 may not have been written expecting the possibility of
2012 the new values.
2014 @option{-fpermitted-flt-eval-methods} specifies whether the compiler
2015 should allow only the values of @code{FLT_EVAL_METHOD} specified in C99/C11,
2016 or the extended set of values specified in ISO/IEC TS 18661-3.
2018 @var{style} is either @code{c11} or @code{ts-18661-3} as appropriate.
2020 The default when in a standards compliant mode (@option{-std=c11} or similar)
2021 is @option{-fpermitted-flt-eval-methods=c11}.  The default when in a GNU
2022 dialect (@option{-std=gnu11} or similar) is
2023 @option{-fpermitted-flt-eval-methods=ts-18661-3}.
2025 @item -aux-info @var{filename}
2026 @opindex aux-info
2027 Output to the given filename prototyped declarations for all functions
2028 declared and/or defined in a translation unit, including those in header
2029 files.  This option is silently ignored in any language other than C@.
2031 Besides declarations, the file indicates, in comments, the origin of
2032 each declaration (source file and line), whether the declaration was
2033 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
2034 @samp{O} for old, respectively, in the first character after the line
2035 number and the colon), and whether it came from a declaration or a
2036 definition (@samp{C} or @samp{F}, respectively, in the following
2037 character).  In the case of function definitions, a K&R-style list of
2038 arguments followed by their declarations is also provided, inside
2039 comments, after the declaration.
2041 @item -fallow-parameterless-variadic-functions
2042 @opindex fallow-parameterless-variadic-functions
2043 Accept variadic functions without named parameters.
2045 Although it is possible to define such a function, this is not very
2046 useful as it is not possible to read the arguments.  This is only
2047 supported for C as this construct is allowed by C++.
2049 @item -fno-asm
2050 @opindex fno-asm
2051 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
2052 keyword, so that code can use these words as identifiers.  You can use
2053 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
2054 instead.  @option{-ansi} implies @option{-fno-asm}.
2056 In C++, this switch only affects the @code{typeof} keyword, since
2057 @code{asm} and @code{inline} are standard keywords.  You may want to
2058 use the @option{-fno-gnu-keywords} flag instead, which has the same
2059 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
2060 switch only affects the @code{asm} and @code{typeof} keywords, since
2061 @code{inline} is a standard keyword in ISO C99.
2063 @item -fno-builtin
2064 @itemx -fno-builtin-@var{function}
2065 @opindex fno-builtin
2066 @cindex built-in functions
2067 Don't recognize built-in functions that do not begin with
2068 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
2069 functions provided by GCC}, for details of the functions affected,
2070 including those which are not built-in functions when @option{-ansi} or
2071 @option{-std} options for strict ISO C conformance are used because they
2072 do not have an ISO standard meaning.
2074 GCC normally generates special code to handle certain built-in functions
2075 more efficiently; for instance, calls to @code{alloca} may become single
2076 instructions which adjust the stack directly, and calls to @code{memcpy}
2077 may become inline copy loops.  The resulting code is often both smaller
2078 and faster, but since the function calls no longer appear as such, you
2079 cannot set a breakpoint on those calls, nor can you change the behavior
2080 of the functions by linking with a different library.  In addition,
2081 when a function is recognized as a built-in function, GCC may use
2082 information about that function to warn about problems with calls to
2083 that function, or to generate more efficient code, even if the
2084 resulting code still contains calls to that function.  For example,
2085 warnings are given with @option{-Wformat} for bad calls to
2086 @code{printf} when @code{printf} is built in and @code{strlen} is
2087 known not to modify global memory.
2089 With the @option{-fno-builtin-@var{function}} option
2090 only the built-in function @var{function} is
2091 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
2092 function is named that is not built-in in this version of GCC, this
2093 option is ignored.  There is no corresponding
2094 @option{-fbuiltin-@var{function}} option; if you wish to enable
2095 built-in functions selectively when using @option{-fno-builtin} or
2096 @option{-ffreestanding}, you may define macros such as:
2098 @smallexample
2099 #define abs(n)          __builtin_abs ((n))
2100 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2101 @end smallexample
2103 @item -fgimple
2104 @opindex fgimple
2106 Enable parsing of function definitions marked with @code{__GIMPLE}.
2107 This is an experimental feature that allows unit testing of GIMPLE
2108 passes.
2110 @item -fhosted
2111 @opindex fhosted
2112 @cindex hosted environment
2114 Assert that compilation targets a hosted environment.  This implies
2115 @option{-fbuiltin}.  A hosted environment is one in which the
2116 entire standard library is available, and in which @code{main} has a return
2117 type of @code{int}.  Examples are nearly everything except a kernel.
2118 This is equivalent to @option{-fno-freestanding}.
2120 @item -ffreestanding
2121 @opindex ffreestanding
2122 @cindex hosted environment
2124 Assert that compilation targets a freestanding environment.  This
2125 implies @option{-fno-builtin}.  A freestanding environment
2126 is one in which the standard library may not exist, and program startup may
2127 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
2128 This is equivalent to @option{-fno-hosted}.
2130 @xref{Standards,,Language Standards Supported by GCC}, for details of
2131 freestanding and hosted environments.
2133 @item -fopenacc
2134 @opindex fopenacc
2135 @cindex OpenACC accelerator programming
2136 Enable handling of OpenACC directives @code{#pragma acc} in C/C++ and
2137 @code{!$acc} in Fortran.  When @option{-fopenacc} is specified, the
2138 compiler generates accelerated code according to the OpenACC Application
2139 Programming Interface v2.0 @w{@uref{https://www.openacc.org}}.  This option
2140 implies @option{-pthread}, and thus is only supported on targets that
2141 have support for @option{-pthread}.
2143 @item -fopenacc-dim=@var{geom}
2144 @opindex fopenacc-dim
2145 @cindex OpenACC accelerator programming
2146 Specify default compute dimensions for parallel offload regions that do
2147 not explicitly specify.  The @var{geom} value is a triple of
2148 ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A size
2149 can be omitted, to use a target-specific default value.
2151 @item -fopenmp
2152 @opindex fopenmp
2153 @cindex OpenMP parallel
2154 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
2155 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
2156 compiler generates parallel code according to the OpenMP Application
2157 Program Interface v4.5 @w{@uref{http://www.openmp.org/}}.  This option
2158 implies @option{-pthread}, and thus is only supported on targets that
2159 have support for @option{-pthread}. @option{-fopenmp} implies
2160 @option{-fopenmp-simd}.
2162 @item -fopenmp-simd
2163 @opindex fopenmp-simd
2164 @cindex OpenMP SIMD
2165 @cindex SIMD
2166 Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
2167 in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
2168 are ignored.
2170 @item -fgnu-tm
2171 @opindex fgnu-tm
2172 When the option @option{-fgnu-tm} is specified, the compiler
2173 generates code for the Linux variant of Intel's current Transactional
2174 Memory ABI specification document (Revision 1.1, May 6 2009).  This is
2175 an experimental feature whose interface may change in future versions
2176 of GCC, as the official specification changes.  Please note that not
2177 all architectures are supported for this feature.
2179 For more information on GCC's support for transactional memory,
2180 @xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
2181 Transactional Memory Library}.
2183 Note that the transactional memory feature is not supported with
2184 non-call exceptions (@option{-fnon-call-exceptions}).
2186 @item -fms-extensions
2187 @opindex fms-extensions
2188 Accept some non-standard constructs used in Microsoft header files.
2190 In C++ code, this allows member names in structures to be similar
2191 to previous types declarations.
2193 @smallexample
2194 typedef int UOW;
2195 struct ABC @{
2196   UOW UOW;
2198 @end smallexample
2200 Some cases of unnamed fields in structures and unions are only
2201 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
2202 fields within structs/unions}, for details.
2204 Note that this option is off for all targets but x86 
2205 targets using ms-abi.
2207 @item -fplan9-extensions
2208 @opindex fplan9-extensions
2209 Accept some non-standard constructs used in Plan 9 code.
2211 This enables @option{-fms-extensions}, permits passing pointers to
2212 structures with anonymous fields to functions that expect pointers to
2213 elements of the type of the field, and permits referring to anonymous
2214 fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
2215 struct/union fields within structs/unions}, for details.  This is only
2216 supported for C, not C++.
2218 @item -fcond-mismatch
2219 @opindex fcond-mismatch
2220 Allow conditional expressions with mismatched types in the second and
2221 third arguments.  The value of such an expression is void.  This option
2222 is not supported for C++.
2224 @item -flax-vector-conversions
2225 @opindex flax-vector-conversions
2226 Allow implicit conversions between vectors with differing numbers of
2227 elements and/or incompatible element types.  This option should not be
2228 used for new code.
2230 @item -funsigned-char
2231 @opindex funsigned-char
2232 Let the type @code{char} be unsigned, like @code{unsigned char}.
2234 Each kind of machine has a default for what @code{char} should
2235 be.  It is either like @code{unsigned char} by default or like
2236 @code{signed char} by default.
2238 Ideally, a portable program should always use @code{signed char} or
2239 @code{unsigned char} when it depends on the signedness of an object.
2240 But many programs have been written to use plain @code{char} and
2241 expect it to be signed, or expect it to be unsigned, depending on the
2242 machines they were written for.  This option, and its inverse, let you
2243 make such a program work with the opposite default.
2245 The type @code{char} is always a distinct type from each of
2246 @code{signed char} or @code{unsigned char}, even though its behavior
2247 is always just like one of those two.
2249 @item -fsigned-char
2250 @opindex fsigned-char
2251 Let the type @code{char} be signed, like @code{signed char}.
2253 Note that this is equivalent to @option{-fno-unsigned-char}, which is
2254 the negative form of @option{-funsigned-char}.  Likewise, the option
2255 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
2257 @item -fsigned-bitfields
2258 @itemx -funsigned-bitfields
2259 @itemx -fno-signed-bitfields
2260 @itemx -fno-unsigned-bitfields
2261 @opindex fsigned-bitfields
2262 @opindex funsigned-bitfields
2263 @opindex fno-signed-bitfields
2264 @opindex fno-unsigned-bitfields
2265 These options control whether a bit-field is signed or unsigned, when the
2266 declaration does not use either @code{signed} or @code{unsigned}.  By
2267 default, such a bit-field is signed, because this is consistent: the
2268 basic integer types such as @code{int} are signed types.
2270 @item -fsso-struct=@var{endianness}
2271 @opindex fsso-struct
2272 Set the default scalar storage order of structures and unions to the
2273 specified endianness.  The accepted values are @samp{big-endian},
2274 @samp{little-endian} and @samp{native} for the native endianness of
2275 the target (the default).  This option is not supported for C++.
2277 @strong{Warning:} the @option{-fsso-struct} switch causes GCC to generate
2278 code that is not binary compatible with code generated without it if the
2279 specified endianness is not the native endianness of the target.
2280 @end table
2282 @node C++ Dialect Options
2283 @section Options Controlling C++ Dialect
2285 @cindex compiler options, C++
2286 @cindex C++ options, command-line
2287 @cindex options, C++
2288 This section describes the command-line options that are only meaningful
2289 for C++ programs.  You can also use most of the GNU compiler options
2290 regardless of what language your program is in.  For example, you
2291 might compile a file @file{firstClass.C} like this:
2293 @smallexample
2294 g++ -g -fstrict-enums -O -c firstClass.C
2295 @end smallexample
2297 @noindent
2298 In this example, only @option{-fstrict-enums} is an option meant
2299 only for C++ programs; you can use the other options with any
2300 language supported by GCC@.
2302 Some options for compiling C programs, such as @option{-std}, are also
2303 relevant for C++ programs.
2304 @xref{C Dialect Options,,Options Controlling C Dialect}.
2306 Here is a list of options that are @emph{only} for compiling C++ programs:
2308 @table @gcctabopt
2310 @item -fabi-version=@var{n}
2311 @opindex fabi-version
2312 Use version @var{n} of the C++ ABI@.  The default is version 0.
2314 Version 0 refers to the version conforming most closely to
2315 the C++ ABI specification.  Therefore, the ABI obtained using version 0
2316 will change in different versions of G++ as ABI bugs are fixed.
2318 Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.
2320 Version 2 is the version of the C++ ABI that first appeared in G++
2321 3.4, and was the default through G++ 4.9.
2323 Version 3 corrects an error in mangling a constant address as a
2324 template argument.
2326 Version 4, which first appeared in G++ 4.5, implements a standard
2327 mangling for vector types.
2329 Version 5, which first appeared in G++ 4.6, corrects the mangling of
2330 attribute const/volatile on function pointer types, decltype of a
2331 plain decl, and use of a function parameter in the declaration of
2332 another parameter.
2334 Version 6, which first appeared in G++ 4.7, corrects the promotion
2335 behavior of C++11 scoped enums and the mangling of template argument
2336 packs, const/static_cast, prefix ++ and --, and a class scope function
2337 used as a template argument.
2339 Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
2340 builtin type and corrects the mangling of lambdas in default argument
2341 scope.
2343 Version 8, which first appeared in G++ 4.9, corrects the substitution
2344 behavior of function types with function-cv-qualifiers.
2346 Version 9, which first appeared in G++ 5.2, corrects the alignment of
2347 @code{nullptr_t}.
2349 Version 10, which first appeared in G++ 6.1, adds mangling of
2350 attributes that affect type identity, such as ia32 calling convention
2351 attributes (e.g. @samp{stdcall}).
2353 Version 11, which first appeared in G++ 7, corrects the mangling of
2354 sizeof... expressions and operator names.  For multiple entities with
2355 the same name within a function, that are declared in different scopes,
2356 the mangling now changes starting with the twelfth occurrence.  It also
2357 implies @option{-fnew-inheriting-ctors}.
2359 See also @option{-Wabi}.
2361 @item -fabi-compat-version=@var{n}
2362 @opindex fabi-compat-version
2363 On targets that support strong aliases, G++
2364 works around mangling changes by creating an alias with the correct
2365 mangled name when defining a symbol with an incorrect mangled name.
2366 This switch specifies which ABI version to use for the alias.
2368 With @option{-fabi-version=0} (the default), this defaults to 8 (GCC 5
2369 compatibility).  If another ABI version is explicitly selected, this
2370 defaults to 0.  For compatibility with GCC versions 3.2 through 4.9,
2371 use @option{-fabi-compat-version=2}.
2373 If this option is not provided but @option{-Wabi=@var{n}} is, that
2374 version is used for compatibility aliases.  If this option is provided
2375 along with @option{-Wabi} (without the version), the version from this
2376 option is used for the warning.
2378 @item -fno-access-control
2379 @opindex fno-access-control
2380 Turn off all access checking.  This switch is mainly useful for working
2381 around bugs in the access control code.
2383 @item -faligned-new
2384 @opindex faligned-new
2385 Enable support for C++17 @code{new} of types that require more
2386 alignment than @code{void* ::operator new(std::size_t)} provides.  A
2387 numeric argument such as @code{-faligned-new=32} can be used to
2388 specify how much alignment (in bytes) is provided by that function,
2389 but few users will need to override the default of
2390 @code{alignof(std::max_align_t)}.
2392 This flag is enabled by default for @option{-std=c++17}.
2394 @item -fcheck-new
2395 @opindex fcheck-new
2396 Check that the pointer returned by @code{operator new} is non-null
2397 before attempting to modify the storage allocated.  This check is
2398 normally unnecessary because the C++ standard specifies that
2399 @code{operator new} only returns @code{0} if it is declared
2400 @code{throw()}, in which case the compiler always checks the
2401 return value even without this option.  In all other cases, when
2402 @code{operator new} has a non-empty exception specification, memory
2403 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
2404 @samp{new (nothrow)}.
2406 @item -fconcepts
2407 @opindex fconcepts
2408 Enable support for the C++ Extensions for Concepts Technical
2409 Specification, ISO 19217 (2015), which allows code like
2411 @smallexample
2412 template <class T> concept bool Addable = requires (T t) @{ t + t; @};
2413 template <Addable T> T add (T a, T b) @{ return a + b; @}
2414 @end smallexample
2416 @item -fconstexpr-depth=@var{n}
2417 @opindex fconstexpr-depth
2418 Set the maximum nested evaluation depth for C++11 constexpr functions
2419 to @var{n}.  A limit is needed to detect endless recursion during
2420 constant expression evaluation.  The minimum specified by the standard
2421 is 512.
2423 @item -fconstexpr-loop-limit=@var{n}
2424 @opindex fconstexpr-loop-limit
2425 Set the maximum number of iterations for a loop in C++14 constexpr functions
2426 to @var{n}.  A limit is needed to detect infinite loops during
2427 constant expression evaluation.  The default is 262144 (1<<18).
2429 @item -fdeduce-init-list
2430 @opindex fdeduce-init-list
2431 Enable deduction of a template type parameter as
2432 @code{std::initializer_list} from a brace-enclosed initializer list, i.e.@:
2434 @smallexample
2435 template <class T> auto forward(T t) -> decltype (realfn (t))
2437   return realfn (t);
2440 void f()
2442   forward(@{1,2@}); // call forward<std::initializer_list<int>>
2444 @end smallexample
2446 This deduction was implemented as a possible extension to the
2447 originally proposed semantics for the C++11 standard, but was not part
2448 of the final standard, so it is disabled by default.  This option is
2449 deprecated, and may be removed in a future version of G++.
2451 @item -fno-elide-constructors
2452 @opindex fno-elide-constructors
2453 The C++ standard allows an implementation to omit creating a temporary
2454 that is only used to initialize another object of the same type.
2455 Specifying this option disables that optimization, and forces G++ to
2456 call the copy constructor in all cases.  This option also causes G++
2457 to call trivial member functions which otherwise would be expanded inline.
2459 In C++17, the compiler is required to omit these temporaries, but this
2460 option still affects trivial member functions.
2462 @item -fno-enforce-eh-specs
2463 @opindex fno-enforce-eh-specs
2464 Don't generate code to check for violation of exception specifications
2465 at run time.  This option violates the C++ standard, but may be useful
2466 for reducing code size in production builds, much like defining
2467 @code{NDEBUG}.  This does not give user code permission to throw
2468 exceptions in violation of the exception specifications; the compiler
2469 still optimizes based on the specifications, so throwing an
2470 unexpected exception results in undefined behavior at run time.
2472 @item -fextern-tls-init
2473 @itemx -fno-extern-tls-init
2474 @opindex fextern-tls-init
2475 @opindex fno-extern-tls-init
2476 The C++11 and OpenMP standards allow @code{thread_local} and
2477 @code{threadprivate} variables to have dynamic (runtime)
2478 initialization.  To support this, any use of such a variable goes
2479 through a wrapper function that performs any necessary initialization.
2480 When the use and definition of the variable are in the same
2481 translation unit, this overhead can be optimized away, but when the
2482 use is in a different translation unit there is significant overhead
2483 even if the variable doesn't actually need dynamic initialization.  If
2484 the programmer can be sure that no use of the variable in a
2485 non-defining TU needs to trigger dynamic initialization (either
2486 because the variable is statically initialized, or a use of the
2487 variable in the defining TU will be executed before any uses in
2488 another TU), they can avoid this overhead with the
2489 @option{-fno-extern-tls-init} option.
2491 On targets that support symbol aliases, the default is
2492 @option{-fextern-tls-init}.  On targets that do not support symbol
2493 aliases, the default is @option{-fno-extern-tls-init}.
2495 @item -fno-gnu-keywords
2496 @opindex fno-gnu-keywords
2497 Do not recognize @code{typeof} as a keyword, so that code can use this
2498 word as an identifier.  You can use the keyword @code{__typeof__} instead.
2499 This option is implied by the strict ISO C++ dialects: @option{-ansi},
2500 @option{-std=c++98}, @option{-std=c++11}, etc.
2502 @item -fno-implicit-templates
2503 @opindex fno-implicit-templates
2504 Never emit code for non-inline templates that are instantiated
2505 implicitly (i.e.@: by use); only emit code for explicit instantiations.
2506 @xref{Template Instantiation}, for more information.
2508 @item -fno-implicit-inline-templates
2509 @opindex fno-implicit-inline-templates
2510 Don't emit code for implicit instantiations of inline templates, either.
2511 The default is to handle inlines differently so that compiles with and
2512 without optimization need the same set of explicit instantiations.
2514 @item -fno-implement-inlines
2515 @opindex fno-implement-inlines
2516 To save space, do not emit out-of-line copies of inline functions
2517 controlled by @code{#pragma implementation}.  This causes linker
2518 errors if these functions are not inlined everywhere they are called.
2520 @item -fms-extensions
2521 @opindex fms-extensions
2522 Disable Wpedantic warnings about constructs used in MFC, such as implicit
2523 int and getting a pointer to member function via non-standard syntax.
2525 @item -fnew-inheriting-ctors
2526 @opindex fnew-inheriting-ctors
2527 Enable the P0136 adjustment to the semantics of C++11 constructor
2528 inheritance.  This is part of C++17 but also considered to be a Defect
2529 Report against C++11 and C++14.  This flag is enabled by default
2530 unless @option{-fabi-version=10} or lower is specified.
2532 @item -fnew-ttp-matching
2533 @opindex fnew-ttp-matching
2534 Enable the P0522 resolution to Core issue 150, template template
2535 parameters and default arguments: this allows a template with default
2536 template arguments as an argument for a template template parameter
2537 with fewer template parameters.  This flag is enabled by default for
2538 @option{-std=c++17}.
2540 @item -fno-nonansi-builtins
2541 @opindex fno-nonansi-builtins
2542 Disable built-in declarations of functions that are not mandated by
2543 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
2544 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
2546 @item -fnothrow-opt
2547 @opindex fnothrow-opt
2548 Treat a @code{throw()} exception specification as if it were a
2549 @code{noexcept} specification to reduce or eliminate the text size
2550 overhead relative to a function with no exception specification.  If
2551 the function has local variables of types with non-trivial
2552 destructors, the exception specification actually makes the
2553 function smaller because the EH cleanups for those variables can be
2554 optimized away.  The semantic effect is that an exception thrown out of
2555 a function with such an exception specification results in a call
2556 to @code{terminate} rather than @code{unexpected}.
2558 @item -fno-operator-names
2559 @opindex fno-operator-names
2560 Do not treat the operator name keywords @code{and}, @code{bitand},
2561 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
2562 synonyms as keywords.
2564 @item -fno-optional-diags
2565 @opindex fno-optional-diags
2566 Disable diagnostics that the standard says a compiler does not need to
2567 issue.  Currently, the only such diagnostic issued by G++ is the one for
2568 a name having multiple meanings within a class.
2570 @item -fpermissive
2571 @opindex fpermissive
2572 Downgrade some diagnostics about nonconformant code from errors to
2573 warnings.  Thus, using @option{-fpermissive} allows some
2574 nonconforming code to compile.
2576 @item -fno-pretty-templates
2577 @opindex fno-pretty-templates
2578 When an error message refers to a specialization of a function
2579 template, the compiler normally prints the signature of the
2580 template followed by the template arguments and any typedefs or
2581 typenames in the signature (e.g. @code{void f(T) [with T = int]}
2582 rather than @code{void f(int)}) so that it's clear which template is
2583 involved.  When an error message refers to a specialization of a class
2584 template, the compiler omits any template arguments that match
2585 the default template arguments for that template.  If either of these
2586 behaviors make it harder to understand the error message rather than
2587 easier, you can use @option{-fno-pretty-templates} to disable them.
2589 @item -frepo
2590 @opindex frepo
2591 Enable automatic template instantiation at link time.  This option also
2592 implies @option{-fno-implicit-templates}.  @xref{Template
2593 Instantiation}, for more information.
2595 @item -fno-rtti
2596 @opindex fno-rtti
2597 Disable generation of information about every class with virtual
2598 functions for use by the C++ run-time type identification features
2599 (@code{dynamic_cast} and @code{typeid}).  If you don't use those parts
2600 of the language, you can save some space by using this flag.  Note that
2601 exception handling uses the same information, but G++ generates it as
2602 needed. The @code{dynamic_cast} operator can still be used for casts that
2603 do not require run-time type information, i.e.@: casts to @code{void *} or to
2604 unambiguous base classes.
2606 @item -fsized-deallocation
2607 @opindex fsized-deallocation
2608 Enable the built-in global declarations
2609 @smallexample
2610 void operator delete (void *, std::size_t) noexcept;
2611 void operator delete[] (void *, std::size_t) noexcept;
2612 @end smallexample
2613 as introduced in C++14.  This is useful for user-defined replacement
2614 deallocation functions that, for example, use the size of the object
2615 to make deallocation faster.  Enabled by default under
2616 @option{-std=c++14} and above.  The flag @option{-Wsized-deallocation}
2617 warns about places that might want to add a definition.
2619 @item -fstrict-enums
2620 @opindex fstrict-enums
2621 Allow the compiler to optimize using the assumption that a value of
2622 enumerated type can only be one of the values of the enumeration (as
2623 defined in the C++ standard; basically, a value that can be
2624 represented in the minimum number of bits needed to represent all the
2625 enumerators).  This assumption may not be valid if the program uses a
2626 cast to convert an arbitrary integer value to the enumerated type.
2628 @item -fstrong-eval-order
2629 @opindex fstrong-eval-order
2630 Evaluate member access, array subscripting, and shift expressions in
2631 left-to-right order, and evaluate assignment in right-to-left order,
2632 as adopted for C++17.  Enabled by default with @option{-std=c++17}.
2633 @option{-fstrong-eval-order=some} enables just the ordering of member
2634 access and shift expressions, and is the default without
2635 @option{-std=c++17}.
2637 @item -ftemplate-backtrace-limit=@var{n}
2638 @opindex ftemplate-backtrace-limit
2639 Set the maximum number of template instantiation notes for a single
2640 warning or error to @var{n}.  The default value is 10.
2642 @item -ftemplate-depth=@var{n}
2643 @opindex ftemplate-depth
2644 Set the maximum instantiation depth for template classes to @var{n}.
2645 A limit on the template instantiation depth is needed to detect
2646 endless recursions during template class instantiation.  ANSI/ISO C++
2647 conforming programs must not rely on a maximum depth greater than 17
2648 (changed to 1024 in C++11).  The default value is 900, as the compiler
2649 can run out of stack space before hitting 1024 in some situations.
2651 @item -fno-threadsafe-statics
2652 @opindex fno-threadsafe-statics
2653 Do not emit the extra code to use the routines specified in the C++
2654 ABI for thread-safe initialization of local statics.  You can use this
2655 option to reduce code size slightly in code that doesn't need to be
2656 thread-safe.
2658 @item -fuse-cxa-atexit
2659 @opindex fuse-cxa-atexit
2660 Register destructors for objects with static storage duration with the
2661 @code{__cxa_atexit} function rather than the @code{atexit} function.
2662 This option is required for fully standards-compliant handling of static
2663 destructors, but only works if your C library supports
2664 @code{__cxa_atexit}.
2666 @item -fno-use-cxa-get-exception-ptr
2667 @opindex fno-use-cxa-get-exception-ptr
2668 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2669 causes @code{std::uncaught_exception} to be incorrect, but is necessary
2670 if the runtime routine is not available.
2672 @item -fvisibility-inlines-hidden
2673 @opindex fvisibility-inlines-hidden
2674 This switch declares that the user does not attempt to compare
2675 pointers to inline functions or methods where the addresses of the two functions
2676 are taken in different shared objects.
2678 The effect of this is that GCC may, effectively, mark inline methods with
2679 @code{__attribute__ ((visibility ("hidden")))} so that they do not
2680 appear in the export table of a DSO and do not require a PLT indirection
2681 when used within the DSO@.  Enabling this option can have a dramatic effect
2682 on load and link times of a DSO as it massively reduces the size of the
2683 dynamic export table when the library makes heavy use of templates.
2685 The behavior of this switch is not quite the same as marking the
2686 methods as hidden directly, because it does not affect static variables
2687 local to the function or cause the compiler to deduce that
2688 the function is defined in only one shared object.
2690 You may mark a method as having a visibility explicitly to negate the
2691 effect of the switch for that method.  For example, if you do want to
2692 compare pointers to a particular inline method, you might mark it as
2693 having default visibility.  Marking the enclosing class with explicit
2694 visibility has no effect.
2696 Explicitly instantiated inline methods are unaffected by this option
2697 as their linkage might otherwise cross a shared library boundary.
2698 @xref{Template Instantiation}.
2700 @item -fvisibility-ms-compat
2701 @opindex fvisibility-ms-compat
2702 This flag attempts to use visibility settings to make GCC's C++
2703 linkage model compatible with that of Microsoft Visual Studio.
2705 The flag makes these changes to GCC's linkage model:
2707 @enumerate
2708 @item
2709 It sets the default visibility to @code{hidden}, like
2710 @option{-fvisibility=hidden}.
2712 @item
2713 Types, but not their members, are not hidden by default.
2715 @item
2716 The One Definition Rule is relaxed for types without explicit
2717 visibility specifications that are defined in more than one
2718 shared object: those declarations are permitted if they are
2719 permitted when this option is not used.
2720 @end enumerate
2722 In new code it is better to use @option{-fvisibility=hidden} and
2723 export those classes that are intended to be externally visible.
2724 Unfortunately it is possible for code to rely, perhaps accidentally,
2725 on the Visual Studio behavior.
2727 Among the consequences of these changes are that static data members
2728 of the same type with the same name but defined in different shared
2729 objects are different, so changing one does not change the other;
2730 and that pointers to function members defined in different shared
2731 objects may not compare equal.  When this flag is given, it is a
2732 violation of the ODR to define types with the same name differently.
2734 @item -fno-weak
2735 @opindex fno-weak
2736 Do not use weak symbol support, even if it is provided by the linker.
2737 By default, G++ uses weak symbols if they are available.  This
2738 option exists only for testing, and should not be used by end-users;
2739 it results in inferior code and has no benefits.  This option may
2740 be removed in a future release of G++.
2742 @item -nostdinc++
2743 @opindex nostdinc++
2744 Do not search for header files in the standard directories specific to
2745 C++, but do still search the other standard directories.  (This option
2746 is used when building the C++ library.)
2747 @end table
2749 In addition, these optimization, warning, and code generation options
2750 have meanings only for C++ programs:
2752 @table @gcctabopt
2753 @item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2754 @opindex Wabi
2755 @opindex Wno-abi
2756 Warn when G++ it generates code that is probably not compatible with
2757 the vendor-neutral C++ ABI@.  Since G++ now defaults to updating the
2758 ABI with each major release, normally @option{-Wabi} will warn only if
2759 there is a check added later in a release series for an ABI issue
2760 discovered since the initial release.  @option{-Wabi} will warn about
2761 more things if an older ABI version is selected (with
2762 @option{-fabi-version=@var{n}}).
2764 @option{-Wabi} can also be used with an explicit version number to
2765 warn about compatibility with a particular @option{-fabi-version}
2766 level, e.g. @option{-Wabi=2} to warn about changes relative to
2767 @option{-fabi-version=2}.
2769 If an explicit version number is provided and
2770 @option{-fabi-compat-version} is not specified, the version number
2771 from this option is used for compatibility aliases.  If no explicit
2772 version number is provided with this option, but
2773 @option{-fabi-compat-version} is specified, that version number is
2774 used for ABI warnings.
2776 Although an effort has been made to warn about
2777 all such cases, there are probably some cases that are not warned about,
2778 even though G++ is generating incompatible code.  There may also be
2779 cases where warnings are emitted even though the code that is generated
2780 is compatible.
2782 You should rewrite your code to avoid these warnings if you are
2783 concerned about the fact that code generated by G++ may not be binary
2784 compatible with code generated by other compilers.
2786 Known incompatibilities in @option{-fabi-version=2} (which was the
2787 default from GCC 3.4 to 4.9) include:
2789 @itemize @bullet
2791 @item
2792 A template with a non-type template parameter of reference type was
2793 mangled incorrectly:
2794 @smallexample
2795 extern int N;
2796 template <int &> struct S @{@};
2797 void n (S<N>) @{2@}
2798 @end smallexample
2800 This was fixed in @option{-fabi-version=3}.
2802 @item
2803 SIMD vector types declared using @code{__attribute ((vector_size))} were
2804 mangled in a non-standard way that does not allow for overloading of
2805 functions taking vectors of different sizes.
2807 The mangling was changed in @option{-fabi-version=4}.
2809 @item
2810 @code{__attribute ((const))} and @code{noreturn} were mangled as type
2811 qualifiers, and @code{decltype} of a plain declaration was folded away.
2813 These mangling issues were fixed in @option{-fabi-version=5}.
2815 @item
2816 Scoped enumerators passed as arguments to a variadic function are
2817 promoted like unscoped enumerators, causing @code{va_arg} to complain.
2818 On most targets this does not actually affect the parameter passing
2819 ABI, as there is no way to pass an argument smaller than @code{int}.
2821 Also, the ABI changed the mangling of template argument packs,
2822 @code{const_cast}, @code{static_cast}, prefix increment/decrement, and
2823 a class scope function used as a template argument.
2825 These issues were corrected in @option{-fabi-version=6}.
2827 @item
2828 Lambdas in default argument scope were mangled incorrectly, and the
2829 ABI changed the mangling of @code{nullptr_t}.
2831 These issues were corrected in @option{-fabi-version=7}.
2833 @item
2834 When mangling a function type with function-cv-qualifiers, the
2835 un-qualified function type was incorrectly treated as a substitution
2836 candidate.
2838 This was fixed in @option{-fabi-version=8}, the default for GCC 5.1.
2840 @item
2841 @code{decltype(nullptr)} incorrectly had an alignment of 1, leading to
2842 unaligned accesses.  Note that this did not affect the ABI of a
2843 function with a @code{nullptr_t} parameter, as parameters have a
2844 minimum alignment.
2846 This was fixed in @option{-fabi-version=9}, the default for GCC 5.2.
2848 @item
2849 Target-specific attributes that affect the identity of a type, such as
2850 ia32 calling conventions on a function type (stdcall, regparm, etc.),
2851 did not affect the mangled name, leading to name collisions when
2852 function pointers were used as template arguments.
2854 This was fixed in @option{-fabi-version=10}, the default for GCC 6.1.
2856 @end itemize
2858 It also warns about psABI-related changes.  The known psABI changes at this
2859 point include:
2861 @itemize @bullet
2863 @item
2864 For SysV/x86-64, unions with @code{long double} members are 
2865 passed in memory as specified in psABI.  For example:
2867 @smallexample
2868 union U @{
2869   long double ld;
2870   int i;
2872 @end smallexample
2874 @noindent
2875 @code{union U} is always passed in memory.
2877 @end itemize
2879 @item -Wabi-tag @r{(C++ and Objective-C++ only)}
2880 @opindex Wabi-tag
2881 @opindex -Wabi-tag
2882 Warn when a type with an ABI tag is used in a context that does not
2883 have that ABI tag.  See @ref{C++ Attributes} for more information
2884 about ABI tags.
2886 @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2887 @opindex Wctor-dtor-privacy
2888 @opindex Wno-ctor-dtor-privacy
2889 Warn when a class seems unusable because all the constructors or
2890 destructors in that class are private, and it has neither friends nor
2891 public static member functions.  Also warn if there are no non-private
2892 methods, and there's at least one private member function that isn't
2893 a constructor or destructor.
2895 @item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
2896 @opindex Wdelete-non-virtual-dtor
2897 @opindex Wno-delete-non-virtual-dtor
2898 Warn when @code{delete} is used to destroy an instance of a class that
2899 has virtual functions and non-virtual destructor. It is unsafe to delete
2900 an instance of a derived class through a pointer to a base class if the
2901 base class does not have a virtual destructor.  This warning is enabled
2902 by @option{-Wall}.
2904 @item -Wdeprecated-copy @r{(C++ and Objective-C++ only)}
2905 @opindex Wdeprecated-copy
2906 @opindex Wno-deprecated-copy
2907 Warn that the implicit declaration of a copy constructor or copy
2908 assignment operator is deprecated if the class has a user-provided
2909 copy constructor, copy assignment operator, or destructor, in C++11
2910 and up.  This warning is enabled by @option{-Wall}.
2912 @item -Wno-init-list-lifetime @r{(C++ and Objective-C++ only)}
2913 @opindex Winit-list-lifetime
2914 @opindex Wno-init-list-lifetime
2915 Do not warn about uses of @code{std::initializer_list} that are likely
2916 to result in dangling pointers.  Since the underlying array for an
2917 @code{initializer_list} is handled like a normal C++ temporary object,
2918 it is easy to inadvertently keep a pointer to the array past the end
2919 of the array's lifetime.  For example:
2921 @itemize @bullet
2922 @item
2923 If a function returns a temporary @code{initializer_list}, or a local
2924 @code{initializer_list} variable, the array's lifetime ends at the end
2925 of the return statement, so the value returned has a dangling pointer.
2927 @item
2928 If a new-expression creates an @code{initializer_list}, the array only
2929 lives until the end of the enclosing full-expression, so the
2930 @code{initializer_list} in the heap has a dangling pointer.
2932 @item
2933 When an @code{initializer_list} variable is assigned from a
2934 brace-enclosed initializer list, the temporary array created for the
2935 right side of the assignment only lives until the end of the
2936 full-expression, so at the next statement the @code{initializer_list}
2937 variable has a dangling pointer.
2939 @smallexample
2940 // li's initial underlying array lives as long as li
2941 std::initializer_list<int> li = @{ 1,2,3 @};
2942 // assignment changes li to point to a temporary array
2943 li = @{ 4, 5 @};
2944 // now the temporary is gone and li has a dangling pointer
2945 int i = li.begin()[0] // undefined behavior
2946 @end smallexample
2948 @item
2949 When a list constructor stores the @code{begin} pointer from the
2950 @code{initializer_list} argument, this doesn't extend the lifetime of
2951 the array, so if a class variable is constructed from a temporary
2952 @code{initializer_list}, the pointer is left dangling by the end of
2953 the variable declaration statement.
2955 @end itemize
2957 @item -Wliteral-suffix @r{(C++ and Objective-C++ only)}
2958 @opindex Wliteral-suffix
2959 @opindex Wno-literal-suffix
2960 Warn when a string or character literal is followed by a ud-suffix which does
2961 not begin with an underscore.  As a conforming extension, GCC treats such
2962 suffixes as separate preprocessing tokens in order to maintain backwards
2963 compatibility with code that uses formatting macros from @code{<inttypes.h>}.
2964 For example:
2966 @smallexample
2967 #define __STDC_FORMAT_MACROS
2968 #include <inttypes.h>
2969 #include <stdio.h>
2971 int main() @{
2972   int64_t i64 = 123;
2973   printf("My int64: %" PRId64"\n", i64);
2975 @end smallexample
2977 In this case, @code{PRId64} is treated as a separate preprocessing token.
2979 Additionally, warn when a user-defined literal operator is declared with
2980 a literal suffix identifier that doesn't begin with an underscore. Literal
2981 suffix identifiers that don't begin with an underscore are reserved for
2982 future standardization.
2984 This warning is enabled by default.
2986 @item -Wlto-type-mismatch
2987 @opindex Wlto-type-mismatch
2988 @opindex Wno-lto-type-mismatch
2990 During the link-time optimization warn about type mismatches in
2991 global declarations from different compilation units.
2992 Requires @option{-flto} to be enabled.  Enabled by default.
2994 @item -Wno-narrowing @r{(C++ and Objective-C++ only)}
2995 @opindex Wnarrowing
2996 @opindex Wno-narrowing
2997 For C++11 and later standards, narrowing conversions are diagnosed by default,
2998 as required by the standard.  A narrowing conversion from a constant produces
2999 an error, and a narrowing conversion from a non-constant produces a warning,
3000 but @option{-Wno-narrowing} suppresses the diagnostic.
3001 Note that this does not affect the meaning of well-formed code;
3002 narrowing conversions are still considered ill-formed in SFINAE contexts.
3004 With @option{-Wnarrowing} in C++98, warn when a narrowing
3005 conversion prohibited by C++11 occurs within
3006 @samp{@{ @}}, e.g.
3008 @smallexample
3009 int i = @{ 2.2 @}; // error: narrowing from double to int
3010 @end smallexample
3012 This flag is included in @option{-Wall} and @option{-Wc++11-compat}.
3014 @item -Wnoexcept @r{(C++ and Objective-C++ only)}
3015 @opindex Wnoexcept
3016 @opindex Wno-noexcept
3017 Warn when a noexcept-expression evaluates to false because of a call
3018 to a function that does not have a non-throwing exception
3019 specification (i.e. @code{throw()} or @code{noexcept}) but is known by
3020 the compiler to never throw an exception.
3022 @item -Wnoexcept-type @r{(C++ and Objective-C++ only)}
3023 @opindex Wnoexcept-type
3024 @opindex Wno-noexcept-type
3025 Warn if the C++17 feature making @code{noexcept} part of a function
3026 type changes the mangled name of a symbol relative to C++14.  Enabled
3027 by @option{-Wabi} and @option{-Wc++17-compat}.
3029 As an example:
3031 @smallexample
3032 template <class T> void f(T t) @{ t(); @};
3033 void g() noexcept;
3034 void h() @{ f(g); @} 
3035 @end smallexample
3037 @noindent
3038 In C++14, @code{f} calls calls @code{f<void(*)()>}, but in
3039 C++17 it calls @code{f<void(*)()noexcept>}.
3041 @item -Wclass-memaccess @r{(C++ and Objective-C++ only)}
3042 @opindex Wclass-memaccess
3043 Warn when the destination of a call to a raw memory function such as
3044 @code{memset} or @code{memcpy} is an object of class type, and when writing
3045 into such an object might bypass the class non-trivial or deleted constructor
3046 or copy assignment, violate const-correctness or encapsulation, or corrupt
3047 virtual table pointers.  Modifying the representation of such objects may
3048 violate invariants maintained by member functions of the class.  For example,
3049 the call to @code{memset} below is undefined because it modifies a non-trivial
3050 class object and is, therefore, diagnosed.  The safe way to either initialize
3051 or clear the storage of objects of such types is by using the appropriate
3052 constructor or assignment operator, if one is available.
3053 @smallexample
3054 std::string str = "abc";
3055 memset (&str, 0, sizeof str);
3056 @end smallexample
3057 The @option{-Wclass-memaccess} option is enabled by @option{-Wall}.
3058 Explicitly casting the pointer to the class object to @code{void *} or
3059 to a type that can be safely accessed by the raw memory function suppresses
3060 the warning.
3062 @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
3063 @opindex Wnon-virtual-dtor
3064 @opindex Wno-non-virtual-dtor
3065 Warn when a class has virtual functions and an accessible non-virtual
3066 destructor itself or in an accessible polymorphic base class, in which
3067 case it is possible but unsafe to delete an instance of a derived
3068 class through a pointer to the class itself or base class.  This
3069 warning is automatically enabled if @option{-Weffc++} is specified.
3071 @item -Wregister @r{(C++ and Objective-C++ only)}
3072 @opindex Wregister
3073 @opindex Wno-register
3074 Warn on uses of the @code{register} storage class specifier, except
3075 when it is part of the GNU @ref{Explicit Register Variables} extension.
3076 The use of the @code{register} keyword as storage class specifier has
3077 been deprecated in C++11 and removed in C++17.
3078 Enabled by default with @option{-std=c++17}.
3080 @item -Wreorder @r{(C++ and Objective-C++ only)}
3081 @opindex Wreorder
3082 @opindex Wno-reorder
3083 @cindex reordering, warning
3084 @cindex warning for reordering of member initializers
3085 Warn when the order of member initializers given in the code does not
3086 match the order in which they must be executed.  For instance:
3088 @smallexample
3089 struct A @{
3090   int i;
3091   int j;
3092   A(): j (0), i (1) @{ @}
3094 @end smallexample
3096 @noindent
3097 The compiler rearranges the member initializers for @code{i}
3098 and @code{j} to match the declaration order of the members, emitting
3099 a warning to that effect.  This warning is enabled by @option{-Wall}.
3101 @item -fext-numeric-literals @r{(C++ and Objective-C++ only)}
3102 @opindex fext-numeric-literals
3103 @opindex fno-ext-numeric-literals
3104 Accept imaginary, fixed-point, or machine-defined
3105 literal number suffixes as GNU extensions.
3106 When this option is turned off these suffixes are treated
3107 as C++11 user-defined literal numeric suffixes.
3108 This is on by default for all pre-C++11 dialects and all GNU dialects:
3109 @option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11},
3110 @option{-std=gnu++14}.
3111 This option is off by default
3112 for ISO C++11 onwards (@option{-std=c++11}, ...).
3113 @end table
3115 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
3117 @table @gcctabopt
3118 @item -Weffc++ @r{(C++ and Objective-C++ only)}
3119 @opindex Weffc++
3120 @opindex Wno-effc++
3121 Warn about violations of the following style guidelines from Scott Meyers'
3122 @cite{Effective C++} series of books:
3124 @itemize @bullet
3125 @item
3126 Define a copy constructor and an assignment operator for classes
3127 with dynamically-allocated memory.
3129 @item
3130 Prefer initialization to assignment in constructors.
3132 @item
3133 Have @code{operator=} return a reference to @code{*this}.
3135 @item
3136 Don't try to return a reference when you must return an object.
3138 @item
3139 Distinguish between prefix and postfix forms of increment and
3140 decrement operators.
3142 @item
3143 Never overload @code{&&}, @code{||}, or @code{,}.
3145 @end itemize
3147 This option also enables @option{-Wnon-virtual-dtor}, which is also
3148 one of the effective C++ recommendations.  However, the check is
3149 extended to warn about the lack of virtual destructor in accessible
3150 non-polymorphic bases classes too.
3152 When selecting this option, be aware that the standard library
3153 headers do not obey all of these guidelines; use @samp{grep -v}
3154 to filter out those warnings.
3156 @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
3157 @opindex Wstrict-null-sentinel
3158 @opindex Wno-strict-null-sentinel
3159 Warn about the use of an uncasted @code{NULL} as sentinel.  When
3160 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
3161 to @code{__null}.  Although it is a null pointer constant rather than a
3162 null pointer, it is guaranteed to be of the same size as a pointer.
3163 But this use is not portable across different compilers.
3165 @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
3166 @opindex Wno-non-template-friend
3167 @opindex Wnon-template-friend
3168 Disable warnings when non-template friend functions are declared
3169 within a template.  In very old versions of GCC that predate implementation
3170 of the ISO standard, declarations such as 
3171 @samp{friend int foo(int)}, where the name of the friend is an unqualified-id,
3172 could be interpreted as a particular specialization of a template
3173 function; the warning exists to diagnose compatibility problems, 
3174 and is enabled by default.
3176 @item -Wold-style-cast @r{(C++ and Objective-C++ only)}
3177 @opindex Wold-style-cast
3178 @opindex Wno-old-style-cast
3179 Warn if an old-style (C-style) cast to a non-void type is used within
3180 a C++ program.  The new-style casts (@code{dynamic_cast},
3181 @code{static_cast}, @code{reinterpret_cast}, and @code{const_cast}) are
3182 less vulnerable to unintended effects and much easier to search for.
3184 @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
3185 @opindex Woverloaded-virtual
3186 @opindex Wno-overloaded-virtual
3187 @cindex overloaded virtual function, warning
3188 @cindex warning for overloaded virtual function
3189 Warn when a function declaration hides virtual functions from a
3190 base class.  For example, in:
3192 @smallexample
3193 struct A @{
3194   virtual void f();
3197 struct B: public A @{
3198   void f(int);
3200 @end smallexample
3202 the @code{A} class version of @code{f} is hidden in @code{B}, and code
3203 like:
3205 @smallexample
3206 B* b;
3207 b->f();
3208 @end smallexample
3210 @noindent
3211 fails to compile.
3213 @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
3214 @opindex Wno-pmf-conversions
3215 @opindex Wpmf-conversions
3216 Disable the diagnostic for converting a bound pointer to member function
3217 to a plain pointer.
3219 @item -Wsign-promo @r{(C++ and Objective-C++ only)}
3220 @opindex Wsign-promo
3221 @opindex Wno-sign-promo
3222 Warn when overload resolution chooses a promotion from unsigned or
3223 enumerated type to a signed type, over a conversion to an unsigned type of
3224 the same size.  Previous versions of G++ tried to preserve
3225 unsignedness, but the standard mandates the current behavior.
3227 @item -Wtemplates @r{(C++ and Objective-C++ only)}
3228 @opindex Wtemplates
3229 Warn when a primary template declaration is encountered.  Some coding
3230 rules disallow templates, and this may be used to enforce that rule.
3231 The warning is inactive inside a system header file, such as the STL, so
3232 one can still use the STL.  One may also instantiate or specialize
3233 templates.
3235 @item -Wmultiple-inheritance @r{(C++ and Objective-C++ only)}
3236 @opindex Wmultiple-inheritance
3237 Warn when a class is defined with multiple direct base classes.  Some
3238 coding rules disallow multiple inheritance, and this may be used to
3239 enforce that rule.  The warning is inactive inside a system header file,
3240 such as the STL, so one can still use the STL.  One may also define
3241 classes that indirectly use multiple inheritance.
3243 @item -Wvirtual-inheritance
3244 @opindex Wvirtual-inheritance
3245 Warn when a class is defined with a virtual direct base class.  Some
3246 coding rules disallow multiple inheritance, and this may be used to
3247 enforce that rule.  The warning is inactive inside a system header file,
3248 such as the STL, so one can still use the STL.  One may also define
3249 classes that indirectly use virtual inheritance.
3251 @item -Wnamespaces
3252 @opindex Wnamespaces
3253 Warn when a namespace definition is opened.  Some coding rules disallow
3254 namespaces, and this may be used to enforce that rule.  The warning is
3255 inactive inside a system header file, such as the STL, so one can still
3256 use the STL.  One may also use using directives and qualified names.
3258 @item -Wno-terminate @r{(C++ and Objective-C++ only)}
3259 @opindex Wterminate
3260 @opindex Wno-terminate
3261 Disable the warning about a throw-expression that will immediately
3262 result in a call to @code{terminate}.
3263 @end table
3265 @node Objective-C and Objective-C++ Dialect Options
3266 @section Options Controlling Objective-C and Objective-C++ Dialects
3268 @cindex compiler options, Objective-C and Objective-C++
3269 @cindex Objective-C and Objective-C++ options, command-line
3270 @cindex options, Objective-C and Objective-C++
3271 (NOTE: This manual does not describe the Objective-C and Objective-C++
3272 languages themselves.  @xref{Standards,,Language Standards
3273 Supported by GCC}, for references.)
3275 This section describes the command-line options that are only meaningful
3276 for Objective-C and Objective-C++ programs.  You can also use most of
3277 the language-independent GNU compiler options.
3278 For example, you might compile a file @file{some_class.m} like this:
3280 @smallexample
3281 gcc -g -fgnu-runtime -O -c some_class.m
3282 @end smallexample
3284 @noindent
3285 In this example, @option{-fgnu-runtime} is an option meant only for
3286 Objective-C and Objective-C++ programs; you can use the other options with
3287 any language supported by GCC@.
3289 Note that since Objective-C is an extension of the C language, Objective-C
3290 compilations may also use options specific to the C front-end (e.g.,
3291 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
3292 C++-specific options (e.g., @option{-Wabi}).
3294 Here is a list of options that are @emph{only} for compiling Objective-C
3295 and Objective-C++ programs:
3297 @table @gcctabopt
3298 @item -fconstant-string-class=@var{class-name}
3299 @opindex fconstant-string-class
3300 Use @var{class-name} as the name of the class to instantiate for each
3301 literal string specified with the syntax @code{@@"@dots{}"}.  The default
3302 class name is @code{NXConstantString} if the GNU runtime is being used, and
3303 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
3304 @option{-fconstant-cfstrings} option, if also present, overrides the
3305 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
3306 to be laid out as constant CoreFoundation strings.
3308 @item -fgnu-runtime
3309 @opindex fgnu-runtime
3310 Generate object code compatible with the standard GNU Objective-C
3311 runtime.  This is the default for most types of systems.
3313 @item -fnext-runtime
3314 @opindex fnext-runtime
3315 Generate output compatible with the NeXT runtime.  This is the default
3316 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
3317 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
3318 used.
3320 @item -fno-nil-receivers
3321 @opindex fno-nil-receivers
3322 Assume that all Objective-C message dispatches (@code{[receiver
3323 message:arg]}) in this translation unit ensure that the receiver is
3324 not @code{nil}.  This allows for more efficient entry points in the
3325 runtime to be used.  This option is only available in conjunction with
3326 the NeXT runtime and ABI version 0 or 1.
3328 @item -fobjc-abi-version=@var{n}
3329 @opindex fobjc-abi-version
3330 Use version @var{n} of the Objective-C ABI for the selected runtime.
3331 This option is currently supported only for the NeXT runtime.  In that
3332 case, Version 0 is the traditional (32-bit) ABI without support for
3333 properties and other Objective-C 2.0 additions.  Version 1 is the
3334 traditional (32-bit) ABI with support for properties and other
3335 Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
3336 nothing is specified, the default is Version 0 on 32-bit target
3337 machines, and Version 2 on 64-bit target machines.
3339 @item -fobjc-call-cxx-cdtors
3340 @opindex fobjc-call-cxx-cdtors
3341 For each Objective-C class, check if any of its instance variables is a
3342 C++ object with a non-trivial default constructor.  If so, synthesize a
3343 special @code{- (id) .cxx_construct} instance method which runs
3344 non-trivial default constructors on any such instance variables, in order,
3345 and then return @code{self}.  Similarly, check if any instance variable
3346 is a C++ object with a non-trivial destructor, and if so, synthesize a
3347 special @code{- (void) .cxx_destruct} method which runs
3348 all such default destructors, in reverse order.
3350 The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
3351 methods thusly generated only operate on instance variables
3352 declared in the current Objective-C class, and not those inherited
3353 from superclasses.  It is the responsibility of the Objective-C
3354 runtime to invoke all such methods in an object's inheritance
3355 hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
3356 by the runtime immediately after a new object instance is allocated;
3357 the @code{- (void) .cxx_destruct} methods are invoked immediately
3358 before the runtime deallocates an object instance.
3360 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
3361 support for invoking the @code{- (id) .cxx_construct} and
3362 @code{- (void) .cxx_destruct} methods.
3364 @item -fobjc-direct-dispatch
3365 @opindex fobjc-direct-dispatch
3366 Allow fast jumps to the message dispatcher.  On Darwin this is
3367 accomplished via the comm page.
3369 @item -fobjc-exceptions
3370 @opindex fobjc-exceptions
3371 Enable syntactic support for structured exception handling in
3372 Objective-C, similar to what is offered by C++.  This option
3373 is required to use the Objective-C keywords @code{@@try},
3374 @code{@@throw}, @code{@@catch}, @code{@@finally} and
3375 @code{@@synchronized}.  This option is available with both the GNU
3376 runtime and the NeXT runtime (but not available in conjunction with
3377 the NeXT runtime on Mac OS X 10.2 and earlier).
3379 @item -fobjc-gc
3380 @opindex fobjc-gc
3381 Enable garbage collection (GC) in Objective-C and Objective-C++
3382 programs.  This option is only available with the NeXT runtime; the
3383 GNU runtime has a different garbage collection implementation that
3384 does not require special compiler flags.
3386 @item -fobjc-nilcheck
3387 @opindex fobjc-nilcheck
3388 For the NeXT runtime with version 2 of the ABI, check for a nil
3389 receiver in method invocations before doing the actual method call.
3390 This is the default and can be disabled using
3391 @option{-fno-objc-nilcheck}.  Class methods and super calls are never
3392 checked for nil in this way no matter what this flag is set to.
3393 Currently this flag does nothing when the GNU runtime, or an older
3394 version of the NeXT runtime ABI, is used.
3396 @item -fobjc-std=objc1
3397 @opindex fobjc-std
3398 Conform to the language syntax of Objective-C 1.0, the language
3399 recognized by GCC 4.0.  This only affects the Objective-C additions to
3400 the C/C++ language; it does not affect conformance to C/C++ standards,
3401 which is controlled by the separate C/C++ dialect option flags.  When
3402 this option is used with the Objective-C or Objective-C++ compiler,
3403 any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
3404 This is useful if you need to make sure that your Objective-C code can
3405 be compiled with older versions of GCC@.
3407 @item -freplace-objc-classes
3408 @opindex freplace-objc-classes
3409 Emit a special marker instructing @command{ld(1)} not to statically link in
3410 the resulting object file, and allow @command{dyld(1)} to load it in at
3411 run time instead.  This is used in conjunction with the Fix-and-Continue
3412 debugging mode, where the object file in question may be recompiled and
3413 dynamically reloaded in the course of program execution, without the need
3414 to restart the program itself.  Currently, Fix-and-Continue functionality
3415 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
3416 and later.
3418 @item -fzero-link
3419 @opindex fzero-link
3420 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
3421 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
3422 compile time) with static class references that get initialized at load time,
3423 which improves run-time performance.  Specifying the @option{-fzero-link} flag
3424 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
3425 to be retained.  This is useful in Zero-Link debugging mode, since it allows
3426 for individual class implementations to be modified during program execution.
3427 The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
3428 regardless of command-line options.
3430 @item -fno-local-ivars
3431 @opindex fno-local-ivars
3432 @opindex flocal-ivars
3433 By default instance variables in Objective-C can be accessed as if
3434 they were local variables from within the methods of the class they're
3435 declared in.  This can lead to shadowing between instance variables
3436 and other variables declared either locally inside a class method or
3437 globally with the same name.  Specifying the @option{-fno-local-ivars}
3438 flag disables this behavior thus avoiding variable shadowing issues.
3440 @item -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]}
3441 @opindex fivar-visibility
3442 Set the default instance variable visibility to the specified option
3443 so that instance variables declared outside the scope of any access
3444 modifier directives default to the specified visibility.
3446 @item -gen-decls
3447 @opindex gen-decls
3448 Dump interface declarations for all classes seen in the source file to a
3449 file named @file{@var{sourcename}.decl}.
3451 @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
3452 @opindex Wassign-intercept
3453 @opindex Wno-assign-intercept
3454 Warn whenever an Objective-C assignment is being intercepted by the
3455 garbage collector.
3457 @item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
3458 @opindex Wno-protocol
3459 @opindex Wprotocol
3460 If a class is declared to implement a protocol, a warning is issued for
3461 every method in the protocol that is not implemented by the class.  The
3462 default behavior is to issue a warning for every method not explicitly
3463 implemented in the class, even if a method implementation is inherited
3464 from the superclass.  If you use the @option{-Wno-protocol} option, then
3465 methods inherited from the superclass are considered to be implemented,
3466 and no warning is issued for them.
3468 @item -Wselector @r{(Objective-C and Objective-C++ only)}
3469 @opindex Wselector
3470 @opindex Wno-selector
3471 Warn if multiple methods of different types for the same selector are
3472 found during compilation.  The check is performed on the list of methods
3473 in the final stage of compilation.  Additionally, a check is performed
3474 for each selector appearing in a @code{@@selector(@dots{})}
3475 expression, and a corresponding method for that selector has been found
3476 during compilation.  Because these checks scan the method table only at
3477 the end of compilation, these warnings are not produced if the final
3478 stage of compilation is not reached, for example because an error is
3479 found during compilation, or because the @option{-fsyntax-only} option is
3480 being used.
3482 @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
3483 @opindex Wstrict-selector-match
3484 @opindex Wno-strict-selector-match
3485 Warn if multiple methods with differing argument and/or return types are
3486 found for a given selector when attempting to send a message using this
3487 selector to a receiver of type @code{id} or @code{Class}.  When this flag
3488 is off (which is the default behavior), the compiler omits such warnings
3489 if any differences found are confined to types that share the same size
3490 and alignment.
3492 @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
3493 @opindex Wundeclared-selector
3494 @opindex Wno-undeclared-selector
3495 Warn if a @code{@@selector(@dots{})} expression referring to an
3496 undeclared selector is found.  A selector is considered undeclared if no
3497 method with that name has been declared before the
3498 @code{@@selector(@dots{})} expression, either explicitly in an
3499 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
3500 an @code{@@implementation} section.  This option always performs its
3501 checks as soon as a @code{@@selector(@dots{})} expression is found,
3502 while @option{-Wselector} only performs its checks in the final stage of
3503 compilation.  This also enforces the coding style convention
3504 that methods and selectors must be declared before being used.
3506 @item -print-objc-runtime-info
3507 @opindex print-objc-runtime-info
3508 Generate C header describing the largest structure that is passed by
3509 value, if any.
3511 @end table
3513 @node Diagnostic Message Formatting Options
3514 @section Options to Control Diagnostic Messages Formatting
3515 @cindex options to control diagnostics formatting
3516 @cindex diagnostic messages
3517 @cindex message formatting
3519 Traditionally, diagnostic messages have been formatted irrespective of
3520 the output device's aspect (e.g.@: its width, @dots{}).  You can use the
3521 options described below
3522 to control the formatting algorithm for diagnostic messages, 
3523 e.g.@: how many characters per line, how often source location
3524 information should be reported.  Note that some language front ends may not
3525 honor these options.
3527 @table @gcctabopt
3528 @item -fmessage-length=@var{n}
3529 @opindex fmessage-length
3530 Try to format error messages so that they fit on lines of about
3531 @var{n} characters.  If @var{n} is zero, then no line-wrapping is
3532 done; each error message appears on a single line.  This is the
3533 default for all front ends.
3535 @item -fdiagnostics-show-location=once
3536 @opindex fdiagnostics-show-location
3537 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
3538 reporter to emit source location information @emph{once}; that is, in
3539 case the message is too long to fit on a single physical line and has to
3540 be wrapped, the source location won't be emitted (as prefix) again,
3541 over and over, in subsequent continuation lines.  This is the default
3542 behavior.
3544 @item -fdiagnostics-show-location=every-line
3545 Only meaningful in line-wrapping mode.  Instructs the diagnostic
3546 messages reporter to emit the same source location information (as
3547 prefix) for physical lines that result from the process of breaking
3548 a message which is too long to fit on a single line.
3550 @item -fdiagnostics-color[=@var{WHEN}]
3551 @itemx -fno-diagnostics-color
3552 @opindex fdiagnostics-color
3553 @cindex highlight, color
3554 @vindex GCC_COLORS @r{environment variable}
3555 Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
3556 or @samp{auto}.  The default depends on how the compiler has been configured,
3557 it can be any of the above @var{WHEN} options or also @samp{never}
3558 if @env{GCC_COLORS} environment variable isn't present in the environment,
3559 and @samp{auto} otherwise.
3560 @samp{auto} means to use color only when the standard error is a terminal.
3561 The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
3562 aliases for @option{-fdiagnostics-color=always} and
3563 @option{-fdiagnostics-color=never}, respectively.
3565 The colors are defined by the environment variable @env{GCC_COLORS}.
3566 Its value is a colon-separated list of capabilities and Select Graphic
3567 Rendition (SGR) substrings. SGR commands are interpreted by the
3568 terminal or terminal emulator.  (See the section in the documentation
3569 of your text terminal for permitted values and their meanings as
3570 character attributes.)  These substring values are integers in decimal
3571 representation and can be concatenated with semicolons.
3572 Common values to concatenate include
3573 @samp{1} for bold,
3574 @samp{4} for underline,
3575 @samp{5} for blink,
3576 @samp{7} for inverse,
3577 @samp{39} for default foreground color,
3578 @samp{30} to @samp{37} for foreground colors,
3579 @samp{90} to @samp{97} for 16-color mode foreground colors,
3580 @samp{38;5;0} to @samp{38;5;255}
3581 for 88-color and 256-color modes foreground colors,
3582 @samp{49} for default background color,
3583 @samp{40} to @samp{47} for background colors,
3584 @samp{100} to @samp{107} for 16-color mode background colors,
3585 and @samp{48;5;0} to @samp{48;5;255}
3586 for 88-color and 256-color modes background colors.
3588 The default @env{GCC_COLORS} is
3589 @smallexample
3590 error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
3591 quote=01:fixit-insert=32:fixit-delete=31:\
3592 diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
3593 type-diff=01;32
3594 @end smallexample
3595 @noindent
3596 where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
3597 @samp{01;36} is bold cyan, @samp{32} is green, @samp{34} is blue,
3598 @samp{01} is bold, and @samp{31} is red.
3599 Setting @env{GCC_COLORS} to the empty string disables colors.
3600 Supported capabilities are as follows.
3602 @table @code
3603 @item error=
3604 @vindex error GCC_COLORS @r{capability}
3605 SGR substring for error: markers.
3607 @item warning=
3608 @vindex warning GCC_COLORS @r{capability}
3609 SGR substring for warning: markers.
3611 @item note=
3612 @vindex note GCC_COLORS @r{capability}
3613 SGR substring for note: markers.
3615 @item range1=
3616 @vindex range1 GCC_COLORS @r{capability}
3617 SGR substring for first additional range.
3619 @item range2=
3620 @vindex range2 GCC_COLORS @r{capability}
3621 SGR substring for second additional range.
3623 @item locus=
3624 @vindex locus GCC_COLORS @r{capability}
3625 SGR substring for location information, @samp{file:line} or
3626 @samp{file:line:column} etc.
3628 @item quote=
3629 @vindex quote GCC_COLORS @r{capability}
3630 SGR substring for information printed within quotes.
3632 @item fixit-insert=
3633 @vindex fixit-insert GCC_COLORS @r{capability}
3634 SGR substring for fix-it hints suggesting text to
3635 be inserted or replaced.
3637 @item fixit-delete=
3638 @vindex fixit-delete GCC_COLORS @r{capability}
3639 SGR substring for fix-it hints suggesting text to
3640 be deleted.
3642 @item diff-filename=
3643 @vindex diff-filename GCC_COLORS @r{capability}
3644 SGR substring for filename headers within generated patches.
3646 @item diff-hunk=
3647 @vindex diff-hunk GCC_COLORS @r{capability}
3648 SGR substring for the starts of hunks within generated patches.
3650 @item diff-delete=
3651 @vindex diff-delete GCC_COLORS @r{capability}
3652 SGR substring for deleted lines within generated patches.
3654 @item diff-insert=
3655 @vindex diff-insert GCC_COLORS @r{capability}
3656 SGR substring for inserted lines within generated patches.
3658 @item type-diff=
3659 @vindex type-diff GCC_COLORS @r{capability}
3660 SGR substring for highlighting mismatching types within template
3661 arguments in the C++ frontend.
3662 @end table
3664 @item -fno-diagnostics-show-option
3665 @opindex fno-diagnostics-show-option
3666 @opindex fdiagnostics-show-option
3667 By default, each diagnostic emitted includes text indicating the
3668 command-line option that directly controls the diagnostic (if such an
3669 option is known to the diagnostic machinery).  Specifying the
3670 @option{-fno-diagnostics-show-option} flag suppresses that behavior.
3672 @item -fno-diagnostics-show-caret
3673 @opindex fno-diagnostics-show-caret
3674 @opindex fdiagnostics-show-caret
3675 By default, each diagnostic emitted includes the original source line
3676 and a caret @samp{^} indicating the column.  This option suppresses this
3677 information.  The source line is truncated to @var{n} characters, if
3678 the @option{-fmessage-length=n} option is given.  When the output is done
3679 to the terminal, the width is limited to the width given by the
3680 @env{COLUMNS} environment variable or, if not set, to the terminal width.
3682 @item -fdiagnostics-parseable-fixits
3683 @opindex fdiagnostics-parseable-fixits
3684 Emit fix-it hints in a machine-parseable format, suitable for consumption
3685 by IDEs.  For each fix-it, a line will be printed after the relevant
3686 diagnostic, starting with the string ``fix-it:''.  For example:
3688 @smallexample
3689 fix-it:"test.c":@{45:3-45:21@}:"gtk_widget_show_all"
3690 @end smallexample
3692 The location is expressed as a half-open range, expressed as a count of
3693 bytes, starting at byte 1 for the initial column.  In the above example,
3694 bytes 3 through 20 of line 45 of ``test.c'' are to be replaced with the
3695 given string:
3697 @smallexample
3698 00000000011111111112222222222
3699 12345678901234567890123456789
3700   gtk_widget_showall (dlg);
3701   ^^^^^^^^^^^^^^^^^^
3702   gtk_widget_show_all
3703 @end smallexample
3705 The filename and replacement string escape backslash as ``\\", tab as ``\t'',
3706 newline as ``\n'', double quotes as ``\"'', non-printable characters as octal
3707 (e.g. vertical tab as ``\013'').
3709 An empty replacement string indicates that the given range is to be removed.
3710 An empty range (e.g. ``45:3-45:3'') indicates that the string is to
3711 be inserted at the given position.
3713 @item -fdiagnostics-generate-patch
3714 @opindex fdiagnostics-generate-patch
3715 Print fix-it hints to stderr in unified diff format, after any diagnostics
3716 are printed.  For example:
3718 @smallexample
3719 --- test.c
3720 +++ test.c
3721 @@ -42,5 +42,5 @@
3723  void show_cb(GtkDialog *dlg)
3724  @{
3725 -  gtk_widget_showall(dlg);
3726 +  gtk_widget_show_all(dlg);
3727  @}
3729 @end smallexample
3731 The diff may or may not be colorized, following the same rules
3732 as for diagnostics (see @option{-fdiagnostics-color}).
3734 @item -fdiagnostics-show-template-tree
3735 @opindex fdiagnostics-show-template-tree
3737 In the C++ frontend, when printing diagnostics showing mismatching
3738 template types, such as:
3740 @smallexample
3741   could not convert 'std::map<int, std::vector<double> >()'
3742     from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
3743 @end smallexample
3745 the @option{-fdiagnostics-show-template-tree} flag enables printing a
3746 tree-like structure showing the common and differing parts of the types,
3747 such as:
3749 @smallexample
3750   map<
3751     [...],
3752     vector<
3753       [double != float]>>
3754 @end smallexample
3756 The parts that differ are highlighted with color (``double'' and
3757 ``float'' in this case).
3759 @item -fno-elide-type
3760 @opindex fno-elide-type
3761 @opindex felide-type
3762 By default when the C++ frontend prints diagnostics showing mismatching
3763 template types, common parts of the types are printed as ``[...]'' to
3764 simplify the error message.  For example:
3766 @smallexample
3767   could not convert 'std::map<int, std::vector<double> >()'
3768     from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
3769 @end smallexample
3771 Specifying the @option{-fno-elide-type} flag suppresses that behavior.
3772 This flag also affects the output of the
3773 @option{-fdiagnostics-show-template-tree} flag.
3775 @item -fno-show-column
3776 @opindex fno-show-column
3777 Do not print column numbers in diagnostics.  This may be necessary if
3778 diagnostics are being scanned by a program that does not understand the
3779 column numbers, such as @command{dejagnu}.
3781 @end table
3783 @node Warning Options
3784 @section Options to Request or Suppress Warnings
3785 @cindex options to control warnings
3786 @cindex warning messages
3787 @cindex messages, warning
3788 @cindex suppressing warnings
3790 Warnings are diagnostic messages that report constructions that
3791 are not inherently erroneous but that are risky or suggest there
3792 may have been an error.
3794 The following language-independent options do not enable specific
3795 warnings but control the kinds of diagnostics produced by GCC@.
3797 @table @gcctabopt
3798 @cindex syntax checking
3799 @item -fsyntax-only
3800 @opindex fsyntax-only
3801 Check the code for syntax errors, but don't do anything beyond that.
3803 @item -fmax-errors=@var{n}
3804 @opindex fmax-errors
3805 Limits the maximum number of error messages to @var{n}, at which point
3806 GCC bails out rather than attempting to continue processing the source
3807 code.  If @var{n} is 0 (the default), there is no limit on the number
3808 of error messages produced.  If @option{-Wfatal-errors} is also
3809 specified, then @option{-Wfatal-errors} takes precedence over this
3810 option.
3812 @item -w
3813 @opindex w
3814 Inhibit all warning messages.
3816 @item -Werror
3817 @opindex Werror
3818 @opindex Wno-error
3819 Make all warnings into errors.
3821 @item -Werror=
3822 @opindex Werror=
3823 @opindex Wno-error=
3824 Make the specified warning into an error.  The specifier for a warning
3825 is appended; for example @option{-Werror=switch} turns the warnings
3826 controlled by @option{-Wswitch} into errors.  This switch takes a
3827 negative form, to be used to negate @option{-Werror} for specific
3828 warnings; for example @option{-Wno-error=switch} makes
3829 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
3830 is in effect.
3832 The warning message for each controllable warning includes the
3833 option that controls the warning.  That option can then be used with
3834 @option{-Werror=} and @option{-Wno-error=} as described above.
3835 (Printing of the option in the warning message can be disabled using the
3836 @option{-fno-diagnostics-show-option} flag.)
3838 Note that specifying @option{-Werror=}@var{foo} automatically implies
3839 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
3840 imply anything.
3842 @item -Wfatal-errors
3843 @opindex Wfatal-errors
3844 @opindex Wno-fatal-errors
3845 This option causes the compiler to abort compilation on the first error
3846 occurred rather than trying to keep going and printing further error
3847 messages.
3849 @end table
3851 You can request many specific warnings with options beginning with
3852 @samp{-W}, for example @option{-Wimplicit} to request warnings on
3853 implicit declarations.  Each of these specific warning options also
3854 has a negative form beginning @samp{-Wno-} to turn off warnings; for
3855 example, @option{-Wno-implicit}.  This manual lists only one of the
3856 two forms, whichever is not the default.  For further
3857 language-specific options also refer to @ref{C++ Dialect Options} and
3858 @ref{Objective-C and Objective-C++ Dialect Options}.
3860 Some options, such as @option{-Wall} and @option{-Wextra}, turn on other
3861 options, such as @option{-Wunused}, which may turn on further options,
3862 such as @option{-Wunused-value}. The combined effect of positive and
3863 negative forms is that more specific options have priority over less
3864 specific ones, independently of their position in the command-line. For
3865 options of the same specificity, the last one takes effect. Options
3866 enabled or disabled via pragmas (@pxref{Diagnostic Pragmas}) take effect
3867 as if they appeared at the end of the command-line.
3869 When an unrecognized warning option is requested (e.g.,
3870 @option{-Wunknown-warning}), GCC emits a diagnostic stating
3871 that the option is not recognized.  However, if the @option{-Wno-} form
3872 is used, the behavior is slightly different: no diagnostic is
3873 produced for @option{-Wno-unknown-warning} unless other diagnostics
3874 are being produced.  This allows the use of new @option{-Wno-} options
3875 with old compilers, but if something goes wrong, the compiler
3876 warns that an unrecognized option is present.
3878 @table @gcctabopt
3879 @item -Wpedantic
3880 @itemx -pedantic
3881 @opindex pedantic
3882 @opindex Wpedantic
3883 Issue all the warnings demanded by strict ISO C and ISO C++;
3884 reject all programs that use forbidden extensions, and some other
3885 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
3886 version of the ISO C standard specified by any @option{-std} option used.
3888 Valid ISO C and ISO C++ programs should compile properly with or without
3889 this option (though a rare few require @option{-ansi} or a
3890 @option{-std} option specifying the required version of ISO C)@.  However,
3891 without this option, certain GNU extensions and traditional C and C++
3892 features are supported as well.  With this option, they are rejected.
3894 @option{-Wpedantic} does not cause warning messages for use of the
3895 alternate keywords whose names begin and end with @samp{__}.  Pedantic
3896 warnings are also disabled in the expression that follows
3897 @code{__extension__}.  However, only system header files should use
3898 these escape routes; application programs should avoid them.
3899 @xref{Alternate Keywords}.
3901 Some users try to use @option{-Wpedantic} to check programs for strict ISO
3902 C conformance.  They soon find that it does not do quite what they want:
3903 it finds some non-ISO practices, but not all---only those for which
3904 ISO C @emph{requires} a diagnostic, and some others for which
3905 diagnostics have been added.
3907 A feature to report any failure to conform to ISO C might be useful in
3908 some instances, but would require considerable additional work and would
3909 be quite different from @option{-Wpedantic}.  We don't have plans to
3910 support such a feature in the near future.
3912 Where the standard specified with @option{-std} represents a GNU
3913 extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
3914 corresponding @dfn{base standard}, the version of ISO C on which the GNU
3915 extended dialect is based.  Warnings from @option{-Wpedantic} are given
3916 where they are required by the base standard.  (It does not make sense
3917 for such warnings to be given only for features not in the specified GNU
3918 C dialect, since by definition the GNU dialects of C include all
3919 features the compiler supports with the given option, and there would be
3920 nothing to warn about.)
3922 @item -pedantic-errors
3923 @opindex pedantic-errors
3924 Give an error whenever the @dfn{base standard} (see @option{-Wpedantic})
3925 requires a diagnostic, in some cases where there is undefined behavior
3926 at compile-time and in some other cases that do not prevent compilation
3927 of programs that are valid according to the standard. This is not
3928 equivalent to @option{-Werror=pedantic}, since there are errors enabled
3929 by this option and not enabled by the latter and vice versa.
3931 @item -Wall
3932 @opindex Wall
3933 @opindex Wno-all
3934 This enables all the warnings about constructions that some users
3935 consider questionable, and that are easy to avoid (or modify to
3936 prevent the warning), even in conjunction with macros.  This also
3937 enables some language-specific warnings described in @ref{C++ Dialect
3938 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
3940 @option{-Wall} turns on the following warning flags:
3942 @gccoptlist{-Waddress   @gol
3943 -Warray-bounds=1 @r{(only with} @option{-O2}@r{)}  @gol
3944 -Wbool-compare  @gol
3945 -Wbool-operation  @gol
3946 -Wc++11-compat  -Wc++14-compat  @gol
3947 -Wcatch-value @r{(C++ and Objective-C++ only)}  @gol
3948 -Wchar-subscripts  @gol
3949 -Wcomment  @gol
3950 -Wduplicate-decl-specifier @r{(C and Objective-C only)} @gol
3951 -Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol
3952 -Wformat   @gol
3953 -Wint-in-bool-context  @gol
3954 -Wimplicit @r{(C and Objective-C only)} @gol
3955 -Wimplicit-int @r{(C and Objective-C only)} @gol
3956 -Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
3957 -Winit-self @r{(only for C++)} @gol
3958 -Wlogical-not-parentheses @gol
3959 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
3960 -Wmaybe-uninitialized @gol
3961 -Wmemset-elt-size @gol
3962 -Wmemset-transposed-args @gol
3963 -Wmisleading-indentation @r{(only for C/C++)} @gol
3964 -Wmissing-attributes @gol
3965 -Wmissing-braces @r{(only for C/ObjC)} @gol
3966 -Wmultistatement-macros  @gol
3967 -Wnarrowing @r{(only for C++)}  @gol
3968 -Wnonnull  @gol
3969 -Wnonnull-compare  @gol
3970 -Wopenmp-simd @gol
3971 -Wparentheses  @gol
3972 -Wpointer-sign  @gol
3973 -Wreorder   @gol
3974 -Wrestrict   @gol
3975 -Wreturn-type  @gol
3976 -Wsequence-point  @gol
3977 -Wsign-compare @r{(only in C++)}  @gol
3978 -Wsizeof-pointer-div @gol
3979 -Wsizeof-pointer-memaccess @gol
3980 -Wstrict-aliasing  @gol
3981 -Wstrict-overflow=1  @gol
3982 -Wswitch  @gol
3983 -Wtautological-compare  @gol
3984 -Wtrigraphs  @gol
3985 -Wuninitialized  @gol
3986 -Wunknown-pragmas  @gol
3987 -Wunused-function  @gol
3988 -Wunused-label     @gol
3989 -Wunused-value     @gol
3990 -Wunused-variable  @gol
3991 -Wvolatile-register-var @gol
3994 Note that some warning flags are not implied by @option{-Wall}.  Some of
3995 them warn about constructions that users generally do not consider
3996 questionable, but which occasionally you might wish to check for;
3997 others warn about constructions that are necessary or hard to avoid in
3998 some cases, and there is no simple way to modify the code to suppress
3999 the warning. Some of them are enabled by @option{-Wextra} but many of
4000 them must be enabled individually.
4002 @item -Wextra
4003 @opindex W
4004 @opindex Wextra
4005 @opindex Wno-extra
4006 This enables some extra warning flags that are not enabled by
4007 @option{-Wall}. (This option used to be called @option{-W}.  The older
4008 name is still supported, but the newer name is more descriptive.)
4010 @gccoptlist{-Wclobbered  @gol
4011 -Wcast-function-type  @gol
4012 -Wempty-body  @gol
4013 -Wignored-qualifiers @gol
4014 -Wimplicit-fallthrough=3 @gol
4015 -Wmissing-field-initializers  @gol
4016 -Wmissing-parameter-type @r{(C only)}  @gol
4017 -Wold-style-declaration @r{(C only)}  @gol
4018 -Woverride-init  @gol
4019 -Wsign-compare @r{(C only)} @gol
4020 -Wtype-limits  @gol
4021 -Wuninitialized  @gol
4022 -Wshift-negative-value @r{(in C++03 and in C99 and newer)}  @gol
4023 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
4024 -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
4027 The option @option{-Wextra} also prints warning messages for the
4028 following cases:
4030 @itemize @bullet
4032 @item
4033 A pointer is compared against integer zero with @code{<}, @code{<=},
4034 @code{>}, or @code{>=}.
4036 @item
4037 (C++ only) An enumerator and a non-enumerator both appear in a
4038 conditional expression.
4040 @item
4041 (C++ only) Ambiguous virtual bases.
4043 @item
4044 (C++ only) Subscripting an array that has been declared @code{register}.
4046 @item
4047 (C++ only) Taking the address of a variable that has been declared
4048 @code{register}.
4050 @item
4051 (C++ only) A base class is not initialized in the copy constructor
4052 of a derived class.
4054 @end itemize
4056 @item -Wchar-subscripts
4057 @opindex Wchar-subscripts
4058 @opindex Wno-char-subscripts
4059 Warn if an array subscript has type @code{char}.  This is a common cause
4060 of error, as programmers often forget that this type is signed on some
4061 machines.
4062 This warning is enabled by @option{-Wall}.
4064 @item -Wchkp
4065 @opindex Wchkp
4066 Warn about an invalid memory access that is found by Pointer Bounds Checker
4067 (@option{-fcheck-pointer-bounds}).
4069 @item -Wno-coverage-mismatch
4070 @opindex Wno-coverage-mismatch
4071 Warn if feedback profiles do not match when using the
4072 @option{-fprofile-use} option.
4073 If a source file is changed between compiling with @option{-fprofile-gen} and
4074 with @option{-fprofile-use}, the files with the profile feedback can fail
4075 to match the source file and GCC cannot use the profile feedback
4076 information.  By default, this warning is enabled and is treated as an
4077 error.  @option{-Wno-coverage-mismatch} can be used to disable the
4078 warning or @option{-Wno-error=coverage-mismatch} can be used to
4079 disable the error.  Disabling the error for this warning can result in
4080 poorly optimized code and is useful only in the
4081 case of very minor changes such as bug fixes to an existing code-base.
4082 Completely disabling the warning is not recommended.
4084 @item -Wno-cpp
4085 @r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
4087 Suppress warning messages emitted by @code{#warning} directives.
4089 @item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
4090 @opindex Wdouble-promotion
4091 @opindex Wno-double-promotion
4092 Give a warning when a value of type @code{float} is implicitly
4093 promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
4094 floating-point unit implement @code{float} in hardware, but emulate
4095 @code{double} in software.  On such a machine, doing computations
4096 using @code{double} values is much more expensive because of the
4097 overhead required for software emulation.
4099 It is easy to accidentally do computations with @code{double} because
4100 floating-point literals are implicitly of type @code{double}.  For
4101 example, in:
4102 @smallexample
4103 @group
4104 float area(float radius)
4106    return 3.14159 * radius * radius;
4108 @end group
4109 @end smallexample
4110 the compiler performs the entire computation with @code{double}
4111 because the floating-point literal is a @code{double}.
4113 @item -Wduplicate-decl-specifier @r{(C and Objective-C only)}
4114 @opindex Wduplicate-decl-specifier
4115 @opindex Wno-duplicate-decl-specifier
4116 Warn if a declaration has duplicate @code{const}, @code{volatile},
4117 @code{restrict} or @code{_Atomic} specifier.  This warning is enabled by
4118 @option{-Wall}.
4120 @item -Wformat
4121 @itemx -Wformat=@var{n}
4122 @opindex Wformat
4123 @opindex Wno-format
4124 @opindex ffreestanding
4125 @opindex fno-builtin
4126 @opindex Wformat=
4127 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
4128 the arguments supplied have types appropriate to the format string
4129 specified, and that the conversions specified in the format string make
4130 sense.  This includes standard functions, and others specified by format
4131 attributes (@pxref{Function Attributes}), in the @code{printf},
4132 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
4133 not in the C standard) families (or other target-specific families).
4134 Which functions are checked without format attributes having been
4135 specified depends on the standard version selected, and such checks of
4136 functions without the attribute specified are disabled by
4137 @option{-ffreestanding} or @option{-fno-builtin}.
4139 The formats are checked against the format features supported by GNU
4140 libc version 2.2.  These include all ISO C90 and C99 features, as well
4141 as features from the Single Unix Specification and some BSD and GNU
4142 extensions.  Other library implementations may not support all these
4143 features; GCC does not support warning about features that go beyond a
4144 particular library's limitations.  However, if @option{-Wpedantic} is used
4145 with @option{-Wformat}, warnings are given about format features not
4146 in the selected standard version (but not for @code{strfmon} formats,
4147 since those are not in any version of the C standard).  @xref{C Dialect
4148 Options,,Options Controlling C Dialect}.
4150 @table @gcctabopt
4151 @item -Wformat=1
4152 @itemx -Wformat
4153 @opindex Wformat
4154 @opindex Wformat=1
4155 Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and
4156 @option{-Wno-format} is equivalent to @option{-Wformat=0}.  Since
4157 @option{-Wformat} also checks for null format arguments for several
4158 functions, @option{-Wformat} also implies @option{-Wnonnull}.  Some
4159 aspects of this level of format checking can be disabled by the
4160 options: @option{-Wno-format-contains-nul},
4161 @option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}.
4162 @option{-Wformat} is enabled by @option{-Wall}.
4164 @item -Wno-format-contains-nul
4165 @opindex Wno-format-contains-nul
4166 @opindex Wformat-contains-nul
4167 If @option{-Wformat} is specified, do not warn about format strings that
4168 contain NUL bytes.
4170 @item -Wno-format-extra-args
4171 @opindex Wno-format-extra-args
4172 @opindex Wformat-extra-args
4173 If @option{-Wformat} is specified, do not warn about excess arguments to a
4174 @code{printf} or @code{scanf} format function.  The C standard specifies
4175 that such arguments are ignored.
4177 Where the unused arguments lie between used arguments that are
4178 specified with @samp{$} operand number specifications, normally
4179 warnings are still given, since the implementation could not know what
4180 type to pass to @code{va_arg} to skip the unused arguments.  However,
4181 in the case of @code{scanf} formats, this option suppresses the
4182 warning if the unused arguments are all pointers, since the Single
4183 Unix Specification says that such unused arguments are allowed.
4185 @item -Wformat-overflow
4186 @itemx -Wformat-overflow=@var{level}
4187 @opindex Wformat-overflow
4188 @opindex Wno-format-overflow
4189 Warn about calls to formatted input/output functions such as @code{sprintf}
4190 and @code{vsprintf} that might overflow the destination buffer.  When the
4191 exact number of bytes written by a format directive cannot be determined
4192 at compile-time it is estimated based on heuristics that depend on the
4193 @var{level} argument and on optimization.  While enabling optimization
4194 will in most cases improve the accuracy of the warning, it may also
4195 result in false positives.
4197 @table @gcctabopt
4198 @item -Wformat-overflow
4199 @itemx -Wformat-overflow=1
4200 @opindex Wformat-overflow
4201 @opindex Wno-format-overflow
4202 Level @var{1} of @option{-Wformat-overflow} enabled by @option{-Wformat}
4203 employs a conservative approach that warns only about calls that most
4204 likely overflow the buffer.  At this level, numeric arguments to format
4205 directives with unknown values are assumed to have the value of one, and
4206 strings of unknown length to be empty.  Numeric arguments that are known
4207 to be bounded to a subrange of their type, or string arguments whose output
4208 is bounded either by their directive's precision or by a finite set of
4209 string literals, are assumed to take on the value within the range that
4210 results in the most bytes on output.  For example, the call to @code{sprintf}
4211 below is diagnosed because even with both @var{a} and @var{b} equal to zero,
4212 the terminating NUL character (@code{'\0'}) appended by the function
4213 to the destination buffer will be written past its end.  Increasing
4214 the size of the buffer by a single byte is sufficient to avoid the
4215 warning, though it may not be sufficient to avoid the overflow.
4217 @smallexample
4218 void f (int a, int b)
4220   char buf [13];
4221   sprintf (buf, "a = %i, b = %i\n", a, b);
4223 @end smallexample
4225 @item -Wformat-overflow=2
4226 Level @var{2} warns also about calls that might overflow the destination
4227 buffer given an argument of sufficient length or magnitude.  At level
4228 @var{2}, unknown numeric arguments are assumed to have the minimum
4229 representable value for signed types with a precision greater than 1, and
4230 the maximum representable value otherwise.  Unknown string arguments whose
4231 length cannot be assumed to be bounded either by the directive's precision,
4232 or by a finite set of string literals they may evaluate to, or the character
4233 array they may point to, are assumed to be 1 character long.
4235 At level @var{2}, the call in the example above is again diagnosed, but
4236 this time because with @var{a} equal to a 32-bit @code{INT_MIN} the first
4237 @code{%i} directive will write some of its digits beyond the end of
4238 the destination buffer.  To make the call safe regardless of the values
4239 of the two variables, the size of the destination buffer must be increased
4240 to at least 34 bytes.  GCC includes the minimum size of the buffer in
4241 an informational note following the warning.
4243 An alternative to increasing the size of the destination buffer is to
4244 constrain the range of formatted values.  The maximum length of string
4245 arguments can be bounded by specifying the precision in the format
4246 directive.  When numeric arguments of format directives can be assumed
4247 to be bounded by less than the precision of their type, choosing
4248 an appropriate length modifier to the format specifier will reduce
4249 the required buffer size.  For example, if @var{a} and @var{b} in the
4250 example above can be assumed to be within the precision of
4251 the @code{short int} type then using either the @code{%hi} format
4252 directive or casting the argument to @code{short} reduces the maximum
4253 required size of the buffer to 24 bytes.
4255 @smallexample
4256 void f (int a, int b)
4258   char buf [23];
4259   sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
4261 @end smallexample
4262 @end table
4264 @item -Wno-format-zero-length
4265 @opindex Wno-format-zero-length
4266 @opindex Wformat-zero-length
4267 If @option{-Wformat} is specified, do not warn about zero-length formats.
4268 The C standard specifies that zero-length formats are allowed.
4271 @item -Wformat=2
4272 @opindex Wformat=2
4273 Enable @option{-Wformat} plus additional format checks.  Currently
4274 equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security
4275 -Wformat-y2k}.
4277 @item -Wformat-nonliteral
4278 @opindex Wformat-nonliteral
4279 @opindex Wno-format-nonliteral
4280 If @option{-Wformat} is specified, also warn if the format string is not a
4281 string literal and so cannot be checked, unless the format function
4282 takes its format arguments as a @code{va_list}.
4284 @item -Wformat-security
4285 @opindex Wformat-security
4286 @opindex Wno-format-security
4287 If @option{-Wformat} is specified, also warn about uses of format
4288 functions that represent possible security problems.  At present, this
4289 warns about calls to @code{printf} and @code{scanf} functions where the
4290 format string is not a string literal and there are no format arguments,
4291 as in @code{printf (foo);}.  This may be a security hole if the format
4292 string came from untrusted input and contains @samp{%n}.  (This is
4293 currently a subset of what @option{-Wformat-nonliteral} warns about, but
4294 in future warnings may be added to @option{-Wformat-security} that are not
4295 included in @option{-Wformat-nonliteral}.)
4297 @item -Wformat-signedness
4298 @opindex Wformat-signedness
4299 @opindex Wno-format-signedness
4300 If @option{-Wformat} is specified, also warn if the format string
4301 requires an unsigned argument and the argument is signed and vice versa.
4303 @item -Wformat-truncation
4304 @itemx -Wformat-truncation=@var{level}
4305 @opindex Wformat-truncation
4306 @opindex Wno-format-truncation
4307 Warn about calls to formatted input/output functions such as @code{snprintf}
4308 and @code{vsnprintf} that might result in output truncation.  When the exact
4309 number of bytes written by a format directive cannot be determined at
4310 compile-time it is estimated based on heuristics that depend on
4311 the @var{level} argument and on optimization.  While enabling optimization
4312 will in most cases improve the accuracy of the warning, it may also result
4313 in false positives.  Except as noted otherwise, the option uses the same
4314 logic @option{-Wformat-overflow}.
4316 @table @gcctabopt
4317 @item -Wformat-truncation
4318 @itemx -Wformat-truncation=1
4319 @opindex Wformat-truncation
4320 @opindex Wno-format-overflow
4321 Level @var{1} of @option{-Wformat-truncation} enabled by @option{-Wformat}
4322 employs a conservative approach that warns only about calls to bounded
4323 functions whose return value is unused and that will most likely result
4324 in output truncation.
4326 @item -Wformat-truncation=2
4327 Level @var{2} warns also about calls to bounded functions whose return
4328 value is used and that might result in truncation given an argument of
4329 sufficient length or magnitude.
4330 @end table
4332 @item -Wformat-y2k
4333 @opindex Wformat-y2k
4334 @opindex Wno-format-y2k
4335 If @option{-Wformat} is specified, also warn about @code{strftime}
4336 formats that may yield only a two-digit year.
4337 @end table
4339 @item -Wnonnull
4340 @opindex Wnonnull
4341 @opindex Wno-nonnull
4342 Warn about passing a null pointer for arguments marked as
4343 requiring a non-null value by the @code{nonnull} function attribute.
4345 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
4346 can be disabled with the @option{-Wno-nonnull} option.
4348 @item -Wnonnull-compare
4349 @opindex Wnonnull-compare
4350 @opindex Wno-nonnull-compare
4351 Warn when comparing an argument marked with the @code{nonnull}
4352 function attribute against null inside the function.
4354 @option{-Wnonnull-compare} is included in @option{-Wall}.  It
4355 can be disabled with the @option{-Wno-nonnull-compare} option.
4357 @item -Wnull-dereference
4358 @opindex Wnull-dereference
4359 @opindex Wno-null-dereference
4360 Warn if the compiler detects paths that trigger erroneous or
4361 undefined behavior due to dereferencing a null pointer.  This option
4362 is only active when @option{-fdelete-null-pointer-checks} is active,
4363 which is enabled by optimizations in most targets.  The precision of
4364 the warnings depends on the optimization options used.
4366 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
4367 @opindex Winit-self
4368 @opindex Wno-init-self
4369 Warn about uninitialized variables that are initialized with themselves.
4370 Note this option can only be used with the @option{-Wuninitialized} option.
4372 For example, GCC warns about @code{i} being uninitialized in the
4373 following snippet only when @option{-Winit-self} has been specified:
4374 @smallexample
4375 @group
4376 int f()
4378   int i = i;
4379   return i;
4381 @end group
4382 @end smallexample
4384 This warning is enabled by @option{-Wall} in C++.
4386 @item -Wimplicit-int @r{(C and Objective-C only)}
4387 @opindex Wimplicit-int
4388 @opindex Wno-implicit-int
4389 Warn when a declaration does not specify a type.
4390 This warning is enabled by @option{-Wall}.
4392 @item -Wimplicit-function-declaration @r{(C and Objective-C only)}
4393 @opindex Wimplicit-function-declaration
4394 @opindex Wno-implicit-function-declaration
4395 Give a warning whenever a function is used before being declared. In
4396 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
4397 enabled by default and it is made into an error by
4398 @option{-pedantic-errors}. This warning is also enabled by
4399 @option{-Wall}.
4401 @item -Wimplicit @r{(C and Objective-C only)}
4402 @opindex Wimplicit
4403 @opindex Wno-implicit
4404 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
4405 This warning is enabled by @option{-Wall}.
4407 @item -Wimplicit-fallthrough
4408 @opindex Wimplicit-fallthrough
4409 @opindex Wno-implicit-fallthrough
4410 @option{-Wimplicit-fallthrough} is the same as @option{-Wimplicit-fallthrough=3}
4411 and @option{-Wno-implicit-fallthrough} is the same as
4412 @option{-Wimplicit-fallthrough=0}.
4414 @item -Wimplicit-fallthrough=@var{n}
4415 @opindex Wimplicit-fallthrough=
4416 Warn when a switch case falls through.  For example:
4418 @smallexample
4419 @group
4420 switch (cond)
4421   @{
4422   case 1:
4423     a = 1;
4424     break;
4425   case 2:
4426     a = 2;
4427   case 3:
4428     a = 3;
4429     break;
4430   @}
4431 @end group
4432 @end smallexample
4434 This warning does not warn when the last statement of a case cannot
4435 fall through, e.g. when there is a return statement or a call to function
4436 declared with the noreturn attribute.  @option{-Wimplicit-fallthrough=}
4437 also takes into account control flow statements, such as ifs, and only
4438 warns when appropriate.  E.g.@:
4440 @smallexample
4441 @group
4442 switch (cond)
4443   @{
4444   case 1:
4445     if (i > 3) @{
4446       bar (5);
4447       break;
4448     @} else if (i < 1) @{
4449       bar (0);
4450     @} else
4451       return;
4452   default:
4453     @dots{}
4454   @}
4455 @end group
4456 @end smallexample
4458 Since there are occasions where a switch case fall through is desirable,
4459 GCC provides an attribute, @code{__attribute__ ((fallthrough))}, that is
4460 to be used along with a null statement to suppress this warning that
4461 would normally occur:
4463 @smallexample
4464 @group
4465 switch (cond)
4466   @{
4467   case 1:
4468     bar (0);
4469     __attribute__ ((fallthrough));
4470   default:
4471     @dots{}
4472   @}
4473 @end group
4474 @end smallexample
4476 C++17 provides a standard way to suppress the @option{-Wimplicit-fallthrough}
4477 warning using @code{[[fallthrough]];} instead of the GNU attribute.  In C++11
4478 or C++14 users can use @code{[[gnu::fallthrough]];}, which is a GNU extension.
4479 Instead of these attributes, it is also possible to add a fallthrough comment
4480 to silence the warning.  The whole body of the C or C++ style comment should
4481 match the given regular expressions listed below.  The option argument @var{n}
4482 specifies what kind of comments are accepted:
4484 @itemize @bullet
4486 @item @option{-Wimplicit-fallthrough=0} disables the warning altogether.
4488 @item @option{-Wimplicit-fallthrough=1} matches @code{.*} regular
4489 expression, any comment is used as fallthrough comment.
4491 @item @option{-Wimplicit-fallthrough=2} case insensitively matches
4492 @code{.*falls?[ \t-]*thr(ough|u).*} regular expression.
4494 @item @option{-Wimplicit-fallthrough=3} case sensitively matches one of the
4495 following regular expressions:
4497 @itemize @bullet
4499 @item @code{-fallthrough}
4501 @item @code{@@fallthrough@@}
4503 @item @code{lint -fallthrough[ \t]*}
4505 @item @code{[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?@*FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?}
4507 @item @code{[ \t.!]*(Else,? |Intentional(ly)? )?@*Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?}
4509 @item @code{[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?@*fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?}
4511 @end itemize
4513 @item @option{-Wimplicit-fallthrough=4} case sensitively matches one of the
4514 following regular expressions:
4516 @itemize @bullet
4518 @item @code{-fallthrough}
4520 @item @code{@@fallthrough@@}
4522 @item @code{lint -fallthrough[ \t]*}
4524 @item @code{[ \t]*FALLTHR(OUGH|U)[ \t]*}
4526 @end itemize
4528 @item @option{-Wimplicit-fallthrough=5} doesn't recognize any comments as
4529 fallthrough comments, only attributes disable the warning.
4531 @end itemize
4533 The comment needs to be followed after optional whitespace and other comments
4534 by @code{case} or @code{default} keywords or by a user label that precedes some
4535 @code{case} or @code{default} label.
4537 @smallexample
4538 @group
4539 switch (cond)
4540   @{
4541   case 1:
4542     bar (0);
4543     /* FALLTHRU */
4544   default:
4545     @dots{}
4546   @}
4547 @end group
4548 @end smallexample
4550 The @option{-Wimplicit-fallthrough=3} warning is enabled by @option{-Wextra}.
4552 @item -Wif-not-aligned @r{(C, C++, Objective-C and Objective-C++ only)}
4553 @opindex Wif-not-aligned
4554 @opindex Wno-if-not-aligned
4555 Control if warning triggered by the @code{warn_if_not_aligned} attribute
4556 should be issued.  This is is enabled by default.
4557 Use @option{-Wno-if-not-aligned} to disable it.
4559 @item -Wignored-qualifiers @r{(C and C++ only)}
4560 @opindex Wignored-qualifiers
4561 @opindex Wno-ignored-qualifiers
4562 Warn if the return type of a function has a type qualifier
4563 such as @code{const}.  For ISO C such a type qualifier has no effect,
4564 since the value returned by a function is not an lvalue.
4565 For C++, the warning is only emitted for scalar types or @code{void}.
4566 ISO C prohibits qualified @code{void} return types on function
4567 definitions, so such return types always receive a warning
4568 even without this option.
4570 This warning is also enabled by @option{-Wextra}.
4572 @item -Wignored-attributes @r{(C and C++ only)}
4573 @opindex Wignored-attributes
4574 @opindex Wno-ignored-attributes
4575 Warn when an attribute is ignored.  This is different from the
4576 @option{-Wattributes} option in that it warns whenever the compiler decides
4577 to drop an attribute, not that the attribute is either unknown, used in a
4578 wrong place, etc.  This warning is enabled by default.
4580 @item -Wmain
4581 @opindex Wmain
4582 @opindex Wno-main
4583 Warn if the type of @code{main} is suspicious.  @code{main} should be
4584 a function with external linkage, returning int, taking either zero
4585 arguments, two, or three arguments of appropriate types.  This warning
4586 is enabled by default in C++ and is enabled by either @option{-Wall}
4587 or @option{-Wpedantic}.
4589 @item -Wmisleading-indentation @r{(C and C++ only)}
4590 @opindex Wmisleading-indentation
4591 @opindex Wno-misleading-indentation
4592 Warn when the indentation of the code does not reflect the block structure.
4593 Specifically, a warning is issued for @code{if}, @code{else}, @code{while}, and
4594 @code{for} clauses with a guarded statement that does not use braces,
4595 followed by an unguarded statement with the same indentation.
4597 In the following example, the call to ``bar'' is misleadingly indented as
4598 if it were guarded by the ``if'' conditional.
4600 @smallexample
4601   if (some_condition ())
4602     foo ();
4603     bar ();  /* Gotcha: this is not guarded by the "if".  */
4604 @end smallexample
4606 In the case of mixed tabs and spaces, the warning uses the
4607 @option{-ftabstop=} option to determine if the statements line up
4608 (defaulting to 8).
4610 The warning is not issued for code involving multiline preprocessor logic
4611 such as the following example.
4613 @smallexample
4614   if (flagA)
4615     foo (0);
4616 #if SOME_CONDITION_THAT_DOES_NOT_HOLD
4617   if (flagB)
4618 #endif
4619     foo (1);
4620 @end smallexample
4622 The warning is not issued after a @code{#line} directive, since this
4623 typically indicates autogenerated code, and no assumptions can be made
4624 about the layout of the file that the directive references.
4626 This warning is enabled by @option{-Wall} in C and C++.
4628 @item -Wmissing-attributes
4629 @opindex Wmissing-attributes
4630 @opindex Wno-missing-attributes
4631 Warn when a declaration of a function is missing one or more attributes
4632 that a related function is declared with and whose absence may adversely
4633 affect the correctness or efficiency of generated code.  For example, in
4634 C++, the warning is issued when an explicit specialization of a primary
4635 template declared with attribute @code{alloc_align}, @code{alloc_size},
4636 @code{assume_aligned}, @code{format}, @code{format_arg}, @code{malloc},
4637 or @code{nonnull} is declared without it.  Attributes @code{deprecated},
4638 @code{error}, and @code{warning} suppress the warning.
4639 (@pxref{Function Attributes}).
4641 @option{-Wmissing-attributes} is enabled by @option{-Wall}.
4643 For example, since the declaration of the primary function template
4644 below makes use of both attribute @code{malloc} and @code{alloc_size}
4645 the declaration of the explicit specialization of the template is
4646 diagnosed because it is missing one of the attributes.
4648 @smallexample
4649 template <class T>
4650 T* __attribute__ ((malloc, alloc_size (1)))
4651 allocate (size_t);
4653 template <>
4654 void* __attribute__ ((malloc))   // missing alloc_size
4655 allocate<void> (size_t);
4656 @end smallexample
4658 @item -Wmissing-braces
4659 @opindex Wmissing-braces
4660 @opindex Wno-missing-braces
4661 Warn if an aggregate or union initializer is not fully bracketed.  In
4662 the following example, the initializer for @code{a} is not fully
4663 bracketed, but that for @code{b} is fully bracketed.  This warning is
4664 enabled by @option{-Wall} in C.
4666 @smallexample
4667 int a[2][2] = @{ 0, 1, 2, 3 @};
4668 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
4669 @end smallexample
4671 This warning is enabled by @option{-Wall}.
4673 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
4674 @opindex Wmissing-include-dirs
4675 @opindex Wno-missing-include-dirs
4676 Warn if a user-supplied include directory does not exist.
4678 @item -Wmultistatement-macros
4679 @opindex Wmultistatement-macros
4680 @opindex Wno-multistatement-macros
4681 Warn about unsafe multiple statement macros that appear to be guarded
4682 by a clause such as @code{if}, @code{else}, @code{for}, @code{switch}, or
4683 @code{while}, in which only the first statement is actually guarded after
4684 the macro is expanded.
4686 For example:
4688 @smallexample
4689 #define DOIT x++; y++
4690 if (c)
4691   DOIT;
4692 @end smallexample
4694 will increment @code{y} unconditionally, not just when @code{c} holds.
4695 The can usually be fixed by wrapping the macro in a do-while loop:
4696 @smallexample
4697 #define DOIT do @{ x++; y++; @} while (0)
4698 if (c)
4699   DOIT;
4700 @end smallexample
4702 This warning is enabled by @option{-Wall} in C and C++.
4704 @item -Wparentheses
4705 @opindex Wparentheses
4706 @opindex Wno-parentheses
4707 Warn if parentheses are omitted in certain contexts, such
4708 as when there is an assignment in a context where a truth value
4709 is expected, or when operators are nested whose precedence people
4710 often get confused about.
4712 Also warn if a comparison like @code{x<=y<=z} appears; this is
4713 equivalent to @code{(x<=y ? 1 : 0) <= z}, which is a different
4714 interpretation from that of ordinary mathematical notation.
4716 Also warn for dangerous uses of the GNU extension to
4717 @code{?:} with omitted middle operand. When the condition
4718 in the @code{?}: operator is a boolean expression, the omitted value is
4719 always 1.  Often programmers expect it to be a value computed
4720 inside the conditional expression instead.
4722 For C++ this also warns for some cases of unnecessary parentheses in
4723 declarations, which can indicate an attempt at a function call instead
4724 of a declaration:
4725 @smallexample
4727   // Declares a local variable called mymutex.
4728   std::unique_lock<std::mutex> (mymutex);
4729   // User meant std::unique_lock<std::mutex> lock (mymutex);
4731 @end smallexample
4733 This warning is enabled by @option{-Wall}.
4735 @item -Wsequence-point
4736 @opindex Wsequence-point
4737 @opindex Wno-sequence-point
4738 Warn about code that may have undefined semantics because of violations
4739 of sequence point rules in the C and C++ standards.
4741 The C and C++ standards define the order in which expressions in a C/C++
4742 program are evaluated in terms of @dfn{sequence points}, which represent
4743 a partial ordering between the execution of parts of the program: those
4744 executed before the sequence point, and those executed after it.  These
4745 occur after the evaluation of a full expression (one which is not part
4746 of a larger expression), after the evaluation of the first operand of a
4747 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
4748 function is called (but after the evaluation of its arguments and the
4749 expression denoting the called function), and in certain other places.
4750 Other than as expressed by the sequence point rules, the order of
4751 evaluation of subexpressions of an expression is not specified.  All
4752 these rules describe only a partial order rather than a total order,
4753 since, for example, if two functions are called within one expression
4754 with no sequence point between them, the order in which the functions
4755 are called is not specified.  However, the standards committee have
4756 ruled that function calls do not overlap.
4758 It is not specified when between sequence points modifications to the
4759 values of objects take effect.  Programs whose behavior depends on this
4760 have undefined behavior; the C and C++ standards specify that ``Between
4761 the previous and next sequence point an object shall have its stored
4762 value modified at most once by the evaluation of an expression.
4763 Furthermore, the prior value shall be read only to determine the value
4764 to be stored.''.  If a program breaks these rules, the results on any
4765 particular implementation are entirely unpredictable.
4767 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
4768 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
4769 diagnosed by this option, and it may give an occasional false positive
4770 result, but in general it has been found fairly effective at detecting
4771 this sort of problem in programs.
4773 The C++17 standard will define the order of evaluation of operands in
4774 more cases: in particular it requires that the right-hand side of an
4775 assignment be evaluated before the left-hand side, so the above
4776 examples are no longer undefined.  But this warning will still warn
4777 about them, to help people avoid writing code that is undefined in C
4778 and earlier revisions of C++.
4780 The standard is worded confusingly, therefore there is some debate
4781 over the precise meaning of the sequence point rules in subtle cases.
4782 Links to discussions of the problem, including proposed formal
4783 definitions, may be found on the GCC readings page, at
4784 @uref{http://gcc.gnu.org/@/readings.html}.
4786 This warning is enabled by @option{-Wall} for C and C++.
4788 @item -Wno-return-local-addr
4789 @opindex Wno-return-local-addr
4790 @opindex Wreturn-local-addr
4791 Do not warn about returning a pointer (or in C++, a reference) to a
4792 variable that goes out of scope after the function returns.
4794 @item -Wreturn-type
4795 @opindex Wreturn-type
4796 @opindex Wno-return-type
4797 Warn whenever a function is defined with a return type that defaults
4798 to @code{int}.  Also warn about any @code{return} statement with no
4799 return value in a function whose return type is not @code{void}
4800 (falling off the end of the function body is considered returning
4801 without a value).
4803 For C only, warn about a @code{return} statement with an expression in a
4804 function whose return type is @code{void}, unless the expression type is
4805 also @code{void}.  As a GNU extension, the latter case is accepted
4806 without a warning unless @option{-Wpedantic} is used.
4808 For C++, a function without return type always produces a diagnostic
4809 message, even when @option{-Wno-return-type} is specified.  The only
4810 exceptions are @code{main} and functions defined in system headers.
4812 This warning is enabled by default for C++ and is enabled by @option{-Wall}.
4814 @item -Wshift-count-negative
4815 @opindex Wshift-count-negative
4816 @opindex Wno-shift-count-negative
4817 Warn if shift count is negative. This warning is enabled by default.
4819 @item -Wshift-count-overflow
4820 @opindex Wshift-count-overflow
4821 @opindex Wno-shift-count-overflow
4822 Warn if shift count >= width of type. This warning is enabled by default.
4824 @item -Wshift-negative-value
4825 @opindex Wshift-negative-value
4826 @opindex Wno-shift-negative-value
4827 Warn if left shifting a negative value.  This warning is enabled by
4828 @option{-Wextra} in C99 and C++11 modes (and newer).
4830 @item -Wshift-overflow
4831 @itemx -Wshift-overflow=@var{n}
4832 @opindex Wshift-overflow
4833 @opindex Wno-shift-overflow
4834 Warn about left shift overflows.  This warning is enabled by
4835 default in C99 and C++11 modes (and newer).
4837 @table @gcctabopt
4838 @item -Wshift-overflow=1
4839 This is the warning level of @option{-Wshift-overflow} and is enabled
4840 by default in C99 and C++11 modes (and newer).  This warning level does
4841 not warn about left-shifting 1 into the sign bit.  (However, in C, such
4842 an overflow is still rejected in contexts where an integer constant expression
4843 is required.)
4845 @item -Wshift-overflow=2
4846 This warning level also warns about left-shifting 1 into the sign bit,
4847 unless C++14 mode is active.
4848 @end table
4850 @item -Wswitch
4851 @opindex Wswitch
4852 @opindex Wno-switch
4853 Warn whenever a @code{switch} statement has an index of enumerated type
4854 and lacks a @code{case} for one or more of the named codes of that
4855 enumeration.  (The presence of a @code{default} label prevents this
4856 warning.)  @code{case} labels outside the enumeration range also
4857 provoke warnings when this option is used (even if there is a
4858 @code{default} label).
4859 This warning is enabled by @option{-Wall}.
4861 @item -Wswitch-default
4862 @opindex Wswitch-default
4863 @opindex Wno-switch-default
4864 Warn whenever a @code{switch} statement does not have a @code{default}
4865 case.
4867 @item -Wswitch-enum
4868 @opindex Wswitch-enum
4869 @opindex Wno-switch-enum
4870 Warn whenever a @code{switch} statement has an index of enumerated type
4871 and lacks a @code{case} for one or more of the named codes of that
4872 enumeration.  @code{case} labels outside the enumeration range also
4873 provoke warnings when this option is used.  The only difference
4874 between @option{-Wswitch} and this option is that this option gives a
4875 warning about an omitted enumeration code even if there is a
4876 @code{default} label.
4878 @item -Wswitch-bool
4879 @opindex Wswitch-bool
4880 @opindex Wno-switch-bool
4881 Warn whenever a @code{switch} statement has an index of boolean type
4882 and the case values are outside the range of a boolean type.
4883 It is possible to suppress this warning by casting the controlling
4884 expression to a type other than @code{bool}.  For example:
4885 @smallexample
4886 @group
4887 switch ((int) (a == 4))
4888   @{
4889   @dots{}
4890   @}
4891 @end group
4892 @end smallexample
4893 This warning is enabled by default for C and C++ programs.
4895 @item -Wswitch-unreachable
4896 @opindex Wswitch-unreachable
4897 @opindex Wno-switch-unreachable
4898 Warn whenever a @code{switch} statement contains statements between the
4899 controlling expression and the first case label, which will never be
4900 executed.  For example:
4901 @smallexample
4902 @group
4903 switch (cond)
4904   @{
4905    i = 15;
4906   @dots{}
4907    case 5:
4908   @dots{}
4909   @}
4910 @end group
4911 @end smallexample
4912 @option{-Wswitch-unreachable} does not warn if the statement between the
4913 controlling expression and the first case label is just a declaration:
4914 @smallexample
4915 @group
4916 switch (cond)
4917   @{
4918    int i;
4919   @dots{}
4920    case 5:
4921    i = 5;
4922   @dots{}
4923   @}
4924 @end group
4925 @end smallexample
4926 This warning is enabled by default for C and C++ programs.
4928 @item -Wsync-nand @r{(C and C++ only)}
4929 @opindex Wsync-nand
4930 @opindex Wno-sync-nand
4931 Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
4932 built-in functions are used.  These functions changed semantics in GCC 4.4.
4934 @item -Wunused-but-set-parameter
4935 @opindex Wunused-but-set-parameter
4936 @opindex Wno-unused-but-set-parameter
4937 Warn whenever a function parameter is assigned to, but otherwise unused
4938 (aside from its declaration).
4940 To suppress this warning use the @code{unused} attribute
4941 (@pxref{Variable Attributes}).
4943 This warning is also enabled by @option{-Wunused} together with
4944 @option{-Wextra}.
4946 @item -Wunused-but-set-variable
4947 @opindex Wunused-but-set-variable
4948 @opindex Wno-unused-but-set-variable
4949 Warn whenever a local variable is assigned to, but otherwise unused
4950 (aside from its declaration).
4951 This warning is enabled by @option{-Wall}.
4953 To suppress this warning use the @code{unused} attribute
4954 (@pxref{Variable Attributes}).
4956 This warning is also enabled by @option{-Wunused}, which is enabled
4957 by @option{-Wall}.
4959 @item -Wunused-function
4960 @opindex Wunused-function
4961 @opindex Wno-unused-function
4962 Warn whenever a static function is declared but not defined or a
4963 non-inline static function is unused.
4964 This warning is enabled by @option{-Wall}.
4966 @item -Wunused-label
4967 @opindex Wunused-label
4968 @opindex Wno-unused-label
4969 Warn whenever a label is declared but not used.
4970 This warning is enabled by @option{-Wall}.
4972 To suppress this warning use the @code{unused} attribute
4973 (@pxref{Variable Attributes}).
4975 @item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
4976 @opindex Wunused-local-typedefs
4977 Warn when a typedef locally defined in a function is not used.
4978 This warning is enabled by @option{-Wall}.
4980 @item -Wunused-parameter
4981 @opindex Wunused-parameter
4982 @opindex Wno-unused-parameter
4983 Warn whenever a function parameter is unused aside from its declaration.
4985 To suppress this warning use the @code{unused} attribute
4986 (@pxref{Variable Attributes}).
4988 @item -Wno-unused-result
4989 @opindex Wunused-result
4990 @opindex Wno-unused-result
4991 Do not warn if a caller of a function marked with attribute
4992 @code{warn_unused_result} (@pxref{Function Attributes}) does not use
4993 its return value. The default is @option{-Wunused-result}.
4995 @item -Wunused-variable
4996 @opindex Wunused-variable
4997 @opindex Wno-unused-variable
4998 Warn whenever a local or static variable is unused aside from its
4999 declaration. This option implies @option{-Wunused-const-variable=1} for C,
5000 but not for C++. This warning is enabled by @option{-Wall}.
5002 To suppress this warning use the @code{unused} attribute
5003 (@pxref{Variable Attributes}).
5005 @item -Wunused-const-variable
5006 @itemx -Wunused-const-variable=@var{n}
5007 @opindex Wunused-const-variable
5008 @opindex Wno-unused-const-variable
5009 Warn whenever a constant static variable is unused aside from its declaration.
5010 @option{-Wunused-const-variable=1} is enabled by @option{-Wunused-variable}
5011 for C, but not for C++. In C this declares variable storage, but in C++ this
5012 is not an error since const variables take the place of @code{#define}s.
5014 To suppress this warning use the @code{unused} attribute
5015 (@pxref{Variable Attributes}).
5017 @table @gcctabopt
5018 @item -Wunused-const-variable=1
5019 This is the warning level that is enabled by @option{-Wunused-variable} for
5020 C.  It warns only about unused static const variables defined in the main
5021 compilation unit, but not about static const variables declared in any
5022 header included.
5024 @item -Wunused-const-variable=2
5025 This warning level also warns for unused constant static variables in
5026 headers (excluding system headers).  This is the warning level of
5027 @option{-Wunused-const-variable} and must be explicitly requested since
5028 in C++ this isn't an error and in C it might be harder to clean up all
5029 headers included.
5030 @end table
5032 @item -Wunused-value
5033 @opindex Wunused-value
5034 @opindex Wno-unused-value
5035 Warn whenever a statement computes a result that is explicitly not
5036 used. To suppress this warning cast the unused expression to
5037 @code{void}. This includes an expression-statement or the left-hand
5038 side of a comma expression that contains no side effects. For example,
5039 an expression such as @code{x[i,j]} causes a warning, while
5040 @code{x[(void)i,j]} does not.
5042 This warning is enabled by @option{-Wall}.
5044 @item -Wunused
5045 @opindex Wunused
5046 @opindex Wno-unused
5047 All the above @option{-Wunused} options combined.
5049 In order to get a warning about an unused function parameter, you must
5050 either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
5051 @option{-Wunused}), or separately specify @option{-Wunused-parameter}.
5053 @item -Wuninitialized
5054 @opindex Wuninitialized
5055 @opindex Wno-uninitialized
5056 Warn if an automatic variable is used without first being initialized
5057 or if a variable may be clobbered by a @code{setjmp} call. In C++,
5058 warn if a non-static reference or non-static @code{const} member
5059 appears in a class without constructors.
5061 If you want to warn about code that uses the uninitialized value of the
5062 variable in its own initializer, use the @option{-Winit-self} option.
5064 These warnings occur for individual uninitialized or clobbered
5065 elements of structure, union or array variables as well as for
5066 variables that are uninitialized or clobbered as a whole.  They do
5067 not occur for variables or elements declared @code{volatile}.  Because
5068 these warnings depend on optimization, the exact variables or elements
5069 for which there are warnings depends on the precise optimization
5070 options and version of GCC used.
5072 Note that there may be no warning about a variable that is used only
5073 to compute a value that itself is never used, because such
5074 computations may be deleted by data flow analysis before the warnings
5075 are printed.
5077 @item -Winvalid-memory-model
5078 @opindex Winvalid-memory-model
5079 @opindex Wno-invalid-memory-model
5080 Warn for invocations of @ref{__atomic Builtins}, @ref{__sync Builtins},
5081 and the C11 atomic generic functions with a memory consistency argument
5082 that is either invalid for the operation or outside the range of values
5083 of the @code{memory_order} enumeration.  For example, since the
5084 @code{__atomic_store} and @code{__atomic_store_n} built-ins are only
5085 defined for the relaxed, release, and sequentially consistent memory
5086 orders the following code is diagnosed:
5088 @smallexample
5089 void store (int *i)
5091   __atomic_store_n (i, 0, memory_order_consume);
5093 @end smallexample
5095 @option{-Winvalid-memory-model} is enabled by default.
5097 @item -Wmaybe-uninitialized
5098 @opindex Wmaybe-uninitialized
5099 @opindex Wno-maybe-uninitialized
5100 For an automatic (i.e.@ local) variable, if there exists a path from the
5101 function entry to a use of the variable that is initialized, but there exist
5102 some other paths for which the variable is not initialized, the compiler
5103 emits a warning if it cannot prove the uninitialized paths are not
5104 executed at run time.
5106 These warnings are only possible in optimizing compilation, because otherwise
5107 GCC does not keep track of the state of variables.
5109 These warnings are made optional because GCC may not be able to determine when
5110 the code is correct in spite of appearing to have an error.  Here is one
5111 example of how this can happen:
5113 @smallexample
5114 @group
5116   int x;
5117   switch (y)
5118     @{
5119     case 1: x = 1;
5120       break;
5121     case 2: x = 4;
5122       break;
5123     case 3: x = 5;
5124     @}
5125   foo (x);
5127 @end group
5128 @end smallexample
5130 @noindent
5131 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
5132 always initialized, but GCC doesn't know this. To suppress the
5133 warning, you need to provide a default case with assert(0) or
5134 similar code.
5136 @cindex @code{longjmp} warnings
5137 This option also warns when a non-volatile automatic variable might be
5138 changed by a call to @code{longjmp}.
5139 The compiler sees only the calls to @code{setjmp}.  It cannot know
5140 where @code{longjmp} will be called; in fact, a signal handler could
5141 call it at any point in the code.  As a result, you may get a warning
5142 even when there is in fact no problem because @code{longjmp} cannot
5143 in fact be called at the place that would cause a problem.
5145 Some spurious warnings can be avoided if you declare all the functions
5146 you use that never return as @code{noreturn}.  @xref{Function
5147 Attributes}.
5149 This warning is enabled by @option{-Wall} or @option{-Wextra}.
5151 @item -Wunknown-pragmas
5152 @opindex Wunknown-pragmas
5153 @opindex Wno-unknown-pragmas
5154 @cindex warning for unknown pragmas
5155 @cindex unknown pragmas, warning
5156 @cindex pragmas, warning of unknown
5157 Warn when a @code{#pragma} directive is encountered that is not understood by 
5158 GCC@.  If this command-line option is used, warnings are even issued
5159 for unknown pragmas in system header files.  This is not the case if
5160 the warnings are only enabled by the @option{-Wall} command-line option.
5162 @item -Wno-pragmas
5163 @opindex Wno-pragmas
5164 @opindex Wpragmas
5165 Do not warn about misuses of pragmas, such as incorrect parameters,
5166 invalid syntax, or conflicts between pragmas.  See also
5167 @option{-Wunknown-pragmas}.
5169 @item -Wstrict-aliasing
5170 @opindex Wstrict-aliasing
5171 @opindex Wno-strict-aliasing
5172 This option is only active when @option{-fstrict-aliasing} is active.
5173 It warns about code that might break the strict aliasing rules that the
5174 compiler is using for optimization.  The warning does not catch all
5175 cases, but does attempt to catch the more common pitfalls.  It is
5176 included in @option{-Wall}.
5177 It is equivalent to @option{-Wstrict-aliasing=3}
5179 @item -Wstrict-aliasing=n
5180 @opindex Wstrict-aliasing=n
5181 This option is only active when @option{-fstrict-aliasing} is active.
5182 It warns about code that might break the strict aliasing rules that the
5183 compiler is using for optimization.
5184 Higher levels correspond to higher accuracy (fewer false positives).
5185 Higher levels also correspond to more effort, similar to the way @option{-O} 
5186 works.
5187 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.
5189 Level 1: Most aggressive, quick, least accurate.
5190 Possibly useful when higher levels
5191 do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
5192 false negatives.  However, it has many false positives.
5193 Warns for all pointer conversions between possibly incompatible types,
5194 even if never dereferenced.  Runs in the front end only.
5196 Level 2: Aggressive, quick, not too precise.
5197 May still have many false positives (not as many as level 1 though),
5198 and few false negatives (but possibly more than level 1).
5199 Unlike level 1, it only warns when an address is taken.  Warns about
5200 incomplete types.  Runs in the front end only.
5202 Level 3 (default for @option{-Wstrict-aliasing}):
5203 Should have very few false positives and few false
5204 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
5205 Takes care of the common pun+dereference pattern in the front end:
5206 @code{*(int*)&some_float}.
5207 If optimization is enabled, it also runs in the back end, where it deals
5208 with multiple statement cases using flow-sensitive points-to information.
5209 Only warns when the converted pointer is dereferenced.
5210 Does not warn about incomplete types.
5212 @item -Wstrict-overflow
5213 @itemx -Wstrict-overflow=@var{n}
5214 @opindex Wstrict-overflow
5215 @opindex Wno-strict-overflow
5216 This option is only active when signed overflow is undefined.
5217 It warns about cases where the compiler optimizes based on the
5218 assumption that signed overflow does not occur.  Note that it does not
5219 warn about all cases where the code might overflow: it only warns
5220 about cases where the compiler implements some optimization.  Thus
5221 this warning depends on the optimization level.
5223 An optimization that assumes that signed overflow does not occur is
5224 perfectly safe if the values of the variables involved are such that
5225 overflow never does, in fact, occur.  Therefore this warning can
5226 easily give a false positive: a warning about code that is not
5227 actually a problem.  To help focus on important issues, several
5228 warning levels are defined.  No warnings are issued for the use of
5229 undefined signed overflow when estimating how many iterations a loop
5230 requires, in particular when determining whether a loop will be
5231 executed at all.
5233 @table @gcctabopt
5234 @item -Wstrict-overflow=1
5235 Warn about cases that are both questionable and easy to avoid.  For
5236 example the compiler simplifies
5237 @code{x + 1 > x} to @code{1}.  This level of
5238 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
5239 are not, and must be explicitly requested.
5241 @item -Wstrict-overflow=2
5242 Also warn about other cases where a comparison is simplified to a
5243 constant.  For example: @code{abs (x) >= 0}.  This can only be
5244 simplified when signed integer overflow is undefined, because
5245 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
5246 zero.  @option{-Wstrict-overflow} (with no level) is the same as
5247 @option{-Wstrict-overflow=2}.
5249 @item -Wstrict-overflow=3
5250 Also warn about other cases where a comparison is simplified.  For
5251 example: @code{x + 1 > 1} is simplified to @code{x > 0}.
5253 @item -Wstrict-overflow=4
5254 Also warn about other simplifications not covered by the above cases.
5255 For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.
5257 @item -Wstrict-overflow=5
5258 Also warn about cases where the compiler reduces the magnitude of a
5259 constant involved in a comparison.  For example: @code{x + 2 > y} is
5260 simplified to @code{x + 1 >= y}.  This is reported only at the
5261 highest warning level because this simplification applies to many
5262 comparisons, so this warning level gives a very large number of
5263 false positives.
5264 @end table
5266 @item -Wstringop-overflow
5267 @itemx -Wstringop-overflow=@var{type}
5268 @opindex Wstringop-overflow
5269 @opindex Wno-stringop-overflow
5270 Warn for calls to string manipulation functions such as @code{memcpy} and
5271 @code{strcpy} that are determined to overflow the destination buffer.  The
5272 optional argument is one greater than the type of Object Size Checking to
5273 perform to determine the size of the destination.  @xref{Object Size Checking}.
5274 The argument is meaningful only for functions that operate on character arrays
5275 but not for raw memory functions like @code{memcpy} which always make use
5276 of Object Size type-0.  The option also warns for calls that specify a size
5277 in excess of the largest possible object or at most @code{SIZE_MAX / 2} bytes.
5278 The option produces the best results with optimization enabled but can detect
5279 a small subset of simple buffer overflows even without optimization in
5280 calls to the GCC built-in functions like @code{__builtin_memcpy} that
5281 correspond to the standard functions.  In any case, the option warns about
5282 just a subset of buffer overflows detected by the corresponding overflow
5283 checking built-ins.  For example, the option will issue a warning for
5284 the @code{strcpy} call below because it copies at least 5 characters
5285 (the string @code{"blue"} including the terminating NUL) into the buffer
5286 of size 4.
5288 @smallexample
5289 enum Color @{ blue, purple, yellow @};
5290 const char* f (enum Color clr)
5292   static char buf [4];
5293   const char *str;
5294   switch (clr)
5295     @{
5296       case blue: str = "blue"; break;
5297       case purple: str = "purple"; break;
5298       case yellow: str = "yellow"; break;
5299     @}
5301   return strcpy (buf, str);   // warning here
5303 @end smallexample
5305 Option @option{-Wstringop-overflow=2} is enabled by default.
5307 @table @gcctabopt
5308 @item -Wstringop-overflow
5309 @itemx -Wstringop-overflow=1
5310 @opindex Wstringop-overflow
5311 @opindex Wno-stringop-overflow
5312 The @option{-Wstringop-overflow=1} option uses type-zero Object Size Checking
5313 to determine the sizes of destination objects.  This is the default setting
5314 of the option.  At this setting the option will not warn for writes past
5315 the end of subobjects of larger objects accessed by pointers unless the
5316 size of the largest surrounding object is known.  When the destination may
5317 be one of several objects it is assumed to be the largest one of them.  On
5318 Linux systems, when optimization is enabled at this setting the option warns
5319 for the same code as when the @code{_FORTIFY_SOURCE} macro is defined to
5320 a non-zero value.
5322 @item -Wstringop-overflow=2
5323 The @option{-Wstringop-overflow=2} option uses type-one Object Size Checking
5324 to determine the sizes of destination objects.  At this setting the option
5325 will warn about overflows when writing to members of the largest complete
5326 objects whose exact size is known.  It will, however, not warn for excessive
5327 writes to the same members of unknown objects referenced by pointers since
5328 they may point to arrays containing unknown numbers of elements.
5330 @item -Wstringop-overflow=3
5331 The @option{-Wstringop-overflow=3} option uses type-two Object Size Checking
5332 to determine the sizes of destination objects.  At this setting the option
5333 warns about overflowing the smallest object or data member.  This is the
5334 most restrictive setting of the option that may result in warnings for safe
5335 code.
5337 @item -Wstringop-overflow=4
5338 The @option{-Wstringop-overflow=4} option uses type-three Object Size Checking
5339 to determine the sizes of destination objects.  At this setting the option
5340 will warn about overflowing any data members, and when the destination is
5341 one of several objects it uses the size of the largest of them to decide
5342 whether to issue a warning.  Similarly to @option{-Wstringop-overflow=3} this
5343 setting of the option may result in warnings for benign code.
5344 @end table
5346 @item -Wstringop-truncation
5347 @opindex Wstringop-truncation
5348 @opindex Wno-stringop-truncation
5349 Warn for calls to bounded string manipulation functions such as @code{strncat},
5350 @code{strncpy}, and @code{stpncpy} that may either truncate the copied string
5351 or leave the destination unchanged.
5353 In the following example, the call to @code{strncat} specifies a bound that
5354 is less than the length of the source string.  As a result, the copy of
5355 the source will be truncated and so the call is diagnosed.  To avoid the
5356 warning use @code{bufsize - strlen (buf) - 1)} as the bound.
5358 @smallexample
5359 void append (char *buf, size_t bufsize)
5361   strncat (buf, ".txt", 3);
5363 @end smallexample
5365 As another example, the following call to @code{strncpy} results in copying
5366 to @code{d} just the characters preceding the terminating NUL, without
5367 appending the NUL to the end.  Assuming the result of @code{strncpy} is
5368 necessarily a NUL-terminated string is a common mistake, and so the call
5369 is diagnosed.  To avoid the warning when the result is not expected to be
5370 NUL-terminated, call @code{memcpy} instead.
5372 @smallexample
5373 void copy (char *d, const char *s)
5375   strncpy (d, s, strlen (s));
5377 @end smallexample
5379 In the following example, the call to @code{strncpy} specifies the size
5380 of the destination buffer as the bound.  If the length of the source
5381 string is equal to or greater than this size the result of the copy will
5382 not be NUL-terminated.  Therefore, the call is also diagnosed.  To avoid
5383 the warning, specify @code{sizeof buf - 1} as the bound and set the last
5384 element of the buffer to @code{NUL}.
5386 @smallexample
5387 void copy (const char *s)
5389   char buf[80];
5390   strncpy (buf, s, sizeof buf);
5391   @dots{}
5393 @end smallexample
5395 In situations where a character array is intended to store a sequence
5396 of bytes with no terminating @code{NUL} such an array may be annotated
5397 with attribute @code{nonstring} to avoid this warning.  Such arrays,
5398 however, are not suitable arguments to functions that expect
5399 @code{NUL}-terminated strings.  To help detect accidental misuses of
5400 such arrays GCC issues warnings unless it can prove that the use is
5401 safe.  @xref{Common Variable Attributes}.
5403 @item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}cold@r{|}malloc@r{]}
5404 @opindex Wsuggest-attribute=
5405 @opindex Wno-suggest-attribute=
5406 Warn for cases where adding an attribute may be beneficial. The
5407 attributes currently supported are listed below.
5409 @table @gcctabopt
5410 @item -Wsuggest-attribute=pure
5411 @itemx -Wsuggest-attribute=const
5412 @itemx -Wsuggest-attribute=noreturn
5413 @itemx -Wsuggest-attribute=malloc
5414 @opindex Wsuggest-attribute=pure
5415 @opindex Wno-suggest-attribute=pure
5416 @opindex Wsuggest-attribute=const
5417 @opindex Wno-suggest-attribute=const
5418 @opindex Wsuggest-attribute=noreturn
5419 @opindex Wno-suggest-attribute=noreturn
5420 @opindex Wsuggest-attribute=malloc
5421 @opindex Wno-suggest-attribute=malloc
5423 Warn about functions that might be candidates for attributes
5424 @code{pure}, @code{const} or @code{noreturn} or @code{malloc}. The compiler
5425 only warns for functions visible in other compilation units or (in the case of
5426 @code{pure} and @code{const}) if it cannot prove that the function returns
5427 normally. A function returns normally if it doesn't contain an infinite loop or
5428 return abnormally by throwing, calling @code{abort} or trapping.  This analysis
5429 requires option @option{-fipa-pure-const}, which is enabled by default at
5430 @option{-O} and higher.  Higher optimization levels improve the accuracy
5431 of the analysis.
5433 @item -Wsuggest-attribute=format
5434 @itemx -Wmissing-format-attribute
5435 @opindex Wsuggest-attribute=format
5436 @opindex Wmissing-format-attribute
5437 @opindex Wno-suggest-attribute=format
5438 @opindex Wno-missing-format-attribute
5439 @opindex Wformat
5440 @opindex Wno-format
5442 Warn about function pointers that might be candidates for @code{format}
5443 attributes.  Note these are only possible candidates, not absolute ones.
5444 GCC guesses that function pointers with @code{format} attributes that
5445 are used in assignment, initialization, parameter passing or return
5446 statements should have a corresponding @code{format} attribute in the
5447 resulting type.  I.e.@: the left-hand side of the assignment or
5448 initialization, the type of the parameter variable, or the return type
5449 of the containing function respectively should also have a @code{format}
5450 attribute to avoid the warning.
5452 GCC also warns about function definitions that might be
5453 candidates for @code{format} attributes.  Again, these are only
5454 possible candidates.  GCC guesses that @code{format} attributes
5455 might be appropriate for any function that calls a function like
5456 @code{vprintf} or @code{vscanf}, but this might not always be the
5457 case, and some functions for which @code{format} attributes are
5458 appropriate may not be detected.
5460 @item -Wsuggest-attribute=cold
5461 @opindex Wsuggest-attribute=cold
5462 @opindex Wno-suggest-attribute=cold
5464 Warn about functions that might be candidates for @code{cold} attribute.  This
5465 is based on static detection and generally will only warn about functions which
5466 always leads to a call to another @code{cold} function such as wrappers of
5467 C++ @code{throw} or fatal error reporting functions leading to @code{abort}.
5468 @end table
5470 @item -Wsuggest-final-types
5471 @opindex Wno-suggest-final-types
5472 @opindex Wsuggest-final-types
5473 Warn about types with virtual methods where code quality would be improved
5474 if the type were declared with the C++11 @code{final} specifier, 
5475 or, if possible,
5476 declared in an anonymous namespace. This allows GCC to more aggressively
5477 devirtualize the polymorphic calls. This warning is more effective with link
5478 time optimization, where the information about the class hierarchy graph is
5479 more complete.
5481 @item -Wsuggest-final-methods
5482 @opindex Wno-suggest-final-methods
5483 @opindex Wsuggest-final-methods
5484 Warn about virtual methods where code quality would be improved if the method
5485 were declared with the C++11 @code{final} specifier, 
5486 or, if possible, its type were
5487 declared in an anonymous namespace or with the @code{final} specifier.
5488 This warning is
5489 more effective with link-time optimization, where the information about the
5490 class hierarchy graph is more complete. It is recommended to first consider
5491 suggestions of @option{-Wsuggest-final-types} and then rebuild with new
5492 annotations.
5494 @item -Wsuggest-override
5495 Warn about overriding virtual functions that are not marked with the override
5496 keyword.
5498 @item -Walloc-zero
5499 @opindex Wno-alloc-zero
5500 @opindex Walloc-zero
5501 Warn about calls to allocation functions decorated with attribute
5502 @code{alloc_size} that specify zero bytes, including those to the built-in
5503 forms of the functions @code{aligned_alloc}, @code{alloca}, @code{calloc},
5504 @code{malloc}, and @code{realloc}.  Because the behavior of these functions
5505 when called with a zero size differs among implementations (and in the case
5506 of @code{realloc} has been deprecated) relying on it may result in subtle
5507 portability bugs and should be avoided.
5509 @item -Walloc-size-larger-than=@var{n}
5510 Warn about calls to functions decorated with attribute @code{alloc_size}
5511 that attempt to allocate objects larger than the specified number of bytes,
5512 or where the result of the size computation in an integer type with infinite
5513 precision would exceed @code{SIZE_MAX / 2}.  The option argument @var{n}
5514 may end in one of the standard suffixes designating a multiple of bytes
5515 such as @code{kB} and @code{KiB} for kilobyte and kibibyte, respectively,
5516 @code{MB} and @code{MiB} for megabyte and mebibyte, and so on.
5517 @xref{Function Attributes}.
5519 @item -Walloca
5520 @opindex Wno-alloca
5521 @opindex Walloca
5522 This option warns on all uses of @code{alloca} in the source.
5524 @item -Walloca-larger-than=@var{n}
5525 This option warns on calls to @code{alloca} that are not bounded by a
5526 controlling predicate limiting its argument of integer type to at most
5527 @var{n} bytes, or calls to @code{alloca} where the bound is unknown.
5528 Arguments of non-integer types are considered unbounded even if they
5529 appear to be constrained to the expected range.
5531 For example, a bounded case of @code{alloca} could be:
5533 @smallexample
5534 void func (size_t n)
5536   void *p;
5537   if (n <= 1000)
5538     p = alloca (n);
5539   else
5540     p = malloc (n);
5541   f (p);
5543 @end smallexample
5545 In the above example, passing @code{-Walloca-larger-than=1000} would not
5546 issue a warning because the call to @code{alloca} is known to be at most
5547 1000 bytes.  However, if @code{-Walloca-larger-than=500} were passed,
5548 the compiler would emit a warning.
5550 Unbounded uses, on the other hand, are uses of @code{alloca} with no
5551 controlling predicate constraining its integer argument.  For example:
5553 @smallexample
5554 void func ()
5556   void *p = alloca (n);
5557   f (p);
5559 @end smallexample
5561 If @code{-Walloca-larger-than=500} were passed, the above would trigger
5562 a warning, but this time because of the lack of bounds checking.
5564 Note, that even seemingly correct code involving signed integers could
5565 cause a warning:
5567 @smallexample
5568 void func (signed int n)
5570   if (n < 500)
5571     @{
5572       p = alloca (n);
5573       f (p);
5574     @}
5576 @end smallexample
5578 In the above example, @var{n} could be negative, causing a larger than
5579 expected argument to be implicitly cast into the @code{alloca} call.
5581 This option also warns when @code{alloca} is used in a loop.
5583 This warning is not enabled by @option{-Wall}, and is only active when
5584 @option{-ftree-vrp} is active (default for @option{-O2} and above).
5586 See also @option{-Wvla-larger-than=@var{n}}.
5588 @item -Warray-bounds
5589 @itemx -Warray-bounds=@var{n}
5590 @opindex Wno-array-bounds
5591 @opindex Warray-bounds
5592 This option is only active when @option{-ftree-vrp} is active
5593 (default for @option{-O2} and above). It warns about subscripts to arrays
5594 that are always out of bounds. This warning is enabled by @option{-Wall}.
5596 @table @gcctabopt
5597 @item -Warray-bounds=1
5598 This is the warning level of @option{-Warray-bounds} and is enabled
5599 by @option{-Wall}; higher levels are not, and must be explicitly requested.
5601 @item -Warray-bounds=2
5602 This warning level also warns about out of bounds access for
5603 arrays at the end of a struct and for arrays accessed through
5604 pointers. This warning level may give a larger number of
5605 false positives and is deactivated by default.
5606 @end table
5608 @item -Wattribute-alias
5609 Warn about declarations using the @code{alias} and similar attributes whose
5610 target is incompatible with the type of the alias.  @xref{Function Attributes,
5611 ,Declaring Attributes of Functions}.
5613 @item -Wbool-compare
5614 @opindex Wno-bool-compare
5615 @opindex Wbool-compare
5616 Warn about boolean expression compared with an integer value different from
5617 @code{true}/@code{false}.  For instance, the following comparison is
5618 always false:
5619 @smallexample
5620 int n = 5;
5621 @dots{}
5622 if ((n > 1) == 2) @{ @dots{} @}
5623 @end smallexample
5624 This warning is enabled by @option{-Wall}.
5626 @item -Wbool-operation
5627 @opindex Wno-bool-operation
5628 @opindex Wbool-operation
5629 Warn about suspicious operations on expressions of a boolean type.  For
5630 instance, bitwise negation of a boolean is very likely a bug in the program.
5631 For C, this warning also warns about incrementing or decrementing a boolean,
5632 which rarely makes sense.  (In C++, decrementing a boolean is always invalid.
5633 Incrementing a boolean is invalid in C++17, and deprecated otherwise.)
5635 This warning is enabled by @option{-Wall}.
5637 @item -Wduplicated-branches
5638 @opindex Wno-duplicated-branches
5639 @opindex Wduplicated-branches
5640 Warn when an if-else has identical branches.  This warning detects cases like
5641 @smallexample
5642 if (p != NULL)
5643   return 0;
5644 else
5645   return 0;
5646 @end smallexample
5647 It doesn't warn when both branches contain just a null statement.  This warning
5648 also warn for conditional operators:
5649 @smallexample
5650   int i = x ? *p : *p;
5651 @end smallexample
5653 @item -Wduplicated-cond
5654 @opindex Wno-duplicated-cond
5655 @opindex Wduplicated-cond
5656 Warn about duplicated conditions in an if-else-if chain.  For instance,
5657 warn for the following code:
5658 @smallexample
5659 if (p->q != NULL) @{ @dots{} @}
5660 else if (p->q != NULL) @{ @dots{} @}
5661 @end smallexample
5663 @item -Wframe-address
5664 @opindex Wno-frame-address
5665 @opindex Wframe-address
5666 Warn when the @samp{__builtin_frame_address} or @samp{__builtin_return_address}
5667 is called with an argument greater than 0.  Such calls may return indeterminate
5668 values or crash the program.  The warning is included in @option{-Wall}.
5670 @item -Wno-discarded-qualifiers @r{(C and Objective-C only)}
5671 @opindex Wno-discarded-qualifiers
5672 @opindex Wdiscarded-qualifiers
5673 Do not warn if type qualifiers on pointers are being discarded.
5674 Typically, the compiler warns if a @code{const char *} variable is
5675 passed to a function that takes a @code{char *} parameter.  This option
5676 can be used to suppress such a warning.
5678 @item -Wno-discarded-array-qualifiers @r{(C and Objective-C only)}
5679 @opindex Wno-discarded-array-qualifiers
5680 @opindex Wdiscarded-array-qualifiers
5681 Do not warn if type qualifiers on arrays which are pointer targets
5682 are being discarded. Typically, the compiler warns if a
5683 @code{const int (*)[]} variable is passed to a function that
5684 takes a @code{int (*)[]} parameter.  This option can be used to
5685 suppress such a warning.
5687 @item -Wno-incompatible-pointer-types @r{(C and Objective-C only)}
5688 @opindex Wno-incompatible-pointer-types
5689 @opindex Wincompatible-pointer-types
5690 Do not warn when there is a conversion between pointers that have incompatible
5691 types.  This warning is for cases not covered by @option{-Wno-pointer-sign},
5692 which warns for pointer argument passing or assignment with different
5693 signedness.
5695 @item -Wno-int-conversion @r{(C and Objective-C only)}
5696 @opindex Wno-int-conversion
5697 @opindex Wint-conversion
5698 Do not warn about incompatible integer to pointer and pointer to integer
5699 conversions.  This warning is about implicit conversions; for explicit
5700 conversions the warnings @option{-Wno-int-to-pointer-cast} and
5701 @option{-Wno-pointer-to-int-cast} may be used.
5703 @item -Wno-div-by-zero
5704 @opindex Wno-div-by-zero
5705 @opindex Wdiv-by-zero
5706 Do not warn about compile-time integer division by zero.  Floating-point
5707 division by zero is not warned about, as it can be a legitimate way of
5708 obtaining infinities and NaNs.
5710 @item -Wsystem-headers
5711 @opindex Wsystem-headers
5712 @opindex Wno-system-headers
5713 @cindex warnings from system headers
5714 @cindex system headers, warnings from
5715 Print warning messages for constructs found in system header files.
5716 Warnings from system headers are normally suppressed, on the assumption
5717 that they usually do not indicate real problems and would only make the
5718 compiler output harder to read.  Using this command-line option tells
5719 GCC to emit warnings from system headers as if they occurred in user
5720 code.  However, note that using @option{-Wall} in conjunction with this
5721 option does @emph{not} warn about unknown pragmas in system
5722 headers---for that, @option{-Wunknown-pragmas} must also be used.
5724 @item -Wtautological-compare
5725 @opindex Wtautological-compare
5726 @opindex Wno-tautological-compare
5727 Warn if a self-comparison always evaluates to true or false.  This
5728 warning detects various mistakes such as:
5729 @smallexample
5730 int i = 1;
5731 @dots{}
5732 if (i > i) @{ @dots{} @}
5733 @end smallexample
5735 This warning also warns about bitwise comparisons that always evaluate
5736 to true or false, for instance:
5737 @smallexample
5738 if ((a & 16) == 10) @{ @dots{} @}
5739 @end smallexample
5740 will always be false.
5742 This warning is enabled by @option{-Wall}.
5744 @item -Wtrampolines
5745 @opindex Wtrampolines
5746 @opindex Wno-trampolines
5747 Warn about trampolines generated for pointers to nested functions.
5748 A trampoline is a small piece of data or code that is created at run
5749 time on the stack when the address of a nested function is taken, and is
5750 used to call the nested function indirectly.  For some targets, it is
5751 made up of data only and thus requires no special treatment.  But, for
5752 most targets, it is made up of code and thus requires the stack to be
5753 made executable in order for the program to work properly.
5755 @item -Wfloat-equal
5756 @opindex Wfloat-equal
5757 @opindex Wno-float-equal
5758 Warn if floating-point values are used in equality comparisons.
5760 The idea behind this is that sometimes it is convenient (for the
5761 programmer) to consider floating-point values as approximations to
5762 infinitely precise real numbers.  If you are doing this, then you need
5763 to compute (by analyzing the code, or in some other way) the maximum or
5764 likely maximum error that the computation introduces, and allow for it
5765 when performing comparisons (and when producing output, but that's a
5766 different problem).  In particular, instead of testing for equality, you
5767 should check to see whether the two values have ranges that overlap; and
5768 this is done with the relational operators, so equality comparisons are
5769 probably mistaken.
5771 @item -Wtraditional @r{(C and Objective-C only)}
5772 @opindex Wtraditional
5773 @opindex Wno-traditional
5774 Warn about certain constructs that behave differently in traditional and
5775 ISO C@.  Also warn about ISO C constructs that have no traditional C
5776 equivalent, and/or problematic constructs that should be avoided.
5778 @itemize @bullet
5779 @item
5780 Macro parameters that appear within string literals in the macro body.
5781 In traditional C macro replacement takes place within string literals,
5782 but in ISO C it does not.
5784 @item
5785 In traditional C, some preprocessor directives did not exist.
5786 Traditional preprocessors only considered a line to be a directive
5787 if the @samp{#} appeared in column 1 on the line.  Therefore
5788 @option{-Wtraditional} warns about directives that traditional C
5789 understands but ignores because the @samp{#} does not appear as the
5790 first character on the line.  It also suggests you hide directives like
5791 @code{#pragma} not understood by traditional C by indenting them.  Some
5792 traditional implementations do not recognize @code{#elif}, so this option
5793 suggests avoiding it altogether.
5795 @item
5796 A function-like macro that appears without arguments.
5798 @item
5799 The unary plus operator.
5801 @item
5802 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
5803 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
5804 constants.)  Note, these suffixes appear in macros defined in the system
5805 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
5806 Use of these macros in user code might normally lead to spurious
5807 warnings, however GCC's integrated preprocessor has enough context to
5808 avoid warning in these cases.
5810 @item
5811 A function declared external in one block and then used after the end of
5812 the block.
5814 @item
5815 A @code{switch} statement has an operand of type @code{long}.
5817 @item
5818 A non-@code{static} function declaration follows a @code{static} one.
5819 This construct is not accepted by some traditional C compilers.
5821 @item
5822 The ISO type of an integer constant has a different width or
5823 signedness from its traditional type.  This warning is only issued if
5824 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
5825 typically represent bit patterns, are not warned about.
5827 @item
5828 Usage of ISO string concatenation is detected.
5830 @item
5831 Initialization of automatic aggregates.
5833 @item
5834 Identifier conflicts with labels.  Traditional C lacks a separate
5835 namespace for labels.
5837 @item
5838 Initialization of unions.  If the initializer is zero, the warning is
5839 omitted.  This is done under the assumption that the zero initializer in
5840 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
5841 initializer warnings and relies on default initialization to zero in the
5842 traditional C case.
5844 @item
5845 Conversions by prototypes between fixed/floating-point values and vice
5846 versa.  The absence of these prototypes when compiling with traditional
5847 C causes serious problems.  This is a subset of the possible
5848 conversion warnings; for the full set use @option{-Wtraditional-conversion}.
5850 @item
5851 Use of ISO C style function definitions.  This warning intentionally is
5852 @emph{not} issued for prototype declarations or variadic functions
5853 because these ISO C features appear in your code when using
5854 libiberty's traditional C compatibility macros, @code{PARAMS} and
5855 @code{VPARAMS}.  This warning is also bypassed for nested functions
5856 because that feature is already a GCC extension and thus not relevant to
5857 traditional C compatibility.
5858 @end itemize
5860 @item -Wtraditional-conversion @r{(C and Objective-C only)}
5861 @opindex Wtraditional-conversion
5862 @opindex Wno-traditional-conversion
5863 Warn if a prototype causes a type conversion that is different from what
5864 would happen to the same argument in the absence of a prototype.  This
5865 includes conversions of fixed point to floating and vice versa, and
5866 conversions changing the width or signedness of a fixed-point argument
5867 except when the same as the default promotion.
5869 @item -Wdeclaration-after-statement @r{(C and Objective-C only)}
5870 @opindex Wdeclaration-after-statement
5871 @opindex Wno-declaration-after-statement
5872 Warn when a declaration is found after a statement in a block.  This
5873 construct, known from C++, was introduced with ISO C99 and is by default
5874 allowed in GCC@.  It is not supported by ISO C90.  @xref{Mixed Declarations}.
5876 @item -Wshadow
5877 @opindex Wshadow
5878 @opindex Wno-shadow
5879 Warn whenever a local variable or type declaration shadows another
5880 variable, parameter, type, class member (in C++), or instance variable
5881 (in Objective-C) or whenever a built-in function is shadowed. Note
5882 that in C++, the compiler warns if a local variable shadows an
5883 explicit typedef, but not if it shadows a struct/class/enum.
5884 Same as @option{-Wshadow=global}.
5886 @item -Wno-shadow-ivar @r{(Objective-C only)}
5887 @opindex Wno-shadow-ivar
5888 @opindex Wshadow-ivar
5889 Do not warn whenever a local variable shadows an instance variable in an
5890 Objective-C method.
5892 @item -Wshadow=global
5893 @opindex Wshadow=local
5894 The default for @option{-Wshadow}. Warns for any (global) shadowing.
5896 @item -Wshadow=local
5897 @opindex Wshadow=local
5898 Warn when a local variable shadows another local variable or parameter.
5899 This warning is enabled by @option{-Wshadow=global}.
5901 @item -Wshadow=compatible-local
5902 @opindex Wshadow=compatible-local
5903 Warn when a local variable shadows another local variable or parameter
5904 whose type is compatible with that of the shadowing variable. In C++,
5905 type compatibility here means the type of the shadowing variable can be
5906 converted to that of the shadowed variable. The creation of this flag
5907 (in addition to @option{-Wshadow=local}) is based on the idea that when
5908 a local variable shadows another one of incompatible type, it is most
5909 likely intentional, not a bug or typo, as shown in the following example:
5911 @smallexample
5912 @group
5913 for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
5915   for (int i = 0; i < N; ++i)
5916   @{
5917     ...
5918   @}
5919   ...
5921 @end group
5922 @end smallexample
5924 Since the two variable @code{i} in the example above have incompatible types,
5925 enabling only @option{-Wshadow=compatible-local} will not emit a warning.
5926 Because their types are incompatible, if a programmer accidentally uses one
5927 in place of the other, type checking will catch that and emit an error or
5928 warning. So not warning (about shadowing) in this case will not lead to
5929 undetected bugs. Use of this flag instead of @option{-Wshadow=local} can
5930 possibly reduce the number of warnings triggered by intentional shadowing.
5932 This warning is enabled by @option{-Wshadow=local}.
5934 @item -Wlarger-than=@var{len}
5935 @opindex Wlarger-than=@var{len}
5936 @opindex Wlarger-than-@var{len}
5937 Warn whenever an object of larger than @var{len} bytes is defined.
5939 @item -Wframe-larger-than=@var{len}
5940 @opindex Wframe-larger-than
5941 Warn if the size of a function frame is larger than @var{len} bytes.
5942 The computation done to determine the stack frame size is approximate
5943 and not conservative.
5944 The actual requirements may be somewhat greater than @var{len}
5945 even if you do not get a warning.  In addition, any space allocated
5946 via @code{alloca}, variable-length arrays, or related constructs
5947 is not included by the compiler when determining
5948 whether or not to issue a warning.
5950 @item -Wno-free-nonheap-object
5951 @opindex Wno-free-nonheap-object
5952 @opindex Wfree-nonheap-object
5953 Do not warn when attempting to free an object that was not allocated
5954 on the heap.
5956 @item -Wstack-usage=@var{len}
5957 @opindex Wstack-usage
5958 Warn if the stack usage of a function might be larger than @var{len} bytes.
5959 The computation done to determine the stack usage is conservative.
5960 Any space allocated via @code{alloca}, variable-length arrays, or related
5961 constructs is included by the compiler when determining whether or not to
5962 issue a warning.
5964 The message is in keeping with the output of @option{-fstack-usage}.
5966 @itemize
5967 @item
5968 If the stack usage is fully static but exceeds the specified amount, it's:
5970 @smallexample
5971   warning: stack usage is 1120 bytes
5972 @end smallexample
5973 @item
5974 If the stack usage is (partly) dynamic but bounded, it's:
5976 @smallexample
5977   warning: stack usage might be 1648 bytes
5978 @end smallexample
5979 @item
5980 If the stack usage is (partly) dynamic and not bounded, it's:
5982 @smallexample
5983   warning: stack usage might be unbounded
5984 @end smallexample
5985 @end itemize
5987 @item -Wunsafe-loop-optimizations
5988 @opindex Wunsafe-loop-optimizations
5989 @opindex Wno-unsafe-loop-optimizations
5990 Warn if the loop cannot be optimized because the compiler cannot
5991 assume anything on the bounds of the loop indices.  With
5992 @option{-funsafe-loop-optimizations} warn if the compiler makes
5993 such assumptions.
5995 @item -Wno-pedantic-ms-format @r{(MinGW targets only)}
5996 @opindex Wno-pedantic-ms-format
5997 @opindex Wpedantic-ms-format
5998 When used in combination with @option{-Wformat}
5999 and @option{-pedantic} without GNU extensions, this option
6000 disables the warnings about non-ISO @code{printf} / @code{scanf} format
6001 width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets,
6002 which depend on the MS runtime.
6004 @item -Waligned-new
6005 @opindex Waligned-new
6006 @opindex Wno-aligned-new
6007 Warn about a new-expression of a type that requires greater alignment
6008 than the @code{alignof(std::max_align_t)} but uses an allocation
6009 function without an explicit alignment parameter. This option is
6010 enabled by @option{-Wall}.
6012 Normally this only warns about global allocation functions, but
6013 @option{-Waligned-new=all} also warns about class member allocation
6014 functions.
6016 @item -Wplacement-new
6017 @itemx -Wplacement-new=@var{n}
6018 @opindex Wplacement-new
6019 @opindex Wno-placement-new
6020 Warn about placement new expressions with undefined behavior, such as
6021 constructing an object in a buffer that is smaller than the type of
6022 the object.  For example, the placement new expression below is diagnosed
6023 because it attempts to construct an array of 64 integers in a buffer only
6024 64 bytes large.
6025 @smallexample
6026 char buf [64];
6027 new (buf) int[64];
6028 @end smallexample
6029 This warning is enabled by default.
6031 @table @gcctabopt
6032 @item -Wplacement-new=1
6033 This is the default warning level of @option{-Wplacement-new}.  At this
6034 level the warning is not issued for some strictly undefined constructs that
6035 GCC allows as extensions for compatibility with legacy code.  For example,
6036 the following @code{new} expression is not diagnosed at this level even
6037 though it has undefined behavior according to the C++ standard because
6038 it writes past the end of the one-element array.
6039 @smallexample
6040 struct S @{ int n, a[1]; @};
6041 S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
6042 new (s->a)int [32]();
6043 @end smallexample
6045 @item -Wplacement-new=2
6046 At this level, in addition to diagnosing all the same constructs as at level
6047 1, a diagnostic is also issued for placement new expressions that construct
6048 an object in the last member of structure whose type is an array of a single
6049 element and whose size is less than the size of the object being constructed.
6050 While the previous example would be diagnosed, the following construct makes
6051 use of the flexible member array extension to avoid the warning at level 2.
6052 @smallexample
6053 struct S @{ int n, a[]; @};
6054 S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
6055 new (s->a)int [32]();
6056 @end smallexample
6058 @end table
6060 @item -Wpointer-arith
6061 @opindex Wpointer-arith
6062 @opindex Wno-pointer-arith
6063 Warn about anything that depends on the ``size of'' a function type or
6064 of @code{void}.  GNU C assigns these types a size of 1, for
6065 convenience in calculations with @code{void *} pointers and pointers
6066 to functions.  In C++, warn also when an arithmetic operation involves
6067 @code{NULL}.  This warning is also enabled by @option{-Wpedantic}.
6069 @item -Wpointer-compare
6070 @opindex Wpointer-compare
6071 @opindex Wno-pointer-compare
6072 Warn if a pointer is compared with a zero character constant.  This usually
6073 means that the pointer was meant to be dereferenced.  For example:
6075 @smallexample
6076 const char *p = foo ();
6077 if (p == '\0')
6078   return 42;
6079 @end smallexample
6081 Note that the code above is invalid in C++11.
6083 This warning is enabled by default.
6085 @item -Wtype-limits
6086 @opindex Wtype-limits
6087 @opindex Wno-type-limits
6088 Warn if a comparison is always true or always false due to the limited
6089 range of the data type, but do not warn for constant expressions.  For
6090 example, warn if an unsigned variable is compared against zero with
6091 @code{<} or @code{>=}.  This warning is also enabled by
6092 @option{-Wextra}.
6094 @include cppwarnopts.texi
6096 @item -Wbad-function-cast @r{(C and Objective-C only)}
6097 @opindex Wbad-function-cast
6098 @opindex Wno-bad-function-cast
6099 Warn when a function call is cast to a non-matching type.
6100 For example, warn if a call to a function returning an integer type 
6101 is cast to a pointer type.
6103 @item -Wc90-c99-compat @r{(C and Objective-C only)}
6104 @opindex Wc90-c99-compat
6105 @opindex Wno-c90-c99-compat
6106 Warn about features not present in ISO C90, but present in ISO C99.
6107 For instance, warn about use of variable length arrays, @code{long long}
6108 type, @code{bool} type, compound literals, designated initializers, and so
6109 on.  This option is independent of the standards mode.  Warnings are disabled
6110 in the expression that follows @code{__extension__}.
6112 @item -Wc99-c11-compat @r{(C and Objective-C only)}
6113 @opindex Wc99-c11-compat
6114 @opindex Wno-c99-c11-compat
6115 Warn about features not present in ISO C99, but present in ISO C11.
6116 For instance, warn about use of anonymous structures and unions,
6117 @code{_Atomic} type qualifier, @code{_Thread_local} storage-class specifier,
6118 @code{_Alignas} specifier, @code{Alignof} operator, @code{_Generic} keyword,
6119 and so on.  This option is independent of the standards mode.  Warnings are
6120 disabled in the expression that follows @code{__extension__}.
6122 @item -Wc++-compat @r{(C and Objective-C only)}
6123 @opindex Wc++-compat
6124 Warn about ISO C constructs that are outside of the common subset of
6125 ISO C and ISO C++, e.g.@: request for implicit conversion from
6126 @code{void *} to a pointer to non-@code{void} type.
6128 @item -Wc++11-compat @r{(C++ and Objective-C++ only)}
6129 @opindex Wc++11-compat
6130 Warn about C++ constructs whose meaning differs between ISO C++ 1998
6131 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
6132 in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
6133 enabled by @option{-Wall}.
6135 @item -Wc++14-compat @r{(C++ and Objective-C++ only)}
6136 @opindex Wc++14-compat
6137 Warn about C++ constructs whose meaning differs between ISO C++ 2011
6138 and ISO C++ 2014.  This warning is enabled by @option{-Wall}.
6140 @item -Wc++17-compat @r{(C++ and Objective-C++ only)}
6141 @opindex Wc++17-compat
6142 Warn about C++ constructs whose meaning differs between ISO C++ 2014
6143 and ISO C++ 2017.  This warning is enabled by @option{-Wall}.
6145 @item -Wcast-qual
6146 @opindex Wcast-qual
6147 @opindex Wno-cast-qual
6148 Warn whenever a pointer is cast so as to remove a type qualifier from
6149 the target type.  For example, warn if a @code{const char *} is cast
6150 to an ordinary @code{char *}.
6152 Also warn when making a cast that introduces a type qualifier in an
6153 unsafe way.  For example, casting @code{char **} to @code{const char **}
6154 is unsafe, as in this example:
6156 @smallexample
6157   /* p is char ** value.  */
6158   const char **q = (const char **) p;
6159   /* Assignment of readonly string to const char * is OK.  */
6160   *q = "string";
6161   /* Now char** pointer points to read-only memory.  */
6162   **p = 'b';
6163 @end smallexample
6165 @item -Wcast-align
6166 @opindex Wcast-align
6167 @opindex Wno-cast-align
6168 Warn whenever a pointer is cast such that the required alignment of the
6169 target is increased.  For example, warn if a @code{char *} is cast to
6170 an @code{int *} on machines where integers can only be accessed at
6171 two- or four-byte boundaries.
6173 @item -Wcast-align=strict
6174 @opindex Wcast-align=strict
6175 Warn whenever a pointer is cast such that the required alignment of the
6176 target is increased.  For example, warn if a @code{char *} is cast to
6177 an @code{int *} regardless of the target machine.
6179 @item -Wcast-function-type
6180 @opindex Wcast-function-type
6181 @opindex Wno-cast-function-type
6182 Warn when a function pointer is cast to an incompatible function pointer.
6183 In a cast involving function types with a variable argument list only
6184 the types of initial arguments that are provided are considered.
6185 Any parameter of pointer-type matches any other pointer-type.  Any benign
6186 differences in integral types are ignored, like @code{int} vs. @code{long}
6187 on ILP32 targets.  Likewise type qualifiers are ignored.  The function
6188 type @code{void (*) (void)} is special and matches everything, which can
6189 be used to suppress this warning.
6190 In a cast involving pointer to member types this warning warns whenever
6191 the type cast is changing the pointer to member type.
6192 This warning is enabled by @option{-Wextra}.
6194 @item -Wwrite-strings
6195 @opindex Wwrite-strings
6196 @opindex Wno-write-strings
6197 When compiling C, give string constants the type @code{const
6198 char[@var{length}]} so that copying the address of one into a
6199 non-@code{const} @code{char *} pointer produces a warning.  These
6200 warnings help you find at compile time code that can try to write
6201 into a string constant, but only if you have been very careful about
6202 using @code{const} in declarations and prototypes.  Otherwise, it is
6203 just a nuisance. This is why we did not make @option{-Wall} request
6204 these warnings.
6206 When compiling C++, warn about the deprecated conversion from string
6207 literals to @code{char *}.  This warning is enabled by default for C++
6208 programs.
6210 @item -Wcatch-value
6211 @itemx -Wcatch-value=@var{n} @r{(C++ and Objective-C++ only)}
6212 @opindex Wcatch-value
6213 @opindex Wno-catch-value
6214 Warn about catch handlers that do not catch via reference.
6215 With @option{-Wcatch-value=1} (or @option{-Wcatch-value} for short)
6216 warn about polymorphic class types that are caught by value.
6217 With @option{-Wcatch-value=2} warn about all class types that are caught
6218 by value. With @option{-Wcatch-value=3} warn about all types that are
6219 not caught by reference. @option{-Wcatch-value} is enabled by @option{-Wall}.
6221 @item -Wclobbered
6222 @opindex Wclobbered
6223 @opindex Wno-clobbered
6224 Warn for variables that might be changed by @code{longjmp} or
6225 @code{vfork}.  This warning is also enabled by @option{-Wextra}.
6227 @item -Wconditionally-supported @r{(C++ and Objective-C++ only)}
6228 @opindex Wconditionally-supported
6229 @opindex Wno-conditionally-supported
6230 Warn for conditionally-supported (C++11 [intro.defs]) constructs.
6232 @item -Wconversion
6233 @opindex Wconversion
6234 @opindex Wno-conversion
6235 Warn for implicit conversions that may alter a value. This includes
6236 conversions between real and integer, like @code{abs (x)} when
6237 @code{x} is @code{double}; conversions between signed and unsigned,
6238 like @code{unsigned ui = -1}; and conversions to smaller types, like
6239 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
6240 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
6241 changed by the conversion like in @code{abs (2.0)}.  Warnings about
6242 conversions between signed and unsigned integers can be disabled by
6243 using @option{-Wno-sign-conversion}.
6245 For C++, also warn for confusing overload resolution for user-defined
6246 conversions; and conversions that never use a type conversion
6247 operator: conversions to @code{void}, the same type, a base class or a
6248 reference to them. Warnings about conversions between signed and
6249 unsigned integers are disabled by default in C++ unless
6250 @option{-Wsign-conversion} is explicitly enabled.
6252 @item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
6253 @opindex Wconversion-null
6254 @opindex Wno-conversion-null
6255 Do not warn for conversions between @code{NULL} and non-pointer
6256 types. @option{-Wconversion-null} is enabled by default.
6258 @item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
6259 @opindex Wzero-as-null-pointer-constant
6260 @opindex Wno-zero-as-null-pointer-constant
6261 Warn when a literal @samp{0} is used as null pointer constant.  This can
6262 be useful to facilitate the conversion to @code{nullptr} in C++11.
6264 @item -Wsubobject-linkage @r{(C++ and Objective-C++ only)}
6265 @opindex Wsubobject-linkage
6266 @opindex Wno-subobject-linkage
6267 Warn if a class type has a base or a field whose type uses the anonymous
6268 namespace or depends on a type with no linkage.  If a type A depends on
6269 a type B with no or internal linkage, defining it in multiple
6270 translation units would be an ODR violation because the meaning of B
6271 is different in each translation unit.  If A only appears in a single
6272 translation unit, the best way to silence the warning is to give it
6273 internal linkage by putting it in an anonymous namespace as well.  The
6274 compiler doesn't give this warning for types defined in the main .C
6275 file, as those are unlikely to have multiple definitions.
6276 @option{-Wsubobject-linkage} is enabled by default.
6278 @item -Wdangling-else
6279 @opindex Wdangling-else
6280 @opindex Wno-dangling-else
6281 Warn about constructions where there may be confusion to which
6282 @code{if} statement an @code{else} branch belongs.  Here is an example of
6283 such a case:
6285 @smallexample
6286 @group
6288   if (a)
6289     if (b)
6290       foo ();
6291   else
6292     bar ();
6294 @end group
6295 @end smallexample
6297 In C/C++, every @code{else} branch belongs to the innermost possible
6298 @code{if} statement, which in this example is @code{if (b)}.  This is
6299 often not what the programmer expected, as illustrated in the above
6300 example by indentation the programmer chose.  When there is the
6301 potential for this confusion, GCC issues a warning when this flag
6302 is specified.  To eliminate the warning, add explicit braces around
6303 the innermost @code{if} statement so there is no way the @code{else}
6304 can belong to the enclosing @code{if}.  The resulting code
6305 looks like this:
6307 @smallexample
6308 @group
6310   if (a)
6311     @{
6312       if (b)
6313         foo ();
6314       else
6315         bar ();
6316     @}
6318 @end group
6319 @end smallexample
6321 This warning is enabled by @option{-Wparentheses}.
6323 @item -Wdate-time
6324 @opindex Wdate-time
6325 @opindex Wno-date-time
6326 Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
6327 are encountered as they might prevent bit-wise-identical reproducible
6328 compilations.
6330 @item -Wdelete-incomplete @r{(C++ and Objective-C++ only)}
6331 @opindex Wdelete-incomplete
6332 @opindex Wno-delete-incomplete
6333 Warn when deleting a pointer to incomplete type, which may cause
6334 undefined behavior at runtime.  This warning is enabled by default.
6336 @item -Wuseless-cast @r{(C++ and Objective-C++ only)}
6337 @opindex Wuseless-cast
6338 @opindex Wno-useless-cast
6339 Warn when an expression is casted to its own type.
6341 @item -Wempty-body
6342 @opindex Wempty-body
6343 @opindex Wno-empty-body
6344 Warn if an empty body occurs in an @code{if}, @code{else} or @code{do
6345 while} statement.  This warning is also enabled by @option{-Wextra}.
6347 @item -Wenum-compare
6348 @opindex Wenum-compare
6349 @opindex Wno-enum-compare
6350 Warn about a comparison between values of different enumerated types.
6351 In C++ enumerated type mismatches in conditional expressions are also
6352 diagnosed and the warning is enabled by default.  In C this warning is 
6353 enabled by @option{-Wall}.
6355 @item -Wextra-semi @r{(C++, Objective-C++ only)}
6356 @opindex Wextra-semi
6357 @opindex Wno-extra-semi
6358 Warn about redundant semicolon after in-class function definition.
6360 @item -Wjump-misses-init @r{(C, Objective-C only)}
6361 @opindex Wjump-misses-init
6362 @opindex Wno-jump-misses-init
6363 Warn if a @code{goto} statement or a @code{switch} statement jumps
6364 forward across the initialization of a variable, or jumps backward to a
6365 label after the variable has been initialized.  This only warns about
6366 variables that are initialized when they are declared.  This warning is
6367 only supported for C and Objective-C; in C++ this sort of branch is an
6368 error in any case.
6370 @option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
6371 can be disabled with the @option{-Wno-jump-misses-init} option.
6373 @item -Wsign-compare
6374 @opindex Wsign-compare
6375 @opindex Wno-sign-compare
6376 @cindex warning for comparison of signed and unsigned values
6377 @cindex comparison of signed and unsigned values, warning
6378 @cindex signed and unsigned values, comparison warning
6379 Warn when a comparison between signed and unsigned values could produce
6380 an incorrect result when the signed value is converted to unsigned.
6381 In C++, this warning is also enabled by @option{-Wall}.  In C, it is
6382 also enabled by @option{-Wextra}.
6384 @item -Wsign-conversion
6385 @opindex Wsign-conversion
6386 @opindex Wno-sign-conversion
6387 Warn for implicit conversions that may change the sign of an integer
6388 value, like assigning a signed integer expression to an unsigned
6389 integer variable. An explicit cast silences the warning. In C, this
6390 option is enabled also by @option{-Wconversion}.
6392 @item -Wfloat-conversion
6393 @opindex Wfloat-conversion
6394 @opindex Wno-float-conversion
6395 Warn for implicit conversions that reduce the precision of a real value.
6396 This includes conversions from real to integer, and from higher precision
6397 real to lower precision real values.  This option is also enabled by
6398 @option{-Wconversion}.
6400 @item -Wno-scalar-storage-order
6401 @opindex -Wno-scalar-storage-order
6402 @opindex -Wscalar-storage-order
6403 Do not warn on suspicious constructs involving reverse scalar storage order.
6405 @item -Wsized-deallocation @r{(C++ and Objective-C++ only)}
6406 @opindex Wsized-deallocation
6407 @opindex Wno-sized-deallocation
6408 Warn about a definition of an unsized deallocation function
6409 @smallexample
6410 void operator delete (void *) noexcept;
6411 void operator delete[] (void *) noexcept;
6412 @end smallexample
6413 without a definition of the corresponding sized deallocation function
6414 @smallexample
6415 void operator delete (void *, std::size_t) noexcept;
6416 void operator delete[] (void *, std::size_t) noexcept;
6417 @end smallexample
6418 or vice versa.  Enabled by @option{-Wextra} along with
6419 @option{-fsized-deallocation}.
6421 @item -Wsizeof-pointer-div
6422 @opindex Wsizeof-pointer-div
6423 @opindex Wno-sizeof-pointer-div
6424 Warn for suspicious divisions of two sizeof expressions that divide
6425 the pointer size by the element size, which is the usual way to compute
6426 the array size but won't work out correctly with pointers.  This warning
6427 warns e.g.@: about @code{sizeof (ptr) / sizeof (ptr[0])} if @code{ptr} is
6428 not an array, but a pointer.  This warning is enabled by @option{-Wall}.
6430 @item -Wsizeof-pointer-memaccess
6431 @opindex Wsizeof-pointer-memaccess
6432 @opindex Wno-sizeof-pointer-memaccess
6433 Warn for suspicious length parameters to certain string and memory built-in
6434 functions if the argument uses @code{sizeof}.  This warning triggers for
6435 example for @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not
6436 an array, but a pointer, and suggests a possible fix, or about
6437 @code{memcpy (&foo, ptr, sizeof (&foo));}.  @option{-Wsizeof-pointer-memaccess}
6438 also warns about calls to bounded string copy functions like @code{strncat}
6439 or @code{strncpy} that specify as the bound a @code{sizeof} expression of
6440 the source array.  For example, in the following function the call to
6441 @code{strncat} specifies the size of the source string as the bound.  That
6442 is almost certainly a mistake and so the call is diagnosed.
6443 @smallexample
6444 void make_file (const char *name)
6446   char path[PATH_MAX];
6447   strncpy (path, name, sizeof path - 1);
6448   strncat (path, ".text", sizeof ".text");
6449   @dots{}
6451 @end smallexample
6453 The @option{-Wsizeof-pointer-memaccess} option is enabled by @option{-Wall}.
6455 @item -Wsizeof-array-argument
6456 @opindex Wsizeof-array-argument
6457 @opindex Wno-sizeof-array-argument
6458 Warn when the @code{sizeof} operator is applied to a parameter that is
6459 declared as an array in a function definition.  This warning is enabled by
6460 default for C and C++ programs.
6462 @item -Wmemset-elt-size
6463 @opindex Wmemset-elt-size
6464 @opindex Wno-memset-elt-size
6465 Warn for suspicious calls to the @code{memset} built-in function, if the
6466 first argument references an array, and the third argument is a number
6467 equal to the number of elements, but not equal to the size of the array
6468 in memory.  This indicates that the user has omitted a multiplication by
6469 the element size.  This warning is enabled by @option{-Wall}.
6471 @item -Wmemset-transposed-args
6472 @opindex Wmemset-transposed-args
6473 @opindex Wno-memset-transposed-args
6474 Warn for suspicious calls to the @code{memset} built-in function, if the
6475 second argument is not zero and the third argument is zero.  This warns e.g.@
6476 about @code{memset (buf, sizeof buf, 0)} where most probably
6477 @code{memset (buf, 0, sizeof buf)} was meant instead.  The diagnostics
6478 is only emitted if the third argument is literal zero.  If it is some
6479 expression that is folded to zero, a cast of zero to some type, etc., 
6480 it is far less likely that the user has mistakenly exchanged the arguments 
6481 and no warning is emitted.  This warning is enabled by @option{-Wall}.
6483 @item -Waddress
6484 @opindex Waddress
6485 @opindex Wno-address
6486 Warn about suspicious uses of memory addresses. These include using
6487 the address of a function in a conditional expression, such as
6488 @code{void func(void); if (func)}, and comparisons against the memory
6489 address of a string literal, such as @code{if (x == "abc")}.  Such
6490 uses typically indicate a programmer error: the address of a function
6491 always evaluates to true, so their use in a conditional usually
6492 indicate that the programmer forgot the parentheses in a function
6493 call; and comparisons against string literals result in unspecified
6494 behavior and are not portable in C, so they usually indicate that the
6495 programmer intended to use @code{strcmp}.  This warning is enabled by
6496 @option{-Wall}.
6498 @item -Wlogical-op
6499 @opindex Wlogical-op
6500 @opindex Wno-logical-op
6501 Warn about suspicious uses of logical operators in expressions.
6502 This includes using logical operators in contexts where a
6503 bit-wise operator is likely to be expected.  Also warns when
6504 the operands of a logical operator are the same:
6505 @smallexample
6506 extern int a;
6507 if (a < 0 && a < 0) @{ @dots{} @}
6508 @end smallexample
6510 @item -Wlogical-not-parentheses
6511 @opindex Wlogical-not-parentheses
6512 @opindex Wno-logical-not-parentheses
6513 Warn about logical not used on the left hand side operand of a comparison.
6514 This option does not warn if the right operand is considered to be a boolean
6515 expression.  Its purpose is to detect suspicious code like the following:
6516 @smallexample
6517 int a;
6518 @dots{}
6519 if (!a > 1) @{ @dots{} @}
6520 @end smallexample
6522 It is possible to suppress the warning by wrapping the LHS into
6523 parentheses:
6524 @smallexample
6525 if ((!a) > 1) @{ @dots{} @}
6526 @end smallexample
6528 This warning is enabled by @option{-Wall}.
6530 @item -Waggregate-return
6531 @opindex Waggregate-return
6532 @opindex Wno-aggregate-return
6533 Warn if any functions that return structures or unions are defined or
6534 called.  (In languages where you can return an array, this also elicits
6535 a warning.)
6537 @item -Wno-aggressive-loop-optimizations
6538 @opindex Wno-aggressive-loop-optimizations
6539 @opindex Waggressive-loop-optimizations
6540 Warn if in a loop with constant number of iterations the compiler detects
6541 undefined behavior in some statement during one or more of the iterations.
6543 @item -Wno-attributes
6544 @opindex Wno-attributes
6545 @opindex Wattributes
6546 Do not warn if an unexpected @code{__attribute__} is used, such as
6547 unrecognized attributes, function attributes applied to variables,
6548 etc.  This does not stop errors for incorrect use of supported
6549 attributes.
6551 @item -Wno-builtin-declaration-mismatch
6552 @opindex Wno-builtin-declaration-mismatch
6553 @opindex Wbuiltin-declaration-mismatch
6554 Warn if a built-in function is declared with the wrong signature or 
6555 as non-function.
6556 This warning is enabled by default.
6558 @item -Wno-builtin-macro-redefined
6559 @opindex Wno-builtin-macro-redefined
6560 @opindex Wbuiltin-macro-redefined
6561 Do not warn if certain built-in macros are redefined.  This suppresses
6562 warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
6563 @code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
6565 @item -Wstrict-prototypes @r{(C and Objective-C only)}
6566 @opindex Wstrict-prototypes
6567 @opindex Wno-strict-prototypes
6568 Warn if a function is declared or defined without specifying the
6569 argument types.  (An old-style function definition is permitted without
6570 a warning if preceded by a declaration that specifies the argument
6571 types.)
6573 @item -Wold-style-declaration @r{(C and Objective-C only)}
6574 @opindex Wold-style-declaration
6575 @opindex Wno-old-style-declaration
6576 Warn for obsolescent usages, according to the C Standard, in a
6577 declaration. For example, warn if storage-class specifiers like
6578 @code{static} are not the first things in a declaration.  This warning
6579 is also enabled by @option{-Wextra}.
6581 @item -Wold-style-definition @r{(C and Objective-C only)}
6582 @opindex Wold-style-definition
6583 @opindex Wno-old-style-definition
6584 Warn if an old-style function definition is used.  A warning is given
6585 even if there is a previous prototype.
6587 @item -Wmissing-parameter-type @r{(C and Objective-C only)}
6588 @opindex Wmissing-parameter-type
6589 @opindex Wno-missing-parameter-type
6590 A function parameter is declared without a type specifier in K&R-style
6591 functions:
6593 @smallexample
6594 void foo(bar) @{ @}
6595 @end smallexample
6597 This warning is also enabled by @option{-Wextra}.
6599 @item -Wmissing-prototypes @r{(C and Objective-C only)}
6600 @opindex Wmissing-prototypes
6601 @opindex Wno-missing-prototypes
6602 Warn if a global function is defined without a previous prototype
6603 declaration.  This warning is issued even if the definition itself
6604 provides a prototype.  Use this option to detect global functions
6605 that do not have a matching prototype declaration in a header file.
6606 This option is not valid for C++ because all function declarations
6607 provide prototypes and a non-matching declaration declares an
6608 overload rather than conflict with an earlier declaration.
6609 Use @option{-Wmissing-declarations} to detect missing declarations in C++.
6611 @item -Wmissing-declarations
6612 @opindex Wmissing-declarations
6613 @opindex Wno-missing-declarations
6614 Warn if a global function is defined without a previous declaration.
6615 Do so even if the definition itself provides a prototype.
6616 Use this option to detect global functions that are not declared in
6617 header files.  In C, no warnings are issued for functions with previous
6618 non-prototype declarations; use @option{-Wmissing-prototypes} to detect
6619 missing prototypes.  In C++, no warnings are issued for function templates,
6620 or for inline functions, or for functions in anonymous namespaces.
6622 @item -Wmissing-field-initializers
6623 @opindex Wmissing-field-initializers
6624 @opindex Wno-missing-field-initializers
6625 @opindex W
6626 @opindex Wextra
6627 @opindex Wno-extra
6628 Warn if a structure's initializer has some fields missing.  For
6629 example, the following code causes such a warning, because
6630 @code{x.h} is implicitly zero:
6632 @smallexample
6633 struct s @{ int f, g, h; @};
6634 struct s x = @{ 3, 4 @};
6635 @end smallexample
6637 This option does not warn about designated initializers, so the following
6638 modification does not trigger a warning:
6640 @smallexample
6641 struct s @{ int f, g, h; @};
6642 struct s x = @{ .f = 3, .g = 4 @};
6643 @end smallexample
6645 In C this option does not warn about the universal zero initializer
6646 @samp{@{ 0 @}}:
6648 @smallexample
6649 struct s @{ int f, g, h; @};
6650 struct s x = @{ 0 @};
6651 @end smallexample
6653 Likewise, in C++ this option does not warn about the empty @{ @}
6654 initializer, for example:
6656 @smallexample
6657 struct s @{ int f, g, h; @};
6658 s x = @{ @};
6659 @end smallexample
6661 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
6662 warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.
6664 @item -Wno-multichar
6665 @opindex Wno-multichar
6666 @opindex Wmultichar
6667 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
6668 Usually they indicate a typo in the user's code, as they have
6669 implementation-defined values, and should not be used in portable code.
6671 @item -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]}
6672 @opindex Wnormalized=
6673 @opindex Wnormalized
6674 @opindex Wno-normalized
6675 @cindex NFC
6676 @cindex NFKC
6677 @cindex character set, input normalization
6678 In ISO C and ISO C++, two identifiers are different if they are
6679 different sequences of characters.  However, sometimes when characters
6680 outside the basic ASCII character set are used, you can have two
6681 different character sequences that look the same.  To avoid confusion,
6682 the ISO 10646 standard sets out some @dfn{normalization rules} which
6683 when applied ensure that two sequences that look the same are turned into
6684 the same sequence.  GCC can warn you if you are using identifiers that
6685 have not been normalized; this option controls that warning.
6687 There are four levels of warning supported by GCC@.  The default is
6688 @option{-Wnormalized=nfc}, which warns about any identifier that is
6689 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
6690 recommended form for most uses.  It is equivalent to
6691 @option{-Wnormalized}.
6693 Unfortunately, there are some characters allowed in identifiers by
6694 ISO C and ISO C++ that, when turned into NFC, are not allowed in 
6695 identifiers.  That is, there's no way to use these symbols in portable
6696 ISO C or C++ and have all your identifiers in NFC@.
6697 @option{-Wnormalized=id} suppresses the warning for these characters.
6698 It is hoped that future versions of the standards involved will correct
6699 this, which is why this option is not the default.
6701 You can switch the warning off for all characters by writing
6702 @option{-Wnormalized=none} or @option{-Wno-normalized}.  You should
6703 only do this if you are using some other normalization scheme (like
6704 ``D''), because otherwise you can easily create bugs that are
6705 literally impossible to see.
6707 Some characters in ISO 10646 have distinct meanings but look identical
6708 in some fonts or display methodologies, especially once formatting has
6709 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
6710 LETTER N'', displays just like a regular @code{n} that has been
6711 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
6712 normalization scheme to convert all these into a standard form as
6713 well, and GCC warns if your code is not in NFKC if you use
6714 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
6715 about every identifier that contains the letter O because it might be
6716 confused with the digit 0, and so is not the default, but may be
6717 useful as a local coding convention if the programming environment 
6718 cannot be fixed to display these characters distinctly.
6720 @item -Wno-deprecated
6721 @opindex Wno-deprecated
6722 @opindex Wdeprecated
6723 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
6725 @item -Wno-deprecated-declarations
6726 @opindex Wno-deprecated-declarations
6727 @opindex Wdeprecated-declarations
6728 Do not warn about uses of functions (@pxref{Function Attributes}),
6729 variables (@pxref{Variable Attributes}), and types (@pxref{Type
6730 Attributes}) marked as deprecated by using the @code{deprecated}
6731 attribute.
6733 @item -Wno-overflow
6734 @opindex Wno-overflow
6735 @opindex Woverflow
6736 Do not warn about compile-time overflow in constant expressions.
6738 @item -Wno-odr
6739 @opindex Wno-odr
6740 @opindex Wodr
6741 Warn about One Definition Rule violations during link-time optimization.
6742 Requires @option{-flto-odr-type-merging} to be enabled.  Enabled by default.
6744 @item -Wopenmp-simd
6745 @opindex Wopenm-simd
6746 Warn if the vectorizer cost model overrides the OpenMP
6747 simd directive set by user.  The @option{-fsimd-cost-model=unlimited}
6748 option can be used to relax the cost model.
6750 @item -Woverride-init @r{(C and Objective-C only)}
6751 @opindex Woverride-init
6752 @opindex Wno-override-init
6753 @opindex W
6754 @opindex Wextra
6755 @opindex Wno-extra
6756 Warn if an initialized field without side effects is overridden when
6757 using designated initializers (@pxref{Designated Inits, , Designated
6758 Initializers}).
6760 This warning is included in @option{-Wextra}.  To get other
6761 @option{-Wextra} warnings without this one, use @option{-Wextra
6762 -Wno-override-init}.
6764 @item -Woverride-init-side-effects @r{(C and Objective-C only)}
6765 @opindex Woverride-init-side-effects
6766 @opindex Wno-override-init-side-effects
6767 Warn if an initialized field with side effects is overridden when
6768 using designated initializers (@pxref{Designated Inits, , Designated
6769 Initializers}).  This warning is enabled by default.
6771 @item -Wpacked
6772 @opindex Wpacked
6773 @opindex Wno-packed
6774 Warn if a structure is given the packed attribute, but the packed
6775 attribute has no effect on the layout or size of the structure.
6776 Such structures may be mis-aligned for little benefit.  For
6777 instance, in this code, the variable @code{f.x} in @code{struct bar}
6778 is misaligned even though @code{struct bar} does not itself
6779 have the packed attribute:
6781 @smallexample
6782 @group
6783 struct foo @{
6784   int x;
6785   char a, b, c, d;
6786 @} __attribute__((packed));
6787 struct bar @{
6788   char z;
6789   struct foo f;
6791 @end group
6792 @end smallexample
6794 @item -Wpacked-bitfield-compat
6795 @opindex Wpacked-bitfield-compat
6796 @opindex Wno-packed-bitfield-compat
6797 The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
6798 on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
6799 the change can lead to differences in the structure layout.  GCC
6800 informs you when the offset of such a field has changed in GCC 4.4.
6801 For example there is no longer a 4-bit padding between field @code{a}
6802 and @code{b} in this structure:
6804 @smallexample
6805 struct foo
6807   char a:4;
6808   char b:8;
6809 @} __attribute__ ((packed));
6810 @end smallexample
6812 This warning is enabled by default.  Use
6813 @option{-Wno-packed-bitfield-compat} to disable this warning.
6815 @item -Wpacked-not-aligned @r{(C, C++, Objective-C and Objective-C++ only)}
6816 @opindex Wpacked-not-aligned
6817 @opindex Wno-packed-not-aligned
6818 Warn if a structure field with explicitly specified alignment in a
6819 packed struct or union is misaligned.  For example, a warning will
6820 be issued on @code{struct S}, like, @code{warning: alignment 1 of
6821 'struct S' is less than 8}, in this code:
6823 @smallexample
6824 @group
6825 struct __attribute__ ((aligned (8))) S8 @{ char a[8]; @};
6826 struct __attribute__ ((packed)) S @{
6827   struct S8 s8;
6829 @end group
6830 @end smallexample
6832 This warning is enabled by @option{-Wall}.
6834 @item -Wpadded
6835 @opindex Wpadded
6836 @opindex Wno-padded
6837 Warn if padding is included in a structure, either to align an element
6838 of the structure or to align the whole structure.  Sometimes when this
6839 happens it is possible to rearrange the fields of the structure to
6840 reduce the padding and so make the structure smaller.
6842 @item -Wredundant-decls
6843 @opindex Wredundant-decls
6844 @opindex Wno-redundant-decls
6845 Warn if anything is declared more than once in the same scope, even in
6846 cases where multiple declaration is valid and changes nothing.
6848 @item -Wno-restrict
6849 @opindex Wrestrict
6850 @opindex Wno-restrict
6851 Warn when an object referenced by a @code{restrict}-qualified parameter
6852 (or, in C++, a @code{__restrict}-qualified parameter) is aliased by another
6853 argument, or when copies between such objects overlap.  For example,
6854 the call to the @code{strcpy} function below attempts to truncate the string
6855 by replacing its initial characters with the last four.  However, because
6856 the call writes the terminating NUL into @code{a[4]}, the copies overlap and
6857 the call is diagnosed.
6859 @smallexample
6860 void foo (void)
6862   char a[] = "abcd1234";
6863   strcpy (a, a + 4);
6864   @dots{}
6866 @end smallexample
6867 The @option{-Wrestrict} option detects some instances of simple overlap
6868 even without optimization but works best at @option{-O2} and above.  It
6869 is included in @option{-Wall}.
6871 @item -Wnested-externs @r{(C and Objective-C only)}
6872 @opindex Wnested-externs
6873 @opindex Wno-nested-externs
6874 Warn if an @code{extern} declaration is encountered within a function.
6876 @item -Wno-inherited-variadic-ctor
6877 @opindex Winherited-variadic-ctor
6878 @opindex Wno-inherited-variadic-ctor
6879 Suppress warnings about use of C++11 inheriting constructors when the
6880 base class inherited from has a C variadic constructor; the warning is
6881 on by default because the ellipsis is not inherited.
6883 @item -Winline
6884 @opindex Winline
6885 @opindex Wno-inline
6886 Warn if a function that is declared as inline cannot be inlined.
6887 Even with this option, the compiler does not warn about failures to
6888 inline functions declared in system headers.
6890 The compiler uses a variety of heuristics to determine whether or not
6891 to inline a function.  For example, the compiler takes into account
6892 the size of the function being inlined and the amount of inlining
6893 that has already been done in the current function.  Therefore,
6894 seemingly insignificant changes in the source program can cause the
6895 warnings produced by @option{-Winline} to appear or disappear.
6897 @item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
6898 @opindex Wno-invalid-offsetof
6899 @opindex Winvalid-offsetof
6900 Suppress warnings from applying the @code{offsetof} macro to a non-POD
6901 type.  According to the 2014 ISO C++ standard, applying @code{offsetof}
6902 to a non-standard-layout type is undefined.  In existing C++ implementations,
6903 however, @code{offsetof} typically gives meaningful results.
6904 This flag is for users who are aware that they are
6905 writing nonportable code and who have deliberately chosen to ignore the
6906 warning about it.
6908 The restrictions on @code{offsetof} may be relaxed in a future version
6909 of the C++ standard.
6911 @item -Wint-in-bool-context
6912 @opindex Wint-in-bool-context
6913 @opindex Wno-int-in-bool-context
6914 Warn for suspicious use of integer values where boolean values are expected,
6915 such as conditional expressions (?:) using non-boolean integer constants in
6916 boolean context, like @code{if (a <= b ? 2 : 3)}.  Or left shifting of signed
6917 integers in boolean context, like @code{for (a = 0; 1 << a; a++);}.  Likewise
6918 for all kinds of multiplications regardless of the data type.
6919 This warning is enabled by @option{-Wall}.
6921 @item -Wno-int-to-pointer-cast
6922 @opindex Wno-int-to-pointer-cast
6923 @opindex Wint-to-pointer-cast
6924 Suppress warnings from casts to pointer type of an integer of a
6925 different size. In C++, casting to a pointer type of smaller size is
6926 an error. @option{Wint-to-pointer-cast} is enabled by default.
6929 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
6930 @opindex Wno-pointer-to-int-cast
6931 @opindex Wpointer-to-int-cast
6932 Suppress warnings from casts from a pointer to an integer type of a
6933 different size.
6935 @item -Winvalid-pch
6936 @opindex Winvalid-pch
6937 @opindex Wno-invalid-pch
6938 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
6939 the search path but cannot be used.
6941 @item -Wlong-long
6942 @opindex Wlong-long
6943 @opindex Wno-long-long
6944 Warn if @code{long long} type is used.  This is enabled by either
6945 @option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
6946 modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
6948 @item -Wvariadic-macros
6949 @opindex Wvariadic-macros
6950 @opindex Wno-variadic-macros
6951 Warn if variadic macros are used in ISO C90 mode, or if the GNU
6952 alternate syntax is used in ISO C99 mode.  This is enabled by either
6953 @option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
6954 messages, use @option{-Wno-variadic-macros}.
6956 @item -Wvarargs
6957 @opindex Wvarargs
6958 @opindex Wno-varargs
6959 Warn upon questionable usage of the macros used to handle variable
6960 arguments like @code{va_start}.  This is default.  To inhibit the
6961 warning messages, use @option{-Wno-varargs}.
6963 @item -Wvector-operation-performance
6964 @opindex Wvector-operation-performance
6965 @opindex Wno-vector-operation-performance
6966 Warn if vector operation is not implemented via SIMD capabilities of the
6967 architecture.  Mainly useful for the performance tuning.
6968 Vector operation can be implemented @code{piecewise}, which means that the
6969 scalar operation is performed on every vector element; 
6970 @code{in parallel}, which means that the vector operation is implemented
6971 using scalars of wider type, which normally is more performance efficient;
6972 and @code{as a single scalar}, which means that vector fits into a
6973 scalar type.
6975 @item -Wno-virtual-move-assign
6976 @opindex Wvirtual-move-assign
6977 @opindex Wno-virtual-move-assign
6978 Suppress warnings about inheriting from a virtual base with a
6979 non-trivial C++11 move assignment operator.  This is dangerous because
6980 if the virtual base is reachable along more than one path, it is
6981 moved multiple times, which can mean both objects end up in the
6982 moved-from state.  If the move assignment operator is written to avoid
6983 moving from a moved-from object, this warning can be disabled.
6985 @item -Wvla
6986 @opindex Wvla
6987 @opindex Wno-vla
6988 Warn if a variable-length array is used in the code.
6989 @option{-Wno-vla} prevents the @option{-Wpedantic} warning of
6990 the variable-length array.
6992 @item -Wvla-larger-than=@var{n}
6993 If this option is used, the compiler will warn on uses of
6994 variable-length arrays where the size is either unbounded, or bounded
6995 by an argument that can be larger than @var{n} bytes.  This is similar
6996 to how @option{-Walloca-larger-than=@var{n}} works, but with
6997 variable-length arrays.
6999 Note that GCC may optimize small variable-length arrays of a known
7000 value into plain arrays, so this warning may not get triggered for
7001 such arrays.
7003 This warning is not enabled by @option{-Wall}, and is only active when
7004 @option{-ftree-vrp} is active (default for @option{-O2} and above).
7006 See also @option{-Walloca-larger-than=@var{n}}.
7008 @item -Wvolatile-register-var
7009 @opindex Wvolatile-register-var
7010 @opindex Wno-volatile-register-var
7011 Warn if a register variable is declared volatile.  The volatile
7012 modifier does not inhibit all optimizations that may eliminate reads
7013 and/or writes to register variables.  This warning is enabled by
7014 @option{-Wall}.
7016 @item -Wdisabled-optimization
7017 @opindex Wdisabled-optimization
7018 @opindex Wno-disabled-optimization
7019 Warn if a requested optimization pass is disabled.  This warning does
7020 not generally indicate that there is anything wrong with your code; it
7021 merely indicates that GCC's optimizers are unable to handle the code
7022 effectively.  Often, the problem is that your code is too big or too
7023 complex; GCC refuses to optimize programs when the optimization
7024 itself is likely to take inordinate amounts of time.
7026 @item -Wpointer-sign @r{(C and Objective-C only)}
7027 @opindex Wpointer-sign
7028 @opindex Wno-pointer-sign
7029 Warn for pointer argument passing or assignment with different signedness.
7030 This option is only supported for C and Objective-C@.  It is implied by
7031 @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
7032 @option{-Wno-pointer-sign}.
7034 @item -Wstack-protector
7035 @opindex Wstack-protector
7036 @opindex Wno-stack-protector
7037 This option is only active when @option{-fstack-protector} is active.  It
7038 warns about functions that are not protected against stack smashing.
7040 @item -Woverlength-strings
7041 @opindex Woverlength-strings
7042 @opindex Wno-overlength-strings
7043 Warn about string constants that are longer than the ``minimum
7044 maximum'' length specified in the C standard.  Modern compilers
7045 generally allow string constants that are much longer than the
7046 standard's minimum limit, but very portable programs should avoid
7047 using longer strings.
7049 The limit applies @emph{after} string constant concatenation, and does
7050 not count the trailing NUL@.  In C90, the limit was 509 characters; in
7051 C99, it was raised to 4095.  C++98 does not specify a normative
7052 minimum maximum, so we do not diagnose overlength strings in C++@.
7054 This option is implied by @option{-Wpedantic}, and can be disabled with
7055 @option{-Wno-overlength-strings}.
7057 @item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
7058 @opindex Wunsuffixed-float-constants
7060 Issue a warning for any floating constant that does not have
7061 a suffix.  When used together with @option{-Wsystem-headers} it
7062 warns about such constants in system header files.  This can be useful
7063 when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
7064 from the decimal floating-point extension to C99.
7066 @item -Wno-designated-init @r{(C and Objective-C only)}
7067 Suppress warnings when a positional initializer is used to initialize
7068 a structure that has been marked with the @code{designated_init}
7069 attribute.
7071 @item -Whsa
7072 Issue a warning when HSAIL cannot be emitted for the compiled function or
7073 OpenMP construct.
7075 @end table
7077 @node Debugging Options
7078 @section Options for Debugging Your Program
7079 @cindex options, debugging
7080 @cindex debugging information options
7082 To tell GCC to emit extra information for use by a debugger, in almost 
7083 all cases you need only to add @option{-g} to your other options.
7085 GCC allows you to use @option{-g} with
7086 @option{-O}.  The shortcuts taken by optimized code may occasionally
7087 be surprising: some variables you declared may not exist
7088 at all; flow of control may briefly move where you did not expect it;
7089 some statements may not be executed because they compute constant
7090 results or their values are already at hand; some statements may
7091 execute in different places because they have been moved out of loops.
7092 Nevertheless it is possible to debug optimized output.  This makes
7093 it reasonable to use the optimizer for programs that might have bugs.
7095 If you are not using some other optimization option, consider
7096 using @option{-Og} (@pxref{Optimize Options}) with @option{-g}.  
7097 With no @option{-O} option at all, some compiler passes that collect
7098 information useful for debugging do not run at all, so that
7099 @option{-Og} may result in a better debugging experience.
7101 @table @gcctabopt
7102 @item -g
7103 @opindex g
7104 Produce debugging information in the operating system's native format
7105 (stabs, COFF, XCOFF, or DWARF)@.  GDB can work with this debugging
7106 information.
7108 On most systems that use stabs format, @option{-g} enables use of extra
7109 debugging information that only GDB can use; this extra information
7110 makes debugging work better in GDB but probably makes other debuggers
7111 crash or
7112 refuse to read the program.  If you want to control for certain whether
7113 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
7114 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
7116 @item -ggdb
7117 @opindex ggdb
7118 Produce debugging information for use by GDB@.  This means to use the
7119 most expressive format available (DWARF, stabs, or the native format
7120 if neither of those are supported), including GDB extensions if at all
7121 possible.
7123 @item -gdwarf
7124 @itemx -gdwarf-@var{version}
7125 @opindex gdwarf
7126 Produce debugging information in DWARF format (if that is supported).
7127 The value of @var{version} may be either 2, 3, 4 or 5; the default version
7128 for most targets is 4.  DWARF Version 5 is only experimental.
7130 Note that with DWARF Version 2, some ports require and always
7131 use some non-conflicting DWARF 3 extensions in the unwind tables.
7133 Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
7134 for maximum benefit.
7136 GCC no longer supports DWARF Version 1, which is substantially
7137 different than Version 2 and later.  For historical reasons, some
7138 other DWARF-related options such as
7139 @option{-fno-dwarf2-cfi-asm}) retain a reference to DWARF Version 2
7140 in their names, but apply to all currently-supported versions of DWARF.
7142 @item -gstabs
7143 @opindex gstabs
7144 Produce debugging information in stabs format (if that is supported),
7145 without GDB extensions.  This is the format used by DBX on most BSD
7146 systems.  On MIPS, Alpha and System V Release 4 systems this option
7147 produces stabs debugging output that is not understood by DBX@.
7148 On System V Release 4 systems this option requires the GNU assembler.
7150 @item -gstabs+
7151 @opindex gstabs+
7152 Produce debugging information in stabs format (if that is supported),
7153 using GNU extensions understood only by the GNU debugger (GDB)@.  The
7154 use of these extensions is likely to make other debuggers crash or
7155 refuse to read the program.
7157 @item -gxcoff
7158 @opindex gxcoff
7159 Produce debugging information in XCOFF format (if that is supported).
7160 This is the format used by the DBX debugger on IBM RS/6000 systems.
7162 @item -gxcoff+
7163 @opindex gxcoff+
7164 Produce debugging information in XCOFF format (if that is supported),
7165 using GNU extensions understood only by the GNU debugger (GDB)@.  The
7166 use of these extensions is likely to make other debuggers crash or
7167 refuse to read the program, and may cause assemblers other than the GNU
7168 assembler (GAS) to fail with an error.
7170 @item -gvms
7171 @opindex gvms
7172 Produce debugging information in Alpha/VMS debug format (if that is
7173 supported).  This is the format used by DEBUG on Alpha/VMS systems.
7175 @item -g@var{level}
7176 @itemx -ggdb@var{level}
7177 @itemx -gstabs@var{level}
7178 @itemx -gxcoff@var{level}
7179 @itemx -gvms@var{level}
7180 Request debugging information and also use @var{level} to specify how
7181 much information.  The default level is 2.
7183 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
7184 @option{-g}.
7186 Level 1 produces minimal information, enough for making backtraces in
7187 parts of the program that you don't plan to debug.  This includes
7188 descriptions of functions and external variables, and line number
7189 tables, but no information about local variables.
7191 Level 3 includes extra information, such as all the macro definitions
7192 present in the program.  Some debuggers support macro expansion when
7193 you use @option{-g3}.
7195 @option{-gdwarf} does not accept a concatenated debug level, to avoid
7196 confusion with @option{-gdwarf-@var{level}}.
7197 Instead use an additional @option{-g@var{level}} option to change the
7198 debug level for DWARF.
7200 @item -feliminate-unused-debug-symbols
7201 @opindex feliminate-unused-debug-symbols
7202 Produce debugging information in stabs format (if that is supported),
7203 for only symbols that are actually used.
7205 @item -femit-class-debug-always
7206 @opindex femit-class-debug-always
7207 Instead of emitting debugging information for a C++ class in only one
7208 object file, emit it in all object files using the class.  This option
7209 should be used only with debuggers that are unable to handle the way GCC
7210 normally emits debugging information for classes because using this
7211 option increases the size of debugging information by as much as a
7212 factor of two.
7214 @item -fno-merge-debug-strings
7215 @opindex fmerge-debug-strings
7216 @opindex fno-merge-debug-strings
7217 Direct the linker to not merge together strings in the debugging
7218 information that are identical in different object files.  Merging is
7219 not supported by all assemblers or linkers.  Merging decreases the size
7220 of the debug information in the output file at the cost of increasing
7221 link processing time.  Merging is enabled by default.
7223 @item -fdebug-prefix-map=@var{old}=@var{new}
7224 @opindex fdebug-prefix-map
7225 When compiling files residing in directory @file{@var{old}}, record
7226 debugging information describing them as if the files resided in
7227 directory @file{@var{new}} instead.  This can be used to replace a
7228 build-time path with an install-time path in the debug info.  It can
7229 also be used to change an absolute path to a relative path by using
7230 @file{.} for @var{new}.  This can give more reproducible builds, which
7231 are location independent, but may require an extra command to tell GDB
7232 where to find the source files. See also @option{-ffile-prefix-map}.
7234 @item -fvar-tracking
7235 @opindex fvar-tracking
7236 Run variable tracking pass.  It computes where variables are stored at each
7237 position in code.  Better debugging information is then generated
7238 (if the debugging information format supports this information).
7240 It is enabled by default when compiling with optimization (@option{-Os},
7241 @option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
7242 the debug info format supports it.
7244 @item -fvar-tracking-assignments
7245 @opindex fvar-tracking-assignments
7246 @opindex fno-var-tracking-assignments
7247 Annotate assignments to user variables early in the compilation and
7248 attempt to carry the annotations over throughout the compilation all the
7249 way to the end, in an attempt to improve debug information while
7250 optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
7252 It can be enabled even if var-tracking is disabled, in which case
7253 annotations are created and maintained, but discarded at the end.
7254 By default, this flag is enabled together with @option{-fvar-tracking},
7255 except when selective scheduling is enabled.
7257 @item -gsplit-dwarf
7258 @opindex gsplit-dwarf
7259 Separate as much DWARF debugging information as possible into a
7260 separate output file with the extension @file{.dwo}.  This option allows
7261 the build system to avoid linking files with debug information.  To
7262 be useful, this option requires a debugger capable of reading @file{.dwo}
7263 files.
7265 @item -gpubnames
7266 @opindex gpubnames
7267 Generate DWARF @code{.debug_pubnames} and @code{.debug_pubtypes} sections.
7269 @item -ggnu-pubnames
7270 @opindex ggnu-pubnames
7271 Generate @code{.debug_pubnames} and @code{.debug_pubtypes} sections in a format
7272 suitable for conversion into a GDB@ index.  This option is only useful
7273 with a linker that can produce GDB@ index version 7.
7275 @item -fdebug-types-section
7276 @opindex fdebug-types-section
7277 @opindex fno-debug-types-section
7278 When using DWARF Version 4 or higher, type DIEs can be put into
7279 their own @code{.debug_types} section instead of making them part of the
7280 @code{.debug_info} section.  It is more efficient to put them in a separate
7281 comdat section since the linker can then remove duplicates.
7282 But not all DWARF consumers support @code{.debug_types} sections yet
7283 and on some objects @code{.debug_types} produces larger instead of smaller
7284 debugging information.
7286 @item -grecord-gcc-switches
7287 @itemx -gno-record-gcc-switches
7288 @opindex grecord-gcc-switches
7289 @opindex gno-record-gcc-switches
7290 This switch causes the command-line options used to invoke the
7291 compiler that may affect code generation to be appended to the
7292 DW_AT_producer attribute in DWARF debugging information.  The options
7293 are concatenated with spaces separating them from each other and from
7294 the compiler version.  
7295 It is enabled by default.
7296 See also @option{-frecord-gcc-switches} for another
7297 way of storing compiler options into the object file.  
7299 @item -gstrict-dwarf
7300 @opindex gstrict-dwarf
7301 Disallow using extensions of later DWARF standard version than selected
7302 with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
7303 DWARF extensions from later standard versions is allowed.
7305 @item -gno-strict-dwarf
7306 @opindex gno-strict-dwarf
7307 Allow using extensions of later DWARF standard version than selected with
7308 @option{-gdwarf-@var{version}}.
7310 @item -gas-loc-support
7311 @opindex gas-loc-support
7312 Inform the compiler that the assembler supports @code{.loc} directives.
7313 It may then use them for the assembler to generate DWARF2+ line number
7314 tables.
7316 This is generally desirable, because assembler-generated line-number
7317 tables are a lot more compact than those the compiler can generate
7318 itself.
7320 This option will be enabled by default if, at GCC configure time, the
7321 assembler was found to support such directives.
7323 @item -gno-as-loc-support
7324 @opindex gno-as-loc-support
7325 Force GCC to generate DWARF2+ line number tables internally, if DWARF2+
7326 line number tables are to be generated.
7328 @item gas-locview-support
7329 @opindex gas-locview-support
7330 Inform the compiler that the assembler supports @code{view} assignment
7331 and reset assertion checking in @code{.loc} directives.
7333 This option will be enabled by default if, at GCC configure time, the
7334 assembler was found to support them.
7336 @item gno-as-locview-support
7337 Force GCC to assign view numbers internally, if
7338 @option{-gvariable-location-views} are explicitly requested.
7340 @item -gcolumn-info
7341 @itemx -gno-column-info
7342 @opindex gcolumn-info
7343 @opindex gno-column-info
7344 Emit location column information into DWARF debugging information, rather
7345 than just file and line.
7346 This option is enabled by default.
7348 @item -gstatement-frontiers
7349 @itemx -gno-statement-frontiers
7350 @opindex gstatement-frontiers
7351 @opindex gno-statement-frontiers
7352 This option causes GCC to create markers in the internal representation
7353 at the beginning of statements, and to keep them roughly in place
7354 throughout compilation, using them to guide the output of @code{is_stmt}
7355 markers in the line number table.  This is enabled by default when
7356 compiling with optimization (@option{-Os}, @option{-O}, @option{-O2},
7357 @dots{}), and outputting DWARF 2 debug information at the normal level.
7359 @item -gvariable-location-views
7360 @itemx -gvariable-location-views=incompat5
7361 @itemx -gno-variable-location-views
7362 @opindex gvariable-location-views
7363 @opindex gvariable-location-views=incompat5
7364 @opindex gno-variable-location-views
7365 Augment variable location lists with progressive view numbers implied
7366 from the line number table.  This enables debug information consumers to
7367 inspect state at certain points of the program, even if no instructions
7368 associated with the corresponding source locations are present at that
7369 point.  If the assembler lacks support for view numbers in line number
7370 tables, this will cause the compiler to emit the line number table,
7371 which generally makes them somewhat less compact.  The augmented line
7372 number tables and location lists are fully backward-compatible, so they
7373 can be consumed by debug information consumers that are not aware of
7374 these augmentations, but they won't derive any benefit from them either.
7376 This is enabled by default when outputting DWARF 2 debug information at
7377 the normal level, as long as there is assembler support,
7378 @option{-fvar-tracking-assignments} is enabled and
7379 @option{-gstrict-dwarf} is not.  When assembler support is not
7380 available, this may still be enabled, but it will force GCC to output
7381 internal line number tables, and if
7382 @option{-ginternal-reset-location-views} is not enabled, that will most
7383 certainly lead to silently mismatching location views.
7385 There is a proposed representation for view numbers that is not backward
7386 compatible with the location list format introduced in DWARF 5, that can
7387 be enabled with @option{-gvariable-location-views=incompat5}.  This
7388 option may be removed in the future, is only provided as a reference
7389 implementation of the proposed representation.  Debug information
7390 consumers are not expected to support this extended format, and they
7391 would be rendered unable to decode location lists using it.
7393 @item -ginternal-reset-location-views
7394 @itemx -gnointernal-reset-location-views
7395 @opindex ginternal-reset-location-views
7396 @opindex gno-internal-reset-location-views
7397 Attempt to determine location views that can be omitted from location
7398 view lists.  This requires the compiler to have very accurate insn
7399 length estimates, which isn't always the case, and it may cause
7400 incorrect view lists to be generated silently when using an assembler
7401 that does not support location view lists.  The GNU assembler will flag
7402 any such error as a @code{view number mismatch}.  This is only enabled
7403 on ports that define a reliable estimation function.
7405 @item -ginline-points
7406 @itemx -gno-inline-points
7407 @opindex ginline-points
7408 @opindex gno-inline-points
7409 Generate extended debug information for inlined functions.  Location
7410 view tracking markers are inserted at inlined entry points, so that
7411 address and view numbers can be computed and output in debug
7412 information.  This can be enabled independently of location views, in
7413 which case the view numbers won't be output, but it can only be enabled
7414 along with statement frontiers, and it is only enabled by default if
7415 location views are enabled.
7417 @item -gz@r{[}=@var{type}@r{]}
7418 @opindex gz
7419 Produce compressed debug sections in DWARF format, if that is supported.
7420 If @var{type} is not given, the default type depends on the capabilities
7421 of the assembler and linker used.  @var{type} may be one of
7422 @samp{none} (don't compress debug sections), @samp{zlib} (use zlib
7423 compression in ELF gABI format), or @samp{zlib-gnu} (use zlib
7424 compression in traditional GNU format).  If the linker doesn't support
7425 writing compressed debug sections, the option is rejected.  Otherwise,
7426 if the assembler does not support them, @option{-gz} is silently ignored
7427 when producing object files.
7429 @item -femit-struct-debug-baseonly
7430 @opindex femit-struct-debug-baseonly
7431 Emit debug information for struct-like types
7432 only when the base name of the compilation source file
7433 matches the base name of file in which the struct is defined.
7435 This option substantially reduces the size of debugging information,
7436 but at significant potential loss in type information to the debugger.
7437 See @option{-femit-struct-debug-reduced} for a less aggressive option.
7438 See @option{-femit-struct-debug-detailed} for more detailed control.
7440 This option works only with DWARF debug output.
7442 @item -femit-struct-debug-reduced
7443 @opindex femit-struct-debug-reduced
7444 Emit debug information for struct-like types
7445 only when the base name of the compilation source file
7446 matches the base name of file in which the type is defined,
7447 unless the struct is a template or defined in a system header.
7449 This option significantly reduces the size of debugging information,
7450 with some potential loss in type information to the debugger.
7451 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
7452 See @option{-femit-struct-debug-detailed} for more detailed control.
7454 This option works only with DWARF debug output.
7456 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
7457 @opindex femit-struct-debug-detailed
7458 Specify the struct-like types
7459 for which the compiler generates debug information.
7460 The intent is to reduce duplicate struct debug information
7461 between different object files within the same program.
7463 This option is a detailed version of
7464 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
7465 which serves for most needs.
7467 A specification has the syntax@*
7468 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
7470 The optional first word limits the specification to
7471 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
7472 A struct type is used directly when it is the type of a variable, member.
7473 Indirect uses arise through pointers to structs.
7474 That is, when use of an incomplete struct is valid, the use is indirect.
7475 An example is
7476 @samp{struct one direct; struct two * indirect;}.
7478 The optional second word limits the specification to
7479 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
7480 Generic structs are a bit complicated to explain.
7481 For C++, these are non-explicit specializations of template classes,
7482 or non-template classes within the above.
7483 Other programming languages have generics,
7484 but @option{-femit-struct-debug-detailed} does not yet implement them.
7486 The third word specifies the source files for those
7487 structs for which the compiler should emit debug information.
7488 The values @samp{none} and @samp{any} have the normal meaning.
7489 The value @samp{base} means that
7490 the base of name of the file in which the type declaration appears
7491 must match the base of the name of the main compilation file.
7492 In practice, this means that when compiling @file{foo.c}, debug information
7493 is generated for types declared in that file and @file{foo.h},
7494 but not other header files.
7495 The value @samp{sys} means those types satisfying @samp{base}
7496 or declared in system or compiler headers.
7498 You may need to experiment to determine the best settings for your application.
7500 The default is @option{-femit-struct-debug-detailed=all}.
7502 This option works only with DWARF debug output.
7504 @item -fno-dwarf2-cfi-asm
7505 @opindex fdwarf2-cfi-asm
7506 @opindex fno-dwarf2-cfi-asm
7507 Emit DWARF unwind info as compiler generated @code{.eh_frame} section
7508 instead of using GAS @code{.cfi_*} directives.
7510 @item -fno-eliminate-unused-debug-types
7511 @opindex feliminate-unused-debug-types
7512 @opindex fno-eliminate-unused-debug-types
7513 Normally, when producing DWARF output, GCC avoids producing debug symbol 
7514 output for types that are nowhere used in the source file being compiled.
7515 Sometimes it is useful to have GCC emit debugging
7516 information for all types declared in a compilation
7517 unit, regardless of whether or not they are actually used
7518 in that compilation unit, for example 
7519 if, in the debugger, you want to cast a value to a type that is
7520 not actually used in your program (but is declared).  More often,
7521 however, this results in a significant amount of wasted space.
7522 @end table
7524 @node Optimize Options
7525 @section Options That Control Optimization
7526 @cindex optimize options
7527 @cindex options, optimization
7529 These options control various sorts of optimizations.
7531 Without any optimization option, the compiler's goal is to reduce the
7532 cost of compilation and to make debugging produce the expected
7533 results.  Statements are independent: if you stop the program with a
7534 breakpoint between statements, you can then assign a new value to any
7535 variable or change the program counter to any other statement in the
7536 function and get exactly the results you expect from the source
7537 code.
7539 Turning on optimization flags makes the compiler attempt to improve
7540 the performance and/or code size at the expense of compilation time
7541 and possibly the ability to debug the program.
7543 The compiler performs optimization based on the knowledge it has of the
7544 program.  Compiling multiple files at once to a single output file mode allows
7545 the compiler to use information gained from all of the files when compiling
7546 each of them.
7548 Not all optimizations are controlled directly by a flag.  Only
7549 optimizations that have a flag are listed in this section.
7551 Most optimizations are only enabled if an @option{-O} level is set on
7552 the command line.  Otherwise they are disabled, even if individual
7553 optimization flags are specified.
7555 Depending on the target and how GCC was configured, a slightly different
7556 set of optimizations may be enabled at each @option{-O} level than
7557 those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
7558 to find out the exact set of optimizations that are enabled at each level.
7559 @xref{Overall Options}, for examples.
7561 @table @gcctabopt
7562 @item -O
7563 @itemx -O1
7564 @opindex O
7565 @opindex O1
7566 Optimize.  Optimizing compilation takes somewhat more time, and a lot
7567 more memory for a large function.
7569 With @option{-O}, the compiler tries to reduce code size and execution
7570 time, without performing any optimizations that take a great deal of
7571 compilation time.
7573 @option{-O} turns on the following optimization flags:
7574 @gccoptlist{
7575 -fauto-inc-dec @gol
7576 -fbranch-count-reg @gol
7577 -fcombine-stack-adjustments @gol
7578 -fcompare-elim @gol
7579 -fcprop-registers @gol
7580 -fdce @gol
7581 -fdefer-pop @gol
7582 -fdelayed-branch @gol
7583 -fdse @gol
7584 -fforward-propagate @gol
7585 -fguess-branch-probability @gol
7586 -fif-conversion2 @gol
7587 -fif-conversion @gol
7588 -finline-functions-called-once @gol
7589 -fipa-pure-const @gol
7590 -fipa-profile @gol
7591 -fipa-reference @gol
7592 -fmerge-constants @gol
7593 -fmove-loop-invariants @gol
7594 -fomit-frame-pointer @gol
7595 -freorder-blocks @gol
7596 -fshrink-wrap @gol
7597 -fshrink-wrap-separate @gol
7598 -fsplit-wide-types @gol
7599 -fssa-backprop @gol
7600 -fssa-phiopt @gol
7601 -ftree-bit-ccp @gol
7602 -ftree-ccp @gol
7603 -ftree-ch @gol
7604 -ftree-coalesce-vars @gol
7605 -ftree-copy-prop @gol
7606 -ftree-dce @gol
7607 -ftree-dominator-opts @gol
7608 -ftree-dse @gol
7609 -ftree-forwprop @gol
7610 -ftree-fre @gol
7611 -ftree-phiprop @gol
7612 -ftree-sink @gol
7613 -ftree-slsr @gol
7614 -ftree-sra @gol
7615 -ftree-pta @gol
7616 -ftree-ter @gol
7617 -funit-at-a-time}
7619 @item -O2
7620 @opindex O2
7621 Optimize even more.  GCC performs nearly all supported optimizations
7622 that do not involve a space-speed tradeoff.
7623 As compared to @option{-O}, this option increases both compilation time
7624 and the performance of the generated code.
7626 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
7627 also turns on the following optimization flags:
7628 @gccoptlist{-fthread-jumps @gol
7629 -falign-functions  -falign-jumps @gol
7630 -falign-loops  -falign-labels @gol
7631 -fcaller-saves @gol
7632 -fcrossjumping @gol
7633 -fcse-follow-jumps  -fcse-skip-blocks @gol
7634 -fdelete-null-pointer-checks @gol
7635 -fdevirtualize -fdevirtualize-speculatively @gol
7636 -fexpensive-optimizations @gol
7637 -fgcse  -fgcse-lm  @gol
7638 -fhoist-adjacent-loads @gol
7639 -finline-small-functions @gol
7640 -findirect-inlining @gol
7641 -fipa-cp @gol
7642 -fipa-bit-cp @gol
7643 -fipa-vrp @gol
7644 -fipa-sra @gol
7645 -fipa-icf @gol
7646 -fisolate-erroneous-paths-dereference @gol
7647 -flra-remat @gol
7648 -foptimize-sibling-calls @gol
7649 -foptimize-strlen @gol
7650 -fpartial-inlining @gol
7651 -fpeephole2 @gol
7652 -freorder-blocks-algorithm=stc @gol
7653 -freorder-blocks-and-partition -freorder-functions @gol
7654 -frerun-cse-after-loop  @gol
7655 -fsched-interblock  -fsched-spec @gol
7656 -fschedule-insns  -fschedule-insns2 @gol
7657 -fstore-merging @gol
7658 -fstrict-aliasing @gol
7659 -ftree-builtin-call-dce @gol
7660 -ftree-switch-conversion -ftree-tail-merge @gol
7661 -fcode-hoisting @gol
7662 -ftree-pre @gol
7663 -ftree-vrp @gol
7664 -fipa-ra}
7666 Please note the warning under @option{-fgcse} about
7667 invoking @option{-O2} on programs that use computed gotos.
7669 @item -O3
7670 @opindex O3
7671 Optimize yet more.  @option{-O3} turns on all optimizations specified
7672 by @option{-O2} and also turns on the following optimization flags:
7673 @gccoptlist{-finline-functions @gol
7674 -funswitch-loops @gol
7675 -fpredictive-commoning @gol
7676 -fgcse-after-reload @gol
7677 -ftree-loop-vectorize @gol
7678 -ftree-loop-distribution @gol
7679 -ftree-loop-distribute-patterns @gol
7680 -floop-interchange @gol
7681 -floop-unroll-and-jam @gol
7682 -fsplit-paths @gol
7683 -ftree-slp-vectorize @gol
7684 -fvect-cost-model @gol
7685 -ftree-partial-pre @gol
7686 -fpeel-loops @gol
7687 -fipa-cp-clone}
7689 @item -O0
7690 @opindex O0
7691 Reduce compilation time and make debugging produce the expected
7692 results.  This is the default.
7694 @item -Os
7695 @opindex Os
7696 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
7697 do not typically increase code size.  It also performs further
7698 optimizations designed to reduce code size.
7700 @option{-Os} disables the following optimization flags:
7701 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
7702 -falign-labels  -freorder-blocks  -freorder-blocks-algorithm=stc @gol
7703 -freorder-blocks-and-partition  -fprefetch-loop-arrays}
7705 @item -Ofast
7706 @opindex Ofast
7707 Disregard strict standards compliance.  @option{-Ofast} enables all
7708 @option{-O3} optimizations.  It also enables optimizations that are not
7709 valid for all standard-compliant programs.
7710 It turns on @option{-ffast-math} and the Fortran-specific
7711 @option{-fstack-arrays}, unless @option{-fmax-stack-var-size} is
7712 specified, and @option{-fno-protect-parens}.
7714 @item -Og
7715 @opindex Og
7716 Optimize debugging experience.  @option{-Og} enables optimizations
7717 that do not interfere with debugging. It should be the optimization
7718 level of choice for the standard edit-compile-debug cycle, offering
7719 a reasonable level of optimization while maintaining fast compilation
7720 and a good debugging experience.
7721 @end table
7723 If you use multiple @option{-O} options, with or without level numbers,
7724 the last such option is the one that is effective.
7726 Options of the form @option{-f@var{flag}} specify machine-independent
7727 flags.  Most flags have both positive and negative forms; the negative
7728 form of @option{-ffoo} is @option{-fno-foo}.  In the table
7729 below, only one of the forms is listed---the one you typically 
7730 use.  You can figure out the other form by either removing @samp{no-}
7731 or adding it.
7733 The following options control specific optimizations.  They are either
7734 activated by @option{-O} options or are related to ones that are.  You
7735 can use the following flags in the rare cases when ``fine-tuning'' of
7736 optimizations to be performed is desired.
7738 @table @gcctabopt
7739 @item -fno-defer-pop
7740 @opindex fno-defer-pop
7741 Always pop the arguments to each function call as soon as that function
7742 returns.  For machines that must pop arguments after a function call,
7743 the compiler normally lets arguments accumulate on the stack for several
7744 function calls and pops them all at once.
7746 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7748 @item -fforward-propagate
7749 @opindex fforward-propagate
7750 Perform a forward propagation pass on RTL@.  The pass tries to combine two
7751 instructions and checks if the result can be simplified.  If loop unrolling
7752 is active, two passes are performed and the second is scheduled after
7753 loop unrolling.
7755 This option is enabled by default at optimization levels @option{-O},
7756 @option{-O2}, @option{-O3}, @option{-Os}.
7758 @item -ffp-contract=@var{style}
7759 @opindex ffp-contract
7760 @option{-ffp-contract=off} disables floating-point expression contraction.
7761 @option{-ffp-contract=fast} enables floating-point expression contraction
7762 such as forming of fused multiply-add operations if the target has
7763 native support for them.
7764 @option{-ffp-contract=on} enables floating-point expression contraction
7765 if allowed by the language standard.  This is currently not implemented
7766 and treated equal to @option{-ffp-contract=off}.
7768 The default is @option{-ffp-contract=fast}.
7770 @item -fomit-frame-pointer
7771 @opindex fomit-frame-pointer
7772 Omit the frame pointer in functions that don't need one.  This avoids the
7773 instructions to save, set up and restore the frame pointer; on many targets
7774 it also makes an extra register available.
7776 On some targets this flag has no effect because the standard calling sequence
7777 always uses a frame pointer, so it cannot be omitted.
7779 Note that @option{-fno-omit-frame-pointer} doesn't guarantee the frame pointer
7780 is used in all functions.  Several targets always omit the frame pointer in
7781 leaf functions.
7783 Enabled by default at @option{-O} and higher.
7785 @item -foptimize-sibling-calls
7786 @opindex foptimize-sibling-calls
7787 Optimize sibling and tail recursive calls.
7789 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7791 @item -foptimize-strlen
7792 @opindex foptimize-strlen
7793 Optimize various standard C string functions (e.g. @code{strlen},
7794 @code{strchr} or @code{strcpy}) and
7795 their @code{_FORTIFY_SOURCE} counterparts into faster alternatives.
7797 Enabled at levels @option{-O2}, @option{-O3}.
7799 @item -fno-inline
7800 @opindex fno-inline
7801 Do not expand any functions inline apart from those marked with
7802 the @code{always_inline} attribute.  This is the default when not
7803 optimizing.
7805 Single functions can be exempted from inlining by marking them
7806 with the @code{noinline} attribute.
7808 @item -finline-small-functions
7809 @opindex finline-small-functions
7810 Integrate functions into their callers when their body is smaller than expected
7811 function call code (so overall size of program gets smaller).  The compiler
7812 heuristically decides which functions are simple enough to be worth integrating
7813 in this way.  This inlining applies to all functions, even those not declared
7814 inline.
7816 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7818 @item -findirect-inlining
7819 @opindex findirect-inlining
7820 Inline also indirect calls that are discovered to be known at compile
7821 time thanks to previous inlining.  This option has any effect only
7822 when inlining itself is turned on by the @option{-finline-functions}
7823 or @option{-finline-small-functions} options.
7825 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7827 @item -finline-functions
7828 @opindex finline-functions
7829 Consider all functions for inlining, even if they are not declared inline.
7830 The compiler heuristically decides which functions are worth integrating
7831 in this way.
7833 If all calls to a given function are integrated, and the function is
7834 declared @code{static}, then the function is normally not output as
7835 assembler code in its own right.
7837 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7839 @item -finline-functions-called-once
7840 @opindex finline-functions-called-once
7841 Consider all @code{static} functions called once for inlining into their
7842 caller even if they are not marked @code{inline}.  If a call to a given
7843 function is integrated, then the function is not output as assembler code
7844 in its own right.
7846 Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
7848 @item -fearly-inlining
7849 @opindex fearly-inlining
7850 Inline functions marked by @code{always_inline} and functions whose body seems
7851 smaller than the function call overhead early before doing
7852 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
7853 makes profiling significantly cheaper and usually inlining faster on programs
7854 having large chains of nested wrapper functions.
7856 Enabled by default.
7858 @item -fipa-sra
7859 @opindex fipa-sra
7860 Perform interprocedural scalar replacement of aggregates, removal of
7861 unused parameters and replacement of parameters passed by reference
7862 by parameters passed by value.
7864 Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
7866 @item -finline-limit=@var{n}
7867 @opindex finline-limit
7868 By default, GCC limits the size of functions that can be inlined.  This flag
7869 allows coarse control of this limit.  @var{n} is the size of functions that
7870 can be inlined in number of pseudo instructions.
7872 Inlining is actually controlled by a number of parameters, which may be
7873 specified individually by using @option{--param @var{name}=@var{value}}.
7874 The @option{-finline-limit=@var{n}} option sets some of these parameters
7875 as follows:
7877 @table @gcctabopt
7878 @item max-inline-insns-single
7879 is set to @var{n}/2.
7880 @item max-inline-insns-auto
7881 is set to @var{n}/2.
7882 @end table
7884 See below for a documentation of the individual
7885 parameters controlling inlining and for the defaults of these parameters.
7887 @emph{Note:} there may be no value to @option{-finline-limit} that results
7888 in default behavior.
7890 @emph{Note:} pseudo instruction represents, in this particular context, an
7891 abstract measurement of function's size.  In no way does it represent a count
7892 of assembly instructions and as such its exact meaning might change from one
7893 release to an another.
7895 @item -fno-keep-inline-dllexport
7896 @opindex fno-keep-inline-dllexport
7897 This is a more fine-grained version of @option{-fkeep-inline-functions},
7898 which applies only to functions that are declared using the @code{dllexport}
7899 attribute or declspec.  @xref{Function Attributes,,Declaring Attributes of
7900 Functions}.
7902 @item -fkeep-inline-functions
7903 @opindex fkeep-inline-functions
7904 In C, emit @code{static} functions that are declared @code{inline}
7905 into the object file, even if the function has been inlined into all
7906 of its callers.  This switch does not affect functions using the
7907 @code{extern inline} extension in GNU C90@.  In C++, emit any and all
7908 inline functions into the object file.
7910 @item -fkeep-static-functions
7911 @opindex fkeep-static-functions
7912 Emit @code{static} functions into the object file, even if the function
7913 is never used.
7915 @item -fkeep-static-consts
7916 @opindex fkeep-static-consts
7917 Emit variables declared @code{static const} when optimization isn't turned
7918 on, even if the variables aren't referenced.
7920 GCC enables this option by default.  If you want to force the compiler to
7921 check if a variable is referenced, regardless of whether or not
7922 optimization is turned on, use the @option{-fno-keep-static-consts} option.
7924 @item -fmerge-constants
7925 @opindex fmerge-constants
7926 Attempt to merge identical constants (string constants and floating-point
7927 constants) across compilation units.
7929 This option is the default for optimized compilation if the assembler and
7930 linker support it.  Use @option{-fno-merge-constants} to inhibit this
7931 behavior.
7933 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7935 @item -fmerge-all-constants
7936 @opindex fmerge-all-constants
7937 Attempt to merge identical constants and identical variables.
7939 This option implies @option{-fmerge-constants}.  In addition to
7940 @option{-fmerge-constants} this considers e.g.@: even constant initialized
7941 arrays or initialized constant variables with integral or floating-point
7942 types.  Languages like C or C++ require each variable, including multiple
7943 instances of the same variable in recursive calls, to have distinct locations,
7944 so using this option results in non-conforming
7945 behavior.
7947 @item -fmodulo-sched
7948 @opindex fmodulo-sched
7949 Perform swing modulo scheduling immediately before the first scheduling
7950 pass.  This pass looks at innermost loops and reorders their
7951 instructions by overlapping different iterations.
7953 @item -fmodulo-sched-allow-regmoves
7954 @opindex fmodulo-sched-allow-regmoves
7955 Perform more aggressive SMS-based modulo scheduling with register moves
7956 allowed.  By setting this flag certain anti-dependences edges are
7957 deleted, which triggers the generation of reg-moves based on the
7958 life-range analysis.  This option is effective only with
7959 @option{-fmodulo-sched} enabled.
7961 @item -fno-branch-count-reg
7962 @opindex fno-branch-count-reg
7963 Avoid running a pass scanning for opportunities to use ``decrement and
7964 branch'' instructions on a count register instead of generating sequences
7965 of instructions that decrement a register, compare it against zero, and
7966 then branch based upon the result.  This option is only meaningful on
7967 architectures that support such instructions, which include x86, PowerPC,
7968 IA-64 and S/390.  Note that the @option{-fno-branch-count-reg} option
7969 doesn't remove the decrement and branch instructions from the generated
7970 instruction stream introduced by other optimization passes.
7972 Enabled by default at @option{-O1} and higher.
7974 The default is @option{-fbranch-count-reg}.
7976 @item -fno-function-cse
7977 @opindex fno-function-cse
7978 Do not put function addresses in registers; make each instruction that
7979 calls a constant function contain the function's address explicitly.
7981 This option results in less efficient code, but some strange hacks
7982 that alter the assembler output may be confused by the optimizations
7983 performed when this option is not used.
7985 The default is @option{-ffunction-cse}
7987 @item -fno-zero-initialized-in-bss
7988 @opindex fno-zero-initialized-in-bss
7989 If the target supports a BSS section, GCC by default puts variables that
7990 are initialized to zero into BSS@.  This can save space in the resulting
7991 code.
7993 This option turns off this behavior because some programs explicitly
7994 rely on variables going to the data section---e.g., so that the
7995 resulting executable can find the beginning of that section and/or make
7996 assumptions based on that.
7998 The default is @option{-fzero-initialized-in-bss}.
8000 @item -fthread-jumps
8001 @opindex fthread-jumps
8002 Perform optimizations that check to see if a jump branches to a
8003 location where another comparison subsumed by the first is found.  If
8004 so, the first branch is redirected to either the destination of the
8005 second branch or a point immediately following it, depending on whether
8006 the condition is known to be true or false.
8008 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8010 @item -fsplit-wide-types
8011 @opindex fsplit-wide-types
8012 When using a type that occupies multiple registers, such as @code{long
8013 long} on a 32-bit system, split the registers apart and allocate them
8014 independently.  This normally generates better code for those types,
8015 but may make debugging more difficult.
8017 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
8018 @option{-Os}.
8020 @item -fcse-follow-jumps
8021 @opindex fcse-follow-jumps
8022 In common subexpression elimination (CSE), scan through jump instructions
8023 when the target of the jump is not reached by any other path.  For
8024 example, when CSE encounters an @code{if} statement with an
8025 @code{else} clause, CSE follows the jump when the condition
8026 tested is false.
8028 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8030 @item -fcse-skip-blocks
8031 @opindex fcse-skip-blocks
8032 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
8033 follow jumps that conditionally skip over blocks.  When CSE
8034 encounters a simple @code{if} statement with no else clause,
8035 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
8036 body of the @code{if}.
8038 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8040 @item -frerun-cse-after-loop
8041 @opindex frerun-cse-after-loop
8042 Re-run common subexpression elimination after loop optimizations are
8043 performed.
8045 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8047 @item -fgcse
8048 @opindex fgcse
8049 Perform a global common subexpression elimination pass.
8050 This pass also performs global constant and copy propagation.
8052 @emph{Note:} When compiling a program using computed gotos, a GCC
8053 extension, you may get better run-time performance if you disable
8054 the global common subexpression elimination pass by adding
8055 @option{-fno-gcse} to the command line.
8057 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8059 @item -fgcse-lm
8060 @opindex fgcse-lm
8061 When @option{-fgcse-lm} is enabled, global common subexpression elimination
8062 attempts to move loads that are only killed by stores into themselves.  This
8063 allows a loop containing a load/store sequence to be changed to a load outside
8064 the loop, and a copy/store within the loop.
8066 Enabled by default when @option{-fgcse} is enabled.
8068 @item -fgcse-sm
8069 @opindex fgcse-sm
8070 When @option{-fgcse-sm} is enabled, a store motion pass is run after
8071 global common subexpression elimination.  This pass attempts to move
8072 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
8073 loops containing a load/store sequence can be changed to a load before
8074 the loop and a store after the loop.
8076 Not enabled at any optimization level.
8078 @item -fgcse-las
8079 @opindex fgcse-las
8080 When @option{-fgcse-las} is enabled, the global common subexpression
8081 elimination pass eliminates redundant loads that come after stores to the
8082 same memory location (both partial and full redundancies).
8084 Not enabled at any optimization level.
8086 @item -fgcse-after-reload
8087 @opindex fgcse-after-reload
8088 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
8089 pass is performed after reload.  The purpose of this pass is to clean up
8090 redundant spilling.
8092 @item -faggressive-loop-optimizations
8093 @opindex faggressive-loop-optimizations
8094 This option tells the loop optimizer to use language constraints to
8095 derive bounds for the number of iterations of a loop.  This assumes that
8096 loop code does not invoke undefined behavior by for example causing signed
8097 integer overflows or out-of-bound array accesses.  The bounds for the
8098 number of iterations of a loop are used to guide loop unrolling and peeling
8099 and loop exit test optimizations.
8100 This option is enabled by default.
8102 @item -funconstrained-commons
8103 @opindex funconstrained-commons
8104 This option tells the compiler that variables declared in common blocks
8105 (e.g. Fortran) may later be overridden with longer trailing arrays. This
8106 prevents certain optimizations that depend on knowing the array bounds.
8108 @item -fcrossjumping
8109 @opindex fcrossjumping
8110 Perform cross-jumping transformation.
8111 This transformation unifies equivalent code and saves code size.  The
8112 resulting code may or may not perform better than without cross-jumping.
8114 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8116 @item -fauto-inc-dec
8117 @opindex fauto-inc-dec
8118 Combine increments or decrements of addresses with memory accesses.
8119 This pass is always skipped on architectures that do not have
8120 instructions to support this.  Enabled by default at @option{-O} and
8121 higher on architectures that support this.
8123 @item -fdce
8124 @opindex fdce
8125 Perform dead code elimination (DCE) on RTL@.
8126 Enabled by default at @option{-O} and higher.
8128 @item -fdse
8129 @opindex fdse
8130 Perform dead store elimination (DSE) on RTL@.
8131 Enabled by default at @option{-O} and higher.
8133 @item -fif-conversion
8134 @opindex fif-conversion
8135 Attempt to transform conditional jumps into branch-less equivalents.  This
8136 includes use of conditional moves, min, max, set flags and abs instructions, and
8137 some tricks doable by standard arithmetics.  The use of conditional execution
8138 on chips where it is available is controlled by @option{-fif-conversion2}.
8140 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8142 @item -fif-conversion2
8143 @opindex fif-conversion2
8144 Use conditional execution (where available) to transform conditional jumps into
8145 branch-less equivalents.
8147 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8149 @item -fdeclone-ctor-dtor
8150 @opindex fdeclone-ctor-dtor
8151 The C++ ABI requires multiple entry points for constructors and
8152 destructors: one for a base subobject, one for a complete object, and
8153 one for a virtual destructor that calls operator delete afterwards.
8154 For a hierarchy with virtual bases, the base and complete variants are
8155 clones, which means two copies of the function.  With this option, the
8156 base and complete variants are changed to be thunks that call a common
8157 implementation.
8159 Enabled by @option{-Os}.
8161 @item -fdelete-null-pointer-checks
8162 @opindex fdelete-null-pointer-checks
8163 Assume that programs cannot safely dereference null pointers, and that
8164 no code or data element resides at address zero.
8165 This option enables simple constant
8166 folding optimizations at all optimization levels.  In addition, other
8167 optimization passes in GCC use this flag to control global dataflow
8168 analyses that eliminate useless checks for null pointers; these assume
8169 that a memory access to address zero always results in a trap, so
8170 that if a pointer is checked after it has already been dereferenced,
8171 it cannot be null.
8173 Note however that in some environments this assumption is not true.
8174 Use @option{-fno-delete-null-pointer-checks} to disable this optimization
8175 for programs that depend on that behavior.
8177 This option is enabled by default on most targets.  On Nios II ELF, it
8178 defaults to off.  On AVR, CR16, and MSP430, this option is completely disabled.
8180 Passes that use the dataflow information
8181 are enabled independently at different optimization levels.
8183 @item -fdevirtualize
8184 @opindex fdevirtualize
8185 Attempt to convert calls to virtual functions to direct calls.  This
8186 is done both within a procedure and interprocedurally as part of
8187 indirect inlining (@option{-findirect-inlining}) and interprocedural constant
8188 propagation (@option{-fipa-cp}).
8189 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8191 @item -fdevirtualize-speculatively
8192 @opindex fdevirtualize-speculatively
8193 Attempt to convert calls to virtual functions to speculative direct calls.
8194 Based on the analysis of the type inheritance graph, determine for a given call
8195 the set of likely targets. If the set is small, preferably of size 1, change
8196 the call into a conditional deciding between direct and indirect calls.  The
8197 speculative calls enable more optimizations, such as inlining.  When they seem
8198 useless after further optimization, they are converted back into original form.
8200 @item -fdevirtualize-at-ltrans
8201 @opindex fdevirtualize-at-ltrans
8202 Stream extra information needed for aggressive devirtualization when running
8203 the link-time optimizer in local transformation mode.  
8204 This option enables more devirtualization but
8205 significantly increases the size of streamed data. For this reason it is
8206 disabled by default.
8208 @item -fexpensive-optimizations
8209 @opindex fexpensive-optimizations
8210 Perform a number of minor optimizations that are relatively expensive.
8212 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8214 @item -free
8215 @opindex free
8216 Attempt to remove redundant extension instructions.  This is especially
8217 helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
8218 registers after writing to their lower 32-bit half.
8220 Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
8221 @option{-O3}, @option{-Os}.
8223 @item -fno-lifetime-dse
8224 @opindex fno-lifetime-dse
8225 In C++ the value of an object is only affected by changes within its
8226 lifetime: when the constructor begins, the object has an indeterminate
8227 value, and any changes during the lifetime of the object are dead when
8228 the object is destroyed.  Normally dead store elimination will take
8229 advantage of this; if your code relies on the value of the object
8230 storage persisting beyond the lifetime of the object, you can use this
8231 flag to disable this optimization.  To preserve stores before the
8232 constructor starts (e.g. because your operator new clears the object
8233 storage) but still treat the object as dead after the destructor you,
8234 can use @option{-flifetime-dse=1}.  The default behavior can be
8235 explicitly selected with @option{-flifetime-dse=2}.
8236 @option{-flifetime-dse=0} is equivalent to @option{-fno-lifetime-dse}.
8238 @item -flive-range-shrinkage
8239 @opindex flive-range-shrinkage
8240 Attempt to decrease register pressure through register live range
8241 shrinkage.  This is helpful for fast processors with small or moderate
8242 size register sets.
8244 @item -fira-algorithm=@var{algorithm}
8245 @opindex fira-algorithm
8246 Use the specified coloring algorithm for the integrated register
8247 allocator.  The @var{algorithm} argument can be @samp{priority}, which
8248 specifies Chow's priority coloring, or @samp{CB}, which specifies
8249 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
8250 for all architectures, but for those targets that do support it, it is
8251 the default because it generates better code.
8253 @item -fira-region=@var{region}
8254 @opindex fira-region
8255 Use specified regions for the integrated register allocator.  The
8256 @var{region} argument should be one of the following:
8258 @table @samp
8260 @item all
8261 Use all loops as register allocation regions.
8262 This can give the best results for machines with a small and/or
8263 irregular register set.
8265 @item mixed
8266 Use all loops except for loops with small register pressure 
8267 as the regions.  This value usually gives
8268 the best results in most cases and for most architectures,
8269 and is enabled by default when compiling with optimization for speed
8270 (@option{-O}, @option{-O2}, @dots{}).
8272 @item one
8273 Use all functions as a single region.  
8274 This typically results in the smallest code size, and is enabled by default for
8275 @option{-Os} or @option{-O0}.
8277 @end table
8279 @item -fira-hoist-pressure
8280 @opindex fira-hoist-pressure
8281 Use IRA to evaluate register pressure in the code hoisting pass for
8282 decisions to hoist expressions.  This option usually results in smaller
8283 code, but it can slow the compiler down.
8285 This option is enabled at level @option{-Os} for all targets.
8287 @item -fira-loop-pressure
8288 @opindex fira-loop-pressure
8289 Use IRA to evaluate register pressure in loops for decisions to move
8290 loop invariants.  This option usually results in generation
8291 of faster and smaller code on machines with large register files (>= 32
8292 registers), but it can slow the compiler down.
8294 This option is enabled at level @option{-O3} for some targets.
8296 @item -fno-ira-share-save-slots
8297 @opindex fno-ira-share-save-slots
8298 Disable sharing of stack slots used for saving call-used hard
8299 registers living through a call.  Each hard register gets a
8300 separate stack slot, and as a result function stack frames are
8301 larger.
8303 @item -fno-ira-share-spill-slots
8304 @opindex fno-ira-share-spill-slots
8305 Disable sharing of stack slots allocated for pseudo-registers.  Each
8306 pseudo-register that does not get a hard register gets a separate
8307 stack slot, and as a result function stack frames are larger.
8309 @item -flra-remat
8310 @opindex flra-remat
8311 Enable CFG-sensitive rematerialization in LRA.  Instead of loading
8312 values of spilled pseudos, LRA tries to rematerialize (recalculate)
8313 values if it is profitable.
8315 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8317 @item -fdelayed-branch
8318 @opindex fdelayed-branch
8319 If supported for the target machine, attempt to reorder instructions
8320 to exploit instruction slots available after delayed branch
8321 instructions.
8323 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8325 @item -fschedule-insns
8326 @opindex fschedule-insns
8327 If supported for the target machine, attempt to reorder instructions to
8328 eliminate execution stalls due to required data being unavailable.  This
8329 helps machines that have slow floating point or memory load instructions
8330 by allowing other instructions to be issued until the result of the load
8331 or floating-point instruction is required.
8333 Enabled at levels @option{-O2}, @option{-O3}.
8335 @item -fschedule-insns2
8336 @opindex fschedule-insns2
8337 Similar to @option{-fschedule-insns}, but requests an additional pass of
8338 instruction scheduling after register allocation has been done.  This is
8339 especially useful on machines with a relatively small number of
8340 registers and where memory load instructions take more than one cycle.
8342 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8344 @item -fno-sched-interblock
8345 @opindex fno-sched-interblock
8346 Don't schedule instructions across basic blocks.  This is normally
8347 enabled by default when scheduling before register allocation, i.e.@:
8348 with @option{-fschedule-insns} or at @option{-O2} or higher.
8350 @item -fno-sched-spec
8351 @opindex fno-sched-spec
8352 Don't allow speculative motion of non-load instructions.  This is normally
8353 enabled by default when scheduling before register allocation, i.e.@:
8354 with @option{-fschedule-insns} or at @option{-O2} or higher.
8356 @item -fsched-pressure
8357 @opindex fsched-pressure
8358 Enable register pressure sensitive insn scheduling before register
8359 allocation.  This only makes sense when scheduling before register
8360 allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
8361 @option{-O2} or higher.  Usage of this option can improve the
8362 generated code and decrease its size by preventing register pressure
8363 increase above the number of available hard registers and subsequent
8364 spills in register allocation.
8366 @item -fsched-spec-load
8367 @opindex fsched-spec-load
8368 Allow speculative motion of some load instructions.  This only makes
8369 sense when scheduling before register allocation, i.e.@: with
8370 @option{-fschedule-insns} or at @option{-O2} or higher.
8372 @item -fsched-spec-load-dangerous
8373 @opindex fsched-spec-load-dangerous
8374 Allow speculative motion of more load instructions.  This only makes
8375 sense when scheduling before register allocation, i.e.@: with
8376 @option{-fschedule-insns} or at @option{-O2} or higher.
8378 @item -fsched-stalled-insns
8379 @itemx -fsched-stalled-insns=@var{n}
8380 @opindex fsched-stalled-insns
8381 Define how many insns (if any) can be moved prematurely from the queue
8382 of stalled insns into the ready list during the second scheduling pass.
8383 @option{-fno-sched-stalled-insns} means that no insns are moved
8384 prematurely, @option{-fsched-stalled-insns=0} means there is no limit
8385 on how many queued insns can be moved prematurely.
8386 @option{-fsched-stalled-insns} without a value is equivalent to
8387 @option{-fsched-stalled-insns=1}.
8389 @item -fsched-stalled-insns-dep
8390 @itemx -fsched-stalled-insns-dep=@var{n}
8391 @opindex fsched-stalled-insns-dep
8392 Define how many insn groups (cycles) are examined for a dependency
8393 on a stalled insn that is a candidate for premature removal from the queue
8394 of stalled insns.  This has an effect only during the second scheduling pass,
8395 and only if @option{-fsched-stalled-insns} is used.
8396 @option{-fno-sched-stalled-insns-dep} is equivalent to
8397 @option{-fsched-stalled-insns-dep=0}.
8398 @option{-fsched-stalled-insns-dep} without a value is equivalent to
8399 @option{-fsched-stalled-insns-dep=1}.
8401 @item -fsched2-use-superblocks
8402 @opindex fsched2-use-superblocks
8403 When scheduling after register allocation, use superblock scheduling.
8404 This allows motion across basic block boundaries,
8405 resulting in faster schedules.  This option is experimental, as not all machine
8406 descriptions used by GCC model the CPU closely enough to avoid unreliable
8407 results from the algorithm.
8409 This only makes sense when scheduling after register allocation, i.e.@: with
8410 @option{-fschedule-insns2} or at @option{-O2} or higher.
8412 @item -fsched-group-heuristic
8413 @opindex fsched-group-heuristic
8414 Enable the group heuristic in the scheduler.  This heuristic favors
8415 the instruction that belongs to a schedule group.  This is enabled
8416 by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
8417 or @option{-fschedule-insns2} or at @option{-O2} or higher.
8419 @item -fsched-critical-path-heuristic
8420 @opindex fsched-critical-path-heuristic
8421 Enable the critical-path heuristic in the scheduler.  This heuristic favors
8422 instructions on the critical path.  This is enabled by default when
8423 scheduling is enabled, i.e.@: with @option{-fschedule-insns}
8424 or @option{-fschedule-insns2} or at @option{-O2} or higher.
8426 @item -fsched-spec-insn-heuristic
8427 @opindex fsched-spec-insn-heuristic
8428 Enable the speculative instruction heuristic in the scheduler.  This
8429 heuristic favors speculative instructions with greater dependency weakness.
8430 This is enabled by default when scheduling is enabled, i.e.@:
8431 with @option{-fschedule-insns} or @option{-fschedule-insns2}
8432 or at @option{-O2} or higher.
8434 @item -fsched-rank-heuristic
8435 @opindex fsched-rank-heuristic
8436 Enable the rank heuristic in the scheduler.  This heuristic favors
8437 the instruction belonging to a basic block with greater size or frequency.
8438 This is enabled by default when scheduling is enabled, i.e.@:
8439 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
8440 at @option{-O2} or higher.
8442 @item -fsched-last-insn-heuristic
8443 @opindex fsched-last-insn-heuristic
8444 Enable the last-instruction heuristic in the scheduler.  This heuristic
8445 favors the instruction that is less dependent on the last instruction
8446 scheduled.  This is enabled by default when scheduling is enabled,
8447 i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
8448 at @option{-O2} or higher.
8450 @item -fsched-dep-count-heuristic
8451 @opindex fsched-dep-count-heuristic
8452 Enable the dependent-count heuristic in the scheduler.  This heuristic
8453 favors the instruction that has more instructions depending on it.
8454 This is enabled by default when scheduling is enabled, i.e.@:
8455 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
8456 at @option{-O2} or higher.
8458 @item -freschedule-modulo-scheduled-loops
8459 @opindex freschedule-modulo-scheduled-loops
8460 Modulo scheduling is performed before traditional scheduling.  If a loop
8461 is modulo scheduled, later scheduling passes may change its schedule.  
8462 Use this option to control that behavior.
8464 @item -fselective-scheduling
8465 @opindex fselective-scheduling
8466 Schedule instructions using selective scheduling algorithm.  Selective
8467 scheduling runs instead of the first scheduler pass.
8469 @item -fselective-scheduling2
8470 @opindex fselective-scheduling2
8471 Schedule instructions using selective scheduling algorithm.  Selective
8472 scheduling runs instead of the second scheduler pass.
8474 @item -fsel-sched-pipelining
8475 @opindex fsel-sched-pipelining
8476 Enable software pipelining of innermost loops during selective scheduling.
8477 This option has no effect unless one of @option{-fselective-scheduling} or
8478 @option{-fselective-scheduling2} is turned on.
8480 @item -fsel-sched-pipelining-outer-loops
8481 @opindex fsel-sched-pipelining-outer-loops
8482 When pipelining loops during selective scheduling, also pipeline outer loops.
8483 This option has no effect unless @option{-fsel-sched-pipelining} is turned on.
8485 @item -fsemantic-interposition
8486 @opindex fsemantic-interposition
8487 Some object formats, like ELF, allow interposing of symbols by the 
8488 dynamic linker.
8489 This means that for symbols exported from the DSO, the compiler cannot perform
8490 interprocedural propagation, inlining and other optimizations in anticipation
8491 that the function or variable in question may change. While this feature is
8492 useful, for example, to rewrite memory allocation functions by a debugging
8493 implementation, it is expensive in the terms of code quality.
8494 With @option{-fno-semantic-interposition} the compiler assumes that 
8495 if interposition happens for functions the overwriting function will have 
8496 precisely the same semantics (and side effects). 
8497 Similarly if interposition happens
8498 for variables, the constructor of the variable will be the same. The flag
8499 has no effect for functions explicitly declared inline 
8500 (where it is never allowed for interposition to change semantics) 
8501 and for symbols explicitly declared weak.
8503 @item -fshrink-wrap
8504 @opindex fshrink-wrap
8505 Emit function prologues only before parts of the function that need it,
8506 rather than at the top of the function.  This flag is enabled by default at
8507 @option{-O} and higher.
8509 @item -fshrink-wrap-separate
8510 @opindex fshrink-wrap-separate
8511 Shrink-wrap separate parts of the prologue and epilogue separately, so that
8512 those parts are only executed when needed.
8513 This option is on by default, but has no effect unless @option{-fshrink-wrap}
8514 is also turned on and the target supports this.
8516 @item -fcaller-saves
8517 @opindex fcaller-saves
8518 Enable allocation of values to registers that are clobbered by
8519 function calls, by emitting extra instructions to save and restore the
8520 registers around such calls.  Such allocation is done only when it
8521 seems to result in better code.
8523 This option is always enabled by default on certain machines, usually
8524 those which have no call-preserved registers to use instead.
8526 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8528 @item -fcombine-stack-adjustments
8529 @opindex fcombine-stack-adjustments
8530 Tracks stack adjustments (pushes and pops) and stack memory references
8531 and then tries to find ways to combine them.
8533 Enabled by default at @option{-O1} and higher.
8535 @item -fipa-ra
8536 @opindex fipa-ra
8537 Use caller save registers for allocation if those registers are not used by
8538 any called function.  In that case it is not necessary to save and restore
8539 them around calls.  This is only possible if called functions are part of
8540 same compilation unit as current function and they are compiled before it.
8542 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, however the option
8543 is disabled if generated code will be instrumented for profiling
8544 (@option{-p}, or @option{-pg}) or if callee's register usage cannot be known
8545 exactly (this happens on targets that do not expose prologues
8546 and epilogues in RTL).
8548 @item -fconserve-stack
8549 @opindex fconserve-stack
8550 Attempt to minimize stack usage.  The compiler attempts to use less
8551 stack space, even if that makes the program slower.  This option
8552 implies setting the @option{large-stack-frame} parameter to 100
8553 and the @option{large-stack-frame-growth} parameter to 400.
8555 @item -ftree-reassoc
8556 @opindex ftree-reassoc
8557 Perform reassociation on trees.  This flag is enabled by default
8558 at @option{-O} and higher.
8560 @item -fcode-hoisting
8561 @opindex fcode-hoisting
8562 Perform code hoisting.  Code hoisting tries to move the
8563 evaluation of expressions executed on all paths to the function exit
8564 as early as possible.  This is especially useful as a code size
8565 optimization, but it often helps for code speed as well.
8566 This flag is enabled by default at @option{-O2} and higher.
8568 @item -ftree-pre
8569 @opindex ftree-pre
8570 Perform partial redundancy elimination (PRE) on trees.  This flag is
8571 enabled by default at @option{-O2} and @option{-O3}.
8573 @item -ftree-partial-pre
8574 @opindex ftree-partial-pre
8575 Make partial redundancy elimination (PRE) more aggressive.  This flag is
8576 enabled by default at @option{-O3}.
8578 @item -ftree-forwprop
8579 @opindex ftree-forwprop
8580 Perform forward propagation on trees.  This flag is enabled by default
8581 at @option{-O} and higher.
8583 @item -ftree-fre
8584 @opindex ftree-fre
8585 Perform full redundancy elimination (FRE) on trees.  The difference
8586 between FRE and PRE is that FRE only considers expressions
8587 that are computed on all paths leading to the redundant computation.
8588 This analysis is faster than PRE, though it exposes fewer redundancies.
8589 This flag is enabled by default at @option{-O} and higher.
8591 @item -ftree-phiprop
8592 @opindex ftree-phiprop
8593 Perform hoisting of loads from conditional pointers on trees.  This
8594 pass is enabled by default at @option{-O} and higher.
8596 @item -fhoist-adjacent-loads
8597 @opindex fhoist-adjacent-loads
8598 Speculatively hoist loads from both branches of an if-then-else if the
8599 loads are from adjacent locations in the same structure and the target
8600 architecture has a conditional move instruction.  This flag is enabled
8601 by default at @option{-O2} and higher.
8603 @item -ftree-copy-prop
8604 @opindex ftree-copy-prop
8605 Perform copy propagation on trees.  This pass eliminates unnecessary
8606 copy operations.  This flag is enabled by default at @option{-O} and
8607 higher.
8609 @item -fipa-pure-const
8610 @opindex fipa-pure-const
8611 Discover which functions are pure or constant.
8612 Enabled by default at @option{-O} and higher.
8614 @item -fipa-reference
8615 @opindex fipa-reference
8616 Discover which static variables do not escape the
8617 compilation unit.
8618 Enabled by default at @option{-O} and higher.
8620 @item -fipa-pta
8621 @opindex fipa-pta
8622 Perform interprocedural pointer analysis and interprocedural modification
8623 and reference analysis.  This option can cause excessive memory and
8624 compile-time usage on large compilation units.  It is not enabled by
8625 default at any optimization level.
8627 @item -fipa-profile
8628 @opindex fipa-profile
8629 Perform interprocedural profile propagation.  The functions called only from
8630 cold functions are marked as cold. Also functions executed once (such as
8631 @code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold
8632 functions and loop less parts of functions executed once are then optimized for
8633 size.
8634 Enabled by default at @option{-O} and higher.
8636 @item -fipa-cp
8637 @opindex fipa-cp
8638 Perform interprocedural constant propagation.
8639 This optimization analyzes the program to determine when values passed
8640 to functions are constants and then optimizes accordingly.
8641 This optimization can substantially increase performance
8642 if the application has constants passed to functions.
8643 This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
8645 @item -fipa-cp-clone
8646 @opindex fipa-cp-clone
8647 Perform function cloning to make interprocedural constant propagation stronger.
8648 When enabled, interprocedural constant propagation performs function cloning
8649 when externally visible function can be called with constant arguments.
8650 Because this optimization can create multiple copies of functions,
8651 it may significantly increase code size
8652 (see @option{--param ipcp-unit-growth=@var{value}}).
8653 This flag is enabled by default at @option{-O3}.
8655 @item -fipa-bit-cp
8656 @opindex -fipa-bit-cp
8657 When enabled, perform interprocedural bitwise constant
8658 propagation. This flag is enabled by default at @option{-O2}. It
8659 requires that @option{-fipa-cp} is enabled.
8661 @item -fipa-vrp
8662 @opindex -fipa-vrp
8663 When enabled, perform interprocedural propagation of value
8664 ranges. This flag is enabled by default at @option{-O2}. It requires
8665 that @option{-fipa-cp} is enabled.
8667 @item -fipa-icf
8668 @opindex fipa-icf
8669 Perform Identical Code Folding for functions and read-only variables.
8670 The optimization reduces code size and may disturb unwind stacks by replacing
8671 a function by equivalent one with a different name. The optimization works
8672 more effectively with link-time optimization enabled.
8674 Nevertheless the behavior is similar to Gold Linker ICF optimization, GCC ICF
8675 works on different levels and thus the optimizations are not same - there are
8676 equivalences that are found only by GCC and equivalences found only by Gold.
8678 This flag is enabled by default at @option{-O2} and @option{-Os}.
8680 @item -fisolate-erroneous-paths-dereference
8681 @opindex fisolate-erroneous-paths-dereference
8682 Detect paths that trigger erroneous or undefined behavior due to
8683 dereferencing a null pointer.  Isolate those paths from the main control
8684 flow and turn the statement with erroneous or undefined behavior into a trap.
8685 This flag is enabled by default at @option{-O2} and higher and depends on
8686 @option{-fdelete-null-pointer-checks} also being enabled.
8688 @item -fisolate-erroneous-paths-attribute
8689 @opindex fisolate-erroneous-paths-attribute
8690 Detect paths that trigger erroneous or undefined behavior due to a null value
8691 being used in a way forbidden by a @code{returns_nonnull} or @code{nonnull}
8692 attribute.  Isolate those paths from the main control flow and turn the
8693 statement with erroneous or undefined behavior into a trap.  This is not
8694 currently enabled, but may be enabled by @option{-O2} in the future.
8696 @item -ftree-sink
8697 @opindex ftree-sink
8698 Perform forward store motion on trees.  This flag is
8699 enabled by default at @option{-O} and higher.
8701 @item -ftree-bit-ccp
8702 @opindex ftree-bit-ccp
8703 Perform sparse conditional bit constant propagation on trees and propagate
8704 pointer alignment information.
8705 This pass only operates on local scalar variables and is enabled by default
8706 at @option{-O} and higher.  It requires that @option{-ftree-ccp} is enabled.
8708 @item -ftree-ccp
8709 @opindex ftree-ccp
8710 Perform sparse conditional constant propagation (CCP) on trees.  This
8711 pass only operates on local scalar variables and is enabled by default
8712 at @option{-O} and higher.
8714 @item -fssa-backprop
8715 @opindex fssa-backprop
8716 Propagate information about uses of a value up the definition chain
8717 in order to simplify the definitions.  For example, this pass strips
8718 sign operations if the sign of a value never matters.  The flag is
8719 enabled by default at @option{-O} and higher.
8721 @item -fssa-phiopt
8722 @opindex fssa-phiopt
8723 Perform pattern matching on SSA PHI nodes to optimize conditional
8724 code.  This pass is enabled by default at @option{-O} and higher.
8726 @item -ftree-switch-conversion
8727 @opindex ftree-switch-conversion
8728 Perform conversion of simple initializations in a switch to
8729 initializations from a scalar array.  This flag is enabled by default
8730 at @option{-O2} and higher.
8732 @item -ftree-tail-merge
8733 @opindex ftree-tail-merge
8734 Look for identical code sequences.  When found, replace one with a jump to the
8735 other.  This optimization is known as tail merging or cross jumping.  This flag
8736 is enabled by default at @option{-O2} and higher.  The compilation time
8737 in this pass can
8738 be limited using @option{max-tail-merge-comparisons} parameter and
8739 @option{max-tail-merge-iterations} parameter.
8741 @item -ftree-dce
8742 @opindex ftree-dce
8743 Perform dead code elimination (DCE) on trees.  This flag is enabled by
8744 default at @option{-O} and higher.
8746 @item -ftree-builtin-call-dce
8747 @opindex ftree-builtin-call-dce
8748 Perform conditional dead code elimination (DCE) for calls to built-in functions
8749 that may set @code{errno} but are otherwise free of side effects.  This flag is
8750 enabled by default at @option{-O2} and higher if @option{-Os} is not also
8751 specified.
8753 @item -ftree-dominator-opts
8754 @opindex ftree-dominator-opts
8755 Perform a variety of simple scalar cleanups (constant/copy
8756 propagation, redundancy elimination, range propagation and expression
8757 simplification) based on a dominator tree traversal.  This also
8758 performs jump threading (to reduce jumps to jumps). This flag is
8759 enabled by default at @option{-O} and higher.
8761 @item -ftree-dse
8762 @opindex ftree-dse
8763 Perform dead store elimination (DSE) on trees.  A dead store is a store into
8764 a memory location that is later overwritten by another store without
8765 any intervening loads.  In this case the earlier store can be deleted.  This
8766 flag is enabled by default at @option{-O} and higher.
8768 @item -ftree-ch
8769 @opindex ftree-ch
8770 Perform loop header copying on trees.  This is beneficial since it increases
8771 effectiveness of code motion optimizations.  It also saves one jump.  This flag
8772 is enabled by default at @option{-O} and higher.  It is not enabled
8773 for @option{-Os}, since it usually increases code size.
8775 @item -ftree-loop-optimize
8776 @opindex ftree-loop-optimize
8777 Perform loop optimizations on trees.  This flag is enabled by default
8778 at @option{-O} and higher.
8780 @item -ftree-loop-linear
8781 @itemx -floop-strip-mine
8782 @itemx -floop-block
8783 @opindex ftree-loop-linear
8784 @opindex floop-strip-mine
8785 @opindex floop-block
8786 Perform loop nest optimizations.  Same as
8787 @option{-floop-nest-optimize}.  To use this code transformation, GCC has
8788 to be configured with @option{--with-isl} to enable the Graphite loop
8789 transformation infrastructure.
8791 @item -fgraphite-identity
8792 @opindex fgraphite-identity
8793 Enable the identity transformation for graphite.  For every SCoP we generate
8794 the polyhedral representation and transform it back to gimple.  Using
8795 @option{-fgraphite-identity} we can check the costs or benefits of the
8796 GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
8797 are also performed by the code generator isl, like index splitting and
8798 dead code elimination in loops.
8800 @item -floop-nest-optimize
8801 @opindex floop-nest-optimize
8802 Enable the isl based loop nest optimizer.  This is a generic loop nest
8803 optimizer based on the Pluto optimization algorithms.  It calculates a loop
8804 structure optimized for data-locality and parallelism.  This option
8805 is experimental.
8807 @item -floop-parallelize-all
8808 @opindex floop-parallelize-all
8809 Use the Graphite data dependence analysis to identify loops that can
8810 be parallelized.  Parallelize all the loops that can be analyzed to
8811 not contain loop carried dependences without checking that it is
8812 profitable to parallelize the loops.
8814 @item -ftree-coalesce-vars
8815 @opindex ftree-coalesce-vars
8816 While transforming the program out of the SSA representation, attempt to
8817 reduce copying by coalescing versions of different user-defined
8818 variables, instead of just compiler temporaries.  This may severely
8819 limit the ability to debug an optimized program compiled with
8820 @option{-fno-var-tracking-assignments}.  In the negated form, this flag
8821 prevents SSA coalescing of user variables.  This option is enabled by
8822 default if optimization is enabled, and it does very little otherwise.
8824 @item -ftree-loop-if-convert
8825 @opindex ftree-loop-if-convert
8826 Attempt to transform conditional jumps in the innermost loops to
8827 branch-less equivalents.  The intent is to remove control-flow from
8828 the innermost loops in order to improve the ability of the
8829 vectorization pass to handle these loops.  This is enabled by default
8830 if vectorization is enabled.
8832 @item -ftree-loop-distribution
8833 @opindex ftree-loop-distribution
8834 Perform loop distribution.  This flag can improve cache performance on
8835 big loop bodies and allow further loop optimizations, like
8836 parallelization or vectorization, to take place.  For example, the loop
8837 @smallexample
8838 DO I = 1, N
8839   A(I) = B(I) + C
8840   D(I) = E(I) * F
8841 ENDDO
8842 @end smallexample
8843 is transformed to
8844 @smallexample
8845 DO I = 1, N
8846    A(I) = B(I) + C
8847 ENDDO
8848 DO I = 1, N
8849    D(I) = E(I) * F
8850 ENDDO
8851 @end smallexample
8853 @item -ftree-loop-distribute-patterns
8854 @opindex ftree-loop-distribute-patterns
8855 Perform loop distribution of patterns that can be code generated with
8856 calls to a library.  This flag is enabled by default at @option{-O3}.
8858 This pass distributes the initialization loops and generates a call to
8859 memset zero.  For example, the loop
8860 @smallexample
8861 DO I = 1, N
8862   A(I) = 0
8863   B(I) = A(I) + I
8864 ENDDO
8865 @end smallexample
8866 is transformed to
8867 @smallexample
8868 DO I = 1, N
8869    A(I) = 0
8870 ENDDO
8871 DO I = 1, N
8872    B(I) = A(I) + I
8873 ENDDO
8874 @end smallexample
8875 and the initialization loop is transformed into a call to memset zero.
8877 @item -floop-interchange
8878 @opindex floop-interchange
8879 Perform loop interchange outside of graphite.  This flag can improve cache
8880 performance on loop nest and allow further loop optimizations, like
8881 vectorization, to take place.  For example, the loop
8882 @smallexample
8883 for (int i = 0; i < N; i++)
8884   for (int j = 0; j < N; j++)
8885     for (int k = 0; k < N; k++)
8886       c[i][j] = c[i][j] + a[i][k]*b[k][j];
8887 @end smallexample
8888 is transformed to
8889 @smallexample
8890 for (int i = 0; i < N; i++)
8891   for (int k = 0; k < N; k++)
8892     for (int j = 0; j < N; j++)
8893       c[i][j] = c[i][j] + a[i][k]*b[k][j];
8894 @end smallexample
8895 This flag is enabled by default at @option{-O3}.
8897 @item -floop-unroll-and-jam
8898 @opindex floop-unroll-and-jam
8899 Apply unroll and jam transformations on feasible loops.  In a loop
8900 nest this unrolls the outer loop by some factor and fuses the resulting
8901 multiple inner loops.  This flag is enabled by default at @option{-O3}.
8903 @item -ftree-loop-im
8904 @opindex ftree-loop-im
8905 Perform loop invariant motion on trees.  This pass moves only invariants that
8906 are hard to handle at RTL level (function calls, operations that expand to
8907 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
8908 operands of conditions that are invariant out of the loop, so that we can use
8909 just trivial invariantness analysis in loop unswitching.  The pass also includes
8910 store motion.
8912 @item -ftree-loop-ivcanon
8913 @opindex ftree-loop-ivcanon
8914 Create a canonical counter for number of iterations in loops for which
8915 determining number of iterations requires complicated analysis.  Later
8916 optimizations then may determine the number easily.  Useful especially
8917 in connection with unrolling.
8919 @item -fivopts
8920 @opindex fivopts
8921 Perform induction variable optimizations (strength reduction, induction
8922 variable merging and induction variable elimination) on trees.
8924 @item -ftree-parallelize-loops=n
8925 @opindex ftree-parallelize-loops
8926 Parallelize loops, i.e., split their iteration space to run in n threads.
8927 This is only possible for loops whose iterations are independent
8928 and can be arbitrarily reordered.  The optimization is only
8929 profitable on multiprocessor machines, for loops that are CPU-intensive,
8930 rather than constrained e.g.@: by memory bandwidth.  This option
8931 implies @option{-pthread}, and thus is only supported on targets
8932 that have support for @option{-pthread}.
8934 @item -ftree-pta
8935 @opindex ftree-pta
8936 Perform function-local points-to analysis on trees.  This flag is
8937 enabled by default at @option{-O} and higher.
8939 @item -ftree-sra
8940 @opindex ftree-sra
8941 Perform scalar replacement of aggregates.  This pass replaces structure
8942 references with scalars to prevent committing structures to memory too
8943 early.  This flag is enabled by default at @option{-O} and higher.
8945 @item -fstore-merging
8946 @opindex fstore-merging
8947 Perform merging of narrow stores to consecutive memory addresses.  This pass
8948 merges contiguous stores of immediate values narrower than a word into fewer
8949 wider stores to reduce the number of instructions.  This is enabled by default
8950 at @option{-O2} and higher as well as @option{-Os}.
8952 @item -ftree-ter
8953 @opindex ftree-ter
8954 Perform temporary expression replacement during the SSA->normal phase.  Single
8955 use/single def temporaries are replaced at their use location with their
8956 defining expression.  This results in non-GIMPLE code, but gives the expanders
8957 much more complex trees to work on resulting in better RTL generation.  This is
8958 enabled by default at @option{-O} and higher.
8960 @item -ftree-slsr
8961 @opindex ftree-slsr
8962 Perform straight-line strength reduction on trees.  This recognizes related
8963 expressions involving multiplications and replaces them by less expensive
8964 calculations when possible.  This is enabled by default at @option{-O} and
8965 higher.
8967 @item -ftree-vectorize
8968 @opindex ftree-vectorize
8969 Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
8970 and @option{-ftree-slp-vectorize} if not explicitly specified.
8972 @item -ftree-loop-vectorize
8973 @opindex ftree-loop-vectorize
8974 Perform loop vectorization on trees. This flag is enabled by default at
8975 @option{-O3} and when @option{-ftree-vectorize} is enabled.
8977 @item -ftree-slp-vectorize
8978 @opindex ftree-slp-vectorize
8979 Perform basic block vectorization on trees. This flag is enabled by default at
8980 @option{-O3} and when @option{-ftree-vectorize} is enabled.
8982 @item -fvect-cost-model=@var{model}
8983 @opindex fvect-cost-model
8984 Alter the cost model used for vectorization.  The @var{model} argument
8985 should be one of @samp{unlimited}, @samp{dynamic} or @samp{cheap}.
8986 With the @samp{unlimited} model the vectorized code-path is assumed
8987 to be profitable while with the @samp{dynamic} model a runtime check
8988 guards the vectorized code-path to enable it only for iteration
8989 counts that will likely execute faster than when executing the original
8990 scalar loop.  The @samp{cheap} model disables vectorization of
8991 loops where doing so would be cost prohibitive for example due to
8992 required runtime checks for data dependence or alignment but otherwise
8993 is equal to the @samp{dynamic} model.
8994 The default cost model depends on other optimization flags and is
8995 either @samp{dynamic} or @samp{cheap}.
8997 @item -fsimd-cost-model=@var{model}
8998 @opindex fsimd-cost-model
8999 Alter the cost model used for vectorization of loops marked with the OpenMP
9000 simd directive.  The @var{model} argument should be one of
9001 @samp{unlimited}, @samp{dynamic}, @samp{cheap}.  All values of @var{model}
9002 have the same meaning as described in @option{-fvect-cost-model} and by
9003 default a cost model defined with @option{-fvect-cost-model} is used.
9005 @item -ftree-vrp
9006 @opindex ftree-vrp
9007 Perform Value Range Propagation on trees.  This is similar to the
9008 constant propagation pass, but instead of values, ranges of values are
9009 propagated.  This allows the optimizers to remove unnecessary range
9010 checks like array bound checks and null pointer checks.  This is
9011 enabled by default at @option{-O2} and higher.  Null pointer check
9012 elimination is only done if @option{-fdelete-null-pointer-checks} is
9013 enabled.
9015 @item -fsplit-paths
9016 @opindex fsplit-paths
9017 Split paths leading to loop backedges.  This can improve dead code
9018 elimination and common subexpression elimination.  This is enabled by
9019 default at @option{-O2} and above.
9021 @item -fsplit-ivs-in-unroller
9022 @opindex fsplit-ivs-in-unroller
9023 Enables expression of values of induction variables in later iterations
9024 of the unrolled loop using the value in the first iteration.  This breaks
9025 long dependency chains, thus improving efficiency of the scheduling passes.
9027 A combination of @option{-fweb} and CSE is often sufficient to obtain the
9028 same effect.  However, that is not reliable in cases where the loop body
9029 is more complicated than a single basic block.  It also does not work at all
9030 on some architectures due to restrictions in the CSE pass.
9032 This optimization is enabled by default.
9034 @item -fvariable-expansion-in-unroller
9035 @opindex fvariable-expansion-in-unroller
9036 With this option, the compiler creates multiple copies of some
9037 local variables when unrolling a loop, which can result in superior code.
9039 @item -fpartial-inlining
9040 @opindex fpartial-inlining
9041 Inline parts of functions.  This option has any effect only
9042 when inlining itself is turned on by the @option{-finline-functions}
9043 or @option{-finline-small-functions} options.
9045 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
9047 @item -fpredictive-commoning
9048 @opindex fpredictive-commoning
9049 Perform predictive commoning optimization, i.e., reusing computations
9050 (especially memory loads and stores) performed in previous
9051 iterations of loops.
9053 This option is enabled at level @option{-O3}.
9055 @item -fprefetch-loop-arrays
9056 @opindex fprefetch-loop-arrays
9057 If supported by the target machine, generate instructions to prefetch
9058 memory to improve the performance of loops that access large arrays.
9060 This option may generate better or worse code; results are highly
9061 dependent on the structure of loops within the source code.
9063 Disabled at level @option{-Os}.
9065 @item -fno-printf-return-value
9066 @opindex fno-printf-return-value
9067 Do not substitute constants for known return value of formatted output
9068 functions such as @code{sprintf}, @code{snprintf}, @code{vsprintf}, and
9069 @code{vsnprintf} (but not @code{printf} of @code{fprintf}).  This
9070 transformation allows GCC to optimize or even eliminate branches based
9071 on the known return value of these functions called with arguments that
9072 are either constant, or whose values are known to be in a range that
9073 makes determining the exact return value possible.  For example, when
9074 @option{-fprintf-return-value} is in effect, both the branch and the
9075 body of the @code{if} statement (but not the call to @code{snprint})
9076 can be optimized away when @code{i} is a 32-bit or smaller integer
9077 because the return value is guaranteed to be at most 8.
9079 @smallexample
9080 char buf[9];
9081 if (snprintf (buf, "%08x", i) >= sizeof buf)
9082   @dots{}
9083 @end smallexample
9085 The @option{-fprintf-return-value} option relies on other optimizations
9086 and yields best results with @option{-O2} and above.  It works in tandem
9087 with the @option{-Wformat-overflow} and @option{-Wformat-truncation}
9088 options.  The @option{-fprintf-return-value} option is enabled by default.
9090 @item -fno-peephole
9091 @itemx -fno-peephole2
9092 @opindex fno-peephole
9093 @opindex fno-peephole2
9094 Disable any machine-specific peephole optimizations.  The difference
9095 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
9096 are implemented in the compiler; some targets use one, some use the
9097 other, a few use both.
9099 @option{-fpeephole} is enabled by default.
9100 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
9102 @item -fno-guess-branch-probability
9103 @opindex fno-guess-branch-probability
9104 Do not guess branch probabilities using heuristics.
9106 GCC uses heuristics to guess branch probabilities if they are
9107 not provided by profiling feedback (@option{-fprofile-arcs}).  These
9108 heuristics are based on the control flow graph.  If some branch probabilities
9109 are specified by @code{__builtin_expect}, then the heuristics are
9110 used to guess branch probabilities for the rest of the control flow graph,
9111 taking the @code{__builtin_expect} info into account.  The interactions
9112 between the heuristics and @code{__builtin_expect} can be complex, and in
9113 some cases, it may be useful to disable the heuristics so that the effects
9114 of @code{__builtin_expect} are easier to understand.
9116 The default is @option{-fguess-branch-probability} at levels
9117 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9119 @item -freorder-blocks
9120 @opindex freorder-blocks
9121 Reorder basic blocks in the compiled function in order to reduce number of
9122 taken branches and improve code locality.
9124 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9126 @item -freorder-blocks-algorithm=@var{algorithm}
9127 @opindex freorder-blocks-algorithm
9128 Use the specified algorithm for basic block reordering.  The
9129 @var{algorithm} argument can be @samp{simple}, which does not increase
9130 code size (except sometimes due to secondary effects like alignment),
9131 or @samp{stc}, the ``software trace cache'' algorithm, which tries to
9132 put all often executed code together, minimizing the number of branches
9133 executed by making extra copies of code.
9135 The default is @samp{simple} at levels @option{-O}, @option{-Os}, and
9136 @samp{stc} at levels @option{-O2}, @option{-O3}.
9138 @item -freorder-blocks-and-partition
9139 @opindex freorder-blocks-and-partition
9140 In addition to reordering basic blocks in the compiled function, in order
9141 to reduce number of taken branches, partitions hot and cold basic blocks
9142 into separate sections of the assembly and @file{.o} files, to improve
9143 paging and cache locality performance.
9145 This optimization is automatically turned off in the presence of
9146 exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined
9147 section attribute and on any architecture that does not support named
9148 sections.  When @option{-fsplit-stack} is used this option is not
9149 enabled by default (to avoid linker errors), but may be enabled
9150 explicitly (if using a working linker).
9152 Enabled for x86 at levels @option{-O2}, @option{-O3}, @option{-Os}.
9154 @item -freorder-functions
9155 @opindex freorder-functions
9156 Reorder functions in the object file in order to
9157 improve code locality.  This is implemented by using special
9158 subsections @code{.text.hot} for most frequently executed functions and
9159 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
9160 the linker so object file format must support named sections and linker must
9161 place them in a reasonable way.
9163 Also profile feedback must be available to make this option effective.  See
9164 @option{-fprofile-arcs} for details.
9166 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
9168 @item -fstrict-aliasing
9169 @opindex fstrict-aliasing
9170 Allow the compiler to assume the strictest aliasing rules applicable to
9171 the language being compiled.  For C (and C++), this activates
9172 optimizations based on the type of expressions.  In particular, an
9173 object of one type is assumed never to reside at the same address as an
9174 object of a different type, unless the types are almost the same.  For
9175 example, an @code{unsigned int} can alias an @code{int}, but not a
9176 @code{void*} or a @code{double}.  A character type may alias any other
9177 type.
9179 @anchor{Type-punning}Pay special attention to code like this:
9180 @smallexample
9181 union a_union @{
9182   int i;
9183   double d;
9186 int f() @{
9187   union a_union t;
9188   t.d = 3.0;
9189   return t.i;
9191 @end smallexample
9192 The practice of reading from a different union member than the one most
9193 recently written to (called ``type-punning'') is common.  Even with
9194 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
9195 is accessed through the union type.  So, the code above works as
9196 expected.  @xref{Structures unions enumerations and bit-fields
9197 implementation}.  However, this code might not:
9198 @smallexample
9199 int f() @{
9200   union a_union t;
9201   int* ip;
9202   t.d = 3.0;
9203   ip = &t.i;
9204   return *ip;
9206 @end smallexample
9208 Similarly, access by taking the address, casting the resulting pointer
9209 and dereferencing the result has undefined behavior, even if the cast
9210 uses a union type, e.g.:
9211 @smallexample
9212 int f() @{
9213   double d = 3.0;
9214   return ((union a_union *) &d)->i;
9216 @end smallexample
9218 The @option{-fstrict-aliasing} option is enabled at levels
9219 @option{-O2}, @option{-O3}, @option{-Os}.
9221 @item -falign-functions
9222 @itemx -falign-functions=@var{n}
9223 @opindex falign-functions
9224 Align the start of functions to the next power-of-two greater than
9225 @var{n}, skipping up to @var{n} bytes.  For instance,
9226 @option{-falign-functions=32} aligns functions to the next 32-byte
9227 boundary, but @option{-falign-functions=24} aligns to the next
9228 32-byte boundary only if this can be done by skipping 23 bytes or less.
9230 @option{-fno-align-functions} and @option{-falign-functions=1} are
9231 equivalent and mean that functions are not aligned.
9233 Some assemblers only support this flag when @var{n} is a power of two;
9234 in that case, it is rounded up.
9236 If @var{n} is not specified or is zero, use a machine-dependent default.
9237 The maximum allowed @var{n} option value is 65536.
9239 Enabled at levels @option{-O2}, @option{-O3}.
9241 @item -flimit-function-alignment
9242 If this option is enabled, the compiler tries to avoid unnecessarily
9243 overaligning functions. It attempts to instruct the assembler to align
9244 by the amount specified by @option{-falign-functions}, but not to
9245 skip more bytes than the size of the function.
9247 @item -falign-labels
9248 @itemx -falign-labels=@var{n}
9249 @opindex falign-labels
9250 Align all branch targets to a power-of-two boundary, skipping up to
9251 @var{n} bytes like @option{-falign-functions}.  This option can easily
9252 make code slower, because it must insert dummy operations for when the
9253 branch target is reached in the usual flow of the code.
9255 @option{-fno-align-labels} and @option{-falign-labels=1} are
9256 equivalent and mean that labels are not aligned.
9258 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
9259 are greater than this value, then their values are used instead.
9261 If @var{n} is not specified or is zero, use a machine-dependent default
9262 which is very likely to be @samp{1}, meaning no alignment.
9263 The maximum allowed @var{n} option value is 65536.
9265 Enabled at levels @option{-O2}, @option{-O3}.
9267 @item -falign-loops
9268 @itemx -falign-loops=@var{n}
9269 @opindex falign-loops
9270 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
9271 like @option{-falign-functions}.  If the loops are
9272 executed many times, this makes up for any execution of the dummy
9273 operations.
9275 @option{-fno-align-loops} and @option{-falign-loops=1} are
9276 equivalent and mean that loops are not aligned.
9277 The maximum allowed @var{n} option value is 65536.
9279 If @var{n} is not specified or is zero, use a machine-dependent default.
9281 Enabled at levels @option{-O2}, @option{-O3}.
9283 @item -falign-jumps
9284 @itemx -falign-jumps=@var{n}
9285 @opindex falign-jumps
9286 Align branch targets to a power-of-two boundary, for branch targets
9287 where the targets can only be reached by jumping, skipping up to @var{n}
9288 bytes like @option{-falign-functions}.  In this case, no dummy operations
9289 need be executed.
9291 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
9292 equivalent and mean that loops are not aligned.
9294 If @var{n} is not specified or is zero, use a machine-dependent default.
9295 The maximum allowed @var{n} option value is 65536.
9297 Enabled at levels @option{-O2}, @option{-O3}.
9299 @item -funit-at-a-time
9300 @opindex funit-at-a-time
9301 This option is left for compatibility reasons. @option{-funit-at-a-time}
9302 has no effect, while @option{-fno-unit-at-a-time} implies
9303 @option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
9305 Enabled by default.
9307 @item -fno-toplevel-reorder
9308 @opindex fno-toplevel-reorder
9309 Do not reorder top-level functions, variables, and @code{asm}
9310 statements.  Output them in the same order that they appear in the
9311 input file.  When this option is used, unreferenced static variables
9312 are not removed.  This option is intended to support existing code
9313 that relies on a particular ordering.  For new code, it is better to
9314 use attributes when possible.
9316 Enabled at level @option{-O0}.  When disabled explicitly, it also implies
9317 @option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some
9318 targets.
9320 @item -fweb
9321 @opindex fweb
9322 Constructs webs as commonly used for register allocation purposes and assign
9323 each web individual pseudo register.  This allows the register allocation pass
9324 to operate on pseudos directly, but also strengthens several other optimization
9325 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
9326 however, make debugging impossible, since variables no longer stay in a
9327 ``home register''.
9329 Enabled by default with @option{-funroll-loops}.
9331 @item -fwhole-program
9332 @opindex fwhole-program
9333 Assume that the current compilation unit represents the whole program being
9334 compiled.  All public functions and variables with the exception of @code{main}
9335 and those merged by attribute @code{externally_visible} become static functions
9336 and in effect are optimized more aggressively by interprocedural optimizers.
9338 This option should not be used in combination with @option{-flto}.
9339 Instead relying on a linker plugin should provide safer and more precise
9340 information.
9342 @item -flto[=@var{n}]
9343 @opindex flto
9344 This option runs the standard link-time optimizer.  When invoked
9345 with source code, it generates GIMPLE (one of GCC's internal
9346 representations) and writes it to special ELF sections in the object
9347 file.  When the object files are linked together, all the function
9348 bodies are read from these ELF sections and instantiated as if they
9349 had been part of the same translation unit.
9351 To use the link-time optimizer, @option{-flto} and optimization
9352 options should be specified at compile time and during the final link.
9353 It is recommended that you compile all the files participating in the
9354 same link with the same options and also specify those options at
9355 link time.  
9356 For example:
9358 @smallexample
9359 gcc -c -O2 -flto foo.c
9360 gcc -c -O2 -flto bar.c
9361 gcc -o myprog -flto -O2 foo.o bar.o
9362 @end smallexample
9364 The first two invocations to GCC save a bytecode representation
9365 of GIMPLE into special ELF sections inside @file{foo.o} and
9366 @file{bar.o}.  The final invocation reads the GIMPLE bytecode from
9367 @file{foo.o} and @file{bar.o}, merges the two files into a single
9368 internal image, and compiles the result as usual.  Since both
9369 @file{foo.o} and @file{bar.o} are merged into a single image, this
9370 causes all the interprocedural analyses and optimizations in GCC to
9371 work across the two files as if they were a single one.  This means,
9372 for example, that the inliner is able to inline functions in
9373 @file{bar.o} into functions in @file{foo.o} and vice-versa.
9375 Another (simpler) way to enable link-time optimization is:
9377 @smallexample
9378 gcc -o myprog -flto -O2 foo.c bar.c
9379 @end smallexample
9381 The above generates bytecode for @file{foo.c} and @file{bar.c},
9382 merges them together into a single GIMPLE representation and optimizes
9383 them as usual to produce @file{myprog}.
9385 The only important thing to keep in mind is that to enable link-time
9386 optimizations you need to use the GCC driver to perform the link step.
9387 GCC then automatically performs link-time optimization if any of the
9388 objects involved were compiled with the @option{-flto} command-line option.  
9389 You generally
9390 should specify the optimization options to be used for link-time
9391 optimization though GCC tries to be clever at guessing an
9392 optimization level to use from the options used at compile time
9393 if you fail to specify one at link time.  You can always override
9394 the automatic decision to do link-time optimization
9395 by passing @option{-fno-lto} to the link command.
9397 To make whole program optimization effective, it is necessary to make
9398 certain whole program assumptions.  The compiler needs to know
9399 what functions and variables can be accessed by libraries and runtime
9400 outside of the link-time optimized unit.  When supported by the linker,
9401 the linker plugin (see @option{-fuse-linker-plugin}) passes information
9402 to the compiler about used and externally visible symbols.  When
9403 the linker plugin is not available, @option{-fwhole-program} should be
9404 used to allow the compiler to make these assumptions, which leads
9405 to more aggressive optimization decisions.
9407 When @option{-fuse-linker-plugin} is not enabled, when a file is
9408 compiled with @option{-flto}, the generated object file is larger than
9409 a regular object file because it contains GIMPLE bytecodes and the usual
9410 final code (see @option{-ffat-lto-objects}.  This means that
9411 object files with LTO information can be linked as normal object
9412 files; if @option{-fno-lto} is passed to the linker, no
9413 interprocedural optimizations are applied.  Note that when
9414 @option{-fno-fat-lto-objects} is enabled the compile stage is faster
9415 but you cannot perform a regular, non-LTO link on them.
9417 Additionally, the optimization flags used to compile individual files
9418 are not necessarily related to those used at link time.  For instance,
9420 @smallexample
9421 gcc -c -O0 -ffat-lto-objects -flto foo.c
9422 gcc -c -O0 -ffat-lto-objects -flto bar.c
9423 gcc -o myprog -O3 foo.o bar.o
9424 @end smallexample
9426 This produces individual object files with unoptimized assembler
9427 code, but the resulting binary @file{myprog} is optimized at
9428 @option{-O3}.  If, instead, the final binary is generated with
9429 @option{-fno-lto}, then @file{myprog} is not optimized.
9431 When producing the final binary, GCC only
9432 applies link-time optimizations to those files that contain bytecode.
9433 Therefore, you can mix and match object files and libraries with
9434 GIMPLE bytecodes and final object code.  GCC automatically selects
9435 which files to optimize in LTO mode and which files to link without
9436 further processing.
9438 There are some code generation flags preserved by GCC when
9439 generating bytecodes, as they need to be used during the final link
9440 stage.  Generally options specified at link time override those
9441 specified at compile time.
9443 If you do not specify an optimization level option @option{-O} at
9444 link time, then GCC uses the highest optimization level 
9445 used when compiling the object files.
9447 Currently, the following options and their settings are taken from
9448 the first object file that explicitly specifies them: 
9449 @option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon},
9450 @option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm}
9451 and all the @option{-m} target flags.
9453 Certain ABI-changing flags are required to match in all compilation units,
9454 and trying to override this at link time with a conflicting value
9455 is ignored.  This includes options such as @option{-freg-struct-return}
9456 and @option{-fpcc-struct-return}. 
9458 Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
9459 @option{-fwrapv}, @option{-fno-trapv} or @option{-fno-strict-aliasing}
9460 are passed through to the link stage and merged conservatively for
9461 conflicting translation units.  Specifically
9462 @option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
9463 precedence; and for example @option{-ffp-contract=off} takes precedence
9464 over @option{-ffp-contract=fast}.  You can override them at link time.
9466 If LTO encounters objects with C linkage declared with incompatible
9467 types in separate translation units to be linked together (undefined
9468 behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
9469 issued.  The behavior is still undefined at run time.  Similar
9470 diagnostics may be raised for other languages.
9472 Another feature of LTO is that it is possible to apply interprocedural
9473 optimizations on files written in different languages:
9475 @smallexample
9476 gcc -c -flto foo.c
9477 g++ -c -flto bar.cc
9478 gfortran -c -flto baz.f90
9479 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
9480 @end smallexample
9482 Notice that the final link is done with @command{g++} to get the C++
9483 runtime libraries and @option{-lgfortran} is added to get the Fortran
9484 runtime libraries.  In general, when mixing languages in LTO mode, you
9485 should use the same link command options as when mixing languages in a
9486 regular (non-LTO) compilation.
9488 If object files containing GIMPLE bytecode are stored in a library archive, say
9489 @file{libfoo.a}, it is possible to extract and use them in an LTO link if you
9490 are using a linker with plugin support.  To create static libraries suitable
9491 for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar}
9492 and @command{ranlib}; 
9493 to show the symbols of object files with GIMPLE bytecode, use
9494 @command{gcc-nm}.  Those commands require that @command{ar}, @command{ranlib}
9495 and @command{nm} have been compiled with plugin support.  At link time, use the the
9496 flag @option{-fuse-linker-plugin} to ensure that the library participates in
9497 the LTO optimization process:
9499 @smallexample
9500 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
9501 @end smallexample
9503 With the linker plugin enabled, the linker extracts the needed
9504 GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
9505 to make them part of the aggregated GIMPLE image to be optimized.
9507 If you are not using a linker with plugin support and/or do not
9508 enable the linker plugin, then the objects inside @file{libfoo.a}
9509 are extracted and linked as usual, but they do not participate
9510 in the LTO optimization process.  In order to make a static library suitable
9511 for both LTO optimization and usual linkage, compile its object files with
9512 @option{-flto} @option{-ffat-lto-objects}.
9514 Link-time optimizations do not require the presence of the whole program to
9515 operate.  If the program does not require any symbols to be exported, it is
9516 possible to combine @option{-flto} and @option{-fwhole-program} to allow
9517 the interprocedural optimizers to use more aggressive assumptions which may
9518 lead to improved optimization opportunities.
9519 Use of @option{-fwhole-program} is not needed when linker plugin is
9520 active (see @option{-fuse-linker-plugin}).
9522 The current implementation of LTO makes no
9523 attempt to generate bytecode that is portable between different
9524 types of hosts.  The bytecode files are versioned and there is a
9525 strict version check, so bytecode files generated in one version of
9526 GCC do not work with an older or newer version of GCC.
9528 Link-time optimization does not work well with generation of debugging
9529 information on systems other than those using a combination of ELF and
9530 DWARF.
9532 If you specify the optional @var{n}, the optimization and code
9533 generation done at link time is executed in parallel using @var{n}
9534 parallel jobs by utilizing an installed @command{make} program.  The
9535 environment variable @env{MAKE} may be used to override the program
9536 used.  The default value for @var{n} is 1.
9538 You can also specify @option{-flto=jobserver} to use GNU make's
9539 job server mode to determine the number of parallel jobs. This
9540 is useful when the Makefile calling GCC is already executing in parallel.
9541 You must prepend a @samp{+} to the command recipe in the parent Makefile
9542 for this to work.  This option likely only works if @env{MAKE} is
9543 GNU make.
9545 @item -flto-partition=@var{alg}
9546 @opindex flto-partition
9547 Specify the partitioning algorithm used by the link-time optimizer.
9548 The value is either @samp{1to1} to specify a partitioning mirroring
9549 the original source files or @samp{balanced} to specify partitioning
9550 into equally sized chunks (whenever possible) or @samp{max} to create
9551 new partition for every symbol where possible.  Specifying @samp{none}
9552 as an algorithm disables partitioning and streaming completely. 
9553 The default value is @samp{balanced}. While @samp{1to1} can be used
9554 as an workaround for various code ordering issues, the @samp{max}
9555 partitioning is intended for internal testing only.
9556 The value @samp{one} specifies that exactly one partition should be
9557 used while the value @samp{none} bypasses partitioning and executes
9558 the link-time optimization step directly from the WPA phase.
9560 @item -flto-odr-type-merging
9561 @opindex flto-odr-type-merging
9562 Enable streaming of mangled types names of C++ types and their unification
9563 at link time.  This increases size of LTO object files, but enables
9564 diagnostics about One Definition Rule violations.
9566 @item -flto-compression-level=@var{n}
9567 @opindex flto-compression-level
9568 This option specifies the level of compression used for intermediate
9569 language written to LTO object files, and is only meaningful in
9570 conjunction with LTO mode (@option{-flto}).  Valid
9571 values are 0 (no compression) to 9 (maximum compression).  Values
9572 outside this range are clamped to either 0 or 9.  If the option is not
9573 given, a default balanced compression setting is used.
9575 @item -fuse-linker-plugin
9576 @opindex fuse-linker-plugin
9577 Enables the use of a linker plugin during link-time optimization.  This
9578 option relies on plugin support in the linker, which is available in gold
9579 or in GNU ld 2.21 or newer.
9581 This option enables the extraction of object files with GIMPLE bytecode out
9582 of library archives. This improves the quality of optimization by exposing
9583 more code to the link-time optimizer.  This information specifies what
9584 symbols can be accessed externally (by non-LTO object or during dynamic
9585 linking).  Resulting code quality improvements on binaries (and shared
9586 libraries that use hidden visibility) are similar to @option{-fwhole-program}.
9587 See @option{-flto} for a description of the effect of this flag and how to
9588 use it.
9590 This option is enabled by default when LTO support in GCC is enabled
9591 and GCC was configured for use with
9592 a linker supporting plugins (GNU ld 2.21 or newer or gold).
9594 @item -ffat-lto-objects
9595 @opindex ffat-lto-objects
9596 Fat LTO objects are object files that contain both the intermediate language
9597 and the object code. This makes them usable for both LTO linking and normal
9598 linking. This option is effective only when compiling with @option{-flto}
9599 and is ignored at link time.
9601 @option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
9602 requires the complete toolchain to be aware of LTO. It requires a linker with
9603 linker plugin support for basic functionality.  Additionally,
9604 @command{nm}, @command{ar} and @command{ranlib}
9605 need to support linker plugins to allow a full-featured build environment
9606 (capable of building static libraries etc).  GCC provides the @command{gcc-ar},
9607 @command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options
9608 to these tools. With non fat LTO makefiles need to be modified to use them.
9610 Note that modern binutils provide plugin auto-load mechanism.
9611 Installing the linker plugin into @file{$libdir/bfd-plugins} has the same
9612 effect as usage of the command wrappers (@command{gcc-ar}, @command{gcc-nm} and
9613 @command{gcc-ranlib}).
9615 The default is @option{-fno-fat-lto-objects} on targets with linker plugin
9616 support.
9618 @item -fcompare-elim
9619 @opindex fcompare-elim
9620 After register allocation and post-register allocation instruction splitting,
9621 identify arithmetic instructions that compute processor flags similar to a
9622 comparison operation based on that arithmetic.  If possible, eliminate the
9623 explicit comparison operation.
9625 This pass only applies to certain targets that cannot explicitly represent
9626 the comparison operation before register allocation is complete.
9628 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9630 @item -fcprop-registers
9631 @opindex fcprop-registers
9632 After register allocation and post-register allocation instruction splitting,
9633 perform a copy-propagation pass to try to reduce scheduling dependencies
9634 and occasionally eliminate the copy.
9636 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9638 @item -fprofile-correction
9639 @opindex fprofile-correction
9640 Profiles collected using an instrumented binary for multi-threaded programs may
9641 be inconsistent due to missed counter updates. When this option is specified,
9642 GCC uses heuristics to correct or smooth out such inconsistencies. By
9643 default, GCC emits an error message when an inconsistent profile is detected.
9645 @item -fprofile-use
9646 @itemx -fprofile-use=@var{path}
9647 @opindex fprofile-use
9648 Enable profile feedback-directed optimizations, 
9649 and the following optimizations
9650 which are generally profitable only with profile feedback available:
9651 @option{-fbranch-probabilities}, @option{-fvpt},
9652 @option{-funroll-loops}, @option{-fpeel-loops}, @option{-ftracer}, 
9653 @option{-ftree-vectorize}, and @option{ftree-loop-distribute-patterns}.
9655 Before you can use this option, you must first generate profiling information.
9656 @xref{Instrumentation Options}, for information about the
9657 @option{-fprofile-generate} option.
9659 By default, GCC emits an error message if the feedback profiles do not
9660 match the source code.  This error can be turned into a warning by using
9661 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
9662 code.
9664 If @var{path} is specified, GCC looks at the @var{path} to find
9665 the profile feedback data files. See @option{-fprofile-dir}.
9667 @item -fauto-profile
9668 @itemx -fauto-profile=@var{path}
9669 @opindex fauto-profile
9670 Enable sampling-based feedback-directed optimizations, 
9671 and the following optimizations
9672 which are generally profitable only with profile feedback available:
9673 @option{-fbranch-probabilities}, @option{-fvpt},
9674 @option{-funroll-loops}, @option{-fpeel-loops}, @option{-ftracer}, 
9675 @option{-ftree-vectorize},
9676 @option{-finline-functions}, @option{-fipa-cp}, @option{-fipa-cp-clone},
9677 @option{-fpredictive-commoning}, @option{-funswitch-loops},
9678 @option{-fgcse-after-reload}, and @option{-ftree-loop-distribute-patterns}.
9680 @var{path} is the name of a file containing AutoFDO profile information.
9681 If omitted, it defaults to @file{fbdata.afdo} in the current directory.
9683 Producing an AutoFDO profile data file requires running your program
9684 with the @command{perf} utility on a supported GNU/Linux target system.
9685 For more information, see @uref{https://perf.wiki.kernel.org/}.
9687 E.g.
9688 @smallexample
9689 perf record -e br_inst_retired:near_taken -b -o perf.data \
9690     -- your_program
9691 @end smallexample
9693 Then use the @command{create_gcov} tool to convert the raw profile data
9694 to a format that can be used by GCC.@  You must also supply the 
9695 unstripped binary for your program to this tool.  
9696 See @uref{https://github.com/google/autofdo}.
9698 E.g.
9699 @smallexample
9700 create_gcov --binary=your_program.unstripped --profile=perf.data \
9701     --gcov=profile.afdo
9702 @end smallexample
9703 @end table
9705 The following options control compiler behavior regarding floating-point 
9706 arithmetic.  These options trade off between speed and
9707 correctness.  All must be specifically enabled.
9709 @table @gcctabopt
9710 @item -ffloat-store
9711 @opindex ffloat-store
9712 Do not store floating-point variables in registers, and inhibit other
9713 options that might change whether a floating-point value is taken from a
9714 register or memory.
9716 @cindex floating-point precision
9717 This option prevents undesirable excess precision on machines such as
9718 the 68000 where the floating registers (of the 68881) keep more
9719 precision than a @code{double} is supposed to have.  Similarly for the
9720 x86 architecture.  For most programs, the excess precision does only
9721 good, but a few programs rely on the precise definition of IEEE floating
9722 point.  Use @option{-ffloat-store} for such programs, after modifying
9723 them to store all pertinent intermediate computations into variables.
9725 @item -fexcess-precision=@var{style}
9726 @opindex fexcess-precision
9727 This option allows further control over excess precision on machines
9728 where floating-point operations occur in a format with more precision or
9729 range than the IEEE standard and interchange floating-point types.  By
9730 default, @option{-fexcess-precision=fast} is in effect; this means that
9731 operations may be carried out in a wider precision than the types specified
9732 in the source if that would result in faster code, and it is unpredictable
9733 when rounding to the types specified in the source code takes place.
9734 When compiling C, if @option{-fexcess-precision=standard} is specified then
9735 excess precision follows the rules specified in ISO C99; in particular,
9736 both casts and assignments cause values to be rounded to their
9737 semantic types (whereas @option{-ffloat-store} only affects
9738 assignments).  This option is enabled by default for C if a strict
9739 conformance option such as @option{-std=c99} is used.
9740 @option{-ffast-math} enables @option{-fexcess-precision=fast} by default
9741 regardless of whether a strict conformance option is used.
9743 @opindex mfpmath
9744 @option{-fexcess-precision=standard} is not implemented for languages
9745 other than C.  On the x86, it has no effect if @option{-mfpmath=sse}
9746 or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
9747 semantics apply without excess precision, and in the latter, rounding
9748 is unpredictable.
9750 @item -ffast-math
9751 @opindex ffast-math
9752 Sets the options @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
9753 @option{-ffinite-math-only}, @option{-fno-rounding-math},
9754 @option{-fno-signaling-nans}, @option{-fcx-limited-range} and
9755 @option{-fexcess-precision=fast}.
9757 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
9759 This option is not turned on by any @option{-O} option besides
9760 @option{-Ofast} since it can result in incorrect output for programs
9761 that depend on an exact implementation of IEEE or ISO rules/specifications
9762 for math functions. It may, however, yield faster code for programs
9763 that do not require the guarantees of these specifications.
9765 @item -fno-math-errno
9766 @opindex fno-math-errno
9767 Do not set @code{errno} after calling math functions that are executed
9768 with a single instruction, e.g., @code{sqrt}.  A program that relies on
9769 IEEE exceptions for math error handling may want to use this flag
9770 for speed while maintaining IEEE arithmetic compatibility.
9772 This option is not turned on by any @option{-O} option since
9773 it can result in incorrect output for programs that depend on
9774 an exact implementation of IEEE or ISO rules/specifications for
9775 math functions. It may, however, yield faster code for programs
9776 that do not require the guarantees of these specifications.
9778 The default is @option{-fmath-errno}.
9780 On Darwin systems, the math library never sets @code{errno}.  There is
9781 therefore no reason for the compiler to consider the possibility that
9782 it might, and @option{-fno-math-errno} is the default.
9784 @item -funsafe-math-optimizations
9785 @opindex funsafe-math-optimizations
9787 Allow optimizations for floating-point arithmetic that (a) assume
9788 that arguments and results are valid and (b) may violate IEEE or
9789 ANSI standards.  When used at link time, it may include libraries
9790 or startup files that change the default FPU control word or other
9791 similar optimizations.
9793 This option is not turned on by any @option{-O} option since
9794 it can result in incorrect output for programs that depend on
9795 an exact implementation of IEEE or ISO rules/specifications for
9796 math functions. It may, however, yield faster code for programs
9797 that do not require the guarantees of these specifications.
9798 Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
9799 @option{-fassociative-math} and @option{-freciprocal-math}.
9801 The default is @option{-fno-unsafe-math-optimizations}.
9803 @item -fassociative-math
9804 @opindex fassociative-math
9806 Allow re-association of operands in series of floating-point operations.
9807 This violates the ISO C and C++ language standard by possibly changing
9808 computation result.  NOTE: re-ordering may change the sign of zero as
9809 well as ignore NaNs and inhibit or create underflow or overflow (and
9810 thus cannot be used on code that relies on rounding behavior like
9811 @code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
9812 and thus may not be used when ordered comparisons are required.
9813 This option requires that both @option{-fno-signed-zeros} and
9814 @option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
9815 much sense with @option{-frounding-math}. For Fortran the option
9816 is automatically enabled when both @option{-fno-signed-zeros} and
9817 @option{-fno-trapping-math} are in effect.
9819 The default is @option{-fno-associative-math}.
9821 @item -freciprocal-math
9822 @opindex freciprocal-math
9824 Allow the reciprocal of a value to be used instead of dividing by
9825 the value if this enables optimizations.  For example @code{x / y}
9826 can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
9827 is subject to common subexpression elimination.  Note that this loses
9828 precision and increases the number of flops operating on the value.
9830 The default is @option{-fno-reciprocal-math}.
9832 @item -ffinite-math-only
9833 @opindex ffinite-math-only
9834 Allow optimizations for floating-point arithmetic that assume
9835 that arguments and results are not NaNs or +-Infs.
9837 This option is not turned on by any @option{-O} option since
9838 it can result in incorrect output for programs that depend on
9839 an exact implementation of IEEE or ISO rules/specifications for
9840 math functions. It may, however, yield faster code for programs
9841 that do not require the guarantees of these specifications.
9843 The default is @option{-fno-finite-math-only}.
9845 @item -fno-signed-zeros
9846 @opindex fno-signed-zeros
9847 Allow optimizations for floating-point arithmetic that ignore the
9848 signedness of zero.  IEEE arithmetic specifies the behavior of
9849 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
9850 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
9851 This option implies that the sign of a zero result isn't significant.
9853 The default is @option{-fsigned-zeros}.
9855 @item -fno-trapping-math
9856 @opindex fno-trapping-math
9857 Compile code assuming that floating-point operations cannot generate
9858 user-visible traps.  These traps include division by zero, overflow,
9859 underflow, inexact result and invalid operation.  This option requires
9860 that @option{-fno-signaling-nans} be in effect.  Setting this option may
9861 allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
9863 This option should never be turned on by any @option{-O} option since
9864 it can result in incorrect output for programs that depend on
9865 an exact implementation of IEEE or ISO rules/specifications for
9866 math functions.
9868 The default is @option{-ftrapping-math}.
9870 @item -frounding-math
9871 @opindex frounding-math
9872 Disable transformations and optimizations that assume default floating-point
9873 rounding behavior.  This is round-to-zero for all floating point
9874 to integer conversions, and round-to-nearest for all other arithmetic
9875 truncations.  This option should be specified for programs that change
9876 the FP rounding mode dynamically, or that may be executed with a
9877 non-default rounding mode.  This option disables constant folding of
9878 floating-point expressions at compile time (which may be affected by
9879 rounding mode) and arithmetic transformations that are unsafe in the
9880 presence of sign-dependent rounding modes.
9882 The default is @option{-fno-rounding-math}.
9884 This option is experimental and does not currently guarantee to
9885 disable all GCC optimizations that are affected by rounding mode.
9886 Future versions of GCC may provide finer control of this setting
9887 using C99's @code{FENV_ACCESS} pragma.  This command-line option
9888 will be used to specify the default state for @code{FENV_ACCESS}.
9890 @item -fsignaling-nans
9891 @opindex fsignaling-nans
9892 Compile code assuming that IEEE signaling NaNs may generate user-visible
9893 traps during floating-point operations.  Setting this option disables
9894 optimizations that may change the number of exceptions visible with
9895 signaling NaNs.  This option implies @option{-ftrapping-math}.
9897 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
9898 be defined.
9900 The default is @option{-fno-signaling-nans}.
9902 This option is experimental and does not currently guarantee to
9903 disable all GCC optimizations that affect signaling NaN behavior.
9905 @item -fno-fp-int-builtin-inexact
9906 @opindex fno-fp-int-builtin-inexact
9907 Do not allow the built-in functions @code{ceil}, @code{floor},
9908 @code{round} and @code{trunc}, and their @code{float} and @code{long
9909 double} variants, to generate code that raises the ``inexact''
9910 floating-point exception for noninteger arguments.  ISO C99 and C11
9911 allow these functions to raise the ``inexact'' exception, but ISO/IEC
9912 TS 18661-1:2014, the C bindings to IEEE 754-2008, does not allow these
9913 functions to do so.
9915 The default is @option{-ffp-int-builtin-inexact}, allowing the
9916 exception to be raised.  This option does nothing unless
9917 @option{-ftrapping-math} is in effect.
9919 Even if @option{-fno-fp-int-builtin-inexact} is used, if the functions
9920 generate a call to a library function then the ``inexact'' exception
9921 may be raised if the library implementation does not follow TS 18661.
9923 @item -fsingle-precision-constant
9924 @opindex fsingle-precision-constant
9925 Treat floating-point constants as single precision instead of
9926 implicitly converting them to double-precision constants.
9928 @item -fcx-limited-range
9929 @opindex fcx-limited-range
9930 When enabled, this option states that a range reduction step is not
9931 needed when performing complex division.  Also, there is no checking
9932 whether the result of a complex multiplication or division is @code{NaN
9933 + I*NaN}, with an attempt to rescue the situation in that case.  The
9934 default is @option{-fno-cx-limited-range}, but is enabled by
9935 @option{-ffast-math}.
9937 This option controls the default setting of the ISO C99
9938 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
9939 all languages.
9941 @item -fcx-fortran-rules
9942 @opindex fcx-fortran-rules
9943 Complex multiplication and division follow Fortran rules.  Range
9944 reduction is done as part of complex division, but there is no checking
9945 whether the result of a complex multiplication or division is @code{NaN
9946 + I*NaN}, with an attempt to rescue the situation in that case.
9948 The default is @option{-fno-cx-fortran-rules}.
9950 @end table
9952 The following options control optimizations that may improve
9953 performance, but are not enabled by any @option{-O} options.  This
9954 section includes experimental options that may produce broken code.
9956 @table @gcctabopt
9957 @item -fbranch-probabilities
9958 @opindex fbranch-probabilities
9959 After running a program compiled with @option{-fprofile-arcs}
9960 (@pxref{Instrumentation Options}),
9961 you can compile it a second time using
9962 @option{-fbranch-probabilities}, to improve optimizations based on
9963 the number of times each branch was taken.  When a program
9964 compiled with @option{-fprofile-arcs} exits, it saves arc execution
9965 counts to a file called @file{@var{sourcename}.gcda} for each source
9966 file.  The information in this data file is very dependent on the
9967 structure of the generated code, so you must use the same source code
9968 and the same optimization options for both compilations.
9970 With @option{-fbranch-probabilities}, GCC puts a
9971 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
9972 These can be used to improve optimization.  Currently, they are only
9973 used in one place: in @file{reorg.c}, instead of guessing which path a
9974 branch is most likely to take, the @samp{REG_BR_PROB} values are used to
9975 exactly determine which path is taken more often.
9977 @item -fprofile-values
9978 @opindex fprofile-values
9979 If combined with @option{-fprofile-arcs}, it adds code so that some
9980 data about values of expressions in the program is gathered.
9982 With @option{-fbranch-probabilities}, it reads back the data gathered
9983 from profiling values of expressions for usage in optimizations.
9985 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
9987 @item -fprofile-reorder-functions
9988 @opindex fprofile-reorder-functions
9989 Function reordering based on profile instrumentation collects
9990 first time of execution of a function and orders these functions
9991 in ascending order.
9993 Enabled with @option{-fprofile-use}.
9995 @item -fvpt
9996 @opindex fvpt
9997 If combined with @option{-fprofile-arcs}, this option instructs the compiler
9998 to add code to gather information about values of expressions.
10000 With @option{-fbranch-probabilities}, it reads back the data gathered
10001 and actually performs the optimizations based on them.
10002 Currently the optimizations include specialization of division operations
10003 using the knowledge about the value of the denominator.
10005 @item -frename-registers
10006 @opindex frename-registers
10007 Attempt to avoid false dependencies in scheduled code by making use
10008 of registers left over after register allocation.  This optimization
10009 most benefits processors with lots of registers.  Depending on the
10010 debug information format adopted by the target, however, it can
10011 make debugging impossible, since variables no longer stay in
10012 a ``home register''.
10014 Enabled by default with @option{-funroll-loops}.
10016 @item -fschedule-fusion
10017 @opindex fschedule-fusion
10018 Performs a target dependent pass over the instruction stream to schedule
10019 instructions of same type together because target machine can execute them
10020 more efficiently if they are adjacent to each other in the instruction flow.
10022 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
10024 @item -ftracer
10025 @opindex ftracer
10026 Perform tail duplication to enlarge superblock size.  This transformation
10027 simplifies the control flow of the function allowing other optimizations to do
10028 a better job.
10030 Enabled with @option{-fprofile-use}.
10032 @item -funroll-loops
10033 @opindex funroll-loops
10034 Unroll loops whose number of iterations can be determined at compile time or
10035 upon entry to the loop.  @option{-funroll-loops} implies
10036 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
10037 It also turns on complete loop peeling (i.e.@: complete removal of loops with
10038 a small constant number of iterations).  This option makes code larger, and may
10039 or may not make it run faster.
10041 Enabled with @option{-fprofile-use}.
10043 @item -funroll-all-loops
10044 @opindex funroll-all-loops
10045 Unroll all loops, even if their number of iterations is uncertain when
10046 the loop is entered.  This usually makes programs run more slowly.
10047 @option{-funroll-all-loops} implies the same options as
10048 @option{-funroll-loops}.
10050 @item -fpeel-loops
10051 @opindex fpeel-loops
10052 Peels loops for which there is enough information that they do not
10053 roll much (from profile feedback or static analysis).  It also turns on
10054 complete loop peeling (i.e.@: complete removal of loops with small constant
10055 number of iterations).
10057 Enabled with @option{-O3} and/or @option{-fprofile-use}.
10059 @item -fmove-loop-invariants
10060 @opindex fmove-loop-invariants
10061 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
10062 at level @option{-O1}
10064 @item -fsplit-loops
10065 @opindex fsplit-loops
10066 Split a loop into two if it contains a condition that's always true
10067 for one side of the iteration space and false for the other.
10069 @item -funswitch-loops
10070 @opindex funswitch-loops
10071 Move branches with loop invariant conditions out of the loop, with duplicates
10072 of the loop on both branches (modified according to result of the condition).
10074 @item -ffunction-sections
10075 @itemx -fdata-sections
10076 @opindex ffunction-sections
10077 @opindex fdata-sections
10078 Place each function or data item into its own section in the output
10079 file if the target supports arbitrary sections.  The name of the
10080 function or the name of the data item determines the section's name
10081 in the output file.
10083 Use these options on systems where the linker can perform optimizations to
10084 improve locality of reference in the instruction space.  Most systems using the
10085 ELF object format have linkers with such optimizations.  On AIX, the linker
10086 rearranges sections (CSECTs) based on the call graph.  The performance impact
10087 varies.
10089 Together with a linker garbage collection (linker @option{--gc-sections}
10090 option) these options may lead to smaller statically-linked executables (after
10091 stripping).
10093 On ELF/DWARF systems these options do not degenerate the quality of the debug
10094 information.  There could be issues with other object files/debug info formats.
10096 Only use these options when there are significant benefits from doing so.  When
10097 you specify these options, the assembler and linker create larger object and
10098 executable files and are also slower.  These options affect code generation.
10099 They prevent optimizations by the compiler and assembler using relative
10100 locations inside a translation unit since the locations are unknown until
10101 link time.  An example of such an optimization is relaxing calls to short call
10102 instructions.
10104 @item -fbranch-target-load-optimize
10105 @opindex fbranch-target-load-optimize
10106 Perform branch target register load optimization before prologue / epilogue
10107 threading.
10108 The use of target registers can typically be exposed only during reload,
10109 thus hoisting loads out of loops and doing inter-block scheduling needs
10110 a separate optimization pass.
10112 @item -fbranch-target-load-optimize2
10113 @opindex fbranch-target-load-optimize2
10114 Perform branch target register load optimization after prologue / epilogue
10115 threading.
10117 @item -fbtr-bb-exclusive
10118 @opindex fbtr-bb-exclusive
10119 When performing branch target register load optimization, don't reuse
10120 branch target registers within any basic block.
10122 @item -fstdarg-opt
10123 @opindex fstdarg-opt
10124 Optimize the prologue of variadic argument functions with respect to usage of
10125 those arguments.
10127 @item -fsection-anchors
10128 @opindex fsection-anchors
10129 Try to reduce the number of symbolic address calculations by using
10130 shared ``anchor'' symbols to address nearby objects.  This transformation
10131 can help to reduce the number of GOT entries and GOT accesses on some
10132 targets.
10134 For example, the implementation of the following function @code{foo}:
10136 @smallexample
10137 static int a, b, c;
10138 int foo (void) @{ return a + b + c; @}
10139 @end smallexample
10141 @noindent
10142 usually calculates the addresses of all three variables, but if you
10143 compile it with @option{-fsection-anchors}, it accesses the variables
10144 from a common anchor point instead.  The effect is similar to the
10145 following pseudocode (which isn't valid C):
10147 @smallexample
10148 int foo (void)
10150   register int *xr = &x;
10151   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
10153 @end smallexample
10155 Not all targets support this option.
10157 @item --param @var{name}=@var{value}
10158 @opindex param
10159 In some places, GCC uses various constants to control the amount of
10160 optimization that is done.  For example, GCC does not inline functions
10161 that contain more than a certain number of instructions.  You can
10162 control some of these constants on the command line using the
10163 @option{--param} option.
10165 The names of specific parameters, and the meaning of the values, are
10166 tied to the internals of the compiler, and are subject to change
10167 without notice in future releases.
10169 In each case, the @var{value} is an integer.  The allowable choices for
10170 @var{name} are:
10172 @table @gcctabopt
10173 @item predictable-branch-outcome
10174 When branch is predicted to be taken with probability lower than this threshold
10175 (in percent), then it is considered well predictable. The default is 10.
10177 @item max-rtl-if-conversion-insns
10178 RTL if-conversion tries to remove conditional branches around a block and
10179 replace them with conditionally executed instructions.  This parameter
10180 gives the maximum number of instructions in a block which should be
10181 considered for if-conversion.  The default is 10, though the compiler will
10182 also use other heuristics to decide whether if-conversion is likely to be
10183 profitable.
10185 @item max-rtl-if-conversion-predictable-cost
10186 @itemx max-rtl-if-conversion-unpredictable-cost
10187 RTL if-conversion will try to remove conditional branches around a block
10188 and replace them with conditionally executed instructions.  These parameters
10189 give the maximum permissible cost for the sequence that would be generated
10190 by if-conversion depending on whether the branch is statically determined
10191 to be predictable or not.  The units for this parameter are the same as
10192 those for the GCC internal seq_cost metric.  The compiler will try to
10193 provide a reasonable default for this parameter using the BRANCH_COST
10194 target macro.
10196 @item max-crossjump-edges
10197 The maximum number of incoming edges to consider for cross-jumping.
10198 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
10199 the number of edges incoming to each block.  Increasing values mean
10200 more aggressive optimization, making the compilation time increase with
10201 probably small improvement in executable size.
10203 @item min-crossjump-insns
10204 The minimum number of instructions that must be matched at the end
10205 of two blocks before cross-jumping is performed on them.  This
10206 value is ignored in the case where all instructions in the block being
10207 cross-jumped from are matched.  The default value is 5.
10209 @item max-grow-copy-bb-insns
10210 The maximum code size expansion factor when copying basic blocks
10211 instead of jumping.  The expansion is relative to a jump instruction.
10212 The default value is 8.
10214 @item max-goto-duplication-insns
10215 The maximum number of instructions to duplicate to a block that jumps
10216 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
10217 passes, GCC factors computed gotos early in the compilation process,
10218 and unfactors them as late as possible.  Only computed jumps at the
10219 end of a basic blocks with no more than max-goto-duplication-insns are
10220 unfactored.  The default value is 8.
10222 @item max-delay-slot-insn-search
10223 The maximum number of instructions to consider when looking for an
10224 instruction to fill a delay slot.  If more than this arbitrary number of
10225 instructions are searched, the time savings from filling the delay slot
10226 are minimal, so stop searching.  Increasing values mean more
10227 aggressive optimization, making the compilation time increase with probably
10228 small improvement in execution time.
10230 @item max-delay-slot-live-search
10231 When trying to fill delay slots, the maximum number of instructions to
10232 consider when searching for a block with valid live register
10233 information.  Increasing this arbitrarily chosen value means more
10234 aggressive optimization, increasing the compilation time.  This parameter
10235 should be removed when the delay slot code is rewritten to maintain the
10236 control-flow graph.
10238 @item max-gcse-memory
10239 The approximate maximum amount of memory that can be allocated in
10240 order to perform the global common subexpression elimination
10241 optimization.  If more memory than specified is required, the
10242 optimization is not done.
10244 @item max-gcse-insertion-ratio
10245 If the ratio of expression insertions to deletions is larger than this value
10246 for any expression, then RTL PRE inserts or removes the expression and thus
10247 leaves partially redundant computations in the instruction stream.  The default value is 20.
10249 @item max-pending-list-length
10250 The maximum number of pending dependencies scheduling allows
10251 before flushing the current state and starting over.  Large functions
10252 with few branches or calls can create excessively large lists which
10253 needlessly consume memory and resources.
10255 @item max-modulo-backtrack-attempts
10256 The maximum number of backtrack attempts the scheduler should make
10257 when modulo scheduling a loop.  Larger values can exponentially increase
10258 compilation time.
10260 @item max-inline-insns-single
10261 Several parameters control the tree inliner used in GCC@.
10262 This number sets the maximum number of instructions (counted in GCC's
10263 internal representation) in a single function that the tree inliner
10264 considers for inlining.  This only affects functions declared
10265 inline and methods implemented in a class declaration (C++).
10266 The default value is 400.
10268 @item max-inline-insns-auto
10269 When you use @option{-finline-functions} (included in @option{-O3}),
10270 a lot of functions that would otherwise not be considered for inlining
10271 by the compiler are investigated.  To those functions, a different
10272 (more restrictive) limit compared to functions declared inline can
10273 be applied.
10274 The default value is 30.
10276 @item inline-min-speedup
10277 When estimated performance improvement of caller + callee runtime exceeds this
10278 threshold (in percent), the function can be inlined regardless of the limit on
10279 @option{--param max-inline-insns-single} and @option{--param
10280 max-inline-insns-auto}.
10281 The default value is 15.
10283 @item large-function-insns
10284 The limit specifying really large functions.  For functions larger than this
10285 limit after inlining, inlining is constrained by
10286 @option{--param large-function-growth}.  This parameter is useful primarily
10287 to avoid extreme compilation time caused by non-linear algorithms used by the
10288 back end.
10289 The default value is 2700.
10291 @item large-function-growth
10292 Specifies maximal growth of large function caused by inlining in percents.
10293 The default value is 100 which limits large function growth to 2.0 times
10294 the original size.
10296 @item large-unit-insns
10297 The limit specifying large translation unit.  Growth caused by inlining of
10298 units larger than this limit is limited by @option{--param inline-unit-growth}.
10299 For small units this might be too tight.
10300 For example, consider a unit consisting of function A
10301 that is inline and B that just calls A three times.  If B is small relative to
10302 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
10303 large units consisting of small inlineable functions, however, the overall unit
10304 growth limit is needed to avoid exponential explosion of code size.  Thus for
10305 smaller units, the size is increased to @option{--param large-unit-insns}
10306 before applying @option{--param inline-unit-growth}.  The default is 10000.
10308 @item inline-unit-growth
10309 Specifies maximal overall growth of the compilation unit caused by inlining.
10310 The default value is 20 which limits unit growth to 1.2 times the original
10311 size. Cold functions (either marked cold via an attribute or by profile
10312 feedback) are not accounted into the unit size.
10314 @item ipcp-unit-growth
10315 Specifies maximal overall growth of the compilation unit caused by
10316 interprocedural constant propagation.  The default value is 10 which limits
10317 unit growth to 1.1 times the original size.
10319 @item large-stack-frame
10320 The limit specifying large stack frames.  While inlining the algorithm is trying
10321 to not grow past this limit too much.  The default value is 256 bytes.
10323 @item large-stack-frame-growth
10324 Specifies maximal growth of large stack frames caused by inlining in percents.
10325 The default value is 1000 which limits large stack frame growth to 11 times
10326 the original size.
10328 @item max-inline-insns-recursive
10329 @itemx max-inline-insns-recursive-auto
10330 Specifies the maximum number of instructions an out-of-line copy of a
10331 self-recursive inline
10332 function can grow into by performing recursive inlining.
10334 @option{--param max-inline-insns-recursive} applies to functions
10335 declared inline.
10336 For functions not declared inline, recursive inlining
10337 happens only when @option{-finline-functions} (included in @option{-O3}) is
10338 enabled; @option{--param max-inline-insns-recursive-auto} applies instead.  The
10339 default value is 450.
10341 @item max-inline-recursive-depth
10342 @itemx max-inline-recursive-depth-auto
10343 Specifies the maximum recursion depth used for recursive inlining.
10345 @option{--param max-inline-recursive-depth} applies to functions
10346 declared inline.  For functions not declared inline, recursive inlining
10347 happens only when @option{-finline-functions} (included in @option{-O3}) is
10348 enabled; @option{--param max-inline-recursive-depth-auto} applies instead.  The
10349 default value is 8.
10351 @item min-inline-recursive-probability
10352 Recursive inlining is profitable only for function having deep recursion
10353 in average and can hurt for function having little recursion depth by
10354 increasing the prologue size or complexity of function body to other
10355 optimizers.
10357 When profile feedback is available (see @option{-fprofile-generate}) the actual
10358 recursion depth can be guessed from the probability that function recurses
10359 via a given call expression.  This parameter limits inlining only to call
10360 expressions whose probability exceeds the given threshold (in percents).
10361 The default value is 10.
10363 @item early-inlining-insns
10364 Specify growth that the early inliner can make.  In effect it increases
10365 the amount of inlining for code having a large abstraction penalty.
10366 The default value is 14.
10368 @item max-early-inliner-iterations
10369 Limit of iterations of the early inliner.  This basically bounds
10370 the number of nested indirect calls the early inliner can resolve.
10371 Deeper chains are still handled by late inlining.
10373 @item comdat-sharing-probability
10374 Probability (in percent) that C++ inline function with comdat visibility
10375 are shared across multiple compilation units.  The default value is 20.
10377 @item profile-func-internal-id
10378 A parameter to control whether to use function internal id in profile
10379 database lookup. If the value is 0, the compiler uses an id that
10380 is based on function assembler name and filename, which makes old profile
10381 data more tolerant to source changes such as function reordering etc.
10382 The default value is 0.
10384 @item min-vect-loop-bound
10385 The minimum number of iterations under which loops are not vectorized
10386 when @option{-ftree-vectorize} is used.  The number of iterations after
10387 vectorization needs to be greater than the value specified by this option
10388 to allow vectorization.  The default value is 0.
10390 @item gcse-cost-distance-ratio
10391 Scaling factor in calculation of maximum distance an expression
10392 can be moved by GCSE optimizations.  This is currently supported only in the
10393 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
10394 is with simple expressions, i.e., the expressions that have cost
10395 less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
10396 hoisting of simple expressions.  The default value is 10.
10398 @item gcse-unrestricted-cost
10399 Cost, roughly measured as the cost of a single typical machine
10400 instruction, at which GCSE optimizations do not constrain
10401 the distance an expression can travel.  This is currently
10402 supported only in the code hoisting pass.  The lesser the cost,
10403 the more aggressive code hoisting is.  Specifying 0 
10404 allows all expressions to travel unrestricted distances.
10405 The default value is 3.
10407 @item max-hoist-depth
10408 The depth of search in the dominator tree for expressions to hoist.
10409 This is used to avoid quadratic behavior in hoisting algorithm.
10410 The value of 0 does not limit on the search, but may slow down compilation
10411 of huge functions.  The default value is 30.
10413 @item max-tail-merge-comparisons
10414 The maximum amount of similar bbs to compare a bb with.  This is used to
10415 avoid quadratic behavior in tree tail merging.  The default value is 10.
10417 @item max-tail-merge-iterations
10418 The maximum amount of iterations of the pass over the function.  This is used to
10419 limit compilation time in tree tail merging.  The default value is 2.
10421 @item store-merging-allow-unaligned
10422 Allow the store merging pass to introduce unaligned stores if it is legal to
10423 do so.  The default value is 1.
10425 @item max-stores-to-merge
10426 The maximum number of stores to attempt to merge into wider stores in the store
10427 merging pass.  The minimum value is 2 and the default is 64.
10429 @item max-unrolled-insns
10430 The maximum number of instructions that a loop may have to be unrolled.
10431 If a loop is unrolled, this parameter also determines how many times
10432 the loop code is unrolled.
10434 @item max-average-unrolled-insns
10435 The maximum number of instructions biased by probabilities of their execution
10436 that a loop may have to be unrolled.  If a loop is unrolled,
10437 this parameter also determines how many times the loop code is unrolled.
10439 @item max-unroll-times
10440 The maximum number of unrollings of a single loop.
10442 @item max-peeled-insns
10443 The maximum number of instructions that a loop may have to be peeled.
10444 If a loop is peeled, this parameter also determines how many times
10445 the loop code is peeled.
10447 @item max-peel-times
10448 The maximum number of peelings of a single loop.
10450 @item max-peel-branches
10451 The maximum number of branches on the hot path through the peeled sequence.
10453 @item max-completely-peeled-insns
10454 The maximum number of insns of a completely peeled loop.
10456 @item max-completely-peel-times
10457 The maximum number of iterations of a loop to be suitable for complete peeling.
10459 @item max-completely-peel-loop-nest-depth
10460 The maximum depth of a loop nest suitable for complete peeling.
10462 @item max-unswitch-insns
10463 The maximum number of insns of an unswitched loop.
10465 @item max-unswitch-level
10466 The maximum number of branches unswitched in a single loop.
10468 @item max-loop-headers-insns
10469 The maximum number of insns in loop header duplicated by the copy loop headers
10470 pass.
10472 @item lim-expensive
10473 The minimum cost of an expensive expression in the loop invariant motion.
10475 @item iv-consider-all-candidates-bound
10476 Bound on number of candidates for induction variables, below which
10477 all candidates are considered for each use in induction variable
10478 optimizations.  If there are more candidates than this,
10479 only the most relevant ones are considered to avoid quadratic time complexity.
10481 @item iv-max-considered-uses
10482 The induction variable optimizations give up on loops that contain more
10483 induction variable uses.
10485 @item iv-always-prune-cand-set-bound
10486 If the number of candidates in the set is smaller than this value,
10487 always try to remove unnecessary ivs from the set
10488 when adding a new one.
10490 @item avg-loop-niter
10491 Average number of iterations of a loop.
10493 @item dse-max-object-size
10494 Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
10495 Larger values may result in larger compilation times.
10497 @item dse-max-alias-queries-per-store
10498 Maximum number of queries into the alias oracle per store.
10499 Larger values result in larger compilation times and may result in more
10500 removed dead stores.
10502 @item scev-max-expr-size
10503 Bound on size of expressions used in the scalar evolutions analyzer.
10504 Large expressions slow the analyzer.
10506 @item scev-max-expr-complexity
10507 Bound on the complexity of the expressions in the scalar evolutions analyzer.
10508 Complex expressions slow the analyzer.
10510 @item max-tree-if-conversion-phi-args
10511 Maximum number of arguments in a PHI supported by TREE if conversion
10512 unless the loop is marked with simd pragma.
10514 @item vect-max-version-for-alignment-checks
10515 The maximum number of run-time checks that can be performed when
10516 doing loop versioning for alignment in the vectorizer.
10518 @item vect-max-version-for-alias-checks
10519 The maximum number of run-time checks that can be performed when
10520 doing loop versioning for alias in the vectorizer.
10522 @item vect-max-peeling-for-alignment
10523 The maximum number of loop peels to enhance access alignment
10524 for vectorizer. Value -1 means no limit.
10526 @item max-iterations-to-track
10527 The maximum number of iterations of a loop the brute-force algorithm
10528 for analysis of the number of iterations of the loop tries to evaluate.
10530 @item hot-bb-count-ws-permille
10531 A basic block profile count is considered hot if it contributes to 
10532 the given permillage (i.e. 0...1000) of the entire profiled execution.
10534 @item hot-bb-frequency-fraction
10535 Select fraction of the entry block frequency of executions of basic block in
10536 function given basic block needs to have to be considered hot.
10538 @item max-predicted-iterations
10539 The maximum number of loop iterations we predict statically.  This is useful
10540 in cases where a function contains a single loop with known bound and
10541 another loop with unknown bound.
10542 The known number of iterations is predicted correctly, while
10543 the unknown number of iterations average to roughly 10.  This means that the
10544 loop without bounds appears artificially cold relative to the other one.
10546 @item builtin-expect-probability
10547 Control the probability of the expression having the specified value. This
10548 parameter takes a percentage (i.e. 0 ... 100) as input.
10549 The default probability of 90 is obtained empirically.
10551 @item align-threshold
10553 Select fraction of the maximal frequency of executions of a basic block in
10554 a function to align the basic block.
10556 @item align-loop-iterations
10558 A loop expected to iterate at least the selected number of iterations is
10559 aligned.
10561 @item tracer-dynamic-coverage
10562 @itemx tracer-dynamic-coverage-feedback
10564 This value is used to limit superblock formation once the given percentage of
10565 executed instructions is covered.  This limits unnecessary code size
10566 expansion.
10568 The @option{tracer-dynamic-coverage-feedback} parameter
10569 is used only when profile
10570 feedback is available.  The real profiles (as opposed to statically estimated
10571 ones) are much less balanced allowing the threshold to be larger value.
10573 @item tracer-max-code-growth
10574 Stop tail duplication once code growth has reached given percentage.  This is
10575 a rather artificial limit, as most of the duplicates are eliminated later in
10576 cross jumping, so it may be set to much higher values than is the desired code
10577 growth.
10579 @item tracer-min-branch-ratio
10581 Stop reverse growth when the reverse probability of best edge is less than this
10582 threshold (in percent).
10584 @item tracer-min-branch-probability
10585 @itemx tracer-min-branch-probability-feedback
10587 Stop forward growth if the best edge has probability lower than this
10588 threshold.
10590 Similarly to @option{tracer-dynamic-coverage} two parameters are
10591 provided.  @option{tracer-min-branch-probability-feedback} is used for
10592 compilation with profile feedback and @option{tracer-min-branch-probability}
10593 compilation without.  The value for compilation with profile feedback
10594 needs to be more conservative (higher) in order to make tracer
10595 effective.
10597 @item stack-clash-protection-guard-size
10598 Specify the size of the operating system provided stack guard as
10599 2 raised to @var{num} bytes.  The default value is 12 (4096 bytes).
10600 Acceptable values are between 12 and 30.  Higher values may reduce the
10601 number of explicit probes, but a value larger than the operating system
10602 provided guard will leave code vulnerable to stack clash style attacks.
10604 @item stack-clash-protection-probe-interval
10605 Stack clash protection involves probing stack space as it is allocated.  This
10606 param controls the maximum distance between probes into the stack as 2 raised
10607 to @var{num} bytes.  Acceptable values are between 10 and 16 and defaults to
10608 12.  Higher values may reduce the number of explicit probes, but a value
10609 larger than the operating system provided guard will leave code vulnerable to
10610 stack clash style attacks.
10612 @item max-cse-path-length
10614 The maximum number of basic blocks on path that CSE considers.
10615 The default is 10.
10617 @item max-cse-insns
10618 The maximum number of instructions CSE processes before flushing.
10619 The default is 1000.
10621 @item ggc-min-expand
10623 GCC uses a garbage collector to manage its own memory allocation.  This
10624 parameter specifies the minimum percentage by which the garbage
10625 collector's heap should be allowed to expand between collections.
10626 Tuning this may improve compilation speed; it has no effect on code
10627 generation.
10629 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
10630 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
10631 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
10632 GCC is not able to calculate RAM on a particular platform, the lower
10633 bound of 30% is used.  Setting this parameter and
10634 @option{ggc-min-heapsize} to zero causes a full collection to occur at
10635 every opportunity.  This is extremely slow, but can be useful for
10636 debugging.
10638 @item ggc-min-heapsize
10640 Minimum size of the garbage collector's heap before it begins bothering
10641 to collect garbage.  The first collection occurs after the heap expands
10642 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
10643 tuning this may improve compilation speed, and has no effect on code
10644 generation.
10646 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
10647 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
10648 with a lower bound of 4096 (four megabytes) and an upper bound of
10649 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
10650 particular platform, the lower bound is used.  Setting this parameter
10651 very large effectively disables garbage collection.  Setting this
10652 parameter and @option{ggc-min-expand} to zero causes a full collection
10653 to occur at every opportunity.
10655 @item max-reload-search-insns
10656 The maximum number of instruction reload should look backward for equivalent
10657 register.  Increasing values mean more aggressive optimization, making the
10658 compilation time increase with probably slightly better performance.
10659 The default value is 100.
10661 @item max-cselib-memory-locations
10662 The maximum number of memory locations cselib should take into account.
10663 Increasing values mean more aggressive optimization, making the compilation time
10664 increase with probably slightly better performance.  The default value is 500.
10666 @item max-sched-ready-insns
10667 The maximum number of instructions ready to be issued the scheduler should
10668 consider at any given time during the first scheduling pass.  Increasing
10669 values mean more thorough searches, making the compilation time increase
10670 with probably little benefit.  The default value is 100.
10672 @item max-sched-region-blocks
10673 The maximum number of blocks in a region to be considered for
10674 interblock scheduling.  The default value is 10.
10676 @item max-pipeline-region-blocks
10677 The maximum number of blocks in a region to be considered for
10678 pipelining in the selective scheduler.  The default value is 15.
10680 @item max-sched-region-insns
10681 The maximum number of insns in a region to be considered for
10682 interblock scheduling.  The default value is 100.
10684 @item max-pipeline-region-insns
10685 The maximum number of insns in a region to be considered for
10686 pipelining in the selective scheduler.  The default value is 200.
10688 @item min-spec-prob
10689 The minimum probability (in percents) of reaching a source block
10690 for interblock speculative scheduling.  The default value is 40.
10692 @item max-sched-extend-regions-iters
10693 The maximum number of iterations through CFG to extend regions.
10694 A value of 0 (the default) disables region extensions.
10696 @item max-sched-insn-conflict-delay
10697 The maximum conflict delay for an insn to be considered for speculative motion.
10698 The default value is 3.
10700 @item sched-spec-prob-cutoff
10701 The minimal probability of speculation success (in percents), so that
10702 speculative insns are scheduled.
10703 The default value is 40.
10705 @item sched-state-edge-prob-cutoff
10706 The minimum probability an edge must have for the scheduler to save its
10707 state across it.
10708 The default value is 10.
10710 @item sched-mem-true-dep-cost
10711 Minimal distance (in CPU cycles) between store and load targeting same
10712 memory locations.  The default value is 1.
10714 @item selsched-max-lookahead
10715 The maximum size of the lookahead window of selective scheduling.  It is a
10716 depth of search for available instructions.
10717 The default value is 50.
10719 @item selsched-max-sched-times
10720 The maximum number of times that an instruction is scheduled during
10721 selective scheduling.  This is the limit on the number of iterations
10722 through which the instruction may be pipelined.  The default value is 2.
10724 @item selsched-insns-to-rename
10725 The maximum number of best instructions in the ready list that are considered
10726 for renaming in the selective scheduler.  The default value is 2.
10728 @item sms-min-sc
10729 The minimum value of stage count that swing modulo scheduler
10730 generates.  The default value is 2.
10732 @item max-last-value-rtl
10733 The maximum size measured as number of RTLs that can be recorded in an expression
10734 in combiner for a pseudo register as last known value of that register.  The default
10735 is 10000.
10737 @item max-combine-insns
10738 The maximum number of instructions the RTL combiner tries to combine.
10739 The default value is 2 at @option{-Og} and 4 otherwise.
10741 @item integer-share-limit
10742 Small integer constants can use a shared data structure, reducing the
10743 compiler's memory usage and increasing its speed.  This sets the maximum
10744 value of a shared integer constant.  The default value is 256.
10746 @item ssp-buffer-size
10747 The minimum size of buffers (i.e.@: arrays) that receive stack smashing
10748 protection when @option{-fstack-protection} is used.
10750 @item min-size-for-stack-sharing
10751 The minimum size of variables taking part in stack slot sharing when not
10752 optimizing. The default value is 32.
10754 @item max-jump-thread-duplication-stmts
10755 Maximum number of statements allowed in a block that needs to be
10756 duplicated when threading jumps.
10758 @item max-fields-for-field-sensitive
10759 Maximum number of fields in a structure treated in
10760 a field sensitive manner during pointer analysis.  The default is zero
10761 for @option{-O0} and @option{-O1},
10762 and 100 for @option{-Os}, @option{-O2}, and @option{-O3}.
10764 @item prefetch-latency
10765 Estimate on average number of instructions that are executed before
10766 prefetch finishes.  The distance prefetched ahead is proportional
10767 to this constant.  Increasing this number may also lead to less
10768 streams being prefetched (see @option{simultaneous-prefetches}).
10770 @item simultaneous-prefetches
10771 Maximum number of prefetches that can run at the same time.
10773 @item l1-cache-line-size
10774 The size of cache line in L1 cache, in bytes.
10776 @item l1-cache-size
10777 The size of L1 cache, in kilobytes.
10779 @item l2-cache-size
10780 The size of L2 cache, in kilobytes.
10782 @item prefetch-dynamic-strides
10783 Whether the loop array prefetch pass should issue software prefetch hints
10784 for strides that are non-constant.  In some cases this may be
10785 beneficial, though the fact the stride is non-constant may make it
10786 hard to predict when there is clear benefit to issuing these hints.
10788 Set to 1, the default, if the prefetch hints should be issued for non-constant
10789 strides.  Set to 0 if prefetch hints should be issued only for strides that
10790 are known to be constant and below @option{prefetch-minimum-stride}.
10792 @item prefetch-minimum-stride
10793 Minimum constant stride, in bytes, to start using prefetch hints for.  If
10794 the stride is less than this threshold, prefetch hints will not be issued.
10796 This setting is useful for processors that have hardware prefetchers, in
10797 which case there may be conflicts between the hardware prefetchers and
10798 the software prefetchers.  If the hardware prefetchers have a maximum
10799 stride they can handle, it should be used here to improve the use of
10800 software prefetchers.
10802 A value of -1, the default, means we don't have a threshold and therefore
10803 prefetch hints can be issued for any constant stride.
10805 This setting is only useful for strides that are known and constant.
10807 @item loop-interchange-max-num-stmts
10808 The maximum number of stmts in a loop to be interchanged.
10810 @item loop-interchange-stride-ratio
10811 The minimum ratio between stride of two loops for interchange to be profitable.
10813 @item min-insn-to-prefetch-ratio
10814 The minimum ratio between the number of instructions and the
10815 number of prefetches to enable prefetching in a loop.
10817 @item prefetch-min-insn-to-mem-ratio
10818 The minimum ratio between the number of instructions and the
10819 number of memory references to enable prefetching in a loop.
10821 @item use-canonical-types
10822 Whether the compiler should use the ``canonical'' type system.  By
10823 default, this should always be 1, which uses a more efficient internal
10824 mechanism for comparing types in C++ and Objective-C++.  However, if
10825 bugs in the canonical type system are causing compilation failures,
10826 set this value to 0 to disable canonical types.
10828 @item switch-conversion-max-branch-ratio
10829 Switch initialization conversion refuses to create arrays that are
10830 bigger than @option{switch-conversion-max-branch-ratio} times the number of
10831 branches in the switch.
10833 @item max-partial-antic-length
10834 Maximum length of the partial antic set computed during the tree
10835 partial redundancy elimination optimization (@option{-ftree-pre}) when
10836 optimizing at @option{-O3} and above.  For some sorts of source code
10837 the enhanced partial redundancy elimination optimization can run away,
10838 consuming all of the memory available on the host machine.  This
10839 parameter sets a limit on the length of the sets that are computed,
10840 which prevents the runaway behavior.  Setting a value of 0 for
10841 this parameter allows an unlimited set length.
10843 @item sccvn-max-scc-size
10844 Maximum size of a strongly connected component (SCC) during SCCVN
10845 processing.  If this limit is hit, SCCVN processing for the whole
10846 function is not done and optimizations depending on it are
10847 disabled.  The default maximum SCC size is 10000.
10849 @item sccvn-max-alias-queries-per-access
10850 Maximum number of alias-oracle queries we perform when looking for
10851 redundancies for loads and stores.  If this limit is hit the search
10852 is aborted and the load or store is not considered redundant.  The
10853 number of queries is algorithmically limited to the number of
10854 stores on all paths from the load to the function entry.
10855 The default maximum number of queries is 1000.
10857 @item ira-max-loops-num
10858 IRA uses regional register allocation by default.  If a function
10859 contains more loops than the number given by this parameter, only at most
10860 the given number of the most frequently-executed loops form regions
10861 for regional register allocation.  The default value of the
10862 parameter is 100.
10864 @item ira-max-conflict-table-size 
10865 Although IRA uses a sophisticated algorithm to compress the conflict
10866 table, the table can still require excessive amounts of memory for
10867 huge functions.  If the conflict table for a function could be more
10868 than the size in MB given by this parameter, the register allocator
10869 instead uses a faster, simpler, and lower-quality
10870 algorithm that does not require building a pseudo-register conflict table.  
10871 The default value of the parameter is 2000.
10873 @item ira-loop-reserved-regs
10874 IRA can be used to evaluate more accurate register pressure in loops
10875 for decisions to move loop invariants (see @option{-O3}).  The number
10876 of available registers reserved for some other purposes is given
10877 by this parameter.  The default value of the parameter is 2, which is
10878 the minimal number of registers needed by typical instructions.
10879 This value is the best found from numerous experiments.
10881 @item lra-inheritance-ebb-probability-cutoff
10882 LRA tries to reuse values reloaded in registers in subsequent insns.
10883 This optimization is called inheritance.  EBB is used as a region to
10884 do this optimization.  The parameter defines a minimal fall-through
10885 edge probability in percentage used to add BB to inheritance EBB in
10886 LRA.  The default value of the parameter is 40.  The value was chosen
10887 from numerous runs of SPEC2000 on x86-64.
10889 @item loop-invariant-max-bbs-in-loop
10890 Loop invariant motion can be very expensive, both in compilation time and
10891 in amount of needed compile-time memory, with very large loops.  Loops
10892 with more basic blocks than this parameter won't have loop invariant
10893 motion optimization performed on them.  The default value of the
10894 parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.
10896 @item loop-max-datarefs-for-datadeps
10897 Building data dependencies is expensive for very large loops.  This
10898 parameter limits the number of data references in loops that are
10899 considered for data dependence analysis.  These large loops are no
10900 handled by the optimizations using loop data dependencies.
10901 The default value is 1000.
10903 @item max-vartrack-size
10904 Sets a maximum number of hash table slots to use during variable
10905 tracking dataflow analysis of any function.  If this limit is exceeded
10906 with variable tracking at assignments enabled, analysis for that
10907 function is retried without it, after removing all debug insns from
10908 the function.  If the limit is exceeded even without debug insns, var
10909 tracking analysis is completely disabled for the function.  Setting
10910 the parameter to zero makes it unlimited.
10912 @item max-vartrack-expr-depth
10913 Sets a maximum number of recursion levels when attempting to map
10914 variable names or debug temporaries to value expressions.  This trades
10915 compilation time for more complete debug information.  If this is set too
10916 low, value expressions that are available and could be represented in
10917 debug information may end up not being used; setting this higher may
10918 enable the compiler to find more complex debug expressions, but compile
10919 time and memory use may grow.  The default is 12.
10921 @item max-debug-marker-count
10922 Sets a threshold on the number of debug markers (e.g. begin stmt
10923 markers) to avoid complexity explosion at inlining or expanding to RTL.
10924 If a function has more such gimple stmts than the set limit, such stmts
10925 will be dropped from the inlined copy of a function, and from its RTL
10926 expansion.  The default is 100000.
10928 @item min-nondebug-insn-uid
10929 Use uids starting at this parameter for nondebug insns.  The range below
10930 the parameter is reserved exclusively for debug insns created by
10931 @option{-fvar-tracking-assignments}, but debug insns may get
10932 (non-overlapping) uids above it if the reserved range is exhausted.
10934 @item ipa-sra-ptr-growth-factor
10935 IPA-SRA replaces a pointer to an aggregate with one or more new
10936 parameters only when their cumulative size is less or equal to
10937 @option{ipa-sra-ptr-growth-factor} times the size of the original
10938 pointer parameter.
10940 @item sra-max-scalarization-size-Ospeed
10941 @itemx sra-max-scalarization-size-Osize
10942 The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA) aim to
10943 replace scalar parts of aggregates with uses of independent scalar
10944 variables.  These parameters control the maximum size, in storage units,
10945 of aggregate which is considered for replacement when compiling for
10946 speed
10947 (@option{sra-max-scalarization-size-Ospeed}) or size
10948 (@option{sra-max-scalarization-size-Osize}) respectively.
10950 @item tm-max-aggregate-size
10951 When making copies of thread-local variables in a transaction, this
10952 parameter specifies the size in bytes after which variables are
10953 saved with the logging functions as opposed to save/restore code
10954 sequence pairs.  This option only applies when using
10955 @option{-fgnu-tm}.
10957 @item graphite-max-nb-scop-params
10958 To avoid exponential effects in the Graphite loop transforms, the
10959 number of parameters in a Static Control Part (SCoP) is bounded.  The
10960 default value is 10 parameters, a value of zero can be used to lift
10961 the bound.  A variable whose value is unknown at compilation time and
10962 defined outside a SCoP is a parameter of the SCoP.
10964 @item loop-block-tile-size
10965 Loop blocking or strip mining transforms, enabled with
10966 @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
10967 loop in the loop nest by a given number of iterations.  The strip
10968 length can be changed using the @option{loop-block-tile-size}
10969 parameter.  The default value is 51 iterations.
10971 @item loop-unroll-jam-size
10972 Specify the unroll factor for the @option{-floop-unroll-and-jam} option.  The 
10973 default value is 4.
10975 @item loop-unroll-jam-depth
10976 Specify the dimension to be unrolled (counting from the most inner loop)
10977 for the  @option{-floop-unroll-and-jam}.  The default value is 2.
10979 @item ipa-cp-value-list-size
10980 IPA-CP attempts to track all possible values and types passed to a function's
10981 parameter in order to propagate them and perform devirtualization.
10982 @option{ipa-cp-value-list-size} is the maximum number of values and types it
10983 stores per one formal parameter of a function.
10985 @item ipa-cp-eval-threshold
10986 IPA-CP calculates its own score of cloning profitability heuristics
10987 and performs those cloning opportunities with scores that exceed
10988 @option{ipa-cp-eval-threshold}.
10990 @item ipa-cp-recursion-penalty
10991 Percentage penalty the recursive functions will receive when they
10992 are evaluated for cloning.
10994 @item ipa-cp-single-call-penalty
10995 Percentage penalty functions containing a single call to another
10996 function will receive when they are evaluated for cloning.
10999 @item ipa-max-agg-items
11000 IPA-CP is also capable to propagate a number of scalar values passed
11001 in an aggregate. @option{ipa-max-agg-items} controls the maximum
11002 number of such values per one parameter.
11004 @item ipa-cp-loop-hint-bonus
11005 When IPA-CP determines that a cloning candidate would make the number
11006 of iterations of a loop known, it adds a bonus of
11007 @option{ipa-cp-loop-hint-bonus} to the profitability score of
11008 the candidate.
11010 @item ipa-cp-array-index-hint-bonus
11011 When IPA-CP determines that a cloning candidate would make the index of
11012 an array access known, it adds a bonus of
11013 @option{ipa-cp-array-index-hint-bonus} to the profitability
11014 score of the candidate.
11016 @item ipa-max-aa-steps
11017 During its analysis of function bodies, IPA-CP employs alias analysis
11018 in order to track values pointed to by function parameters.  In order
11019 not spend too much time analyzing huge functions, it gives up and
11020 consider all memory clobbered after examining
11021 @option{ipa-max-aa-steps} statements modifying memory.
11023 @item lto-partitions
11024 Specify desired number of partitions produced during WHOPR compilation.
11025 The number of partitions should exceed the number of CPUs used for compilation.
11026 The default value is 32.
11028 @item lto-min-partition
11029 Size of minimal partition for WHOPR (in estimated instructions).
11030 This prevents expenses of splitting very small programs into too many
11031 partitions.
11033 @item lto-max-partition
11034 Size of max partition for WHOPR (in estimated instructions).
11035 to provide an upper bound for individual size of partition.
11036 Meant to be used only with balanced partitioning.
11038 @item cxx-max-namespaces-for-diagnostic-help
11039 The maximum number of namespaces to consult for suggestions when C++
11040 name lookup fails for an identifier.  The default is 1000.
11042 @item sink-frequency-threshold
11043 The maximum relative execution frequency (in percents) of the target block
11044 relative to a statement's original block to allow statement sinking of a
11045 statement.  Larger numbers result in more aggressive statement sinking.
11046 The default value is 75.  A small positive adjustment is applied for
11047 statements with memory operands as those are even more profitable so sink.
11049 @item max-stores-to-sink
11050 The maximum number of conditional store pairs that can be sunk.  Set to 0
11051 if either vectorization (@option{-ftree-vectorize}) or if-conversion
11052 (@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
11054 @item allow-store-data-races
11055 Allow optimizers to introduce new data races on stores.
11056 Set to 1 to allow, otherwise to 0.  This option is enabled by default
11057 at optimization level @option{-Ofast}.
11059 @item case-values-threshold
11060 The smallest number of different values for which it is best to use a
11061 jump-table instead of a tree of conditional branches.  If the value is
11062 0, use the default for the machine.  The default is 0.
11064 @item tree-reassoc-width
11065 Set the maximum number of instructions executed in parallel in
11066 reassociated tree. This parameter overrides target dependent
11067 heuristics used by default if has non zero value.
11069 @item sched-pressure-algorithm
11070 Choose between the two available implementations of
11071 @option{-fsched-pressure}.  Algorithm 1 is the original implementation
11072 and is the more likely to prevent instructions from being reordered.
11073 Algorithm 2 was designed to be a compromise between the relatively
11074 conservative approach taken by algorithm 1 and the rather aggressive
11075 approach taken by the default scheduler.  It relies more heavily on
11076 having a regular register file and accurate register pressure classes.
11077 See @file{haifa-sched.c} in the GCC sources for more details.
11079 The default choice depends on the target.
11081 @item max-slsr-cand-scan
11082 Set the maximum number of existing candidates that are considered when
11083 seeking a basis for a new straight-line strength reduction candidate.
11085 @item asan-globals
11086 Enable buffer overflow detection for global objects.  This kind
11087 of protection is enabled by default if you are using
11088 @option{-fsanitize=address} option.
11089 To disable global objects protection use @option{--param asan-globals=0}.
11091 @item asan-stack
11092 Enable buffer overflow detection for stack objects.  This kind of
11093 protection is enabled by default when using @option{-fsanitize=address}.
11094 To disable stack protection use @option{--param asan-stack=0} option.
11096 @item asan-instrument-reads
11097 Enable buffer overflow detection for memory reads.  This kind of
11098 protection is enabled by default when using @option{-fsanitize=address}.
11099 To disable memory reads protection use
11100 @option{--param asan-instrument-reads=0}.
11102 @item asan-instrument-writes
11103 Enable buffer overflow detection for memory writes.  This kind of
11104 protection is enabled by default when using @option{-fsanitize=address}.
11105 To disable memory writes protection use
11106 @option{--param asan-instrument-writes=0} option.
11108 @item asan-memintrin
11109 Enable detection for built-in functions.  This kind of protection
11110 is enabled by default when using @option{-fsanitize=address}.
11111 To disable built-in functions protection use
11112 @option{--param asan-memintrin=0}.
11114 @item asan-use-after-return
11115 Enable detection of use-after-return.  This kind of protection
11116 is enabled by default when using the @option{-fsanitize=address} option.
11117 To disable it use @option{--param asan-use-after-return=0}.
11119 Note: By default the check is disabled at run time.  To enable it,
11120 add @code{detect_stack_use_after_return=1} to the environment variable
11121 @env{ASAN_OPTIONS}.
11123 @item asan-instrumentation-with-call-threshold
11124 If number of memory accesses in function being instrumented
11125 is greater or equal to this number, use callbacks instead of inline checks.
11126 E.g. to disable inline code use
11127 @option{--param asan-instrumentation-with-call-threshold=0}.
11129 @item use-after-scope-direct-emission-threshold
11130 If the size of a local variable in bytes is smaller or equal to this
11131 number, directly poison (or unpoison) shadow memory instead of using
11132 run-time callbacks.  The default value is 256.
11134 @item chkp-max-ctor-size
11135 Static constructors generated by Pointer Bounds Checker may become very
11136 large and significantly increase compile time at optimization level
11137 @option{-O1} and higher.  This parameter is a maximum number of statements
11138 in a single generated constructor.  Default value is 5000.
11140 @item max-fsm-thread-path-insns
11141 Maximum number of instructions to copy when duplicating blocks on a
11142 finite state automaton jump thread path.  The default is 100.
11144 @item max-fsm-thread-length
11145 Maximum number of basic blocks on a finite state automaton jump thread
11146 path.  The default is 10.
11148 @item max-fsm-thread-paths
11149 Maximum number of new jump thread paths to create for a finite state
11150 automaton.  The default is 50.
11152 @item parloops-chunk-size
11153 Chunk size of omp schedule for loops parallelized by parloops.  The default
11154 is 0.
11156 @item parloops-schedule
11157 Schedule type of omp schedule for loops parallelized by parloops (static,
11158 dynamic, guided, auto, runtime).  The default is static.
11160 @item parloops-min-per-thread
11161 The minimum number of iterations per thread of an innermost parallelized
11162 loop for which the parallelized variant is prefered over the single threaded
11163 one.  The default is 100.  Note that for a parallelized loop nest the
11164 minimum number of iterations of the outermost loop per thread is two.
11166 @item max-ssa-name-query-depth
11167 Maximum depth of recursion when querying properties of SSA names in things
11168 like fold routines.  One level of recursion corresponds to following a
11169 use-def chain.
11171 @item hsa-gen-debug-stores
11172 Enable emission of special debug stores within HSA kernels which are
11173 then read and reported by libgomp plugin.  Generation of these stores
11174 is disabled by default, use @option{--param hsa-gen-debug-stores=1} to
11175 enable it.
11177 @item max-speculative-devirt-maydefs
11178 The maximum number of may-defs we analyze when looking for a must-def
11179 specifying the dynamic type of an object that invokes a virtual call
11180 we may be able to devirtualize speculatively.
11182 @item max-vrp-switch-assertions
11183 The maximum number of assertions to add along the default edge of a switch
11184 statement during VRP.  The default is 10.
11186 @item unroll-jam-min-percent
11187 The minimum percentage of memory references that must be optimized
11188 away for the unroll-and-jam transformation to be considered profitable.
11190 @item unroll-jam-max-unroll
11191 The maximum number of times the outer loop should be unrolled by
11192 the unroll-and-jam transformation.
11193 @end table
11194 @end table
11196 @node Instrumentation Options
11197 @section Program Instrumentation Options
11198 @cindex instrumentation options
11199 @cindex program instrumentation options
11200 @cindex run-time error checking options
11201 @cindex profiling options
11202 @cindex options, program instrumentation
11203 @cindex options, run-time error checking
11204 @cindex options, profiling
11206 GCC supports a number of command-line options that control adding
11207 run-time instrumentation to the code it normally generates.  
11208 For example, one purpose of instrumentation is collect profiling
11209 statistics for use in finding program hot spots, code coverage
11210 analysis, or profile-guided optimizations.
11211 Another class of program instrumentation is adding run-time checking 
11212 to detect programming errors like invalid pointer
11213 dereferences or out-of-bounds array accesses, as well as deliberately
11214 hostile attacks such as stack smashing or C++ vtable hijacking.
11215 There is also a general hook which can be used to implement other
11216 forms of tracing or function-level instrumentation for debug or
11217 program analysis purposes.
11219 @table @gcctabopt
11220 @cindex @command{prof}
11221 @item -p
11222 @opindex p
11223 Generate extra code to write profile information suitable for the
11224 analysis program @command{prof}.  You must use this option when compiling
11225 the source files you want data about, and you must also use it when
11226 linking.
11228 @cindex @command{gprof}
11229 @item -pg
11230 @opindex pg
11231 Generate extra code to write profile information suitable for the
11232 analysis program @command{gprof}.  You must use this option when compiling
11233 the source files you want data about, and you must also use it when
11234 linking.
11236 @item -fprofile-arcs
11237 @opindex fprofile-arcs
11238 Add code so that program flow @dfn{arcs} are instrumented.  During
11239 execution the program records how many times each branch and call is
11240 executed and how many times it is taken or returns.  On targets that support
11241 constructors with priority support, profiling properly handles constructors,
11242 destructors and C++ constructors (and destructors) of classes which are used
11243 as a type of a global variable.
11245 When the compiled
11246 program exits it saves this data to a file called
11247 @file{@var{auxname}.gcda} for each source file.  The data may be used for
11248 profile-directed optimizations (@option{-fbranch-probabilities}), or for
11249 test coverage analysis (@option{-ftest-coverage}).  Each object file's
11250 @var{auxname} is generated from the name of the output file, if
11251 explicitly specified and it is not the final executable, otherwise it is
11252 the basename of the source file.  In both cases any suffix is removed
11253 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
11254 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
11255 @xref{Cross-profiling}.
11257 @cindex @command{gcov}
11258 @item --coverage
11259 @opindex coverage
11261 This option is used to compile and link code instrumented for coverage
11262 analysis.  The option is a synonym for @option{-fprofile-arcs}
11263 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
11264 linking).  See the documentation for those options for more details.
11266 @itemize
11268 @item
11269 Compile the source files with @option{-fprofile-arcs} plus optimization
11270 and code generation options.  For test coverage analysis, use the
11271 additional @option{-ftest-coverage} option.  You do not need to profile
11272 every source file in a program.
11274 @item
11275 Compile the source files additionally with @option{-fprofile-abs-path}
11276 to create absolute path names in the @file{.gcno} files.  This allows
11277 @command{gcov} to find the correct sources in projects where compilations
11278 occur with different working directories.
11280 @item
11281 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
11282 (the latter implies the former).
11284 @item
11285 Run the program on a representative workload to generate the arc profile
11286 information.  This may be repeated any number of times.  You can run
11287 concurrent instances of your program, and provided that the file system
11288 supports locking, the data files will be correctly updated.  Unless
11289 a strict ISO C dialect option is in effect, @code{fork} calls are
11290 detected and correctly handled without double counting.
11292 @item
11293 For profile-directed optimizations, compile the source files again with
11294 the same optimization and code generation options plus
11295 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
11296 Control Optimization}).
11298 @item
11299 For test coverage analysis, use @command{gcov} to produce human readable
11300 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
11301 @command{gcov} documentation for further information.
11303 @end itemize
11305 With @option{-fprofile-arcs}, for each function of your program GCC
11306 creates a program flow graph, then finds a spanning tree for the graph.
11307 Only arcs that are not on the spanning tree have to be instrumented: the
11308 compiler adds code to count the number of times that these arcs are
11309 executed.  When an arc is the only exit or only entrance to a block, the
11310 instrumentation code can be added to the block; otherwise, a new basic
11311 block must be created to hold the instrumentation code.
11313 @need 2000
11314 @item -ftest-coverage
11315 @opindex ftest-coverage
11316 Produce a notes file that the @command{gcov} code-coverage utility
11317 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
11318 show program coverage.  Each source file's note file is called
11319 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
11320 above for a description of @var{auxname} and instructions on how to
11321 generate test coverage data.  Coverage data matches the source files
11322 more closely if you do not optimize.
11324 @item -fprofile-abs-path
11325 @opindex fprofile-abs-path
11326 Automatically convert relative source file names to absolute path names
11327 in the @file{.gcno} files.  This allows @command{gcov} to find the correct
11328 sources in projects where compilations occur with different working
11329 directories.
11331 @item -fprofile-dir=@var{path}
11332 @opindex fprofile-dir
11334 Set the directory to search for the profile data files in to @var{path}.
11335 This option affects only the profile data generated by
11336 @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
11337 and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
11338 and its related options.  Both absolute and relative paths can be used.
11339 By default, GCC uses the current directory as @var{path}, thus the
11340 profile data file appears in the same directory as the object file.
11342 @item -fprofile-generate
11343 @itemx -fprofile-generate=@var{path}
11344 @opindex fprofile-generate
11346 Enable options usually used for instrumenting application to produce
11347 profile useful for later recompilation with profile feedback based
11348 optimization.  You must use @option{-fprofile-generate} both when
11349 compiling and when linking your program.
11351 The following options are enabled: @option{-fprofile-arcs}, @option{-fprofile-values}, @option{-fvpt}.
11353 If @var{path} is specified, GCC looks at the @var{path} to find
11354 the profile feedback data files. See @option{-fprofile-dir}.
11356 To optimize the program based on the collected profile information, use
11357 @option{-fprofile-use}.  @xref{Optimize Options}, for more information.
11359 @item -fprofile-update=@var{method}
11360 @opindex fprofile-update
11362 Alter the update method for an application instrumented for profile
11363 feedback based optimization.  The @var{method} argument should be one of
11364 @samp{single}, @samp{atomic} or @samp{prefer-atomic}.
11365 The first one is useful for single-threaded applications,
11366 while the second one prevents profile corruption by emitting thread-safe code.
11368 @strong{Warning:} When an application does not properly join all threads
11369 (or creates an detached thread), a profile file can be still corrupted.
11371 Using @samp{prefer-atomic} would be transformed either to @samp{atomic},
11372 when supported by a target, or to @samp{single} otherwise.  The GCC driver
11373 automatically selects @samp{prefer-atomic} when @option{-pthread}
11374 is present in the command line.
11376 @item -fsanitize=address
11377 @opindex fsanitize=address
11378 Enable AddressSanitizer, a fast memory error detector.
11379 Memory access instructions are instrumented to detect
11380 out-of-bounds and use-after-free bugs.
11381 The option enables @option{-fsanitize-address-use-after-scope}.
11382 See @uref{https://github.com/google/sanitizers/wiki/AddressSanitizer} for
11383 more details.  The run-time behavior can be influenced using the
11384 @env{ASAN_OPTIONS} environment variable.  When set to @code{help=1},
11385 the available options are shown at startup of the instrumented program.  See
11386 @url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
11387 for a list of supported options.
11388 The option cannot be combined with @option{-fsanitize=thread}
11389 and/or @option{-fcheck-pointer-bounds}.
11391 @item -fsanitize=kernel-address
11392 @opindex fsanitize=kernel-address
11393 Enable AddressSanitizer for Linux kernel.
11394 See @uref{https://github.com/google/kasan/wiki} for more details.
11395 The option cannot be combined with @option{-fcheck-pointer-bounds}.
11397 @item -fsanitize=pointer-compare
11398 @opindex fsanitize=pointer-compare
11399 Instrument comparison operation (<, <=, >, >=) with pointer operands.
11400 The option must be combined with either @option{-fsanitize=kernel-address} or
11401 @option{-fsanitize=address}
11402 The option cannot be combined with @option{-fsanitize=thread}
11403 and/or @option{-fcheck-pointer-bounds}.
11404 Note: By default the check is disabled at run time.  To enable it,
11405 add @code{detect_invalid_pointer_pairs=2} to the environment variable
11406 @env{ASAN_OPTIONS}. Using @code{detect_invalid_pointer_pairs=1} detects
11407 invalid operation only when both pointers are non-null.
11409 @item -fsanitize=pointer-subtract
11410 @opindex fsanitize=pointer-subtract
11411 Instrument subtraction with pointer operands.
11412 The option must be combined with either @option{-fsanitize=kernel-address} or
11413 @option{-fsanitize=address}
11414 The option cannot be combined with @option{-fsanitize=thread}
11415 and/or @option{-fcheck-pointer-bounds}.
11416 Note: By default the check is disabled at run time.  To enable it,
11417 add @code{detect_invalid_pointer_pairs=2} to the environment variable
11418 @env{ASAN_OPTIONS}. Using @code{detect_invalid_pointer_pairs=1} detects
11419 invalid operation only when both pointers are non-null.
11421 @item -fsanitize=thread
11422 @opindex fsanitize=thread
11423 Enable ThreadSanitizer, a fast data race detector.
11424 Memory access instructions are instrumented to detect
11425 data race bugs.  See @uref{https://github.com/google/sanitizers/wiki#threadsanitizer} for more
11426 details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
11427 environment variable; see
11428 @url{https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags} for a list of
11429 supported options.
11430 The option cannot be combined with @option{-fsanitize=address},
11431 @option{-fsanitize=leak} and/or @option{-fcheck-pointer-bounds}.
11433 Note that sanitized atomic builtins cannot throw exceptions when
11434 operating on invalid memory addresses with non-call exceptions
11435 (@option{-fnon-call-exceptions}).
11437 @item -fsanitize=leak
11438 @opindex fsanitize=leak
11439 Enable LeakSanitizer, a memory leak detector.
11440 This option only matters for linking of executables and
11441 the executable is linked against a library that overrides @code{malloc}
11442 and other allocator functions.  See
11443 @uref{https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer} for more
11444 details.  The run-time behavior can be influenced using the
11445 @env{LSAN_OPTIONS} environment variable.
11446 The option cannot be combined with @option{-fsanitize=thread}.
11448 @item -fsanitize=undefined
11449 @opindex fsanitize=undefined
11450 Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
11451 Various computations are instrumented to detect undefined behavior
11452 at runtime.  Current suboptions are:
11454 @table @gcctabopt
11456 @item -fsanitize=shift
11457 @opindex fsanitize=shift
11458 This option enables checking that the result of a shift operation is
11459 not undefined.  Note that what exactly is considered undefined differs
11460 slightly between C and C++, as well as between ISO C90 and C99, etc.
11461 This option has two suboptions, @option{-fsanitize=shift-base} and
11462 @option{-fsanitize=shift-exponent}.
11464 @item -fsanitize=shift-exponent
11465 @opindex fsanitize=shift-exponent
11466 This option enables checking that the second argument of a shift operation
11467 is not negative and is smaller than the precision of the promoted first
11468 argument.
11470 @item -fsanitize=shift-base
11471 @opindex fsanitize=shift-base
11472 If the second argument of a shift operation is within range, check that the
11473 result of a shift operation is not undefined.  Note that what exactly is
11474 considered undefined differs slightly between C and C++, as well as between
11475 ISO C90 and C99, etc.
11477 @item -fsanitize=integer-divide-by-zero
11478 @opindex fsanitize=integer-divide-by-zero
11479 Detect integer division by zero as well as @code{INT_MIN / -1} division.
11481 @item -fsanitize=unreachable
11482 @opindex fsanitize=unreachable
11483 With this option, the compiler turns the @code{__builtin_unreachable}
11484 call into a diagnostics message call instead.  When reaching the
11485 @code{__builtin_unreachable} call, the behavior is undefined.
11487 @item -fsanitize=vla-bound
11488 @opindex fsanitize=vla-bound
11489 This option instructs the compiler to check that the size of a variable
11490 length array is positive.
11492 @item -fsanitize=null
11493 @opindex fsanitize=null
11494 This option enables pointer checking.  Particularly, the application
11495 built with this option turned on will issue an error message when it
11496 tries to dereference a NULL pointer, or if a reference (possibly an
11497 rvalue reference) is bound to a NULL pointer, or if a method is invoked
11498 on an object pointed by a NULL pointer.
11500 @item -fsanitize=return
11501 @opindex fsanitize=return
11502 This option enables return statement checking.  Programs
11503 built with this option turned on will issue an error message
11504 when the end of a non-void function is reached without actually
11505 returning a value.  This option works in C++ only.
11507 @item -fsanitize=signed-integer-overflow
11508 @opindex fsanitize=signed-integer-overflow
11509 This option enables signed integer overflow checking.  We check that
11510 the result of @code{+}, @code{*}, and both unary and binary @code{-}
11511 does not overflow in the signed arithmetics.  Note, integer promotion
11512 rules must be taken into account.  That is, the following is not an
11513 overflow:
11514 @smallexample
11515 signed char a = SCHAR_MAX;
11516 a++;
11517 @end smallexample
11519 @item -fsanitize=bounds
11520 @opindex fsanitize=bounds
11521 This option enables instrumentation of array bounds.  Various out of bounds
11522 accesses are detected.  Flexible array members, flexible array member-like
11523 arrays, and initializers of variables with static storage are not instrumented.
11524 The option cannot be combined with @option{-fcheck-pointer-bounds}.
11526 @item -fsanitize=bounds-strict
11527 @opindex fsanitize=bounds-strict
11528 This option enables strict instrumentation of array bounds.  Most out of bounds
11529 accesses are detected, including flexible array members and flexible array
11530 member-like arrays.  Initializers of variables with static storage are not
11531 instrumented.  The option cannot be combined
11532 with @option{-fcheck-pointer-bounds}.
11534 @item -fsanitize=alignment
11535 @opindex fsanitize=alignment
11537 This option enables checking of alignment of pointers when they are
11538 dereferenced, or when a reference is bound to insufficiently aligned target,
11539 or when a method or constructor is invoked on insufficiently aligned object.
11541 @item -fsanitize=object-size
11542 @opindex fsanitize=object-size
11543 This option enables instrumentation of memory references using the
11544 @code{__builtin_object_size} function.  Various out of bounds pointer
11545 accesses are detected.
11547 @item -fsanitize=float-divide-by-zero
11548 @opindex fsanitize=float-divide-by-zero
11549 Detect floating-point division by zero.  Unlike other similar options,
11550 @option{-fsanitize=float-divide-by-zero} is not enabled by
11551 @option{-fsanitize=undefined}, since floating-point division by zero can
11552 be a legitimate way of obtaining infinities and NaNs.
11554 @item -fsanitize=float-cast-overflow
11555 @opindex fsanitize=float-cast-overflow
11556 This option enables floating-point type to integer conversion checking.
11557 We check that the result of the conversion does not overflow.
11558 Unlike other similar options, @option{-fsanitize=float-cast-overflow} is
11559 not enabled by @option{-fsanitize=undefined}.
11560 This option does not work well with @code{FE_INVALID} exceptions enabled.
11562 @item -fsanitize=nonnull-attribute
11563 @opindex fsanitize=nonnull-attribute
11565 This option enables instrumentation of calls, checking whether null values
11566 are not passed to arguments marked as requiring a non-null value by the
11567 @code{nonnull} function attribute.
11569 @item -fsanitize=returns-nonnull-attribute
11570 @opindex fsanitize=returns-nonnull-attribute
11572 This option enables instrumentation of return statements in functions
11573 marked with @code{returns_nonnull} function attribute, to detect returning
11574 of null values from such functions.
11576 @item -fsanitize=bool
11577 @opindex fsanitize=bool
11579 This option enables instrumentation of loads from bool.  If a value other
11580 than 0/1 is loaded, a run-time error is issued.
11582 @item -fsanitize=enum
11583 @opindex fsanitize=enum
11585 This option enables instrumentation of loads from an enum type.  If
11586 a value outside the range of values for the enum type is loaded,
11587 a run-time error is issued.
11589 @item -fsanitize=vptr
11590 @opindex fsanitize=vptr
11592 This option enables instrumentation of C++ member function calls, member
11593 accesses and some conversions between pointers to base and derived classes,
11594 to verify the referenced object has the correct dynamic type.
11596 @item -fsanitize=pointer-overflow
11597 @opindex fsanitize=pointer-overflow
11599 This option enables instrumentation of pointer arithmetics.  If the pointer
11600 arithmetics overflows, a run-time error is issued.
11602 @item -fsanitize=builtin
11603 @opindex fsanitize=builtin
11605 This option enables instrumentation of arguments to selected builtin
11606 functions.  If an invalid value is passed to such arguments, a run-time
11607 error is issued.  E.g.@ passing 0 as the argument to @code{__builtin_ctz}
11608 or @code{__builtin_clz} invokes undefined behavior and is diagnosed
11609 by this option.
11611 @end table
11613 While @option{-ftrapv} causes traps for signed overflows to be emitted,
11614 @option{-fsanitize=undefined} gives a diagnostic message.
11615 This currently works only for the C family of languages.
11617 @item -fno-sanitize=all
11618 @opindex fno-sanitize=all
11620 This option disables all previously enabled sanitizers.
11621 @option{-fsanitize=all} is not allowed, as some sanitizers cannot be used
11622 together.
11624 @item -fasan-shadow-offset=@var{number}
11625 @opindex fasan-shadow-offset
11626 This option forces GCC to use custom shadow offset in AddressSanitizer checks.
11627 It is useful for experimenting with different shadow memory layouts in
11628 Kernel AddressSanitizer.
11630 @item -fsanitize-sections=@var{s1},@var{s2},...
11631 @opindex fsanitize-sections
11632 Sanitize global variables in selected user-defined sections.  @var{si} may
11633 contain wildcards.
11635 @item -fsanitize-recover@r{[}=@var{opts}@r{]}
11636 @opindex fsanitize-recover
11637 @opindex fno-sanitize-recover
11638 @option{-fsanitize-recover=} controls error recovery mode for sanitizers
11639 mentioned in comma-separated list of @var{opts}.  Enabling this option
11640 for a sanitizer component causes it to attempt to continue
11641 running the program as if no error happened.  This means multiple
11642 runtime errors can be reported in a single program run, and the exit
11643 code of the program may indicate success even when errors
11644 have been reported.  The @option{-fno-sanitize-recover=} option
11645 can be used to alter
11646 this behavior: only the first detected error is reported
11647 and program then exits with a non-zero exit code.
11649 Currently this feature only works for @option{-fsanitize=undefined} (and its suboptions
11650 except for @option{-fsanitize=unreachable} and @option{-fsanitize=return}),
11651 @option{-fsanitize=float-cast-overflow}, @option{-fsanitize=float-divide-by-zero},
11652 @option{-fsanitize=bounds-strict},
11653 @option{-fsanitize=kernel-address} and @option{-fsanitize=address}.
11654 For these sanitizers error recovery is turned on by default,
11655 except @option{-fsanitize=address}, for which this feature is experimental.
11656 @option{-fsanitize-recover=all} and @option{-fno-sanitize-recover=all} is also
11657 accepted, the former enables recovery for all sanitizers that support it,
11658 the latter disables recovery for all sanitizers that support it.
11660 Even if a recovery mode is turned on the compiler side, it needs to be also
11661 enabled on the runtime library side, otherwise the failures are still fatal.
11662 The runtime library defaults to @code{halt_on_error=0} for
11663 ThreadSanitizer and UndefinedBehaviorSanitizer, while default value for
11664 AddressSanitizer is @code{halt_on_error=1}. This can be overridden through
11665 setting the @code{halt_on_error} flag in the corresponding environment variable.
11667 Syntax without an explicit @var{opts} parameter is deprecated.  It is
11668 equivalent to specifying an @var{opts} list of:
11670 @smallexample
11671 undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
11672 @end smallexample
11674 @item -fsanitize-address-use-after-scope
11675 @opindex fsanitize-address-use-after-scope
11676 Enable sanitization of local variables to detect use-after-scope bugs.
11677 The option sets @option{-fstack-reuse} to @samp{none}.
11679 @item -fsanitize-undefined-trap-on-error
11680 @opindex fsanitize-undefined-trap-on-error
11681 The @option{-fsanitize-undefined-trap-on-error} option instructs the compiler to
11682 report undefined behavior using @code{__builtin_trap} rather than
11683 a @code{libubsan} library routine.  The advantage of this is that the
11684 @code{libubsan} library is not needed and is not linked in, so this
11685 is usable even in freestanding environments.
11687 @item -fsanitize-coverage=trace-pc
11688 @opindex fsanitize-coverage=trace-pc
11689 Enable coverage-guided fuzzing code instrumentation.
11690 Inserts a call to @code{__sanitizer_cov_trace_pc} into every basic block.
11692 @item -fsanitize-coverage=trace-cmp
11693 @opindex fsanitize-coverage=trace-cmp
11694 Enable dataflow guided fuzzing code instrumentation.
11695 Inserts a call to @code{__sanitizer_cov_trace_cmp1},
11696 @code{__sanitizer_cov_trace_cmp2}, @code{__sanitizer_cov_trace_cmp4} or
11697 @code{__sanitizer_cov_trace_cmp8} for integral comparison with both operands
11698 variable or @code{__sanitizer_cov_trace_const_cmp1},
11699 @code{__sanitizer_cov_trace_const_cmp2},
11700 @code{__sanitizer_cov_trace_const_cmp4} or
11701 @code{__sanitizer_cov_trace_const_cmp8} for integral comparison with one
11702 operand constant, @code{__sanitizer_cov_trace_cmpf} or
11703 @code{__sanitizer_cov_trace_cmpd} for float or double comparisons and
11704 @code{__sanitizer_cov_trace_switch} for switch statements.
11706 @item -fbounds-check
11707 @opindex fbounds-check
11708 For front ends that support it, generate additional code to check that
11709 indices used to access arrays are within the declared range.  This is
11710 currently only supported by the Fortran front end, where this option
11711 defaults to false.
11713 @item -fcheck-pointer-bounds
11714 @opindex fcheck-pointer-bounds
11715 @opindex fno-check-pointer-bounds
11716 @cindex Pointer Bounds Checker options
11717 Enable Pointer Bounds Checker instrumentation.  Each memory reference
11718 is instrumented with checks of the pointer used for memory access against
11719 bounds associated with that pointer.  
11721 Currently there
11722 is only an implementation for Intel MPX available, thus x86 GNU/Linux target
11723 and @option{-mmpx} are required to enable this feature.  
11724 MPX-based instrumentation requires
11725 a runtime library to enable MPX in hardware and handle bounds
11726 violation signals.  By default when @option{-fcheck-pointer-bounds}
11727 and @option{-mmpx} options are used to link a program, the GCC driver
11728 links against the @file{libmpx} and @file{libmpxwrappers} libraries.
11729 Bounds checking on calls to dynamic libraries requires a linker
11730 with @option{-z bndplt} support; if GCC was configured with a linker
11731 without support for this option (including the Gold linker and older
11732 versions of ld), a warning is given if you link with @option{-mmpx}
11733 without also specifying @option{-static}, since the overall effectiveness
11734 of the bounds checking protection is reduced.
11735 See also @option{-static-libmpxwrappers}.
11737 MPX-based instrumentation
11738 may be used for debugging and also may be included in production code
11739 to increase program security.  Depending on usage, you may
11740 have different requirements for the runtime library.  The current version
11741 of the MPX runtime library is more oriented for use as a debugging
11742 tool.  MPX runtime library usage implies @option{-lpthread}.  See
11743 also @option{-static-libmpx}.  The runtime library  behavior can be
11744 influenced using various @env{CHKP_RT_*} environment variables.  See
11745 @uref{https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler}
11746 for more details.
11748 Generated instrumentation may be controlled by various
11749 @option{-fchkp-*} options and by the @code{bnd_variable_size}
11750 structure field attribute (@pxref{Type Attributes}) and
11751 @code{bnd_legacy}, and @code{bnd_instrument} function attributes
11752 (@pxref{Function Attributes}).  GCC also provides a number of built-in
11753 functions for controlling the Pointer Bounds Checker.  @xref{Pointer
11754 Bounds Checker builtins}, for more information.
11756 @item -fchkp-check-incomplete-type
11757 @opindex fchkp-check-incomplete-type
11758 @opindex fno-chkp-check-incomplete-type
11759 Generate pointer bounds checks for variables with incomplete type.
11760 Enabled by default.
11762 @item -fchkp-narrow-bounds
11763 @opindex fchkp-narrow-bounds
11764 @opindex fno-chkp-narrow-bounds
11765 Controls bounds used by Pointer Bounds Checker for pointers to object
11766 fields.  If narrowing is enabled then field bounds are used.  Otherwise
11767 object bounds are used.  See also @option{-fchkp-narrow-to-innermost-array}
11768 and @option{-fchkp-first-field-has-own-bounds}.  Enabled by default.
11770 @item -fchkp-first-field-has-own-bounds
11771 @opindex fchkp-first-field-has-own-bounds
11772 @opindex fno-chkp-first-field-has-own-bounds
11773 Forces Pointer Bounds Checker to use narrowed bounds for the address of the
11774 first field in the structure.  By default a pointer to the first field has
11775 the same bounds as a pointer to the whole structure.
11777 @item -fchkp-flexible-struct-trailing-arrays
11778 @opindex fchkp-flexible-struct-trailing-arrays
11779 @opindex fno-chkp-flexible-struct-trailing-arrays
11780 Forces Pointer Bounds Checker to treat all trailing arrays in structures as
11781 possibly flexible.  By default only array fields with zero length or that are
11782 marked with attribute bnd_variable_size are treated as flexible.
11784 @item -fchkp-narrow-to-innermost-array
11785 @opindex fchkp-narrow-to-innermost-array
11786 @opindex fno-chkp-narrow-to-innermost-array
11787 Forces Pointer Bounds Checker to use bounds of the innermost arrays in
11788 case of nested static array access.  By default this option is disabled and
11789 bounds of the outermost array are used.
11791 @item -fchkp-optimize
11792 @opindex fchkp-optimize
11793 @opindex fno-chkp-optimize
11794 Enables Pointer Bounds Checker optimizations.  Enabled by default at
11795 optimization levels @option{-O}, @option{-O2}, @option{-O3}.
11797 @item -fchkp-use-fast-string-functions
11798 @opindex fchkp-use-fast-string-functions
11799 @opindex fno-chkp-use-fast-string-functions
11800 Enables use of @code{*_nobnd} versions of string functions (not copying bounds)
11801 by Pointer Bounds Checker.  Disabled by default.
11803 @item -fchkp-use-nochk-string-functions
11804 @opindex fchkp-use-nochk-string-functions
11805 @opindex fno-chkp-use-nochk-string-functions
11806 Enables use of @code{*_nochk} versions of string functions (not checking bounds)
11807 by Pointer Bounds Checker.  Disabled by default.
11809 @item -fchkp-use-static-bounds
11810 @opindex fchkp-use-static-bounds
11811 @opindex fno-chkp-use-static-bounds
11812 Allow Pointer Bounds Checker to generate static bounds holding
11813 bounds of static variables.  Enabled by default.
11815 @item -fchkp-use-static-const-bounds
11816 @opindex fchkp-use-static-const-bounds
11817 @opindex fno-chkp-use-static-const-bounds
11818 Use statically-initialized bounds for constant bounds instead of
11819 generating them each time they are required.  By default enabled when
11820 @option{-fchkp-use-static-bounds} is enabled.
11822 @item -fchkp-treat-zero-dynamic-size-as-infinite
11823 @opindex fchkp-treat-zero-dynamic-size-as-infinite
11824 @opindex fno-chkp-treat-zero-dynamic-size-as-infinite
11825 With this option, objects with incomplete type whose
11826 dynamically-obtained size is zero are treated as having infinite size
11827 instead by Pointer Bounds
11828 Checker.  This option may be helpful if a program is linked with a library
11829 missing size information for some symbols.  Disabled by default.
11831 @item -fchkp-check-read
11832 @opindex fchkp-check-read
11833 @opindex fno-chkp-check-read
11834 Instructs Pointer Bounds Checker to generate checks for all read
11835 accesses to memory.  Enabled by default.
11837 @item -fchkp-check-write
11838 @opindex fchkp-check-write
11839 @opindex fno-chkp-check-write
11840 Instructs Pointer Bounds Checker to generate checks for all write
11841 accesses to memory.  Enabled by default.
11843 @item -fchkp-store-bounds
11844 @opindex fchkp-store-bounds
11845 @opindex fno-chkp-store-bounds
11846 Instructs Pointer Bounds Checker to generate bounds stores for
11847 pointer writes.  Enabled by default.
11849 @item -fchkp-instrument-calls
11850 @opindex fchkp-instrument-calls
11851 @opindex fno-chkp-instrument-calls
11852 Instructs Pointer Bounds Checker to pass pointer bounds to calls.
11853 Enabled by default.
11855 @item -fchkp-instrument-marked-only
11856 @opindex fchkp-instrument-marked-only
11857 @opindex fno-chkp-instrument-marked-only
11858 Instructs Pointer Bounds Checker to instrument only functions
11859 marked with the @code{bnd_instrument} attribute
11860 (@pxref{Function Attributes}).  Disabled by default.
11862 @item -fchkp-use-wrappers
11863 @opindex fchkp-use-wrappers
11864 @opindex fno-chkp-use-wrappers
11865 Allows Pointer Bounds Checker to replace calls to built-in functions
11866 with calls to wrapper functions.  When @option{-fchkp-use-wrappers}
11867 is used to link a program, the GCC driver automatically links
11868 against @file{libmpxwrappers}.  See also @option{-static-libmpxwrappers}.
11869 Enabled by default.
11871 @item -fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{]}
11872 @opindex fcf-protection
11873 Enable code instrumentation of control-flow transfers to increase
11874 program security by checking that target addresses of control-flow
11875 transfer instructions (such as indirect function call, function return,
11876 indirect jump) are valid.  This prevents diverting the flow of control
11877 to an unexpected target.  This is intended to protect against such
11878 threats as Return-oriented Programming (ROP), and similarly
11879 call/jmp-oriented programming (COP/JOP).
11881 The value @code{branch} tells the compiler to implement checking of
11882 validity of control-flow transfer at the point of indirect branch
11883 instructions, i.e. call/jmp instructions.  The value @code{return}
11884 implements checking of validity at the point of returning from a
11885 function.  The value @code{full} is an alias for specifying both
11886 @code{branch} and @code{return}. The value @code{none} turns off
11887 instrumentation.
11889 The macro @code{__CET__} is defined when @option{-fcf-protection} is
11890 used.  The first bit of @code{__CET__} is set to 1 for the value
11891 @code{branch} and the second bit of @code{__CET__} is set to 1 for
11892 the @code{return}.
11894 You can also use the @code{nocf_check} attribute to identify
11895 which functions and calls should be skipped from instrumentation
11896 (@pxref{Function Attributes}).
11898 Currently the x86 GNU/Linux target provides an implementation based
11899 on Intel Control-flow Enforcement Technology (CET).
11901 @item -fstack-protector
11902 @opindex fstack-protector
11903 Emit extra code to check for buffer overflows, such as stack smashing
11904 attacks.  This is done by adding a guard variable to functions with
11905 vulnerable objects.  This includes functions that call @code{alloca}, and
11906 functions with buffers larger than 8 bytes.  The guards are initialized
11907 when a function is entered and then checked when the function exits.
11908 If a guard check fails, an error message is printed and the program exits.
11910 @item -fstack-protector-all
11911 @opindex fstack-protector-all
11912 Like @option{-fstack-protector} except that all functions are protected.
11914 @item -fstack-protector-strong
11915 @opindex fstack-protector-strong
11916 Like @option{-fstack-protector} but includes additional functions to
11917 be protected --- those that have local array definitions, or have
11918 references to local frame addresses.
11920 @item -fstack-protector-explicit
11921 @opindex fstack-protector-explicit
11922 Like @option{-fstack-protector} but only protects those functions which
11923 have the @code{stack_protect} attribute.
11925 @item -fstack-check
11926 @opindex fstack-check
11927 Generate code to verify that you do not go beyond the boundary of the
11928 stack.  You should specify this flag if you are running in an
11929 environment with multiple threads, but you only rarely need to specify it in
11930 a single-threaded environment since stack overflow is automatically
11931 detected on nearly all systems if there is only one stack.
11933 Note that this switch does not actually cause checking to be done; the
11934 operating system or the language runtime must do that.  The switch causes
11935 generation of code to ensure that they see the stack being extended.
11937 You can additionally specify a string parameter: @samp{no} means no
11938 checking, @samp{generic} means force the use of old-style checking,
11939 @samp{specific} means use the best checking method and is equivalent
11940 to bare @option{-fstack-check}.
11942 Old-style checking is a generic mechanism that requires no specific
11943 target support in the compiler but comes with the following drawbacks:
11945 @enumerate
11946 @item
11947 Modified allocation strategy for large objects: they are always
11948 allocated dynamically if their size exceeds a fixed threshold.  Note this
11949 may change the semantics of some code.
11951 @item
11952 Fixed limit on the size of the static frame of functions: when it is
11953 topped by a particular function, stack checking is not reliable and
11954 a warning is issued by the compiler.
11956 @item
11957 Inefficiency: because of both the modified allocation strategy and the
11958 generic implementation, code performance is hampered.
11959 @end enumerate
11961 Note that old-style stack checking is also the fallback method for
11962 @samp{specific} if no target support has been added in the compiler.
11964 @samp{-fstack-check=} is designed for Ada's needs to detect infinite recursion
11965 and stack overflows.  @samp{specific} is an excellent choice when compiling
11966 Ada code.  It is not generally sufficient to protect against stack-clash
11967 attacks.  To protect against those you want @samp{-fstack-clash-protection}.
11969 @item -fstack-clash-protection
11970 @opindex fstack-clash-protection
11971 Generate code to prevent stack clash style attacks.  When this option is
11972 enabled, the compiler will only allocate one page of stack space at a time
11973 and each page is accessed immediately after allocation.  Thus, it prevents
11974 allocations from jumping over any stack guard page provided by the
11975 operating system.
11977 Most targets do not fully support stack clash protection.  However, on
11978 those targets @option{-fstack-clash-protection} will protect dynamic stack
11979 allocations.  @option{-fstack-clash-protection} may also provide limited
11980 protection for static stack allocations if the target supports
11981 @option{-fstack-check=specific}.
11983 @item -fstack-limit-register=@var{reg}
11984 @itemx -fstack-limit-symbol=@var{sym}
11985 @itemx -fno-stack-limit
11986 @opindex fstack-limit-register
11987 @opindex fstack-limit-symbol
11988 @opindex fno-stack-limit
11989 Generate code to ensure that the stack does not grow beyond a certain value,
11990 either the value of a register or the address of a symbol.  If a larger
11991 stack is required, a signal is raised at run time.  For most targets,
11992 the signal is raised before the stack overruns the boundary, so
11993 it is possible to catch the signal without taking special precautions.
11995 For instance, if the stack starts at absolute address @samp{0x80000000}
11996 and grows downwards, you can use the flags
11997 @option{-fstack-limit-symbol=__stack_limit} and
11998 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
11999 of 128KB@.  Note that this may only work with the GNU linker.
12001 You can locally override stack limit checking by using the
12002 @code{no_stack_limit} function attribute (@pxref{Function Attributes}).
12004 @item -fsplit-stack
12005 @opindex fsplit-stack
12006 Generate code to automatically split the stack before it overflows.
12007 The resulting program has a discontiguous stack which can only
12008 overflow if the program is unable to allocate any more memory.  This
12009 is most useful when running threaded programs, as it is no longer
12010 necessary to calculate a good stack size to use for each thread.  This
12011 is currently only implemented for the x86 targets running
12012 GNU/Linux.
12014 When code compiled with @option{-fsplit-stack} calls code compiled
12015 without @option{-fsplit-stack}, there may not be much stack space
12016 available for the latter code to run.  If compiling all code,
12017 including library code, with @option{-fsplit-stack} is not an option,
12018 then the linker can fix up these calls so that the code compiled
12019 without @option{-fsplit-stack} always has a large stack.  Support for
12020 this is implemented in the gold linker in GNU binutils release 2.21
12021 and later.
12023 @item -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]}
12024 @opindex fvtable-verify
12025 This option is only available when compiling C++ code.
12026 It turns on (or off, if using @option{-fvtable-verify=none}) the security
12027 feature that verifies at run time, for every virtual call, that
12028 the vtable pointer through which the call is made is valid for the type of
12029 the object, and has not been corrupted or overwritten.  If an invalid vtable
12030 pointer is detected at run time, an error is reported and execution of the
12031 program is immediately halted.
12033 This option causes run-time data structures to be built at program startup,
12034 which are used for verifying the vtable pointers.  
12035 The options @samp{std} and @samp{preinit}
12036 control the timing of when these data structures are built.  In both cases the
12037 data structures are built before execution reaches @code{main}.  Using
12038 @option{-fvtable-verify=std} causes the data structures to be built after
12039 shared libraries have been loaded and initialized.
12040 @option{-fvtable-verify=preinit} causes them to be built before shared
12041 libraries have been loaded and initialized.
12043 If this option appears multiple times in the command line with different
12044 values specified, @samp{none} takes highest priority over both @samp{std} and
12045 @samp{preinit}; @samp{preinit} takes priority over @samp{std}.
12047 @item -fvtv-debug
12048 @opindex fvtv-debug
12049 When used in conjunction with @option{-fvtable-verify=std} or 
12050 @option{-fvtable-verify=preinit}, causes debug versions of the 
12051 runtime functions for the vtable verification feature to be called.  
12052 This flag also causes the compiler to log information about which 
12053 vtable pointers it finds for each class.
12054 This information is written to a file named @file{vtv_set_ptr_data.log} 
12055 in the directory named by the environment variable @env{VTV_LOGS_DIR} 
12056 if that is defined or the current working directory otherwise.
12058 Note:  This feature @emph{appends} data to the log file. If you want a fresh log
12059 file, be sure to delete any existing one.
12061 @item -fvtv-counts
12062 @opindex fvtv-counts
12063 This is a debugging flag.  When used in conjunction with
12064 @option{-fvtable-verify=std} or @option{-fvtable-verify=preinit}, this
12065 causes the compiler to keep track of the total number of virtual calls
12066 it encounters and the number of verifications it inserts.  It also
12067 counts the number of calls to certain run-time library functions
12068 that it inserts and logs this information for each compilation unit.
12069 The compiler writes this information to a file named
12070 @file{vtv_count_data.log} in the directory named by the environment
12071 variable @env{VTV_LOGS_DIR} if that is defined or the current working
12072 directory otherwise.  It also counts the size of the vtable pointer sets
12073 for each class, and writes this information to @file{vtv_class_set_sizes.log}
12074 in the same directory.
12076 Note:  This feature @emph{appends} data to the log files.  To get fresh log
12077 files, be sure to delete any existing ones.
12079 @item -finstrument-functions
12080 @opindex finstrument-functions
12081 Generate instrumentation calls for entry and exit to functions.  Just
12082 after function entry and just before function exit, the following
12083 profiling functions are called with the address of the current
12084 function and its call site.  (On some platforms,
12085 @code{__builtin_return_address} does not work beyond the current
12086 function, so the call site information may not be available to the
12087 profiling functions otherwise.)
12089 @smallexample
12090 void __cyg_profile_func_enter (void *this_fn,
12091                                void *call_site);
12092 void __cyg_profile_func_exit  (void *this_fn,
12093                                void *call_site);
12094 @end smallexample
12096 The first argument is the address of the start of the current function,
12097 which may be looked up exactly in the symbol table.
12099 This instrumentation is also done for functions expanded inline in other
12100 functions.  The profiling calls indicate where, conceptually, the
12101 inline function is entered and exited.  This means that addressable
12102 versions of such functions must be available.  If all your uses of a
12103 function are expanded inline, this may mean an additional expansion of
12104 code size.  If you use @code{extern inline} in your C code, an
12105 addressable version of such functions must be provided.  (This is
12106 normally the case anyway, but if you get lucky and the optimizer always
12107 expands the functions inline, you might have gotten away without
12108 providing static copies.)
12110 A function may be given the attribute @code{no_instrument_function}, in
12111 which case this instrumentation is not done.  This can be used, for
12112 example, for the profiling functions listed above, high-priority
12113 interrupt routines, and any functions from which the profiling functions
12114 cannot safely be called (perhaps signal handlers, if the profiling
12115 routines generate output or allocate memory).
12117 @item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
12118 @opindex finstrument-functions-exclude-file-list
12120 Set the list of functions that are excluded from instrumentation (see
12121 the description of @option{-finstrument-functions}).  If the file that
12122 contains a function definition matches with one of @var{file}, then
12123 that function is not instrumented.  The match is done on substrings:
12124 if the @var{file} parameter is a substring of the file name, it is
12125 considered to be a match.
12127 For example:
12129 @smallexample
12130 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
12131 @end smallexample
12133 @noindent
12134 excludes any inline function defined in files whose pathnames
12135 contain @file{/bits/stl} or @file{include/sys}.
12137 If, for some reason, you want to include letter @samp{,} in one of
12138 @var{sym}, write @samp{\,}. For example,
12139 @option{-finstrument-functions-exclude-file-list='\,\,tmp'}
12140 (note the single quote surrounding the option).
12142 @item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
12143 @opindex finstrument-functions-exclude-function-list
12145 This is similar to @option{-finstrument-functions-exclude-file-list},
12146 but this option sets the list of function names to be excluded from
12147 instrumentation.  The function name to be matched is its user-visible
12148 name, such as @code{vector<int> blah(const vector<int> &)}, not the
12149 internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
12150 match is done on substrings: if the @var{sym} parameter is a substring
12151 of the function name, it is considered to be a match.  For C99 and C++
12152 extended identifiers, the function name must be given in UTF-8, not
12153 using universal character names.
12155 @item -fpatchable-function-entry=@var{N}[,@var{M}]
12156 @opindex fpatchable-function-entry
12157 Generate @var{N} NOPs right at the beginning
12158 of each function, with the function entry point before the @var{M}th NOP.
12159 If @var{M} is omitted, it defaults to @code{0} so the
12160 function entry points to the address just at the first NOP.
12161 The NOP instructions reserve extra space which can be used to patch in
12162 any desired instrumentation at run time, provided that the code segment
12163 is writable.  The amount of space is controllable indirectly via
12164 the number of NOPs; the NOP instruction used corresponds to the instruction
12165 emitted by the internal GCC back-end interface @code{gen_nop}.  This behavior
12166 is target-specific and may also depend on the architecture variant and/or
12167 other compilation options.
12169 For run-time identification, the starting addresses of these areas,
12170 which correspond to their respective function entries minus @var{M},
12171 are additionally collected in the @code{__patchable_function_entries}
12172 section of the resulting binary.
12174 Note that the value of @code{__attribute__ ((patchable_function_entry
12175 (N,M)))} takes precedence over command-line option
12176 @option{-fpatchable-function-entry=N,M}.  This can be used to increase
12177 the area size or to remove it completely on a single function.
12178 If @code{N=0}, no pad location is recorded.
12180 The NOP instructions are inserted at---and maybe before, depending on
12181 @var{M}---the function entry address, even before the prologue.
12183 @end table
12186 @node Preprocessor Options
12187 @section Options Controlling the Preprocessor
12188 @cindex preprocessor options
12189 @cindex options, preprocessor
12191 These options control the C preprocessor, which is run on each C source
12192 file before actual compilation.
12194 If you use the @option{-E} option, nothing is done except preprocessing.
12195 Some of these options make sense only together with @option{-E} because
12196 they cause the preprocessor output to be unsuitable for actual
12197 compilation.
12199 In addition to the options listed here, there are a number of options 
12200 to control search paths for include files documented in 
12201 @ref{Directory Options}.  
12202 Options to control preprocessor diagnostics are listed in 
12203 @ref{Warning Options}.
12205 @table @gcctabopt
12206 @include cppopts.texi
12208 @item -Wp,@var{option}
12209 @opindex Wp
12210 You can use @option{-Wp,@var{option}} to bypass the compiler driver
12211 and pass @var{option} directly through to the preprocessor.  If
12212 @var{option} contains commas, it is split into multiple options at the
12213 commas.  However, many options are modified, translated or interpreted
12214 by the compiler driver before being passed to the preprocessor, and
12215 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
12216 interface is undocumented and subject to change, so whenever possible
12217 you should avoid using @option{-Wp} and let the driver handle the
12218 options instead.
12220 @item -Xpreprocessor @var{option}
12221 @opindex Xpreprocessor
12222 Pass @var{option} as an option to the preprocessor.  You can use this to
12223 supply system-specific preprocessor options that GCC does not 
12224 recognize.
12226 If you want to pass an option that takes an argument, you must use
12227 @option{-Xpreprocessor} twice, once for the option and once for the argument.
12229 @item -no-integrated-cpp
12230 @opindex no-integrated-cpp
12231 Perform preprocessing as a separate pass before compilation.
12232 By default, GCC performs preprocessing as an integrated part of
12233 input tokenization and parsing.
12234 If this option is provided, the appropriate language front end
12235 (@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
12236 and Objective-C, respectively) is instead invoked twice,
12237 once for preprocessing only and once for actual compilation
12238 of the preprocessed input.
12239 This option may be useful in conjunction with the @option{-B} or
12240 @option{-wrapper} options to specify an alternate preprocessor or
12241 perform additional processing of the program source between
12242 normal preprocessing and compilation.
12244 @end table
12246 @node Assembler Options
12247 @section Passing Options to the Assembler
12249 @c prevent bad page break with this line
12250 You can pass options to the assembler.
12252 @table @gcctabopt
12253 @item -Wa,@var{option}
12254 @opindex Wa
12255 Pass @var{option} as an option to the assembler.  If @var{option}
12256 contains commas, it is split into multiple options at the commas.
12258 @item -Xassembler @var{option}
12259 @opindex Xassembler
12260 Pass @var{option} as an option to the assembler.  You can use this to
12261 supply system-specific assembler options that GCC does not
12262 recognize.
12264 If you want to pass an option that takes an argument, you must use
12265 @option{-Xassembler} twice, once for the option and once for the argument.
12267 @end table
12269 @node Link Options
12270 @section Options for Linking
12271 @cindex link options
12272 @cindex options, linking
12274 These options come into play when the compiler links object files into
12275 an executable output file.  They are meaningless if the compiler is
12276 not doing a link step.
12278 @table @gcctabopt
12279 @cindex file names
12280 @item @var{object-file-name}
12281 A file name that does not end in a special recognized suffix is
12282 considered to name an object file or library.  (Object files are
12283 distinguished from libraries by the linker according to the file
12284 contents.)  If linking is done, these object files are used as input
12285 to the linker.
12287 @item -c
12288 @itemx -S
12289 @itemx -E
12290 @opindex c
12291 @opindex S
12292 @opindex E
12293 If any of these options is used, then the linker is not run, and
12294 object file names should not be used as arguments.  @xref{Overall
12295 Options}.
12297 @item -flinker-output=@var{type}
12298 @opindex -flinker-output
12299 This option controls the code generation of the link time optimizer.  By
12300 default the linker output is determined by the linker plugin automatically. For
12301 debugging the compiler and in the case of incremental linking to non-lto object
12302 file is desired, it may be useful to control the type manually.
12304 If @var{type} is @samp{exec} the code generation is configured to produce static
12305 binary. In this case @option{-fpic} and @option{-fpie} are both disabled.
12307 If @var{type} is @samp{dyn} the code generation is configured to produce shared
12308 library. In this case @option{-fpic} or @option{-fPIC} is preserved, but not
12309 enabled automatically.  This makes it possible to build shared libraries without
12310 position independent code on architectures this is possible, i.e. on x86.
12312 If @var{type} is @samp{pie} the code generation is configured to produce
12313 @option{-fpie} executable. This result in similar optimizations as @samp{exec}
12314 except that @option{-fpie} is not disabled if specified at compilation time.
12316 If @var{type} is @samp{rel} the compiler assumes that incremental linking is
12317 done.  The sections containing intermediate code for link-time optimization are
12318 merged, pre-optimized, and output to the resulting object file. In addition, if
12319 @option{-ffat-lto-objects} is specified the binary code is produced for future
12320 non-lto linking. The object file produced by incremental linking will be smaller
12321 than a static library produced from the same object files.  At link-time the
12322 result of incremental linking will also load faster to compiler than a static
12323 library assuming that majority of objects in the library are used.
12325 Finally @samp{nolto-rel} configure compiler to for incremental linking where
12326 code generation is forced, final binary is produced and the intermediate code
12327 for later link-time optimization is stripped. When multiple object files are
12328 linked together the resulting code will be optimized better than with link time
12329 optimizations disabled (for example, the cross-module inlining will happen),
12330 most of benefits of whole program optimizations are however lost. 
12332 During the incremental link (by @option{-r}) the linker plugin will default to
12333 @option{rel}. With current interfaces to GNU Binutils it is however not
12334 possible to link incrementally LTO objects and non-LTO objects into a single
12335 mixed object file.  In the case any of object files in incremental link can not
12336 be used for link-time optimization the linker plugin will output warning and
12337 use @samp{nolto-rel}. To maintain the whole program optimization it is
12338 recommended to link such objects into static library instead. Alternatively it
12339 is possible to use H.J. Lu's binutils with support for mixed objects.
12341 @item -fuse-ld=bfd
12342 @opindex fuse-ld=bfd
12343 Use the @command{bfd} linker instead of the default linker.
12345 @item -fuse-ld=gold
12346 @opindex fuse-ld=gold
12347 Use the @command{gold} linker instead of the default linker.
12349 @cindex Libraries
12350 @item -l@var{library}
12351 @itemx -l @var{library}
12352 @opindex l
12353 Search the library named @var{library} when linking.  (The second
12354 alternative with the library as a separate argument is only for
12355 POSIX compliance and is not recommended.)
12357 It makes a difference where in the command you write this option; the
12358 linker searches and processes libraries and object files in the order they
12359 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
12360 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
12361 to functions in @samp{z}, those functions may not be loaded.
12363 The linker searches a standard list of directories for the library,
12364 which is actually a file named @file{lib@var{library}.a}.  The linker
12365 then uses this file as if it had been specified precisely by name.
12367 The directories searched include several standard system directories
12368 plus any that you specify with @option{-L}.
12370 Normally the files found this way are library files---archive files
12371 whose members are object files.  The linker handles an archive file by
12372 scanning through it for members which define symbols that have so far
12373 been referenced but not defined.  But if the file that is found is an
12374 ordinary object file, it is linked in the usual fashion.  The only
12375 difference between using an @option{-l} option and specifying a file name
12376 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
12377 and searches several directories.
12379 @item -lobjc
12380 @opindex lobjc
12381 You need this special case of the @option{-l} option in order to
12382 link an Objective-C or Objective-C++ program.
12384 @item -nostartfiles
12385 @opindex nostartfiles
12386 Do not use the standard system startup files when linking.
12387 The standard system libraries are used normally, unless @option{-nostdlib}
12388 or @option{-nodefaultlibs} is used.
12390 @item -nodefaultlibs
12391 @opindex nodefaultlibs
12392 Do not use the standard system libraries when linking.
12393 Only the libraries you specify are passed to the linker, and options
12394 specifying linkage of the system libraries, such as @option{-static-libgcc}
12395 or @option{-shared-libgcc}, are ignored.  
12396 The standard startup files are used normally, unless @option{-nostartfiles}
12397 is used.  
12399 The compiler may generate calls to @code{memcmp},
12400 @code{memset}, @code{memcpy} and @code{memmove}.
12401 These entries are usually resolved by entries in
12402 libc.  These entry points should be supplied through some other
12403 mechanism when this option is specified.
12405 @item -nostdlib
12406 @opindex nostdlib
12407 Do not use the standard system startup files or libraries when linking.
12408 No startup files and only the libraries you specify are passed to
12409 the linker, and options specifying linkage of the system libraries, such as
12410 @option{-static-libgcc} or @option{-shared-libgcc}, are ignored.
12412 The compiler may generate calls to @code{memcmp}, @code{memset},
12413 @code{memcpy} and @code{memmove}.
12414 These entries are usually resolved by entries in
12415 libc.  These entry points should be supplied through some other
12416 mechanism when this option is specified.
12418 @cindex @option{-lgcc}, use with @option{-nostdlib}
12419 @cindex @option{-nostdlib} and unresolved references
12420 @cindex unresolved references and @option{-nostdlib}
12421 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
12422 @cindex @option{-nodefaultlibs} and unresolved references
12423 @cindex unresolved references and @option{-nodefaultlibs}
12424 One of the standard libraries bypassed by @option{-nostdlib} and
12425 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
12426 which GCC uses to overcome shortcomings of particular machines, or special
12427 needs for some languages.
12428 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
12429 Collection (GCC) Internals},
12430 for more discussion of @file{libgcc.a}.)
12431 In most cases, you need @file{libgcc.a} even when you want to avoid
12432 other standard libraries.  In other words, when you specify @option{-nostdlib}
12433 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
12434 This ensures that you have no unresolved references to internal GCC
12435 library subroutines.
12436 (An example of such an internal subroutine is @code{__main}, used to ensure C++
12437 constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
12438 GNU Compiler Collection (GCC) Internals}.)
12440 @item -pie
12441 @opindex pie
12442 Produce a dynamically linked position independent executable on targets
12443 that support it.  For predictable results, you must also specify the same
12444 set of options used for compilation (@option{-fpie}, @option{-fPIE},
12445 or model suboptions) when you specify this linker option.
12447 @item -no-pie
12448 @opindex no-pie
12449 Don't produce a dynamically linked position independent executable.
12451 @item -static-pie
12452 @opindex static-pie
12453 Produce a static position independent executable on targets that support
12454 it.  A static position independent executable is similar to a static
12455 executable, but can be loaded at any address without a dynamic linker.
12456 For predictable results, you must also specify the same set of options
12457 used for compilation (@option{-fpie}, @option{-fPIE}, or model
12458 suboptions) when you specify this linker option.
12460 @item -pthread
12461 @opindex pthread
12462 Link with the POSIX threads library.  This option is supported on 
12463 GNU/Linux targets, most other Unix derivatives, and also on 
12464 x86 Cygwin and MinGW targets.  On some targets this option also sets 
12465 flags for the preprocessor, so it should be used consistently for both
12466 compilation and linking.
12468 @item -rdynamic
12469 @opindex rdynamic
12470 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
12471 that support it. This instructs the linker to add all symbols, not
12472 only used ones, to the dynamic symbol table. This option is needed
12473 for some uses of @code{dlopen} or to allow obtaining backtraces
12474 from within a program.
12476 @item -s
12477 @opindex s
12478 Remove all symbol table and relocation information from the executable.
12480 @item -static
12481 @opindex static
12482 On systems that support dynamic linking, this overrides @option{-pie}
12483 and prevents linking with the shared libraries.  On other systems, this
12484 option has no effect.
12486 @item -shared
12487 @opindex shared
12488 Produce a shared object which can then be linked with other objects to
12489 form an executable.  Not all systems support this option.  For predictable
12490 results, you must also specify the same set of options used for compilation
12491 (@option{-fpic}, @option{-fPIC}, or model suboptions) when
12492 you specify this linker option.@footnote{On some systems, @samp{gcc -shared}
12493 needs to build supplementary stub code for constructors to work.  On
12494 multi-libbed systems, @samp{gcc -shared} must select the correct support
12495 libraries to link against.  Failing to supply the correct flags may lead
12496 to subtle defects.  Supplying them in cases where they are not necessary
12497 is innocuous.}
12499 @item -shared-libgcc
12500 @itemx -static-libgcc
12501 @opindex shared-libgcc
12502 @opindex static-libgcc
12503 On systems that provide @file{libgcc} as a shared library, these options
12504 force the use of either the shared or static version, respectively.
12505 If no shared version of @file{libgcc} was built when the compiler was
12506 configured, these options have no effect.
12508 There are several situations in which an application should use the
12509 shared @file{libgcc} instead of the static version.  The most common
12510 of these is when the application wishes to throw and catch exceptions
12511 across different shared libraries.  In that case, each of the libraries
12512 as well as the application itself should use the shared @file{libgcc}.
12514 Therefore, the G++ and driver automatically adds @option{-shared-libgcc}
12515  whenever you build a shared library or a main executable, because C++
12516  programs typically use exceptions, so this is the right thing to do.
12518 If, instead, you use the GCC driver to create shared libraries, you may
12519 find that they are not always linked with the shared @file{libgcc}.
12520 If GCC finds, at its configuration time, that you have a non-GNU linker
12521 or a GNU linker that does not support option @option{--eh-frame-hdr},
12522 it links the shared version of @file{libgcc} into shared libraries
12523 by default.  Otherwise, it takes advantage of the linker and optimizes
12524 away the linking with the shared version of @file{libgcc}, linking with
12525 the static version of libgcc by default.  This allows exceptions to
12526 propagate through such shared libraries, without incurring relocation
12527 costs at library load time.
12529 However, if a library or main executable is supposed to throw or catch
12530 exceptions, you must link it using the G++ driver, as appropriate
12531 for the languages used in the program, or using the option
12532 @option{-shared-libgcc}, such that it is linked with the shared
12533 @file{libgcc}.
12535 @item -static-libasan
12536 @opindex static-libasan
12537 When the @option{-fsanitize=address} option is used to link a program,
12538 the GCC driver automatically links against @option{libasan}.  If
12539 @file{libasan} is available as a shared library, and the @option{-static}
12540 option is not used, then this links against the shared version of
12541 @file{libasan}.  The @option{-static-libasan} option directs the GCC
12542 driver to link @file{libasan} statically, without necessarily linking
12543 other libraries statically.
12545 @item -static-libtsan
12546 @opindex static-libtsan
12547 When the @option{-fsanitize=thread} option is used to link a program,
12548 the GCC driver automatically links against @option{libtsan}.  If
12549 @file{libtsan} is available as a shared library, and the @option{-static}
12550 option is not used, then this links against the shared version of
12551 @file{libtsan}.  The @option{-static-libtsan} option directs the GCC
12552 driver to link @file{libtsan} statically, without necessarily linking
12553 other libraries statically.
12555 @item -static-liblsan
12556 @opindex static-liblsan
12557 When the @option{-fsanitize=leak} option is used to link a program,
12558 the GCC driver automatically links against @option{liblsan}.  If
12559 @file{liblsan} is available as a shared library, and the @option{-static}
12560 option is not used, then this links against the shared version of
12561 @file{liblsan}.  The @option{-static-liblsan} option directs the GCC
12562 driver to link @file{liblsan} statically, without necessarily linking
12563 other libraries statically.
12565 @item -static-libubsan
12566 @opindex static-libubsan
12567 When the @option{-fsanitize=undefined} option is used to link a program,
12568 the GCC driver automatically links against @option{libubsan}.  If
12569 @file{libubsan} is available as a shared library, and the @option{-static}
12570 option is not used, then this links against the shared version of
12571 @file{libubsan}.  The @option{-static-libubsan} option directs the GCC
12572 driver to link @file{libubsan} statically, without necessarily linking
12573 other libraries statically.
12575 @item -static-libmpx
12576 @opindex static-libmpx
12577 When the @option{-fcheck-pointer bounds} and @option{-mmpx} options are
12578 used to link a program, the GCC driver automatically links against
12579 @file{libmpx}.  If @file{libmpx} is available as a shared library,
12580 and the @option{-static} option is not used, then this links against
12581 the shared version of @file{libmpx}.  The @option{-static-libmpx}
12582 option directs the GCC driver to link @file{libmpx} statically,
12583 without necessarily linking other libraries statically.
12585 @item -static-libmpxwrappers
12586 @opindex static-libmpxwrappers
12587 When the @option{-fcheck-pointer bounds} and @option{-mmpx} options are used
12588 to link a program without also using @option{-fno-chkp-use-wrappers}, the
12589 GCC driver automatically links against @file{libmpxwrappers}.  If
12590 @file{libmpxwrappers} is available as a shared library, and the
12591 @option{-static} option is not used, then this links against the shared
12592 version of @file{libmpxwrappers}.  The @option{-static-libmpxwrappers}
12593 option directs the GCC driver to link @file{libmpxwrappers} statically,
12594 without necessarily linking other libraries statically.
12596 @item -static-libstdc++
12597 @opindex static-libstdc++
12598 When the @command{g++} program is used to link a C++ program, it
12599 normally automatically links against @option{libstdc++}.  If
12600 @file{libstdc++} is available as a shared library, and the
12601 @option{-static} option is not used, then this links against the
12602 shared version of @file{libstdc++}.  That is normally fine.  However, it
12603 is sometimes useful to freeze the version of @file{libstdc++} used by
12604 the program without going all the way to a fully static link.  The
12605 @option{-static-libstdc++} option directs the @command{g++} driver to
12606 link @file{libstdc++} statically, without necessarily linking other
12607 libraries statically.
12609 @item -symbolic
12610 @opindex symbolic
12611 Bind references to global symbols when building a shared object.  Warn
12612 about any unresolved references (unless overridden by the link editor
12613 option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
12614 this option.
12616 @item -T @var{script}
12617 @opindex T
12618 @cindex linker script
12619 Use @var{script} as the linker script.  This option is supported by most
12620 systems using the GNU linker.  On some targets, such as bare-board
12621 targets without an operating system, the @option{-T} option may be required
12622 when linking to avoid references to undefined symbols.
12624 @item -Xlinker @var{option}
12625 @opindex Xlinker
12626 Pass @var{option} as an option to the linker.  You can use this to
12627 supply system-specific linker options that GCC does not recognize.
12629 If you want to pass an option that takes a separate argument, you must use
12630 @option{-Xlinker} twice, once for the option and once for the argument.
12631 For example, to pass @option{-assert definitions}, you must write
12632 @option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
12633 @option{-Xlinker "-assert definitions"}, because this passes the entire
12634 string as a single argument, which is not what the linker expects.
12636 When using the GNU linker, it is usually more convenient to pass
12637 arguments to linker options using the @option{@var{option}=@var{value}}
12638 syntax than as separate arguments.  For example, you can specify
12639 @option{-Xlinker -Map=output.map} rather than
12640 @option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
12641 this syntax for command-line options.
12643 @item -Wl,@var{option}
12644 @opindex Wl
12645 Pass @var{option} as an option to the linker.  If @var{option} contains
12646 commas, it is split into multiple options at the commas.  You can use this
12647 syntax to pass an argument to the option.
12648 For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
12649 linker.  When using the GNU linker, you can also get the same effect with
12650 @option{-Wl,-Map=output.map}.
12652 @item -u @var{symbol}
12653 @opindex u
12654 Pretend the symbol @var{symbol} is undefined, to force linking of
12655 library modules to define it.  You can use @option{-u} multiple times with
12656 different symbols to force loading of additional library modules.
12658 @item -z @var{keyword}
12659 @opindex z
12660 @option{-z} is passed directly on to the linker along with the keyword
12661 @var{keyword}. See the section in the documentation of your linker for
12662 permitted values and their meanings.
12663 @end table
12665 @node Directory Options
12666 @section Options for Directory Search
12667 @cindex directory options
12668 @cindex options, directory search
12669 @cindex search path
12671 These options specify directories to search for header files, for
12672 libraries and for parts of the compiler:
12674 @table @gcctabopt
12675 @include cppdiropts.texi
12677 @item -iplugindir=@var{dir}
12678 @opindex iplugindir=
12679 Set the directory to search for plugins that are passed
12680 by @option{-fplugin=@var{name}} instead of
12681 @option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
12682 to be used by the user, but only passed by the driver.
12684 @item -L@var{dir}
12685 @opindex L
12686 Add directory @var{dir} to the list of directories to be searched
12687 for @option{-l}.
12689 @item -B@var{prefix}
12690 @opindex B
12691 This option specifies where to find the executables, libraries,
12692 include files, and data files of the compiler itself.
12694 The compiler driver program runs one or more of the subprograms
12695 @command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
12696 @var{prefix} as a prefix for each program it tries to run, both with and
12697 without @samp{@var{machine}/@var{version}/} for the corresponding target
12698 machine and compiler version.
12700 For each subprogram to be run, the compiler driver first tries the
12701 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
12702 is not specified, the driver tries two standard prefixes, 
12703 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
12704 those results in a file name that is found, the unmodified program
12705 name is searched for using the directories specified in your
12706 @env{PATH} environment variable.
12708 The compiler checks to see if the path provided by @option{-B}
12709 refers to a directory, and if necessary it adds a directory
12710 separator character at the end of the path.
12712 @option{-B} prefixes that effectively specify directory names also apply
12713 to libraries in the linker, because the compiler translates these
12714 options into @option{-L} options for the linker.  They also apply to
12715 include files in the preprocessor, because the compiler translates these
12716 options into @option{-isystem} options for the preprocessor.  In this case,
12717 the compiler appends @samp{include} to the prefix.
12719 The runtime support file @file{libgcc.a} can also be searched for using
12720 the @option{-B} prefix, if needed.  If it is not found there, the two
12721 standard prefixes above are tried, and that is all.  The file is left
12722 out of the link if it is not found by those means.
12724 Another way to specify a prefix much like the @option{-B} prefix is to use
12725 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
12726 Variables}.
12728 As a special kludge, if the path provided by @option{-B} is
12729 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
12730 9, then it is replaced by @file{[dir/]include}.  This is to help
12731 with boot-strapping the compiler.
12733 @item -no-canonical-prefixes
12734 @opindex no-canonical-prefixes
12735 Do not expand any symbolic links, resolve references to @samp{/../}
12736 or @samp{/./}, or make the path absolute when generating a relative
12737 prefix.
12739 @item --sysroot=@var{dir}
12740 @opindex sysroot
12741 Use @var{dir} as the logical root directory for headers and libraries.
12742 For example, if the compiler normally searches for headers in
12743 @file{/usr/include} and libraries in @file{/usr/lib}, it instead
12744 searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
12746 If you use both this option and the @option{-isysroot} option, then
12747 the @option{--sysroot} option applies to libraries, but the
12748 @option{-isysroot} option applies to header files.
12750 The GNU linker (beginning with version 2.16) has the necessary support
12751 for this option.  If your linker does not support this option, the
12752 header file aspect of @option{--sysroot} still works, but the
12753 library aspect does not.
12755 @item --no-sysroot-suffix
12756 @opindex no-sysroot-suffix
12757 For some targets, a suffix is added to the root directory specified
12758 with @option{--sysroot}, depending on the other options used, so that
12759 headers may for example be found in
12760 @file{@var{dir}/@var{suffix}/usr/include} instead of
12761 @file{@var{dir}/usr/include}.  This option disables the addition of
12762 such a suffix.
12764 @end table
12766 @node Code Gen Options
12767 @section Options for Code Generation Conventions
12768 @cindex code generation conventions
12769 @cindex options, code generation
12770 @cindex run-time options
12772 These machine-independent options control the interface conventions
12773 used in code generation.
12775 Most of them have both positive and negative forms; the negative form
12776 of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
12777 one of the forms is listed---the one that is not the default.  You
12778 can figure out the other form by either removing @samp{no-} or adding
12781 @table @gcctabopt
12782 @item -fstack-reuse=@var{reuse-level}
12783 @opindex fstack_reuse
12784 This option controls stack space reuse for user declared local/auto variables
12785 and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
12786 @samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
12787 local variables and temporaries, @samp{named_vars} enables the reuse only for
12788 user defined local variables with names, and @samp{none} disables stack reuse
12789 completely. The default value is @samp{all}. The option is needed when the
12790 program extends the lifetime of a scoped local variable or a compiler generated
12791 temporary beyond the end point defined by the language.  When a lifetime of
12792 a variable ends, and if the variable lives in memory, the optimizing compiler
12793 has the freedom to reuse its stack space with other temporaries or scoped
12794 local variables whose live range does not overlap with it. Legacy code extending
12795 local lifetime is likely to break with the stack reuse optimization.
12797 For example,
12799 @smallexample
12800    int *p;
12801    @{
12802      int local1;
12804      p = &local1;
12805      local1 = 10;
12806      ....
12807    @}
12808    @{
12809       int local2;
12810       local2 = 20;
12811       ...
12812    @}
12814    if (*p == 10)  // out of scope use of local1
12815      @{
12817      @}
12818 @end smallexample
12820 Another example:
12821 @smallexample
12823    struct A
12824    @{
12825        A(int k) : i(k), j(k) @{ @}
12826        int i;
12827        int j;
12828    @};
12830    A *ap;
12832    void foo(const A& ar)
12833    @{
12834       ap = &ar;
12835    @}
12837    void bar()
12838    @{
12839       foo(A(10)); // temp object's lifetime ends when foo returns
12841       @{
12842         A a(20);
12843         ....
12844       @}
12845       ap->i+= 10;  // ap references out of scope temp whose space
12846                    // is reused with a. What is the value of ap->i?
12847    @}
12849 @end smallexample
12851 The lifetime of a compiler generated temporary is well defined by the C++
12852 standard. When a lifetime of a temporary ends, and if the temporary lives
12853 in memory, the optimizing compiler has the freedom to reuse its stack
12854 space with other temporaries or scoped local variables whose live range
12855 does not overlap with it. However some of the legacy code relies on
12856 the behavior of older compilers in which temporaries' stack space is
12857 not reused, the aggressive stack reuse can lead to runtime errors. This
12858 option is used to control the temporary stack reuse optimization.
12860 @item -ftrapv
12861 @opindex ftrapv
12862 This option generates traps for signed overflow on addition, subtraction,
12863 multiplication operations.
12864 The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
12865 @option{-ftrapv} @option{-fwrapv} on the command-line results in
12866 @option{-fwrapv} being effective.  Note that only active options override, so
12867 using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
12868 results in @option{-ftrapv} being effective.
12870 @item -fwrapv
12871 @opindex fwrapv
12872 This option instructs the compiler to assume that signed arithmetic
12873 overflow of addition, subtraction and multiplication wraps around
12874 using twos-complement representation.  This flag enables some optimizations
12875 and disables others.
12876 The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
12877 @option{-ftrapv} @option{-fwrapv} on the command-line results in
12878 @option{-fwrapv} being effective.  Note that only active options override, so
12879 using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
12880 results in @option{-ftrapv} being effective.
12882 @item -fwrapv-pointer
12883 @opindex fwrapv-pointer
12884 This option instructs the compiler to assume that pointer arithmetic
12885 overflow on addition and subtraction wraps around using twos-complement
12886 representation.  This flag disables some optimizations which assume
12887 pointer overflow is invalid.
12889 @item -fstrict-overflow
12890 @opindex fstrict-overflow
12891 This option implies @option{-fno-wrapv} @option{-fno-wrapv-pointer} and when
12892 negated implies @option{-fwrapv} @option{-fwrapv-pointer}.
12894 @item -fexceptions
12895 @opindex fexceptions
12896 Enable exception handling.  Generates extra code needed to propagate
12897 exceptions.  For some targets, this implies GCC generates frame
12898 unwind information for all functions, which can produce significant data
12899 size overhead, although it does not affect execution.  If you do not
12900 specify this option, GCC enables it by default for languages like
12901 C++ that normally require exception handling, and disables it for
12902 languages like C that do not normally require it.  However, you may need
12903 to enable this option when compiling C code that needs to interoperate
12904 properly with exception handlers written in C++.  You may also wish to
12905 disable this option if you are compiling older C++ programs that don't
12906 use exception handling.
12908 @item -fnon-call-exceptions
12909 @opindex fnon-call-exceptions
12910 Generate code that allows trapping instructions to throw exceptions.
12911 Note that this requires platform-specific runtime support that does
12912 not exist everywhere.  Moreover, it only allows @emph{trapping}
12913 instructions to throw exceptions, i.e.@: memory references or floating-point
12914 instructions.  It does not allow exceptions to be thrown from
12915 arbitrary signal handlers such as @code{SIGALRM}.
12917 @item -fdelete-dead-exceptions
12918 @opindex fdelete-dead-exceptions
12919 Consider that instructions that may throw exceptions but don't otherwise
12920 contribute to the execution of the program can be optimized away.
12921 This option is enabled by default for the Ada front end, as permitted by
12922 the Ada language specification.
12923 Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
12925 @item -funwind-tables
12926 @opindex funwind-tables
12927 Similar to @option{-fexceptions}, except that it just generates any needed
12928 static data, but does not affect the generated code in any other way.
12929 You normally do not need to enable this option; instead, a language processor
12930 that needs this handling enables it on your behalf.
12932 @item -fasynchronous-unwind-tables
12933 @opindex fasynchronous-unwind-tables
12934 Generate unwind table in DWARF format, if supported by target machine.  The
12935 table is exact at each instruction boundary, so it can be used for stack
12936 unwinding from asynchronous events (such as debugger or garbage collector).
12938 @item -fno-gnu-unique
12939 @opindex fno-gnu-unique
12940 On systems with recent GNU assembler and C library, the C++ compiler
12941 uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions
12942 of template static data members and static local variables in inline
12943 functions are unique even in the presence of @code{RTLD_LOCAL}; this
12944 is necessary to avoid problems with a library used by two different
12945 @code{RTLD_LOCAL} plugins depending on a definition in one of them and
12946 therefore disagreeing with the other one about the binding of the
12947 symbol.  But this causes @code{dlclose} to be ignored for affected
12948 DSOs; if your program relies on reinitialization of a DSO via
12949 @code{dlclose} and @code{dlopen}, you can use
12950 @option{-fno-gnu-unique}.
12952 @item -fpcc-struct-return
12953 @opindex fpcc-struct-return
12954 Return ``short'' @code{struct} and @code{union} values in memory like
12955 longer ones, rather than in registers.  This convention is less
12956 efficient, but it has the advantage of allowing intercallability between
12957 GCC-compiled files and files compiled with other compilers, particularly
12958 the Portable C Compiler (pcc).
12960 The precise convention for returning structures in memory depends
12961 on the target configuration macros.
12963 Short structures and unions are those whose size and alignment match
12964 that of some integer type.
12966 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
12967 switch is not binary compatible with code compiled with the
12968 @option{-freg-struct-return} switch.
12969 Use it to conform to a non-default application binary interface.
12971 @item -freg-struct-return
12972 @opindex freg-struct-return
12973 Return @code{struct} and @code{union} values in registers when possible.
12974 This is more efficient for small structures than
12975 @option{-fpcc-struct-return}.
12977 If you specify neither @option{-fpcc-struct-return} nor
12978 @option{-freg-struct-return}, GCC defaults to whichever convention is
12979 standard for the target.  If there is no standard convention, GCC
12980 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
12981 the principal compiler.  In those cases, we can choose the standard, and
12982 we chose the more efficient register return alternative.
12984 @strong{Warning:} code compiled with the @option{-freg-struct-return}
12985 switch is not binary compatible with code compiled with the
12986 @option{-fpcc-struct-return} switch.
12987 Use it to conform to a non-default application binary interface.
12989 @item -fshort-enums
12990 @opindex fshort-enums
12991 Allocate to an @code{enum} type only as many bytes as it needs for the
12992 declared range of possible values.  Specifically, the @code{enum} type
12993 is equivalent to the smallest integer type that has enough room.
12995 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
12996 code that is not binary compatible with code generated without that switch.
12997 Use it to conform to a non-default application binary interface.
12999 @item -fshort-wchar
13000 @opindex fshort-wchar
13001 Override the underlying type for @code{wchar_t} to be @code{short
13002 unsigned int} instead of the default for the target.  This option is
13003 useful for building programs to run under WINE@.
13005 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
13006 code that is not binary compatible with code generated without that switch.
13007 Use it to conform to a non-default application binary interface.
13009 @item -fno-common
13010 @opindex fno-common
13011 @cindex tentative definitions
13012 In C code, this option controls the placement of global variables 
13013 defined without an initializer, known as @dfn{tentative definitions} 
13014 in the C standard.  Tentative definitions are distinct from declarations 
13015 of a variable with the @code{extern} keyword, which do not allocate storage.
13017 Unix C compilers have traditionally allocated storage for
13018 uninitialized global variables in a common block.  This allows the
13019 linker to resolve all tentative definitions of the same variable
13020 in different compilation units to the same object, or to a non-tentative
13021 definition.  
13022 This is the behavior specified by @option{-fcommon}, and is the default for 
13023 GCC on most targets.  
13024 On the other hand, this behavior is not required by ISO
13025 C, and on some targets may carry a speed or code size penalty on
13026 variable references.
13028 The @option{-fno-common} option specifies that the compiler should instead
13029 place uninitialized global variables in the data section of the object file.
13030 This inhibits the merging of tentative definitions by the linker so
13031 you get a multiple-definition error if the same 
13032 variable is defined in more than one compilation unit.
13033 Compiling with @option{-fno-common} is useful on targets for which
13034 it provides better performance, or if you wish to verify that the
13035 program will work on other systems that always treat uninitialized
13036 variable definitions this way.
13038 @item -fno-ident
13039 @opindex fno-ident
13040 Ignore the @code{#ident} directive.
13042 @item -finhibit-size-directive
13043 @opindex finhibit-size-directive
13044 Don't output a @code{.size} assembler directive, or anything else that
13045 would cause trouble if the function is split in the middle, and the
13046 two halves are placed at locations far apart in memory.  This option is
13047 used when compiling @file{crtstuff.c}; you should not need to use it
13048 for anything else.
13050 @item -fverbose-asm
13051 @opindex fverbose-asm
13052 Put extra commentary information in the generated assembly code to
13053 make it more readable.  This option is generally only of use to those
13054 who actually need to read the generated assembly code (perhaps while
13055 debugging the compiler itself).
13057 @option{-fno-verbose-asm}, the default, causes the
13058 extra information to be omitted and is useful when comparing two assembler
13059 files.
13061 The added comments include:
13063 @itemize @bullet
13065 @item
13066 information on the compiler version and command-line options,
13068 @item
13069 the source code lines associated with the assembly instructions,
13070 in the form FILENAME:LINENUMBER:CONTENT OF LINE,
13072 @item
13073 hints on which high-level expressions correspond to
13074 the various assembly instruction operands.
13076 @end itemize
13078 For example, given this C source file:
13080 @smallexample
13081 int test (int n)
13083   int i;
13084   int total = 0;
13086   for (i = 0; i < n; i++)
13087     total += i * i;
13089   return total;
13091 @end smallexample
13093 compiling to (x86_64) assembly via @option{-S} and emitting the result
13094 direct to stdout via @option{-o} @option{-}
13096 @smallexample
13097 gcc -S test.c -fverbose-asm -Os -o -
13098 @end smallexample
13100 gives output similar to this:
13102 @smallexample
13103         .file   "test.c"
13104 # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
13105   [...snip...]
13106 # options passed:
13107   [...snip...]
13109         .text
13110         .globl  test
13111         .type   test, @@function
13112 test:
13113 .LFB0:
13114         .cfi_startproc
13115 # test.c:4:   int total = 0;
13116         xorl    %eax, %eax      # <retval>
13117 # test.c:6:   for (i = 0; i < n; i++)
13118         xorl    %edx, %edx      # i
13119 .L2:
13120 # test.c:6:   for (i = 0; i < n; i++)
13121         cmpl    %edi, %edx      # n, i
13122         jge     .L5     #,
13123 # test.c:7:     total += i * i;
13124         movl    %edx, %ecx      # i, tmp92
13125         imull   %edx, %ecx      # i, tmp92
13126 # test.c:6:   for (i = 0; i < n; i++)
13127         incl    %edx    # i
13128 # test.c:7:     total += i * i;
13129         addl    %ecx, %eax      # tmp92, <retval>
13130         jmp     .L2     #
13131 .L5:
13132 # test.c:10: @}
13133         ret
13134         .cfi_endproc
13135 .LFE0:
13136         .size   test, .-test
13137         .ident  "GCC: (GNU) 7.0.0 20160809 (experimental)"
13138         .section        .note.GNU-stack,"",@@progbits
13139 @end smallexample
13141 The comments are intended for humans rather than machines and hence the
13142 precise format of the comments is subject to change.
13144 @item -frecord-gcc-switches
13145 @opindex frecord-gcc-switches
13146 This switch causes the command line used to invoke the
13147 compiler to be recorded into the object file that is being created.
13148 This switch is only implemented on some targets and the exact format
13149 of the recording is target and binary file format dependent, but it
13150 usually takes the form of a section containing ASCII text.  This
13151 switch is related to the @option{-fverbose-asm} switch, but that
13152 switch only records information in the assembler output file as
13153 comments, so it never reaches the object file.
13154 See also @option{-grecord-gcc-switches} for another
13155 way of storing compiler options into the object file.
13157 @item -fpic
13158 @opindex fpic
13159 @cindex global offset table
13160 @cindex PIC
13161 Generate position-independent code (PIC) suitable for use in a shared
13162 library, if supported for the target machine.  Such code accesses all
13163 constant addresses through a global offset table (GOT)@.  The dynamic
13164 loader resolves the GOT entries when the program starts (the dynamic
13165 loader is not part of GCC; it is part of the operating system).  If
13166 the GOT size for the linked executable exceeds a machine-specific
13167 maximum size, you get an error message from the linker indicating that
13168 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
13169 instead.  (These maximums are 8k on the SPARC, 28k on AArch64 and 32k
13170 on the m68k and RS/6000.  The x86 has no such limit.)
13172 Position-independent code requires special support, and therefore works
13173 only on certain machines.  For the x86, GCC supports PIC for System V
13174 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
13175 position-independent.
13177 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
13178 are defined to 1.
13180 @item -fPIC
13181 @opindex fPIC
13182 If supported for the target machine, emit position-independent code,
13183 suitable for dynamic linking and avoiding any limit on the size of the
13184 global offset table.  This option makes a difference on AArch64, m68k,
13185 PowerPC and SPARC@.
13187 Position-independent code requires special support, and therefore works
13188 only on certain machines.
13190 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
13191 are defined to 2.
13193 @item -fpie
13194 @itemx -fPIE
13195 @opindex fpie
13196 @opindex fPIE
13197 These options are similar to @option{-fpic} and @option{-fPIC}, but the
13198 generated position-independent code can be only linked into executables.
13199 Usually these options are used to compile code that will be linked using
13200 the @option{-pie} GCC option.
13202 @option{-fpie} and @option{-fPIE} both define the macros
13203 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
13204 for @option{-fpie} and 2 for @option{-fPIE}.
13206 @item -fno-plt
13207 @opindex fno-plt
13208 Do not use the PLT for external function calls in position-independent code.
13209 Instead, load the callee address at call sites from the GOT and branch to it.
13210 This leads to more efficient code by eliminating PLT stubs and exposing
13211 GOT loads to optimizations.  On architectures such as 32-bit x86 where
13212 PLT stubs expect the GOT pointer in a specific register, this gives more
13213 register allocation freedom to the compiler.
13214 Lazy binding requires use of the PLT; 
13215 with @option{-fno-plt} all external symbols are resolved at load time.
13217 Alternatively, the function attribute @code{noplt} can be used to avoid calls
13218 through the PLT for specific external functions.
13220 In position-dependent code, a few targets also convert calls to
13221 functions that are marked to not use the PLT to use the GOT instead.
13223 @item -fno-jump-tables
13224 @opindex fno-jump-tables
13225 Do not use jump tables for switch statements even where it would be
13226 more efficient than other code generation strategies.  This option is
13227 of use in conjunction with @option{-fpic} or @option{-fPIC} for
13228 building code that forms part of a dynamic linker and cannot
13229 reference the address of a jump table.  On some targets, jump tables
13230 do not require a GOT and this option is not needed.
13232 @item -ffixed-@var{reg}
13233 @opindex ffixed
13234 Treat the register named @var{reg} as a fixed register; generated code
13235 should never refer to it (except perhaps as a stack pointer, frame
13236 pointer or in some other fixed role).
13238 @var{reg} must be the name of a register.  The register names accepted
13239 are machine-specific and are defined in the @code{REGISTER_NAMES}
13240 macro in the machine description macro file.
13242 This flag does not have a negative form, because it specifies a
13243 three-way choice.
13245 @item -fcall-used-@var{reg}
13246 @opindex fcall-used
13247 Treat the register named @var{reg} as an allocable register that is
13248 clobbered by function calls.  It may be allocated for temporaries or
13249 variables that do not live across a call.  Functions compiled this way
13250 do not save and restore the register @var{reg}.
13252 It is an error to use this flag with the frame pointer or stack pointer.
13253 Use of this flag for other registers that have fixed pervasive roles in
13254 the machine's execution model produces disastrous results.
13256 This flag does not have a negative form, because it specifies a
13257 three-way choice.
13259 @item -fcall-saved-@var{reg}
13260 @opindex fcall-saved
13261 Treat the register named @var{reg} as an allocable register saved by
13262 functions.  It may be allocated even for temporaries or variables that
13263 live across a call.  Functions compiled this way save and restore
13264 the register @var{reg} if they use it.
13266 It is an error to use this flag with the frame pointer or stack pointer.
13267 Use of this flag for other registers that have fixed pervasive roles in
13268 the machine's execution model produces disastrous results.
13270 A different sort of disaster results from the use of this flag for
13271 a register in which function values may be returned.
13273 This flag does not have a negative form, because it specifies a
13274 three-way choice.
13276 @item -fpack-struct[=@var{n}]
13277 @opindex fpack-struct
13278 Without a value specified, pack all structure members together without
13279 holes.  When a value is specified (which must be a small power of two), pack
13280 structure members according to this value, representing the maximum
13281 alignment (that is, objects with default alignment requirements larger than
13282 this are output potentially unaligned at the next fitting location.
13284 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
13285 code that is not binary compatible with code generated without that switch.
13286 Additionally, it makes the code suboptimal.
13287 Use it to conform to a non-default application binary interface.
13289 @item -fleading-underscore
13290 @opindex fleading-underscore
13291 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
13292 change the way C symbols are represented in the object file.  One use
13293 is to help link with legacy assembly code.
13295 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
13296 generate code that is not binary compatible with code generated without that
13297 switch.  Use it to conform to a non-default application binary interface.
13298 Not all targets provide complete support for this switch.
13300 @item -ftls-model=@var{model}
13301 @opindex ftls-model
13302 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
13303 The @var{model} argument should be one of @samp{global-dynamic},
13304 @samp{local-dynamic}, @samp{initial-exec} or @samp{local-exec}.
13305 Note that the choice is subject to optimization: the compiler may use
13306 a more efficient model for symbols not visible outside of the translation
13307 unit, or if @option{-fpic} is not given on the command line.
13309 The default without @option{-fpic} is @samp{initial-exec}; with
13310 @option{-fpic} the default is @samp{global-dynamic}.
13312 @item -ftrampolines
13313 @opindex ftrampolines
13314 For targets that normally need trampolines for nested functions, always
13315 generate them instead of using descriptors.  Otherwise, for targets that
13316 do not need them, like for example HP-PA or IA-64, do nothing.
13318 A trampoline is a small piece of code that is created at run time on the
13319 stack when the address of a nested function is taken, and is used to call
13320 the nested function indirectly.  Therefore, it requires the stack to be
13321 made executable in order for the program to work properly.
13323 @option{-fno-trampolines} is enabled by default on a language by language
13324 basis to let the compiler avoid generating them, if it computes that this
13325 is safe, and replace them with descriptors.  Descriptors are made up of data
13326 only, but the generated code must be prepared to deal with them.  As of this
13327 writing, @option{-fno-trampolines} is enabled by default only for Ada.
13329 Moreover, code compiled with @option{-ftrampolines} and code compiled with
13330 @option{-fno-trampolines} are not binary compatible if nested functions are
13331 present.  This option must therefore be used on a program-wide basis and be
13332 manipulated with extreme care.
13334 @item -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]}
13335 @opindex fvisibility
13336 Set the default ELF image symbol visibility to the specified option---all
13337 symbols are marked with this unless overridden within the code.
13338 Using this feature can very substantially improve linking and
13339 load times of shared object libraries, produce more optimized
13340 code, provide near-perfect API export and prevent symbol clashes.
13341 It is @strong{strongly} recommended that you use this in any shared objects
13342 you distribute.
13344 Despite the nomenclature, @samp{default} always means public; i.e.,
13345 available to be linked against from outside the shared object.
13346 @samp{protected} and @samp{internal} are pretty useless in real-world
13347 usage so the only other commonly used option is @samp{hidden}.
13348 The default if @option{-fvisibility} isn't specified is
13349 @samp{default}, i.e., make every symbol public.
13351 A good explanation of the benefits offered by ensuring ELF
13352 symbols have the correct visibility is given by ``How To Write
13353 Shared Libraries'' by Ulrich Drepper (which can be found at
13354 @w{@uref{https://www.akkadia.org/drepper/}})---however a superior
13355 solution made possible by this option to marking things hidden when
13356 the default is public is to make the default hidden and mark things
13357 public.  This is the norm with DLLs on Windows and with @option{-fvisibility=hidden}
13358 and @code{__attribute__ ((visibility("default")))} instead of
13359 @code{__declspec(dllexport)} you get almost identical semantics with
13360 identical syntax.  This is a great boon to those working with
13361 cross-platform projects.
13363 For those adding visibility support to existing code, you may find
13364 @code{#pragma GCC visibility} of use.  This works by you enclosing
13365 the declarations you wish to set visibility for with (for example)
13366 @code{#pragma GCC visibility push(hidden)} and
13367 @code{#pragma GCC visibility pop}.
13368 Bear in mind that symbol visibility should be viewed @strong{as
13369 part of the API interface contract} and thus all new code should
13370 always specify visibility when it is not the default; i.e., declarations
13371 only for use within the local DSO should @strong{always} be marked explicitly
13372 as hidden as so to avoid PLT indirection overheads---making this
13373 abundantly clear also aids readability and self-documentation of the code.
13374 Note that due to ISO C++ specification requirements, @code{operator new} and
13375 @code{operator delete} must always be of default visibility.
13377 Be aware that headers from outside your project, in particular system
13378 headers and headers from any other library you use, may not be
13379 expecting to be compiled with visibility other than the default.  You
13380 may need to explicitly say @code{#pragma GCC visibility push(default)}
13381 before including any such headers.
13383 @code{extern} declarations are not affected by @option{-fvisibility}, so
13384 a lot of code can be recompiled with @option{-fvisibility=hidden} with
13385 no modifications.  However, this means that calls to @code{extern}
13386 functions with no explicit visibility use the PLT, so it is more
13387 effective to use @code{__attribute ((visibility))} and/or
13388 @code{#pragma GCC visibility} to tell the compiler which @code{extern}
13389 declarations should be treated as hidden.
13391 Note that @option{-fvisibility} does affect C++ vague linkage
13392 entities. This means that, for instance, an exception class that is
13393 be thrown between DSOs must be explicitly marked with default
13394 visibility so that the @samp{type_info} nodes are unified between
13395 the DSOs.
13397 An overview of these techniques, their benefits and how to use them
13398 is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.
13400 @item -fstrict-volatile-bitfields
13401 @opindex fstrict-volatile-bitfields
13402 This option should be used if accesses to volatile bit-fields (or other
13403 structure fields, although the compiler usually honors those types
13404 anyway) should use a single access of the width of the
13405 field's type, aligned to a natural alignment if possible.  For
13406 example, targets with memory-mapped peripheral registers might require
13407 all such accesses to be 16 bits wide; with this flag you can
13408 declare all peripheral bit-fields as @code{unsigned short} (assuming short
13409 is 16 bits on these targets) to force GCC to use 16-bit accesses
13410 instead of, perhaps, a more efficient 32-bit access.
13412 If this option is disabled, the compiler uses the most efficient
13413 instruction.  In the previous example, that might be a 32-bit load
13414 instruction, even though that accesses bytes that do not contain
13415 any portion of the bit-field, or memory-mapped registers unrelated to
13416 the one being updated.
13418 In some cases, such as when the @code{packed} attribute is applied to a 
13419 structure field, it may not be possible to access the field with a single
13420 read or write that is correctly aligned for the target machine.  In this
13421 case GCC falls back to generating multiple accesses rather than code that 
13422 will fault or truncate the result at run time.
13424 Note:  Due to restrictions of the C/C++11 memory model, write accesses are
13425 not allowed to touch non bit-field members.  It is therefore recommended
13426 to define all bits of the field's type as bit-field members.
13428 The default value of this option is determined by the application binary
13429 interface for the target processor.
13431 @item -fsync-libcalls
13432 @opindex fsync-libcalls
13433 This option controls whether any out-of-line instance of the @code{__sync}
13434 family of functions may be used to implement the C++11 @code{__atomic}
13435 family of functions.
13437 The default value of this option is enabled, thus the only useful form
13438 of the option is @option{-fno-sync-libcalls}.  This option is used in
13439 the implementation of the @file{libatomic} runtime library.
13441 @end table
13443 @node Developer Options
13444 @section GCC Developer Options
13445 @cindex developer options
13446 @cindex debugging GCC
13447 @cindex debug dump options
13448 @cindex dump options
13449 @cindex compilation statistics
13451 This section describes command-line options that are primarily of
13452 interest to GCC developers, including options to support compiler
13453 testing and investigation of compiler bugs and compile-time
13454 performance problems.  This includes options that produce debug dumps
13455 at various points in the compilation; that print statistics such as
13456 memory use and execution time; and that print information about GCC's
13457 configuration, such as where it searches for libraries.  You should
13458 rarely need to use any of these options for ordinary compilation and
13459 linking tasks.
13461 Many developer options that cause GCC to dump output to a file take an
13462 optional @samp{=@var{filename}} suffix. You can specify @samp{stdout}
13463 or @samp{-} to dump to standard output, and @samp{stderr} for standard
13464 error.
13466 If @samp{=@var{filename}} is omitted, a default dump file name is
13467 constructed by concatenating the base dump file name, a pass number,
13468 phase letter, and pass name.  The base dump file name is the name of
13469 output file produced by the compiler if explicitly specified and not
13470 an executable; otherwise it is the source file name.
13471 The pass number is determined by the order passes are registered with
13472 the compiler's pass manager. 
13473 This is generally the same as the order of execution, but passes
13474 registered by plugins, target-specific passes, or passes that are
13475 otherwise registered late are numbered higher than the pass named
13476 @samp{final}, even if they are executed earlier.  The phase letter is
13477 one of @samp{i} (inter-procedural analysis), @samp{l}
13478 (language-specific), @samp{r} (RTL), or @samp{t} (tree). 
13479 The files are created in the directory of the output file. 
13481 @table @gcctabopt
13483 @item -d@var{letters}
13484 @itemx -fdump-rtl-@var{pass}
13485 @itemx -fdump-rtl-@var{pass}=@var{filename}
13486 @opindex d
13487 @opindex fdump-rtl-@var{pass}
13488 Says to make debugging dumps during compilation at times specified by
13489 @var{letters}.  This is used for debugging the RTL-based passes of the
13490 compiler.
13492 Some @option{-d@var{letters}} switches have different meaning when
13493 @option{-E} is used for preprocessing.  @xref{Preprocessor Options},
13494 for information about preprocessor-specific dump options.
13496 Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
13497 @option{-d} option @var{letters}.  Here are the possible
13498 letters for use in @var{pass} and @var{letters}, and their meanings:
13500 @table @gcctabopt
13502 @item -fdump-rtl-alignments
13503 @opindex fdump-rtl-alignments
13504 Dump after branch alignments have been computed.
13506 @item -fdump-rtl-asmcons
13507 @opindex fdump-rtl-asmcons
13508 Dump after fixing rtl statements that have unsatisfied in/out constraints.
13510 @item -fdump-rtl-auto_inc_dec
13511 @opindex fdump-rtl-auto_inc_dec
13512 Dump after auto-inc-dec discovery.  This pass is only run on
13513 architectures that have auto inc or auto dec instructions.
13515 @item -fdump-rtl-barriers
13516 @opindex fdump-rtl-barriers
13517 Dump after cleaning up the barrier instructions.
13519 @item -fdump-rtl-bbpart
13520 @opindex fdump-rtl-bbpart
13521 Dump after partitioning hot and cold basic blocks.
13523 @item -fdump-rtl-bbro
13524 @opindex fdump-rtl-bbro
13525 Dump after block reordering.
13527 @item -fdump-rtl-btl1
13528 @itemx -fdump-rtl-btl2
13529 @opindex fdump-rtl-btl2
13530 @opindex fdump-rtl-btl2
13531 @option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
13532 after the two branch
13533 target load optimization passes.
13535 @item -fdump-rtl-bypass
13536 @opindex fdump-rtl-bypass
13537 Dump after jump bypassing and control flow optimizations.
13539 @item -fdump-rtl-combine
13540 @opindex fdump-rtl-combine
13541 Dump after the RTL instruction combination pass.
13543 @item -fdump-rtl-compgotos
13544 @opindex fdump-rtl-compgotos
13545 Dump after duplicating the computed gotos.
13547 @item -fdump-rtl-ce1
13548 @itemx -fdump-rtl-ce2
13549 @itemx -fdump-rtl-ce3
13550 @opindex fdump-rtl-ce1
13551 @opindex fdump-rtl-ce2
13552 @opindex fdump-rtl-ce3
13553 @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
13554 @option{-fdump-rtl-ce3} enable dumping after the three
13555 if conversion passes.
13557 @item -fdump-rtl-cprop_hardreg
13558 @opindex fdump-rtl-cprop_hardreg
13559 Dump after hard register copy propagation.
13561 @item -fdump-rtl-csa
13562 @opindex fdump-rtl-csa
13563 Dump after combining stack adjustments.
13565 @item -fdump-rtl-cse1
13566 @itemx -fdump-rtl-cse2
13567 @opindex fdump-rtl-cse1
13568 @opindex fdump-rtl-cse2
13569 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
13570 the two common subexpression elimination passes.
13572 @item -fdump-rtl-dce
13573 @opindex fdump-rtl-dce
13574 Dump after the standalone dead code elimination passes.
13576 @item -fdump-rtl-dbr
13577 @opindex fdump-rtl-dbr
13578 Dump after delayed branch scheduling.
13580 @item -fdump-rtl-dce1
13581 @itemx -fdump-rtl-dce2
13582 @opindex fdump-rtl-dce1
13583 @opindex fdump-rtl-dce2
13584 @option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
13585 the two dead store elimination passes.
13587 @item -fdump-rtl-eh
13588 @opindex fdump-rtl-eh
13589 Dump after finalization of EH handling code.
13591 @item -fdump-rtl-eh_ranges
13592 @opindex fdump-rtl-eh_ranges
13593 Dump after conversion of EH handling range regions.
13595 @item -fdump-rtl-expand
13596 @opindex fdump-rtl-expand
13597 Dump after RTL generation.
13599 @item -fdump-rtl-fwprop1
13600 @itemx -fdump-rtl-fwprop2
13601 @opindex fdump-rtl-fwprop1
13602 @opindex fdump-rtl-fwprop2
13603 @option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
13604 dumping after the two forward propagation passes.
13606 @item -fdump-rtl-gcse1
13607 @itemx -fdump-rtl-gcse2
13608 @opindex fdump-rtl-gcse1
13609 @opindex fdump-rtl-gcse2
13610 @option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
13611 after global common subexpression elimination.
13613 @item -fdump-rtl-init-regs
13614 @opindex fdump-rtl-init-regs
13615 Dump after the initialization of the registers.
13617 @item -fdump-rtl-initvals
13618 @opindex fdump-rtl-initvals
13619 Dump after the computation of the initial value sets.
13621 @item -fdump-rtl-into_cfglayout
13622 @opindex fdump-rtl-into_cfglayout
13623 Dump after converting to cfglayout mode.
13625 @item -fdump-rtl-ira
13626 @opindex fdump-rtl-ira
13627 Dump after iterated register allocation.
13629 @item -fdump-rtl-jump
13630 @opindex fdump-rtl-jump
13631 Dump after the second jump optimization.
13633 @item -fdump-rtl-loop2
13634 @opindex fdump-rtl-loop2
13635 @option{-fdump-rtl-loop2} enables dumping after the rtl
13636 loop optimization passes.
13638 @item -fdump-rtl-mach
13639 @opindex fdump-rtl-mach
13640 Dump after performing the machine dependent reorganization pass, if that
13641 pass exists.
13643 @item -fdump-rtl-mode_sw
13644 @opindex fdump-rtl-mode_sw
13645 Dump after removing redundant mode switches.
13647 @item -fdump-rtl-rnreg
13648 @opindex fdump-rtl-rnreg
13649 Dump after register renumbering.
13651 @item -fdump-rtl-outof_cfglayout
13652 @opindex fdump-rtl-outof_cfglayout
13653 Dump after converting from cfglayout mode.
13655 @item -fdump-rtl-peephole2
13656 @opindex fdump-rtl-peephole2
13657 Dump after the peephole pass.
13659 @item -fdump-rtl-postreload
13660 @opindex fdump-rtl-postreload
13661 Dump after post-reload optimizations.
13663 @item -fdump-rtl-pro_and_epilogue
13664 @opindex fdump-rtl-pro_and_epilogue
13665 Dump after generating the function prologues and epilogues.
13667 @item -fdump-rtl-sched1
13668 @itemx -fdump-rtl-sched2
13669 @opindex fdump-rtl-sched1
13670 @opindex fdump-rtl-sched2
13671 @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
13672 after the basic block scheduling passes.
13674 @item -fdump-rtl-ree
13675 @opindex fdump-rtl-ree
13676 Dump after sign/zero extension elimination.
13678 @item -fdump-rtl-seqabstr
13679 @opindex fdump-rtl-seqabstr
13680 Dump after common sequence discovery.
13682 @item -fdump-rtl-shorten
13683 @opindex fdump-rtl-shorten
13684 Dump after shortening branches.
13686 @item -fdump-rtl-sibling
13687 @opindex fdump-rtl-sibling
13688 Dump after sibling call optimizations.
13690 @item -fdump-rtl-split1
13691 @itemx -fdump-rtl-split2
13692 @itemx -fdump-rtl-split3
13693 @itemx -fdump-rtl-split4
13694 @itemx -fdump-rtl-split5
13695 @opindex fdump-rtl-split1
13696 @opindex fdump-rtl-split2
13697 @opindex fdump-rtl-split3
13698 @opindex fdump-rtl-split4
13699 @opindex fdump-rtl-split5
13700 These options enable dumping after five rounds of
13701 instruction splitting.
13703 @item -fdump-rtl-sms
13704 @opindex fdump-rtl-sms
13705 Dump after modulo scheduling.  This pass is only run on some
13706 architectures.
13708 @item -fdump-rtl-stack
13709 @opindex fdump-rtl-stack
13710 Dump after conversion from GCC's ``flat register file'' registers to the
13711 x87's stack-like registers.  This pass is only run on x86 variants.
13713 @item -fdump-rtl-subreg1
13714 @itemx -fdump-rtl-subreg2
13715 @opindex fdump-rtl-subreg1
13716 @opindex fdump-rtl-subreg2
13717 @option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
13718 the two subreg expansion passes.
13720 @item -fdump-rtl-unshare
13721 @opindex fdump-rtl-unshare
13722 Dump after all rtl has been unshared.
13724 @item -fdump-rtl-vartrack
13725 @opindex fdump-rtl-vartrack
13726 Dump after variable tracking.
13728 @item -fdump-rtl-vregs
13729 @opindex fdump-rtl-vregs
13730 Dump after converting virtual registers to hard registers.
13732 @item -fdump-rtl-web
13733 @opindex fdump-rtl-web
13734 Dump after live range splitting.
13736 @item -fdump-rtl-regclass
13737 @itemx -fdump-rtl-subregs_of_mode_init
13738 @itemx -fdump-rtl-subregs_of_mode_finish
13739 @itemx -fdump-rtl-dfinit
13740 @itemx -fdump-rtl-dfinish
13741 @opindex fdump-rtl-regclass
13742 @opindex fdump-rtl-subregs_of_mode_init
13743 @opindex fdump-rtl-subregs_of_mode_finish
13744 @opindex fdump-rtl-dfinit
13745 @opindex fdump-rtl-dfinish
13746 These dumps are defined but always produce empty files.
13748 @item -da
13749 @itemx -fdump-rtl-all
13750 @opindex da
13751 @opindex fdump-rtl-all
13752 Produce all the dumps listed above.
13754 @item -dA
13755 @opindex dA
13756 Annotate the assembler output with miscellaneous debugging information.
13758 @item -dD
13759 @opindex dD
13760 Dump all macro definitions, at the end of preprocessing, in addition to
13761 normal output.
13763 @item -dH
13764 @opindex dH
13765 Produce a core dump whenever an error occurs.
13767 @item -dp
13768 @opindex dp
13769 Annotate the assembler output with a comment indicating which
13770 pattern and alternative is used.  The length and cost of each instruction are
13771 also printed.
13773 @item -dP
13774 @opindex dP
13775 Dump the RTL in the assembler output as a comment before each instruction.
13776 Also turns on @option{-dp} annotation.
13778 @item -dx
13779 @opindex dx
13780 Just generate RTL for a function instead of compiling it.  Usually used
13781 with @option{-fdump-rtl-expand}.
13782 @end table
13784 @item -fdump-noaddr
13785 @opindex fdump-noaddr
13786 When doing debugging dumps, suppress address output.  This makes it more
13787 feasible to use diff on debugging dumps for compiler invocations with
13788 different compiler binaries and/or different
13789 text / bss / data / heap / stack / dso start locations.
13791 @item -freport-bug
13792 @opindex freport-bug
13793 Collect and dump debug information into a temporary file if an
13794 internal compiler error (ICE) occurs.
13796 @item -fdump-unnumbered
13797 @opindex fdump-unnumbered
13798 When doing debugging dumps, suppress instruction numbers and address output.
13799 This makes it more feasible to use diff on debugging dumps for compiler
13800 invocations with different options, in particular with and without
13801 @option{-g}.
13803 @item -fdump-unnumbered-links
13804 @opindex fdump-unnumbered-links
13805 When doing debugging dumps (see @option{-d} option above), suppress
13806 instruction numbers for the links to the previous and next instructions
13807 in a sequence.
13809 @item -fdump-ipa-@var{switch}
13810 @opindex fdump-ipa
13811 Control the dumping at various stages of inter-procedural analysis
13812 language tree to a file.  The file name is generated by appending a
13813 switch specific suffix to the source file name, and the file is created
13814 in the same directory as the output file.  The following dumps are
13815 possible:
13817 @table @samp
13818 @item all
13819 Enables all inter-procedural analysis dumps.
13821 @item cgraph
13822 Dumps information about call-graph optimization, unused function removal,
13823 and inlining decisions.
13825 @item inline
13826 Dump after function inlining.
13828 @end table
13830 @item -fdump-lang-all
13831 @itemx -fdump-lang-@var{switch}
13832 @itemx -fdump-lang-@var{switch}-@var{options}
13833 @itemx -fdump-lang-@var{switch}-@var{options}=@var{filename}
13834 @opindex fdump-lang-all
13835 @opindex fdump-lang
13836 Control the dumping of language-specific information.  The @var{options}
13837 and @var{filename} portions behave as described in the
13838 @option{-fdump-tree} option.  The following @var{switch} values are
13839 accepted:
13841 @table @samp
13842 @item all
13844 Enable all language-specific dumps.
13846 @item class
13847 Dump class hierarchy information.  Virtual table information is emitted
13848 unless '@option{slim}' is specified.  This option is applicable to C++ only.
13850 @item raw
13851 Dump the raw internal tree data.  This option is applicable to C++ only.
13853 @end table
13855 @item -fdump-passes
13856 @opindex fdump-passes
13857 Print on @file{stderr} the list of optimization passes that are turned
13858 on and off by the current command-line options.
13860 @item -fdump-statistics-@var{option}
13861 @opindex fdump-statistics
13862 Enable and control dumping of pass statistics in a separate file.  The
13863 file name is generated by appending a suffix ending in
13864 @samp{.statistics} to the source file name, and the file is created in
13865 the same directory as the output file.  If the @samp{-@var{option}}
13866 form is used, @samp{-stats} causes counters to be summed over the
13867 whole compilation unit while @samp{-details} dumps every event as
13868 the passes generate them.  The default with no option is to sum
13869 counters for each function compiled.
13871 @item -fdump-tree-all
13872 @itemx -fdump-tree-@var{switch}
13873 @itemx -fdump-tree-@var{switch}-@var{options}
13874 @itemx -fdump-tree-@var{switch}-@var{options}=@var{filename}
13875 @opindex fdump-tree-all
13876 @opindex fdump-tree
13877 Control the dumping at various stages of processing the intermediate
13878 language tree to a file.  If the @samp{-@var{options}}
13879 form is used, @var{options} is a list of @samp{-} separated options
13880 which control the details of the dump.  Not all options are applicable
13881 to all dumps; those that are not meaningful are ignored.  The
13882 following options are available
13884 @table @samp
13885 @item address
13886 Print the address of each node.  Usually this is not meaningful as it
13887 changes according to the environment and source file.  Its primary use
13888 is for tying up a dump file with a debug environment.
13889 @item asmname
13890 If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
13891 in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
13892 use working backward from mangled names in the assembly file.
13893 @item slim
13894 When dumping front-end intermediate representations, inhibit dumping
13895 of members of a scope or body of a function merely because that scope
13896 has been reached.  Only dump such items when they are directly reachable
13897 by some other path.
13899 When dumping pretty-printed trees, this option inhibits dumping the
13900 bodies of control structures.
13902 When dumping RTL, print the RTL in slim (condensed) form instead of
13903 the default LISP-like representation.
13904 @item raw
13905 Print a raw representation of the tree.  By default, trees are
13906 pretty-printed into a C-like representation.
13907 @item details
13908 Enable more detailed dumps (not honored by every dump option). Also
13909 include information from the optimization passes.
13910 @item stats
13911 Enable dumping various statistics about the pass (not honored by every dump
13912 option).
13913 @item blocks
13914 Enable showing basic block boundaries (disabled in raw dumps).
13915 @item graph
13916 For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
13917 dump a representation of the control flow graph suitable for viewing with
13918 GraphViz to @file{@var{file}.@var{passid}.@var{pass}.dot}.  Each function in
13919 the file is pretty-printed as a subgraph, so that GraphViz can render them
13920 all in a single plot.
13922 This option currently only works for RTL dumps, and the RTL is always
13923 dumped in slim form.
13924 @item vops
13925 Enable showing virtual operands for every statement.
13926 @item lineno
13927 Enable showing line numbers for statements.
13928 @item uid
13929 Enable showing the unique ID (@code{DECL_UID}) for each variable.
13930 @item verbose
13931 Enable showing the tree dump for each statement.
13932 @item eh
13933 Enable showing the EH region number holding each statement.
13934 @item scev
13935 Enable showing scalar evolution analysis details.
13936 @item optimized
13937 Enable showing optimization information (only available in certain
13938 passes).
13939 @item missed
13940 Enable showing missed optimization information (only available in certain
13941 passes).
13942 @item note
13943 Enable other detailed optimization information (only available in
13944 certain passes).
13945 @item all
13946 Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
13947 and @option{lineno}.
13948 @item optall
13949 Turn on all optimization options, i.e., @option{optimized},
13950 @option{missed}, and @option{note}.
13951 @end table
13953 To determine what tree dumps are available or find the dump for a pass
13954 of interest follow the steps below.
13956 @enumerate
13957 @item
13958 Invoke GCC with @option{-fdump-passes} and in the @file{stderr} output
13959 look for a code that corresponds to the pass you are interested in.
13960 For example, the codes @code{tree-evrp}, @code{tree-vrp1}, and
13961 @code{tree-vrp2} correspond to the three Value Range Propagation passes.
13962 The number at the end distinguishes distinct invocations of the same pass.
13963 @item
13964 To enable the creation of the dump file, append the pass code to
13965 the @option{-fdump-} option prefix and invoke GCC with it.  For example,
13966 to enable the dump from the Early Value Range Propagation pass, invoke
13967 GCC with the @option{-fdump-tree-evrp} option.  Optionally, you may
13968 specify the name of the dump file.  If you don't specify one, GCC
13969 creates as described below.
13970 @item
13971 Find the pass dump in a file whose name is composed of three components
13972 separated by a period: the name of the source file GCC was invoked to
13973 compile, a numeric suffix indicating the pass number followed by the
13974 letter @samp{t} for tree passes (and the letter @samp{r} for RTL passes),
13975 and finally the pass code.  For example, the Early VRP pass dump might
13976 be in a file named @file{myfile.c.038t.evrp} in the current working
13977 directory.  Note that the numeric codes are not stable and may change
13978 from one version of GCC to another.
13979 @end enumerate
13981 @item -fopt-info
13982 @itemx -fopt-info-@var{options}
13983 @itemx -fopt-info-@var{options}=@var{filename}
13984 @opindex fopt-info
13985 Controls optimization dumps from various optimization passes. If the
13986 @samp{-@var{options}} form is used, @var{options} is a list of
13987 @samp{-} separated option keywords to select the dump details and
13988 optimizations.  
13990 The @var{options} can be divided into two groups: options describing the
13991 verbosity of the dump, and options describing which optimizations
13992 should be included. The options from both the groups can be freely
13993 mixed as they are non-overlapping. However, in case of any conflicts,
13994 the later options override the earlier options on the command
13995 line. 
13997 The following options control the dump verbosity:
13999 @table @samp
14000 @item optimized
14001 Print information when an optimization is successfully applied. It is
14002 up to a pass to decide which information is relevant. For example, the
14003 vectorizer passes print the source location of loops which are
14004 successfully vectorized.
14005 @item missed
14006 Print information about missed optimizations. Individual passes
14007 control which information to include in the output. 
14008 @item note
14009 Print verbose information about optimizations, such as certain
14010 transformations, more detailed messages about decisions etc.
14011 @item all
14012 Print detailed optimization information. This includes
14013 @samp{optimized}, @samp{missed}, and @samp{note}.
14014 @end table
14016 One or more of the following option keywords can be used to describe a
14017 group of optimizations:
14019 @table @samp
14020 @item ipa
14021 Enable dumps from all interprocedural optimizations.
14022 @item loop
14023 Enable dumps from all loop optimizations.
14024 @item inline
14025 Enable dumps from all inlining optimizations.
14026 @item omp
14027 Enable dumps from all OMP (Offloading and Multi Processing) optimizations.
14028 @item vec
14029 Enable dumps from all vectorization optimizations.
14030 @item optall
14031 Enable dumps from all optimizations. This is a superset of
14032 the optimization groups listed above.
14033 @end table
14035 If @var{options} is
14036 omitted, it defaults to @samp{optimized-optall}, which means to dump all
14037 info about successful optimizations from all the passes.  
14039 If the @var{filename} is provided, then the dumps from all the
14040 applicable optimizations are concatenated into the @var{filename}.
14041 Otherwise the dump is output onto @file{stderr}. Though multiple
14042 @option{-fopt-info} options are accepted, only one of them can include
14043 a @var{filename}. If other filenames are provided then all but the
14044 first such option are ignored.
14046 Note that the output @var{filename} is overwritten
14047 in case of multiple translation units. If a combined output from
14048 multiple translation units is desired, @file{stderr} should be used
14049 instead.
14051 In the following example, the optimization info is output to
14052 @file{stderr}:
14054 @smallexample
14055 gcc -O3 -fopt-info
14056 @end smallexample
14058 This example:
14059 @smallexample
14060 gcc -O3 -fopt-info-missed=missed.all
14061 @end smallexample
14063 @noindent
14064 outputs missed optimization report from all the passes into
14065 @file{missed.all}, and this one:
14067 @smallexample
14068 gcc -O2 -ftree-vectorize -fopt-info-vec-missed
14069 @end smallexample
14071 @noindent
14072 prints information about missed optimization opportunities from
14073 vectorization passes on @file{stderr}.  
14074 Note that @option{-fopt-info-vec-missed} is equivalent to 
14075 @option{-fopt-info-missed-vec}.  The order of the optimization group
14076 names and message types listed after @option{-fopt-info} does not matter.
14078 As another example,
14079 @smallexample
14080 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
14081 @end smallexample
14083 @noindent
14084 outputs information about missed optimizations as well as
14085 optimized locations from all the inlining passes into
14086 @file{inline.txt}.
14088 Finally, consider:
14090 @smallexample
14091 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
14092 @end smallexample
14094 @noindent
14095 Here the two output filenames @file{vec.miss} and @file{loop.opt} are
14096 in conflict since only one output file is allowed. In this case, only
14097 the first option takes effect and the subsequent options are
14098 ignored. Thus only @file{vec.miss} is produced which contains
14099 dumps from the vectorizer about missed opportunities.
14101 @item -fsched-verbose=@var{n}
14102 @opindex fsched-verbose
14103 On targets that use instruction scheduling, this option controls the
14104 amount of debugging output the scheduler prints to the dump files.
14106 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
14107 same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
14108 For @var{n} greater than one, it also output basic block probabilities,
14109 detailed ready list information and unit/insn info.  For @var{n} greater
14110 than two, it includes RTL at abort point, control-flow and regions info.
14111 And for @var{n} over four, @option{-fsched-verbose} also includes
14112 dependence info.
14116 @item -fenable-@var{kind}-@var{pass}
14117 @itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
14118 @opindex fdisable-
14119 @opindex fenable-
14121 This is a set of options that are used to explicitly disable/enable
14122 optimization passes.  These options are intended for use for debugging GCC.
14123 Compiler users should use regular options for enabling/disabling
14124 passes instead.
14126 @table @gcctabopt
14128 @item -fdisable-ipa-@var{pass}
14129 Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
14130 statically invoked in the compiler multiple times, the pass name should be
14131 appended with a sequential number starting from 1.
14133 @item -fdisable-rtl-@var{pass}
14134 @itemx -fdisable-rtl-@var{pass}=@var{range-list}
14135 Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
14136 statically invoked in the compiler multiple times, the pass name should be
14137 appended with a sequential number starting from 1.  @var{range-list} is a 
14138 comma-separated list of function ranges or assembler names.  Each range is a number
14139 pair separated by a colon.  The range is inclusive in both ends.  If the range
14140 is trivial, the number pair can be simplified as a single number.  If the
14141 function's call graph node's @var{uid} falls within one of the specified ranges,
14142 the @var{pass} is disabled for that function.  The @var{uid} is shown in the
14143 function header of a dump file, and the pass names can be dumped by using
14144 option @option{-fdump-passes}.
14146 @item -fdisable-tree-@var{pass}
14147 @itemx -fdisable-tree-@var{pass}=@var{range-list}
14148 Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
14149 option arguments.
14151 @item -fenable-ipa-@var{pass}
14152 Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
14153 statically invoked in the compiler multiple times, the pass name should be
14154 appended with a sequential number starting from 1.
14156 @item -fenable-rtl-@var{pass}
14157 @itemx -fenable-rtl-@var{pass}=@var{range-list}
14158 Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
14159 description and examples.
14161 @item -fenable-tree-@var{pass}
14162 @itemx -fenable-tree-@var{pass}=@var{range-list}
14163 Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
14164 of option arguments.
14166 @end table
14168 Here are some examples showing uses of these options.
14170 @smallexample
14172 # disable ccp1 for all functions
14173    -fdisable-tree-ccp1
14174 # disable complete unroll for function whose cgraph node uid is 1
14175    -fenable-tree-cunroll=1
14176 # disable gcse2 for functions at the following ranges [1,1],
14177 # [300,400], and [400,1000]
14178 # disable gcse2 for functions foo and foo2
14179    -fdisable-rtl-gcse2=foo,foo2
14180 # disable early inlining
14181    -fdisable-tree-einline
14182 # disable ipa inlining
14183    -fdisable-ipa-inline
14184 # enable tree full unroll
14185    -fenable-tree-unroll
14187 @end smallexample
14189 @item -fchecking
14190 @itemx -fchecking=@var{n}
14191 @opindex fchecking
14192 @opindex fno-checking
14193 Enable internal consistency checking.  The default depends on
14194 the compiler configuration.  @option{-fchecking=2} enables further
14195 internal consistency checking that might affect code generation.
14197 @item -frandom-seed=@var{string}
14198 @opindex frandom-seed
14199 This option provides a seed that GCC uses in place of
14200 random numbers in generating certain symbol names
14201 that have to be different in every compiled file.  It is also used to
14202 place unique stamps in coverage data files and the object files that
14203 produce them.  You can use the @option{-frandom-seed} option to produce
14204 reproducibly identical object files.
14206 The @var{string} can either be a number (decimal, octal or hex) or an
14207 arbitrary string (in which case it's converted to a number by
14208 computing CRC32).
14210 The @var{string} should be different for every file you compile.
14212 @item -save-temps
14213 @itemx -save-temps=cwd
14214 @opindex save-temps
14215 Store the usual ``temporary'' intermediate files permanently; place them
14216 in the current directory and name them based on the source file.  Thus,
14217 compiling @file{foo.c} with @option{-c -save-temps} produces files
14218 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
14219 preprocessed @file{foo.i} output file even though the compiler now
14220 normally uses an integrated preprocessor.
14222 When used in combination with the @option{-x} command-line option,
14223 @option{-save-temps} is sensible enough to avoid over writing an
14224 input source file with the same extension as an intermediate file.
14225 The corresponding intermediate file may be obtained by renaming the
14226 source file before using @option{-save-temps}.
14228 If you invoke GCC in parallel, compiling several different source
14229 files that share a common base name in different subdirectories or the
14230 same source file compiled for multiple output destinations, it is
14231 likely that the different parallel compilers will interfere with each
14232 other, and overwrite the temporary files.  For instance:
14234 @smallexample
14235 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
14236 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
14237 @end smallexample
14239 may result in @file{foo.i} and @file{foo.o} being written to
14240 simultaneously by both compilers.
14242 @item -save-temps=obj
14243 @opindex save-temps=obj
14244 Store the usual ``temporary'' intermediate files permanently.  If the
14245 @option{-o} option is used, the temporary files are based on the
14246 object file.  If the @option{-o} option is not used, the
14247 @option{-save-temps=obj} switch behaves like @option{-save-temps}.
14249 For example:
14251 @smallexample
14252 gcc -save-temps=obj -c foo.c
14253 gcc -save-temps=obj -c bar.c -o dir/xbar.o
14254 gcc -save-temps=obj foobar.c -o dir2/yfoobar
14255 @end smallexample
14257 @noindent
14258 creates @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
14259 @file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
14260 @file{dir2/yfoobar.o}.
14262 @item -time@r{[}=@var{file}@r{]}
14263 @opindex time
14264 Report the CPU time taken by each subprocess in the compilation
14265 sequence.  For C source files, this is the compiler proper and assembler
14266 (plus the linker if linking is done).
14268 Without the specification of an output file, the output looks like this:
14270 @smallexample
14271 # cc1 0.12 0.01
14272 # as 0.00 0.01
14273 @end smallexample
14275 The first number on each line is the ``user time'', that is time spent
14276 executing the program itself.  The second number is ``system time'',
14277 time spent executing operating system routines on behalf of the program.
14278 Both numbers are in seconds.
14280 With the specification of an output file, the output is appended to the
14281 named file, and it looks like this:
14283 @smallexample
14284 0.12 0.01 cc1 @var{options}
14285 0.00 0.01 as @var{options}
14286 @end smallexample
14288 The ``user time'' and the ``system time'' are moved before the program
14289 name, and the options passed to the program are displayed, so that one
14290 can later tell what file was being compiled, and with which options.
14292 @item -fdump-final-insns@r{[}=@var{file}@r{]}
14293 @opindex fdump-final-insns
14294 Dump the final internal representation (RTL) to @var{file}.  If the
14295 optional argument is omitted (or if @var{file} is @code{.}), the name
14296 of the dump file is determined by appending @code{.gkd} to the
14297 compilation output file name.
14299 @item -fcompare-debug@r{[}=@var{opts}@r{]}
14300 @opindex fcompare-debug
14301 @opindex fno-compare-debug
14302 If no error occurs during compilation, run the compiler a second time,
14303 adding @var{opts} and @option{-fcompare-debug-second} to the arguments
14304 passed to the second compilation.  Dump the final internal
14305 representation in both compilations, and print an error if they differ.
14307 If the equal sign is omitted, the default @option{-gtoggle} is used.
14309 The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
14310 and nonzero, implicitly enables @option{-fcompare-debug}.  If
14311 @env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
14312 then it is used for @var{opts}, otherwise the default @option{-gtoggle}
14313 is used.
14315 @option{-fcompare-debug=}, with the equal sign but without @var{opts},
14316 is equivalent to @option{-fno-compare-debug}, which disables the dumping
14317 of the final representation and the second compilation, preventing even
14318 @env{GCC_COMPARE_DEBUG} from taking effect.
14320 To verify full coverage during @option{-fcompare-debug} testing, set
14321 @env{GCC_COMPARE_DEBUG} to say @option{-fcompare-debug-not-overridden},
14322 which GCC rejects as an invalid option in any actual compilation
14323 (rather than preprocessing, assembly or linking).  To get just a
14324 warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
14325 not overridden} will do.
14327 @item -fcompare-debug-second
14328 @opindex fcompare-debug-second
14329 This option is implicitly passed to the compiler for the second
14330 compilation requested by @option{-fcompare-debug}, along with options to
14331 silence warnings, and omitting other options that would cause the compiler
14332 to produce output to files or to standard output as a side effect.  Dump
14333 files and preserved temporary files are renamed so as to contain the
14334 @code{.gk} additional extension during the second compilation, to avoid
14335 overwriting those generated by the first.
14337 When this option is passed to the compiler driver, it causes the
14338 @emph{first} compilation to be skipped, which makes it useful for little
14339 other than debugging the compiler proper.
14341 @item -gtoggle
14342 @opindex gtoggle
14343 Turn off generation of debug info, if leaving out this option
14344 generates it, or turn it on at level 2 otherwise.  The position of this
14345 argument in the command line does not matter; it takes effect after all
14346 other options are processed, and it does so only once, no matter how
14347 many times it is given.  This is mainly intended to be used with
14348 @option{-fcompare-debug}.
14350 @item -fvar-tracking-assignments-toggle
14351 @opindex fvar-tracking-assignments-toggle
14352 @opindex fno-var-tracking-assignments-toggle
14353 Toggle @option{-fvar-tracking-assignments}, in the same way that
14354 @option{-gtoggle} toggles @option{-g}.
14356 @item -Q
14357 @opindex Q
14358 Makes the compiler print out each function name as it is compiled, and
14359 print some statistics about each pass when it finishes.
14361 @item -ftime-report
14362 @opindex ftime-report
14363 Makes the compiler print some statistics about the time consumed by each
14364 pass when it finishes.
14366 @item -ftime-report-details
14367 @opindex ftime-report-details
14368 Record the time consumed by infrastructure parts separately for each pass.
14370 @item -fira-verbose=@var{n}
14371 @opindex fira-verbose
14372 Control the verbosity of the dump file for the integrated register allocator.
14373 The default value is 5.  If the value @var{n} is greater or equal to 10,
14374 the dump output is sent to stderr using the same format as @var{n} minus 10.
14376 @item -flto-report
14377 @opindex flto-report
14378 Prints a report with internal details on the workings of the link-time
14379 optimizer.  The contents of this report vary from version to version.
14380 It is meant to be useful to GCC developers when processing object
14381 files in LTO mode (via @option{-flto}).
14383 Disabled by default.
14385 @item -flto-report-wpa
14386 @opindex flto-report-wpa
14387 Like @option{-flto-report}, but only print for the WPA phase of Link
14388 Time Optimization.
14390 @item -fmem-report
14391 @opindex fmem-report
14392 Makes the compiler print some statistics about permanent memory
14393 allocation when it finishes.
14395 @item -fmem-report-wpa
14396 @opindex fmem-report-wpa
14397 Makes the compiler print some statistics about permanent memory
14398 allocation for the WPA phase only.
14400 @item -fpre-ipa-mem-report
14401 @opindex fpre-ipa-mem-report
14402 @item -fpost-ipa-mem-report
14403 @opindex fpost-ipa-mem-report
14404 Makes the compiler print some statistics about permanent memory
14405 allocation before or after interprocedural optimization.
14407 @item -fprofile-report
14408 @opindex fprofile-report
14409 Makes the compiler print some statistics about consistency of the
14410 (estimated) profile and effect of individual passes.
14412 @item -fstack-usage
14413 @opindex fstack-usage
14414 Makes the compiler output stack usage information for the program, on a
14415 per-function basis.  The filename for the dump is made by appending
14416 @file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
14417 the output file, if explicitly specified and it is not an executable,
14418 otherwise it is the basename of the source file.  An entry is made up
14419 of three fields:
14421 @itemize
14422 @item
14423 The name of the function.
14424 @item
14425 A number of bytes.
14426 @item
14427 One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
14428 @end itemize
14430 The qualifier @code{static} means that the function manipulates the stack
14431 statically: a fixed number of bytes are allocated for the frame on function
14432 entry and released on function exit; no stack adjustments are otherwise made
14433 in the function.  The second field is this fixed number of bytes.
14435 The qualifier @code{dynamic} means that the function manipulates the stack
14436 dynamically: in addition to the static allocation described above, stack
14437 adjustments are made in the body of the function, for example to push/pop
14438 arguments around function calls.  If the qualifier @code{bounded} is also
14439 present, the amount of these adjustments is bounded at compile time and
14440 the second field is an upper bound of the total amount of stack used by
14441 the function.  If it is not present, the amount of these adjustments is
14442 not bounded at compile time and the second field only represents the
14443 bounded part.
14445 @item -fstats
14446 @opindex fstats
14447 Emit statistics about front-end processing at the end of the compilation.
14448 This option is supported only by the C++ front end, and
14449 the information is generally only useful to the G++ development team.
14451 @item -fdbg-cnt-list
14452 @opindex fdbg-cnt-list
14453 Print the name and the counter upper bound for all debug counters.
14456 @item -fdbg-cnt=@var{counter-value-list}
14457 @opindex fdbg-cnt
14458 Set the internal debug counter lower and upper bound.  @var{counter-value-list}
14459 is a comma-separated list of @var{name}:@var{lower_bound}:@var{upper_bound}
14460 tuples which sets the lower and the upper bound of each debug
14461 counter @var{name}.  The @var{lower_bound} is optional and is zero
14462 initialized if not set.
14463 All debug counters have the initial upper bound of @code{UINT_MAX};
14464 thus @code{dbg_cnt} returns true always unless the upper bound
14465 is set by this option.
14466 For example, with @option{-fdbg-cnt=dce:2:4,tail_call:10},
14467 @code{dbg_cnt(dce)} returns true only for third and fourth invocation.
14468 For @code{dbg_cnt(tail_call)} true is returned for first 10 invocations.
14470 @item -print-file-name=@var{library}
14471 @opindex print-file-name
14472 Print the full absolute name of the library file @var{library} that
14473 would be used when linking---and don't do anything else.  With this
14474 option, GCC does not compile or link anything; it just prints the
14475 file name.
14477 @item -print-multi-directory
14478 @opindex print-multi-directory
14479 Print the directory name corresponding to the multilib selected by any
14480 other switches present in the command line.  This directory is supposed
14481 to exist in @env{GCC_EXEC_PREFIX}.
14483 @item -print-multi-lib
14484 @opindex print-multi-lib
14485 Print the mapping from multilib directory names to compiler switches
14486 that enable them.  The directory name is separated from the switches by
14487 @samp{;}, and each switch starts with an @samp{@@} instead of the
14488 @samp{-}, without spaces between multiple switches.  This is supposed to
14489 ease shell processing.
14491 @item -print-multi-os-directory
14492 @opindex print-multi-os-directory
14493 Print the path to OS libraries for the selected
14494 multilib, relative to some @file{lib} subdirectory.  If OS libraries are
14495 present in the @file{lib} subdirectory and no multilibs are used, this is
14496 usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
14497 sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
14498 @file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
14499 subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
14501 @item -print-multiarch
14502 @opindex print-multiarch
14503 Print the path to OS libraries for the selected multiarch,
14504 relative to some @file{lib} subdirectory.
14506 @item -print-prog-name=@var{program}
14507 @opindex print-prog-name
14508 Like @option{-print-file-name}, but searches for a program such as @command{cpp}.
14510 @item -print-libgcc-file-name
14511 @opindex print-libgcc-file-name
14512 Same as @option{-print-file-name=libgcc.a}.
14514 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
14515 but you do want to link with @file{libgcc.a}.  You can do:
14517 @smallexample
14518 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
14519 @end smallexample
14521 @item -print-search-dirs
14522 @opindex print-search-dirs
14523 Print the name of the configured installation directory and a list of
14524 program and library directories @command{gcc} searches---and don't do anything else.
14526 This is useful when @command{gcc} prints the error message
14527 @samp{installation problem, cannot exec cpp0: No such file or directory}.
14528 To resolve this you either need to put @file{cpp0} and the other compiler
14529 components where @command{gcc} expects to find them, or you can set the environment
14530 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
14531 Don't forget the trailing @samp{/}.
14532 @xref{Environment Variables}.
14534 @item -print-sysroot
14535 @opindex print-sysroot
14536 Print the target sysroot directory that is used during
14537 compilation.  This is the target sysroot specified either at configure
14538 time or using the @option{--sysroot} option, possibly with an extra
14539 suffix that depends on compilation options.  If no target sysroot is
14540 specified, the option prints nothing.
14542 @item -print-sysroot-headers-suffix
14543 @opindex print-sysroot-headers-suffix
14544 Print the suffix added to the target sysroot when searching for
14545 headers, or give an error if the compiler is not configured with such
14546 a suffix---and don't do anything else.
14548 @item -dumpmachine
14549 @opindex dumpmachine
14550 Print the compiler's target machine (for example,
14551 @samp{i686-pc-linux-gnu})---and don't do anything else.
14553 @item -dumpversion
14554 @opindex dumpversion
14555 Print the compiler version (for example, @code{3.0}, @code{6.3.0} or @code{7})---and don't do
14556 anything else.  This is the compiler version used in filesystem paths,
14557 specs, can be depending on how the compiler has been configured just
14558 a single number (major version), two numbers separated by dot (major and
14559 minor version) or three numbers separated by dots (major, minor and patchlevel
14560 version).
14562 @item -dumpfullversion
14563 @opindex dumpfullversion
14564 Print the full compiler version, always 3 numbers separated by dots,
14565 major, minor and patchlevel version.
14567 @item -dumpspecs
14568 @opindex dumpspecs
14569 Print the compiler's built-in specs---and don't do anything else.  (This
14570 is used when GCC itself is being built.)  @xref{Spec Files}.
14571 @end table
14573 @node Submodel Options
14574 @section Machine-Dependent Options
14575 @cindex submodel options
14576 @cindex specifying hardware config
14577 @cindex hardware models and configurations, specifying
14578 @cindex target-dependent options
14579 @cindex machine-dependent options
14581 Each target machine supported by GCC can have its own options---for
14582 example, to allow you to compile for a particular processor variant or
14583 ABI, or to control optimizations specific to that machine.  By
14584 convention, the names of machine-specific options start with
14585 @samp{-m}.
14587 Some configurations of the compiler also support additional target-specific
14588 options, usually for compatibility with other compilers on the same
14589 platform.
14591 @c This list is ordered alphanumerically by subsection name.
14592 @c It should be the same order and spelling as these options are listed
14593 @c in Machine Dependent Options
14595 @menu
14596 * AArch64 Options::
14597 * Adapteva Epiphany Options::
14598 * ARC Options::
14599 * ARM Options::
14600 * AVR Options::
14601 * Blackfin Options::
14602 * C6X Options::
14603 * CRIS Options::
14604 * CR16 Options::
14605 * Darwin Options::
14606 * DEC Alpha Options::
14607 * FR30 Options::
14608 * FT32 Options::
14609 * FRV Options::
14610 * GNU/Linux Options::
14611 * H8/300 Options::
14612 * HPPA Options::
14613 * IA-64 Options::
14614 * LM32 Options::
14615 * M32C Options::
14616 * M32R/D Options::
14617 * M680x0 Options::
14618 * MCore Options::
14619 * MeP Options::
14620 * MicroBlaze Options::
14621 * MIPS Options::
14622 * MMIX Options::
14623 * MN10300 Options::
14624 * Moxie Options::
14625 * MSP430 Options::
14626 * NDS32 Options::
14627 * Nios II Options::
14628 * Nvidia PTX Options::
14629 * PDP-11 Options::
14630 * picoChip Options::
14631 * PowerPC Options::
14632 * PowerPC SPE Options::
14633 * RISC-V Options::
14634 * RL78 Options::
14635 * RS/6000 and PowerPC Options::
14636 * RX Options::
14637 * S/390 and zSeries Options::
14638 * Score Options::
14639 * SH Options::
14640 * Solaris 2 Options::
14641 * SPARC Options::
14642 * SPU Options::
14643 * System V Options::
14644 * TILE-Gx Options::
14645 * TILEPro Options::
14646 * V850 Options::
14647 * VAX Options::
14648 * Visium Options::
14649 * VMS Options::
14650 * VxWorks Options::
14651 * x86 Options::
14652 * x86 Windows Options::
14653 * Xstormy16 Options::
14654 * Xtensa Options::
14655 * zSeries Options::
14656 @end menu
14658 @node AArch64 Options
14659 @subsection AArch64 Options
14660 @cindex AArch64 Options
14662 These options are defined for AArch64 implementations:
14664 @table @gcctabopt
14666 @item -mabi=@var{name}
14667 @opindex mabi
14668 Generate code for the specified data model.  Permissible values
14669 are @samp{ilp32} for SysV-like data model where int, long int and pointers
14670 are 32 bits, and @samp{lp64} for SysV-like data model where int is 32 bits,
14671 but long int and pointers are 64 bits.
14673 The default depends on the specific target configuration.  Note that
14674 the LP64 and ILP32 ABIs are not link-compatible; you must compile your
14675 entire program with the same ABI, and link with a compatible set of libraries.
14677 @item -mbig-endian
14678 @opindex mbig-endian
14679 Generate big-endian code.  This is the default when GCC is configured for an
14680 @samp{aarch64_be-*-*} target.
14682 @item -mgeneral-regs-only
14683 @opindex mgeneral-regs-only
14684 Generate code which uses only the general-purpose registers.  This will prevent
14685 the compiler from using floating-point and Advanced SIMD registers but will not
14686 impose any restrictions on the assembler.
14688 @item -mlittle-endian
14689 @opindex mlittle-endian
14690 Generate little-endian code.  This is the default when GCC is configured for an
14691 @samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.
14693 @item -mcmodel=tiny
14694 @opindex mcmodel=tiny
14695 Generate code for the tiny code model.  The program and its statically defined
14696 symbols must be within 1MB of each other.  Programs can be statically or
14697 dynamically linked.
14699 @item -mcmodel=small
14700 @opindex mcmodel=small
14701 Generate code for the small code model.  The program and its statically defined
14702 symbols must be within 4GB of each other.  Programs can be statically or
14703 dynamically linked.  This is the default code model.
14705 @item -mcmodel=large
14706 @opindex mcmodel=large
14707 Generate code for the large code model.  This makes no assumptions about
14708 addresses and sizes of sections.  Programs can be statically linked only.
14710 @item -mstrict-align
14711 @itemx -mno-strict-align
14712 @opindex mstrict-align
14713 @opindex mno-strict-align
14714 Avoid or allow generating memory accesses that may not be aligned on a natural
14715 object boundary as described in the architecture specification.
14717 @item -momit-leaf-frame-pointer
14718 @itemx -mno-omit-leaf-frame-pointer
14719 @opindex momit-leaf-frame-pointer
14720 @opindex mno-omit-leaf-frame-pointer
14721 Omit or keep the frame pointer in leaf functions.  The former behavior is the
14722 default.
14724 @item -mtls-dialect=desc
14725 @opindex mtls-dialect=desc
14726 Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
14727 of TLS variables.  This is the default.
14729 @item -mtls-dialect=traditional
14730 @opindex mtls-dialect=traditional
14731 Use traditional TLS as the thread-local storage mechanism for dynamic accesses
14732 of TLS variables.
14734 @item -mtls-size=@var{size}
14735 @opindex mtls-size
14736 Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
14737 This option requires binutils 2.26 or newer.
14739 @item -mfix-cortex-a53-835769
14740 @itemx -mno-fix-cortex-a53-835769
14741 @opindex mfix-cortex-a53-835769
14742 @opindex mno-fix-cortex-a53-835769
14743 Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
14744 This involves inserting a NOP instruction between memory instructions and
14745 64-bit integer multiply-accumulate instructions.
14747 @item -mfix-cortex-a53-843419
14748 @itemx -mno-fix-cortex-a53-843419
14749 @opindex mfix-cortex-a53-843419
14750 @opindex mno-fix-cortex-a53-843419
14751 Enable or disable the workaround for the ARM Cortex-A53 erratum number 843419.
14752 This erratum workaround is made at link time and this will only pass the
14753 corresponding flag to the linker.
14755 @item -mlow-precision-recip-sqrt
14756 @itemx -mno-low-precision-recip-sqrt
14757 @opindex mlow-precision-recip-sqrt
14758 @opindex mno-low-precision-recip-sqrt
14759 Enable or disable the reciprocal square root approximation.
14760 This option only has an effect if @option{-ffast-math} or
14761 @option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
14762 precision of reciprocal square root results to about 16 bits for
14763 single precision and to 32 bits for double precision.
14765 @item -mlow-precision-sqrt
14766 @itemx -mno-low-precision-sqrt
14767 @opindex -mlow-precision-sqrt
14768 @opindex -mno-low-precision-sqrt
14769 Enable or disable the square root approximation.
14770 This option only has an effect if @option{-ffast-math} or
14771 @option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
14772 precision of square root results to about 16 bits for
14773 single precision and to 32 bits for double precision.
14774 If enabled, it implies @option{-mlow-precision-recip-sqrt}.
14776 @item -mlow-precision-div
14777 @itemx -mno-low-precision-div
14778 @opindex -mlow-precision-div
14779 @opindex -mno-low-precision-div
14780 Enable or disable the division approximation.
14781 This option only has an effect if @option{-ffast-math} or
14782 @option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
14783 precision of division results to about 16 bits for
14784 single precision and to 32 bits for double precision.
14786 @item -march=@var{name}
14787 @opindex march
14788 Specify the name of the target architecture and, optionally, one or
14789 more feature modifiers.  This option has the form
14790 @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}.
14792 The permissible values for @var{arch} are @samp{armv8-a},
14793 @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a} or @samp{armv8.4-a}
14794 or @var{native}.
14796 The value @samp{armv8.4-a} implies @samp{armv8.3-a} and enables compiler
14797 support for the ARMv8.4-A architecture extensions.
14799 The value @samp{armv8.3-a} implies @samp{armv8.2-a} and enables compiler
14800 support for the ARMv8.3-A architecture extensions.
14802 The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler
14803 support for the ARMv8.2-A architecture extensions.
14805 The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler
14806 support for the ARMv8.1-A architecture extension.  In particular, it
14807 enables the @samp{+crc}, @samp{+lse}, and @samp{+rdma} features.
14809 The value @samp{native} is available on native AArch64 GNU/Linux and
14810 causes the compiler to pick the architecture of the host system.  This
14811 option has no effect if the compiler is unable to recognize the
14812 architecture of the host system,
14814 The permissible values for @var{feature} are listed in the sub-section
14815 on @ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
14816 Feature Modifiers}.  Where conflicting feature modifiers are
14817 specified, the right-most feature is used.
14819 GCC uses @var{name} to determine what kind of instructions it can emit
14820 when generating assembly code.  If @option{-march} is specified
14821 without either of @option{-mtune} or @option{-mcpu} also being
14822 specified, the code is tuned to perform well across a range of target
14823 processors implementing the target architecture.
14825 @item -mtune=@var{name}
14826 @opindex mtune
14827 Specify the name of the target processor for which GCC should tune the
14828 performance of the code.  Permissible values for this option are:
14829 @samp{generic}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55},
14830 @samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75},
14831 @samp{exynos-m1}, @samp{falkor}, @samp{qdf24xx}, @samp{saphira},
14832 @samp{xgene1}, @samp{vulcan}, @samp{thunderx},
14833 @samp{thunderxt88}, @samp{thunderxt88p1}, @samp{thunderxt81},
14834 @samp{thunderxt83}, @samp{thunderx2t99}, @samp{cortex-a57.cortex-a53},
14835 @samp{cortex-a72.cortex-a53}, @samp{cortex-a73.cortex-a35},
14836 @samp{cortex-a73.cortex-a53}, @samp{cortex-a75.cortex-a55},
14837 @samp{native}.
14839 The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
14840 @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
14841 @samp{cortex-a75.cortex-a55} specify that GCC should tune for a
14842 big.LITTLE system.
14844 Additionally on native AArch64 GNU/Linux systems the value
14845 @samp{native} tunes performance to the host system.  This option has no effect
14846 if the compiler is unable to recognize the processor of the host system.
14848 Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
14849 are specified, the code is tuned to perform well across a range
14850 of target processors.
14852 This option cannot be suffixed by feature modifiers.
14854 @item -mcpu=@var{name}
14855 @opindex mcpu
14856 Specify the name of the target processor, optionally suffixed by one
14857 or more feature modifiers.  This option has the form
14858 @option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where
14859 the permissible values for @var{cpu} are the same as those available
14860 for @option{-mtune}.  The permissible values for @var{feature} are
14861 documented in the sub-section on
14862 @ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
14863 Feature Modifiers}.  Where conflicting feature modifiers are
14864 specified, the right-most feature is used.
14866 GCC uses @var{name} to determine what kind of instructions it can emit when
14867 generating assembly code (as if by @option{-march}) and to determine
14868 the target processor for which to tune for performance (as if
14869 by @option{-mtune}).  Where this option is used in conjunction
14870 with @option{-march} or @option{-mtune}, those options take precedence
14871 over the appropriate part of this option.
14873 @item -moverride=@var{string}
14874 @opindex moverride
14875 Override tuning decisions made by the back-end in response to a
14876 @option{-mtune=} switch.  The syntax, semantics, and accepted values
14877 for @var{string} in this option are not guaranteed to be consistent
14878 across releases.
14880 This option is only intended to be useful when developing GCC.
14882 @item -mverbose-cost-dump
14883 @opindex mverbose-cost-dump
14884 Enable verbose cost model dumping in the debug dump files.  This option is
14885 provided for use in debugging the compiler.
14887 @item -mpc-relative-literal-loads
14888 @itemx -mno-pc-relative-literal-loads
14889 @opindex mpc-relative-literal-loads
14890 @opindex mno-pc-relative-literal-loads
14891 Enable or disable PC-relative literal loads.  With this option literal pools are
14892 accessed using a single instruction and emitted after each function.  This
14893 limits the maximum size of functions to 1MB.  This is enabled by default for
14894 @option{-mcmodel=tiny}.
14896 @item -msign-return-address=@var{scope}
14897 @opindex msign-return-address
14898 Select the function scope on which return address signing will be applied.
14899 Permissible values are @samp{none}, which disables return address signing,
14900 @samp{non-leaf}, which enables pointer signing for functions which are not leaf
14901 functions, and @samp{all}, which enables pointer signing for all functions.  The
14902 default value is @samp{none}.
14904 @item -msve-vector-bits=@var{bits}
14905 @opindex msve-vector-bits
14906 Specify the number of bits in an SVE vector register.  This option only has
14907 an effect when SVE is enabled.
14909 GCC supports two forms of SVE code generation: ``vector-length
14910 agnostic'' output that works with any size of vector register and
14911 ``vector-length specific'' output that only works when the vector
14912 registers are a particular size.  Replacing @var{bits} with
14913 @samp{scalable} selects vector-length agnostic output while
14914 replacing it with a number selects vector-length specific output.
14915 The possible lengths in the latter case are: 128, 256, 512, 1024
14916 and 2048.  @samp{scalable} is the default.
14918 At present, @samp{-msve-vector-bits=128} produces the same output
14919 as @samp{-msve-vector-bits=scalable}.
14921 @end table
14923 @subsubsection @option{-march} and @option{-mcpu} Feature Modifiers
14924 @anchor{aarch64-feature-modifiers}
14925 @cindex @option{-march} feature modifiers
14926 @cindex @option{-mcpu} feature modifiers
14927 Feature modifiers used with @option{-march} and @option{-mcpu} can be any of
14928 the following and their inverses @option{no@var{feature}}:
14930 @table @samp
14931 @item crc
14932 Enable CRC extension.  This is on by default for
14933 @option{-march=armv8.1-a}.
14934 @item crypto
14935 Enable Crypto extension.  This also enables Advanced SIMD and floating-point
14936 instructions.
14937 @item fp
14938 Enable floating-point instructions.  This is on by default for all possible
14939 values for options @option{-march} and @option{-mcpu}.
14940 @item simd
14941 Enable Advanced SIMD instructions.  This also enables floating-point
14942 instructions.  This is on by default for all possible values for options
14943 @option{-march} and @option{-mcpu}.
14944 @item sve
14945 Enable Scalable Vector Extension instructions.  This also enables Advanced
14946 SIMD and floating-point instructions.
14947 @item lse
14948 Enable Large System Extension instructions.  This is on by default for
14949 @option{-march=armv8.1-a}.
14950 @item rdma
14951 Enable Round Double Multiply Accumulate instructions.  This is on by default
14952 for @option{-march=armv8.1-a}.
14953 @item fp16
14954 Enable FP16 extension.  This also enables floating-point instructions.
14955 @item fp16fml
14956 Enable FP16 fmla extension.  This also enables FP16 extensions and
14957 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.
14959 @item rcpc
14960 Enable the RcPc extension.  This does not change code generation from GCC,
14961 but is passed on to the assembler, enabling inline asm statements to use
14962 instructions from the RcPc extension.
14963 @item dotprod
14964 Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
14965 @item aes
14966 Enable the Armv8-a aes and pmull crypto extension.  This also enables Advanced
14967 SIMD instructions.
14968 @item sha2
14969 Enable the Armv8-a sha2 crypto extension.  This also enables Advanced SIMD instructions.
14970 @item sha3
14971 Enable the sha512 and sha3 crypto extension.  This also enables Advanced SIMD
14972 instructions. Use of this option with architectures prior to Armv8.2-A is not supported.
14973 @item sm4
14974 Enable the sm3 and sm4 crypto extension.  This also enables Advanced SIMD instructions.
14975 Use of this option with architectures prior to Armv8.2-A is not supported.
14977 @end table
14979 Feature @option{crypto} implies @option{aes}, @option{sha2}, and @option{simd},
14980 which implies @option{fp}.
14981 Conversely, @option{nofp} implies @option{nosimd}, which implies
14982 @option{nocrypto}, @option{noaes} and @option{nosha2}.
14984 @node Adapteva Epiphany Options
14985 @subsection Adapteva Epiphany Options
14987 These @samp{-m} options are defined for Adapteva Epiphany:
14989 @table @gcctabopt
14990 @item -mhalf-reg-file
14991 @opindex mhalf-reg-file
14992 Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
14993 That allows code to run on hardware variants that lack these registers.
14995 @item -mprefer-short-insn-regs
14996 @opindex mprefer-short-insn-regs
14997 Preferentially allocate registers that allow short instruction generation.
14998 This can result in increased instruction count, so this may either reduce or
14999 increase overall code size.
15001 @item -mbranch-cost=@var{num}
15002 @opindex mbranch-cost
15003 Set the cost of branches to roughly @var{num} ``simple'' instructions.
15004 This cost is only a heuristic and is not guaranteed to produce
15005 consistent results across releases.
15007 @item -mcmove
15008 @opindex mcmove
15009 Enable the generation of conditional moves.
15011 @item -mnops=@var{num}
15012 @opindex mnops
15013 Emit @var{num} NOPs before every other generated instruction.
15015 @item -mno-soft-cmpsf
15016 @opindex mno-soft-cmpsf
15017 For single-precision floating-point comparisons, emit an @code{fsub} instruction
15018 and test the flags.  This is faster than a software comparison, but can
15019 get incorrect results in the presence of NaNs, or when two different small
15020 numbers are compared such that their difference is calculated as zero.
15021 The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
15022 software comparisons.
15024 @item -mstack-offset=@var{num}
15025 @opindex mstack-offset
15026 Set the offset between the top of the stack and the stack pointer.
15027 E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
15028 can be used by leaf functions without stack allocation.
15029 Values other than @samp{8} or @samp{16} are untested and unlikely to work.
15030 Note also that this option changes the ABI; compiling a program with a
15031 different stack offset than the libraries have been compiled with
15032 generally does not work.
15033 This option can be useful if you want to evaluate if a different stack
15034 offset would give you better code, but to actually use a different stack
15035 offset to build working programs, it is recommended to configure the
15036 toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.
15038 @item -mno-round-nearest
15039 @opindex mno-round-nearest
15040 Make the scheduler assume that the rounding mode has been set to
15041 truncating.  The default is @option{-mround-nearest}.
15043 @item -mlong-calls
15044 @opindex mlong-calls
15045 If not otherwise specified by an attribute, assume all calls might be beyond
15046 the offset range of the @code{b} / @code{bl} instructions, and therefore load the
15047 function address into a register before performing a (otherwise direct) call.
15048 This is the default.
15050 @item -mshort-calls
15051 @opindex short-calls
15052 If not otherwise specified by an attribute, assume all direct calls are
15053 in the range of the @code{b} / @code{bl} instructions, so use these instructions
15054 for direct calls.  The default is @option{-mlong-calls}.
15056 @item -msmall16
15057 @opindex msmall16
15058 Assume addresses can be loaded as 16-bit unsigned values.  This does not
15059 apply to function addresses for which @option{-mlong-calls} semantics
15060 are in effect.
15062 @item -mfp-mode=@var{mode}
15063 @opindex mfp-mode
15064 Set the prevailing mode of the floating-point unit.
15065 This determines the floating-point mode that is provided and expected
15066 at function call and return time.  Making this mode match the mode you
15067 predominantly need at function start can make your programs smaller and
15068 faster by avoiding unnecessary mode switches.
15070 @var{mode} can be set to one the following values:
15072 @table @samp
15073 @item caller
15074 Any mode at function entry is valid, and retained or restored when
15075 the function returns, and when it calls other functions.
15076 This mode is useful for compiling libraries or other compilation units
15077 you might want to incorporate into different programs with different
15078 prevailing FPU modes, and the convenience of being able to use a single
15079 object file outweighs the size and speed overhead for any extra
15080 mode switching that might be needed, compared with what would be needed
15081 with a more specific choice of prevailing FPU mode.
15083 @item truncate
15084 This is the mode used for floating-point calculations with
15085 truncating (i.e.@: round towards zero) rounding mode.  That includes
15086 conversion from floating point to integer.
15088 @item round-nearest
15089 This is the mode used for floating-point calculations with
15090 round-to-nearest-or-even rounding mode.
15092 @item int
15093 This is the mode used to perform integer calculations in the FPU, e.g.@:
15094 integer multiply, or integer multiply-and-accumulate.
15095 @end table
15097 The default is @option{-mfp-mode=caller}
15099 @item -mnosplit-lohi
15100 @itemx -mno-postinc
15101 @itemx -mno-postmodify
15102 @opindex mnosplit-lohi
15103 @opindex mno-postinc
15104 @opindex mno-postmodify
15105 Code generation tweaks that disable, respectively, splitting of 32-bit
15106 loads, generation of post-increment addresses, and generation of
15107 post-modify addresses.  The defaults are @option{msplit-lohi},
15108 @option{-mpost-inc}, and @option{-mpost-modify}.
15110 @item -mnovect-double
15111 @opindex mno-vect-double
15112 Change the preferred SIMD mode to SImode.  The default is
15113 @option{-mvect-double}, which uses DImode as preferred SIMD mode.
15115 @item -max-vect-align=@var{num}
15116 @opindex max-vect-align
15117 The maximum alignment for SIMD vector mode types.
15118 @var{num} may be 4 or 8.  The default is 8.
15119 Note that this is an ABI change, even though many library function
15120 interfaces are unaffected if they don't use SIMD vector modes
15121 in places that affect size and/or alignment of relevant types.
15123 @item -msplit-vecmove-early
15124 @opindex msplit-vecmove-early
15125 Split vector moves into single word moves before reload.  In theory this
15126 can give better register allocation, but so far the reverse seems to be
15127 generally the case.
15129 @item -m1reg-@var{reg}
15130 @opindex m1reg-
15131 Specify a register to hold the constant @minus{}1, which makes loading small negative
15132 constants and certain bitmasks faster.
15133 Allowable values for @var{reg} are @samp{r43} and @samp{r63},
15134 which specify use of that register as a fixed register,
15135 and @samp{none}, which means that no register is used for this
15136 purpose.  The default is @option{-m1reg-none}.
15138 @end table
15140 @node ARC Options
15141 @subsection ARC Options
15142 @cindex ARC options
15144 The following options control the architecture variant for which code
15145 is being compiled:
15147 @c architecture variants
15148 @table @gcctabopt
15150 @item -mbarrel-shifter
15151 @opindex mbarrel-shifter
15152 Generate instructions supported by barrel shifter.  This is the default
15153 unless @option{-mcpu=ARC601} or @samp{-mcpu=ARCEM} is in effect.
15155 @item -mjli-always
15156 @opindex mjli-alawys
15157 Force to call a function using jli_s instruction.  This option is
15158 valid only for ARCv2 architecture.
15160 @item -mcpu=@var{cpu}
15161 @opindex mcpu
15162 Set architecture type, register usage, and instruction scheduling
15163 parameters for @var{cpu}.  There are also shortcut alias options
15164 available for backward compatibility and convenience.  Supported
15165 values for @var{cpu} are
15167 @table @samp
15168 @opindex mA6
15169 @opindex mARC600
15170 @item arc600
15171 Compile for ARC600.  Aliases: @option{-mA6}, @option{-mARC600}.
15173 @item arc601
15174 @opindex mARC601
15175 Compile for ARC601.  Alias: @option{-mARC601}.
15177 @item arc700
15178 @opindex mA7
15179 @opindex mARC700
15180 Compile for ARC700.  Aliases: @option{-mA7}, @option{-mARC700}.
15181 This is the default when configured with @option{--with-cpu=arc700}@.
15183 @item arcem
15184 Compile for ARC EM.
15186 @item archs
15187 Compile for ARC HS.
15189 @item em
15190 Compile for ARC EM CPU with no hardware extensions.
15192 @item em4
15193 Compile for ARC EM4 CPU.
15195 @item em4_dmips
15196 Compile for ARC EM4 DMIPS CPU.
15198 @item em4_fpus
15199 Compile for ARC EM4 DMIPS CPU with the single-precision floating-point
15200 extension.
15202 @item em4_fpuda
15203 Compile for ARC EM4 DMIPS CPU with single-precision floating-point and
15204 double assist instructions.
15206 @item hs
15207 Compile for ARC HS CPU with no hardware extensions except the atomic
15208 instructions.
15210 @item hs34
15211 Compile for ARC HS34 CPU.
15213 @item hs38
15214 Compile for ARC HS38 CPU.
15216 @item hs38_linux
15217 Compile for ARC HS38 CPU with all hardware extensions on.
15219 @item arc600_norm
15220 Compile for ARC 600 CPU with @code{norm} instructions enabled.
15222 @item arc600_mul32x16
15223 Compile for ARC 600 CPU with @code{norm} and 32x16-bit multiply 
15224 instructions enabled.
15226 @item arc600_mul64
15227 Compile for ARC 600 CPU with @code{norm} and @code{mul64}-family 
15228 instructions enabled.
15230 @item arc601_norm
15231 Compile for ARC 601 CPU with @code{norm} instructions enabled.
15233 @item arc601_mul32x16
15234 Compile for ARC 601 CPU with @code{norm} and 32x16-bit multiply
15235 instructions enabled.
15237 @item arc601_mul64
15238 Compile for ARC 601 CPU with @code{norm} and @code{mul64}-family
15239 instructions enabled.
15241 @item nps400
15242 Compile for ARC 700 on NPS400 chip.
15244 @item em_mini
15245 Compile for ARC EM minimalist configuration featuring reduced register
15246 set.
15248 @end table
15250 @item -mdpfp
15251 @opindex mdpfp
15252 @itemx -mdpfp-compact
15253 @opindex mdpfp-compact
15254 Generate double-precision FPX instructions, tuned for the compact
15255 implementation.
15257 @item -mdpfp-fast
15258 @opindex mdpfp-fast
15259 Generate double-precision FPX instructions, tuned for the fast
15260 implementation.
15262 @item -mno-dpfp-lrsr
15263 @opindex mno-dpfp-lrsr
15264 Disable @code{lr} and @code{sr} instructions from using FPX extension
15265 aux registers.
15267 @item -mea
15268 @opindex mea
15269 Generate extended arithmetic instructions.  Currently only
15270 @code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
15271 supported.  This is always enabled for @option{-mcpu=ARC700}.
15273 @item -mno-mpy
15274 @opindex mno-mpy
15275 Do not generate @code{mpy}-family instructions for ARC700.  This option is
15276 deprecated.
15278 @item -mmul32x16
15279 @opindex mmul32x16
15280 Generate 32x16-bit multiply and multiply-accumulate instructions.
15282 @item -mmul64
15283 @opindex mmul64
15284 Generate @code{mul64} and @code{mulu64} instructions.  
15285 Only valid for @option{-mcpu=ARC600}.
15287 @item -mnorm
15288 @opindex mnorm
15289 Generate @code{norm} instructions.  This is the default if @option{-mcpu=ARC700}
15290 is in effect.
15292 @item -mspfp
15293 @opindex mspfp
15294 @itemx -mspfp-compact
15295 @opindex mspfp-compact
15296 Generate single-precision FPX instructions, tuned for the compact
15297 implementation.
15299 @item -mspfp-fast
15300 @opindex mspfp-fast
15301 Generate single-precision FPX instructions, tuned for the fast
15302 implementation.
15304 @item -msimd
15305 @opindex msimd
15306 Enable generation of ARC SIMD instructions via target-specific
15307 builtins.  Only valid for @option{-mcpu=ARC700}.
15309 @item -msoft-float
15310 @opindex msoft-float
15311 This option ignored; it is provided for compatibility purposes only.
15312 Software floating-point code is emitted by default, and this default
15313 can overridden by FPX options; @option{-mspfp}, @option{-mspfp-compact}, or
15314 @option{-mspfp-fast} for single precision, and @option{-mdpfp},
15315 @option{-mdpfp-compact}, or @option{-mdpfp-fast} for double precision.
15317 @item -mswap
15318 @opindex mswap
15319 Generate @code{swap} instructions.
15321 @item -matomic
15322 @opindex matomic
15323 This enables use of the locked load/store conditional extension to implement
15324 atomic memory built-in functions.  Not available for ARC 6xx or ARC
15325 EM cores.
15327 @item -mdiv-rem
15328 @opindex mdiv-rem
15329 Enable @code{div} and @code{rem} instructions for ARCv2 cores.
15331 @item -mcode-density
15332 @opindex mcode-density
15333 Enable code density instructions for ARC EM.  
15334 This option is on by default for ARC HS.
15336 @item -mll64
15337 @opindex mll64
15338 Enable double load/store operations for ARC HS cores.
15340 @item -mtp-regno=@var{regno}
15341 @opindex mtp-regno
15342 Specify thread pointer register number.
15344 @item -mmpy-option=@var{multo}
15345 @opindex mmpy-option
15346 Compile ARCv2 code with a multiplier design option.  You can specify 
15347 the option using either a string or numeric value for @var{multo}.  
15348 @samp{wlh1} is the default value.  The recognized values are:
15350 @table @samp
15351 @item 0
15352 @itemx none
15353 No multiplier available.
15355 @item 1
15356 @itemx w
15357 16x16 multiplier, fully pipelined.
15358 The following instructions are enabled: @code{mpyw} and @code{mpyuw}.
15360 @item 2
15361 @itemx wlh1
15362 32x32 multiplier, fully
15363 pipelined (1 stage).  The following instructions are additionally
15364 enabled: @code{mpy}, @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.
15366 @item 3
15367 @itemx wlh2
15368 32x32 multiplier, fully pipelined
15369 (2 stages).  The following instructions are additionally enabled: @code{mpy},
15370 @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.
15372 @item 4
15373 @itemx wlh3
15374 Two 16x16 multipliers, blocking,
15375 sequential.  The following instructions are additionally enabled: @code{mpy},
15376 @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.
15378 @item 5
15379 @itemx wlh4
15380 One 16x16 multiplier, blocking,
15381 sequential.  The following instructions are additionally enabled: @code{mpy},
15382 @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.
15384 @item 6
15385 @itemx wlh5
15386 One 32x4 multiplier, blocking,
15387 sequential.  The following instructions are additionally enabled: @code{mpy},
15388 @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.
15390 @item 7
15391 @itemx plus_dmpy
15392 ARC HS SIMD support.
15394 @item 8
15395 @itemx plus_macd
15396 ARC HS SIMD support.
15398 @item 9
15399 @itemx plus_qmacw
15400 ARC HS SIMD support.
15402 @end table
15404 This option is only available for ARCv2 cores@.
15406 @item -mfpu=@var{fpu}
15407 @opindex mfpu
15408 Enables support for specific floating-point hardware extensions for ARCv2
15409 cores.  Supported values for @var{fpu} are:
15411 @table @samp
15413 @item fpus
15414 Enables support for single-precision floating-point hardware
15415 extensions@.
15417 @item fpud
15418 Enables support for double-precision floating-point hardware
15419 extensions.  The single-precision floating-point extension is also
15420 enabled.  Not available for ARC EM@.
15422 @item fpuda
15423 Enables support for double-precision floating-point hardware
15424 extensions using double-precision assist instructions.  The single-precision
15425 floating-point extension is also enabled.  This option is
15426 only available for ARC EM@.
15428 @item fpuda_div
15429 Enables support for double-precision floating-point hardware
15430 extensions using double-precision assist instructions.
15431 The single-precision floating-point, square-root, and divide 
15432 extensions are also enabled.  This option is
15433 only available for ARC EM@.
15435 @item fpuda_fma
15436 Enables support for double-precision floating-point hardware
15437 extensions using double-precision assist instructions.
15438 The single-precision floating-point and fused multiply and add 
15439 hardware extensions are also enabled.  This option is
15440 only available for ARC EM@.
15442 @item fpuda_all
15443 Enables support for double-precision floating-point hardware
15444 extensions using double-precision assist instructions.
15445 All single-precision floating-point hardware extensions are also
15446 enabled.  This option is only available for ARC EM@.
15448 @item fpus_div
15449 Enables support for single-precision floating-point, square-root and divide 
15450 hardware extensions@.
15452 @item fpud_div
15453 Enables support for double-precision floating-point, square-root and divide 
15454 hardware extensions.  This option
15455 includes option @samp{fpus_div}. Not available for ARC EM@.
15457 @item fpus_fma
15458 Enables support for single-precision floating-point and 
15459 fused multiply and add hardware extensions@.
15461 @item fpud_fma
15462 Enables support for double-precision floating-point and 
15463 fused multiply and add hardware extensions.  This option
15464 includes option @samp{fpus_fma}.  Not available for ARC EM@.
15466 @item fpus_all
15467 Enables support for all single-precision floating-point hardware
15468 extensions@.
15470 @item fpud_all
15471 Enables support for all single- and double-precision floating-point
15472 hardware extensions.  Not available for ARC EM@.
15474 @end table
15476 @item -mirq-ctrl-saved=@var{register-range}, @var{blink}, @var{lp_count}
15477 @opindex mirq-ctrl-saved
15478 Specifies general-purposes registers that the processor automatically
15479 saves/restores on interrupt entry and exit.  @var{register-range} is
15480 specified as two registers separated by a dash.  The register range
15481 always starts with @code{r0}, the upper limit is @code{fp} register.
15482 @var{blink} and @var{lp_count} are optional.  This option is only
15483 valid for ARC EM and ARC HS cores.
15485 @item -mrgf-banked-regs=@var{number}
15486 @opindex mrgf-banked-regs
15487 Specifies the number of registers replicated in second register bank
15488 on entry to fast interrupt.  Fast interrupts are interrupts with the
15489 highest priority level P0.  These interrupts save only PC and STATUS32
15490 registers to avoid memory transactions during interrupt entry and exit
15491 sequences.  Use this option when you are using fast interrupts in an
15492 ARC V2 family processor.  Permitted values are 4, 8, 16, and 32.
15494 @item -mlpc-width=@var{width}
15495 @opindex mlpc-width
15496 Specify the width of the @code{lp_count} register.  Valid values for
15497 @var{width} are 8, 16, 20, 24, 28 and 32 bits.  The default width is
15498 fixed to 32 bits.  If the width is less than 32, the compiler does not
15499 attempt to transform loops in your program to use the zero-delay loop
15500 mechanism unless it is known that the @code{lp_count} register can
15501 hold the required loop-counter value.  Depending on the width
15502 specified, the compiler and run-time library might continue to use the
15503 loop mechanism for various needs.  This option defines macro
15504 @code{__ARC_LPC_WIDTH__} with the value of @var{width}.
15506 @item -mrf16
15507 @opindex mrf16
15508 This option instructs the compiler to generate code for a 16-entry
15509 register file.  This option defines the @code{__ARC_RF16__}
15510 preprocessor macro.
15512 @end table
15514 The following options are passed through to the assembler, and also
15515 define preprocessor macro symbols.
15517 @c Flags used by the assembler, but for which we define preprocessor
15518 @c macro symbols as well.
15519 @table @gcctabopt
15520 @item -mdsp-packa
15521 @opindex mdsp-packa
15522 Passed down to the assembler to enable the DSP Pack A extensions.
15523 Also sets the preprocessor symbol @code{__Xdsp_packa}.  This option is
15524 deprecated.
15526 @item -mdvbf
15527 @opindex mdvbf
15528 Passed down to the assembler to enable the dual Viterbi butterfly
15529 extension.  Also sets the preprocessor symbol @code{__Xdvbf}.  This
15530 option is deprecated.
15532 @c ARC700 4.10 extension instruction
15533 @item -mlock
15534 @opindex mlock
15535 Passed down to the assembler to enable the locked load/store
15536 conditional extension.  Also sets the preprocessor symbol
15537 @code{__Xlock}.
15539 @item -mmac-d16
15540 @opindex mmac-d16
15541 Passed down to the assembler.  Also sets the preprocessor symbol
15542 @code{__Xxmac_d16}.  This option is deprecated.
15544 @item -mmac-24
15545 @opindex mmac-24
15546 Passed down to the assembler.  Also sets the preprocessor symbol
15547 @code{__Xxmac_24}.  This option is deprecated.
15549 @c ARC700 4.10 extension instruction
15550 @item -mrtsc
15551 @opindex mrtsc
15552 Passed down to the assembler to enable the 64-bit time-stamp counter
15553 extension instruction.  Also sets the preprocessor symbol
15554 @code{__Xrtsc}.  This option is deprecated.
15556 @c ARC700 4.10 extension instruction
15557 @item -mswape
15558 @opindex mswape
15559 Passed down to the assembler to enable the swap byte ordering
15560 extension instruction.  Also sets the preprocessor symbol
15561 @code{__Xswape}.
15563 @item -mtelephony
15564 @opindex mtelephony
15565 Passed down to the assembler to enable dual- and single-operand
15566 instructions for telephony.  Also sets the preprocessor symbol
15567 @code{__Xtelephony}.  This option is deprecated.
15569 @item -mxy
15570 @opindex mxy
15571 Passed down to the assembler to enable the XY memory extension.  Also
15572 sets the preprocessor symbol @code{__Xxy}.
15574 @end table
15576 The following options control how the assembly code is annotated:
15578 @c Assembly annotation options
15579 @table @gcctabopt
15580 @item -misize
15581 @opindex misize
15582 Annotate assembler instructions with estimated addresses.
15584 @item -mannotate-align
15585 @opindex mannotate-align
15586 Explain what alignment considerations lead to the decision to make an
15587 instruction short or long.
15589 @end table
15591 The following options are passed through to the linker:
15593 @c options passed through to the linker
15594 @table @gcctabopt
15595 @item -marclinux
15596 @opindex marclinux
15597 Passed through to the linker, to specify use of the @code{arclinux} emulation.
15598 This option is enabled by default in tool chains built for
15599 @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
15600 when profiling is not requested.
15602 @item -marclinux_prof
15603 @opindex marclinux_prof
15604 Passed through to the linker, to specify use of the
15605 @code{arclinux_prof} emulation.  This option is enabled by default in
15606 tool chains built for @w{@code{arc-linux-uclibc}} and
15607 @w{@code{arceb-linux-uclibc}} targets when profiling is requested.
15609 @end table
15611 The following options control the semantics of generated code:
15613 @c semantically relevant code generation options
15614 @table @gcctabopt
15615 @item -mlong-calls
15616 @opindex mlong-calls
15617 Generate calls as register indirect calls, thus providing access
15618 to the full 32-bit address range.
15620 @item -mmedium-calls
15621 @opindex mmedium-calls
15622 Don't use less than 25-bit addressing range for calls, which is the
15623 offset available for an unconditional branch-and-link
15624 instruction.  Conditional execution of function calls is suppressed, to
15625 allow use of the 25-bit range, rather than the 21-bit range with
15626 conditional branch-and-link.  This is the default for tool chains built
15627 for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets.
15629 @item -G @var{num}
15630 @opindex G
15631 Put definitions of externally-visible data in a small data section if
15632 that data is no bigger than @var{num} bytes.  The default value of
15633 @var{num} is 4 for any ARC configuration, or 8 when we have double
15634 load/store operations.
15636 @item -mno-sdata
15637 @opindex mno-sdata
15638 Do not generate sdata references.  This is the default for tool chains
15639 built for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}}
15640 targets.
15642 @item -mvolatile-cache
15643 @opindex mvolatile-cache
15644 Use ordinarily cached memory accesses for volatile references.  This is the
15645 default.
15647 @item -mno-volatile-cache
15648 @opindex mno-volatile-cache
15649 Enable cache bypass for volatile references.
15651 @end table
15653 The following options fine tune code generation:
15654 @c code generation tuning options
15655 @table @gcctabopt
15656 @item -malign-call
15657 @opindex malign-call
15658 Do alignment optimizations for call instructions.
15660 @item -mauto-modify-reg
15661 @opindex mauto-modify-reg
15662 Enable the use of pre/post modify with register displacement.
15664 @item -mbbit-peephole
15665 @opindex mbbit-peephole
15666 Enable bbit peephole2.
15668 @item -mno-brcc
15669 @opindex mno-brcc
15670 This option disables a target-specific pass in @file{arc_reorg} to
15671 generate compare-and-branch (@code{br@var{cc}}) instructions.  
15672 It has no effect on
15673 generation of these instructions driven by the combiner pass.
15675 @item -mcase-vector-pcrel
15676 @opindex mcase-vector-pcrel
15677 Use PC-relative switch case tables to enable case table shortening.
15678 This is the default for @option{-Os}.
15680 @item -mcompact-casesi
15681 @opindex mcompact-casesi
15682 Enable compact @code{casesi} pattern.  This is the default for @option{-Os},
15683 and only available for ARCv1 cores.
15685 @item -mno-cond-exec
15686 @opindex mno-cond-exec
15687 Disable the ARCompact-specific pass to generate conditional 
15688 execution instructions.
15690 Due to delay slot scheduling and interactions between operand numbers,
15691 literal sizes, instruction lengths, and the support for conditional execution,
15692 the target-independent pass to generate conditional execution is often lacking,
15693 so the ARC port has kept a special pass around that tries to find more
15694 conditional execution generation opportunities after register allocation,
15695 branch shortening, and delay slot scheduling have been done.  This pass
15696 generally, but not always, improves performance and code size, at the cost of
15697 extra compilation time, which is why there is an option to switch it off.
15698 If you have a problem with call instructions exceeding their allowable
15699 offset range because they are conditionalized, you should consider using
15700 @option{-mmedium-calls} instead.
15702 @item -mearly-cbranchsi
15703 @opindex mearly-cbranchsi
15704 Enable pre-reload use of the @code{cbranchsi} pattern.
15706 @item -mexpand-adddi
15707 @opindex mexpand-adddi
15708 Expand @code{adddi3} and @code{subdi3} at RTL generation time into
15709 @code{add.f}, @code{adc} etc.  This option is deprecated.
15711 @item -mindexed-loads
15712 @opindex mindexed-loads
15713 Enable the use of indexed loads.  This can be problematic because some
15714 optimizers then assume that indexed stores exist, which is not
15715 the case.
15717 @item -mlra
15718 @opindex mlra
15719 Enable Local Register Allocation.  This is still experimental for ARC,
15720 so by default the compiler uses standard reload
15721 (i.e. @option{-mno-lra}).
15723 @item -mlra-priority-none
15724 @opindex mlra-priority-none
15725 Don't indicate any priority for target registers.
15727 @item -mlra-priority-compact
15728 @opindex mlra-priority-compact
15729 Indicate target register priority for r0..r3 / r12..r15.
15731 @item -mlra-priority-noncompact
15732 @opindex mlra-priority-noncompact
15733 Reduce target register priority for r0..r3 / r12..r15.
15735 @item -mno-millicode
15736 @opindex mno-millicode
15737 When optimizing for size (using @option{-Os}), prologues and epilogues
15738 that have to save or restore a large number of registers are often
15739 shortened by using call to a special function in libgcc; this is
15740 referred to as a @emph{millicode} call.  As these calls can pose
15741 performance issues, and/or cause linking issues when linking in a
15742 nonstandard way, this option is provided to turn off millicode call
15743 generation.
15745 @item -mmixed-code
15746 @opindex mmixed-code
15747 Tweak register allocation to help 16-bit instruction generation.
15748 This generally has the effect of decreasing the average instruction size
15749 while increasing the instruction count.
15751 @item -mq-class
15752 @opindex mq-class
15753 Enable @samp{q} instruction alternatives.
15754 This is the default for @option{-Os}.
15756 @item -mRcq
15757 @opindex mRcq
15758 Enable @samp{Rcq} constraint handling.  
15759 Most short code generation depends on this.
15760 This is the default.
15762 @item -mRcw
15763 @opindex mRcw
15764 Enable @samp{Rcw} constraint handling.  
15765 Most ccfsm condexec mostly depends on this.
15766 This is the default.
15768 @item -msize-level=@var{level}
15769 @opindex msize-level
15770 Fine-tune size optimization with regards to instruction lengths and alignment.
15771 The recognized values for @var{level} are:
15772 @table @samp
15773 @item 0
15774 No size optimization.  This level is deprecated and treated like @samp{1}.
15776 @item 1
15777 Short instructions are used opportunistically.
15779 @item 2
15780 In addition, alignment of loops and of code after barriers are dropped.
15782 @item 3
15783 In addition, optional data alignment is dropped, and the option @option{Os} is enabled.
15785 @end table
15787 This defaults to @samp{3} when @option{-Os} is in effect.  Otherwise,
15788 the behavior when this is not set is equivalent to level @samp{1}.
15790 @item -mtune=@var{cpu}
15791 @opindex mtune
15792 Set instruction scheduling parameters for @var{cpu}, overriding any implied
15793 by @option{-mcpu=}.
15795 Supported values for @var{cpu} are
15797 @table @samp
15798 @item ARC600
15799 Tune for ARC600 CPU.
15801 @item ARC601
15802 Tune for ARC601 CPU.
15804 @item ARC700
15805 Tune for ARC700 CPU with standard multiplier block.
15807 @item ARC700-xmac
15808 Tune for ARC700 CPU with XMAC block.
15810 @item ARC725D
15811 Tune for ARC725D CPU.
15813 @item ARC750D
15814 Tune for ARC750D CPU.
15816 @end table
15818 @item -mmultcost=@var{num}
15819 @opindex mmultcost
15820 Cost to assume for a multiply instruction, with @samp{4} being equal to a
15821 normal instruction.
15823 @item -munalign-prob-threshold=@var{probability}
15824 @opindex munalign-prob-threshold
15825 Set probability threshold for unaligning branches.
15826 When tuning for @samp{ARC700} and optimizing for speed, branches without
15827 filled delay slot are preferably emitted unaligned and long, unless
15828 profiling indicates that the probability for the branch to be taken
15829 is below @var{probability}.  @xref{Cross-profiling}.
15830 The default is (REG_BR_PROB_BASE/2), i.e.@: 5000.
15832 @end table
15834 The following options are maintained for backward compatibility, but
15835 are now deprecated and will be removed in a future release:
15837 @c Deprecated options
15838 @table @gcctabopt
15840 @item -margonaut
15841 @opindex margonaut
15842 Obsolete FPX.
15844 @item -mbig-endian
15845 @opindex mbig-endian
15846 @itemx -EB
15847 @opindex EB
15848 Compile code for big-endian targets.  Use of these options is now
15849 deprecated.  Big-endian code is supported by configuring GCC to build
15850 @w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets,
15851 for which big endian is the default.
15853 @item -mlittle-endian
15854 @opindex mlittle-endian
15855 @itemx -EL
15856 @opindex EL
15857 Compile code for little-endian targets.  Use of these options is now
15858 deprecated.  Little-endian code is supported by configuring GCC to build 
15859 @w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets,
15860 for which little endian is the default.
15862 @item -mbarrel_shifter
15863 @opindex mbarrel_shifter
15864 Replaced by @option{-mbarrel-shifter}.
15866 @item -mdpfp_compact
15867 @opindex mdpfp_compact
15868 Replaced by @option{-mdpfp-compact}.
15870 @item -mdpfp_fast
15871 @opindex mdpfp_fast
15872 Replaced by @option{-mdpfp-fast}.
15874 @item -mdsp_packa
15875 @opindex mdsp_packa
15876 Replaced by @option{-mdsp-packa}.
15878 @item -mEA
15879 @opindex mEA
15880 Replaced by @option{-mea}.
15882 @item -mmac_24
15883 @opindex mmac_24
15884 Replaced by @option{-mmac-24}.
15886 @item -mmac_d16
15887 @opindex mmac_d16
15888 Replaced by @option{-mmac-d16}.
15890 @item -mspfp_compact
15891 @opindex mspfp_compact
15892 Replaced by @option{-mspfp-compact}.
15894 @item -mspfp_fast
15895 @opindex mspfp_fast
15896 Replaced by @option{-mspfp-fast}.
15898 @item -mtune=@var{cpu}
15899 @opindex mtune
15900 Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
15901 @samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
15902 @samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively.
15904 @item -multcost=@var{num}
15905 @opindex multcost
15906 Replaced by @option{-mmultcost}.
15908 @end table
15910 @node ARM Options
15911 @subsection ARM Options
15912 @cindex ARM options
15914 These @samp{-m} options are defined for the ARM port:
15916 @table @gcctabopt
15917 @item -mabi=@var{name}
15918 @opindex mabi
15919 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
15920 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
15922 @item -mapcs-frame
15923 @opindex mapcs-frame
15924 Generate a stack frame that is compliant with the ARM Procedure Call
15925 Standard for all functions, even if this is not strictly necessary for
15926 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
15927 with this option causes the stack frames not to be generated for
15928 leaf functions.  The default is @option{-mno-apcs-frame}.
15929 This option is deprecated.
15931 @item -mapcs
15932 @opindex mapcs
15933 This is a synonym for @option{-mapcs-frame} and is deprecated.
15935 @ignore
15936 @c not currently implemented
15937 @item -mapcs-stack-check
15938 @opindex mapcs-stack-check
15939 Generate code to check the amount of stack space available upon entry to
15940 every function (that actually uses some stack space).  If there is
15941 insufficient space available then either the function
15942 @code{__rt_stkovf_split_small} or @code{__rt_stkovf_split_big} is
15943 called, depending upon the amount of stack space required.  The runtime
15944 system is required to provide these functions.  The default is
15945 @option{-mno-apcs-stack-check}, since this produces smaller code.
15947 @c not currently implemented
15948 @item -mapcs-reentrant
15949 @opindex mapcs-reentrant
15950 Generate reentrant, position-independent code.  The default is
15951 @option{-mno-apcs-reentrant}.
15952 @end ignore
15954 @item -mthumb-interwork
15955 @opindex mthumb-interwork
15956 Generate code that supports calling between the ARM and Thumb
15957 instruction sets.  Without this option, on pre-v5 architectures, the
15958 two instruction sets cannot be reliably used inside one program.  The
15959 default is @option{-mno-thumb-interwork}, since slightly larger code
15960 is generated when @option{-mthumb-interwork} is specified.  In AAPCS
15961 configurations this option is meaningless.
15963 @item -mno-sched-prolog
15964 @opindex mno-sched-prolog
15965 Prevent the reordering of instructions in the function prologue, or the
15966 merging of those instruction with the instructions in the function's
15967 body.  This means that all functions start with a recognizable set
15968 of instructions (or in fact one of a choice from a small set of
15969 different function prologues), and this information can be used to
15970 locate the start of functions inside an executable piece of code.  The
15971 default is @option{-msched-prolog}.
15973 @item -mfloat-abi=@var{name}
15974 @opindex mfloat-abi
15975 Specifies which floating-point ABI to use.  Permissible values
15976 are: @samp{soft}, @samp{softfp} and @samp{hard}.
15978 Specifying @samp{soft} causes GCC to generate output containing
15979 library calls for floating-point operations.
15980 @samp{softfp} allows the generation of code using hardware floating-point
15981 instructions, but still uses the soft-float calling conventions.
15982 @samp{hard} allows generation of floating-point instructions
15983 and uses FPU-specific calling conventions.
15985 The default depends on the specific target configuration.  Note that
15986 the hard-float and soft-float ABIs are not link-compatible; you must
15987 compile your entire program with the same ABI, and link with a
15988 compatible set of libraries.
15990 @item -mlittle-endian
15991 @opindex mlittle-endian
15992 Generate code for a processor running in little-endian mode.  This is
15993 the default for all standard configurations.
15995 @item -mbig-endian
15996 @opindex mbig-endian
15997 Generate code for a processor running in big-endian mode; the default is
15998 to compile code for a little-endian processor.
16000 @item -mbe8
16001 @itemx -mbe32
16002 @opindex mbe8
16003 When linking a big-endian image select between BE8 and BE32 formats.
16004 The option has no effect for little-endian images and is ignored.  The
16005 default is dependent on the selected target architecture.  For ARMv6
16006 and later architectures the default is BE8, for older architectures
16007 the default is BE32.  BE32 format has been deprecated by ARM.
16009 @item -march=@var{name}@r{[}+extension@dots{}@r{]}
16010 @opindex march
16011 This specifies the name of the target ARM architecture.  GCC uses this
16012 name to determine what kind of instructions it can emit when generating
16013 assembly code.  This option can be used in conjunction with or instead
16014 of the @option{-mcpu=} option.
16016 Permissible names are:
16017 @samp{armv4t},
16018 @samp{armv5t}, @samp{armv5te},
16019 @samp{armv6}, @samp{armv6j}, @samp{armv6k}, @samp{armv6kz}, @samp{armv6t2},
16020 @samp{armv6z}, @samp{armv6zk},
16021 @samp{armv7}, @samp{armv7-a}, @samp{armv7ve}, 
16022 @samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a},
16023 @samp{armv8.4-a},
16024 @samp{armv7-r},
16025 @samp{armv8-r},
16026 @samp{armv6-m}, @samp{armv6s-m},
16027 @samp{armv7-m}, @samp{armv7e-m},
16028 @samp{armv8-m.base}, @samp{armv8-m.main},
16029 @samp{iwmmxt} and @samp{iwmmxt2}.
16031 Additionally, the following architectures, which lack support for the
16032 Thumb execution state, are recognized but support is deprecated: @samp{armv4}.
16034 Many of the architectures support extensions.  These can be added by
16035 appending @samp{+@var{extension}} to the architecture name.  Extension
16036 options are processed in order and capabilities accumulate.  An extension
16037 will also enable any necessary base extensions
16038 upon which it depends.  For example, the @samp{+crypto} extension
16039 will always enable the @samp{+simd} extension.  The exception to the
16040 additive construction is for extensions that are prefixed with
16041 @samp{+no@dots{}}: these extensions disable the specified option and
16042 any other extensions that may depend on the presence of that
16043 extension.
16045 For example, @samp{-march=armv7-a+simd+nofp+vfpv4} is equivalent to
16046 writing @samp{-march=armv7-a+vfpv4} since the @samp{+simd} option is
16047 entirely disabled by the @samp{+nofp} option that follows it.
16049 Most extension names are generically named, but have an effect that is
16050 dependent upon the architecture to which it is applied.  For example,
16051 the @samp{+simd} option can be applied to both @samp{armv7-a} and
16052 @samp{armv8-a} architectures, but will enable the original ARMv7-A
16053 Advanced SIMD (Neon) extensions for @samp{armv7-a} and the ARMv8-A
16054 variant for @samp{armv8-a}.
16056 The table below lists the supported extensions for each architecture.
16057 Architectures not mentioned do not support any extensions.
16059 @table @samp
16060 @item armv5te
16061 @itemx armv6
16062 @itemx armv6j
16063 @itemx armv6k
16064 @itemx armv6kz
16065 @itemx armv6t2
16066 @itemx armv6z
16067 @itemx armv6zk
16068 @table @samp
16069 @item +fp
16070 The VFPv2 floating-point instructions.  The extension @samp{+vfpv2} can be
16071 used as an alias for this extension.
16073 @item +nofp
16074 Disable the floating-point instructions.
16075 @end table
16077 @item armv7
16078 The common subset of the ARMv7-A, ARMv7-R and ARMv7-M architectures.
16079 @table @samp
16080 @item +fp
16081 The VFPv3 floating-point instructions, with 16 double-precision
16082 registers.  The extension @samp{+vfpv3-d16} can be used as an alias
16083 for this extension.  Note that floating-point is not supported by the
16084 base ARMv7-M architecture, but is compatible with both the ARMv7-A and
16085 ARMv7-R architectures.
16087 @item +nofp
16088 Disable the floating-point instructions.
16089 @end table
16091 @item armv7-a
16092 @table @samp
16093 @item +fp
16094 The VFPv3 floating-point instructions, with 16 double-precision
16095 registers.  The extension @samp{+vfpv3-d16} can be used as an alias
16096 for this extension.
16098 @item +simd
16099 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions.
16100 The extensions @samp{+neon} and @samp{+neon-vfpv3} can be used as aliases
16101 for this extension.
16103 @item +vfpv3
16104 The VFPv3 floating-point instructions, with 32 double-precision
16105 registers.
16107 @item +vfpv3-d16-fp16
16108 The VFPv3 floating-point instructions, with 16 double-precision
16109 registers and the half-precision floating-point conversion operations.
16111 @item +vfpv3-fp16
16112 The VFPv3 floating-point instructions, with 32 double-precision
16113 registers and the half-precision floating-point conversion operations.
16115 @item +vfpv4-d16
16116 The VFPv4 floating-point instructions, with 16 double-precision
16117 registers.
16119 @item +vfpv4
16120 The VFPv4 floating-point instructions, with 32 double-precision
16121 registers.
16123 @item +neon-fp16
16124 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions, with
16125 the half-precision floating-point conversion operations.
16127 @item +neon-vfpv4
16128 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point instructions.
16130 @item +nosimd
16131 Disable the Advanced SIMD instructions (does not disable floating point).
16133 @item +nofp
16134 Disable the floating-point and Advanced SIMD instructions.
16135 @end table
16137 @item armv7ve
16138 The extended version of the ARMv7-A architecture with support for
16139 virtualization.
16140 @table @samp
16141 @item +fp
16142 The VFPv4 floating-point instructions, with 16 double-precision registers.
16143 The extension @samp{+vfpv4-d16} can be used as an alias for this extension.
16145 @item +simd
16146 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point instructions.  The
16147 extension @samp{+neon-vfpv4} can be used as an alias for this extension.
16149 @item +vfpv3-d16
16150 The VFPv3 floating-point instructions, with 16 double-precision
16151 registers.
16153 @item +vfpv3
16154 The VFPv3 floating-point instructions, with 32 double-precision
16155 registers.
16157 @item +vfpv3-d16-fp16
16158 The VFPv3 floating-point instructions, with 16 double-precision
16159 registers and the half-precision floating-point conversion operations.
16161 @item +vfpv3-fp16
16162 The VFPv3 floating-point instructions, with 32 double-precision
16163 registers and the half-precision floating-point conversion operations.
16165 @item +vfpv4-d16
16166 The VFPv4 floating-point instructions, with 16 double-precision
16167 registers.
16169 @item +vfpv4
16170 The VFPv4 floating-point instructions, with 32 double-precision
16171 registers.
16173 @item +neon
16174 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions.
16175 The extension @samp{+neon-vfpv3} can be used as an alias for this extension.
16177 @item +neon-fp16
16178 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions, with
16179 the half-precision floating-point conversion operations.
16181 @item +nosimd
16182 Disable the Advanced SIMD instructions (does not disable floating point).
16184 @item +nofp
16185 Disable the floating-point and Advanced SIMD instructions.
16186 @end table
16188 @item armv8-a
16189 @table @samp
16190 @item +crc
16191 The Cyclic Redundancy Check (CRC) instructions.
16192 @item +simd
16193 The ARMv8-A Advanced SIMD and floating-point instructions.
16194 @item +crypto
16195 The cryptographic instructions.
16196 @item +nocrypto
16197 Disable the cryptographic instructions.
16198 @item +nofp
16199 Disable the floating-point, Advanced SIMD and cryptographic instructions.
16200 @end table
16202 @item armv8.1-a
16203 @table @samp
16204 @item +simd
16205 The ARMv8.1-A Advanced SIMD and floating-point instructions.
16207 @item +crypto
16208 The cryptographic instructions.  This also enables the Advanced SIMD and
16209 floating-point instructions.
16211 @item +nocrypto
16212 Disable the cryptographic instructions.
16214 @item +nofp
16215 Disable the floating-point, Advanced SIMD and cryptographic instructions.
16216 @end table
16218 @item armv8.2-a
16219 @itemx armv8.3-a
16220 @table @samp
16221 @item +fp16
16222 The half-precision floating-point data processing instructions.
16223 This also enables the Advanced SIMD and floating-point instructions.
16225 @item +fp16fml
16226 The half-precision floating-point fmla extension.  This also enables
16227 the half-precision floating-point extension and Advanced SIMD and
16228 floating-point instructions.
16230 @item +simd
16231 The ARMv8.1-A Advanced SIMD and floating-point instructions.
16233 @item +crypto
16234 The cryptographic instructions.  This also enables the Advanced SIMD and
16235 floating-point instructions.
16237 @item +dotprod
16238 Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
16240 @item +nocrypto
16241 Disable the cryptographic extension.
16243 @item +nofp
16244 Disable the floating-point, Advanced SIMD and cryptographic instructions.
16245 @end table
16247 @item armv8.4-a
16248 @table @samp
16249 @item +fp16
16250 The half-precision floating-point data processing instructions.
16251 This also enables the Advanced SIMD and floating-point instructions as well
16252 as the Dot Product extension and the half-precision floating-point fmla
16253 extension.
16255 @item +simd
16256 The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
16257 Dot Product extension.
16259 @item +crypto
16260 The cryptographic instructions.  This also enables the Advanced SIMD and
16261 floating-point instructions as well as the Dot Product extension.
16263 @item +nocrypto
16264 Disable the cryptographic extension.
16266 @item +nofp
16267 Disable the floating-point, Advanced SIMD and cryptographic instructions.
16268 @end table
16270 @item armv7-r
16271 @table @samp
16272 @item +fp.sp
16273 The single-precision VFPv3 floating-point instructions.  The extension
16274 @samp{+vfpv3xd} can be used as an alias for this extension.
16276 @item +fp
16277 The VFPv3 floating-point instructions with 16 double-precision registers.
16278 The extension +vfpv3-d16 can be used as an alias for this extension.
16280 @item +nofp
16281 Disable the floating-point extension.
16283 @item +idiv
16284 The ARM-state integer division instructions.
16286 @item +noidiv
16287 Disable the ARM-state integer division extension.
16288 @end table
16290 @item armv7e-m
16291 @table @samp
16292 @item +fp
16293 The single-precision VFPv4 floating-point instructions.
16295 @item +fpv5
16296 The single-precision FPv5 floating-point instructions.
16298 @item +fp.dp
16299 The single- and double-precision FPv5 floating-point instructions.
16301 @item +nofp
16302 Disable the floating-point extensions.
16303 @end table
16305 @item  armv8-m.main
16306 @table @samp
16307 @item +dsp
16308 The DSP instructions.
16310 @item +nodsp
16311 Disable the DSP extension.
16313 @item +fp
16314 The single-precision floating-point instructions.
16316 @item +fp.dp
16317 The single- and double-precision floating-point instructions.
16319 @item +nofp
16320 Disable the floating-point extension.
16321 @end table
16323 @item armv8-r
16324 @table @samp
16325 @item +crc
16326 The Cyclic Redundancy Check (CRC) instructions.
16327 @item +fp.sp
16328 The single-precision FPv5 floating-point instructions.
16329 @item +simd
16330 The ARMv8-A Advanced SIMD and floating-point instructions.
16331 @item +crypto
16332 The cryptographic instructions.
16333 @item +nocrypto
16334 Disable the cryptographic instructions.
16335 @item +nofp
16336 Disable the floating-point, Advanced SIMD and cryptographic instructions.
16337 @end table
16339 @end table
16341 @option{-march=native} causes the compiler to auto-detect the architecture
16342 of the build computer.  At present, this feature is only supported on
16343 GNU/Linux, and not all architectures are recognized.  If the auto-detect
16344 is unsuccessful the option has no effect.
16346 @item -mtune=@var{name}
16347 @opindex mtune
16348 This option specifies the name of the target ARM processor for
16349 which GCC should tune the performance of the code.
16350 For some ARM implementations better performance can be obtained by using
16351 this option.
16352 Permissible names are: @samp{arm2}, @samp{arm250},
16353 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
16354 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
16355 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
16356 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
16357 @samp{arm720},
16358 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
16359 @samp{arm710t}, @samp{arm720t}, @samp{arm740t},
16360 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
16361 @samp{strongarm1110},
16362 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
16363 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
16364 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
16365 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
16366 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
16367 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
16368 @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
16369 @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8},
16370 @samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17},
16371 @samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55},
16372 @samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75},
16373 @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7},
16374 @samp{cortex-r8}, @samp{cortex-r52},
16375 @samp{cortex-m33},
16376 @samp{cortex-m23},
16377 @samp{cortex-m7},
16378 @samp{cortex-m4},
16379 @samp{cortex-m3},
16380 @samp{cortex-m1},
16381 @samp{cortex-m0},
16382 @samp{cortex-m0plus},
16383 @samp{cortex-m1.small-multiply},
16384 @samp{cortex-m0.small-multiply},
16385 @samp{cortex-m0plus.small-multiply},
16386 @samp{exynos-m1},
16387 @samp{marvell-pj4},
16388 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312},
16389 @samp{fa526}, @samp{fa626},
16390 @samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te},
16391 @samp{xgene1}.
16393 Additionally, this option can specify that GCC should tune the performance
16394 of the code for a big.LITTLE system.  Permissible names are:
16395 @samp{cortex-a15.cortex-a7}, @samp{cortex-a17.cortex-a7},
16396 @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
16397 @samp{cortex-a72.cortex-a35}, @samp{cortex-a73.cortex-a53},
16398 @samp{cortex-a75.cortex-a55}.
16400 @option{-mtune=generic-@var{arch}} specifies that GCC should tune the
16401 performance for a blend of processors within architecture @var{arch}.
16402 The aim is to generate code that run well on the current most popular
16403 processors, balancing between optimizations that benefit some CPUs in the
16404 range, and avoiding performance pitfalls of other CPUs.  The effects of
16405 this option may change in future GCC versions as CPU models come and go.
16407 @option{-mtune} permits the same extension options as @option{-mcpu}, but
16408 the extension options do not affect the tuning of the generated code.
16410 @option{-mtune=native} causes the compiler to auto-detect the CPU
16411 of the build computer.  At present, this feature is only supported on
16412 GNU/Linux, and not all architectures are recognized.  If the auto-detect is
16413 unsuccessful the option has no effect.
16415 @item -mcpu=@var{name}@r{[}+extension@dots{}@r{]}
16416 @opindex mcpu
16417 This specifies the name of the target ARM processor.  GCC uses this name
16418 to derive the name of the target ARM architecture (as if specified
16419 by @option{-march}) and the ARM processor type for which to tune for
16420 performance (as if specified by @option{-mtune}).  Where this option
16421 is used in conjunction with @option{-march} or @option{-mtune},
16422 those options take precedence over the appropriate part of this option.
16424 Many of the supported CPUs implement optional architectural
16425 extensions.  Where this is so the architectural extensions are
16426 normally enabled by default.  If implementations that lack the
16427 extension exist, then the extension syntax can be used to disable
16428 those extensions that have been omitted.  For floating-point and
16429 Advanced SIMD (Neon) instructions, the settings of the options
16430 @option{-mfloat-abi} and @option{-mfpu} must also be considered:
16431 floating-point and Advanced SIMD instructions will only be used if
16432 @option{-mfloat-abi} is not set to @samp{soft}; and any setting of
16433 @option{-mfpu} other than @samp{auto} will override the available
16434 floating-point and SIMD extension instructions.
16436 For example, @samp{cortex-a9} can be found in three major
16437 configurations: integer only, with just a floating-point unit or with
16438 floating-point and Advanced SIMD.  The default is to enable all the
16439 instructions, but the extensions @samp{+nosimd} and @samp{+nofp} can
16440 be used to disable just the SIMD or both the SIMD and floating-point
16441 instructions respectively.
16443 Permissible names for this option are the same as those for
16444 @option{-mtune}.
16446 The following extension options are common to the listed CPUs:
16448 @table @samp
16449 @item +nodsp
16450 Disable the DSP instructions on @samp{cortex-m33}.
16452 @item  +nofp
16453 Disables the floating-point instructions on @samp{arm9e},
16454 @samp{arm946e-s}, @samp{arm966e-s}, @samp{arm968e-s}, @samp{arm10e},
16455 @samp{arm1020e}, @samp{arm1022e}, @samp{arm926ej-s},
16456 @samp{arm1026ej-s}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8},
16457 @samp{cortex-m4}, @samp{cortex-m7} and @samp{cortex-m33}.
16458 Disables the floating-point and SIMD instructions on
16459 @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7},
16460 @samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a12},
16461 @samp{cortex-a15}, @samp{cortex-a17}, @samp{cortex-a15.cortex-a7},
16462 @samp{cortex-a17.cortex-a7}, @samp{cortex-a32}, @samp{cortex-a35},
16463 @samp{cortex-a53} and @samp{cortex-a55}.
16465 @item +nofp.dp
16466 Disables the double-precision component of the floating-point instructions
16467 on @samp{cortex-r5}, @samp{cortex-r52} and @samp{cortex-m7}.
16469 @item +nosimd
16470 Disables the SIMD (but not floating-point) instructions on
16471 @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}
16472 and @samp{cortex-a9}.
16474 @item +crypto
16475 Enables the cryptographic instructions on @samp{cortex-a32},
16476 @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55}, @samp{cortex-a57},
16477 @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75}, @samp{exynos-m1},
16478 @samp{xgene1}, @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
16479 @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53} and
16480 @samp{cortex-a75.cortex-a55}.
16481 @end table
16483 Additionally the @samp{generic-armv7-a} pseudo target defaults to
16484 VFPv3 with 16 double-precision registers.  It supports the following
16485 extension options: @samp{vfpv3-d16}, @samp{vfpv3},
16486 @samp{vfpv3-d16-fp16}, @samp{vfpv3-fp16}, @samp{vfpv4-d16},
16487 @samp{vfpv4}, @samp{neon}, @samp{neon-vfpv3}, @samp{neon-fp16},
16488 @samp{neon-vfpv4}.  The meanings are the same as for the extensions to
16489 @option{-march=armv7-a}.
16491 @option{-mcpu=generic-@var{arch}} is also permissible, and is
16492 equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
16493 See @option{-mtune} for more information.
16495 @option{-mcpu=native} causes the compiler to auto-detect the CPU
16496 of the build computer.  At present, this feature is only supported on
16497 GNU/Linux, and not all architectures are recognized.  If the auto-detect
16498 is unsuccessful the option has no effect.
16500 @item -mfpu=@var{name}
16501 @opindex mfpu
16502 This specifies what floating-point hardware (or hardware emulation) is
16503 available on the target.  Permissible names are: @samp{auto}, @samp{vfpv2},
16504 @samp{vfpv3},
16505 @samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
16506 @samp{vfpv3xd-fp16}, @samp{neon-vfpv3}, @samp{neon-fp16}, @samp{vfpv4},
16507 @samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
16508 @samp{fpv5-d16}, @samp{fpv5-sp-d16},
16509 @samp{fp-armv8}, @samp{neon-fp-armv8} and @samp{crypto-neon-fp-armv8}.
16510 Note that @samp{neon} is an alias for @samp{neon-vfpv3} and @samp{vfp}
16511 is an alias for @samp{vfpv2}.
16513 The setting @samp{auto} is the default and is special.  It causes the
16514 compiler to select the floating-point and Advanced SIMD instructions
16515 based on the settings of @option{-mcpu} and @option{-march}.
16517 If the selected floating-point hardware includes the NEON extension
16518 (e.g. @option{-mfpu=neon}), note that floating-point
16519 operations are not generated by GCC's auto-vectorization pass unless
16520 @option{-funsafe-math-optimizations} is also specified.  This is
16521 because NEON hardware does not fully implement the IEEE 754 standard for
16522 floating-point arithmetic (in particular denormal values are treated as
16523 zero), so the use of NEON instructions may lead to a loss of precision.
16525 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}).
16527 @item -mfp16-format=@var{name}
16528 @opindex mfp16-format
16529 Specify the format of the @code{__fp16} half-precision floating-point type.
16530 Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
16531 the default is @samp{none}, in which case the @code{__fp16} type is not
16532 defined.  @xref{Half-Precision}, for more information.
16534 @item -mstructure-size-boundary=@var{n}
16535 @opindex mstructure-size-boundary
16536 The sizes of all structures and unions are rounded up to a multiple
16537 of the number of bits set by this option.  Permissible values are 8, 32
16538 and 64.  The default value varies for different toolchains.  For the COFF
16539 targeted toolchain the default value is 8.  A value of 64 is only allowed
16540 if the underlying ABI supports it.
16542 Specifying a larger number can produce faster, more efficient code, but
16543 can also increase the size of the program.  Different values are potentially
16544 incompatible.  Code compiled with one value cannot necessarily expect to
16545 work with code or libraries compiled with another value, if they exchange
16546 information using structures or unions.
16548 This option is deprecated.
16550 @item -mabort-on-noreturn
16551 @opindex mabort-on-noreturn
16552 Generate a call to the function @code{abort} at the end of a
16553 @code{noreturn} function.  It is executed if the function tries to
16554 return.
16556 @item -mlong-calls
16557 @itemx -mno-long-calls
16558 @opindex mlong-calls
16559 @opindex mno-long-calls
16560 Tells the compiler to perform function calls by first loading the
16561 address of the function into a register and then performing a subroutine
16562 call on this register.  This switch is needed if the target function
16563 lies outside of the 64-megabyte addressing range of the offset-based
16564 version of subroutine call instruction.
16566 Even if this switch is enabled, not all function calls are turned
16567 into long calls.  The heuristic is that static functions, functions
16568 that have the @code{short_call} attribute, functions that are inside
16569 the scope of a @code{#pragma no_long_calls} directive, and functions whose
16570 definitions have already been compiled within the current compilation
16571 unit are not turned into long calls.  The exceptions to this rule are
16572 that weak function definitions, functions with the @code{long_call}
16573 attribute or the @code{section} attribute, and functions that are within
16574 the scope of a @code{#pragma long_calls} directive are always
16575 turned into long calls.
16577 This feature is not enabled by default.  Specifying
16578 @option{-mno-long-calls} restores the default behavior, as does
16579 placing the function calls within the scope of a @code{#pragma
16580 long_calls_off} directive.  Note these switches have no effect on how
16581 the compiler generates code to handle function calls via function
16582 pointers.
16584 @item -msingle-pic-base
16585 @opindex msingle-pic-base
16586 Treat the register used for PIC addressing as read-only, rather than
16587 loading it in the prologue for each function.  The runtime system is
16588 responsible for initializing this register with an appropriate value
16589 before execution begins.
16591 @item -mpic-register=@var{reg}
16592 @opindex mpic-register
16593 Specify the register to be used for PIC addressing.
16594 For standard PIC base case, the default is any suitable register
16595 determined by compiler.  For single PIC base case, the default is
16596 @samp{R9} if target is EABI based or stack-checking is enabled,
16597 otherwise the default is @samp{R10}.
16599 @item -mpic-data-is-text-relative
16600 @opindex mpic-data-is-text-relative
16601 Assume that the displacement between the text and data segments is fixed
16602 at static link time.  This permits using PC-relative addressing
16603 operations to access data known to be in the data segment.  For
16604 non-VxWorks RTP targets, this option is enabled by default.  When
16605 disabled on such targets, it will enable @option{-msingle-pic-base} by
16606 default.
16608 @item -mpoke-function-name
16609 @opindex mpoke-function-name
16610 Write the name of each function into the text section, directly
16611 preceding the function prologue.  The generated code is similar to this:
16613 @smallexample
16614      t0
16615          .ascii "arm_poke_function_name", 0
16616          .align
16617      t1
16618          .word 0xff000000 + (t1 - t0)
16619      arm_poke_function_name
16620          mov     ip, sp
16621          stmfd   sp!, @{fp, ip, lr, pc@}
16622          sub     fp, ip, #4
16623 @end smallexample
16625 When performing a stack backtrace, code can inspect the value of
16626 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
16627 location @code{pc - 12} and the top 8 bits are set, then we know that
16628 there is a function name embedded immediately preceding this location
16629 and has length @code{((pc[-3]) & 0xff000000)}.
16631 @item -mthumb
16632 @itemx -marm
16633 @opindex marm
16634 @opindex mthumb
16636 Select between generating code that executes in ARM and Thumb
16637 states.  The default for most configurations is to generate code
16638 that executes in ARM state, but the default can be changed by
16639 configuring GCC with the @option{--with-mode=}@var{state}
16640 configure option.
16642 You can also override the ARM and Thumb mode for each function
16643 by using the @code{target("thumb")} and @code{target("arm")} function attributes
16644 (@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).
16646 @item -mflip-thumb 
16647 @opindex mflip-thumb
16648 Switch ARM/Thumb modes on alternating functions.
16649 This option is provided for regression testing of mixed Thumb/ARM code
16650 generation, and is not intended for ordinary use in compiling code.
16652 @item -mtpcs-frame
16653 @opindex mtpcs-frame
16654 Generate a stack frame that is compliant with the Thumb Procedure Call
16655 Standard for all non-leaf functions.  (A leaf function is one that does
16656 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
16658 @item -mtpcs-leaf-frame
16659 @opindex mtpcs-leaf-frame
16660 Generate a stack frame that is compliant with the Thumb Procedure Call
16661 Standard for all leaf functions.  (A leaf function is one that does
16662 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
16664 @item -mcallee-super-interworking
16665 @opindex mcallee-super-interworking
16666 Gives all externally visible functions in the file being compiled an ARM
16667 instruction set header which switches to Thumb mode before executing the
16668 rest of the function.  This allows these functions to be called from
16669 non-interworking code.  This option is not valid in AAPCS configurations
16670 because interworking is enabled by default.
16672 @item -mcaller-super-interworking
16673 @opindex mcaller-super-interworking
16674 Allows calls via function pointers (including virtual functions) to
16675 execute correctly regardless of whether the target code has been
16676 compiled for interworking or not.  There is a small overhead in the cost
16677 of executing a function pointer if this option is enabled.  This option
16678 is not valid in AAPCS configurations because interworking is enabled
16679 by default.
16681 @item -mtp=@var{name}
16682 @opindex mtp
16683 Specify the access model for the thread local storage pointer.  The valid
16684 models are @samp{soft}, which generates calls to @code{__aeabi_read_tp},
16685 @samp{cp15}, which fetches the thread pointer from @code{cp15} directly
16686 (supported in the arm6k architecture), and @samp{auto}, which uses the
16687 best available method for the selected processor.  The default setting is
16688 @samp{auto}.
16690 @item -mtls-dialect=@var{dialect}
16691 @opindex mtls-dialect
16692 Specify the dialect to use for accessing thread local storage.  Two
16693 @var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
16694 @samp{gnu} dialect selects the original GNU scheme for supporting
16695 local and global dynamic TLS models.  The @samp{gnu2} dialect
16696 selects the GNU descriptor scheme, which provides better performance
16697 for shared libraries.  The GNU descriptor scheme is compatible with
16698 the original scheme, but does require new assembler, linker and
16699 library support.  Initial and local exec TLS models are unaffected by
16700 this option and always use the original scheme.
16702 @item -mword-relocations
16703 @opindex mword-relocations
16704 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
16705 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
16706 loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
16707 is specified.
16709 @item -mfix-cortex-m3-ldrd
16710 @opindex mfix-cortex-m3-ldrd
16711 Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
16712 with overlapping destination and base registers are used.  This option avoids
16713 generating these instructions.  This option is enabled by default when
16714 @option{-mcpu=cortex-m3} is specified.
16716 @item -munaligned-access
16717 @itemx -mno-unaligned-access
16718 @opindex munaligned-access
16719 @opindex mno-unaligned-access
16720 Enables (or disables) reading and writing of 16- and 32- bit values
16721 from addresses that are not 16- or 32- bit aligned.  By default
16722 unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
16723 ARMv8-M Baseline architectures, and enabled for all other
16724 architectures.  If unaligned access is not enabled then words in packed
16725 data structures are accessed a byte at a time.
16727 The ARM attribute @code{Tag_CPU_unaligned_access} is set in the
16728 generated object file to either true or false, depending upon the
16729 setting of this option.  If unaligned access is enabled then the
16730 preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} is also
16731 defined.
16733 @item -mneon-for-64bits
16734 @opindex mneon-for-64bits
16735 Enables using Neon to handle scalar 64-bits operations. This is
16736 disabled by default since the cost of moving data from core registers
16737 to Neon is high.
16739 @item -mslow-flash-data
16740 @opindex mslow-flash-data
16741 Assume loading data from flash is slower than fetching instruction.
16742 Therefore literal load is minimized for better performance.
16743 This option is only supported when compiling for ARMv7 M-profile and
16744 off by default.
16746 @item -masm-syntax-unified
16747 @opindex masm-syntax-unified
16748 Assume inline assembler is using unified asm syntax.  The default is
16749 currently off which implies divided syntax.  This option has no impact
16750 on Thumb2. However, this may change in future releases of GCC.
16751 Divided syntax should be considered deprecated.
16753 @item -mrestrict-it
16754 @opindex mrestrict-it
16755 Restricts generation of IT blocks to conform to the rules of ARMv8-A.
16756 IT blocks can only contain a single 16-bit instruction from a select
16757 set of instructions. This option is on by default for ARMv8-A Thumb mode.
16759 @item -mprint-tune-info
16760 @opindex mprint-tune-info
16761 Print CPU tuning information as comment in assembler file.  This is
16762 an option used only for regression testing of the compiler and not
16763 intended for ordinary use in compiling code.  This option is disabled
16764 by default.
16766 @item -mverbose-cost-dump
16767 @opindex mverbose-cost-dump
16768 Enable verbose cost model dumping in the debug dump files.  This option is
16769 provided for use in debugging the compiler.
16771 @item -mpure-code
16772 @opindex mpure-code
16773 Do not allow constant data to be placed in code sections.
16774 Additionally, when compiling for ELF object format give all text sections the
16775 ELF processor-specific section attribute @code{SHF_ARM_PURECODE}.  This option
16776 is only available when generating non-pic code for M-profile targets with the
16777 MOVT instruction.
16779 @item -mcmse
16780 @opindex mcmse
16781 Generate secure code as per the "ARMv8-M Security Extensions: Requirements on
16782 Development Tools Engineering Specification", which can be found on
16783 @url{http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf}.
16784 @end table
16786 @node AVR Options
16787 @subsection AVR Options
16788 @cindex AVR Options
16790 These options are defined for AVR implementations:
16792 @table @gcctabopt
16793 @item -mmcu=@var{mcu}
16794 @opindex mmcu
16795 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
16797 The default for this option is@tie{}@samp{avr2}.
16799 GCC supports the following AVR devices and ISAs:
16801 @include avr-mmcu.texi
16803 @item -mabsdata
16804 @opindex mabsdata
16806 Assume that all data in static storage can be accessed by LDS / STS
16807 instructions.  This option has only an effect on reduced Tiny devices like
16808 ATtiny40.  See also the @code{absdata}
16809 @ref{AVR Variable Attributes,variable attribute}.
16811 @item -maccumulate-args
16812 @opindex maccumulate-args
16813 Accumulate outgoing function arguments and acquire/release the needed
16814 stack space for outgoing function arguments once in function
16815 prologue/epilogue.  Without this option, outgoing arguments are pushed
16816 before calling a function and popped afterwards.
16818 Popping the arguments after the function call can be expensive on
16819 AVR so that accumulating the stack space might lead to smaller
16820 executables because arguments need not be removed from the
16821 stack after such a function call.
16823 This option can lead to reduced code size for functions that perform
16824 several calls to functions that get their arguments on the stack like
16825 calls to printf-like functions.
16827 @item -mbranch-cost=@var{cost}
16828 @opindex mbranch-cost
16829 Set the branch costs for conditional branch instructions to
16830 @var{cost}.  Reasonable values for @var{cost} are small, non-negative
16831 integers. The default branch cost is 0.
16833 @item -mcall-prologues
16834 @opindex mcall-prologues
16835 Functions prologues/epilogues are expanded as calls to appropriate
16836 subroutines.  Code size is smaller.
16838 @item -mgas-isr-prologues
16839 @opindex mgas-isr-prologues
16840 Interrupt service routines (ISRs) may use the @code{__gcc_isr} pseudo
16841 instruction supported by GNU Binutils.
16842 If this option is on, the feature can still be disabled for individual
16843 ISRs by means of the @ref{AVR Function Attributes,,@code{no_gccisr}}
16844 function attribute.  This feature is activated per default
16845 if optimization is on (but not with @option{-Og}, @pxref{Optimize Options}),
16846 and if GNU Binutils support @w{@uref{https://sourceware.org/PR21683,PR21683}}.
16848 @item -mint8
16849 @opindex mint8
16850 Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
16851 @code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
16852 and @code{long long} is 4 bytes.  Please note that this option does not
16853 conform to the C standards, but it results in smaller code
16854 size.
16856 @item -mmain-is-OS_task
16857 @opindex mmain-is-OS_task
16858 Do not save registers in @code{main}.  The effect is the same like
16859 attaching attribute @ref{AVR Function Attributes,,@code{OS_task}}
16860 to @code{main}. It is activated per default if optimization is on.
16862 @item -mn-flash=@var{num}
16863 @opindex mn-flash
16864 Assume that the flash memory has a size of 
16865 @var{num} times 64@tie{}KiB.
16867 @item -mno-interrupts
16868 @opindex mno-interrupts
16869 Generated code is not compatible with hardware interrupts.
16870 Code size is smaller.
16872 @item -mrelax
16873 @opindex mrelax
16874 Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
16875 @code{RCALL} resp.@: @code{RJMP} instruction if applicable.
16876 Setting @option{-mrelax} just adds the @option{--mlink-relax} option to
16877 the assembler's command line and the @option{--relax} option to the
16878 linker's command line.
16880 Jump relaxing is performed by the linker because jump offsets are not
16881 known before code is located. Therefore, the assembler code generated by the
16882 compiler is the same, but the instructions in the executable may
16883 differ from instructions in the assembler code.
16885 Relaxing must be turned on if linker stubs are needed, see the
16886 section on @code{EIND} and linker stubs below.
16888 @item -mrmw
16889 @opindex mrmw
16890 Assume that the device supports the Read-Modify-Write
16891 instructions @code{XCH}, @code{LAC}, @code{LAS} and @code{LAT}.
16893 @item -mshort-calls
16894 @opindex mshort-calls
16896 Assume that @code{RJMP} and @code{RCALL} can target the whole
16897 program memory.
16899 This option is used internally for multilib selection.  It is
16900 not an optimization option, and you don't need to set it by hand.
16902 @item -msp8
16903 @opindex msp8
16904 Treat the stack pointer register as an 8-bit register,
16905 i.e.@: assume the high byte of the stack pointer is zero.
16906 In general, you don't need to set this option by hand.
16908 This option is used internally by the compiler to select and
16909 build multilibs for architectures @code{avr2} and @code{avr25}.
16910 These architectures mix devices with and without @code{SPH}.
16911 For any setting other than @option{-mmcu=avr2} or @option{-mmcu=avr25}
16912 the compiler driver adds or removes this option from the compiler
16913 proper's command line, because the compiler then knows if the device
16914 or architecture has an 8-bit stack pointer and thus no @code{SPH}
16915 register or not.
16917 @item -mstrict-X
16918 @opindex mstrict-X
16919 Use address register @code{X} in a way proposed by the hardware.  This means
16920 that @code{X} is only used in indirect, post-increment or
16921 pre-decrement addressing.
16923 Without this option, the @code{X} register may be used in the same way
16924 as @code{Y} or @code{Z} which then is emulated by additional
16925 instructions.  
16926 For example, loading a value with @code{X+const} addressing with a
16927 small non-negative @code{const < 64} to a register @var{Rn} is
16928 performed as
16930 @example
16931 adiw r26, const   ; X += const
16932 ld   @var{Rn}, X        ; @var{Rn} = *X
16933 sbiw r26, const   ; X -= const
16934 @end example
16936 @item -mtiny-stack
16937 @opindex mtiny-stack
16938 Only change the lower 8@tie{}bits of the stack pointer.
16940 @item -mfract-convert-truncate
16941 @opindex mfract-convert-truncate
16942 Allow to use truncation instead of rounding towards zero for fractional fixed-point types.
16944 @item -nodevicelib
16945 @opindex nodevicelib
16946 Don't link against AVR-LibC's device specific library @code{lib<mcu>.a}.
16948 @item -Waddr-space-convert
16949 @opindex Waddr-space-convert
16950 Warn about conversions between address spaces in the case where the
16951 resulting address space is not contained in the incoming address space.
16953 @item -Wmisspelled-isr
16954 @opindex Wmisspelled-isr
16955 Warn if the ISR is misspelled, i.e. without __vector prefix.
16956 Enabled by default.
16957 @end table
16959 @subsubsection @code{EIND} and Devices with More Than 128 Ki Bytes of Flash
16960 @cindex @code{EIND}
16961 Pointers in the implementation are 16@tie{}bits wide.
16962 The address of a function or label is represented as word address so
16963 that indirect jumps and calls can target any code address in the
16964 range of 64@tie{}Ki words.
16966 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
16967 bytes of program memory space, there is a special function register called
16968 @code{EIND} that serves as most significant part of the target address
16969 when @code{EICALL} or @code{EIJMP} instructions are used.
16971 Indirect jumps and calls on these devices are handled as follows by
16972 the compiler and are subject to some limitations:
16974 @itemize @bullet
16976 @item
16977 The compiler never sets @code{EIND}.
16979 @item
16980 The compiler uses @code{EIND} implicitly in @code{EICALL}/@code{EIJMP}
16981 instructions or might read @code{EIND} directly in order to emulate an
16982 indirect call/jump by means of a @code{RET} instruction.
16984 @item
16985 The compiler assumes that @code{EIND} never changes during the startup
16986 code or during the application. In particular, @code{EIND} is not
16987 saved/restored in function or interrupt service routine
16988 prologue/epilogue.
16990 @item
16991 For indirect calls to functions and computed goto, the linker
16992 generates @emph{stubs}. Stubs are jump pads sometimes also called
16993 @emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
16994 The stub contains a direct jump to the desired address.
16996 @item
16997 Linker relaxation must be turned on so that the linker generates
16998 the stubs correctly in all situations. See the compiler option
16999 @option{-mrelax} and the linker option @option{--relax}.
17000 There are corner cases where the linker is supposed to generate stubs
17001 but aborts without relaxation and without a helpful error message.
17003 @item
17004 The default linker script is arranged for code with @code{EIND = 0}.
17005 If code is supposed to work for a setup with @code{EIND != 0}, a custom
17006 linker script has to be used in order to place the sections whose
17007 name start with @code{.trampolines} into the segment where @code{EIND}
17008 points to.
17010 @item
17011 The startup code from libgcc never sets @code{EIND}.
17012 Notice that startup code is a blend of code from libgcc and AVR-LibC.
17013 For the impact of AVR-LibC on @code{EIND}, see the
17014 @w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}.
17016 @item
17017 It is legitimate for user-specific startup code to set up @code{EIND}
17018 early, for example by means of initialization code located in
17019 section @code{.init3}. Such code runs prior to general startup code
17020 that initializes RAM and calls constructors, but after the bit
17021 of startup code from AVR-LibC that sets @code{EIND} to the segment
17022 where the vector table is located.
17023 @example
17024 #include <avr/io.h>
17026 static void
17027 __attribute__((section(".init3"),naked,used,no_instrument_function))
17028 init3_set_eind (void)
17030   __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
17031                   "out %i0,r24" :: "n" (&EIND) : "r24","memory");
17033 @end example
17035 @noindent
17036 The @code{__trampolines_start} symbol is defined in the linker script.
17038 @item
17039 Stubs are generated automatically by the linker if
17040 the following two conditions are met:
17041 @itemize @minus
17043 @item The address of a label is taken by means of the @code{gs} modifier
17044 (short for @emph{generate stubs}) like so:
17045 @example
17046 LDI r24, lo8(gs(@var{func}))
17047 LDI r25, hi8(gs(@var{func}))
17048 @end example
17049 @item The final location of that label is in a code segment
17050 @emph{outside} the segment where the stubs are located.
17051 @end itemize
17053 @item
17054 The compiler emits such @code{gs} modifiers for code labels in the
17055 following situations:
17056 @itemize @minus
17057 @item Taking address of a function or code label.
17058 @item Computed goto.
17059 @item If prologue-save function is used, see @option{-mcall-prologues}
17060 command-line option.
17061 @item Switch/case dispatch tables. If you do not want such dispatch
17062 tables you can specify the @option{-fno-jump-tables} command-line option.
17063 @item C and C++ constructors/destructors called during startup/shutdown.
17064 @item If the tools hit a @code{gs()} modifier explained above.
17065 @end itemize
17067 @item
17068 Jumping to non-symbolic addresses like so is @emph{not} supported:
17070 @example
17071 int main (void)
17073     /* Call function at word address 0x2 */
17074     return ((int(*)(void)) 0x2)();
17076 @end example
17078 Instead, a stub has to be set up, i.e.@: the function has to be called
17079 through a symbol (@code{func_4} in the example):
17081 @example
17082 int main (void)
17084     extern int func_4 (void);
17086     /* Call function at byte address 0x4 */
17087     return func_4();
17089 @end example
17091 and the application be linked with @option{-Wl,--defsym,func_4=0x4}.
17092 Alternatively, @code{func_4} can be defined in the linker script.
17093 @end itemize
17095 @subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
17096 @cindex @code{RAMPD}
17097 @cindex @code{RAMPX}
17098 @cindex @code{RAMPY}
17099 @cindex @code{RAMPZ}
17100 Some AVR devices support memories larger than the 64@tie{}KiB range
17101 that can be accessed with 16-bit pointers.  To access memory locations
17102 outside this 64@tie{}KiB range, the content of a @code{RAMP}
17103 register is used as high part of the address:
17104 The @code{X}, @code{Y}, @code{Z} address register is concatenated
17105 with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
17106 register, respectively, to get a wide address. Similarly,
17107 @code{RAMPD} is used together with direct addressing.
17109 @itemize
17110 @item
17111 The startup code initializes the @code{RAMP} special function
17112 registers with zero.
17114 @item
17115 If a @ref{AVR Named Address Spaces,named address space} other than
17116 generic or @code{__flash} is used, then @code{RAMPZ} is set
17117 as needed before the operation.
17119 @item
17120 If the device supports RAM larger than 64@tie{}KiB and the compiler
17121 needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
17122 is reset to zero after the operation.
17124 @item
17125 If the device comes with a specific @code{RAMP} register, the ISR
17126 prologue/epilogue saves/restores that SFR and initializes it with
17127 zero in case the ISR code might (implicitly) use it.
17129 @item
17130 RAM larger than 64@tie{}KiB is not supported by GCC for AVR targets.
17131 If you use inline assembler to read from locations outside the
17132 16-bit address range and change one of the @code{RAMP} registers,
17133 you must reset it to zero after the access.
17135 @end itemize
17137 @subsubsection AVR Built-in Macros
17139 GCC defines several built-in macros so that the user code can test
17140 for the presence or absence of features.  Almost any of the following
17141 built-in macros are deduced from device capabilities and thus
17142 triggered by the @option{-mmcu=} command-line option.
17144 For even more AVR-specific built-in macros see
17145 @ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.
17147 @table @code
17149 @item __AVR_ARCH__
17150 Build-in macro that resolves to a decimal number that identifies the
17151 architecture and depends on the @option{-mmcu=@var{mcu}} option.
17152 Possible values are:
17154 @code{2}, @code{25}, @code{3}, @code{31}, @code{35},
17155 @code{4}, @code{5}, @code{51}, @code{6}
17157 for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3}, @code{avr31},
17158 @code{avr35}, @code{avr4}, @code{avr5}, @code{avr51}, @code{avr6},
17160 respectively and
17162 @code{100},
17163 @code{102}, @code{103}, @code{104},
17164 @code{105}, @code{106}, @code{107}
17166 for @var{mcu}=@code{avrtiny},
17167 @code{avrxmega2}, @code{avrxmega3}, @code{avrxmega4},
17168 @code{avrxmega5}, @code{avrxmega6}, @code{avrxmega7}, respectively.
17169 If @var{mcu} specifies a device, this built-in macro is set
17170 accordingly. For example, with @option{-mmcu=atmega8} the macro is
17171 defined to @code{4}.
17173 @item __AVR_@var{Device}__
17174 Setting @option{-mmcu=@var{device}} defines this built-in macro which reflects
17175 the device's name. For example, @option{-mmcu=atmega8} defines the
17176 built-in macro @code{__AVR_ATmega8__}, @option{-mmcu=attiny261a} defines
17177 @code{__AVR_ATtiny261A__}, etc.
17179 The built-in macros' names follow
17180 the scheme @code{__AVR_@var{Device}__} where @var{Device} is
17181 the device name as from the AVR user manual. The difference between
17182 @var{Device} in the built-in macro and @var{device} in
17183 @option{-mmcu=@var{device}} is that the latter is always lowercase.
17185 If @var{device} is not a device but only a core architecture like
17186 @samp{avr51}, this macro is not defined.
17188 @item __AVR_DEVICE_NAME__
17189 Setting @option{-mmcu=@var{device}} defines this built-in macro to
17190 the device's name. For example, with @option{-mmcu=atmega8} the macro
17191 is defined to @code{atmega8}.
17193 If @var{device} is not a device but only a core architecture like
17194 @samp{avr51}, this macro is not defined.
17196 @item __AVR_XMEGA__
17197 The device / architecture belongs to the XMEGA family of devices.
17199 @item __AVR_HAVE_ELPM__
17200 The device has the @code{ELPM} instruction.
17202 @item __AVR_HAVE_ELPMX__
17203 The device has the @code{ELPM R@var{n},Z} and @code{ELPM
17204 R@var{n},Z+} instructions.
17206 @item __AVR_HAVE_MOVW__
17207 The device has the @code{MOVW} instruction to perform 16-bit
17208 register-register moves.
17210 @item __AVR_HAVE_LPMX__
17211 The device has the @code{LPM R@var{n},Z} and
17212 @code{LPM R@var{n},Z+} instructions.
17214 @item __AVR_HAVE_MUL__
17215 The device has a hardware multiplier. 
17217 @item __AVR_HAVE_JMP_CALL__
17218 The device has the @code{JMP} and @code{CALL} instructions.
17219 This is the case for devices with more than 8@tie{}KiB of program
17220 memory.
17222 @item __AVR_HAVE_EIJMP_EICALL__
17223 @itemx __AVR_3_BYTE_PC__
17224 The device has the @code{EIJMP} and @code{EICALL} instructions.
17225 This is the case for devices with more than 128@tie{}KiB of program memory.
17226 This also means that the program counter
17227 (PC) is 3@tie{}bytes wide.
17229 @item __AVR_2_BYTE_PC__
17230 The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
17231 with up to 128@tie{}KiB of program memory.
17233 @item __AVR_HAVE_8BIT_SP__
17234 @itemx __AVR_HAVE_16BIT_SP__
17235 The stack pointer (SP) register is treated as 8-bit respectively
17236 16-bit register by the compiler.
17237 The definition of these macros is affected by @option{-mtiny-stack}.
17239 @item __AVR_HAVE_SPH__
17240 @itemx __AVR_SP8__
17241 The device has the SPH (high part of stack pointer) special function
17242 register or has an 8-bit stack pointer, respectively.
17243 The definition of these macros is affected by @option{-mmcu=} and
17244 in the cases of @option{-mmcu=avr2} and @option{-mmcu=avr25} also
17245 by @option{-msp8}.
17247 @item __AVR_HAVE_RAMPD__
17248 @itemx __AVR_HAVE_RAMPX__
17249 @itemx __AVR_HAVE_RAMPY__
17250 @itemx __AVR_HAVE_RAMPZ__
17251 The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
17252 @code{RAMPZ} special function register, respectively.
17254 @item __NO_INTERRUPTS__
17255 This macro reflects the @option{-mno-interrupts} command-line option.
17257 @item __AVR_ERRATA_SKIP__
17258 @itemx __AVR_ERRATA_SKIP_JMP_CALL__
17259 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
17260 instructions because of a hardware erratum.  Skip instructions are
17261 @code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
17262 The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
17263 set.
17265 @item __AVR_ISA_RMW__
17266 The device has Read-Modify-Write instructions (XCH, LAC, LAS and LAT).
17268 @item __AVR_SFR_OFFSET__=@var{offset}
17269 Instructions that can address I/O special function registers directly
17270 like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
17271 address as if addressed by an instruction to access RAM like @code{LD}
17272 or @code{STS}. This offset depends on the device architecture and has
17273 to be subtracted from the RAM address in order to get the
17274 respective I/O@tie{}address.
17276 @item __AVR_SHORT_CALLS__
17277 The @option{-mshort-calls} command line option is set.
17279 @item __AVR_PM_BASE_ADDRESS__=@var{addr}
17280 Some devices support reading from flash memory by means of @code{LD*}
17281 instructions.  The flash memory is seen in the data address space
17282 at an offset of @code{__AVR_PM_BASE_ADDRESS__}.  If this macro
17283 is not defined, this feature is not available.  If defined,
17284 the address space is linear and there is no need to put
17285 @code{.rodata} into RAM.  This is handled by the default linker
17286 description file, and is currently available for
17287 @code{avrtiny} and @code{avrxmega3}.  Even more convenient,
17288 there is no need to use address spaces like @code{__flash} or
17289 features like attribute @code{progmem} and @code{pgm_read_*}.
17291 @item __WITH_AVRLIBC__
17292 The compiler is configured to be used together with AVR-Libc.
17293 See the @option{--with-avrlibc} configure option.
17295 @end table
17297 @node Blackfin Options
17298 @subsection Blackfin Options
17299 @cindex Blackfin Options
17301 @table @gcctabopt
17302 @item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
17303 @opindex mcpu=
17304 Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
17305 can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
17306 @samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
17307 @samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
17308 @samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
17309 @samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
17310 @samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
17311 @samp{bf561}, @samp{bf592}.
17313 The optional @var{sirevision} specifies the silicon revision of the target
17314 Blackfin processor.  Any workarounds available for the targeted silicon revision
17315 are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
17316 If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
17317 are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
17318 hexadecimal digits representing the major and minor numbers in the silicon
17319 revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
17320 is not defined.  If @var{sirevision} is @samp{any}, the
17321 @code{__SILICON_REVISION__} is defined to be @code{0xffff}.
17322 If this optional @var{sirevision} is not used, GCC assumes the latest known
17323 silicon revision of the targeted Blackfin processor.
17325 GCC defines a preprocessor macro for the specified @var{cpu}.
17326 For the @samp{bfin-elf} toolchain, this option causes the hardware BSP
17327 provided by libgloss to be linked in if @option{-msim} is not given.
17329 Without this option, @samp{bf532} is used as the processor by default.
17331 Note that support for @samp{bf561} is incomplete.  For @samp{bf561},
17332 only the preprocessor macro is defined.
17334 @item -msim
17335 @opindex msim
17336 Specifies that the program will be run on the simulator.  This causes
17337 the simulator BSP provided by libgloss to be linked in.  This option
17338 has effect only for @samp{bfin-elf} toolchain.
17339 Certain other options, such as @option{-mid-shared-library} and
17340 @option{-mfdpic}, imply @option{-msim}.
17342 @item -momit-leaf-frame-pointer
17343 @opindex momit-leaf-frame-pointer
17344 Don't keep the frame pointer in a register for leaf functions.  This
17345 avoids the instructions to save, set up and restore frame pointers and
17346 makes an extra register available in leaf functions.
17348 @item -mspecld-anomaly
17349 @opindex mspecld-anomaly
17350 When enabled, the compiler ensures that the generated code does not
17351 contain speculative loads after jump instructions. If this option is used,
17352 @code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
17354 @item -mno-specld-anomaly
17355 @opindex mno-specld-anomaly
17356 Don't generate extra code to prevent speculative loads from occurring.
17358 @item -mcsync-anomaly
17359 @opindex mcsync-anomaly
17360 When enabled, the compiler ensures that the generated code does not
17361 contain CSYNC or SSYNC instructions too soon after conditional branches.
17362 If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
17364 @item -mno-csync-anomaly
17365 @opindex mno-csync-anomaly
17366 Don't generate extra code to prevent CSYNC or SSYNC instructions from
17367 occurring too soon after a conditional branch.
17369 @item -mlow-64k
17370 @opindex mlow-64k
17371 When enabled, the compiler is free to take advantage of the knowledge that
17372 the entire program fits into the low 64k of memory.
17374 @item -mno-low-64k
17375 @opindex mno-low-64k
17376 Assume that the program is arbitrarily large.  This is the default.
17378 @item -mstack-check-l1
17379 @opindex mstack-check-l1
17380 Do stack checking using information placed into L1 scratchpad memory by the
17381 uClinux kernel.
17383 @item -mid-shared-library
17384 @opindex mid-shared-library
17385 Generate code that supports shared libraries via the library ID method.
17386 This allows for execute in place and shared libraries in an environment
17387 without virtual memory management.  This option implies @option{-fPIC}.
17388 With a @samp{bfin-elf} target, this option implies @option{-msim}.
17390 @item -mno-id-shared-library
17391 @opindex mno-id-shared-library
17392 Generate code that doesn't assume ID-based shared libraries are being used.
17393 This is the default.
17395 @item -mleaf-id-shared-library
17396 @opindex mleaf-id-shared-library
17397 Generate code that supports shared libraries via the library ID method,
17398 but assumes that this library or executable won't link against any other
17399 ID shared libraries.  That allows the compiler to use faster code for jumps
17400 and calls.
17402 @item -mno-leaf-id-shared-library
17403 @opindex mno-leaf-id-shared-library
17404 Do not assume that the code being compiled won't link against any ID shared
17405 libraries.  Slower code is generated for jump and call insns.
17407 @item -mshared-library-id=n
17408 @opindex mshared-library-id
17409 Specifies the identification number of the ID-based shared library being
17410 compiled.  Specifying a value of 0 generates more compact code; specifying
17411 other values forces the allocation of that number to the current
17412 library but is no more space- or time-efficient than omitting this option.
17414 @item -msep-data
17415 @opindex msep-data
17416 Generate code that allows the data segment to be located in a different
17417 area of memory from the text segment.  This allows for execute in place in
17418 an environment without virtual memory management by eliminating relocations
17419 against the text section.
17421 @item -mno-sep-data
17422 @opindex mno-sep-data
17423 Generate code that assumes that the data segment follows the text segment.
17424 This is the default.
17426 @item -mlong-calls
17427 @itemx -mno-long-calls
17428 @opindex mlong-calls
17429 @opindex mno-long-calls
17430 Tells the compiler to perform function calls by first loading the
17431 address of the function into a register and then performing a subroutine
17432 call on this register.  This switch is needed if the target function
17433 lies outside of the 24-bit addressing range of the offset-based
17434 version of subroutine call instruction.
17436 This feature is not enabled by default.  Specifying
17437 @option{-mno-long-calls} restores the default behavior.  Note these
17438 switches have no effect on how the compiler generates code to handle
17439 function calls via function pointers.
17441 @item -mfast-fp
17442 @opindex mfast-fp
17443 Link with the fast floating-point library. This library relaxes some of
17444 the IEEE floating-point standard's rules for checking inputs against
17445 Not-a-Number (NAN), in the interest of performance.
17447 @item -minline-plt
17448 @opindex minline-plt
17449 Enable inlining of PLT entries in function calls to functions that are
17450 not known to bind locally.  It has no effect without @option{-mfdpic}.
17452 @item -mmulticore
17453 @opindex mmulticore
17454 Build a standalone application for multicore Blackfin processors. 
17455 This option causes proper start files and link scripts supporting 
17456 multicore to be used, and defines the macro @code{__BFIN_MULTICORE}. 
17457 It can only be used with @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. 
17459 This option can be used with @option{-mcorea} or @option{-mcoreb}, which
17460 selects the one-application-per-core programming model.  Without
17461 @option{-mcorea} or @option{-mcoreb}, the single-application/dual-core
17462 programming model is used. In this model, the main function of Core B
17463 should be named as @code{coreb_main}.
17465 If this option is not used, the single-core application programming
17466 model is used.
17468 @item -mcorea
17469 @opindex mcorea
17470 Build a standalone application for Core A of BF561 when using
17471 the one-application-per-core programming model. Proper start files
17472 and link scripts are used to support Core A, and the macro
17473 @code{__BFIN_COREA} is defined.
17474 This option can only be used in conjunction with @option{-mmulticore}.
17476 @item -mcoreb
17477 @opindex mcoreb
17478 Build a standalone application for Core B of BF561 when using
17479 the one-application-per-core programming model. Proper start files
17480 and link scripts are used to support Core B, and the macro
17481 @code{__BFIN_COREB} is defined. When this option is used, @code{coreb_main}
17482 should be used instead of @code{main}. 
17483 This option can only be used in conjunction with @option{-mmulticore}.
17485 @item -msdram
17486 @opindex msdram
17487 Build a standalone application for SDRAM. Proper start files and
17488 link scripts are used to put the application into SDRAM, and the macro
17489 @code{__BFIN_SDRAM} is defined.
17490 The loader should initialize SDRAM before loading the application.
17492 @item -micplb
17493 @opindex micplb
17494 Assume that ICPLBs are enabled at run time.  This has an effect on certain
17495 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
17496 are enabled; for standalone applications the default is off.
17497 @end table
17499 @node C6X Options
17500 @subsection C6X Options
17501 @cindex C6X Options
17503 @table @gcctabopt
17504 @item -march=@var{name}
17505 @opindex march
17506 This specifies the name of the target architecture.  GCC uses this
17507 name to determine what kind of instructions it can emit when generating
17508 assembly code.  Permissible names are: @samp{c62x},
17509 @samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.
17511 @item -mbig-endian
17512 @opindex mbig-endian
17513 Generate code for a big-endian target.
17515 @item -mlittle-endian
17516 @opindex mlittle-endian
17517 Generate code for a little-endian target.  This is the default.
17519 @item -msim
17520 @opindex msim
17521 Choose startup files and linker script suitable for the simulator.
17523 @item -msdata=default
17524 @opindex msdata=default
17525 Put small global and static data in the @code{.neardata} section,
17526 which is pointed to by register @code{B14}.  Put small uninitialized
17527 global and static data in the @code{.bss} section, which is adjacent
17528 to the @code{.neardata} section.  Put small read-only data into the
17529 @code{.rodata} section.  The corresponding sections used for large
17530 pieces of data are @code{.fardata}, @code{.far} and @code{.const}.
17532 @item -msdata=all
17533 @opindex msdata=all
17534 Put all data, not just small objects, into the sections reserved for
17535 small data, and use addressing relative to the @code{B14} register to
17536 access them.
17538 @item -msdata=none
17539 @opindex msdata=none
17540 Make no use of the sections reserved for small data, and use absolute
17541 addresses to access all data.  Put all initialized global and static
17542 data in the @code{.fardata} section, and all uninitialized data in the
17543 @code{.far} section.  Put all constant data into the @code{.const}
17544 section.
17545 @end table
17547 @node CRIS Options
17548 @subsection CRIS Options
17549 @cindex CRIS Options
17551 These options are defined specifically for the CRIS ports.
17553 @table @gcctabopt
17554 @item -march=@var{architecture-type}
17555 @itemx -mcpu=@var{architecture-type}
17556 @opindex march
17557 @opindex mcpu
17558 Generate code for the specified architecture.  The choices for
17559 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
17560 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
17561 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
17562 @samp{v10}.
17564 @item -mtune=@var{architecture-type}
17565 @opindex mtune
17566 Tune to @var{architecture-type} everything applicable about the generated
17567 code, except for the ABI and the set of available instructions.  The
17568 choices for @var{architecture-type} are the same as for
17569 @option{-march=@var{architecture-type}}.
17571 @item -mmax-stack-frame=@var{n}
17572 @opindex mmax-stack-frame
17573 Warn when the stack frame of a function exceeds @var{n} bytes.
17575 @item -metrax4
17576 @itemx -metrax100
17577 @opindex metrax4
17578 @opindex metrax100
17579 The options @option{-metrax4} and @option{-metrax100} are synonyms for
17580 @option{-march=v3} and @option{-march=v8} respectively.
17582 @item -mmul-bug-workaround
17583 @itemx -mno-mul-bug-workaround
17584 @opindex mmul-bug-workaround
17585 @opindex mno-mul-bug-workaround
17586 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
17587 models where it applies.  This option is active by default.
17589 @item -mpdebug
17590 @opindex mpdebug
17591 Enable CRIS-specific verbose debug-related information in the assembly
17592 code.  This option also has the effect of turning off the @samp{#NO_APP}
17593 formatted-code indicator to the assembler at the beginning of the
17594 assembly file.
17596 @item -mcc-init
17597 @opindex mcc-init
17598 Do not use condition-code results from previous instruction; always emit
17599 compare and test instructions before use of condition codes.
17601 @item -mno-side-effects
17602 @opindex mno-side-effects
17603 Do not emit instructions with side effects in addressing modes other than
17604 post-increment.
17606 @item -mstack-align
17607 @itemx -mno-stack-align
17608 @itemx -mdata-align
17609 @itemx -mno-data-align
17610 @itemx -mconst-align
17611 @itemx -mno-const-align
17612 @opindex mstack-align
17613 @opindex mno-stack-align
17614 @opindex mdata-align
17615 @opindex mno-data-align
17616 @opindex mconst-align
17617 @opindex mno-const-align
17618 These options (@samp{no-} options) arrange (eliminate arrangements) for the
17619 stack frame, individual data and constants to be aligned for the maximum
17620 single data access size for the chosen CPU model.  The default is to
17621 arrange for 32-bit alignment.  ABI details such as structure layout are
17622 not affected by these options.
17624 @item -m32-bit
17625 @itemx -m16-bit
17626 @itemx -m8-bit
17627 @opindex m32-bit
17628 @opindex m16-bit
17629 @opindex m8-bit
17630 Similar to the stack- data- and const-align options above, these options
17631 arrange for stack frame, writable data and constants to all be 32-bit,
17632 16-bit or 8-bit aligned.  The default is 32-bit alignment.
17634 @item -mno-prologue-epilogue
17635 @itemx -mprologue-epilogue
17636 @opindex mno-prologue-epilogue
17637 @opindex mprologue-epilogue
17638 With @option{-mno-prologue-epilogue}, the normal function prologue and
17639 epilogue which set up the stack frame are omitted and no return
17640 instructions or return sequences are generated in the code.  Use this
17641 option only together with visual inspection of the compiled code: no
17642 warnings or errors are generated when call-saved registers must be saved,
17643 or storage for local variables needs to be allocated.
17645 @item -mno-gotplt
17646 @itemx -mgotplt
17647 @opindex mno-gotplt
17648 @opindex mgotplt
17649 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
17650 instruction sequences that load addresses for functions from the PLT part
17651 of the GOT rather than (traditional on other architectures) calls to the
17652 PLT@.  The default is @option{-mgotplt}.
17654 @item -melf
17655 @opindex melf
17656 Legacy no-op option only recognized with the cris-axis-elf and
17657 cris-axis-linux-gnu targets.
17659 @item -mlinux
17660 @opindex mlinux
17661 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
17663 @item -sim
17664 @opindex sim
17665 This option, recognized for the cris-axis-elf, arranges
17666 to link with input-output functions from a simulator library.  Code,
17667 initialized data and zero-initialized data are allocated consecutively.
17669 @item -sim2
17670 @opindex sim2
17671 Like @option{-sim}, but pass linker options to locate initialized data at
17672 0x40000000 and zero-initialized data at 0x80000000.
17673 @end table
17675 @node CR16 Options
17676 @subsection CR16 Options
17677 @cindex CR16 Options
17679 These options are defined specifically for the CR16 ports.
17681 @table @gcctabopt
17683 @item -mmac
17684 @opindex mmac
17685 Enable the use of multiply-accumulate instructions. Disabled by default.
17687 @item -mcr16cplus
17688 @itemx -mcr16c
17689 @opindex mcr16cplus
17690 @opindex mcr16c
17691 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 
17692 is default.
17694 @item -msim
17695 @opindex msim
17696 Links the library libsim.a which is in compatible with simulator. Applicable
17697 to ELF compiler only.
17699 @item -mint32
17700 @opindex mint32
17701 Choose integer type as 32-bit wide.
17703 @item -mbit-ops
17704 @opindex mbit-ops
17705 Generates @code{sbit}/@code{cbit} instructions for bit manipulations.
17707 @item -mdata-model=@var{model}
17708 @opindex mdata-model
17709 Choose a data model. The choices for @var{model} are @samp{near},
17710 @samp{far} or @samp{medium}. @samp{medium} is default.
17711 However, @samp{far} is not valid with @option{-mcr16c}, as the
17712 CR16C architecture does not support the far data model.
17713 @end table
17715 @node Darwin Options
17716 @subsection Darwin Options
17717 @cindex Darwin options
17719 These options are defined for all architectures running the Darwin operating
17720 system.
17722 FSF GCC on Darwin does not create ``fat'' object files; it creates
17723 an object file for the single architecture that GCC was built to
17724 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
17725 @option{-arch} options are used; it does so by running the compiler or
17726 linker multiple times and joining the results together with
17727 @file{lipo}.
17729 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
17730 @samp{i686}) is determined by the flags that specify the ISA
17731 that GCC is targeting, like @option{-mcpu} or @option{-march}.  The
17732 @option{-force_cpusubtype_ALL} option can be used to override this.
17734 The Darwin tools vary in their behavior when presented with an ISA
17735 mismatch.  The assembler, @file{as}, only permits instructions to
17736 be used that are valid for the subtype of the file it is generating,
17737 so you cannot put 64-bit instructions in a @samp{ppc750} object file.
17738 The linker for shared libraries, @file{/usr/bin/libtool}, fails
17739 and prints an error if asked to create a shared library with a less
17740 restrictive subtype than its input files (for instance, trying to put
17741 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
17742 for executables, @command{ld}, quietly gives the executable the most
17743 restrictive subtype of any of its input files.
17745 @table @gcctabopt
17746 @item -F@var{dir}
17747 @opindex F
17748 Add the framework directory @var{dir} to the head of the list of
17749 directories to be searched for header files.  These directories are
17750 interleaved with those specified by @option{-I} options and are
17751 scanned in a left-to-right order.
17753 A framework directory is a directory with frameworks in it.  A
17754 framework is a directory with a @file{Headers} and/or
17755 @file{PrivateHeaders} directory contained directly in it that ends
17756 in @file{.framework}.  The name of a framework is the name of this
17757 directory excluding the @file{.framework}.  Headers associated with
17758 the framework are found in one of those two directories, with
17759 @file{Headers} being searched first.  A subframework is a framework
17760 directory that is in a framework's @file{Frameworks} directory.
17761 Includes of subframework headers can only appear in a header of a
17762 framework that contains the subframework, or in a sibling subframework
17763 header.  Two subframeworks are siblings if they occur in the same
17764 framework.  A subframework should not have the same name as a
17765 framework; a warning is issued if this is violated.  Currently a
17766 subframework cannot have subframeworks; in the future, the mechanism
17767 may be extended to support this.  The standard frameworks can be found
17768 in @file{/System/Library/Frameworks} and
17769 @file{/Library/Frameworks}.  An example include looks like
17770 @code{#include <Framework/header.h>}, where @file{Framework} denotes
17771 the name of the framework and @file{header.h} is found in the
17772 @file{PrivateHeaders} or @file{Headers} directory.
17774 @item -iframework@var{dir}
17775 @opindex iframework
17776 Like @option{-F} except the directory is a treated as a system
17777 directory.  The main difference between this @option{-iframework} and
17778 @option{-F} is that with @option{-iframework} the compiler does not
17779 warn about constructs contained within header files found via
17780 @var{dir}.  This option is valid only for the C family of languages.
17782 @item -gused
17783 @opindex gused
17784 Emit debugging information for symbols that are used.  For stabs
17785 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
17786 This is by default ON@.
17788 @item -gfull
17789 @opindex gfull
17790 Emit debugging information for all symbols and types.
17792 @item -mmacosx-version-min=@var{version}
17793 The earliest version of MacOS X that this executable will run on
17794 is @var{version}.  Typical values of @var{version} include @code{10.1},
17795 @code{10.2}, and @code{10.3.9}.
17797 If the compiler was built to use the system's headers by default,
17798 then the default for this option is the system version on which the
17799 compiler is running, otherwise the default is to make choices that
17800 are compatible with as many systems and code bases as possible.
17802 @item -mkernel
17803 @opindex mkernel
17804 Enable kernel development mode.  The @option{-mkernel} option sets
17805 @option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
17806 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
17807 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
17808 applicable.  This mode also sets @option{-mno-altivec},
17809 @option{-msoft-float}, @option{-fno-builtin} and
17810 @option{-mlong-branch} for PowerPC targets.
17812 @item -mone-byte-bool
17813 @opindex mone-byte-bool
17814 Override the defaults for @code{bool} so that @code{sizeof(bool)==1}.
17815 By default @code{sizeof(bool)} is @code{4} when compiling for
17816 Darwin/PowerPC and @code{1} when compiling for Darwin/x86, so this
17817 option has no effect on x86.
17819 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
17820 to generate code that is not binary compatible with code generated
17821 without that switch.  Using this switch may require recompiling all
17822 other modules in a program, including system libraries.  Use this
17823 switch to conform to a non-default data model.
17825 @item -mfix-and-continue
17826 @itemx -ffix-and-continue
17827 @itemx -findirect-data
17828 @opindex mfix-and-continue
17829 @opindex ffix-and-continue
17830 @opindex findirect-data
17831 Generate code suitable for fast turnaround development, such as to
17832 allow GDB to dynamically load @file{.o} files into already-running
17833 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
17834 are provided for backwards compatibility.
17836 @item -all_load
17837 @opindex all_load
17838 Loads all members of static archive libraries.
17839 See man ld(1) for more information.
17841 @item -arch_errors_fatal
17842 @opindex arch_errors_fatal
17843 Cause the errors having to do with files that have the wrong architecture
17844 to be fatal.
17846 @item -bind_at_load
17847 @opindex bind_at_load
17848 Causes the output file to be marked such that the dynamic linker will
17849 bind all undefined references when the file is loaded or launched.
17851 @item -bundle
17852 @opindex bundle
17853 Produce a Mach-o bundle format file.
17854 See man ld(1) for more information.
17856 @item -bundle_loader @var{executable}
17857 @opindex bundle_loader
17858 This option specifies the @var{executable} that will load the build
17859 output file being linked.  See man ld(1) for more information.
17861 @item -dynamiclib
17862 @opindex dynamiclib
17863 When passed this option, GCC produces a dynamic library instead of
17864 an executable when linking, using the Darwin @file{libtool} command.
17866 @item -force_cpusubtype_ALL
17867 @opindex force_cpusubtype_ALL
17868 This causes GCC's output file to have the @samp{ALL} subtype, instead of
17869 one controlled by the @option{-mcpu} or @option{-march} option.
17871 @item -allowable_client  @var{client_name}
17872 @itemx -client_name
17873 @itemx -compatibility_version
17874 @itemx -current_version
17875 @itemx -dead_strip
17876 @itemx -dependency-file
17877 @itemx -dylib_file
17878 @itemx -dylinker_install_name
17879 @itemx -dynamic
17880 @itemx -exported_symbols_list
17881 @itemx -filelist
17882 @need 800
17883 @itemx -flat_namespace
17884 @itemx -force_flat_namespace
17885 @itemx -headerpad_max_install_names
17886 @itemx -image_base
17887 @itemx -init
17888 @itemx -install_name
17889 @itemx -keep_private_externs
17890 @itemx -multi_module
17891 @itemx -multiply_defined
17892 @itemx -multiply_defined_unused
17893 @need 800
17894 @itemx -noall_load
17895 @itemx -no_dead_strip_inits_and_terms
17896 @itemx -nofixprebinding
17897 @itemx -nomultidefs
17898 @itemx -noprebind
17899 @itemx -noseglinkedit
17900 @itemx -pagezero_size
17901 @itemx -prebind
17902 @itemx -prebind_all_twolevel_modules
17903 @itemx -private_bundle
17904 @need 800
17905 @itemx -read_only_relocs
17906 @itemx -sectalign
17907 @itemx -sectobjectsymbols
17908 @itemx -whyload
17909 @itemx -seg1addr
17910 @itemx -sectcreate
17911 @itemx -sectobjectsymbols
17912 @itemx -sectorder
17913 @itemx -segaddr
17914 @itemx -segs_read_only_addr
17915 @need 800
17916 @itemx -segs_read_write_addr
17917 @itemx -seg_addr_table
17918 @itemx -seg_addr_table_filename
17919 @itemx -seglinkedit
17920 @itemx -segprot
17921 @itemx -segs_read_only_addr
17922 @itemx -segs_read_write_addr
17923 @itemx -single_module
17924 @itemx -static
17925 @itemx -sub_library
17926 @need 800
17927 @itemx -sub_umbrella
17928 @itemx -twolevel_namespace
17929 @itemx -umbrella
17930 @itemx -undefined
17931 @itemx -unexported_symbols_list
17932 @itemx -weak_reference_mismatches
17933 @itemx -whatsloaded
17934 @opindex allowable_client
17935 @opindex client_name
17936 @opindex compatibility_version
17937 @opindex current_version
17938 @opindex dead_strip
17939 @opindex dependency-file
17940 @opindex dylib_file
17941 @opindex dylinker_install_name
17942 @opindex dynamic
17943 @opindex exported_symbols_list
17944 @opindex filelist
17945 @opindex flat_namespace
17946 @opindex force_flat_namespace
17947 @opindex headerpad_max_install_names
17948 @opindex image_base
17949 @opindex init
17950 @opindex install_name
17951 @opindex keep_private_externs
17952 @opindex multi_module
17953 @opindex multiply_defined
17954 @opindex multiply_defined_unused
17955 @opindex noall_load
17956 @opindex no_dead_strip_inits_and_terms
17957 @opindex nofixprebinding
17958 @opindex nomultidefs
17959 @opindex noprebind
17960 @opindex noseglinkedit
17961 @opindex pagezero_size
17962 @opindex prebind
17963 @opindex prebind_all_twolevel_modules
17964 @opindex private_bundle
17965 @opindex read_only_relocs
17966 @opindex sectalign
17967 @opindex sectobjectsymbols
17968 @opindex whyload
17969 @opindex seg1addr
17970 @opindex sectcreate
17971 @opindex sectobjectsymbols
17972 @opindex sectorder
17973 @opindex segaddr
17974 @opindex segs_read_only_addr
17975 @opindex segs_read_write_addr
17976 @opindex seg_addr_table
17977 @opindex seg_addr_table_filename
17978 @opindex seglinkedit
17979 @opindex segprot
17980 @opindex segs_read_only_addr
17981 @opindex segs_read_write_addr
17982 @opindex single_module
17983 @opindex static
17984 @opindex sub_library
17985 @opindex sub_umbrella
17986 @opindex twolevel_namespace
17987 @opindex umbrella
17988 @opindex undefined
17989 @opindex unexported_symbols_list
17990 @opindex weak_reference_mismatches
17991 @opindex whatsloaded
17992 These options are passed to the Darwin linker.  The Darwin linker man page
17993 describes them in detail.
17994 @end table
17996 @node DEC Alpha Options
17997 @subsection DEC Alpha Options
17999 These @samp{-m} options are defined for the DEC Alpha implementations:
18001 @table @gcctabopt
18002 @item -mno-soft-float
18003 @itemx -msoft-float
18004 @opindex mno-soft-float
18005 @opindex msoft-float
18006 Use (do not use) the hardware floating-point instructions for
18007 floating-point operations.  When @option{-msoft-float} is specified,
18008 functions in @file{libgcc.a} are used to perform floating-point
18009 operations.  Unless they are replaced by routines that emulate the
18010 floating-point operations, or compiled in such a way as to call such
18011 emulations routines, these routines issue floating-point
18012 operations.   If you are compiling for an Alpha without floating-point
18013 operations, you must ensure that the library is built so as not to call
18014 them.
18016 Note that Alpha implementations without floating-point operations are
18017 required to have floating-point registers.
18019 @item -mfp-reg
18020 @itemx -mno-fp-regs
18021 @opindex mfp-reg
18022 @opindex mno-fp-regs
18023 Generate code that uses (does not use) the floating-point register set.
18024 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
18025 register set is not used, floating-point operands are passed in integer
18026 registers as if they were integers and floating-point results are passed
18027 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
18028 so any function with a floating-point argument or return value called by code
18029 compiled with @option{-mno-fp-regs} must also be compiled with that
18030 option.
18032 A typical use of this option is building a kernel that does not use,
18033 and hence need not save and restore, any floating-point registers.
18035 @item -mieee
18036 @opindex mieee
18037 The Alpha architecture implements floating-point hardware optimized for
18038 maximum performance.  It is mostly compliant with the IEEE floating-point
18039 standard.  However, for full compliance, software assistance is
18040 required.  This option generates code fully IEEE-compliant code
18041 @emph{except} that the @var{inexact-flag} is not maintained (see below).
18042 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
18043 defined during compilation.  The resulting code is less efficient but is
18044 able to correctly support denormalized numbers and exceptional IEEE
18045 values such as not-a-number and plus/minus infinity.  Other Alpha
18046 compilers call this option @option{-ieee_with_no_inexact}.
18048 @item -mieee-with-inexact
18049 @opindex mieee-with-inexact
18050 This is like @option{-mieee} except the generated code also maintains
18051 the IEEE @var{inexact-flag}.  Turning on this option causes the
18052 generated code to implement fully-compliant IEEE math.  In addition to
18053 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
18054 macro.  On some Alpha implementations the resulting code may execute
18055 significantly slower than the code generated by default.  Since there is
18056 very little code that depends on the @var{inexact-flag}, you should
18057 normally not specify this option.  Other Alpha compilers call this
18058 option @option{-ieee_with_inexact}.
18060 @item -mfp-trap-mode=@var{trap-mode}
18061 @opindex mfp-trap-mode
18062 This option controls what floating-point related traps are enabled.
18063 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
18064 The trap mode can be set to one of four values:
18066 @table @samp
18067 @item n
18068 This is the default (normal) setting.  The only traps that are enabled
18069 are the ones that cannot be disabled in software (e.g., division by zero
18070 trap).
18072 @item u
18073 In addition to the traps enabled by @samp{n}, underflow traps are enabled
18074 as well.
18076 @item su
18077 Like @samp{u}, but the instructions are marked to be safe for software
18078 completion (see Alpha architecture manual for details).
18080 @item sui
18081 Like @samp{su}, but inexact traps are enabled as well.
18082 @end table
18084 @item -mfp-rounding-mode=@var{rounding-mode}
18085 @opindex mfp-rounding-mode
18086 Selects the IEEE rounding mode.  Other Alpha compilers call this option
18087 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
18090 @table @samp
18091 @item n
18092 Normal IEEE rounding mode.  Floating-point numbers are rounded towards
18093 the nearest machine number or towards the even machine number in case
18094 of a tie.
18096 @item m
18097 Round towards minus infinity.
18099 @item c
18100 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
18102 @item d
18103 Dynamic rounding mode.  A field in the floating-point control register
18104 (@var{fpcr}, see Alpha architecture reference manual) controls the
18105 rounding mode in effect.  The C library initializes this register for
18106 rounding towards plus infinity.  Thus, unless your program modifies the
18107 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
18108 @end table
18110 @item -mtrap-precision=@var{trap-precision}
18111 @opindex mtrap-precision
18112 In the Alpha architecture, floating-point traps are imprecise.  This
18113 means without software assistance it is impossible to recover from a
18114 floating trap and program execution normally needs to be terminated.
18115 GCC can generate code that can assist operating system trap handlers
18116 in determining the exact location that caused a floating-point trap.
18117 Depending on the requirements of an application, different levels of
18118 precisions can be selected:
18120 @table @samp
18121 @item p
18122 Program precision.  This option is the default and means a trap handler
18123 can only identify which program caused a floating-point exception.
18125 @item f
18126 Function precision.  The trap handler can determine the function that
18127 caused a floating-point exception.
18129 @item i
18130 Instruction precision.  The trap handler can determine the exact
18131 instruction that caused a floating-point exception.
18132 @end table
18134 Other Alpha compilers provide the equivalent options called
18135 @option{-scope_safe} and @option{-resumption_safe}.
18137 @item -mieee-conformant
18138 @opindex mieee-conformant
18139 This option marks the generated code as IEEE conformant.  You must not
18140 use this option unless you also specify @option{-mtrap-precision=i} and either
18141 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
18142 is to emit the line @samp{.eflag 48} in the function prologue of the
18143 generated assembly file.
18145 @item -mbuild-constants
18146 @opindex mbuild-constants
18147 Normally GCC examines a 32- or 64-bit integer constant to
18148 see if it can construct it from smaller constants in two or three
18149 instructions.  If it cannot, it outputs the constant as a literal and
18150 generates code to load it from the data segment at run time.
18152 Use this option to require GCC to construct @emph{all} integer constants
18153 using code, even if it takes more instructions (the maximum is six).
18155 You typically use this option to build a shared library dynamic
18156 loader.  Itself a shared library, it must relocate itself in memory
18157 before it can find the variables and constants in its own data segment.
18159 @item -mbwx
18160 @itemx -mno-bwx
18161 @itemx -mcix
18162 @itemx -mno-cix
18163 @itemx -mfix
18164 @itemx -mno-fix
18165 @itemx -mmax
18166 @itemx -mno-max
18167 @opindex mbwx
18168 @opindex mno-bwx
18169 @opindex mcix
18170 @opindex mno-cix
18171 @opindex mfix
18172 @opindex mno-fix
18173 @opindex mmax
18174 @opindex mno-max
18175 Indicate whether GCC should generate code to use the optional BWX,
18176 CIX, FIX and MAX instruction sets.  The default is to use the instruction
18177 sets supported by the CPU type specified via @option{-mcpu=} option or that
18178 of the CPU on which GCC was built if none is specified.
18180 @item -mfloat-vax
18181 @itemx -mfloat-ieee
18182 @opindex mfloat-vax
18183 @opindex mfloat-ieee
18184 Generate code that uses (does not use) VAX F and G floating-point
18185 arithmetic instead of IEEE single and double precision.
18187 @item -mexplicit-relocs
18188 @itemx -mno-explicit-relocs
18189 @opindex mexplicit-relocs
18190 @opindex mno-explicit-relocs
18191 Older Alpha assemblers provided no way to generate symbol relocations
18192 except via assembler macros.  Use of these macros does not allow
18193 optimal instruction scheduling.  GNU binutils as of version 2.12
18194 supports a new syntax that allows the compiler to explicitly mark
18195 which relocations should apply to which instructions.  This option
18196 is mostly useful for debugging, as GCC detects the capabilities of
18197 the assembler when it is built and sets the default accordingly.
18199 @item -msmall-data
18200 @itemx -mlarge-data
18201 @opindex msmall-data
18202 @opindex mlarge-data
18203 When @option{-mexplicit-relocs} is in effect, static data is
18204 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
18205 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
18206 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
18207 16-bit relocations off of the @code{$gp} register.  This limits the
18208 size of the small data area to 64KB, but allows the variables to be
18209 directly accessed via a single instruction.
18211 The default is @option{-mlarge-data}.  With this option the data area
18212 is limited to just below 2GB@.  Programs that require more than 2GB of
18213 data must use @code{malloc} or @code{mmap} to allocate the data in the
18214 heap instead of in the program's data segment.
18216 When generating code for shared libraries, @option{-fpic} implies
18217 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
18219 @item -msmall-text
18220 @itemx -mlarge-text
18221 @opindex msmall-text
18222 @opindex mlarge-text
18223 When @option{-msmall-text} is used, the compiler assumes that the
18224 code of the entire program (or shared library) fits in 4MB, and is
18225 thus reachable with a branch instruction.  When @option{-msmall-data}
18226 is used, the compiler can assume that all local symbols share the
18227 same @code{$gp} value, and thus reduce the number of instructions
18228 required for a function call from 4 to 1.
18230 The default is @option{-mlarge-text}.
18232 @item -mcpu=@var{cpu_type}
18233 @opindex mcpu
18234 Set the instruction set and instruction scheduling parameters for
18235 machine type @var{cpu_type}.  You can specify either the @samp{EV}
18236 style name or the corresponding chip number.  GCC supports scheduling
18237 parameters for the EV4, EV5 and EV6 family of processors and
18238 chooses the default values for the instruction set from the processor
18239 you specify.  If you do not specify a processor type, GCC defaults
18240 to the processor on which the compiler was built.
18242 Supported values for @var{cpu_type} are
18244 @table @samp
18245 @item ev4
18246 @itemx ev45
18247 @itemx 21064
18248 Schedules as an EV4 and has no instruction set extensions.
18250 @item ev5
18251 @itemx 21164
18252 Schedules as an EV5 and has no instruction set extensions.
18254 @item ev56
18255 @itemx 21164a
18256 Schedules as an EV5 and supports the BWX extension.
18258 @item pca56
18259 @itemx 21164pc
18260 @itemx 21164PC
18261 Schedules as an EV5 and supports the BWX and MAX extensions.
18263 @item ev6
18264 @itemx 21264
18265 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
18267 @item ev67
18268 @itemx 21264a
18269 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
18270 @end table
18272 Native toolchains also support the value @samp{native},
18273 which selects the best architecture option for the host processor.
18274 @option{-mcpu=native} has no effect if GCC does not recognize
18275 the processor.
18277 @item -mtune=@var{cpu_type}
18278 @opindex mtune
18279 Set only the instruction scheduling parameters for machine type
18280 @var{cpu_type}.  The instruction set is not changed.
18282 Native toolchains also support the value @samp{native},
18283 which selects the best architecture option for the host processor.
18284 @option{-mtune=native} has no effect if GCC does not recognize
18285 the processor.
18287 @item -mmemory-latency=@var{time}
18288 @opindex mmemory-latency
18289 Sets the latency the scheduler should assume for typical memory
18290 references as seen by the application.  This number is highly
18291 dependent on the memory access patterns used by the application
18292 and the size of the external cache on the machine.
18294 Valid options for @var{time} are
18296 @table @samp
18297 @item @var{number}
18298 A decimal number representing clock cycles.
18300 @item L1
18301 @itemx L2
18302 @itemx L3
18303 @itemx main
18304 The compiler contains estimates of the number of clock cycles for
18305 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
18306 (also called Dcache, Scache, and Bcache), as well as to main memory.
18307 Note that L3 is only valid for EV5.
18309 @end table
18310 @end table
18312 @node FR30 Options
18313 @subsection FR30 Options
18314 @cindex FR30 Options
18316 These options are defined specifically for the FR30 port.
18318 @table @gcctabopt
18320 @item -msmall-model
18321 @opindex msmall-model
18322 Use the small address space model.  This can produce smaller code, but
18323 it does assume that all symbolic values and addresses fit into a
18324 20-bit range.
18326 @item -mno-lsim
18327 @opindex mno-lsim
18328 Assume that runtime support has been provided and so there is no need
18329 to include the simulator library (@file{libsim.a}) on the linker
18330 command line.
18332 @end table
18334 @node FT32 Options
18335 @subsection FT32 Options
18336 @cindex FT32 Options
18338 These options are defined specifically for the FT32 port.
18340 @table @gcctabopt
18342 @item -msim
18343 @opindex msim
18344 Specifies that the program will be run on the simulator.  This causes
18345 an alternate runtime startup and library to be linked.
18346 You must not use this option when generating programs that will run on
18347 real hardware; you must provide your own runtime library for whatever
18348 I/O functions are needed.
18350 @item -mlra
18351 @opindex mlra
18352 Enable Local Register Allocation.  This is still experimental for FT32,
18353 so by default the compiler uses standard reload.
18355 @item -mnodiv
18356 @opindex mnodiv
18357 Do not use div and mod instructions.
18359 @item -mft32b
18360 @opindex mft32b
18361 Enable use of the extended instructions of the FT32B processor.
18363 @item -mcompress
18364 @opindex mcompress
18365 Compress all code using the Ft32B code compression scheme.
18367 @item -mnopm
18368 @opindex  mnopm
18369 Do not generate code that reads program memory.
18371 @end table
18373 @node FRV Options
18374 @subsection FRV Options
18375 @cindex FRV Options
18377 @table @gcctabopt
18378 @item -mgpr-32
18379 @opindex mgpr-32
18381 Only use the first 32 general-purpose registers.
18383 @item -mgpr-64
18384 @opindex mgpr-64
18386 Use all 64 general-purpose registers.
18388 @item -mfpr-32
18389 @opindex mfpr-32
18391 Use only the first 32 floating-point registers.
18393 @item -mfpr-64
18394 @opindex mfpr-64
18396 Use all 64 floating-point registers.
18398 @item -mhard-float
18399 @opindex mhard-float
18401 Use hardware instructions for floating-point operations.
18403 @item -msoft-float
18404 @opindex msoft-float
18406 Use library routines for floating-point operations.
18408 @item -malloc-cc
18409 @opindex malloc-cc
18411 Dynamically allocate condition code registers.
18413 @item -mfixed-cc
18414 @opindex mfixed-cc
18416 Do not try to dynamically allocate condition code registers, only
18417 use @code{icc0} and @code{fcc0}.
18419 @item -mdword
18420 @opindex mdword
18422 Change ABI to use double word insns.
18424 @item -mno-dword
18425 @opindex mno-dword
18427 Do not use double word instructions.
18429 @item -mdouble
18430 @opindex mdouble
18432 Use floating-point double instructions.
18434 @item -mno-double
18435 @opindex mno-double
18437 Do not use floating-point double instructions.
18439 @item -mmedia
18440 @opindex mmedia
18442 Use media instructions.
18444 @item -mno-media
18445 @opindex mno-media
18447 Do not use media instructions.
18449 @item -mmuladd
18450 @opindex mmuladd
18452 Use multiply and add/subtract instructions.
18454 @item -mno-muladd
18455 @opindex mno-muladd
18457 Do not use multiply and add/subtract instructions.
18459 @item -mfdpic
18460 @opindex mfdpic
18462 Select the FDPIC ABI, which uses function descriptors to represent
18463 pointers to functions.  Without any PIC/PIE-related options, it
18464 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
18465 assumes GOT entries and small data are within a 12-bit range from the
18466 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
18467 are computed with 32 bits.
18468 With a @samp{bfin-elf} target, this option implies @option{-msim}.
18470 @item -minline-plt
18471 @opindex minline-plt
18473 Enable inlining of PLT entries in function calls to functions that are
18474 not known to bind locally.  It has no effect without @option{-mfdpic}.
18475 It's enabled by default if optimizing for speed and compiling for
18476 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
18477 optimization option such as @option{-O3} or above is present in the
18478 command line.
18480 @item -mTLS
18481 @opindex mTLS
18483 Assume a large TLS segment when generating thread-local code.
18485 @item -mtls
18486 @opindex mtls
18488 Do not assume a large TLS segment when generating thread-local code.
18490 @item -mgprel-ro
18491 @opindex mgprel-ro
18493 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
18494 that is known to be in read-only sections.  It's enabled by default,
18495 except for @option{-fpic} or @option{-fpie}: even though it may help
18496 make the global offset table smaller, it trades 1 instruction for 4.
18497 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
18498 one of which may be shared by multiple symbols, and it avoids the need
18499 for a GOT entry for the referenced symbol, so it's more likely to be a
18500 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
18502 @item -multilib-library-pic
18503 @opindex multilib-library-pic
18505 Link with the (library, not FD) pic libraries.  It's implied by
18506 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
18507 @option{-fpic} without @option{-mfdpic}.  You should never have to use
18508 it explicitly.
18510 @item -mlinked-fp
18511 @opindex mlinked-fp
18513 Follow the EABI requirement of always creating a frame pointer whenever
18514 a stack frame is allocated.  This option is enabled by default and can
18515 be disabled with @option{-mno-linked-fp}.
18517 @item -mlong-calls
18518 @opindex mlong-calls
18520 Use indirect addressing to call functions outside the current
18521 compilation unit.  This allows the functions to be placed anywhere
18522 within the 32-bit address space.
18524 @item -malign-labels
18525 @opindex malign-labels
18527 Try to align labels to an 8-byte boundary by inserting NOPs into the
18528 previous packet.  This option only has an effect when VLIW packing
18529 is enabled.  It doesn't create new packets; it merely adds NOPs to
18530 existing ones.
18532 @item -mlibrary-pic
18533 @opindex mlibrary-pic
18535 Generate position-independent EABI code.
18537 @item -macc-4
18538 @opindex macc-4
18540 Use only the first four media accumulator registers.
18542 @item -macc-8
18543 @opindex macc-8
18545 Use all eight media accumulator registers.
18547 @item -mpack
18548 @opindex mpack
18550 Pack VLIW instructions.
18552 @item -mno-pack
18553 @opindex mno-pack
18555 Do not pack VLIW instructions.
18557 @item -mno-eflags
18558 @opindex mno-eflags
18560 Do not mark ABI switches in e_flags.
18562 @item -mcond-move
18563 @opindex mcond-move
18565 Enable the use of conditional-move instructions (default).
18567 This switch is mainly for debugging the compiler and will likely be removed
18568 in a future version.
18570 @item -mno-cond-move
18571 @opindex mno-cond-move
18573 Disable the use of conditional-move instructions.
18575 This switch is mainly for debugging the compiler and will likely be removed
18576 in a future version.
18578 @item -mscc
18579 @opindex mscc
18581 Enable the use of conditional set instructions (default).
18583 This switch is mainly for debugging the compiler and will likely be removed
18584 in a future version.
18586 @item -mno-scc
18587 @opindex mno-scc
18589 Disable the use of conditional set instructions.
18591 This switch is mainly for debugging the compiler and will likely be removed
18592 in a future version.
18594 @item -mcond-exec
18595 @opindex mcond-exec
18597 Enable the use of conditional execution (default).
18599 This switch is mainly for debugging the compiler and will likely be removed
18600 in a future version.
18602 @item -mno-cond-exec
18603 @opindex mno-cond-exec
18605 Disable the use of conditional execution.
18607 This switch is mainly for debugging the compiler and will likely be removed
18608 in a future version.
18610 @item -mvliw-branch
18611 @opindex mvliw-branch
18613 Run a pass to pack branches into VLIW instructions (default).
18615 This switch is mainly for debugging the compiler and will likely be removed
18616 in a future version.
18618 @item -mno-vliw-branch
18619 @opindex mno-vliw-branch
18621 Do not run a pass to pack branches into VLIW instructions.
18623 This switch is mainly for debugging the compiler and will likely be removed
18624 in a future version.
18626 @item -mmulti-cond-exec
18627 @opindex mmulti-cond-exec
18629 Enable optimization of @code{&&} and @code{||} in conditional execution
18630 (default).
18632 This switch is mainly for debugging the compiler and will likely be removed
18633 in a future version.
18635 @item -mno-multi-cond-exec
18636 @opindex mno-multi-cond-exec
18638 Disable optimization of @code{&&} and @code{||} in conditional execution.
18640 This switch is mainly for debugging the compiler and will likely be removed
18641 in a future version.
18643 @item -mnested-cond-exec
18644 @opindex mnested-cond-exec
18646 Enable nested conditional execution optimizations (default).
18648 This switch is mainly for debugging the compiler and will likely be removed
18649 in a future version.
18651 @item -mno-nested-cond-exec
18652 @opindex mno-nested-cond-exec
18654 Disable nested conditional execution optimizations.
18656 This switch is mainly for debugging the compiler and will likely be removed
18657 in a future version.
18659 @item -moptimize-membar
18660 @opindex moptimize-membar
18662 This switch removes redundant @code{membar} instructions from the
18663 compiler-generated code.  It is enabled by default.
18665 @item -mno-optimize-membar
18666 @opindex mno-optimize-membar
18668 This switch disables the automatic removal of redundant @code{membar}
18669 instructions from the generated code.
18671 @item -mtomcat-stats
18672 @opindex mtomcat-stats
18674 Cause gas to print out tomcat statistics.
18676 @item -mcpu=@var{cpu}
18677 @opindex mcpu
18679 Select the processor type for which to generate code.  Possible values are
18680 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
18681 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
18683 @end table
18685 @node GNU/Linux Options
18686 @subsection GNU/Linux Options
18688 These @samp{-m} options are defined for GNU/Linux targets:
18690 @table @gcctabopt
18691 @item -mglibc
18692 @opindex mglibc
18693 Use the GNU C library.  This is the default except
18694 on @samp{*-*-linux-*uclibc*}, @samp{*-*-linux-*musl*} and
18695 @samp{*-*-linux-*android*} targets.
18697 @item -muclibc
18698 @opindex muclibc
18699 Use uClibc C library.  This is the default on
18700 @samp{*-*-linux-*uclibc*} targets.
18702 @item -mmusl
18703 @opindex mmusl
18704 Use the musl C library.  This is the default on
18705 @samp{*-*-linux-*musl*} targets.
18707 @item -mbionic
18708 @opindex mbionic
18709 Use Bionic C library.  This is the default on
18710 @samp{*-*-linux-*android*} targets.
18712 @item -mandroid
18713 @opindex mandroid
18714 Compile code compatible with Android platform.  This is the default on
18715 @samp{*-*-linux-*android*} targets.
18717 When compiling, this option enables @option{-mbionic}, @option{-fPIC},
18718 @option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
18719 this option makes the GCC driver pass Android-specific options to the linker.
18720 Finally, this option causes the preprocessor macro @code{__ANDROID__}
18721 to be defined.
18723 @item -tno-android-cc
18724 @opindex tno-android-cc
18725 Disable compilation effects of @option{-mandroid}, i.e., do not enable
18726 @option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
18727 @option{-fno-rtti} by default.
18729 @item -tno-android-ld
18730 @opindex tno-android-ld
18731 Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
18732 linking options to the linker.
18734 @end table
18736 @node H8/300 Options
18737 @subsection H8/300 Options
18739 These @samp{-m} options are defined for the H8/300 implementations:
18741 @table @gcctabopt
18742 @item -mrelax
18743 @opindex mrelax
18744 Shorten some address references at link time, when possible; uses the
18745 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
18746 ld, Using ld}, for a fuller description.
18748 @item -mh
18749 @opindex mh
18750 Generate code for the H8/300H@.
18752 @item -ms
18753 @opindex ms
18754 Generate code for the H8S@.
18756 @item -mn
18757 @opindex mn
18758 Generate code for the H8S and H8/300H in the normal mode.  This switch
18759 must be used either with @option{-mh} or @option{-ms}.
18761 @item -ms2600
18762 @opindex ms2600
18763 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
18765 @item -mexr
18766 @opindex mexr
18767 Extended registers are stored on stack before execution of function
18768 with monitor attribute. Default option is @option{-mexr}.
18769 This option is valid only for H8S targets.
18771 @item -mno-exr
18772 @opindex mno-exr
18773 Extended registers are not stored on stack before execution of function 
18774 with monitor attribute. Default option is @option{-mno-exr}. 
18775 This option is valid only for H8S targets.
18777 @item -mint32
18778 @opindex mint32
18779 Make @code{int} data 32 bits by default.
18781 @item -malign-300
18782 @opindex malign-300
18783 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
18784 The default for the H8/300H and H8S is to align longs and floats on
18785 4-byte boundaries.
18786 @option{-malign-300} causes them to be aligned on 2-byte boundaries.
18787 This option has no effect on the H8/300.
18788 @end table
18790 @node HPPA Options
18791 @subsection HPPA Options
18792 @cindex HPPA Options
18794 These @samp{-m} options are defined for the HPPA family of computers:
18796 @table @gcctabopt
18797 @item -march=@var{architecture-type}
18798 @opindex march
18799 Generate code for the specified architecture.  The choices for
18800 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
18801 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
18802 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
18803 architecture option for your machine.  Code compiled for lower numbered
18804 architectures runs on higher numbered architectures, but not the
18805 other way around.
18807 @item -mpa-risc-1-0
18808 @itemx -mpa-risc-1-1
18809 @itemx -mpa-risc-2-0
18810 @opindex mpa-risc-1-0
18811 @opindex mpa-risc-1-1
18812 @opindex mpa-risc-2-0
18813 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
18815 @item -mcaller-copies
18816 @opindex mcaller-copies
18817 The caller copies function arguments passed by hidden reference.  This
18818 option should be used with care as it is not compatible with the default
18819 32-bit runtime.  However, only aggregates larger than eight bytes are
18820 passed by hidden reference and the option provides better compatibility
18821 with OpenMP.
18823 @item -mjump-in-delay
18824 @opindex mjump-in-delay
18825 This option is ignored and provided for compatibility purposes only.
18827 @item -mdisable-fpregs
18828 @opindex mdisable-fpregs
18829 Prevent floating-point registers from being used in any manner.  This is
18830 necessary for compiling kernels that perform lazy context switching of
18831 floating-point registers.  If you use this option and attempt to perform
18832 floating-point operations, the compiler aborts.
18834 @item -mdisable-indexing
18835 @opindex mdisable-indexing
18836 Prevent the compiler from using indexing address modes.  This avoids some
18837 rather obscure problems when compiling MIG generated code under MACH@.
18839 @item -mno-space-regs
18840 @opindex mno-space-regs
18841 Generate code that assumes the target has no space registers.  This allows
18842 GCC to generate faster indirect calls and use unscaled index address modes.
18844 Such code is suitable for level 0 PA systems and kernels.
18846 @item -mfast-indirect-calls
18847 @opindex mfast-indirect-calls
18848 Generate code that assumes calls never cross space boundaries.  This
18849 allows GCC to emit code that performs faster indirect calls.
18851 This option does not work in the presence of shared libraries or nested
18852 functions.
18854 @item -mfixed-range=@var{register-range}
18855 @opindex mfixed-range
18856 Generate code treating the given register range as fixed registers.
18857 A fixed register is one that the register allocator cannot use.  This is
18858 useful when compiling kernel code.  A register range is specified as
18859 two registers separated by a dash.  Multiple register ranges can be
18860 specified separated by a comma.
18862 @item -mlong-load-store
18863 @opindex mlong-load-store
18864 Generate 3-instruction load and store sequences as sometimes required by
18865 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
18866 the HP compilers.
18868 @item -mportable-runtime
18869 @opindex mportable-runtime
18870 Use the portable calling conventions proposed by HP for ELF systems.
18872 @item -mgas
18873 @opindex mgas
18874 Enable the use of assembler directives only GAS understands.
18876 @item -mschedule=@var{cpu-type}
18877 @opindex mschedule
18878 Schedule code according to the constraints for the machine type
18879 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
18880 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
18881 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
18882 proper scheduling option for your machine.  The default scheduling is
18883 @samp{8000}.
18885 @item -mlinker-opt
18886 @opindex mlinker-opt
18887 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
18888 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
18889 linkers in which they give bogus error messages when linking some programs.
18891 @item -msoft-float
18892 @opindex msoft-float
18893 Generate output containing library calls for floating point.
18894 @strong{Warning:} the requisite libraries are not available for all HPPA
18895 targets.  Normally the facilities of the machine's usual C compiler are
18896 used, but this cannot be done directly in cross-compilation.  You must make
18897 your own arrangements to provide suitable library functions for
18898 cross-compilation.
18900 @option{-msoft-float} changes the calling convention in the output file;
18901 therefore, it is only useful if you compile @emph{all} of a program with
18902 this option.  In particular, you need to compile @file{libgcc.a}, the
18903 library that comes with GCC, with @option{-msoft-float} in order for
18904 this to work.
18906 @item -msio
18907 @opindex msio
18908 Generate the predefine, @code{_SIO}, for server IO@.  The default is
18909 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
18910 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
18911 options are available under HP-UX and HI-UX@.
18913 @item -mgnu-ld
18914 @opindex mgnu-ld
18915 Use options specific to GNU @command{ld}.
18916 This passes @option{-shared} to @command{ld} when
18917 building a shared library.  It is the default when GCC is configured,
18918 explicitly or implicitly, with the GNU linker.  This option does not
18919 affect which @command{ld} is called; it only changes what parameters
18920 are passed to that @command{ld}.
18921 The @command{ld} that is called is determined by the
18922 @option{--with-ld} configure option, GCC's program search path, and
18923 finally by the user's @env{PATH}.  The linker used by GCC can be printed
18924 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
18925 on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
18927 @item -mhp-ld
18928 @opindex mhp-ld
18929 Use options specific to HP @command{ld}.
18930 This passes @option{-b} to @command{ld} when building
18931 a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
18932 links.  It is the default when GCC is configured, explicitly or
18933 implicitly, with the HP linker.  This option does not affect
18934 which @command{ld} is called; it only changes what parameters are passed to that
18935 @command{ld}.
18936 The @command{ld} that is called is determined by the @option{--with-ld}
18937 configure option, GCC's program search path, and finally by the user's
18938 @env{PATH}.  The linker used by GCC can be printed using @samp{which
18939 `gcc -print-prog-name=ld`}.  This option is only available on the 64-bit
18940 HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
18942 @item -mlong-calls
18943 @opindex mno-long-calls
18944 Generate code that uses long call sequences.  This ensures that a call
18945 is always able to reach linker generated stubs.  The default is to generate
18946 long calls only when the distance from the call site to the beginning
18947 of the function or translation unit, as the case may be, exceeds a
18948 predefined limit set by the branch type being used.  The limits for
18949 normal calls are 7,600,000 and 240,000 bytes, respectively for the
18950 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
18951 240,000 bytes.
18953 Distances are measured from the beginning of functions when using the
18954 @option{-ffunction-sections} option, or when using the @option{-mgas}
18955 and @option{-mno-portable-runtime} options together under HP-UX with
18956 the SOM linker.
18958 It is normally not desirable to use this option as it degrades
18959 performance.  However, it may be useful in large applications,
18960 particularly when partial linking is used to build the application.
18962 The types of long calls used depends on the capabilities of the
18963 assembler and linker, and the type of code being generated.  The
18964 impact on systems that support long absolute calls, and long pic
18965 symbol-difference or pc-relative calls should be relatively small.
18966 However, an indirect call is used on 32-bit ELF systems in pic code
18967 and it is quite long.
18969 @item -munix=@var{unix-std}
18970 @opindex march
18971 Generate compiler predefines and select a startfile for the specified
18972 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
18973 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
18974 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
18975 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
18976 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
18977 and later.
18979 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
18980 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
18981 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
18982 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
18983 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
18984 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
18986 It is @emph{important} to note that this option changes the interfaces
18987 for various library routines.  It also affects the operational behavior
18988 of the C library.  Thus, @emph{extreme} care is needed in using this
18989 option.
18991 Library code that is intended to operate with more than one UNIX
18992 standard must test, set and restore the variable @code{__xpg4_extended_mask}
18993 as appropriate.  Most GNU software doesn't provide this capability.
18995 @item -nolibdld
18996 @opindex nolibdld
18997 Suppress the generation of link options to search libdld.sl when the
18998 @option{-static} option is specified on HP-UX 10 and later.
19000 @item -static
19001 @opindex static
19002 The HP-UX implementation of setlocale in libc has a dependency on
19003 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
19004 when the @option{-static} option is specified, special link options
19005 are needed to resolve this dependency.
19007 On HP-UX 10 and later, the GCC driver adds the necessary options to
19008 link with libdld.sl when the @option{-static} option is specified.
19009 This causes the resulting binary to be dynamic.  On the 64-bit port,
19010 the linkers generate dynamic binaries by default in any case.  The
19011 @option{-nolibdld} option can be used to prevent the GCC driver from
19012 adding these link options.
19014 @item -threads
19015 @opindex threads
19016 Add support for multithreading with the @dfn{dce thread} library
19017 under HP-UX@.  This option sets flags for both the preprocessor and
19018 linker.
19019 @end table
19021 @node IA-64 Options
19022 @subsection IA-64 Options
19023 @cindex IA-64 Options
19025 These are the @samp{-m} options defined for the Intel IA-64 architecture.
19027 @table @gcctabopt
19028 @item -mbig-endian
19029 @opindex mbig-endian
19030 Generate code for a big-endian target.  This is the default for HP-UX@.
19032 @item -mlittle-endian
19033 @opindex mlittle-endian
19034 Generate code for a little-endian target.  This is the default for AIX5
19035 and GNU/Linux.
19037 @item -mgnu-as
19038 @itemx -mno-gnu-as
19039 @opindex mgnu-as
19040 @opindex mno-gnu-as
19041 Generate (or don't) code for the GNU assembler.  This is the default.
19042 @c Also, this is the default if the configure option @option{--with-gnu-as}
19043 @c is used.
19045 @item -mgnu-ld
19046 @itemx -mno-gnu-ld
19047 @opindex mgnu-ld
19048 @opindex mno-gnu-ld
19049 Generate (or don't) code for the GNU linker.  This is the default.
19050 @c Also, this is the default if the configure option @option{--with-gnu-ld}
19051 @c is used.
19053 @item -mno-pic
19054 @opindex mno-pic
19055 Generate code that does not use a global pointer register.  The result
19056 is not position independent code, and violates the IA-64 ABI@.
19058 @item -mvolatile-asm-stop
19059 @itemx -mno-volatile-asm-stop
19060 @opindex mvolatile-asm-stop
19061 @opindex mno-volatile-asm-stop
19062 Generate (or don't) a stop bit immediately before and after volatile asm
19063 statements.
19065 @item -mregister-names
19066 @itemx -mno-register-names
19067 @opindex mregister-names
19068 @opindex mno-register-names
19069 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
19070 the stacked registers.  This may make assembler output more readable.
19072 @item -mno-sdata
19073 @itemx -msdata
19074 @opindex mno-sdata
19075 @opindex msdata
19076 Disable (or enable) optimizations that use the small data section.  This may
19077 be useful for working around optimizer bugs.
19079 @item -mconstant-gp
19080 @opindex mconstant-gp
19081 Generate code that uses a single constant global pointer value.  This is
19082 useful when compiling kernel code.
19084 @item -mauto-pic
19085 @opindex mauto-pic
19086 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
19087 This is useful when compiling firmware code.
19089 @item -minline-float-divide-min-latency
19090 @opindex minline-float-divide-min-latency
19091 Generate code for inline divides of floating-point values
19092 using the minimum latency algorithm.
19094 @item -minline-float-divide-max-throughput
19095 @opindex minline-float-divide-max-throughput
19096 Generate code for inline divides of floating-point values
19097 using the maximum throughput algorithm.
19099 @item -mno-inline-float-divide
19100 @opindex mno-inline-float-divide
19101 Do not generate inline code for divides of floating-point values.
19103 @item -minline-int-divide-min-latency
19104 @opindex minline-int-divide-min-latency
19105 Generate code for inline divides of integer values
19106 using the minimum latency algorithm.
19108 @item -minline-int-divide-max-throughput
19109 @opindex minline-int-divide-max-throughput
19110 Generate code for inline divides of integer values
19111 using the maximum throughput algorithm.
19113 @item -mno-inline-int-divide
19114 @opindex mno-inline-int-divide
19115 Do not generate inline code for divides of integer values.
19117 @item -minline-sqrt-min-latency
19118 @opindex minline-sqrt-min-latency
19119 Generate code for inline square roots
19120 using the minimum latency algorithm.
19122 @item -minline-sqrt-max-throughput
19123 @opindex minline-sqrt-max-throughput
19124 Generate code for inline square roots
19125 using the maximum throughput algorithm.
19127 @item -mno-inline-sqrt
19128 @opindex mno-inline-sqrt
19129 Do not generate inline code for @code{sqrt}.
19131 @item -mfused-madd
19132 @itemx -mno-fused-madd
19133 @opindex mfused-madd
19134 @opindex mno-fused-madd
19135 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
19136 instructions.  The default is to use these instructions.
19138 @item -mno-dwarf2-asm
19139 @itemx -mdwarf2-asm
19140 @opindex mno-dwarf2-asm
19141 @opindex mdwarf2-asm
19142 Don't (or do) generate assembler code for the DWARF line number debugging
19143 info.  This may be useful when not using the GNU assembler.
19145 @item -mearly-stop-bits
19146 @itemx -mno-early-stop-bits
19147 @opindex mearly-stop-bits
19148 @opindex mno-early-stop-bits
19149 Allow stop bits to be placed earlier than immediately preceding the
19150 instruction that triggered the stop bit.  This can improve instruction
19151 scheduling, but does not always do so.
19153 @item -mfixed-range=@var{register-range}
19154 @opindex mfixed-range
19155 Generate code treating the given register range as fixed registers.
19156 A fixed register is one that the register allocator cannot use.  This is
19157 useful when compiling kernel code.  A register range is specified as
19158 two registers separated by a dash.  Multiple register ranges can be
19159 specified separated by a comma.
19161 @item -mtls-size=@var{tls-size}
19162 @opindex mtls-size
19163 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
19166 @item -mtune=@var{cpu-type}
19167 @opindex mtune
19168 Tune the instruction scheduling for a particular CPU, Valid values are
19169 @samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
19170 and @samp{mckinley}.
19172 @item -milp32
19173 @itemx -mlp64
19174 @opindex milp32
19175 @opindex mlp64
19176 Generate code for a 32-bit or 64-bit environment.
19177 The 32-bit environment sets int, long and pointer to 32 bits.
19178 The 64-bit environment sets int to 32 bits and long and pointer
19179 to 64 bits.  These are HP-UX specific flags.
19181 @item -mno-sched-br-data-spec
19182 @itemx -msched-br-data-spec
19183 @opindex mno-sched-br-data-spec
19184 @opindex msched-br-data-spec
19185 (Dis/En)able data speculative scheduling before reload.
19186 This results in generation of @code{ld.a} instructions and
19187 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
19188 The default setting is disabled.
19190 @item -msched-ar-data-spec
19191 @itemx -mno-sched-ar-data-spec
19192 @opindex msched-ar-data-spec
19193 @opindex mno-sched-ar-data-spec
19194 (En/Dis)able data speculative scheduling after reload.
19195 This results in generation of @code{ld.a} instructions and
19196 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
19197 The default setting is enabled.
19199 @item -mno-sched-control-spec
19200 @itemx -msched-control-spec
19201 @opindex mno-sched-control-spec
19202 @opindex msched-control-spec
19203 (Dis/En)able control speculative scheduling.  This feature is
19204 available only during region scheduling (i.e.@: before reload).
19205 This results in generation of the @code{ld.s} instructions and
19206 the corresponding check instructions @code{chk.s}.
19207 The default setting is disabled.
19209 @item -msched-br-in-data-spec
19210 @itemx -mno-sched-br-in-data-spec
19211 @opindex msched-br-in-data-spec
19212 @opindex mno-sched-br-in-data-spec
19213 (En/Dis)able speculative scheduling of the instructions that
19214 are dependent on the data speculative loads before reload.
19215 This is effective only with @option{-msched-br-data-spec} enabled.
19216 The default setting is enabled.
19218 @item -msched-ar-in-data-spec
19219 @itemx -mno-sched-ar-in-data-spec
19220 @opindex msched-ar-in-data-spec
19221 @opindex mno-sched-ar-in-data-spec
19222 (En/Dis)able speculative scheduling of the instructions that
19223 are dependent on the data speculative loads after reload.
19224 This is effective only with @option{-msched-ar-data-spec} enabled.
19225 The default setting is enabled.
19227 @item -msched-in-control-spec
19228 @itemx -mno-sched-in-control-spec
19229 @opindex msched-in-control-spec
19230 @opindex mno-sched-in-control-spec
19231 (En/Dis)able speculative scheduling of the instructions that
19232 are dependent on the control speculative loads.
19233 This is effective only with @option{-msched-control-spec} enabled.
19234 The default setting is enabled.
19236 @item -mno-sched-prefer-non-data-spec-insns
19237 @itemx -msched-prefer-non-data-spec-insns
19238 @opindex mno-sched-prefer-non-data-spec-insns
19239 @opindex msched-prefer-non-data-spec-insns
19240 If enabled, data-speculative instructions are chosen for schedule
19241 only if there are no other choices at the moment.  This makes
19242 the use of the data speculation much more conservative.
19243 The default setting is disabled.
19245 @item -mno-sched-prefer-non-control-spec-insns
19246 @itemx -msched-prefer-non-control-spec-insns
19247 @opindex mno-sched-prefer-non-control-spec-insns
19248 @opindex msched-prefer-non-control-spec-insns
19249 If enabled, control-speculative instructions are chosen for schedule
19250 only if there are no other choices at the moment.  This makes
19251 the use of the control speculation much more conservative.
19252 The default setting is disabled.
19254 @item -mno-sched-count-spec-in-critical-path
19255 @itemx -msched-count-spec-in-critical-path
19256 @opindex mno-sched-count-spec-in-critical-path
19257 @opindex msched-count-spec-in-critical-path
19258 If enabled, speculative dependencies are considered during
19259 computation of the instructions priorities.  This makes the use of the
19260 speculation a bit more conservative.
19261 The default setting is disabled.
19263 @item -msched-spec-ldc
19264 @opindex msched-spec-ldc
19265 Use a simple data speculation check.  This option is on by default.
19267 @item -msched-control-spec-ldc
19268 @opindex msched-spec-ldc
19269 Use a simple check for control speculation.  This option is on by default.
19271 @item -msched-stop-bits-after-every-cycle
19272 @opindex msched-stop-bits-after-every-cycle
19273 Place a stop bit after every cycle when scheduling.  This option is on
19274 by default.
19276 @item -msched-fp-mem-deps-zero-cost
19277 @opindex msched-fp-mem-deps-zero-cost
19278 Assume that floating-point stores and loads are not likely to cause a conflict
19279 when placed into the same instruction group.  This option is disabled by
19280 default.
19282 @item -msel-sched-dont-check-control-spec
19283 @opindex msel-sched-dont-check-control-spec
19284 Generate checks for control speculation in selective scheduling.
19285 This flag is disabled by default.
19287 @item -msched-max-memory-insns=@var{max-insns}
19288 @opindex msched-max-memory-insns
19289 Limit on the number of memory insns per instruction group, giving lower
19290 priority to subsequent memory insns attempting to schedule in the same
19291 instruction group. Frequently useful to prevent cache bank conflicts.
19292 The default value is 1.
19294 @item -msched-max-memory-insns-hard-limit
19295 @opindex msched-max-memory-insns-hard-limit
19296 Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
19297 disallowing more than that number in an instruction group.
19298 Otherwise, the limit is ``soft'', meaning that non-memory operations
19299 are preferred when the limit is reached, but memory operations may still
19300 be scheduled.
19302 @end table
19304 @node LM32 Options
19305 @subsection LM32 Options
19306 @cindex LM32 options
19308 These @option{-m} options are defined for the LatticeMico32 architecture:
19310 @table @gcctabopt
19311 @item -mbarrel-shift-enabled
19312 @opindex mbarrel-shift-enabled
19313 Enable barrel-shift instructions.
19315 @item -mdivide-enabled
19316 @opindex mdivide-enabled
19317 Enable divide and modulus instructions.
19319 @item -mmultiply-enabled
19320 @opindex multiply-enabled
19321 Enable multiply instructions.
19323 @item -msign-extend-enabled
19324 @opindex msign-extend-enabled
19325 Enable sign extend instructions.
19327 @item -muser-enabled
19328 @opindex muser-enabled
19329 Enable user-defined instructions.
19331 @end table
19333 @node M32C Options
19334 @subsection M32C Options
19335 @cindex M32C options
19337 @table @gcctabopt
19338 @item -mcpu=@var{name}
19339 @opindex mcpu=
19340 Select the CPU for which code is generated.  @var{name} may be one of
19341 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
19342 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
19343 the M32C/80 series.
19345 @item -msim
19346 @opindex msim
19347 Specifies that the program will be run on the simulator.  This causes
19348 an alternate runtime library to be linked in which supports, for
19349 example, file I/O@.  You must not use this option when generating
19350 programs that will run on real hardware; you must provide your own
19351 runtime library for whatever I/O functions are needed.
19353 @item -memregs=@var{number}
19354 @opindex memregs=
19355 Specifies the number of memory-based pseudo-registers GCC uses
19356 during code generation.  These pseudo-registers are used like real
19357 registers, so there is a tradeoff between GCC's ability to fit the
19358 code into available registers, and the performance penalty of using
19359 memory instead of registers.  Note that all modules in a program must
19360 be compiled with the same value for this option.  Because of that, you
19361 must not use this option with GCC's default runtime libraries.
19363 @end table
19365 @node M32R/D Options
19366 @subsection M32R/D Options
19367 @cindex M32R/D options
19369 These @option{-m} options are defined for Renesas M32R/D architectures:
19371 @table @gcctabopt
19372 @item -m32r2
19373 @opindex m32r2
19374 Generate code for the M32R/2@.
19376 @item -m32rx
19377 @opindex m32rx
19378 Generate code for the M32R/X@.
19380 @item -m32r
19381 @opindex m32r
19382 Generate code for the M32R@.  This is the default.
19384 @item -mmodel=small
19385 @opindex mmodel=small
19386 Assume all objects live in the lower 16MB of memory (so that their addresses
19387 can be loaded with the @code{ld24} instruction), and assume all subroutines
19388 are reachable with the @code{bl} instruction.
19389 This is the default.
19391 The addressability of a particular object can be set with the
19392 @code{model} attribute.
19394 @item -mmodel=medium
19395 @opindex mmodel=medium
19396 Assume objects may be anywhere in the 32-bit address space (the compiler
19397 generates @code{seth/add3} instructions to load their addresses), and
19398 assume all subroutines are reachable with the @code{bl} instruction.
19400 @item -mmodel=large
19401 @opindex mmodel=large
19402 Assume objects may be anywhere in the 32-bit address space (the compiler
19403 generates @code{seth/add3} instructions to load their addresses), and
19404 assume subroutines may not be reachable with the @code{bl} instruction
19405 (the compiler generates the much slower @code{seth/add3/jl}
19406 instruction sequence).
19408 @item -msdata=none
19409 @opindex msdata=none
19410 Disable use of the small data area.  Variables are put into
19411 one of @code{.data}, @code{.bss}, or @code{.rodata} (unless the
19412 @code{section} attribute has been specified).
19413 This is the default.
19415 The small data area consists of sections @code{.sdata} and @code{.sbss}.
19416 Objects may be explicitly put in the small data area with the
19417 @code{section} attribute using one of these sections.
19419 @item -msdata=sdata
19420 @opindex msdata=sdata
19421 Put small global and static data in the small data area, but do not
19422 generate special code to reference them.
19424 @item -msdata=use
19425 @opindex msdata=use
19426 Put small global and static data in the small data area, and generate
19427 special instructions to reference them.
19429 @item -G @var{num}
19430 @opindex G
19431 @cindex smaller data references
19432 Put global and static objects less than or equal to @var{num} bytes
19433 into the small data or BSS sections instead of the normal data or BSS
19434 sections.  The default value of @var{num} is 8.
19435 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
19436 for this option to have any effect.
19438 All modules should be compiled with the same @option{-G @var{num}} value.
19439 Compiling with different values of @var{num} may or may not work; if it
19440 doesn't the linker gives an error message---incorrect code is not
19441 generated.
19443 @item -mdebug
19444 @opindex mdebug
19445 Makes the M32R-specific code in the compiler display some statistics
19446 that might help in debugging programs.
19448 @item -malign-loops
19449 @opindex malign-loops
19450 Align all loops to a 32-byte boundary.
19452 @item -mno-align-loops
19453 @opindex mno-align-loops
19454 Do not enforce a 32-byte alignment for loops.  This is the default.
19456 @item -missue-rate=@var{number}
19457 @opindex missue-rate=@var{number}
19458 Issue @var{number} instructions per cycle.  @var{number} can only be 1
19459 or 2.
19461 @item -mbranch-cost=@var{number}
19462 @opindex mbranch-cost=@var{number}
19463 @var{number} can only be 1 or 2.  If it is 1 then branches are
19464 preferred over conditional code, if it is 2, then the opposite applies.
19466 @item -mflush-trap=@var{number}
19467 @opindex mflush-trap=@var{number}
19468 Specifies the trap number to use to flush the cache.  The default is
19469 12.  Valid numbers are between 0 and 15 inclusive.
19471 @item -mno-flush-trap
19472 @opindex mno-flush-trap
19473 Specifies that the cache cannot be flushed by using a trap.
19475 @item -mflush-func=@var{name}
19476 @opindex mflush-func=@var{name}
19477 Specifies the name of the operating system function to call to flush
19478 the cache.  The default is @samp{_flush_cache}, but a function call
19479 is only used if a trap is not available.
19481 @item -mno-flush-func
19482 @opindex mno-flush-func
19483 Indicates that there is no OS function for flushing the cache.
19485 @end table
19487 @node M680x0 Options
19488 @subsection M680x0 Options
19489 @cindex M680x0 options
19491 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
19492 The default settings depend on which architecture was selected when
19493 the compiler was configured; the defaults for the most common choices
19494 are given below.
19496 @table @gcctabopt
19497 @item -march=@var{arch}
19498 @opindex march
19499 Generate code for a specific M680x0 or ColdFire instruction set
19500 architecture.  Permissible values of @var{arch} for M680x0
19501 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
19502 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
19503 architectures are selected according to Freescale's ISA classification
19504 and the permissible values are: @samp{isaa}, @samp{isaaplus},
19505 @samp{isab} and @samp{isac}.
19507 GCC defines a macro @code{__mcf@var{arch}__} whenever it is generating
19508 code for a ColdFire target.  The @var{arch} in this macro is one of the
19509 @option{-march} arguments given above.
19511 When used together, @option{-march} and @option{-mtune} select code
19512 that runs on a family of similar processors but that is optimized
19513 for a particular microarchitecture.
19515 @item -mcpu=@var{cpu}
19516 @opindex mcpu
19517 Generate code for a specific M680x0 or ColdFire processor.
19518 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
19519 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
19520 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
19521 below, which also classifies the CPUs into families:
19523 @multitable @columnfractions 0.20 0.80
19524 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
19525 @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}
19526 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
19527 @item @samp{5206e} @tab @samp{5206e}
19528 @item @samp{5208} @tab @samp{5207} @samp{5208}
19529 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
19530 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
19531 @item @samp{5216} @tab @samp{5214} @samp{5216}
19532 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
19533 @item @samp{5225} @tab @samp{5224} @samp{5225}
19534 @item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
19535 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
19536 @item @samp{5249} @tab @samp{5249}
19537 @item @samp{5250} @tab @samp{5250}
19538 @item @samp{5271} @tab @samp{5270} @samp{5271}
19539 @item @samp{5272} @tab @samp{5272}
19540 @item @samp{5275} @tab @samp{5274} @samp{5275}
19541 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
19542 @item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
19543 @item @samp{5307} @tab @samp{5307}
19544 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
19545 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
19546 @item @samp{5407} @tab @samp{5407}
19547 @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}
19548 @end multitable
19550 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
19551 @var{arch} is compatible with @var{cpu}.  Other combinations of
19552 @option{-mcpu} and @option{-march} are rejected.
19554 GCC defines the macro @code{__mcf_cpu_@var{cpu}} when ColdFire target
19555 @var{cpu} is selected.  It also defines @code{__mcf_family_@var{family}},
19556 where the value of @var{family} is given by the table above.
19558 @item -mtune=@var{tune}
19559 @opindex mtune
19560 Tune the code for a particular microarchitecture within the
19561 constraints set by @option{-march} and @option{-mcpu}.
19562 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
19563 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
19564 and @samp{cpu32}.  The ColdFire microarchitectures
19565 are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
19567 You can also use @option{-mtune=68020-40} for code that needs
19568 to run relatively well on 68020, 68030 and 68040 targets.
19569 @option{-mtune=68020-60} is similar but includes 68060 targets
19570 as well.  These two options select the same tuning decisions as
19571 @option{-m68020-40} and @option{-m68020-60} respectively.
19573 GCC defines the macros @code{__mc@var{arch}} and @code{__mc@var{arch}__}
19574 when tuning for 680x0 architecture @var{arch}.  It also defines
19575 @code{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
19576 option is used.  If GCC is tuning for a range of architectures,
19577 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
19578 it defines the macros for every architecture in the range.
19580 GCC also defines the macro @code{__m@var{uarch}__} when tuning for
19581 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
19582 of the arguments given above.
19584 @item -m68000
19585 @itemx -mc68000
19586 @opindex m68000
19587 @opindex mc68000
19588 Generate output for a 68000.  This is the default
19589 when the compiler is configured for 68000-based systems.
19590 It is equivalent to @option{-march=68000}.
19592 Use this option for microcontrollers with a 68000 or EC000 core,
19593 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
19595 @item -m68010
19596 @opindex m68010
19597 Generate output for a 68010.  This is the default
19598 when the compiler is configured for 68010-based systems.
19599 It is equivalent to @option{-march=68010}.
19601 @item -m68020
19602 @itemx -mc68020
19603 @opindex m68020
19604 @opindex mc68020
19605 Generate output for a 68020.  This is the default
19606 when the compiler is configured for 68020-based systems.
19607 It is equivalent to @option{-march=68020}.
19609 @item -m68030
19610 @opindex m68030
19611 Generate output for a 68030.  This is the default when the compiler is
19612 configured for 68030-based systems.  It is equivalent to
19613 @option{-march=68030}.
19615 @item -m68040
19616 @opindex m68040
19617 Generate output for a 68040.  This is the default when the compiler is
19618 configured for 68040-based systems.  It is equivalent to
19619 @option{-march=68040}.
19621 This option inhibits the use of 68881/68882 instructions that have to be
19622 emulated by software on the 68040.  Use this option if your 68040 does not
19623 have code to emulate those instructions.
19625 @item -m68060
19626 @opindex m68060
19627 Generate output for a 68060.  This is the default when the compiler is
19628 configured for 68060-based systems.  It is equivalent to
19629 @option{-march=68060}.
19631 This option inhibits the use of 68020 and 68881/68882 instructions that
19632 have to be emulated by software on the 68060.  Use this option if your 68060
19633 does not have code to emulate those instructions.
19635 @item -mcpu32
19636 @opindex mcpu32
19637 Generate output for a CPU32.  This is the default
19638 when the compiler is configured for CPU32-based systems.
19639 It is equivalent to @option{-march=cpu32}.
19641 Use this option for microcontrollers with a
19642 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
19643 68336, 68340, 68341, 68349 and 68360.
19645 @item -m5200
19646 @opindex m5200
19647 Generate output for a 520X ColdFire CPU@.  This is the default
19648 when the compiler is configured for 520X-based systems.
19649 It is equivalent to @option{-mcpu=5206}, and is now deprecated
19650 in favor of that option.
19652 Use this option for microcontroller with a 5200 core, including
19653 the MCF5202, MCF5203, MCF5204 and MCF5206.
19655 @item -m5206e
19656 @opindex m5206e
19657 Generate output for a 5206e ColdFire CPU@.  The option is now
19658 deprecated in favor of the equivalent @option{-mcpu=5206e}.
19660 @item -m528x
19661 @opindex m528x
19662 Generate output for a member of the ColdFire 528X family.
19663 The option is now deprecated in favor of the equivalent
19664 @option{-mcpu=528x}.
19666 @item -m5307
19667 @opindex m5307
19668 Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
19669 in favor of the equivalent @option{-mcpu=5307}.
19671 @item -m5407
19672 @opindex m5407
19673 Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
19674 in favor of the equivalent @option{-mcpu=5407}.
19676 @item -mcfv4e
19677 @opindex mcfv4e
19678 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
19679 This includes use of hardware floating-point instructions.
19680 The option is equivalent to @option{-mcpu=547x}, and is now
19681 deprecated in favor of that option.
19683 @item -m68020-40
19684 @opindex m68020-40
19685 Generate output for a 68040, without using any of the new instructions.
19686 This results in code that can run relatively efficiently on either a
19687 68020/68881 or a 68030 or a 68040.  The generated code does use the
19688 68881 instructions that are emulated on the 68040.
19690 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
19692 @item -m68020-60
19693 @opindex m68020-60
19694 Generate output for a 68060, without using any of the new instructions.
19695 This results in code that can run relatively efficiently on either a
19696 68020/68881 or a 68030 or a 68040.  The generated code does use the
19697 68881 instructions that are emulated on the 68060.
19699 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
19701 @item -mhard-float
19702 @itemx -m68881
19703 @opindex mhard-float
19704 @opindex m68881
19705 Generate floating-point instructions.  This is the default for 68020
19706 and above, and for ColdFire devices that have an FPU@.  It defines the
19707 macro @code{__HAVE_68881__} on M680x0 targets and @code{__mcffpu__}
19708 on ColdFire targets.
19710 @item -msoft-float
19711 @opindex msoft-float
19712 Do not generate floating-point instructions; use library calls instead.
19713 This is the default for 68000, 68010, and 68832 targets.  It is also
19714 the default for ColdFire devices that have no FPU.
19716 @item -mdiv
19717 @itemx -mno-div
19718 @opindex mdiv
19719 @opindex mno-div
19720 Generate (do not generate) ColdFire hardware divide and remainder
19721 instructions.  If @option{-march} is used without @option{-mcpu},
19722 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
19723 architectures.  Otherwise, the default is taken from the target CPU
19724 (either the default CPU, or the one specified by @option{-mcpu}).  For
19725 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
19726 @option{-mcpu=5206e}.
19728 GCC defines the macro @code{__mcfhwdiv__} when this option is enabled.
19730 @item -mshort
19731 @opindex mshort
19732 Consider type @code{int} to be 16 bits wide, like @code{short int}.
19733 Additionally, parameters passed on the stack are also aligned to a
19734 16-bit boundary even on targets whose API mandates promotion to 32-bit.
19736 @item -mno-short
19737 @opindex mno-short
19738 Do not consider type @code{int} to be 16 bits wide.  This is the default.
19740 @item -mnobitfield
19741 @itemx -mno-bitfield
19742 @opindex mnobitfield
19743 @opindex mno-bitfield
19744 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
19745 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
19747 @item -mbitfield
19748 @opindex mbitfield
19749 Do use the bit-field instructions.  The @option{-m68020} option implies
19750 @option{-mbitfield}.  This is the default if you use a configuration
19751 designed for a 68020.
19753 @item -mrtd
19754 @opindex mrtd
19755 Use a different function-calling convention, in which functions
19756 that take a fixed number of arguments return with the @code{rtd}
19757 instruction, which pops their arguments while returning.  This
19758 saves one instruction in the caller since there is no need to pop
19759 the arguments there.
19761 This calling convention is incompatible with the one normally
19762 used on Unix, so you cannot use it if you need to call libraries
19763 compiled with the Unix compiler.
19765 Also, you must provide function prototypes for all functions that
19766 take variable numbers of arguments (including @code{printf});
19767 otherwise incorrect code is generated for calls to those
19768 functions.
19770 In addition, seriously incorrect code results if you call a
19771 function with too many arguments.  (Normally, extra arguments are
19772 harmlessly ignored.)
19774 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
19775 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
19777 @item -mno-rtd
19778 @opindex mno-rtd
19779 Do not use the calling conventions selected by @option{-mrtd}.
19780 This is the default.
19782 @item -malign-int
19783 @itemx -mno-align-int
19784 @opindex malign-int
19785 @opindex mno-align-int
19786 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
19787 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
19788 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
19789 Aligning variables on 32-bit boundaries produces code that runs somewhat
19790 faster on processors with 32-bit busses at the expense of more memory.
19792 @strong{Warning:} if you use the @option{-malign-int} switch, GCC
19793 aligns structures containing the above types differently than
19794 most published application binary interface specifications for the m68k.
19796 @item -mpcrel
19797 @opindex mpcrel
19798 Use the pc-relative addressing mode of the 68000 directly, instead of
19799 using a global offset table.  At present, this option implies @option{-fpic},
19800 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
19801 not presently supported with @option{-mpcrel}, though this could be supported for
19802 68020 and higher processors.
19804 @item -mno-strict-align
19805 @itemx -mstrict-align
19806 @opindex mno-strict-align
19807 @opindex mstrict-align
19808 Do not (do) assume that unaligned memory references are handled by
19809 the system.
19811 @item -msep-data
19812 Generate code that allows the data segment to be located in a different
19813 area of memory from the text segment.  This allows for execute-in-place in
19814 an environment without virtual memory management.  This option implies
19815 @option{-fPIC}.
19817 @item -mno-sep-data
19818 Generate code that assumes that the data segment follows the text segment.
19819 This is the default.
19821 @item -mid-shared-library
19822 Generate code that supports shared libraries via the library ID method.
19823 This allows for execute-in-place and shared libraries in an environment
19824 without virtual memory management.  This option implies @option{-fPIC}.
19826 @item -mno-id-shared-library
19827 Generate code that doesn't assume ID-based shared libraries are being used.
19828 This is the default.
19830 @item -mshared-library-id=n
19831 Specifies the identification number of the ID-based shared library being
19832 compiled.  Specifying a value of 0 generates more compact code; specifying
19833 other values forces the allocation of that number to the current
19834 library, but is no more space- or time-efficient than omitting this option.
19836 @item -mxgot
19837 @itemx -mno-xgot
19838 @opindex mxgot
19839 @opindex mno-xgot
19840 When generating position-independent code for ColdFire, generate code
19841 that works if the GOT has more than 8192 entries.  This code is
19842 larger and slower than code generated without this option.  On M680x0
19843 processors, this option is not needed; @option{-fPIC} suffices.
19845 GCC normally uses a single instruction to load values from the GOT@.
19846 While this is relatively efficient, it only works if the GOT
19847 is smaller than about 64k.  Anything larger causes the linker
19848 to report an error such as:
19850 @cindex relocation truncated to fit (ColdFire)
19851 @smallexample
19852 relocation truncated to fit: R_68K_GOT16O foobar
19853 @end smallexample
19855 If this happens, you should recompile your code with @option{-mxgot}.
19856 It should then work with very large GOTs.  However, code generated with
19857 @option{-mxgot} is less efficient, since it takes 4 instructions to fetch
19858 the value of a global symbol.
19860 Note that some linkers, including newer versions of the GNU linker,
19861 can create multiple GOTs and sort GOT entries.  If you have such a linker,
19862 you should only need to use @option{-mxgot} when compiling a single
19863 object file that accesses more than 8192 GOT entries.  Very few do.
19865 These options have no effect unless GCC is generating
19866 position-independent code.
19868 @item -mlong-jump-table-offsets
19869 @opindex mlong-jump-table-offsets
19870 Use 32-bit offsets in @code{switch} tables.  The default is to use
19871 16-bit offsets.
19873 @end table
19875 @node MCore Options
19876 @subsection MCore Options
19877 @cindex MCore options
19879 These are the @samp{-m} options defined for the Motorola M*Core
19880 processors.
19882 @table @gcctabopt
19884 @item -mhardlit
19885 @itemx -mno-hardlit
19886 @opindex mhardlit
19887 @opindex mno-hardlit
19888 Inline constants into the code stream if it can be done in two
19889 instructions or less.
19891 @item -mdiv
19892 @itemx -mno-div
19893 @opindex mdiv
19894 @opindex mno-div
19895 Use the divide instruction.  (Enabled by default).
19897 @item -mrelax-immediate
19898 @itemx -mno-relax-immediate
19899 @opindex mrelax-immediate
19900 @opindex mno-relax-immediate
19901 Allow arbitrary-sized immediates in bit operations.
19903 @item -mwide-bitfields
19904 @itemx -mno-wide-bitfields
19905 @opindex mwide-bitfields
19906 @opindex mno-wide-bitfields
19907 Always treat bit-fields as @code{int}-sized.
19909 @item -m4byte-functions
19910 @itemx -mno-4byte-functions
19911 @opindex m4byte-functions
19912 @opindex mno-4byte-functions
19913 Force all functions to be aligned to a 4-byte boundary.
19915 @item -mcallgraph-data
19916 @itemx -mno-callgraph-data
19917 @opindex mcallgraph-data
19918 @opindex mno-callgraph-data
19919 Emit callgraph information.
19921 @item -mslow-bytes
19922 @itemx -mno-slow-bytes
19923 @opindex mslow-bytes
19924 @opindex mno-slow-bytes
19925 Prefer word access when reading byte quantities.
19927 @item -mlittle-endian
19928 @itemx -mbig-endian
19929 @opindex mlittle-endian
19930 @opindex mbig-endian
19931 Generate code for a little-endian target.
19933 @item -m210
19934 @itemx -m340
19935 @opindex m210
19936 @opindex m340
19937 Generate code for the 210 processor.
19939 @item -mno-lsim
19940 @opindex mno-lsim
19941 Assume that runtime support has been provided and so omit the
19942 simulator library (@file{libsim.a)} from the linker command line.
19944 @item -mstack-increment=@var{size}
19945 @opindex mstack-increment
19946 Set the maximum amount for a single stack increment operation.  Large
19947 values can increase the speed of programs that contain functions
19948 that need a large amount of stack space, but they can also trigger a
19949 segmentation fault if the stack is extended too much.  The default
19950 value is 0x1000.
19952 @end table
19954 @node MeP Options
19955 @subsection MeP Options
19956 @cindex MeP options
19958 @table @gcctabopt
19960 @item -mabsdiff
19961 @opindex mabsdiff
19962 Enables the @code{abs} instruction, which is the absolute difference
19963 between two registers.
19965 @item -mall-opts
19966 @opindex mall-opts
19967 Enables all the optional instructions---average, multiply, divide, bit
19968 operations, leading zero, absolute difference, min/max, clip, and
19969 saturation.
19972 @item -maverage
19973 @opindex maverage
19974 Enables the @code{ave} instruction, which computes the average of two
19975 registers.
19977 @item -mbased=@var{n}
19978 @opindex mbased=
19979 Variables of size @var{n} bytes or smaller are placed in the
19980 @code{.based} section by default.  Based variables use the @code{$tp}
19981 register as a base register, and there is a 128-byte limit to the
19982 @code{.based} section.
19984 @item -mbitops
19985 @opindex mbitops
19986 Enables the bit operation instructions---bit test (@code{btstm}), set
19987 (@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
19988 test-and-set (@code{tas}).
19990 @item -mc=@var{name}
19991 @opindex mc=
19992 Selects which section constant data is placed in.  @var{name} may
19993 be @samp{tiny}, @samp{near}, or @samp{far}.
19995 @item -mclip
19996 @opindex mclip
19997 Enables the @code{clip} instruction.  Note that @option{-mclip} is not
19998 useful unless you also provide @option{-mminmax}.
20000 @item -mconfig=@var{name}
20001 @opindex mconfig=
20002 Selects one of the built-in core configurations.  Each MeP chip has
20003 one or more modules in it; each module has a core CPU and a variety of
20004 coprocessors, optional instructions, and peripherals.  The
20005 @code{MeP-Integrator} tool, not part of GCC, provides these
20006 configurations through this option; using this option is the same as
20007 using all the corresponding command-line options.  The default
20008 configuration is @samp{default}.
20010 @item -mcop
20011 @opindex mcop
20012 Enables the coprocessor instructions.  By default, this is a 32-bit
20013 coprocessor.  Note that the coprocessor is normally enabled via the
20014 @option{-mconfig=} option.
20016 @item -mcop32
20017 @opindex mcop32
20018 Enables the 32-bit coprocessor's instructions.
20020 @item -mcop64
20021 @opindex mcop64
20022 Enables the 64-bit coprocessor's instructions.
20024 @item -mivc2
20025 @opindex mivc2
20026 Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
20028 @item -mdc
20029 @opindex mdc
20030 Causes constant variables to be placed in the @code{.near} section.
20032 @item -mdiv
20033 @opindex mdiv
20034 Enables the @code{div} and @code{divu} instructions.
20036 @item -meb
20037 @opindex meb
20038 Generate big-endian code.
20040 @item -mel
20041 @opindex mel
20042 Generate little-endian code.
20044 @item -mio-volatile
20045 @opindex mio-volatile
20046 Tells the compiler that any variable marked with the @code{io}
20047 attribute is to be considered volatile.
20049 @item -ml
20050 @opindex ml
20051 Causes variables to be assigned to the @code{.far} section by default.
20053 @item -mleadz
20054 @opindex mleadz
20055 Enables the @code{leadz} (leading zero) instruction.
20057 @item -mm
20058 @opindex mm
20059 Causes variables to be assigned to the @code{.near} section by default.
20061 @item -mminmax
20062 @opindex mminmax
20063 Enables the @code{min} and @code{max} instructions.
20065 @item -mmult
20066 @opindex mmult
20067 Enables the multiplication and multiply-accumulate instructions.
20069 @item -mno-opts
20070 @opindex mno-opts
20071 Disables all the optional instructions enabled by @option{-mall-opts}.
20073 @item -mrepeat
20074 @opindex mrepeat
20075 Enables the @code{repeat} and @code{erepeat} instructions, used for
20076 low-overhead looping.
20078 @item -ms
20079 @opindex ms
20080 Causes all variables to default to the @code{.tiny} section.  Note
20081 that there is a 65536-byte limit to this section.  Accesses to these
20082 variables use the @code{%gp} base register.
20084 @item -msatur
20085 @opindex msatur
20086 Enables the saturation instructions.  Note that the compiler does not
20087 currently generate these itself, but this option is included for
20088 compatibility with other tools, like @code{as}.
20090 @item -msdram
20091 @opindex msdram
20092 Link the SDRAM-based runtime instead of the default ROM-based runtime.
20094 @item -msim
20095 @opindex msim
20096 Link the simulator run-time libraries.
20098 @item -msimnovec
20099 @opindex msimnovec
20100 Link the simulator runtime libraries, excluding built-in support
20101 for reset and exception vectors and tables.
20103 @item -mtf
20104 @opindex mtf
20105 Causes all functions to default to the @code{.far} section.  Without
20106 this option, functions default to the @code{.near} section.
20108 @item -mtiny=@var{n}
20109 @opindex mtiny=
20110 Variables that are @var{n} bytes or smaller are allocated to the
20111 @code{.tiny} section.  These variables use the @code{$gp} base
20112 register.  The default for this option is 4, but note that there's a
20113 65536-byte limit to the @code{.tiny} section.
20115 @end table
20117 @node MicroBlaze Options
20118 @subsection MicroBlaze Options
20119 @cindex MicroBlaze Options
20121 @table @gcctabopt
20123 @item -msoft-float
20124 @opindex msoft-float
20125 Use software emulation for floating point (default).
20127 @item -mhard-float
20128 @opindex mhard-float
20129 Use hardware floating-point instructions.
20131 @item -mmemcpy
20132 @opindex mmemcpy
20133 Do not optimize block moves, use @code{memcpy}.
20135 @item -mno-clearbss
20136 @opindex mno-clearbss
20137 This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.
20139 @item -mcpu=@var{cpu-type}
20140 @opindex mcpu=
20141 Use features of, and schedule code for, the given CPU.
20142 Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
20143 where @var{X} is a major version, @var{YY} is the minor version, and
20144 @var{Z} is compatibility code.  Example values are @samp{v3.00.a},
20145 @samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}.
20147 @item -mxl-soft-mul
20148 @opindex mxl-soft-mul
20149 Use software multiply emulation (default).
20151 @item -mxl-soft-div
20152 @opindex mxl-soft-div
20153 Use software emulation for divides (default).
20155 @item -mxl-barrel-shift
20156 @opindex mxl-barrel-shift
20157 Use the hardware barrel shifter.
20159 @item -mxl-pattern-compare
20160 @opindex mxl-pattern-compare
20161 Use pattern compare instructions.
20163 @item -msmall-divides
20164 @opindex msmall-divides
20165 Use table lookup optimization for small signed integer divisions.
20167 @item -mxl-stack-check
20168 @opindex mxl-stack-check
20169 This option is deprecated.  Use @option{-fstack-check} instead.
20171 @item -mxl-gp-opt
20172 @opindex mxl-gp-opt
20173 Use GP-relative @code{.sdata}/@code{.sbss} sections.
20175 @item -mxl-multiply-high
20176 @opindex mxl-multiply-high
20177 Use multiply high instructions for high part of 32x32 multiply.
20179 @item -mxl-float-convert
20180 @opindex mxl-float-convert
20181 Use hardware floating-point conversion instructions.
20183 @item -mxl-float-sqrt
20184 @opindex mxl-float-sqrt
20185 Use hardware floating-point square root instruction.
20187 @item -mbig-endian
20188 @opindex mbig-endian
20189 Generate code for a big-endian target.
20191 @item -mlittle-endian
20192 @opindex mlittle-endian
20193 Generate code for a little-endian target.
20195 @item -mxl-reorder
20196 @opindex mxl-reorder
20197 Use reorder instructions (swap and byte reversed load/store).
20199 @item -mxl-mode-@var{app-model}
20200 Select application model @var{app-model}.  Valid models are
20201 @table @samp
20202 @item executable
20203 normal executable (default), uses startup code @file{crt0.o}.
20205 @item -mpic-data-is-text-relative
20206 @opindex mpic-data-is-text-relative
20207 Assume that the displacement between the text and data segments is fixed
20208 at static link time.  This allows data to be referenced by offset from start of
20209 text address instead of GOT since PC-relative addressing is not supported.
20211 @item xmdstub
20212 for use with Xilinx Microprocessor Debugger (XMD) based
20213 software intrusive debug agent called xmdstub. This uses startup file
20214 @file{crt1.o} and sets the start address of the program to 0x800.
20216 @item bootstrap
20217 for applications that are loaded using a bootloader.
20218 This model uses startup file @file{crt2.o} which does not contain a processor
20219 reset vector handler. This is suitable for transferring control on a
20220 processor reset to the bootloader rather than the application.
20222 @item novectors
20223 for applications that do not require any of the
20224 MicroBlaze vectors. This option may be useful for applications running
20225 within a monitoring application. This model uses @file{crt3.o} as a startup file.
20226 @end table
20228 Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
20229 @option{-mxl-mode-@var{app-model}}.
20231 @end table
20233 @node MIPS Options
20234 @subsection MIPS Options
20235 @cindex MIPS options
20237 @table @gcctabopt
20239 @item -EB
20240 @opindex EB
20241 Generate big-endian code.
20243 @item -EL
20244 @opindex EL
20245 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
20246 configurations.
20248 @item -march=@var{arch}
20249 @opindex march
20250 Generate code that runs on @var{arch}, which can be the name of a
20251 generic MIPS ISA, or the name of a particular processor.
20252 The ISA names are:
20253 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
20254 @samp{mips32}, @samp{mips32r2}, @samp{mips32r3}, @samp{mips32r5},
20255 @samp{mips32r6}, @samp{mips64}, @samp{mips64r2}, @samp{mips64r3},
20256 @samp{mips64r5} and @samp{mips64r6}.
20257 The processor names are:
20258 @samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
20259 @samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
20260 @samp{5kc}, @samp{5kf},
20261 @samp{20kc},
20262 @samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
20263 @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
20264 @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, @samp{34kn},
20265 @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
20266 @samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
20267 @samp{i6400},
20268 @samp{interaptiv},
20269 @samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a},
20270 @samp{m4k},
20271 @samp{m14k}, @samp{m14kc}, @samp{m14ke}, @samp{m14kec},
20272 @samp{m5100}, @samp{m5101},
20273 @samp{octeon}, @samp{octeon+}, @samp{octeon2}, @samp{octeon3},
20274 @samp{orion},
20275 @samp{p5600},
20276 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
20277 @samp{r4600}, @samp{r4650}, @samp{r4700}, @samp{r6000}, @samp{r8000},
20278 @samp{rm7000}, @samp{rm9000},
20279 @samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
20280 @samp{sb1},
20281 @samp{sr71000},
20282 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
20283 @samp{vr5000}, @samp{vr5400}, @samp{vr5500},
20284 @samp{xlr} and @samp{xlp}.
20285 The special value @samp{from-abi} selects the
20286 most compatible architecture for the selected ABI (that is,
20287 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
20289 The native Linux/GNU toolchain also supports the value @samp{native},
20290 which selects the best architecture option for the host processor.
20291 @option{-march=native} has no effect if GCC does not recognize
20292 the processor.
20294 In processor names, a final @samp{000} can be abbreviated as @samp{k}
20295 (for example, @option{-march=r2k}).  Prefixes are optional, and
20296 @samp{vr} may be written @samp{r}.
20298 Names of the form @samp{@var{n}f2_1} refer to processors with
20299 FPUs clocked at half the rate of the core, names of the form
20300 @samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
20301 rate as the core, and names of the form @samp{@var{n}f3_2} refer to
20302 processors with FPUs clocked a ratio of 3:2 with respect to the core.
20303 For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
20304 for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
20305 accepted as synonyms for @samp{@var{n}f1_1}.
20307 GCC defines two macros based on the value of this option.  The first
20308 is @code{_MIPS_ARCH}, which gives the name of target architecture, as
20309 a string.  The second has the form @code{_MIPS_ARCH_@var{foo}},
20310 where @var{foo} is the capitalized value of @code{_MIPS_ARCH}@.
20311 For example, @option{-march=r2000} sets @code{_MIPS_ARCH}
20312 to @code{"r2000"} and defines the macro @code{_MIPS_ARCH_R2000}.
20314 Note that the @code{_MIPS_ARCH} macro uses the processor names given
20315 above.  In other words, it has the full prefix and does not
20316 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
20317 the macro names the resolved architecture (either @code{"mips1"} or
20318 @code{"mips3"}).  It names the default architecture when no
20319 @option{-march} option is given.
20321 @item -mtune=@var{arch}
20322 @opindex mtune
20323 Optimize for @var{arch}.  Among other things, this option controls
20324 the way instructions are scheduled, and the perceived cost of arithmetic
20325 operations.  The list of @var{arch} values is the same as for
20326 @option{-march}.
20328 When this option is not used, GCC optimizes for the processor
20329 specified by @option{-march}.  By using @option{-march} and
20330 @option{-mtune} together, it is possible to generate code that
20331 runs on a family of processors, but optimize the code for one
20332 particular member of that family.
20334 @option{-mtune} defines the macros @code{_MIPS_TUNE} and
20335 @code{_MIPS_TUNE_@var{foo}}, which work in the same way as the
20336 @option{-march} ones described above.
20338 @item -mips1
20339 @opindex mips1
20340 Equivalent to @option{-march=mips1}.
20342 @item -mips2
20343 @opindex mips2
20344 Equivalent to @option{-march=mips2}.
20346 @item -mips3
20347 @opindex mips3
20348 Equivalent to @option{-march=mips3}.
20350 @item -mips4
20351 @opindex mips4
20352 Equivalent to @option{-march=mips4}.
20354 @item -mips32
20355 @opindex mips32
20356 Equivalent to @option{-march=mips32}.
20358 @item -mips32r3
20359 @opindex mips32r3
20360 Equivalent to @option{-march=mips32r3}.
20362 @item -mips32r5
20363 @opindex mips32r5
20364 Equivalent to @option{-march=mips32r5}.
20366 @item -mips32r6
20367 @opindex mips32r6
20368 Equivalent to @option{-march=mips32r6}.
20370 @item -mips64
20371 @opindex mips64
20372 Equivalent to @option{-march=mips64}.
20374 @item -mips64r2
20375 @opindex mips64r2
20376 Equivalent to @option{-march=mips64r2}.
20378 @item -mips64r3
20379 @opindex mips64r3
20380 Equivalent to @option{-march=mips64r3}.
20382 @item -mips64r5
20383 @opindex mips64r5
20384 Equivalent to @option{-march=mips64r5}.
20386 @item -mips64r6
20387 @opindex mips64r6
20388 Equivalent to @option{-march=mips64r6}.
20390 @item -mips16
20391 @itemx -mno-mips16
20392 @opindex mips16
20393 @opindex mno-mips16
20394 Generate (do not generate) MIPS16 code.  If GCC is targeting a
20395 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.
20397 MIPS16 code generation can also be controlled on a per-function basis
20398 by means of @code{mips16} and @code{nomips16} attributes.
20399 @xref{Function Attributes}, for more information.
20401 @item -mflip-mips16
20402 @opindex mflip-mips16
20403 Generate MIPS16 code on alternating functions.  This option is provided
20404 for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
20405 not intended for ordinary use in compiling user code.
20407 @item -minterlink-compressed
20408 @itemx -mno-interlink-compressed
20409 @opindex minterlink-compressed
20410 @opindex mno-interlink-compressed
20411 Require (do not require) that code using the standard (uncompressed) MIPS ISA
20412 be link-compatible with MIPS16 and microMIPS code, and vice versa.
20414 For example, code using the standard ISA encoding cannot jump directly
20415 to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
20416 @option{-minterlink-compressed} therefore disables direct jumps unless GCC
20417 knows that the target of the jump is not compressed.
20419 @item -minterlink-mips16
20420 @itemx -mno-interlink-mips16
20421 @opindex minterlink-mips16
20422 @opindex mno-interlink-mips16
20423 Aliases of @option{-minterlink-compressed} and
20424 @option{-mno-interlink-compressed}.  These options predate the microMIPS ASE
20425 and are retained for backwards compatibility.
20427 @item -mabi=32
20428 @itemx -mabi=o64
20429 @itemx -mabi=n32
20430 @itemx -mabi=64
20431 @itemx -mabi=eabi
20432 @opindex mabi=32
20433 @opindex mabi=o64
20434 @opindex mabi=n32
20435 @opindex mabi=64
20436 @opindex mabi=eabi
20437 Generate code for the given ABI@.
20439 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
20440 generates 64-bit code when you select a 64-bit architecture, but you
20441 can use @option{-mgp32} to get 32-bit code instead.
20443 For information about the O64 ABI, see
20444 @uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.
20446 GCC supports a variant of the o32 ABI in which floating-point registers
20447 are 64 rather than 32 bits wide.  You can select this combination with
20448 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
20449 and @code{mfhc1} instructions and is therefore only supported for
20450 MIPS32R2, MIPS32R3 and MIPS32R5 processors.
20452 The register assignments for arguments and return values remain the
20453 same, but each scalar value is passed in a single 64-bit register
20454 rather than a pair of 32-bit registers.  For example, scalar
20455 floating-point values are returned in @samp{$f0} only, not a
20456 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
20457 remains the same in that the even-numbered double-precision registers
20458 are saved.
20460 Two additional variants of the o32 ABI are supported to enable
20461 a transition from 32-bit to 64-bit registers.  These are FPXX
20462 (@option{-mfpxx}) and FP64A (@option{-mfp64} @option{-mno-odd-spreg}).
20463 The FPXX extension mandates that all code must execute correctly
20464 when run using 32-bit or 64-bit registers.  The code can be interlinked
20465 with either FP32 or FP64, but not both.
20466 The FP64A extension is similar to the FP64 extension but forbids the
20467 use of odd-numbered single-precision registers.  This can be used
20468 in conjunction with the @code{FRE} mode of FPUs in MIPS32R5
20469 processors and allows both FP32 and FP64A code to interlink and
20470 run in the same process without changing FPU modes.
20472 @item -mabicalls
20473 @itemx -mno-abicalls
20474 @opindex mabicalls
20475 @opindex mno-abicalls
20476 Generate (do not generate) code that is suitable for SVR4-style
20477 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
20478 systems.
20480 @item -mshared
20481 @itemx -mno-shared
20482 Generate (do not generate) code that is fully position-independent,
20483 and that can therefore be linked into shared libraries.  This option
20484 only affects @option{-mabicalls}.
20486 All @option{-mabicalls} code has traditionally been position-independent,
20487 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
20488 as an extension, the GNU toolchain allows executables to use absolute
20489 accesses for locally-binding symbols.  It can also use shorter GP
20490 initialization sequences and generate direct calls to locally-defined
20491 functions.  This mode is selected by @option{-mno-shared}.
20493 @option{-mno-shared} depends on binutils 2.16 or higher and generates
20494 objects that can only be linked by the GNU linker.  However, the option
20495 does not affect the ABI of the final executable; it only affects the ABI
20496 of relocatable objects.  Using @option{-mno-shared} generally makes
20497 executables both smaller and quicker.
20499 @option{-mshared} is the default.
20501 @item -mplt
20502 @itemx -mno-plt
20503 @opindex mplt
20504 @opindex mno-plt
20505 Assume (do not assume) that the static and dynamic linkers
20506 support PLTs and copy relocations.  This option only affects
20507 @option{-mno-shared -mabicalls}.  For the n64 ABI, this option
20508 has no effect without @option{-msym32}.
20510 You can make @option{-mplt} the default by configuring
20511 GCC with @option{--with-mips-plt}.  The default is
20512 @option{-mno-plt} otherwise.
20514 @item -mxgot
20515 @itemx -mno-xgot
20516 @opindex mxgot
20517 @opindex mno-xgot
20518 Lift (do not lift) the usual restrictions on the size of the global
20519 offset table.
20521 GCC normally uses a single instruction to load values from the GOT@.
20522 While this is relatively efficient, it only works if the GOT
20523 is smaller than about 64k.  Anything larger causes the linker
20524 to report an error such as:
20526 @cindex relocation truncated to fit (MIPS)
20527 @smallexample
20528 relocation truncated to fit: R_MIPS_GOT16 foobar
20529 @end smallexample
20531 If this happens, you should recompile your code with @option{-mxgot}.
20532 This works with very large GOTs, although the code is also
20533 less efficient, since it takes three instructions to fetch the
20534 value of a global symbol.
20536 Note that some linkers can create multiple GOTs.  If you have such a
20537 linker, you should only need to use @option{-mxgot} when a single object
20538 file accesses more than 64k's worth of GOT entries.  Very few do.
20540 These options have no effect unless GCC is generating position
20541 independent code.
20543 @item -mgp32
20544 @opindex mgp32
20545 Assume that general-purpose registers are 32 bits wide.
20547 @item -mgp64
20548 @opindex mgp64
20549 Assume that general-purpose registers are 64 bits wide.
20551 @item -mfp32
20552 @opindex mfp32
20553 Assume that floating-point registers are 32 bits wide.
20555 @item -mfp64
20556 @opindex mfp64
20557 Assume that floating-point registers are 64 bits wide.
20559 @item -mfpxx
20560 @opindex mfpxx
20561 Do not assume the width of floating-point registers.
20563 @item -mhard-float
20564 @opindex mhard-float
20565 Use floating-point coprocessor instructions.
20567 @item -msoft-float
20568 @opindex msoft-float
20569 Do not use floating-point coprocessor instructions.  Implement
20570 floating-point calculations using library calls instead.
20572 @item -mno-float
20573 @opindex mno-float
20574 Equivalent to @option{-msoft-float}, but additionally asserts that the
20575 program being compiled does not perform any floating-point operations.
20576 This option is presently supported only by some bare-metal MIPS
20577 configurations, where it may select a special set of libraries
20578 that lack all floating-point support (including, for example, the
20579 floating-point @code{printf} formats).  
20580 If code compiled with @option{-mno-float} accidentally contains
20581 floating-point operations, it is likely to suffer a link-time
20582 or run-time failure.
20584 @item -msingle-float
20585 @opindex msingle-float
20586 Assume that the floating-point coprocessor only supports single-precision
20587 operations.
20589 @item -mdouble-float
20590 @opindex mdouble-float
20591 Assume that the floating-point coprocessor supports double-precision
20592 operations.  This is the default.
20594 @item -modd-spreg
20595 @itemx -mno-odd-spreg
20596 @opindex modd-spreg
20597 @opindex mno-odd-spreg
20598 Enable the use of odd-numbered single-precision floating-point registers
20599 for the o32 ABI.  This is the default for processors that are known to
20600 support these registers.  When using the o32 FPXX ABI, @option{-mno-odd-spreg}
20601 is set by default.
20603 @item -mabs=2008
20604 @itemx -mabs=legacy
20605 @opindex mabs=2008
20606 @opindex mabs=legacy
20607 These options control the treatment of the special not-a-number (NaN)
20608 IEEE 754 floating-point data with the @code{abs.@i{fmt}} and
20609 @code{neg.@i{fmt}} machine instructions.
20611 By default or when @option{-mabs=legacy} is used the legacy
20612 treatment is selected.  In this case these instructions are considered
20613 arithmetic and avoided where correct operation is required and the
20614 input operand might be a NaN.  A longer sequence of instructions that
20615 manipulate the sign bit of floating-point datum manually is used
20616 instead unless the @option{-ffinite-math-only} option has also been
20617 specified.
20619 The @option{-mabs=2008} option selects the IEEE 754-2008 treatment.  In
20620 this case these instructions are considered non-arithmetic and therefore
20621 operating correctly in all cases, including in particular where the
20622 input operand is a NaN.  These instructions are therefore always used
20623 for the respective operations.
20625 @item -mnan=2008
20626 @itemx -mnan=legacy
20627 @opindex mnan=2008
20628 @opindex mnan=legacy
20629 These options control the encoding of the special not-a-number (NaN)
20630 IEEE 754 floating-point data.
20632 The @option{-mnan=legacy} option selects the legacy encoding.  In this
20633 case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
20634 significand field being 0, whereas signaling NaNs (sNaNs) are denoted
20635 by the first bit of their trailing significand field being 1.
20637 The @option{-mnan=2008} option selects the IEEE 754-2008 encoding.  In
20638 this case qNaNs are denoted by the first bit of their trailing
20639 significand field being 1, whereas sNaNs are denoted by the first bit of
20640 their trailing significand field being 0.
20642 The default is @option{-mnan=legacy} unless GCC has been configured with
20643 @option{--with-nan=2008}.
20645 @item -mllsc
20646 @itemx -mno-llsc
20647 @opindex mllsc
20648 @opindex mno-llsc
20649 Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
20650 implement atomic memory built-in functions.  When neither option is
20651 specified, GCC uses the instructions if the target architecture
20652 supports them.
20654 @option{-mllsc} is useful if the runtime environment can emulate the
20655 instructions and @option{-mno-llsc} can be useful when compiling for
20656 nonstandard ISAs.  You can make either option the default by
20657 configuring GCC with @option{--with-llsc} and @option{--without-llsc}
20658 respectively.  @option{--with-llsc} is the default for some
20659 configurations; see the installation documentation for details.
20661 @item -mdsp
20662 @itemx -mno-dsp
20663 @opindex mdsp
20664 @opindex mno-dsp
20665 Use (do not use) revision 1 of the MIPS DSP ASE@.
20666 @xref{MIPS DSP Built-in Functions}.  This option defines the
20667 preprocessor macro @code{__mips_dsp}.  It also defines
20668 @code{__mips_dsp_rev} to 1.
20670 @item -mdspr2
20671 @itemx -mno-dspr2
20672 @opindex mdspr2
20673 @opindex mno-dspr2
20674 Use (do not use) revision 2 of the MIPS DSP ASE@.
20675 @xref{MIPS DSP Built-in Functions}.  This option defines the
20676 preprocessor macros @code{__mips_dsp} and @code{__mips_dspr2}.
20677 It also defines @code{__mips_dsp_rev} to 2.
20679 @item -msmartmips
20680 @itemx -mno-smartmips
20681 @opindex msmartmips
20682 @opindex mno-smartmips
20683 Use (do not use) the MIPS SmartMIPS ASE.
20685 @item -mpaired-single
20686 @itemx -mno-paired-single
20687 @opindex mpaired-single
20688 @opindex mno-paired-single
20689 Use (do not use) paired-single floating-point instructions.
20690 @xref{MIPS Paired-Single Support}.  This option requires
20691 hardware floating-point support to be enabled.
20693 @item -mdmx
20694 @itemx -mno-mdmx
20695 @opindex mdmx
20696 @opindex mno-mdmx
20697 Use (do not use) MIPS Digital Media Extension instructions.
20698 This option can only be used when generating 64-bit code and requires
20699 hardware floating-point support to be enabled.
20701 @item -mips3d
20702 @itemx -mno-mips3d
20703 @opindex mips3d
20704 @opindex mno-mips3d
20705 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
20706 The option @option{-mips3d} implies @option{-mpaired-single}.
20708 @item -mmicromips
20709 @itemx -mno-micromips
20710 @opindex mmicromips
20711 @opindex mno-mmicromips
20712 Generate (do not generate) microMIPS code.
20714 MicroMIPS code generation can also be controlled on a per-function basis
20715 by means of @code{micromips} and @code{nomicromips} attributes.
20716 @xref{Function Attributes}, for more information.
20718 @item -mmt
20719 @itemx -mno-mt
20720 @opindex mmt
20721 @opindex mno-mt
20722 Use (do not use) MT Multithreading instructions.
20724 @item -mmcu
20725 @itemx -mno-mcu
20726 @opindex mmcu
20727 @opindex mno-mcu
20728 Use (do not use) the MIPS MCU ASE instructions.
20730 @item -meva
20731 @itemx -mno-eva
20732 @opindex meva
20733 @opindex mno-eva
20734 Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
20736 @item -mvirt
20737 @itemx -mno-virt
20738 @opindex mvirt
20739 @opindex mno-virt
20740 Use (do not use) the MIPS Virtualization (VZ) instructions.
20742 @item -mxpa
20743 @itemx -mno-xpa
20744 @opindex mxpa
20745 @opindex mno-xpa
20746 Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.
20748 @item -mlong64
20749 @opindex mlong64
20750 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
20751 an explanation of the default and the way that the pointer size is
20752 determined.
20754 @item -mlong32
20755 @opindex mlong32
20756 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
20758 The default size of @code{int}s, @code{long}s and pointers depends on
20759 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
20760 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
20761 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
20762 or the same size as integer registers, whichever is smaller.
20764 @item -msym32
20765 @itemx -mno-sym32
20766 @opindex msym32
20767 @opindex mno-sym32
20768 Assume (do not assume) that all symbols have 32-bit values, regardless
20769 of the selected ABI@.  This option is useful in combination with
20770 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
20771 to generate shorter and faster references to symbolic addresses.
20773 @item -G @var{num}
20774 @opindex G
20775 Put definitions of externally-visible data in a small data section
20776 if that data is no bigger than @var{num} bytes.  GCC can then generate
20777 more efficient accesses to the data; see @option{-mgpopt} for details.
20779 The default @option{-G} option depends on the configuration.
20781 @item -mlocal-sdata
20782 @itemx -mno-local-sdata
20783 @opindex mlocal-sdata
20784 @opindex mno-local-sdata
20785 Extend (do not extend) the @option{-G} behavior to local data too,
20786 such as to static variables in C@.  @option{-mlocal-sdata} is the
20787 default for all configurations.
20789 If the linker complains that an application is using too much small data,
20790 you might want to try rebuilding the less performance-critical parts with
20791 @option{-mno-local-sdata}.  You might also want to build large
20792 libraries with @option{-mno-local-sdata}, so that the libraries leave
20793 more room for the main program.
20795 @item -mextern-sdata
20796 @itemx -mno-extern-sdata
20797 @opindex mextern-sdata
20798 @opindex mno-extern-sdata
20799 Assume (do not assume) that externally-defined data is in
20800 a small data section if the size of that data is within the @option{-G} limit.
20801 @option{-mextern-sdata} is the default for all configurations.
20803 If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
20804 @var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
20805 that is no bigger than @var{num} bytes, you must make sure that @var{Var}
20806 is placed in a small data section.  If @var{Var} is defined by another
20807 module, you must either compile that module with a high-enough
20808 @option{-G} setting or attach a @code{section} attribute to @var{Var}'s
20809 definition.  If @var{Var} is common, you must link the application
20810 with a high-enough @option{-G} setting.
20812 The easiest way of satisfying these restrictions is to compile
20813 and link every module with the same @option{-G} option.  However,
20814 you may wish to build a library that supports several different
20815 small data limits.  You can do this by compiling the library with
20816 the highest supported @option{-G} setting and additionally using
20817 @option{-mno-extern-sdata} to stop the library from making assumptions
20818 about externally-defined data.
20820 @item -mgpopt
20821 @itemx -mno-gpopt
20822 @opindex mgpopt
20823 @opindex mno-gpopt
20824 Use (do not use) GP-relative accesses for symbols that are known to be
20825 in a small data section; see @option{-G}, @option{-mlocal-sdata} and
20826 @option{-mextern-sdata}.  @option{-mgpopt} is the default for all
20827 configurations.
20829 @option{-mno-gpopt} is useful for cases where the @code{$gp} register
20830 might not hold the value of @code{_gp}.  For example, if the code is
20831 part of a library that might be used in a boot monitor, programs that
20832 call boot monitor routines pass an unknown value in @code{$gp}.
20833 (In such situations, the boot monitor itself is usually compiled
20834 with @option{-G0}.)
20836 @option{-mno-gpopt} implies @option{-mno-local-sdata} and
20837 @option{-mno-extern-sdata}.
20839 @item -membedded-data
20840 @itemx -mno-embedded-data
20841 @opindex membedded-data
20842 @opindex mno-embedded-data
20843 Allocate variables to the read-only data section first if possible, then
20844 next in the small data section if possible, otherwise in data.  This gives
20845 slightly slower code than the default, but reduces the amount of RAM required
20846 when executing, and thus may be preferred for some embedded systems.
20848 @item -muninit-const-in-rodata
20849 @itemx -mno-uninit-const-in-rodata
20850 @opindex muninit-const-in-rodata
20851 @opindex mno-uninit-const-in-rodata
20852 Put uninitialized @code{const} variables in the read-only data section.
20853 This option is only meaningful in conjunction with @option{-membedded-data}.
20855 @item -mcode-readable=@var{setting}
20856 @opindex mcode-readable
20857 Specify whether GCC may generate code that reads from executable sections.
20858 There are three possible settings:
20860 @table @gcctabopt
20861 @item -mcode-readable=yes
20862 Instructions may freely access executable sections.  This is the
20863 default setting.
20865 @item -mcode-readable=pcrel
20866 MIPS16 PC-relative load instructions can access executable sections,
20867 but other instructions must not do so.  This option is useful on 4KSc
20868 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
20869 It is also useful on processors that can be configured to have a dual
20870 instruction/data SRAM interface and that, like the M4K, automatically
20871 redirect PC-relative loads to the instruction RAM.
20873 @item -mcode-readable=no
20874 Instructions must not access executable sections.  This option can be
20875 useful on targets that are configured to have a dual instruction/data
20876 SRAM interface but that (unlike the M4K) do not automatically redirect
20877 PC-relative loads to the instruction RAM.
20878 @end table
20880 @item -msplit-addresses
20881 @itemx -mno-split-addresses
20882 @opindex msplit-addresses
20883 @opindex mno-split-addresses
20884 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
20885 relocation operators.  This option has been superseded by
20886 @option{-mexplicit-relocs} but is retained for backwards compatibility.
20888 @item -mexplicit-relocs
20889 @itemx -mno-explicit-relocs
20890 @opindex mexplicit-relocs
20891 @opindex mno-explicit-relocs
20892 Use (do not use) assembler relocation operators when dealing with symbolic
20893 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
20894 is to use assembler macros instead.
20896 @option{-mexplicit-relocs} is the default if GCC was configured
20897 to use an assembler that supports relocation operators.
20899 @item -mcheck-zero-division
20900 @itemx -mno-check-zero-division
20901 @opindex mcheck-zero-division
20902 @opindex mno-check-zero-division
20903 Trap (do not trap) on integer division by zero.
20905 The default is @option{-mcheck-zero-division}.
20907 @item -mdivide-traps
20908 @itemx -mdivide-breaks
20909 @opindex mdivide-traps
20910 @opindex mdivide-breaks
20911 MIPS systems check for division by zero by generating either a
20912 conditional trap or a break instruction.  Using traps results in
20913 smaller code, but is only supported on MIPS II and later.  Also, some
20914 versions of the Linux kernel have a bug that prevents trap from
20915 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
20916 allow conditional traps on architectures that support them and
20917 @option{-mdivide-breaks} to force the use of breaks.
20919 The default is usually @option{-mdivide-traps}, but this can be
20920 overridden at configure time using @option{--with-divide=breaks}.
20921 Divide-by-zero checks can be completely disabled using
20922 @option{-mno-check-zero-division}.
20924 @item -mload-store-pairs
20925 @itemx -mno-load-store-pairs
20926 @opindex mload-store-pairs
20927 @opindex mno-load-store-pairs
20928 Enable (disable) an optimization that pairs consecutive load or store
20929 instructions to enable load/store bonding.  This option is enabled by
20930 default but only takes effect when the selected architecture is known
20931 to support bonding.
20933 @item -mmemcpy
20934 @itemx -mno-memcpy
20935 @opindex mmemcpy
20936 @opindex mno-memcpy
20937 Force (do not force) the use of @code{memcpy} for non-trivial block
20938 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
20939 most constant-sized copies.
20941 @item -mlong-calls
20942 @itemx -mno-long-calls
20943 @opindex mlong-calls
20944 @opindex mno-long-calls
20945 Disable (do not disable) use of the @code{jal} instruction.  Calling
20946 functions using @code{jal} is more efficient but requires the caller
20947 and callee to be in the same 256 megabyte segment.
20949 This option has no effect on abicalls code.  The default is
20950 @option{-mno-long-calls}.
20952 @item -mmad
20953 @itemx -mno-mad
20954 @opindex mmad
20955 @opindex mno-mad
20956 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
20957 instructions, as provided by the R4650 ISA@.
20959 @item -mimadd
20960 @itemx -mno-imadd
20961 @opindex mimadd
20962 @opindex mno-imadd
20963 Enable (disable) use of the @code{madd} and @code{msub} integer
20964 instructions.  The default is @option{-mimadd} on architectures
20965 that support @code{madd} and @code{msub} except for the 74k 
20966 architecture where it was found to generate slower code.
20968 @item -mfused-madd
20969 @itemx -mno-fused-madd
20970 @opindex mfused-madd
20971 @opindex mno-fused-madd
20972 Enable (disable) use of the floating-point multiply-accumulate
20973 instructions, when they are available.  The default is
20974 @option{-mfused-madd}.
20976 On the R8000 CPU when multiply-accumulate instructions are used,
20977 the intermediate product is calculated to infinite precision
20978 and is not subject to the FCSR Flush to Zero bit.  This may be
20979 undesirable in some circumstances.  On other processors the result
20980 is numerically identical to the equivalent computation using
20981 separate multiply, add, subtract and negate instructions.
20983 @item -nocpp
20984 @opindex nocpp
20985 Tell the MIPS assembler to not run its preprocessor over user
20986 assembler files (with a @samp{.s} suffix) when assembling them.
20988 @item -mfix-24k
20989 @itemx -mno-fix-24k
20990 @opindex mfix-24k
20991 @opindex mno-fix-24k
20992 Work around the 24K E48 (lost data on stores during refill) errata.
20993 The workarounds are implemented by the assembler rather than by GCC@.
20995 @item -mfix-r4000
20996 @itemx -mno-fix-r4000
20997 @opindex mfix-r4000
20998 @opindex mno-fix-r4000
20999 Work around certain R4000 CPU errata:
21000 @itemize @minus
21001 @item
21002 A double-word or a variable shift may give an incorrect result if executed
21003 immediately after starting an integer division.
21004 @item
21005 A double-word or a variable shift may give an incorrect result if executed
21006 while an integer multiplication is in progress.
21007 @item
21008 An integer division may give an incorrect result if started in a delay slot
21009 of a taken branch or a jump.
21010 @end itemize
21012 @item -mfix-r4400
21013 @itemx -mno-fix-r4400
21014 @opindex mfix-r4400
21015 @opindex mno-fix-r4400
21016 Work around certain R4400 CPU errata:
21017 @itemize @minus
21018 @item
21019 A double-word or a variable shift may give an incorrect result if executed
21020 immediately after starting an integer division.
21021 @end itemize
21023 @item -mfix-r10000
21024 @itemx -mno-fix-r10000
21025 @opindex mfix-r10000
21026 @opindex mno-fix-r10000
21027 Work around certain R10000 errata:
21028 @itemize @minus
21029 @item
21030 @code{ll}/@code{sc} sequences may not behave atomically on revisions
21031 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
21032 @end itemize
21034 This option can only be used if the target architecture supports
21035 branch-likely instructions.  @option{-mfix-r10000} is the default when
21036 @option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
21037 otherwise.
21039 @item -mfix-rm7000
21040 @itemx -mno-fix-rm7000
21041 @opindex mfix-rm7000
21042 Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
21043 workarounds are implemented by the assembler rather than by GCC@.
21045 @item -mfix-vr4120
21046 @itemx -mno-fix-vr4120
21047 @opindex mfix-vr4120
21048 Work around certain VR4120 errata:
21049 @itemize @minus
21050 @item
21051 @code{dmultu} does not always produce the correct result.
21052 @item
21053 @code{div} and @code{ddiv} do not always produce the correct result if one
21054 of the operands is negative.
21055 @end itemize
21056 The workarounds for the division errata rely on special functions in
21057 @file{libgcc.a}.  At present, these functions are only provided by
21058 the @code{mips64vr*-elf} configurations.
21060 Other VR4120 errata require a NOP to be inserted between certain pairs of
21061 instructions.  These errata are handled by the assembler, not by GCC itself.
21063 @item -mfix-vr4130
21064 @opindex mfix-vr4130
21065 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
21066 workarounds are implemented by the assembler rather than by GCC,
21067 although GCC avoids using @code{mflo} and @code{mfhi} if the
21068 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
21069 instructions are available instead.
21071 @item -mfix-sb1
21072 @itemx -mno-fix-sb1
21073 @opindex mfix-sb1
21074 Work around certain SB-1 CPU core errata.
21075 (This flag currently works around the SB-1 revision 2
21076 ``F1'' and ``F2'' floating-point errata.)
21078 @item -mr10k-cache-barrier=@var{setting}
21079 @opindex mr10k-cache-barrier
21080 Specify whether GCC should insert cache barriers to avoid the
21081 side effects of speculation on R10K processors.
21083 In common with many processors, the R10K tries to predict the outcome
21084 of a conditional branch and speculatively executes instructions from
21085 the ``taken'' branch.  It later aborts these instructions if the
21086 predicted outcome is wrong.  However, on the R10K, even aborted
21087 instructions can have side effects.
21089 This problem only affects kernel stores and, depending on the system,
21090 kernel loads.  As an example, a speculatively-executed store may load
21091 the target memory into cache and mark the cache line as dirty, even if
21092 the store itself is later aborted.  If a DMA operation writes to the
21093 same area of memory before the ``dirty'' line is flushed, the cached
21094 data overwrites the DMA-ed data.  See the R10K processor manual
21095 for a full description, including other potential problems.
21097 One workaround is to insert cache barrier instructions before every memory
21098 access that might be speculatively executed and that might have side
21099 effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
21100 controls GCC's implementation of this workaround.  It assumes that
21101 aborted accesses to any byte in the following regions does not have
21102 side effects:
21104 @enumerate
21105 @item
21106 the memory occupied by the current function's stack frame;
21108 @item
21109 the memory occupied by an incoming stack argument;
21111 @item
21112 the memory occupied by an object with a link-time-constant address.
21113 @end enumerate
21115 It is the kernel's responsibility to ensure that speculative
21116 accesses to these regions are indeed safe.
21118 If the input program contains a function declaration such as:
21120 @smallexample
21121 void foo (void);
21122 @end smallexample
21124 then the implementation of @code{foo} must allow @code{j foo} and
21125 @code{jal foo} to be executed speculatively.  GCC honors this
21126 restriction for functions it compiles itself.  It expects non-GCC
21127 functions (such as hand-written assembly code) to do the same.
21129 The option has three forms:
21131 @table @gcctabopt
21132 @item -mr10k-cache-barrier=load-store
21133 Insert a cache barrier before a load or store that might be
21134 speculatively executed and that might have side effects even
21135 if aborted.
21137 @item -mr10k-cache-barrier=store
21138 Insert a cache barrier before a store that might be speculatively
21139 executed and that might have side effects even if aborted.
21141 @item -mr10k-cache-barrier=none
21142 Disable the insertion of cache barriers.  This is the default setting.
21143 @end table
21145 @item -mflush-func=@var{func}
21146 @itemx -mno-flush-func
21147 @opindex mflush-func
21148 Specifies the function to call to flush the I and D caches, or to not
21149 call any such function.  If called, the function must take the same
21150 arguments as the common @code{_flush_func}, that is, the address of the
21151 memory range for which the cache is being flushed, the size of the
21152 memory range, and the number 3 (to flush both caches).  The default
21153 depends on the target GCC was configured for, but commonly is either
21154 @code{_flush_func} or @code{__cpu_flush}.
21156 @item mbranch-cost=@var{num}
21157 @opindex mbranch-cost
21158 Set the cost of branches to roughly @var{num} ``simple'' instructions.
21159 This cost is only a heuristic and is not guaranteed to produce
21160 consistent results across releases.  A zero cost redundantly selects
21161 the default, which is based on the @option{-mtune} setting.
21163 @item -mbranch-likely
21164 @itemx -mno-branch-likely
21165 @opindex mbranch-likely
21166 @opindex mno-branch-likely
21167 Enable or disable use of Branch Likely instructions, regardless of the
21168 default for the selected architecture.  By default, Branch Likely
21169 instructions may be generated if they are supported by the selected
21170 architecture.  An exception is for the MIPS32 and MIPS64 architectures
21171 and processors that implement those architectures; for those, Branch
21172 Likely instructions are not be generated by default because the MIPS32
21173 and MIPS64 architectures specifically deprecate their use.
21175 @item -mcompact-branches=never
21176 @itemx -mcompact-branches=optimal
21177 @itemx -mcompact-branches=always
21178 @opindex mcompact-branches=never
21179 @opindex mcompact-branches=optimal
21180 @opindex mcompact-branches=always
21181 These options control which form of branches will be generated.  The
21182 default is @option{-mcompact-branches=optimal}.
21184 The @option{-mcompact-branches=never} option ensures that compact branch
21185 instructions will never be generated.
21187 The @option{-mcompact-branches=always} option ensures that a compact
21188 branch instruction will be generated if available.  If a compact branch
21189 instruction is not available, a delay slot form of the branch will be
21190 used instead.
21192 This option is supported from MIPS Release 6 onwards.
21194 The @option{-mcompact-branches=optimal} option will cause a delay slot
21195 branch to be used if one is available in the current ISA and the delay
21196 slot is successfully filled.  If the delay slot is not filled, a compact
21197 branch will be chosen if one is available.
21199 @item -mfp-exceptions
21200 @itemx -mno-fp-exceptions
21201 @opindex mfp-exceptions
21202 Specifies whether FP exceptions are enabled.  This affects how
21203 FP instructions are scheduled for some processors.
21204 The default is that FP exceptions are
21205 enabled.
21207 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
21208 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
21209 FP pipe.
21211 @item -mvr4130-align
21212 @itemx -mno-vr4130-align
21213 @opindex mvr4130-align
21214 The VR4130 pipeline is two-way superscalar, but can only issue two
21215 instructions together if the first one is 8-byte aligned.  When this
21216 option is enabled, GCC aligns pairs of instructions that it
21217 thinks should execute in parallel.
21219 This option only has an effect when optimizing for the VR4130.
21220 It normally makes code faster, but at the expense of making it bigger.
21221 It is enabled by default at optimization level @option{-O3}.
21223 @item -msynci
21224 @itemx -mno-synci
21225 @opindex msynci
21226 Enable (disable) generation of @code{synci} instructions on
21227 architectures that support it.  The @code{synci} instructions (if
21228 enabled) are generated when @code{__builtin___clear_cache} is
21229 compiled.
21231 This option defaults to @option{-mno-synci}, but the default can be
21232 overridden by configuring GCC with @option{--with-synci}.
21234 When compiling code for single processor systems, it is generally safe
21235 to use @code{synci}.  However, on many multi-core (SMP) systems, it
21236 does not invalidate the instruction caches on all cores and may lead
21237 to undefined behavior.
21239 @item -mrelax-pic-calls
21240 @itemx -mno-relax-pic-calls
21241 @opindex mrelax-pic-calls
21242 Try to turn PIC calls that are normally dispatched via register
21243 @code{$25} into direct calls.  This is only possible if the linker can
21244 resolve the destination at link time and if the destination is within
21245 range for a direct call.
21247 @option{-mrelax-pic-calls} is the default if GCC was configured to use
21248 an assembler and a linker that support the @code{.reloc} assembly
21249 directive and @option{-mexplicit-relocs} is in effect.  With
21250 @option{-mno-explicit-relocs}, this optimization can be performed by the
21251 assembler and the linker alone without help from the compiler.
21253 @item -mmcount-ra-address
21254 @itemx -mno-mcount-ra-address
21255 @opindex mmcount-ra-address
21256 @opindex mno-mcount-ra-address
21257 Emit (do not emit) code that allows @code{_mcount} to modify the
21258 calling function's return address.  When enabled, this option extends
21259 the usual @code{_mcount} interface with a new @var{ra-address}
21260 parameter, which has type @code{intptr_t *} and is passed in register
21261 @code{$12}.  @code{_mcount} can then modify the return address by
21262 doing both of the following:
21263 @itemize
21264 @item
21265 Returning the new address in register @code{$31}.
21266 @item
21267 Storing the new address in @code{*@var{ra-address}},
21268 if @var{ra-address} is nonnull.
21269 @end itemize
21271 The default is @option{-mno-mcount-ra-address}.
21273 @item -mframe-header-opt
21274 @itemx -mno-frame-header-opt
21275 @opindex mframe-header-opt
21276 Enable (disable) frame header optimization in the o32 ABI.  When using the
21277 o32 ABI, calling functions will allocate 16 bytes on the stack for the called
21278 function to write out register arguments.  When enabled, this optimization
21279 will suppress the allocation of the frame header if it can be determined that
21280 it is unused.
21282 This optimization is off by default at all optimization levels.
21284 @item -mlxc1-sxc1
21285 @itemx -mno-lxc1-sxc1
21286 @opindex mlxc1-sxc1
21287 When applicable, enable (disable) the generation of @code{lwxc1},
21288 @code{swxc1}, @code{ldxc1}, @code{sdxc1} instructions.  Enabled by default.
21290 @item -mmadd4
21291 @itemx -mno-madd4
21292 @opindex mmadd4
21293 When applicable, enable (disable) the generation of 4-operand @code{madd.s},
21294 @code{madd.d} and related instructions.  Enabled by default.
21296 @end table
21298 @node MMIX Options
21299 @subsection MMIX Options
21300 @cindex MMIX Options
21302 These options are defined for the MMIX:
21304 @table @gcctabopt
21305 @item -mlibfuncs
21306 @itemx -mno-libfuncs
21307 @opindex mlibfuncs
21308 @opindex mno-libfuncs
21309 Specify that intrinsic library functions are being compiled, passing all
21310 values in registers, no matter the size.
21312 @item -mepsilon
21313 @itemx -mno-epsilon
21314 @opindex mepsilon
21315 @opindex mno-epsilon
21316 Generate floating-point comparison instructions that compare with respect
21317 to the @code{rE} epsilon register.
21319 @item -mabi=mmixware
21320 @itemx -mabi=gnu
21321 @opindex mabi=mmixware
21322 @opindex mabi=gnu
21323 Generate code that passes function parameters and return values that (in
21324 the called function) are seen as registers @code{$0} and up, as opposed to
21325 the GNU ABI which uses global registers @code{$231} and up.
21327 @item -mzero-extend
21328 @itemx -mno-zero-extend
21329 @opindex mzero-extend
21330 @opindex mno-zero-extend
21331 When reading data from memory in sizes shorter than 64 bits, use (do not
21332 use) zero-extending load instructions by default, rather than
21333 sign-extending ones.
21335 @item -mknuthdiv
21336 @itemx -mno-knuthdiv
21337 @opindex mknuthdiv
21338 @opindex mno-knuthdiv
21339 Make the result of a division yielding a remainder have the same sign as
21340 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
21341 remainder follows the sign of the dividend.  Both methods are
21342 arithmetically valid, the latter being almost exclusively used.
21344 @item -mtoplevel-symbols
21345 @itemx -mno-toplevel-symbols
21346 @opindex mtoplevel-symbols
21347 @opindex mno-toplevel-symbols
21348 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
21349 code can be used with the @code{PREFIX} assembly directive.
21351 @item -melf
21352 @opindex melf
21353 Generate an executable in the ELF format, rather than the default
21354 @samp{mmo} format used by the @command{mmix} simulator.
21356 @item -mbranch-predict
21357 @itemx -mno-branch-predict
21358 @opindex mbranch-predict
21359 @opindex mno-branch-predict
21360 Use (do not use) the probable-branch instructions, when static branch
21361 prediction indicates a probable branch.
21363 @item -mbase-addresses
21364 @itemx -mno-base-addresses
21365 @opindex mbase-addresses
21366 @opindex mno-base-addresses
21367 Generate (do not generate) code that uses @emph{base addresses}.  Using a
21368 base address automatically generates a request (handled by the assembler
21369 and the linker) for a constant to be set up in a global register.  The
21370 register is used for one or more base address requests within the range 0
21371 to 255 from the value held in the register.  The generally leads to short
21372 and fast code, but the number of different data items that can be
21373 addressed is limited.  This means that a program that uses lots of static
21374 data may require @option{-mno-base-addresses}.
21376 @item -msingle-exit
21377 @itemx -mno-single-exit
21378 @opindex msingle-exit
21379 @opindex mno-single-exit
21380 Force (do not force) generated code to have a single exit point in each
21381 function.
21382 @end table
21384 @node MN10300 Options
21385 @subsection MN10300 Options
21386 @cindex MN10300 options
21388 These @option{-m} options are defined for Matsushita MN10300 architectures:
21390 @table @gcctabopt
21391 @item -mmult-bug
21392 @opindex mmult-bug
21393 Generate code to avoid bugs in the multiply instructions for the MN10300
21394 processors.  This is the default.
21396 @item -mno-mult-bug
21397 @opindex mno-mult-bug
21398 Do not generate code to avoid bugs in the multiply instructions for the
21399 MN10300 processors.
21401 @item -mam33
21402 @opindex mam33
21403 Generate code using features specific to the AM33 processor.
21405 @item -mno-am33
21406 @opindex mno-am33
21407 Do not generate code using features specific to the AM33 processor.  This
21408 is the default.
21410 @item -mam33-2
21411 @opindex mam33-2
21412 Generate code using features specific to the AM33/2.0 processor.
21414 @item -mam34
21415 @opindex mam34
21416 Generate code using features specific to the AM34 processor.
21418 @item -mtune=@var{cpu-type}
21419 @opindex mtune
21420 Use the timing characteristics of the indicated CPU type when
21421 scheduling instructions.  This does not change the targeted processor
21422 type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
21423 @samp{am33-2} or @samp{am34}.
21425 @item -mreturn-pointer-on-d0
21426 @opindex mreturn-pointer-on-d0
21427 When generating a function that returns a pointer, return the pointer
21428 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
21429 only in @code{a0}, and attempts to call such functions without a prototype
21430 result in errors.  Note that this option is on by default; use
21431 @option{-mno-return-pointer-on-d0} to disable it.
21433 @item -mno-crt0
21434 @opindex mno-crt0
21435 Do not link in the C run-time initialization object file.
21437 @item -mrelax
21438 @opindex mrelax
21439 Indicate to the linker that it should perform a relaxation optimization pass
21440 to shorten branches, calls and absolute memory addresses.  This option only
21441 has an effect when used on the command line for the final link step.
21443 This option makes symbolic debugging impossible.
21445 @item -mliw
21446 @opindex mliw
21447 Allow the compiler to generate @emph{Long Instruction Word}
21448 instructions if the target is the @samp{AM33} or later.  This is the
21449 default.  This option defines the preprocessor macro @code{__LIW__}.
21451 @item -mnoliw
21452 @opindex mnoliw
21453 Do not allow the compiler to generate @emph{Long Instruction Word}
21454 instructions.  This option defines the preprocessor macro
21455 @code{__NO_LIW__}.
21457 @item -msetlb
21458 @opindex msetlb
21459 Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
21460 instructions if the target is the @samp{AM33} or later.  This is the
21461 default.  This option defines the preprocessor macro @code{__SETLB__}.
21463 @item -mnosetlb
21464 @opindex mnosetlb
21465 Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
21466 instructions.  This option defines the preprocessor macro
21467 @code{__NO_SETLB__}.
21469 @end table
21471 @node Moxie Options
21472 @subsection Moxie Options
21473 @cindex Moxie Options
21475 @table @gcctabopt
21477 @item -meb
21478 @opindex meb
21479 Generate big-endian code.  This is the default for @samp{moxie-*-*}
21480 configurations.
21482 @item -mel
21483 @opindex mel
21484 Generate little-endian code.
21486 @item -mmul.x
21487 @opindex mmul.x
21488 Generate mul.x and umul.x instructions.  This is the default for
21489 @samp{moxiebox-*-*} configurations.
21491 @item -mno-crt0
21492 @opindex mno-crt0
21493 Do not link in the C run-time initialization object file.
21495 @end table
21497 @node MSP430 Options
21498 @subsection MSP430 Options
21499 @cindex MSP430 Options
21501 These options are defined for the MSP430:
21503 @table @gcctabopt
21505 @item -masm-hex
21506 @opindex masm-hex
21507 Force assembly output to always use hex constants.  Normally such
21508 constants are signed decimals, but this option is available for
21509 testsuite and/or aesthetic purposes.
21511 @item -mmcu=
21512 @opindex mmcu=
21513 Select the MCU to target.  This is used to create a C preprocessor
21514 symbol based upon the MCU name, converted to upper case and pre- and
21515 post-fixed with @samp{__}.  This in turn is used by the
21516 @file{msp430.h} header file to select an MCU-specific supplementary
21517 header file.
21519 The option also sets the ISA to use.  If the MCU name is one that is
21520 known to only support the 430 ISA then that is selected, otherwise the
21521 430X ISA is selected.  A generic MCU name of @samp{msp430} can also be
21522 used to select the 430 ISA.  Similarly the generic @samp{msp430x} MCU
21523 name selects the 430X ISA.
21525 In addition an MCU-specific linker script is added to the linker
21526 command line.  The script's name is the name of the MCU with
21527 @file{.ld} appended.  Thus specifying @option{-mmcu=xxx} on the @command{gcc}
21528 command line defines the C preprocessor symbol @code{__XXX__} and
21529 cause the linker to search for a script called @file{xxx.ld}.
21531 This option is also passed on to the assembler.
21533 @item -mwarn-mcu
21534 @itemx -mno-warn-mcu
21535 @opindex mwarn-mcu
21536 @opindex mno-warn-mcu
21537 This option enables or disables warnings about conflicts between the
21538 MCU name specified by the @option{-mmcu} option and the ISA set by the
21539 @option{-mcpu} option and/or the hardware multiply support set by the
21540 @option{-mhwmult} option.  It also toggles warnings about unrecognized
21541 MCU names.  This option is on by default.
21543 @item -mcpu=
21544 @opindex mcpu=
21545 Specifies the ISA to use.  Accepted values are @samp{msp430},
21546 @samp{msp430x} and @samp{msp430xv2}.  This option is deprecated.  The
21547 @option{-mmcu=} option should be used to select the ISA.
21549 @item -msim
21550 @opindex msim
21551 Link to the simulator runtime libraries and linker script.  Overrides
21552 any scripts that would be selected by the @option{-mmcu=} option.
21554 @item -mlarge
21555 @opindex mlarge
21556 Use large-model addressing (20-bit pointers, 32-bit @code{size_t}).
21558 @item -msmall
21559 @opindex msmall
21560 Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).
21562 @item -mrelax
21563 @opindex mrelax
21564 This option is passed to the assembler and linker, and allows the
21565 linker to perform certain optimizations that cannot be done until
21566 the final link.
21568 @item mhwmult=
21569 @opindex mhwmult=
21570 Describes the type of hardware multiply supported by the target.
21571 Accepted values are @samp{none} for no hardware multiply, @samp{16bit}
21572 for the original 16-bit-only multiply supported by early MCUs.
21573 @samp{32bit} for the 16/32-bit multiply supported by later MCUs and
21574 @samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
21575 A value of @samp{auto} can also be given.  This tells GCC to deduce
21576 the hardware multiply support based upon the MCU name provided by the
21577 @option{-mmcu} option.  If no @option{-mmcu} option is specified or if
21578 the MCU name is not recognized then no hardware multiply support is
21579 assumed.  @code{auto} is the default setting.
21581 Hardware multiplies are normally performed by calling a library
21582 routine.  This saves space in the generated code.  When compiling at
21583 @option{-O3} or higher however the hardware multiplier is invoked
21584 inline.  This makes for bigger, but faster code.
21586 The hardware multiply routines disable interrupts whilst running and
21587 restore the previous interrupt state when they finish.  This makes
21588 them safe to use inside interrupt handlers as well as in normal code.
21590 @item -minrt
21591 @opindex minrt
21592 Enable the use of a minimum runtime environment - no static
21593 initializers or constructors.  This is intended for memory-constrained
21594 devices.  The compiler includes special symbols in some objects
21595 that tell the linker and runtime which code fragments are required.
21597 @item -mcode-region=
21598 @itemx -mdata-region=
21599 @opindex mcode-region
21600 @opindex mdata-region
21601 These options tell the compiler where to place functions and data that
21602 do not have one of the @code{lower}, @code{upper}, @code{either} or
21603 @code{section} attributes.  Possible values are @code{lower},
21604 @code{upper}, @code{either} or @code{any}.  The first three behave
21605 like the corresponding attribute.  The fourth possible value -
21606 @code{any} - is the default.  It leaves placement entirely up to the
21607 linker script and how it assigns the standard sections
21608 (@code{.text}, @code{.data}, etc) to the memory regions.
21610 @item -msilicon-errata=
21611 @opindex msilicon-errata
21612 This option passes on a request to assembler to enable the fixes for
21613 the named silicon errata.
21615 @item -msilicon-errata-warn=
21616 @opindex msilicon-errata-warn
21617 This option passes on a request to the assembler to enable warning
21618 messages when a silicon errata might need to be applied.
21620 @end table
21622 @node NDS32 Options
21623 @subsection NDS32 Options
21624 @cindex NDS32 Options
21626 These options are defined for NDS32 implementations:
21628 @table @gcctabopt
21630 @item -mbig-endian
21631 @opindex mbig-endian
21632 Generate code in big-endian mode.
21634 @item -mlittle-endian
21635 @opindex mlittle-endian
21636 Generate code in little-endian mode.
21638 @item -mreduced-regs
21639 @opindex mreduced-regs
21640 Use reduced-set registers for register allocation.
21642 @item -mfull-regs
21643 @opindex mfull-regs
21644 Use full-set registers for register allocation.
21646 @item -mcmov
21647 @opindex mcmov
21648 Generate conditional move instructions.
21650 @item -mno-cmov
21651 @opindex mno-cmov
21652 Do not generate conditional move instructions.
21654 @item -mext-perf
21655 @opindex mperf-ext
21656 Generate performance extension instructions.
21658 @item -mno-ext-perf
21659 @opindex mno-perf-ext
21660 Do not generate performance extension instructions.
21662 @item -mext-perf2
21663 @opindex mperf-ext
21664 Generate performance extension 2 instructions.
21666 @item -mno-ext-perf2
21667 @opindex mno-perf-ext
21668 Do not generate performance extension 2 instructions.
21670 @item -mext-string
21671 @opindex mperf-ext
21672 Generate string extension instructions.
21674 @item -mno-ext-string
21675 @opindex mno-perf-ext
21676 Do not generate string extension instructions.
21678 @item -mv3push
21679 @opindex mv3push
21680 Generate v3 push25/pop25 instructions.
21682 @item -mno-v3push
21683 @opindex mno-v3push
21684 Do not generate v3 push25/pop25 instructions.
21686 @item -m16-bit
21687 @opindex m16-bit
21688 Generate 16-bit instructions.
21690 @item -mno-16-bit
21691 @opindex mno-16-bit
21692 Do not generate 16-bit instructions.
21694 @item -misr-vector-size=@var{num}
21695 @opindex misr-vector-size
21696 Specify the size of each interrupt vector, which must be 4 or 16.
21698 @item -mcache-block-size=@var{num}
21699 @opindex mcache-block-size
21700 Specify the size of each cache block,
21701 which must be a power of 2 between 4 and 512.
21703 @item -march=@var{arch}
21704 @opindex march
21705 Specify the name of the target architecture.
21707 @item -mcmodel=@var{code-model}
21708 @opindex mcmodel
21709 Set the code model to one of
21710 @table @asis
21711 @item @samp{small}
21712 All the data and read-only data segments must be within 512KB addressing space.
21713 The text segment must be within 16MB addressing space.
21714 @item @samp{medium}
21715 The data segment must be within 512KB while the read-only data segment can be
21716 within 4GB addressing space.  The text segment should be still within 16MB
21717 addressing space.
21718 @item @samp{large}
21719 All the text and data segments can be within 4GB addressing space.
21720 @end table
21722 @item -mctor-dtor
21723 @opindex mctor-dtor
21724 Enable constructor/destructor feature.
21726 @item -mrelax
21727 @opindex mrelax
21728 Guide linker to relax instructions.
21730 @end table
21732 @node Nios II Options
21733 @subsection Nios II Options
21734 @cindex Nios II options
21735 @cindex Altera Nios II options
21737 These are the options defined for the Altera Nios II processor.
21739 @table @gcctabopt
21741 @item -G @var{num}
21742 @opindex G
21743 @cindex smaller data references
21744 Put global and static objects less than or equal to @var{num} bytes
21745 into the small data or BSS sections instead of the normal data or BSS
21746 sections.  The default value of @var{num} is 8.
21748 @item -mgpopt=@var{option}
21749 @itemx -mgpopt
21750 @itemx -mno-gpopt
21751 @opindex mgpopt
21752 @opindex mno-gpopt
21753 Generate (do not generate) GP-relative accesses.  The following 
21754 @var{option} names are recognized:
21756 @table @samp
21758 @item none
21759 Do not generate GP-relative accesses.
21761 @item local
21762 Generate GP-relative accesses for small data objects that are not 
21763 external, weak, or uninitialized common symbols.  
21764 Also use GP-relative addressing for objects that
21765 have been explicitly placed in a small data section via a @code{section}
21766 attribute.
21768 @item global
21769 As for @samp{local}, but also generate GP-relative accesses for
21770 small data objects that are external, weak, or common.  If you use this option,
21771 you must ensure that all parts of your program (including libraries) are
21772 compiled with the same @option{-G} setting.
21774 @item data
21775 Generate GP-relative accesses for all data objects in the program.  If you
21776 use this option, the entire data and BSS segments
21777 of your program must fit in 64K of memory and you must use an appropriate
21778 linker script to allocate them within the addressable range of the
21779 global pointer.
21781 @item all
21782 Generate GP-relative addresses for function pointers as well as data
21783 pointers.  If you use this option, the entire text, data, and BSS segments
21784 of your program must fit in 64K of memory and you must use an appropriate
21785 linker script to allocate them within the addressable range of the
21786 global pointer.
21788 @end table
21790 @option{-mgpopt} is equivalent to @option{-mgpopt=local}, and
21791 @option{-mno-gpopt} is equivalent to @option{-mgpopt=none}.
21793 The default is @option{-mgpopt} except when @option{-fpic} or
21794 @option{-fPIC} is specified to generate position-independent code.
21795 Note that the Nios II ABI does not permit GP-relative accesses from
21796 shared libraries.
21798 You may need to specify @option{-mno-gpopt} explicitly when building
21799 programs that include large amounts of small data, including large
21800 GOT data sections.  In this case, the 16-bit offset for GP-relative
21801 addressing may not be large enough to allow access to the entire 
21802 small data section.
21804 @item -mgprel-sec=@var{regexp}
21805 @opindex mgprel-sec
21806 This option specifies additional section names that can be accessed via
21807 GP-relative addressing.  It is most useful in conjunction with 
21808 @code{section} attributes on variable declarations 
21809 (@pxref{Common Variable Attributes}) and a custom linker script.  
21810 The @var{regexp} is a POSIX Extended Regular Expression.
21812 This option does not affect the behavior of the @option{-G} option, and 
21813 and the specified sections are in addition to the standard @code{.sdata} 
21814 and @code{.sbss} small-data sections that are recognized by @option{-mgpopt}.
21816 @item -mr0rel-sec=@var{regexp}
21817 @opindex mr0rel-sec
21818 This option specifies names of sections that can be accessed via a 
21819 16-bit offset from @code{r0}; that is, in the low 32K or high 32K 
21820 of the 32-bit address space.  It is most useful in conjunction with 
21821 @code{section} attributes on variable declarations 
21822 (@pxref{Common Variable Attributes}) and a custom linker script.  
21823 The @var{regexp} is a POSIX Extended Regular Expression.
21825 In contrast to the use of GP-relative addressing for small data, 
21826 zero-based addressing is never generated by default and there are no 
21827 conventional section names used in standard linker scripts for sections
21828 in the low or high areas of memory.
21830 @item -mel
21831 @itemx -meb
21832 @opindex mel
21833 @opindex meb
21834 Generate little-endian (default) or big-endian (experimental) code,
21835 respectively.
21837 @item -march=@var{arch}
21838 @opindex march
21839 This specifies the name of the target Nios II architecture.  GCC uses this
21840 name to determine what kind of instructions it can emit when generating
21841 assembly code.  Permissible names are: @samp{r1}, @samp{r2}.
21843 The preprocessor macro @code{__nios2_arch__} is available to programs,
21844 with value 1 or 2, indicating the targeted ISA level.
21846 @item -mbypass-cache
21847 @itemx -mno-bypass-cache
21848 @opindex mno-bypass-cache
21849 @opindex mbypass-cache
21850 Force all load and store instructions to always bypass cache by 
21851 using I/O variants of the instructions. The default is not to
21852 bypass the cache.
21854 @item -mno-cache-volatile 
21855 @itemx -mcache-volatile       
21856 @opindex mcache-volatile 
21857 @opindex mno-cache-volatile
21858 Volatile memory access bypass the cache using the I/O variants of 
21859 the load and store instructions. The default is not to bypass the cache.
21861 @item -mno-fast-sw-div
21862 @itemx -mfast-sw-div
21863 @opindex mno-fast-sw-div
21864 @opindex mfast-sw-div
21865 Do not use table-based fast divide for small numbers. The default 
21866 is to use the fast divide at @option{-O3} and above.
21868 @item -mno-hw-mul
21869 @itemx -mhw-mul
21870 @itemx -mno-hw-mulx
21871 @itemx -mhw-mulx
21872 @itemx -mno-hw-div
21873 @itemx -mhw-div
21874 @opindex mno-hw-mul
21875 @opindex mhw-mul
21876 @opindex mno-hw-mulx
21877 @opindex mhw-mulx
21878 @opindex mno-hw-div
21879 @opindex mhw-div
21880 Enable or disable emitting @code{mul}, @code{mulx} and @code{div} family of 
21881 instructions by the compiler. The default is to emit @code{mul}
21882 and not emit @code{div} and @code{mulx}.
21884 @item -mbmx
21885 @itemx -mno-bmx
21886 @itemx -mcdx
21887 @itemx -mno-cdx
21888 Enable or disable generation of Nios II R2 BMX (bit manipulation) and
21889 CDX (code density) instructions.  Enabling these instructions also
21890 requires @option{-march=r2}.  Since these instructions are optional
21891 extensions to the R2 architecture, the default is not to emit them.
21893 @item -mcustom-@var{insn}=@var{N}
21894 @itemx -mno-custom-@var{insn}
21895 @opindex mcustom-@var{insn}
21896 @opindex mno-custom-@var{insn}
21897 Each @option{-mcustom-@var{insn}=@var{N}} option enables use of a
21898 custom instruction with encoding @var{N} when generating code that uses 
21899 @var{insn}.  For example, @option{-mcustom-fadds=253} generates custom
21900 instruction 253 for single-precision floating-point add operations instead
21901 of the default behavior of using a library call.
21903 The following values of @var{insn} are supported.  Except as otherwise
21904 noted, floating-point operations are expected to be implemented with
21905 normal IEEE 754 semantics and correspond directly to the C operators or the
21906 equivalent GCC built-in functions (@pxref{Other Builtins}).
21908 Single-precision floating point:
21909 @table @asis
21911 @item @samp{fadds}, @samp{fsubs}, @samp{fdivs}, @samp{fmuls}
21912 Binary arithmetic operations.
21914 @item @samp{fnegs}
21915 Unary negation.
21917 @item @samp{fabss}
21918 Unary absolute value.
21920 @item @samp{fcmpeqs}, @samp{fcmpges}, @samp{fcmpgts}, @samp{fcmples}, @samp{fcmplts}, @samp{fcmpnes}
21921 Comparison operations.
21923 @item @samp{fmins}, @samp{fmaxs}
21924 Floating-point minimum and maximum.  These instructions are only
21925 generated if @option{-ffinite-math-only} is specified.
21927 @item @samp{fsqrts}
21928 Unary square root operation.
21930 @item @samp{fcoss}, @samp{fsins}, @samp{ftans}, @samp{fatans}, @samp{fexps}, @samp{flogs}
21931 Floating-point trigonometric and exponential functions.  These instructions
21932 are only generated if @option{-funsafe-math-optimizations} is also specified.
21934 @end table
21936 Double-precision floating point:
21937 @table @asis
21939 @item @samp{faddd}, @samp{fsubd}, @samp{fdivd}, @samp{fmuld}
21940 Binary arithmetic operations.
21942 @item @samp{fnegd}
21943 Unary negation.
21945 @item @samp{fabsd}
21946 Unary absolute value.
21948 @item @samp{fcmpeqd}, @samp{fcmpged}, @samp{fcmpgtd}, @samp{fcmpled}, @samp{fcmpltd}, @samp{fcmpned}
21949 Comparison operations.
21951 @item @samp{fmind}, @samp{fmaxd}
21952 Double-precision minimum and maximum.  These instructions are only
21953 generated if @option{-ffinite-math-only} is specified.
21955 @item @samp{fsqrtd}
21956 Unary square root operation.
21958 @item @samp{fcosd}, @samp{fsind}, @samp{ftand}, @samp{fatand}, @samp{fexpd}, @samp{flogd}
21959 Double-precision trigonometric and exponential functions.  These instructions
21960 are only generated if @option{-funsafe-math-optimizations} is also specified.
21962 @end table
21964 Conversions:
21965 @table @asis
21966 @item @samp{fextsd}
21967 Conversion from single precision to double precision.
21969 @item @samp{ftruncds}
21970 Conversion from double precision to single precision.
21972 @item @samp{fixsi}, @samp{fixsu}, @samp{fixdi}, @samp{fixdu}
21973 Conversion from floating point to signed or unsigned integer types, with
21974 truncation towards zero.
21976 @item @samp{round}
21977 Conversion from single-precision floating point to signed integer,
21978 rounding to the nearest integer and ties away from zero.
21979 This corresponds to the @code{__builtin_lroundf} function when
21980 @option{-fno-math-errno} is used.
21982 @item @samp{floatis}, @samp{floatus}, @samp{floatid}, @samp{floatud}
21983 Conversion from signed or unsigned integer types to floating-point types.
21985 @end table
21987 In addition, all of the following transfer instructions for internal
21988 registers X and Y must be provided to use any of the double-precision
21989 floating-point instructions.  Custom instructions taking two
21990 double-precision source operands expect the first operand in the
21991 64-bit register X.  The other operand (or only operand of a unary
21992 operation) is given to the custom arithmetic instruction with the
21993 least significant half in source register @var{src1} and the most
21994 significant half in @var{src2}.  A custom instruction that returns a
21995 double-precision result returns the most significant 32 bits in the
21996 destination register and the other half in 32-bit register Y.  
21997 GCC automatically generates the necessary code sequences to write
21998 register X and/or read register Y when double-precision floating-point
21999 instructions are used.
22001 @table @asis
22003 @item @samp{fwrx}
22004 Write @var{src1} into the least significant half of X and @var{src2} into
22005 the most significant half of X.
22007 @item @samp{fwry}
22008 Write @var{src1} into Y.
22010 @item @samp{frdxhi}, @samp{frdxlo}
22011 Read the most or least (respectively) significant half of X and store it in
22012 @var{dest}.
22014 @item @samp{frdy}
22015 Read the value of Y and store it into @var{dest}.
22016 @end table
22018 Note that you can gain more local control over generation of Nios II custom
22019 instructions by using the @code{target("custom-@var{insn}=@var{N}")}
22020 and @code{target("no-custom-@var{insn}")} function attributes
22021 (@pxref{Function Attributes})
22022 or pragmas (@pxref{Function Specific Option Pragmas}).
22024 @item -mcustom-fpu-cfg=@var{name}
22025 @opindex mcustom-fpu-cfg
22027 This option enables a predefined, named set of custom instruction encodings
22028 (see @option{-mcustom-@var{insn}} above).  
22029 Currently, the following sets are defined:
22031 @option{-mcustom-fpu-cfg=60-1} is equivalent to:
22032 @gccoptlist{-mcustom-fmuls=252 @gol
22033 -mcustom-fadds=253 @gol
22034 -mcustom-fsubs=254 @gol
22035 -fsingle-precision-constant}
22037 @option{-mcustom-fpu-cfg=60-2} is equivalent to:
22038 @gccoptlist{-mcustom-fmuls=252 @gol
22039 -mcustom-fadds=253 @gol
22040 -mcustom-fsubs=254 @gol
22041 -mcustom-fdivs=255 @gol
22042 -fsingle-precision-constant}
22044 @option{-mcustom-fpu-cfg=72-3} is equivalent to:
22045 @gccoptlist{-mcustom-floatus=243 @gol
22046 -mcustom-fixsi=244 @gol
22047 -mcustom-floatis=245 @gol
22048 -mcustom-fcmpgts=246 @gol
22049 -mcustom-fcmples=249 @gol
22050 -mcustom-fcmpeqs=250 @gol
22051 -mcustom-fcmpnes=251 @gol
22052 -mcustom-fmuls=252 @gol
22053 -mcustom-fadds=253 @gol
22054 -mcustom-fsubs=254 @gol
22055 -mcustom-fdivs=255 @gol
22056 -fsingle-precision-constant}
22058 Custom instruction assignments given by individual
22059 @option{-mcustom-@var{insn}=} options override those given by
22060 @option{-mcustom-fpu-cfg=}, regardless of the
22061 order of the options on the command line.
22063 Note that you can gain more local control over selection of a FPU
22064 configuration by using the @code{target("custom-fpu-cfg=@var{name}")}
22065 function attribute (@pxref{Function Attributes})
22066 or pragma (@pxref{Function Specific Option Pragmas}).
22068 @end table
22070 These additional @samp{-m} options are available for the Altera Nios II
22071 ELF (bare-metal) target:
22073 @table @gcctabopt
22075 @item -mhal
22076 @opindex mhal
22077 Link with HAL BSP.  This suppresses linking with the GCC-provided C runtime
22078 startup and termination code, and is typically used in conjunction with
22079 @option{-msys-crt0=} to specify the location of the alternate startup code
22080 provided by the HAL BSP.
22082 @item -msmallc
22083 @opindex msmallc
22084 Link with a limited version of the C library, @option{-lsmallc}, rather than
22085 Newlib.
22087 @item -msys-crt0=@var{startfile}
22088 @opindex msys-crt0
22089 @var{startfile} is the file name of the startfile (crt0) to use 
22090 when linking.  This option is only useful in conjunction with @option{-mhal}.
22092 @item -msys-lib=@var{systemlib}
22093 @opindex msys-lib
22094 @var{systemlib} is the library name of the library that provides
22095 low-level system calls required by the C library,
22096 e.g. @code{read} and @code{write}.
22097 This option is typically used to link with a library provided by a HAL BSP.
22099 @end table
22101 @node Nvidia PTX Options
22102 @subsection Nvidia PTX Options
22103 @cindex Nvidia PTX options
22104 @cindex nvptx options
22106 These options are defined for Nvidia PTX:
22108 @table @gcctabopt
22110 @item -m32
22111 @itemx -m64
22112 @opindex m32
22113 @opindex m64
22114 Generate code for 32-bit or 64-bit ABI.
22116 @item -mmainkernel
22117 @opindex mmainkernel
22118 Link in code for a __main kernel.  This is for stand-alone instead of
22119 offloading execution.
22121 @item -moptimize
22122 @opindex moptimize
22123 Apply partitioned execution optimizations.  This is the default when any
22124 level of optimization is selected.
22126 @item -msoft-stack
22127 @opindex msoft-stack
22128 Generate code that does not use @code{.local} memory
22129 directly for stack storage. Instead, a per-warp stack pointer is
22130 maintained explicitly. This enables variable-length stack allocation (with
22131 variable-length arrays or @code{alloca}), and when global memory is used for
22132 underlying storage, makes it possible to access automatic variables from other
22133 threads, or with atomic instructions. This code generation variant is used
22134 for OpenMP offloading, but the option is exposed on its own for the purpose
22135 of testing the compiler; to generate code suitable for linking into programs
22136 using OpenMP offloading, use option @option{-mgomp}.
22138 @item -muniform-simt
22139 @opindex muniform-simt
22140 Switch to code generation variant that allows to execute all threads in each
22141 warp, while maintaining memory state and side effects as if only one thread
22142 in each warp was active outside of OpenMP SIMD regions.  All atomic operations
22143 and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
22144 current lane index equals the master lane index), and the register being
22145 assigned is copied via a shuffle instruction from the master lane.  Outside of
22146 SIMD regions lane 0 is the master; inside, each thread sees itself as the
22147 master.  Shared memory array @code{int __nvptx_uni[]} stores all-zeros or
22148 all-ones bitmasks for each warp, indicating current mode (0 outside of SIMD
22149 regions).  Each thread can bitwise-and the bitmask at position @code{tid.y}
22150 with current lane index to compute the master lane index.
22152 @item -mgomp
22153 @opindex mgomp
22154 Generate code for use in OpenMP offloading: enables @option{-msoft-stack} and
22155 @option{-muniform-simt} options, and selects corresponding multilib variant.
22157 @end table
22159 @node PDP-11 Options
22160 @subsection PDP-11 Options
22161 @cindex PDP-11 Options
22163 These options are defined for the PDP-11:
22165 @table @gcctabopt
22166 @item -mfpu
22167 @opindex mfpu
22168 Use hardware FPP floating point.  This is the default.  (FIS floating
22169 point on the PDP-11/40 is not supported.)
22171 @item -msoft-float
22172 @opindex msoft-float
22173 Do not use hardware floating point.
22175 @item -mac0
22176 @opindex mac0
22177 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
22179 @item -mno-ac0
22180 @opindex mno-ac0
22181 Return floating-point results in memory.  This is the default.
22183 @item -m40
22184 @opindex m40
22185 Generate code for a PDP-11/40.
22187 @item -m45
22188 @opindex m45
22189 Generate code for a PDP-11/45.  This is the default.
22191 @item -m10
22192 @opindex m10
22193 Generate code for a PDP-11/10.
22195 @item -mbcopy-builtin
22196 @opindex mbcopy-builtin
22197 Use inline @code{movmemhi} patterns for copying memory.  This is the
22198 default.
22200 @item -mbcopy
22201 @opindex mbcopy
22202 Do not use inline @code{movmemhi} patterns for copying memory.
22204 @item -mint16
22205 @itemx -mno-int32
22206 @opindex mint16
22207 @opindex mno-int32
22208 Use 16-bit @code{int}.  This is the default.
22210 @item -mint32
22211 @itemx -mno-int16
22212 @opindex mint32
22213 @opindex mno-int16
22214 Use 32-bit @code{int}.
22216 @item -mfloat64
22217 @itemx -mno-float32
22218 @opindex mfloat64
22219 @opindex mno-float32
22220 Use 64-bit @code{float}.  This is the default.
22222 @item -mfloat32
22223 @itemx -mno-float64
22224 @opindex mfloat32
22225 @opindex mno-float64
22226 Use 32-bit @code{float}.
22228 @item -mabshi
22229 @opindex mabshi
22230 Use @code{abshi2} pattern.  This is the default.
22232 @item -mno-abshi
22233 @opindex mno-abshi
22234 Do not use @code{abshi2} pattern.
22236 @item -mbranch-expensive
22237 @opindex mbranch-expensive
22238 Pretend that branches are expensive.  This is for experimenting with
22239 code generation only.
22241 @item -mbranch-cheap
22242 @opindex mbranch-cheap
22243 Do not pretend that branches are expensive.  This is the default.
22245 @item -munix-asm
22246 @opindex munix-asm
22247 Use Unix assembler syntax.  This is the default when configured for
22248 @samp{pdp11-*-bsd}.
22250 @item -mdec-asm
22251 @opindex mdec-asm
22252 Use DEC assembler syntax.  This is the default when configured for any
22253 PDP-11 target other than @samp{pdp11-*-bsd}.
22254 @end table
22256 @node picoChip Options
22257 @subsection picoChip Options
22258 @cindex picoChip options
22260 These @samp{-m} options are defined for picoChip implementations:
22262 @table @gcctabopt
22264 @item -mae=@var{ae_type}
22265 @opindex mcpu
22266 Set the instruction set, register set, and instruction scheduling
22267 parameters for array element type @var{ae_type}.  Supported values
22268 for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
22270 @option{-mae=ANY} selects a completely generic AE type.  Code
22271 generated with this option runs on any of the other AE types.  The
22272 code is not as efficient as it would be if compiled for a specific
22273 AE type, and some types of operation (e.g., multiplication) do not
22274 work properly on all types of AE.
22276 @option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
22277 for compiled code, and is the default.
22279 @option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
22280 option may suffer from poor performance of byte (char) manipulation,
22281 since the DSP AE does not provide hardware support for byte load/stores.
22283 @item -msymbol-as-address
22284 Enable the compiler to directly use a symbol name as an address in a
22285 load/store instruction, without first loading it into a
22286 register.  Typically, the use of this option generates larger
22287 programs, which run faster than when the option isn't used.  However, the
22288 results vary from program to program, so it is left as a user option,
22289 rather than being permanently enabled.
22291 @item -mno-inefficient-warnings
22292 Disables warnings about the generation of inefficient code.  These
22293 warnings can be generated, for example, when compiling code that
22294 performs byte-level memory operations on the MAC AE type.  The MAC AE has
22295 no hardware support for byte-level memory operations, so all byte
22296 load/stores must be synthesized from word load/store operations.  This is
22297 inefficient and a warning is generated to indicate
22298 that you should rewrite the code to avoid byte operations, or to target
22299 an AE type that has the necessary hardware support.  This option disables
22300 these warnings.
22302 @end table
22304 @node PowerPC Options
22305 @subsection PowerPC Options
22306 @cindex PowerPC options
22308 These are listed under @xref{RS/6000 and PowerPC Options}.
22310 @node PowerPC SPE Options
22311 @subsection PowerPC SPE Options
22312 @cindex PowerPC SPE options
22314 These @samp{-m} options are defined for PowerPC SPE:
22315 @table @gcctabopt
22316 @item -mmfcrf
22317 @itemx -mno-mfcrf
22318 @itemx -mpopcntb
22319 @itemx -mno-popcntb
22320 @opindex mmfcrf
22321 @opindex mno-mfcrf
22322 @opindex mpopcntb
22323 @opindex mno-popcntb
22324 You use these options to specify which instructions are available on the
22325 processor you are using.  The default value of these options is
22326 determined when configuring GCC@.  Specifying the
22327 @option{-mcpu=@var{cpu_type}} overrides the specification of these
22328 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
22329 rather than the options listed above.
22331 The @option{-mmfcrf} option allows GCC to generate the move from
22332 condition register field instruction implemented on the POWER4
22333 processor and other processors that support the PowerPC V2.01
22334 architecture.
22335 The @option{-mpopcntb} option allows GCC to generate the popcount and
22336 double-precision FP reciprocal estimate instruction implemented on the
22337 POWER5 processor and other processors that support the PowerPC V2.02
22338 architecture.
22340 @item -mcpu=@var{cpu_type}
22341 @opindex mcpu
22342 Set architecture type, register usage, and
22343 instruction scheduling parameters for machine type @var{cpu_type}.
22344 Supported values for @var{cpu_type} are @samp{8540}, @samp{8548},
22345 and @samp{native}.
22347 @option{-mcpu=powerpc} specifies pure 32-bit PowerPC (either
22348 endian), with an appropriate, generic processor model assumed for
22349 scheduling purposes.
22351 Specifying @samp{native} as cpu type detects and selects the
22352 architecture option that corresponds to the host processor of the
22353 system performing the compilation.
22354 @option{-mcpu=native} has no effect if GCC does not recognize the
22355 processor.
22357 The other options specify a specific processor.  Code generated under
22358 those options runs best on that processor, and may not run at all on
22359 others.
22361 The @option{-mcpu} options automatically enable or disable the
22362 following options:
22364 @gccoptlist{-mhard-float  -mmfcrf  -mmultiple @gol
22365 -mpopcntb -mpopcntd @gol
22366 -msingle-float -mdouble-float @gol
22367 -mfloat128}
22369 The particular options set for any particular CPU varies between
22370 compiler versions, depending on what setting seems to produce optimal
22371 code for that CPU; it doesn't necessarily reflect the actual hardware's
22372 capabilities.  If you wish to set an individual option to a particular
22373 value, you may specify it after the @option{-mcpu} option, like
22374 @option{-mcpu=8548}.
22376 @item -mtune=@var{cpu_type}
22377 @opindex mtune
22378 Set the instruction scheduling parameters for machine type
22379 @var{cpu_type}, but do not set the architecture type or register usage,
22380 as @option{-mcpu=@var{cpu_type}} does.  The same
22381 values for @var{cpu_type} are used for @option{-mtune} as for
22382 @option{-mcpu}.  If both are specified, the code generated uses the
22383 architecture and registers set by @option{-mcpu}, but the
22384 scheduling parameters set by @option{-mtune}.
22386 @item -msecure-plt
22387 @opindex msecure-plt
22388 Generate code that allows @command{ld} and @command{ld.so}
22389 to build executables and shared
22390 libraries with non-executable @code{.plt} and @code{.got} sections.
22391 This is a PowerPC
22392 32-bit SYSV ABI option.
22394 @item -mbss-plt
22395 @opindex mbss-plt
22396 Generate code that uses a BSS @code{.plt} section that @command{ld.so}
22397 fills in, and
22398 requires @code{.plt} and @code{.got}
22399 sections that are both writable and executable.
22400 This is a PowerPC 32-bit SYSV ABI option.
22402 @item -misel
22403 @itemx -mno-isel
22404 @opindex misel
22405 @opindex mno-isel
22406 This switch enables or disables the generation of ISEL instructions.
22408 @item -misel=@var{yes/no}
22409 This switch has been deprecated.  Use @option{-misel} and
22410 @option{-mno-isel} instead.
22412 @item -mspe
22413 @itemx -mno-spe
22414 @opindex mspe
22415 @opindex mno-spe
22416 This switch enables or disables the generation of SPE simd
22417 instructions.
22419 @item -mspe=@var{yes/no}
22420 This option has been deprecated.  Use @option{-mspe} and
22421 @option{-mno-spe} instead.
22423 @item -mfloat128
22424 @itemx -mno-float128
22425 @opindex mfloat128
22426 @opindex mno-float128
22427 Enable/disable the @var{__float128} keyword for IEEE 128-bit floating point
22428 and use either software emulation for IEEE 128-bit floating point or
22429 hardware instructions.
22431 @item -mfloat-gprs=@var{yes/single/double/no}
22432 @itemx -mfloat-gprs
22433 @opindex mfloat-gprs
22434 This switch enables or disables the generation of floating-point
22435 operations on the general-purpose registers for architectures that
22436 support it.
22438 The argument @samp{yes} or @samp{single} enables the use of
22439 single-precision floating-point operations.
22441 The argument @samp{double} enables the use of single and
22442 double-precision floating-point operations.
22444 The argument @samp{no} disables floating-point operations on the
22445 general-purpose registers.
22447 This option is currently only available on the MPC854x.
22449 @item -mfull-toc
22450 @itemx -mno-fp-in-toc
22451 @itemx -mno-sum-in-toc
22452 @itemx -mminimal-toc
22453 @opindex mfull-toc
22454 @opindex mno-fp-in-toc
22455 @opindex mno-sum-in-toc
22456 @opindex mminimal-toc
22457 Modify generation of the TOC (Table Of Contents), which is created for
22458 every executable file.  The @option{-mfull-toc} option is selected by
22459 default.  In that case, GCC allocates at least one TOC entry for
22460 each unique non-automatic variable reference in your program.  GCC
22461 also places floating-point constants in the TOC@.  However, only
22462 16,384 entries are available in the TOC@.
22464 If you receive a linker error message that saying you have overflowed
22465 the available TOC space, you can reduce the amount of TOC space used
22466 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
22467 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
22468 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
22469 generate code to calculate the sum of an address and a constant at
22470 run time instead of putting that sum into the TOC@.  You may specify one
22471 or both of these options.  Each causes GCC to produce very slightly
22472 slower and larger code at the expense of conserving TOC space.
22474 If you still run out of space in the TOC even when you specify both of
22475 these options, specify @option{-mminimal-toc} instead.  This option causes
22476 GCC to make only one TOC entry for every file.  When you specify this
22477 option, GCC produces code that is slower and larger but which
22478 uses extremely little TOC space.  You may wish to use this option
22479 only on files that contain less frequently-executed code.
22481 @item -maix32
22482 @opindex maix32
22483 Disables the 64-bit ABI.  GCC defaults to @option{-maix32}.
22485 @item -mxl-compat
22486 @itemx -mno-xl-compat
22487 @opindex mxl-compat
22488 @opindex mno-xl-compat
22489 Produce code that conforms more closely to IBM XL compiler semantics
22490 when using AIX-compatible ABI@.  Pass floating-point arguments to
22491 prototyped functions beyond the register save area (RSA) on the stack
22492 in addition to argument FPRs.  Do not assume that most significant
22493 double in 128-bit long double value is properly rounded when comparing
22494 values and converting to double.  Use XL symbol names for long double
22495 support routines.
22497 The AIX calling convention was extended but not initially documented to
22498 handle an obscure K&R C case of calling a function that takes the
22499 address of its arguments with fewer arguments than declared.  IBM XL
22500 compilers access floating-point arguments that do not fit in the
22501 RSA from the stack when a subroutine is compiled without
22502 optimization.  Because always storing floating-point arguments on the
22503 stack is inefficient and rarely needed, this option is not enabled by
22504 default and only is necessary when calling subroutines compiled by IBM
22505 XL compilers without optimization.
22507 @item -malign-natural
22508 @itemx -malign-power
22509 @opindex malign-natural
22510 @opindex malign-power
22511 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
22512 @option{-malign-natural} overrides the ABI-defined alignment of larger
22513 types, such as floating-point doubles, on their natural size-based boundary.
22514 The option @option{-malign-power} instructs GCC to follow the ABI-specified
22515 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
22517 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
22518 is not supported.
22520 @item -msoft-float
22521 @itemx -mhard-float
22522 @opindex msoft-float
22523 @opindex mhard-float
22524 Generate code that does not use (uses) the floating-point register set.
22525 Software floating-point emulation is provided if you use the
22526 @option{-msoft-float} option, and pass the option to GCC when linking.
22528 @item -msingle-float
22529 @itemx -mdouble-float
22530 @opindex msingle-float
22531 @opindex mdouble-float
22532 Generate code for single- or double-precision floating-point operations.
22533 @option{-mdouble-float} implies @option{-msingle-float}.
22535 @item -mmultiple
22536 @itemx -mno-multiple
22537 @opindex mmultiple
22538 @opindex mno-multiple
22539 Generate code that uses (does not use) the load multiple word
22540 instructions and the store multiple word instructions.  These
22541 instructions are generated by default on POWER systems, and not
22542 generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
22543 PowerPC systems, since those instructions do not work when the
22544 processor is in little-endian mode.  The exceptions are PPC740 and
22545 PPC750 which permit these instructions in little-endian mode.
22547 @item -mupdate
22548 @itemx -mno-update
22549 @opindex mupdate
22550 @opindex mno-update
22551 Generate code that uses (does not use) the load or store instructions
22552 that update the base register to the address of the calculated memory
22553 location.  These instructions are generated by default.  If you use
22554 @option{-mno-update}, there is a small window between the time that the
22555 stack pointer is updated and the address of the previous frame is
22556 stored, which means code that walks the stack frame across interrupts or
22557 signals may get corrupted data.
22559 @item -mavoid-indexed-addresses
22560 @itemx -mno-avoid-indexed-addresses
22561 @opindex mavoid-indexed-addresses
22562 @opindex mno-avoid-indexed-addresses
22563 Generate code that tries to avoid (not avoid) the use of indexed load
22564 or store instructions. These instructions can incur a performance
22565 penalty on Power6 processors in certain situations, such as when
22566 stepping through large arrays that cross a 16M boundary.  This option
22567 is enabled by default when targeting Power6 and disabled otherwise.
22569 @item -mfused-madd
22570 @itemx -mno-fused-madd
22571 @opindex mfused-madd
22572 @opindex mno-fused-madd
22573 Generate code that uses (does not use) the floating-point multiply and
22574 accumulate instructions.  These instructions are generated by default
22575 if hardware floating point is used.  The machine-dependent
22576 @option{-mfused-madd} option is now mapped to the machine-independent
22577 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
22578 mapped to @option{-ffp-contract=off}.
22580 @item -mno-strict-align
22581 @itemx -mstrict-align
22582 @opindex mno-strict-align
22583 @opindex mstrict-align
22584 On System V.4 and embedded PowerPC systems do not (do) assume that
22585 unaligned memory references are handled by the system.
22587 @item -mrelocatable
22588 @itemx -mno-relocatable
22589 @opindex mrelocatable
22590 @opindex mno-relocatable
22591 Generate code that allows (does not allow) a static executable to be
22592 relocated to a different address at run time.  A simple embedded
22593 PowerPC system loader should relocate the entire contents of
22594 @code{.got2} and 4-byte locations listed in the @code{.fixup} section,
22595 a table of 32-bit addresses generated by this option.  For this to
22596 work, all objects linked together must be compiled with
22597 @option{-mrelocatable} or @option{-mrelocatable-lib}.
22598 @option{-mrelocatable} code aligns the stack to an 8-byte boundary.
22600 @item -mrelocatable-lib
22601 @itemx -mno-relocatable-lib
22602 @opindex mrelocatable-lib
22603 @opindex mno-relocatable-lib
22604 Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
22605 @code{.fixup} section to allow static executables to be relocated at
22606 run time, but @option{-mrelocatable-lib} does not use the smaller stack
22607 alignment of @option{-mrelocatable}.  Objects compiled with
22608 @option{-mrelocatable-lib} may be linked with objects compiled with
22609 any combination of the @option{-mrelocatable} options.
22611 @item -mno-toc
22612 @itemx -mtoc
22613 @opindex mno-toc
22614 @opindex mtoc
22615 On System V.4 and embedded PowerPC systems do not (do) assume that
22616 register 2 contains a pointer to a global area pointing to the addresses
22617 used in the program.
22619 @item -mlittle
22620 @itemx -mlittle-endian
22621 @opindex mlittle
22622 @opindex mlittle-endian
22623 On System V.4 and embedded PowerPC systems compile code for the
22624 processor in little-endian mode.  The @option{-mlittle-endian} option is
22625 the same as @option{-mlittle}.
22627 @item -mbig
22628 @itemx -mbig-endian
22629 @opindex mbig
22630 @opindex mbig-endian
22631 On System V.4 and embedded PowerPC systems compile code for the
22632 processor in big-endian mode.  The @option{-mbig-endian} option is
22633 the same as @option{-mbig}.
22635 @item -mdynamic-no-pic
22636 @opindex mdynamic-no-pic
22637 On Darwin and Mac OS X systems, compile code so that it is not
22638 relocatable, but that its external references are relocatable.  The
22639 resulting code is suitable for applications, but not shared
22640 libraries.
22642 @item -msingle-pic-base
22643 @opindex msingle-pic-base
22644 Treat the register used for PIC addressing as read-only, rather than
22645 loading it in the prologue for each function.  The runtime system is
22646 responsible for initializing this register with an appropriate value
22647 before execution begins.
22649 @item -mprioritize-restricted-insns=@var{priority}
22650 @opindex mprioritize-restricted-insns
22651 This option controls the priority that is assigned to
22652 dispatch-slot restricted instructions during the second scheduling
22653 pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
22654 or @samp{2} to assign no, highest, or second-highest (respectively)
22655 priority to dispatch-slot restricted
22656 instructions.
22658 @item -msched-costly-dep=@var{dependence_type}
22659 @opindex msched-costly-dep
22660 This option controls which dependences are considered costly
22661 by the target during instruction scheduling.  The argument
22662 @var{dependence_type} takes one of the following values:
22664 @table @asis
22665 @item @samp{no}
22666 No dependence is costly.
22668 @item @samp{all}
22669 All dependences are costly.
22671 @item @samp{true_store_to_load}
22672 A true dependence from store to load is costly.
22674 @item @samp{store_to_load}
22675 Any dependence from store to load is costly.
22677 @item @var{number}
22678 Any dependence for which the latency is greater than or equal to
22679 @var{number} is costly.
22680 @end table
22682 @item -minsert-sched-nops=@var{scheme}
22683 @opindex minsert-sched-nops
22684 This option controls which NOP insertion scheme is used during
22685 the second scheduling pass.  The argument @var{scheme} takes one of the
22686 following values:
22688 @table @asis
22689 @item @samp{no}
22690 Don't insert NOPs.
22692 @item @samp{pad}
22693 Pad with NOPs any dispatch group that has vacant issue slots,
22694 according to the scheduler's grouping.
22696 @item @samp{regroup_exact}
22697 Insert NOPs to force costly dependent insns into
22698 separate groups.  Insert exactly as many NOPs as needed to force an insn
22699 to a new group, according to the estimated processor grouping.
22701 @item @var{number}
22702 Insert NOPs to force costly dependent insns into
22703 separate groups.  Insert @var{number} NOPs to force an insn to a new group.
22704 @end table
22706 @item -mcall-sysv
22707 @opindex mcall-sysv
22708 On System V.4 and embedded PowerPC systems compile code using calling
22709 conventions that adhere to the March 1995 draft of the System V
22710 Application Binary Interface, PowerPC processor supplement.  This is the
22711 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
22713 @item -mcall-sysv-eabi
22714 @itemx -mcall-eabi
22715 @opindex mcall-sysv-eabi
22716 @opindex mcall-eabi
22717 Specify both @option{-mcall-sysv} and @option{-meabi} options.
22719 @item -mcall-sysv-noeabi
22720 @opindex mcall-sysv-noeabi
22721 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
22723 @item -mcall-aixdesc
22724 @opindex m
22725 On System V.4 and embedded PowerPC systems compile code for the AIX
22726 operating system.
22728 @item -mcall-linux
22729 @opindex mcall-linux
22730 On System V.4 and embedded PowerPC systems compile code for the
22731 Linux-based GNU system.
22733 @item -mcall-freebsd
22734 @opindex mcall-freebsd
22735 On System V.4 and embedded PowerPC systems compile code for the
22736 FreeBSD operating system.
22738 @item -mcall-netbsd
22739 @opindex mcall-netbsd
22740 On System V.4 and embedded PowerPC systems compile code for the
22741 NetBSD operating system.
22743 @item -mcall-openbsd
22744 @opindex mcall-netbsd
22745 On System V.4 and embedded PowerPC systems compile code for the
22746 OpenBSD operating system.
22748 @item -maix-struct-return
22749 @opindex maix-struct-return
22750 Return all structures in memory (as specified by the AIX ABI)@.
22752 @item -msvr4-struct-return
22753 @opindex msvr4-struct-return
22754 Return structures smaller than 8 bytes in registers (as specified by the
22755 SVR4 ABI)@.
22757 @item -mabi=@var{abi-type}
22758 @opindex mabi
22759 Extend the current ABI with a particular extension, or remove such extension.
22760 Valid values are @samp{altivec}, @samp{no-altivec}, @samp{spe},
22761 @samp{no-spe}, @samp{ibmlongdouble}, @samp{ieeelongdouble},
22762 @samp{elfv1}, @samp{elfv2}@.
22764 @item -mabi=spe
22765 @opindex mabi=spe
22766 Extend the current ABI with SPE ABI extensions.  This does not change
22767 the default ABI, instead it adds the SPE ABI extensions to the current
22768 ABI@.
22770 @item -mabi=no-spe
22771 @opindex mabi=no-spe
22772 Disable Book-E SPE ABI extensions for the current ABI@.
22774 @item -mabi=ibmlongdouble
22775 @opindex mabi=ibmlongdouble
22776 Change the current ABI to use IBM extended-precision long double.
22777 This is not likely to work if your system defaults to using IEEE
22778 extended-precision long double.  If you change the long double type
22779 from IEEE extended-precision, the compiler will issue a warning unless
22780 you use the @option{-Wno-psabi} option.
22782 @item -mabi=ieeelongdouble
22783 @opindex mabi=ieeelongdouble
22784 Change the current ABI to use IEEE extended-precision long double.
22785 This is not likely to work if your system defaults to using IBM
22786 extended-precision long double.  If you change the long double type
22787 from IBM extended-precision, the compiler will issue a warning unless
22788 you use the @option{-Wno-psabi} option.
22790 @item -mabi=elfv1
22791 @opindex mabi=elfv1
22792 Change the current ABI to use the ELFv1 ABI.
22793 This is the default ABI for big-endian PowerPC 64-bit Linux.
22794 Overriding the default ABI requires special system support and is
22795 likely to fail in spectacular ways.
22797 @item -mabi=elfv2
22798 @opindex mabi=elfv2
22799 Change the current ABI to use the ELFv2 ABI.
22800 This is the default ABI for little-endian PowerPC 64-bit Linux.
22801 Overriding the default ABI requires special system support and is
22802 likely to fail in spectacular ways.
22804 @item -mgnu-attribute
22805 @itemx -mno-gnu-attribute
22806 @opindex mgnu-attribute
22807 @opindex mno-gnu-attribute
22808 Emit .gnu_attribute assembly directives to set tag/value pairs in a
22809 .gnu.attributes section that specify ABI variations in function
22810 parameters or return values.
22812 @item -mprototype
22813 @itemx -mno-prototype
22814 @opindex mprototype
22815 @opindex mno-prototype
22816 On System V.4 and embedded PowerPC systems assume that all calls to
22817 variable argument functions are properly prototyped.  Otherwise, the
22818 compiler must insert an instruction before every non-prototyped call to
22819 set or clear bit 6 of the condition code register (@code{CR}) to
22820 indicate whether floating-point values are passed in the floating-point
22821 registers in case the function takes variable arguments.  With
22822 @option{-mprototype}, only calls to prototyped variable argument functions
22823 set or clear the bit.
22825 @item -msim
22826 @opindex msim
22827 On embedded PowerPC systems, assume that the startup module is called
22828 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
22829 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
22830 configurations.
22832 @item -mmvme
22833 @opindex mmvme
22834 On embedded PowerPC systems, assume that the startup module is called
22835 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
22836 @file{libc.a}.
22838 @item -mads
22839 @opindex mads
22840 On embedded PowerPC systems, assume that the startup module is called
22841 @file{crt0.o} and the standard C libraries are @file{libads.a} and
22842 @file{libc.a}.
22844 @item -myellowknife
22845 @opindex myellowknife
22846 On embedded PowerPC systems, assume that the startup module is called
22847 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
22848 @file{libc.a}.
22850 @item -mvxworks
22851 @opindex mvxworks
22852 On System V.4 and embedded PowerPC systems, specify that you are
22853 compiling for a VxWorks system.
22855 @item -memb
22856 @opindex memb
22857 On embedded PowerPC systems, set the @code{PPC_EMB} bit in the ELF flags
22858 header to indicate that @samp{eabi} extended relocations are used.
22860 @item -meabi
22861 @itemx -mno-eabi
22862 @opindex meabi
22863 @opindex mno-eabi
22864 On System V.4 and embedded PowerPC systems do (do not) adhere to the
22865 Embedded Applications Binary Interface (EABI), which is a set of
22866 modifications to the System V.4 specifications.  Selecting @option{-meabi}
22867 means that the stack is aligned to an 8-byte boundary, a function
22868 @code{__eabi} is called from @code{main} to set up the EABI
22869 environment, and the @option{-msdata} option can use both @code{r2} and
22870 @code{r13} to point to two separate small data areas.  Selecting
22871 @option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
22872 no EABI initialization function is called from @code{main}, and the
22873 @option{-msdata} option only uses @code{r13} to point to a single
22874 small data area.  The @option{-meabi} option is on by default if you
22875 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
22877 @item -msdata=eabi
22878 @opindex msdata=eabi
22879 On System V.4 and embedded PowerPC systems, put small initialized
22880 @code{const} global and static data in the @code{.sdata2} section, which
22881 is pointed to by register @code{r2}.  Put small initialized
22882 non-@code{const} global and static data in the @code{.sdata} section,
22883 which is pointed to by register @code{r13}.  Put small uninitialized
22884 global and static data in the @code{.sbss} section, which is adjacent to
22885 the @code{.sdata} section.  The @option{-msdata=eabi} option is
22886 incompatible with the @option{-mrelocatable} option.  The
22887 @option{-msdata=eabi} option also sets the @option{-memb} option.
22889 @item -msdata=sysv
22890 @opindex msdata=sysv
22891 On System V.4 and embedded PowerPC systems, put small global and static
22892 data in the @code{.sdata} section, which is pointed to by register
22893 @code{r13}.  Put small uninitialized global and static data in the
22894 @code{.sbss} section, which is adjacent to the @code{.sdata} section.
22895 The @option{-msdata=sysv} option is incompatible with the
22896 @option{-mrelocatable} option.
22898 @item -msdata=default
22899 @itemx -msdata
22900 @opindex msdata=default
22901 @opindex msdata
22902 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
22903 compile code the same as @option{-msdata=eabi}, otherwise compile code the
22904 same as @option{-msdata=sysv}.
22906 @item -msdata=data
22907 @opindex msdata=data
22908 On System V.4 and embedded PowerPC systems, put small global
22909 data in the @code{.sdata} section.  Put small uninitialized global
22910 data in the @code{.sbss} section.  Do not use register @code{r13}
22911 to address small data however.  This is the default behavior unless
22912 other @option{-msdata} options are used.
22914 @item -msdata=none
22915 @itemx -mno-sdata
22916 @opindex msdata=none
22917 @opindex mno-sdata
22918 On embedded PowerPC systems, put all initialized global and static data
22919 in the @code{.data} section, and all uninitialized data in the
22920 @code{.bss} section.
22922 @item -mblock-move-inline-limit=@var{num}
22923 @opindex mblock-move-inline-limit
22924 Inline all block moves (such as calls to @code{memcpy} or structure
22925 copies) less than or equal to @var{num} bytes.  The minimum value for
22926 @var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
22927 targets.  The default value is target-specific.
22929 @item -G @var{num}
22930 @opindex G
22931 @cindex smaller data references (PowerPC)
22932 @cindex .sdata/.sdata2 references (PowerPC)
22933 On embedded PowerPC systems, put global and static items less than or
22934 equal to @var{num} bytes into the small data or BSS sections instead of
22935 the normal data or BSS section.  By default, @var{num} is 8.  The
22936 @option{-G @var{num}} switch is also passed to the linker.
22937 All modules should be compiled with the same @option{-G @var{num}} value.
22939 @item -mregnames
22940 @itemx -mno-regnames
22941 @opindex mregnames
22942 @opindex mno-regnames
22943 On System V.4 and embedded PowerPC systems do (do not) emit register
22944 names in the assembly language output using symbolic forms.
22946 @item -mlongcall
22947 @itemx -mno-longcall
22948 @opindex mlongcall
22949 @opindex mno-longcall
22950 By default assume that all calls are far away so that a longer and more
22951 expensive calling sequence is required.  This is required for calls
22952 farther than 32 megabytes (33,554,432 bytes) from the current location.
22953 A short call is generated if the compiler knows
22954 the call cannot be that far away.  This setting can be overridden by
22955 the @code{shortcall} function attribute, or by @code{#pragma
22956 longcall(0)}.
22958 Some linkers are capable of detecting out-of-range calls and generating
22959 glue code on the fly.  On these systems, long calls are unnecessary and
22960 generate slower code.  As of this writing, the AIX linker can do this,
22961 as can the GNU linker for PowerPC/64.  It is planned to add this feature
22962 to the GNU linker for 32-bit PowerPC systems as well.
22964 In the future, GCC may ignore all longcall specifications
22965 when the linker is known to generate glue.
22967 @item -mtls-markers
22968 @itemx -mno-tls-markers
22969 @opindex mtls-markers
22970 @opindex mno-tls-markers
22971 Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
22972 specifying the function argument.  The relocation allows the linker to
22973 reliably associate function call with argument setup instructions for
22974 TLS optimization, which in turn allows GCC to better schedule the
22975 sequence.
22977 @item -mrecip
22978 @itemx -mno-recip
22979 @opindex mrecip
22980 This option enables use of the reciprocal estimate and
22981 reciprocal square root estimate instructions with additional
22982 Newton-Raphson steps to increase precision instead of doing a divide or
22983 square root and divide for floating-point arguments.  You should use
22984 the @option{-ffast-math} option when using @option{-mrecip} (or at
22985 least @option{-funsafe-math-optimizations},
22986 @option{-ffinite-math-only}, @option{-freciprocal-math} and
22987 @option{-fno-trapping-math}).  Note that while the throughput of the
22988 sequence is generally higher than the throughput of the non-reciprocal
22989 instruction, the precision of the sequence can be decreased by up to 2
22990 ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
22991 roots.
22993 @item -mrecip=@var{opt}
22994 @opindex mrecip=opt
22995 This option controls which reciprocal estimate instructions
22996 may be used.  @var{opt} is a comma-separated list of options, which may
22997 be preceded by a @code{!} to invert the option:
22999 @table @samp
23001 @item all
23002 Enable all estimate instructions.
23004 @item default
23005 Enable the default instructions, equivalent to @option{-mrecip}.
23007 @item none
23008 Disable all estimate instructions, equivalent to @option{-mno-recip}.
23010 @item div
23011 Enable the reciprocal approximation instructions for both
23012 single and double precision.
23014 @item divf
23015 Enable the single-precision reciprocal approximation instructions.
23017 @item divd
23018 Enable the double-precision reciprocal approximation instructions.
23020 @item rsqrt
23021 Enable the reciprocal square root approximation instructions for both
23022 single and double precision.
23024 @item rsqrtf
23025 Enable the single-precision reciprocal square root approximation instructions.
23027 @item rsqrtd
23028 Enable the double-precision reciprocal square root approximation instructions.
23030 @end table
23032 So, for example, @option{-mrecip=all,!rsqrtd} enables
23033 all of the reciprocal estimate instructions, except for the
23034 @code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
23035 which handle the double-precision reciprocal square root calculations.
23037 @item -mrecip-precision
23038 @itemx -mno-recip-precision
23039 @opindex mrecip-precision
23040 Assume (do not assume) that the reciprocal estimate instructions
23041 provide higher-precision estimates than is mandated by the PowerPC
23042 ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
23043 @option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
23044 The double-precision square root estimate instructions are not generated by
23045 default on low-precision machines, since they do not provide an
23046 estimate that converges after three steps.
23048 @item -mpointers-to-nested-functions
23049 @itemx -mno-pointers-to-nested-functions
23050 @opindex mpointers-to-nested-functions
23051 Generate (do not generate) code to load up the static chain register
23052 (@code{r11}) when calling through a pointer on AIX and 64-bit Linux
23053 systems where a function pointer points to a 3-word descriptor giving
23054 the function address, TOC value to be loaded in register @code{r2}, and
23055 static chain value to be loaded in register @code{r11}.  The
23056 @option{-mpointers-to-nested-functions} is on by default.  You cannot
23057 call through pointers to nested functions or pointers
23058 to functions compiled in other languages that use the static chain if
23059 you use @option{-mno-pointers-to-nested-functions}.
23061 @item -msave-toc-indirect
23062 @itemx -mno-save-toc-indirect
23063 @opindex msave-toc-indirect
23064 Generate (do not generate) code to save the TOC value in the reserved
23065 stack location in the function prologue if the function calls through
23066 a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
23067 saved in the prologue, it is saved just before the call through the
23068 pointer.  The @option{-mno-save-toc-indirect} option is the default.
23070 @item -mcompat-align-parm
23071 @itemx -mno-compat-align-parm
23072 @opindex mcompat-align-parm
23073 Generate (do not generate) code to pass structure parameters with a
23074 maximum alignment of 64 bits, for compatibility with older versions
23075 of GCC.
23077 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
23078 structure parameter on a 128-bit boundary when that structure contained
23079 a member requiring 128-bit alignment.  This is corrected in more
23080 recent versions of GCC.  This option may be used to generate code
23081 that is compatible with functions compiled with older versions of
23082 GCC.
23084 The @option{-mno-compat-align-parm} option is the default.
23086 @item -mstack-protector-guard=@var{guard}
23087 @itemx -mstack-protector-guard-reg=@var{reg}
23088 @itemx -mstack-protector-guard-offset=@var{offset}
23089 @itemx -mstack-protector-guard-symbol=@var{symbol}
23090 @opindex mstack-protector-guard
23091 @opindex mstack-protector-guard-reg
23092 @opindex mstack-protector-guard-offset
23093 @opindex mstack-protector-guard-symbol
23094 Generate stack protection code using canary at @var{guard}.  Supported
23095 locations are @samp{global} for global canary or @samp{tls} for per-thread
23096 canary in the TLS block (the default with GNU libc version 2.4 or later).
23098 With the latter choice the options
23099 @option{-mstack-protector-guard-reg=@var{reg}} and
23100 @option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
23101 which register to use as base register for reading the canary, and from what
23102 offset from that base register. The default for those is as specified in the
23103 relevant ABI.  @option{-mstack-protector-guard-symbol=@var{symbol}} overrides
23104 the offset with a symbol reference to a canary in the TLS block.
23105 @end table
23108 @node RISC-V Options
23109 @subsection RISC-V Options
23110 @cindex RISC-V Options
23112 These command-line options are defined for RISC-V targets:
23114 @table @gcctabopt
23115 @item -mbranch-cost=@var{n}
23116 @opindex mbranch-cost
23117 Set the cost of branches to roughly @var{n} instructions.
23119 @item -mplt
23120 @itemx -mno-plt
23121 @opindex plt
23122 When generating PIC code, do or don't allow the use of PLTs. Ignored for
23123 non-PIC.  The default is @option{-mplt}.
23125 @item -mabi=@var{ABI-string}
23126 @opindex mabi
23127 Specify integer and floating-point calling convention.  @var{ABI-string}
23128 contains two parts: the size of integer types and the registers used for
23129 floating-point types.  For example @samp{-march=rv64ifd -mabi=lp64d} means that
23130 @samp{long} and pointers are 64-bit (implicitly defining @samp{int} to be
23131 32-bit), and that floating-point values up to 64 bits wide are passed in F
23132 registers.  Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still
23133 allows the compiler to generate code that uses the F and D extensions but only
23134 allows floating-point values up to 32 bits long to be passed in registers; or
23135 @samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments will be
23136 passed in registers.
23138 The default for this argument is system dependent, users who want a specific
23139 calling convention should specify one explicitly.  The valid calling
23140 conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64},
23141 @samp{lp64f}, and @samp{lp64d}.  Some calling conventions are impossible to
23142 implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is
23143 invalid because the ABI requires 64-bit values be passed in F registers, but F
23144 registers are only 32 bits wide.  There is also the @samp{ilp32e} ABI that can
23145 only be used with the @samp{rv32e} architecture.  This ABI is not well
23146 specified at present, and is subject to change.
23148 @item -mfdiv
23149 @itemx -mno-fdiv
23150 @opindex mfdiv
23151 Do or don't use hardware floating-point divide and square root instructions.
23152 This requires the F or D extensions for floating-point registers.  The default
23153 is to use them if the specified architecture has these instructions.
23155 @item -mdiv
23156 @itemx -mno-div
23157 @opindex mdiv
23158 Do or don't use hardware instructions for integer division.  This requires the
23159 M extension.  The default is to use them if the specified architecture has
23160 these instructions.
23162 @item -march=@var{ISA-string}
23163 @opindex march
23164 Generate code for given RISC-V ISA (e.g.@ @samp{rv64im}).  ISA strings must be
23165 lower-case.  Examples include @samp{rv64i}, @samp{rv32g}, @samp{rv32e}, and
23166 @samp{rv32imaf}.
23168 @item -mtune=@var{processor-string}
23169 @opindex mtune
23170 Optimize the output for the given processor, specified by microarchitecture
23171 name.
23173 @item -mpreferred-stack-boundary=@var{num}
23174 @opindex mpreferred-stack-boundary
23175 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
23176 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
23177 the default is 4 (16 bytes or 128-bits).
23179 @strong{Warning:} If you use this switch, then you must build all modules with
23180 the same value, including any libraries.  This includes the system libraries
23181 and startup modules.
23183 @item -msmall-data-limit=@var{n}
23184 @opindex msmall-data-limit
23185 Put global and static data smaller than @var{n} bytes into a special section
23186 (on some targets).
23188 @item -msave-restore
23189 @itemx -mno-save-restore
23190 @opindex msave-restore
23191 Do or don't use smaller but slower prologue and epilogue code that uses
23192 library function calls.  The default is to use fast inline prologues and
23193 epilogues.
23195 @item -mstrict-align
23196 @itemx -mno-strict-align
23197 @opindex mstrict-align
23198 Do not or do generate unaligned memory accesses.  The default is set depending
23199 on whether the processor we are optimizing for supports fast unaligned access
23200 or not.
23202 @item -mcmodel=medlow
23203 @opindex mcmodel=medlow
23204 Generate code for the medium-low code model. The program and its statically
23205 defined symbols must lie within a single 2 GiB address range and must lie
23206 between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be
23207 statically or dynamically linked. This is the default code model.
23209 @item -mcmodel=medany
23210 @opindex mcmodel=medany
23211 Generate code for the medium-any code model. The program and its statically
23212 defined symbols must be within any single 2 GiB address range. Programs can be
23213 statically or dynamically linked.
23215 @item -mexplicit-relocs
23216 @itemx -mno-exlicit-relocs
23217 Use or do not use assembler relocation operators when dealing with symbolic
23218 addresses.  The alternative is to use assembler macros instead, which may
23219 limit optimization.
23221 @item -mrelax
23222 @itemx -mno-relax
23223 Take advantage of linker relaxations to reduce the number of instructions
23224 required to materialize symbol addresses. The default is to take advantage of
23225 linker relaxations.
23227 @end table
23229 @node RL78 Options
23230 @subsection RL78 Options
23231 @cindex RL78 Options
23233 @table @gcctabopt
23235 @item -msim
23236 @opindex msim
23237 Links in additional target libraries to support operation within a
23238 simulator.
23240 @item -mmul=none
23241 @itemx -mmul=g10
23242 @itemx -mmul=g13
23243 @itemx -mmul=g14
23244 @itemx -mmul=rl78
23245 @opindex mmul
23246 Specifies the type of hardware multiplication and division support to
23247 be used.  The simplest is @code{none}, which uses software for both
23248 multiplication and division.  This is the default.  The @code{g13}
23249 value is for the hardware multiply/divide peripheral found on the
23250 RL78/G13 (S2 core) targets.  The @code{g14} value selects the use of
23251 the multiplication and division instructions supported by the RL78/G14
23252 (S3 core) parts.  The value @code{rl78} is an alias for @code{g14} and
23253 the value @code{mg10} is an alias for @code{none}.
23255 In addition a C preprocessor macro is defined, based upon the setting
23256 of this option.  Possible values are: @code{__RL78_MUL_NONE__},
23257 @code{__RL78_MUL_G13__} or @code{__RL78_MUL_G14__}.
23259 @item -mcpu=g10
23260 @itemx -mcpu=g13
23261 @itemx -mcpu=g14
23262 @itemx -mcpu=rl78
23263 @opindex mcpu
23264 Specifies the RL78 core to target.  The default is the G14 core, also
23265 known as an S3 core or just RL78.  The G13 or S2 core does not have
23266 multiply or divide instructions, instead it uses a hardware peripheral
23267 for these operations.  The G10 or S1 core does not have register
23268 banks, so it uses a different calling convention.
23270 If this option is set it also selects the type of hardware multiply
23271 support to use, unless this is overridden by an explicit
23272 @option{-mmul=none} option on the command line.  Thus specifying
23273 @option{-mcpu=g13} enables the use of the G13 hardware multiply
23274 peripheral and specifying @option{-mcpu=g10} disables the use of
23275 hardware multiplications altogether.
23277 Note, although the RL78/G14 core is the default target, specifying
23278 @option{-mcpu=g14} or @option{-mcpu=rl78} on the command line does
23279 change the behavior of the toolchain since it also enables G14
23280 hardware multiply support.  If these options are not specified on the
23281 command line then software multiplication routines will be used even
23282 though the code targets the RL78 core.  This is for backwards
23283 compatibility with older toolchains which did not have hardware
23284 multiply and divide support.
23286 In addition a C preprocessor macro is defined, based upon the setting
23287 of this option.  Possible values are: @code{__RL78_G10__},
23288 @code{__RL78_G13__} or @code{__RL78_G14__}.
23290 @item -mg10
23291 @itemx -mg13
23292 @itemx -mg14
23293 @itemx -mrl78
23294 @opindex mg10
23295 @opindex mg13
23296 @opindex mg14
23297 @opindex mrl78
23298 These are aliases for the corresponding @option{-mcpu=} option.  They
23299 are provided for backwards compatibility.
23301 @item -mallregs
23302 @opindex mallregs
23303 Allow the compiler to use all of the available registers.  By default
23304 registers @code{r24..r31} are reserved for use in interrupt handlers.
23305 With this option enabled these registers can be used in ordinary
23306 functions as well.
23308 @item -m64bit-doubles
23309 @itemx -m32bit-doubles
23310 @opindex m64bit-doubles
23311 @opindex m32bit-doubles
23312 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
23313 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
23314 @option{-m32bit-doubles}.
23316 @item -msave-mduc-in-interrupts
23317 @itemx -mno-save-mduc-in-interrupts
23318 @opindex msave-mduc-in-interrupts
23319 @opindex mno-save-mduc-in-interrupts
23320 Specifies that interrupt handler functions should preserve the
23321 MDUC registers.  This is only necessary if normal code might use
23322 the MDUC registers, for example because it performs multiplication
23323 and division operations.  The default is to ignore the MDUC registers
23324 as this makes the interrupt handlers faster.  The target option -mg13
23325 needs to be passed for this to work as this feature is only available
23326 on the G13 target (S2 core).  The MDUC registers will only be saved
23327 if the interrupt handler performs a multiplication or division
23328 operation or it calls another function.
23330 @end table
23332 @node RS/6000 and PowerPC Options
23333 @subsection IBM RS/6000 and PowerPC Options
23334 @cindex RS/6000 and PowerPC Options
23335 @cindex IBM RS/6000 and PowerPC Options
23337 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
23338 @table @gcctabopt
23339 @item -mpowerpc-gpopt
23340 @itemx -mno-powerpc-gpopt
23341 @itemx -mpowerpc-gfxopt
23342 @itemx -mno-powerpc-gfxopt
23343 @need 800
23344 @itemx -mpowerpc64
23345 @itemx -mno-powerpc64
23346 @itemx -mmfcrf
23347 @itemx -mno-mfcrf
23348 @itemx -mpopcntb
23349 @itemx -mno-popcntb
23350 @itemx -mpopcntd
23351 @itemx -mno-popcntd
23352 @itemx -mfprnd
23353 @itemx -mno-fprnd
23354 @need 800
23355 @itemx -mcmpb
23356 @itemx -mno-cmpb
23357 @itemx -mmfpgpr
23358 @itemx -mno-mfpgpr
23359 @itemx -mhard-dfp
23360 @itemx -mno-hard-dfp
23361 @opindex mpowerpc-gpopt
23362 @opindex mno-powerpc-gpopt
23363 @opindex mpowerpc-gfxopt
23364 @opindex mno-powerpc-gfxopt
23365 @opindex mpowerpc64
23366 @opindex mno-powerpc64
23367 @opindex mmfcrf
23368 @opindex mno-mfcrf
23369 @opindex mpopcntb
23370 @opindex mno-popcntb
23371 @opindex mpopcntd
23372 @opindex mno-popcntd
23373 @opindex mfprnd
23374 @opindex mno-fprnd
23375 @opindex mcmpb
23376 @opindex mno-cmpb
23377 @opindex mmfpgpr
23378 @opindex mno-mfpgpr
23379 @opindex mhard-dfp
23380 @opindex mno-hard-dfp
23381 You use these options to specify which instructions are available on the
23382 processor you are using.  The default value of these options is
23383 determined when configuring GCC@.  Specifying the
23384 @option{-mcpu=@var{cpu_type}} overrides the specification of these
23385 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
23386 rather than the options listed above.
23388 Specifying @option{-mpowerpc-gpopt} allows
23389 GCC to use the optional PowerPC architecture instructions in the
23390 General Purpose group, including floating-point square root.  Specifying
23391 @option{-mpowerpc-gfxopt} allows GCC to
23392 use the optional PowerPC architecture instructions in the Graphics
23393 group, including floating-point select.
23395 The @option{-mmfcrf} option allows GCC to generate the move from
23396 condition register field instruction implemented on the POWER4
23397 processor and other processors that support the PowerPC V2.01
23398 architecture.
23399 The @option{-mpopcntb} option allows GCC to generate the popcount and
23400 double-precision FP reciprocal estimate instruction implemented on the
23401 POWER5 processor and other processors that support the PowerPC V2.02
23402 architecture.
23403 The @option{-mpopcntd} option allows GCC to generate the popcount
23404 instruction implemented on the POWER7 processor and other processors
23405 that support the PowerPC V2.06 architecture.
23406 The @option{-mfprnd} option allows GCC to generate the FP round to
23407 integer instructions implemented on the POWER5+ processor and other
23408 processors that support the PowerPC V2.03 architecture.
23409 The @option{-mcmpb} option allows GCC to generate the compare bytes
23410 instruction implemented on the POWER6 processor and other processors
23411 that support the PowerPC V2.05 architecture.
23412 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
23413 general-purpose register instructions implemented on the POWER6X
23414 processor and other processors that support the extended PowerPC V2.05
23415 architecture.
23416 The @option{-mhard-dfp} option allows GCC to generate the decimal
23417 floating-point instructions implemented on some POWER processors.
23419 The @option{-mpowerpc64} option allows GCC to generate the additional
23420 64-bit instructions that are found in the full PowerPC64 architecture
23421 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
23422 @option{-mno-powerpc64}.
23424 @item -mcpu=@var{cpu_type}
23425 @opindex mcpu
23426 Set architecture type, register usage, and
23427 instruction scheduling parameters for machine type @var{cpu_type}.
23428 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
23429 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
23430 @samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
23431 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
23432 @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
23433 @samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
23434 @samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
23435 @samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
23436 @samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
23437 @samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8},
23438 @samp{power9}, @samp{powerpc}, @samp{powerpc64}, @samp{powerpc64le},
23439 @samp{rs64}, and @samp{native}.
23441 @option{-mcpu=powerpc}, @option{-mcpu=powerpc64}, and
23442 @option{-mcpu=powerpc64le} specify pure 32-bit PowerPC (either
23443 endian), 64-bit big endian PowerPC and 64-bit little endian PowerPC
23444 architecture machine types, with an appropriate, generic processor
23445 model assumed for scheduling purposes.
23447 Specifying @samp{native} as cpu type detects and selects the
23448 architecture option that corresponds to the host processor of the
23449 system performing the compilation.
23450 @option{-mcpu=native} has no effect if GCC does not recognize the
23451 processor.
23453 The other options specify a specific processor.  Code generated under
23454 those options runs best on that processor, and may not run at all on
23455 others.
23457 The @option{-mcpu} options automatically enable or disable the
23458 following options:
23460 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
23461 -mpopcntb -mpopcntd  -mpowerpc64 @gol
23462 -mpowerpc-gpopt  -mpowerpc-gfxopt @gol
23463 -mmulhw  -mdlmzb  -mmfpgpr -mvsx @gol
23464 -mcrypto -mhtm -mpower8-fusion -mpower8-vector @gol
23465 -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware}
23467 The particular options set for any particular CPU varies between
23468 compiler versions, depending on what setting seems to produce optimal
23469 code for that CPU; it doesn't necessarily reflect the actual hardware's
23470 capabilities.  If you wish to set an individual option to a particular
23471 value, you may specify it after the @option{-mcpu} option, like
23472 @option{-mcpu=970 -mno-altivec}.
23474 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
23475 not enabled or disabled by the @option{-mcpu} option at present because
23476 AIX does not have full support for these options.  You may still
23477 enable or disable them individually if you're sure it'll work in your
23478 environment.
23480 @item -mtune=@var{cpu_type}
23481 @opindex mtune
23482 Set the instruction scheduling parameters for machine type
23483 @var{cpu_type}, but do not set the architecture type or register usage,
23484 as @option{-mcpu=@var{cpu_type}} does.  The same
23485 values for @var{cpu_type} are used for @option{-mtune} as for
23486 @option{-mcpu}.  If both are specified, the code generated uses the
23487 architecture and registers set by @option{-mcpu}, but the
23488 scheduling parameters set by @option{-mtune}.
23490 @item -mcmodel=small
23491 @opindex mcmodel=small
23492 Generate PowerPC64 code for the small model: The TOC is limited to
23493 64k.
23495 @item -mcmodel=medium
23496 @opindex mcmodel=medium
23497 Generate PowerPC64 code for the medium model: The TOC and other static
23498 data may be up to a total of 4G in size.  This is the default for 64-bit
23499 Linux.
23501 @item -mcmodel=large
23502 @opindex mcmodel=large
23503 Generate PowerPC64 code for the large model: The TOC may be up to 4G
23504 in size.  Other data and code is only limited by the 64-bit address
23505 space.
23507 @item -maltivec
23508 @itemx -mno-altivec
23509 @opindex maltivec
23510 @opindex mno-altivec
23511 Generate code that uses (does not use) AltiVec instructions, and also
23512 enable the use of built-in functions that allow more direct access to
23513 the AltiVec instruction set.  You may also need to set
23514 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
23515 enhancements.
23517 When @option{-maltivec} is used, rather than @option{-maltivec=le} or
23518 @option{-maltivec=be}, the element order for AltiVec intrinsics such
23519 as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} 
23520 match array element order corresponding to the endianness of the
23521 target.  That is, element zero identifies the leftmost element in a
23522 vector register when targeting a big-endian platform, and identifies
23523 the rightmost element in a vector register when targeting a
23524 little-endian platform.
23526 @item -maltivec=be
23527 @opindex maltivec=be
23528 Generate AltiVec instructions using big-endian element order,
23529 regardless of whether the target is big- or little-endian.  This is
23530 the default when targeting a big-endian platform.  Using this option
23531 is currently deprecated.  Support for this feature will be removed in
23532 GCC 9.
23534 The element order is used to interpret element numbers in AltiVec
23535 intrinsics such as @code{vec_splat}, @code{vec_extract}, and
23536 @code{vec_insert}.  By default, these match array element order
23537 corresponding to the endianness for the target.
23539 @item -maltivec=le
23540 @opindex maltivec=le
23541 Generate AltiVec instructions using little-endian element order,
23542 regardless of whether the target is big- or little-endian.  This is
23543 the default when targeting a little-endian platform.  This option is
23544 currently ignored when targeting a big-endian platform.
23546 The element order is used to interpret element numbers in AltiVec
23547 intrinsics such as @code{vec_splat}, @code{vec_extract}, and
23548 @code{vec_insert}.  By default, these match array element order
23549 corresponding to the endianness for the target.
23551 @item -mvrsave
23552 @itemx -mno-vrsave
23553 @opindex mvrsave
23554 @opindex mno-vrsave
23555 Generate VRSAVE instructions when generating AltiVec code.
23557 @item -msecure-plt
23558 @opindex msecure-plt
23559 Generate code that allows @command{ld} and @command{ld.so}
23560 to build executables and shared
23561 libraries with non-executable @code{.plt} and @code{.got} sections.
23562 This is a PowerPC
23563 32-bit SYSV ABI option.
23565 @item -mbss-plt
23566 @opindex mbss-plt
23567 Generate code that uses a BSS @code{.plt} section that @command{ld.so}
23568 fills in, and
23569 requires @code{.plt} and @code{.got}
23570 sections that are both writable and executable.
23571 This is a PowerPC 32-bit SYSV ABI option.
23573 @item -misel
23574 @itemx -mno-isel
23575 @opindex misel
23576 @opindex mno-isel
23577 This switch enables or disables the generation of ISEL instructions.
23579 @item -misel=@var{yes/no}
23580 This switch has been deprecated.  Use @option{-misel} and
23581 @option{-mno-isel} instead.
23583 @item -mvsx
23584 @itemx -mno-vsx
23585 @opindex mvsx
23586 @opindex mno-vsx
23587 Generate code that uses (does not use) vector/scalar (VSX)
23588 instructions, and also enable the use of built-in functions that allow
23589 more direct access to the VSX instruction set.
23591 @item -mcrypto
23592 @itemx -mno-crypto
23593 @opindex mcrypto
23594 @opindex mno-crypto
23595 Enable the use (disable) of the built-in functions that allow direct
23596 access to the cryptographic instructions that were added in version
23597 2.07 of the PowerPC ISA.
23599 @item -mhtm
23600 @itemx -mno-htm
23601 @opindex mhtm
23602 @opindex mno-htm
23603 Enable (disable) the use of the built-in functions that allow direct
23604 access to the Hardware Transactional Memory (HTM) instructions that
23605 were added in version 2.07 of the PowerPC ISA.
23607 @item -mpower8-fusion
23608 @itemx -mno-power8-fusion
23609 @opindex mpower8-fusion
23610 @opindex mno-power8-fusion
23611 Generate code that keeps (does not keeps) some integer operations
23612 adjacent so that the instructions can be fused together on power8 and
23613 later processors.
23615 @item -mpower8-vector
23616 @itemx -mno-power8-vector
23617 @opindex mpower8-vector
23618 @opindex mno-power8-vector
23619 Generate code that uses (does not use) the vector and scalar
23620 instructions that were added in version 2.07 of the PowerPC ISA.  Also
23621 enable the use of built-in functions that allow more direct access to
23622 the vector instructions.
23624 @item -mquad-memory
23625 @itemx -mno-quad-memory
23626 @opindex mquad-memory
23627 @opindex mno-quad-memory
23628 Generate code that uses (does not use) the non-atomic quad word memory
23629 instructions.  The @option{-mquad-memory} option requires use of
23630 64-bit mode.
23632 @item -mquad-memory-atomic
23633 @itemx -mno-quad-memory-atomic
23634 @opindex mquad-memory-atomic
23635 @opindex mno-quad-memory-atomic
23636 Generate code that uses (does not use) the atomic quad word memory
23637 instructions.  The @option{-mquad-memory-atomic} option requires use of
23638 64-bit mode.
23640 @item -mfloat128
23641 @itemx -mno-float128
23642 @opindex mfloat128
23643 @opindex mno-float128
23644 Enable/disable the @var{__float128} keyword for IEEE 128-bit floating point
23645 and use either software emulation for IEEE 128-bit floating point or
23646 hardware instructions.
23648 The VSX instruction set (@option{-mvsx}, @option{-mcpu=power7},
23649 @option{-mcpu=power8}), or @option{-mcpu=power9} must be enabled to
23650 use the IEEE 128-bit floating point support.  The IEEE 128-bit
23651 floating point support only works on PowerPC Linux systems.
23653 The default for @option{-mfloat128} is enabled on PowerPC Linux
23654 systems using the VSX instruction set, and disabled on other systems.
23656 If you use the ISA 3.0 instruction set (@option{-mpower9-vector} or
23657 @option{-mcpu=power9}) on a 64-bit system, the IEEE 128-bit floating
23658 point support will also enable the generation of ISA 3.0 IEEE 128-bit
23659 floating point instructions.  Otherwise, if you do not specify to
23660 generate ISA 3.0 instructions or you are targeting a 32-bit big endian
23661 system, IEEE 128-bit floating point will be done with software
23662 emulation.
23664 @item -mfloat128-hardware
23665 @itemx -mno-float128-hardware
23666 @opindex mfloat128-hardware
23667 @opindex mno-float128-hardware
23668 Enable/disable using ISA 3.0 hardware instructions to support the
23669 @var{__float128} data type.
23671 The default for @option{-mfloat128-hardware} is enabled on PowerPC
23672 Linux systems using the ISA 3.0 instruction set, and disabled on other
23673 systems.
23675 @item -m32
23676 @itemx -m64
23677 @opindex m32
23678 @opindex m64
23679 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
23680 targets (including GNU/Linux).  The 32-bit environment sets int, long
23681 and pointer to 32 bits and generates code that runs on any PowerPC
23682 variant.  The 64-bit environment sets int to 32 bits and long and
23683 pointer to 64 bits, and generates code for PowerPC64, as for
23684 @option{-mpowerpc64}.
23686 @item -mfull-toc
23687 @itemx -mno-fp-in-toc
23688 @itemx -mno-sum-in-toc
23689 @itemx -mminimal-toc
23690 @opindex mfull-toc
23691 @opindex mno-fp-in-toc
23692 @opindex mno-sum-in-toc
23693 @opindex mminimal-toc
23694 Modify generation of the TOC (Table Of Contents), which is created for
23695 every executable file.  The @option{-mfull-toc} option is selected by
23696 default.  In that case, GCC allocates at least one TOC entry for
23697 each unique non-automatic variable reference in your program.  GCC
23698 also places floating-point constants in the TOC@.  However, only
23699 16,384 entries are available in the TOC@.
23701 If you receive a linker error message that saying you have overflowed
23702 the available TOC space, you can reduce the amount of TOC space used
23703 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
23704 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
23705 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
23706 generate code to calculate the sum of an address and a constant at
23707 run time instead of putting that sum into the TOC@.  You may specify one
23708 or both of these options.  Each causes GCC to produce very slightly
23709 slower and larger code at the expense of conserving TOC space.
23711 If you still run out of space in the TOC even when you specify both of
23712 these options, specify @option{-mminimal-toc} instead.  This option causes
23713 GCC to make only one TOC entry for every file.  When you specify this
23714 option, GCC produces code that is slower and larger but which
23715 uses extremely little TOC space.  You may wish to use this option
23716 only on files that contain less frequently-executed code.
23718 @item -maix64
23719 @itemx -maix32
23720 @opindex maix64
23721 @opindex maix32
23722 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
23723 @code{long} type, and the infrastructure needed to support them.
23724 Specifying @option{-maix64} implies @option{-mpowerpc64},
23725 while @option{-maix32} disables the 64-bit ABI and
23726 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
23728 @item -mxl-compat
23729 @itemx -mno-xl-compat
23730 @opindex mxl-compat
23731 @opindex mno-xl-compat
23732 Produce code that conforms more closely to IBM XL compiler semantics
23733 when using AIX-compatible ABI@.  Pass floating-point arguments to
23734 prototyped functions beyond the register save area (RSA) on the stack
23735 in addition to argument FPRs.  Do not assume that most significant
23736 double in 128-bit long double value is properly rounded when comparing
23737 values and converting to double.  Use XL symbol names for long double
23738 support routines.
23740 The AIX calling convention was extended but not initially documented to
23741 handle an obscure K&R C case of calling a function that takes the
23742 address of its arguments with fewer arguments than declared.  IBM XL
23743 compilers access floating-point arguments that do not fit in the
23744 RSA from the stack when a subroutine is compiled without
23745 optimization.  Because always storing floating-point arguments on the
23746 stack is inefficient and rarely needed, this option is not enabled by
23747 default and only is necessary when calling subroutines compiled by IBM
23748 XL compilers without optimization.
23750 @item -mpe
23751 @opindex mpe
23752 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
23753 application written to use message passing with special startup code to
23754 enable the application to run.  The system must have PE installed in the
23755 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
23756 must be overridden with the @option{-specs=} option to specify the
23757 appropriate directory location.  The Parallel Environment does not
23758 support threads, so the @option{-mpe} option and the @option{-pthread}
23759 option are incompatible.
23761 @item -malign-natural
23762 @itemx -malign-power
23763 @opindex malign-natural
23764 @opindex malign-power
23765 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
23766 @option{-malign-natural} overrides the ABI-defined alignment of larger
23767 types, such as floating-point doubles, on their natural size-based boundary.
23768 The option @option{-malign-power} instructs GCC to follow the ABI-specified
23769 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
23771 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
23772 is not supported.
23774 @item -msoft-float
23775 @itemx -mhard-float
23776 @opindex msoft-float
23777 @opindex mhard-float
23778 Generate code that does not use (uses) the floating-point register set.
23779 Software floating-point emulation is provided if you use the
23780 @option{-msoft-float} option, and pass the option to GCC when linking.
23782 @item -mmultiple
23783 @itemx -mno-multiple
23784 @opindex mmultiple
23785 @opindex mno-multiple
23786 Generate code that uses (does not use) the load multiple word
23787 instructions and the store multiple word instructions.  These
23788 instructions are generated by default on POWER systems, and not
23789 generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
23790 PowerPC systems, since those instructions do not work when the
23791 processor is in little-endian mode.  The exceptions are PPC740 and
23792 PPC750 which permit these instructions in little-endian mode.
23794 @item -mupdate
23795 @itemx -mno-update
23796 @opindex mupdate
23797 @opindex mno-update
23798 Generate code that uses (does not use) the load or store instructions
23799 that update the base register to the address of the calculated memory
23800 location.  These instructions are generated by default.  If you use
23801 @option{-mno-update}, there is a small window between the time that the
23802 stack pointer is updated and the address of the previous frame is
23803 stored, which means code that walks the stack frame across interrupts or
23804 signals may get corrupted data.
23806 @item -mavoid-indexed-addresses
23807 @itemx -mno-avoid-indexed-addresses
23808 @opindex mavoid-indexed-addresses
23809 @opindex mno-avoid-indexed-addresses
23810 Generate code that tries to avoid (not avoid) the use of indexed load
23811 or store instructions. These instructions can incur a performance
23812 penalty on Power6 processors in certain situations, such as when
23813 stepping through large arrays that cross a 16M boundary.  This option
23814 is enabled by default when targeting Power6 and disabled otherwise.
23816 @item -mfused-madd
23817 @itemx -mno-fused-madd
23818 @opindex mfused-madd
23819 @opindex mno-fused-madd
23820 Generate code that uses (does not use) the floating-point multiply and
23821 accumulate instructions.  These instructions are generated by default
23822 if hardware floating point is used.  The machine-dependent
23823 @option{-mfused-madd} option is now mapped to the machine-independent
23824 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
23825 mapped to @option{-ffp-contract=off}.
23827 @item -mmulhw
23828 @itemx -mno-mulhw
23829 @opindex mmulhw
23830 @opindex mno-mulhw
23831 Generate code that uses (does not use) the half-word multiply and
23832 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
23833 These instructions are generated by default when targeting those
23834 processors.
23836 @item -mdlmzb
23837 @itemx -mno-dlmzb
23838 @opindex mdlmzb
23839 @opindex mno-dlmzb
23840 Generate code that uses (does not use) the string-search @samp{dlmzb}
23841 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
23842 generated by default when targeting those processors.
23844 @item -mno-bit-align
23845 @itemx -mbit-align
23846 @opindex mno-bit-align
23847 @opindex mbit-align
23848 On System V.4 and embedded PowerPC systems do not (do) force structures
23849 and unions that contain bit-fields to be aligned to the base type of the
23850 bit-field.
23852 For example, by default a structure containing nothing but 8
23853 @code{unsigned} bit-fields of length 1 is aligned to a 4-byte
23854 boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
23855 the structure is aligned to a 1-byte boundary and is 1 byte in
23856 size.
23858 @item -mno-strict-align
23859 @itemx -mstrict-align
23860 @opindex mno-strict-align
23861 @opindex mstrict-align
23862 On System V.4 and embedded PowerPC systems do not (do) assume that
23863 unaligned memory references are handled by the system.
23865 @item -mrelocatable
23866 @itemx -mno-relocatable
23867 @opindex mrelocatable
23868 @opindex mno-relocatable
23869 Generate code that allows (does not allow) a static executable to be
23870 relocated to a different address at run time.  A simple embedded
23871 PowerPC system loader should relocate the entire contents of
23872 @code{.got2} and 4-byte locations listed in the @code{.fixup} section,
23873 a table of 32-bit addresses generated by this option.  For this to
23874 work, all objects linked together must be compiled with
23875 @option{-mrelocatable} or @option{-mrelocatable-lib}.
23876 @option{-mrelocatable} code aligns the stack to an 8-byte boundary.
23878 @item -mrelocatable-lib
23879 @itemx -mno-relocatable-lib
23880 @opindex mrelocatable-lib
23881 @opindex mno-relocatable-lib
23882 Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
23883 @code{.fixup} section to allow static executables to be relocated at
23884 run time, but @option{-mrelocatable-lib} does not use the smaller stack
23885 alignment of @option{-mrelocatable}.  Objects compiled with
23886 @option{-mrelocatable-lib} may be linked with objects compiled with
23887 any combination of the @option{-mrelocatable} options.
23889 @item -mno-toc
23890 @itemx -mtoc
23891 @opindex mno-toc
23892 @opindex mtoc
23893 On System V.4 and embedded PowerPC systems do not (do) assume that
23894 register 2 contains a pointer to a global area pointing to the addresses
23895 used in the program.
23897 @item -mlittle
23898 @itemx -mlittle-endian
23899 @opindex mlittle
23900 @opindex mlittle-endian
23901 On System V.4 and embedded PowerPC systems compile code for the
23902 processor in little-endian mode.  The @option{-mlittle-endian} option is
23903 the same as @option{-mlittle}.
23905 @item -mbig
23906 @itemx -mbig-endian
23907 @opindex mbig
23908 @opindex mbig-endian
23909 On System V.4 and embedded PowerPC systems compile code for the
23910 processor in big-endian mode.  The @option{-mbig-endian} option is
23911 the same as @option{-mbig}.
23913 @item -mdynamic-no-pic
23914 @opindex mdynamic-no-pic
23915 On Darwin and Mac OS X systems, compile code so that it is not
23916 relocatable, but that its external references are relocatable.  The
23917 resulting code is suitable for applications, but not shared
23918 libraries.
23920 @item -msingle-pic-base
23921 @opindex msingle-pic-base
23922 Treat the register used for PIC addressing as read-only, rather than
23923 loading it in the prologue for each function.  The runtime system is
23924 responsible for initializing this register with an appropriate value
23925 before execution begins.
23927 @item -mprioritize-restricted-insns=@var{priority}
23928 @opindex mprioritize-restricted-insns
23929 This option controls the priority that is assigned to
23930 dispatch-slot restricted instructions during the second scheduling
23931 pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
23932 or @samp{2} to assign no, highest, or second-highest (respectively) 
23933 priority to dispatch-slot restricted
23934 instructions.
23936 @item -msched-costly-dep=@var{dependence_type}
23937 @opindex msched-costly-dep
23938 This option controls which dependences are considered costly
23939 by the target during instruction scheduling.  The argument
23940 @var{dependence_type} takes one of the following values:
23942 @table @asis
23943 @item @samp{no}
23944 No dependence is costly.
23946 @item @samp{all}
23947 All dependences are costly.
23949 @item @samp{true_store_to_load}
23950 A true dependence from store to load is costly.
23952 @item @samp{store_to_load}
23953 Any dependence from store to load is costly.
23955 @item @var{number}
23956 Any dependence for which the latency is greater than or equal to 
23957 @var{number} is costly.
23958 @end table
23960 @item -minsert-sched-nops=@var{scheme}
23961 @opindex minsert-sched-nops
23962 This option controls which NOP insertion scheme is used during
23963 the second scheduling pass.  The argument @var{scheme} takes one of the
23964 following values:
23966 @table @asis
23967 @item @samp{no}
23968 Don't insert NOPs.
23970 @item @samp{pad}
23971 Pad with NOPs any dispatch group that has vacant issue slots,
23972 according to the scheduler's grouping.
23974 @item @samp{regroup_exact}
23975 Insert NOPs to force costly dependent insns into
23976 separate groups.  Insert exactly as many NOPs as needed to force an insn
23977 to a new group, according to the estimated processor grouping.
23979 @item @var{number}
23980 Insert NOPs to force costly dependent insns into
23981 separate groups.  Insert @var{number} NOPs to force an insn to a new group.
23982 @end table
23984 @item -mcall-sysv
23985 @opindex mcall-sysv
23986 On System V.4 and embedded PowerPC systems compile code using calling
23987 conventions that adhere to the March 1995 draft of the System V
23988 Application Binary Interface, PowerPC processor supplement.  This is the
23989 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
23991 @item -mcall-sysv-eabi
23992 @itemx -mcall-eabi
23993 @opindex mcall-sysv-eabi
23994 @opindex mcall-eabi
23995 Specify both @option{-mcall-sysv} and @option{-meabi} options.
23997 @item -mcall-sysv-noeabi
23998 @opindex mcall-sysv-noeabi
23999 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
24001 @item -mcall-aixdesc
24002 @opindex m
24003 On System V.4 and embedded PowerPC systems compile code for the AIX
24004 operating system.
24006 @item -mcall-linux
24007 @opindex mcall-linux
24008 On System V.4 and embedded PowerPC systems compile code for the
24009 Linux-based GNU system.
24011 @item -mcall-freebsd
24012 @opindex mcall-freebsd
24013 On System V.4 and embedded PowerPC systems compile code for the
24014 FreeBSD operating system.
24016 @item -mcall-netbsd
24017 @opindex mcall-netbsd
24018 On System V.4 and embedded PowerPC systems compile code for the
24019 NetBSD operating system.
24021 @item -mcall-openbsd
24022 @opindex mcall-netbsd
24023 On System V.4 and embedded PowerPC systems compile code for the
24024 OpenBSD operating system.
24026 @item -mtraceback=@var{traceback_type}
24027 @opindex mtraceback
24028 Select the type of traceback table. Valid values for @var{traceback_type}
24029 are @samp{full}, @samp{part}, and @samp{no}.
24031 @item -maix-struct-return
24032 @opindex maix-struct-return
24033 Return all structures in memory (as specified by the AIX ABI)@.
24035 @item -msvr4-struct-return
24036 @opindex msvr4-struct-return
24037 Return structures smaller than 8 bytes in registers (as specified by the
24038 SVR4 ABI)@.
24040 @item -mabi=@var{abi-type}
24041 @opindex mabi
24042 Extend the current ABI with a particular extension, or remove such extension.
24043 Valid values are @samp{altivec}, @samp{no-altivec}, @samp{spe},
24044 @samp{no-spe}, @samp{ibmlongdouble}, @samp{ieeelongdouble},
24045 @samp{elfv1}, @samp{elfv2}@.
24047 @item -mabi=ibmlongdouble
24048 @opindex mabi=ibmlongdouble
24049 Change the current ABI to use IBM extended-precision long double.
24050 This is not likely to work if your system defaults to using IEEE
24051 extended-precision long double.  If you change the long double type
24052 from IEEE extended-precision, the compiler will issue a warning unless
24053 you use the @option{-Wno-psabi} option.
24055 @item -mabi=ieeelongdouble
24056 @opindex mabi=ieeelongdouble
24057 Change the current ABI to use IEEE extended-precision long double.
24058 This is not likely to work if your system defaults to using IBM
24059 extended-precision long double.  If you change the long double type
24060 from IBM extended-precision, the compiler will issue a warning unless
24061 you use the @option{-Wno-psabi} option.
24063 @item -mabi=elfv1
24064 @opindex mabi=elfv1
24065 Change the current ABI to use the ELFv1 ABI.
24066 This is the default ABI for big-endian PowerPC 64-bit Linux.
24067 Overriding the default ABI requires special system support and is
24068 likely to fail in spectacular ways.
24070 @item -mabi=elfv2
24071 @opindex mabi=elfv2
24072 Change the current ABI to use the ELFv2 ABI.
24073 This is the default ABI for little-endian PowerPC 64-bit Linux.
24074 Overriding the default ABI requires special system support and is
24075 likely to fail in spectacular ways.
24077 @item -mgnu-attribute
24078 @itemx -mno-gnu-attribute
24079 @opindex mgnu-attribute
24080 @opindex mno-gnu-attribute
24081 Emit .gnu_attribute assembly directives to set tag/value pairs in a
24082 .gnu.attributes section that specify ABI variations in function
24083 parameters or return values.
24085 @item -mprototype
24086 @itemx -mno-prototype
24087 @opindex mprototype
24088 @opindex mno-prototype
24089 On System V.4 and embedded PowerPC systems assume that all calls to
24090 variable argument functions are properly prototyped.  Otherwise, the
24091 compiler must insert an instruction before every non-prototyped call to
24092 set or clear bit 6 of the condition code register (@code{CR}) to
24093 indicate whether floating-point values are passed in the floating-point
24094 registers in case the function takes variable arguments.  With
24095 @option{-mprototype}, only calls to prototyped variable argument functions
24096 set or clear the bit.
24098 @item -msim
24099 @opindex msim
24100 On embedded PowerPC systems, assume that the startup module is called
24101 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
24102 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
24103 configurations.
24105 @item -mmvme
24106 @opindex mmvme
24107 On embedded PowerPC systems, assume that the startup module is called
24108 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
24109 @file{libc.a}.
24111 @item -mads
24112 @opindex mads
24113 On embedded PowerPC systems, assume that the startup module is called
24114 @file{crt0.o} and the standard C libraries are @file{libads.a} and
24115 @file{libc.a}.
24117 @item -myellowknife
24118 @opindex myellowknife
24119 On embedded PowerPC systems, assume that the startup module is called
24120 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
24121 @file{libc.a}.
24123 @item -mvxworks
24124 @opindex mvxworks
24125 On System V.4 and embedded PowerPC systems, specify that you are
24126 compiling for a VxWorks system.
24128 @item -memb
24129 @opindex memb
24130 On embedded PowerPC systems, set the @code{PPC_EMB} bit in the ELF flags
24131 header to indicate that @samp{eabi} extended relocations are used.
24133 @item -meabi
24134 @itemx -mno-eabi
24135 @opindex meabi
24136 @opindex mno-eabi
24137 On System V.4 and embedded PowerPC systems do (do not) adhere to the
24138 Embedded Applications Binary Interface (EABI), which is a set of
24139 modifications to the System V.4 specifications.  Selecting @option{-meabi}
24140 means that the stack is aligned to an 8-byte boundary, a function
24141 @code{__eabi} is called from @code{main} to set up the EABI
24142 environment, and the @option{-msdata} option can use both @code{r2} and
24143 @code{r13} to point to two separate small data areas.  Selecting
24144 @option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
24145 no EABI initialization function is called from @code{main}, and the
24146 @option{-msdata} option only uses @code{r13} to point to a single
24147 small data area.  The @option{-meabi} option is on by default if you
24148 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
24150 @item -msdata=eabi
24151 @opindex msdata=eabi
24152 On System V.4 and embedded PowerPC systems, put small initialized
24153 @code{const} global and static data in the @code{.sdata2} section, which
24154 is pointed to by register @code{r2}.  Put small initialized
24155 non-@code{const} global and static data in the @code{.sdata} section,
24156 which is pointed to by register @code{r13}.  Put small uninitialized
24157 global and static data in the @code{.sbss} section, which is adjacent to
24158 the @code{.sdata} section.  The @option{-msdata=eabi} option is
24159 incompatible with the @option{-mrelocatable} option.  The
24160 @option{-msdata=eabi} option also sets the @option{-memb} option.
24162 @item -msdata=sysv
24163 @opindex msdata=sysv
24164 On System V.4 and embedded PowerPC systems, put small global and static
24165 data in the @code{.sdata} section, which is pointed to by register
24166 @code{r13}.  Put small uninitialized global and static data in the
24167 @code{.sbss} section, which is adjacent to the @code{.sdata} section.
24168 The @option{-msdata=sysv} option is incompatible with the
24169 @option{-mrelocatable} option.
24171 @item -msdata=default
24172 @itemx -msdata
24173 @opindex msdata=default
24174 @opindex msdata
24175 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
24176 compile code the same as @option{-msdata=eabi}, otherwise compile code the
24177 same as @option{-msdata=sysv}.
24179 @item -msdata=data
24180 @opindex msdata=data
24181 On System V.4 and embedded PowerPC systems, put small global
24182 data in the @code{.sdata} section.  Put small uninitialized global
24183 data in the @code{.sbss} section.  Do not use register @code{r13}
24184 to address small data however.  This is the default behavior unless
24185 other @option{-msdata} options are used.
24187 @item -msdata=none
24188 @itemx -mno-sdata
24189 @opindex msdata=none
24190 @opindex mno-sdata
24191 On embedded PowerPC systems, put all initialized global and static data
24192 in the @code{.data} section, and all uninitialized data in the
24193 @code{.bss} section.
24195 @item -mreadonly-in-sdata
24196 @opindex mreadonly-in-sdata
24197 @opindex mno-readonly-in-sdata
24198 Put read-only objects in the @code{.sdata} section as well.  This is the
24199 default.
24201 @item -mblock-move-inline-limit=@var{num}
24202 @opindex mblock-move-inline-limit
24203 Inline all block moves (such as calls to @code{memcpy} or structure
24204 copies) less than or equal to @var{num} bytes.  The minimum value for
24205 @var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
24206 targets.  The default value is target-specific.
24208 @item -mblock-compare-inline-limit=@var{num}
24209 @opindex mblock-compare-inline-limit
24210 Generate non-looping inline code for all block compares (such as calls
24211 to @code{memcmp} or structure compares) less than or equal to @var{num}
24212 bytes. If @var{num} is 0, all inline expansion (non-loop and loop) of
24213 block compare is disabled. The default value is target-specific.
24215 @item -mblock-compare-inline-loop-limit=@var{num}
24216 @opindex mblock-compare-inline-loop-limit
24217 Generate an inline expansion using loop code for all block compares that
24218 are less than or equal to @var{num} bytes, but greater than the limit
24219 for non-loop inline block compare expansion. If the block length is not
24220 constant, at most @var{num} bytes will be compared before @code{memcmp}
24221 is called to compare the remainder of the block. The default value is
24222 target-specific.
24224 @item -mstring-compare-inline-limit=@var{num}
24225 @opindex mstring-compare-inline-limit
24226 Generate at most @var{num} pairs of load instructions to compare the
24227 string inline. If the difference or end of string is not found at the
24228 end of the inline compare a call to @code{strcmp} or @code{strncmp} will
24229 take care of the rest of the comparison. The default is 8 pairs of
24230 loads, which will compare 64 bytes on a 64-bit target and 32 bytes on a
24231 32-bit target.
24233 @item -G @var{num}
24234 @opindex G
24235 @cindex smaller data references (PowerPC)
24236 @cindex .sdata/.sdata2 references (PowerPC)
24237 On embedded PowerPC systems, put global and static items less than or
24238 equal to @var{num} bytes into the small data or BSS sections instead of
24239 the normal data or BSS section.  By default, @var{num} is 8.  The
24240 @option{-G @var{num}} switch is also passed to the linker.
24241 All modules should be compiled with the same @option{-G @var{num}} value.
24243 @item -mregnames
24244 @itemx -mno-regnames
24245 @opindex mregnames
24246 @opindex mno-regnames
24247 On System V.4 and embedded PowerPC systems do (do not) emit register
24248 names in the assembly language output using symbolic forms.
24250 @item -mlongcall
24251 @itemx -mno-longcall
24252 @opindex mlongcall
24253 @opindex mno-longcall
24254 By default assume that all calls are far away so that a longer and more
24255 expensive calling sequence is required.  This is required for calls
24256 farther than 32 megabytes (33,554,432 bytes) from the current location.
24257 A short call is generated if the compiler knows
24258 the call cannot be that far away.  This setting can be overridden by
24259 the @code{shortcall} function attribute, or by @code{#pragma
24260 longcall(0)}.
24262 Some linkers are capable of detecting out-of-range calls and generating
24263 glue code on the fly.  On these systems, long calls are unnecessary and
24264 generate slower code.  As of this writing, the AIX linker can do this,
24265 as can the GNU linker for PowerPC/64.  It is planned to add this feature
24266 to the GNU linker for 32-bit PowerPC systems as well.
24268 On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
24269 callee, L42}, plus a @dfn{branch island} (glue code).  The two target
24270 addresses represent the callee and the branch island.  The
24271 Darwin/PPC linker prefers the first address and generates a @code{bl
24272 callee} if the PPC @code{bl} instruction reaches the callee directly;
24273 otherwise, the linker generates @code{bl L42} to call the branch
24274 island.  The branch island is appended to the body of the
24275 calling function; it computes the full 32-bit address of the callee
24276 and jumps to it.
24278 On Mach-O (Darwin) systems, this option directs the compiler emit to
24279 the glue for every direct call, and the Darwin linker decides whether
24280 to use or discard it.
24282 In the future, GCC may ignore all longcall specifications
24283 when the linker is known to generate glue.
24285 @item -mtls-markers
24286 @itemx -mno-tls-markers
24287 @opindex mtls-markers
24288 @opindex mno-tls-markers
24289 Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
24290 specifying the function argument.  The relocation allows the linker to
24291 reliably associate function call with argument setup instructions for
24292 TLS optimization, which in turn allows GCC to better schedule the
24293 sequence.
24295 @item -mrecip
24296 @itemx -mno-recip
24297 @opindex mrecip
24298 This option enables use of the reciprocal estimate and
24299 reciprocal square root estimate instructions with additional
24300 Newton-Raphson steps to increase precision instead of doing a divide or
24301 square root and divide for floating-point arguments.  You should use
24302 the @option{-ffast-math} option when using @option{-mrecip} (or at
24303 least @option{-funsafe-math-optimizations},
24304 @option{-ffinite-math-only}, @option{-freciprocal-math} and
24305 @option{-fno-trapping-math}).  Note that while the throughput of the
24306 sequence is generally higher than the throughput of the non-reciprocal
24307 instruction, the precision of the sequence can be decreased by up to 2
24308 ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
24309 roots.
24311 @item -mrecip=@var{opt}
24312 @opindex mrecip=opt
24313 This option controls which reciprocal estimate instructions
24314 may be used.  @var{opt} is a comma-separated list of options, which may
24315 be preceded by a @code{!} to invert the option:
24317 @table @samp
24319 @item all
24320 Enable all estimate instructions.
24322 @item default 
24323 Enable the default instructions, equivalent to @option{-mrecip}.
24325 @item none 
24326 Disable all estimate instructions, equivalent to @option{-mno-recip}.
24328 @item div 
24329 Enable the reciprocal approximation instructions for both 
24330 single and double precision.
24332 @item divf 
24333 Enable the single-precision reciprocal approximation instructions.
24335 @item divd 
24336 Enable the double-precision reciprocal approximation instructions.
24338 @item rsqrt 
24339 Enable the reciprocal square root approximation instructions for both
24340 single and double precision.
24342 @item rsqrtf 
24343 Enable the single-precision reciprocal square root approximation instructions.
24345 @item rsqrtd 
24346 Enable the double-precision reciprocal square root approximation instructions.
24348 @end table
24350 So, for example, @option{-mrecip=all,!rsqrtd} enables
24351 all of the reciprocal estimate instructions, except for the
24352 @code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
24353 which handle the double-precision reciprocal square root calculations.
24355 @item -mrecip-precision
24356 @itemx -mno-recip-precision
24357 @opindex mrecip-precision
24358 Assume (do not assume) that the reciprocal estimate instructions
24359 provide higher-precision estimates than is mandated by the PowerPC
24360 ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
24361 @option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
24362 The double-precision square root estimate instructions are not generated by
24363 default on low-precision machines, since they do not provide an
24364 estimate that converges after three steps.
24366 @item -mveclibabi=@var{type}
24367 @opindex mveclibabi
24368 Specifies the ABI type to use for vectorizing intrinsics using an
24369 external library.  The only type supported at present is @samp{mass},
24370 which specifies to use IBM's Mathematical Acceleration Subsystem
24371 (MASS) libraries for vectorizing intrinsics using external libraries.
24372 GCC currently emits calls to @code{acosd2}, @code{acosf4},
24373 @code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
24374 @code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
24375 @code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
24376 @code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
24377 @code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
24378 @code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
24379 @code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
24380 @code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
24381 @code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
24382 @code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
24383 @code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
24384 @code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
24385 @code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
24386 for power7.  Both @option{-ftree-vectorize} and
24387 @option{-funsafe-math-optimizations} must also be enabled.  The MASS
24388 libraries must be specified at link time.
24390 @item -mfriz
24391 @itemx -mno-friz
24392 @opindex mfriz
24393 Generate (do not generate) the @code{friz} instruction when the
24394 @option{-funsafe-math-optimizations} option is used to optimize
24395 rounding of floating-point values to 64-bit integer and back to floating
24396 point.  The @code{friz} instruction does not return the same value if
24397 the floating-point number is too large to fit in an integer.
24399 @item -mpointers-to-nested-functions
24400 @itemx -mno-pointers-to-nested-functions
24401 @opindex mpointers-to-nested-functions
24402 Generate (do not generate) code to load up the static chain register
24403 (@code{r11}) when calling through a pointer on AIX and 64-bit Linux
24404 systems where a function pointer points to a 3-word descriptor giving
24405 the function address, TOC value to be loaded in register @code{r2}, and
24406 static chain value to be loaded in register @code{r11}.  The
24407 @option{-mpointers-to-nested-functions} is on by default.  You cannot
24408 call through pointers to nested functions or pointers
24409 to functions compiled in other languages that use the static chain if
24410 you use @option{-mno-pointers-to-nested-functions}.
24412 @item -msave-toc-indirect
24413 @itemx -mno-save-toc-indirect
24414 @opindex msave-toc-indirect
24415 Generate (do not generate) code to save the TOC value in the reserved
24416 stack location in the function prologue if the function calls through
24417 a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
24418 saved in the prologue, it is saved just before the call through the
24419 pointer.  The @option{-mno-save-toc-indirect} option is the default.
24421 @item -mcompat-align-parm
24422 @itemx -mno-compat-align-parm
24423 @opindex mcompat-align-parm
24424 Generate (do not generate) code to pass structure parameters with a
24425 maximum alignment of 64 bits, for compatibility with older versions
24426 of GCC.
24428 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
24429 structure parameter on a 128-bit boundary when that structure contained
24430 a member requiring 128-bit alignment.  This is corrected in more
24431 recent versions of GCC.  This option may be used to generate code
24432 that is compatible with functions compiled with older versions of
24433 GCC.
24435 The @option{-mno-compat-align-parm} option is the default.
24437 @item -mstack-protector-guard=@var{guard}
24438 @itemx -mstack-protector-guard-reg=@var{reg}
24439 @itemx -mstack-protector-guard-offset=@var{offset}
24440 @itemx -mstack-protector-guard-symbol=@var{symbol}
24441 @opindex mstack-protector-guard
24442 @opindex mstack-protector-guard-reg
24443 @opindex mstack-protector-guard-offset
24444 @opindex mstack-protector-guard-symbol
24445 Generate stack protection code using canary at @var{guard}.  Supported
24446 locations are @samp{global} for global canary or @samp{tls} for per-thread
24447 canary in the TLS block (the default with GNU libc version 2.4 or later).
24449 With the latter choice the options
24450 @option{-mstack-protector-guard-reg=@var{reg}} and
24451 @option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
24452 which register to use as base register for reading the canary, and from what
24453 offset from that base register. The default for those is as specified in the
24454 relevant ABI.  @option{-mstack-protector-guard-symbol=@var{symbol}} overrides
24455 the offset with a symbol reference to a canary in the TLS block.
24456 @end table
24458 @node RX Options
24459 @subsection RX Options
24460 @cindex RX Options
24462 These command-line options are defined for RX targets:
24464 @table @gcctabopt
24465 @item -m64bit-doubles
24466 @itemx -m32bit-doubles
24467 @opindex m64bit-doubles
24468 @opindex m32bit-doubles
24469 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
24470 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
24471 @option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
24472 works on 32-bit values, which is why the default is
24473 @option{-m32bit-doubles}.
24475 @item -fpu
24476 @itemx -nofpu
24477 @opindex fpu
24478 @opindex nofpu
24479 Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
24480 floating-point hardware.  The default is enabled for the RX600
24481 series and disabled for the RX200 series.
24483 Floating-point instructions are only generated for 32-bit floating-point 
24484 values, however, so the FPU hardware is not used for doubles if the
24485 @option{-m64bit-doubles} option is used.
24487 @emph{Note} If the @option{-fpu} option is enabled then
24488 @option{-funsafe-math-optimizations} is also enabled automatically.
24489 This is because the RX FPU instructions are themselves unsafe.
24491 @item -mcpu=@var{name}
24492 @opindex mcpu
24493 Selects the type of RX CPU to be targeted.  Currently three types are
24494 supported, the generic @samp{RX600} and @samp{RX200} series hardware and
24495 the specific @samp{RX610} CPU.  The default is @samp{RX600}.
24497 The only difference between @samp{RX600} and @samp{RX610} is that the
24498 @samp{RX610} does not support the @code{MVTIPL} instruction.
24500 The @samp{RX200} series does not have a hardware floating-point unit
24501 and so @option{-nofpu} is enabled by default when this type is
24502 selected.
24504 @item -mbig-endian-data
24505 @itemx -mlittle-endian-data
24506 @opindex mbig-endian-data
24507 @opindex mlittle-endian-data
24508 Store data (but not code) in the big-endian format.  The default is
24509 @option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
24510 format.
24512 @item -msmall-data-limit=@var{N}
24513 @opindex msmall-data-limit
24514 Specifies the maximum size in bytes of global and static variables
24515 which can be placed into the small data area.  Using the small data
24516 area can lead to smaller and faster code, but the size of area is
24517 limited and it is up to the programmer to ensure that the area does
24518 not overflow.  Also when the small data area is used one of the RX's
24519 registers (usually @code{r13}) is reserved for use pointing to this
24520 area, so it is no longer available for use by the compiler.  This
24521 could result in slower and/or larger code if variables are pushed onto
24522 the stack instead of being held in this register.
24524 Note, common variables (variables that have not been initialized) and
24525 constants are not placed into the small data area as they are assigned
24526 to other sections in the output executable.
24528 The default value is zero, which disables this feature.  Note, this
24529 feature is not enabled by default with higher optimization levels
24530 (@option{-O2} etc) because of the potentially detrimental effects of
24531 reserving a register.  It is up to the programmer to experiment and
24532 discover whether this feature is of benefit to their program.  See the
24533 description of the @option{-mpid} option for a description of how the
24534 actual register to hold the small data area pointer is chosen.
24536 @item -msim
24537 @itemx -mno-sim
24538 @opindex msim
24539 @opindex mno-sim
24540 Use the simulator runtime.  The default is to use the libgloss
24541 board-specific runtime.
24543 @item -mas100-syntax
24544 @itemx -mno-as100-syntax
24545 @opindex mas100-syntax
24546 @opindex mno-as100-syntax
24547 When generating assembler output use a syntax that is compatible with
24548 Renesas's AS100 assembler.  This syntax can also be handled by the GAS
24549 assembler, but it has some restrictions so it is not generated by default.
24551 @item -mmax-constant-size=@var{N}
24552 @opindex mmax-constant-size
24553 Specifies the maximum size, in bytes, of a constant that can be used as
24554 an operand in a RX instruction.  Although the RX instruction set does
24555 allow constants of up to 4 bytes in length to be used in instructions,
24556 a longer value equates to a longer instruction.  Thus in some
24557 circumstances it can be beneficial to restrict the size of constants
24558 that are used in instructions.  Constants that are too big are instead
24559 placed into a constant pool and referenced via register indirection.
24561 The value @var{N} can be between 0 and 4.  A value of 0 (the default)
24562 or 4 means that constants of any size are allowed.
24564 @item -mrelax
24565 @opindex mrelax
24566 Enable linker relaxation.  Linker relaxation is a process whereby the
24567 linker attempts to reduce the size of a program by finding shorter
24568 versions of various instructions.  Disabled by default.
24570 @item -mint-register=@var{N}
24571 @opindex mint-register
24572 Specify the number of registers to reserve for fast interrupt handler
24573 functions.  The value @var{N} can be between 0 and 4.  A value of 1
24574 means that register @code{r13} is reserved for the exclusive use
24575 of fast interrupt handlers.  A value of 2 reserves @code{r13} and
24576 @code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
24577 @code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
24578 A value of 0, the default, does not reserve any registers.
24580 @item -msave-acc-in-interrupts
24581 @opindex msave-acc-in-interrupts
24582 Specifies that interrupt handler functions should preserve the
24583 accumulator register.  This is only necessary if normal code might use
24584 the accumulator register, for example because it performs 64-bit
24585 multiplications.  The default is to ignore the accumulator as this
24586 makes the interrupt handlers faster.
24588 @item -mpid
24589 @itemx -mno-pid
24590 @opindex mpid
24591 @opindex mno-pid
24592 Enables the generation of position independent data.  When enabled any
24593 access to constant data is done via an offset from a base address
24594 held in a register.  This allows the location of constant data to be
24595 determined at run time without requiring the executable to be
24596 relocated, which is a benefit to embedded applications with tight
24597 memory constraints.  Data that can be modified is not affected by this
24598 option.
24600 Note, using this feature reserves a register, usually @code{r13}, for
24601 the constant data base address.  This can result in slower and/or
24602 larger code, especially in complicated functions.
24604 The actual register chosen to hold the constant data base address
24605 depends upon whether the @option{-msmall-data-limit} and/or the
24606 @option{-mint-register} command-line options are enabled.  Starting
24607 with register @code{r13} and proceeding downwards, registers are
24608 allocated first to satisfy the requirements of @option{-mint-register},
24609 then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
24610 is possible for the small data area register to be @code{r8} if both
24611 @option{-mint-register=4} and @option{-mpid} are specified on the
24612 command line.
24614 By default this feature is not enabled.  The default can be restored
24615 via the @option{-mno-pid} command-line option.
24617 @item -mno-warn-multiple-fast-interrupts
24618 @itemx -mwarn-multiple-fast-interrupts
24619 @opindex mno-warn-multiple-fast-interrupts
24620 @opindex mwarn-multiple-fast-interrupts
24621 Prevents GCC from issuing a warning message if it finds more than one
24622 fast interrupt handler when it is compiling a file.  The default is to
24623 issue a warning for each extra fast interrupt handler found, as the RX
24624 only supports one such interrupt.
24626 @item -mallow-string-insns
24627 @itemx -mno-allow-string-insns
24628 @opindex mallow-string-insns
24629 @opindex mno-allow-string-insns
24630 Enables or disables the use of the string manipulation instructions
24631 @code{SMOVF}, @code{SCMPU}, @code{SMOVB}, @code{SMOVU}, @code{SUNTIL}
24632 @code{SWHILE} and also the @code{RMPA} instruction.  These
24633 instructions may prefetch data, which is not safe to do if accessing
24634 an I/O register.  (See section 12.2.7 of the RX62N Group User's Manual
24635 for more information).
24637 The default is to allow these instructions, but it is not possible for
24638 GCC to reliably detect all circumstances where a string instruction
24639 might be used to access an I/O register, so their use cannot be
24640 disabled automatically.  Instead it is reliant upon the programmer to
24641 use the @option{-mno-allow-string-insns} option if their program
24642 accesses I/O space.
24644 When the instructions are enabled GCC defines the C preprocessor
24645 symbol @code{__RX_ALLOW_STRING_INSNS__}, otherwise it defines the
24646 symbol @code{__RX_DISALLOW_STRING_INSNS__}.
24648 @item -mjsr
24649 @itemx -mno-jsr
24650 @opindex mjsr
24651 @opindex mno-jsr
24652 Use only (or not only) @code{JSR} instructions to access functions.
24653 This option can be used when code size exceeds the range of @code{BSR}
24654 instructions.  Note that @option{-mno-jsr} does not mean to not use
24655 @code{JSR} but instead means that any type of branch may be used.
24656 @end table
24658 @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
24659 has special significance to the RX port when used with the
24660 @code{interrupt} function attribute.  This attribute indicates a
24661 function intended to process fast interrupts.  GCC ensures
24662 that it only uses the registers @code{r10}, @code{r11}, @code{r12}
24663 and/or @code{r13} and only provided that the normal use of the
24664 corresponding registers have been restricted via the
24665 @option{-ffixed-@var{reg}} or @option{-mint-register} command-line
24666 options.
24668 @node S/390 and zSeries Options
24669 @subsection S/390 and zSeries Options
24670 @cindex S/390 and zSeries Options
24672 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
24674 @table @gcctabopt
24675 @item -mhard-float
24676 @itemx -msoft-float
24677 @opindex mhard-float
24678 @opindex msoft-float
24679 Use (do not use) the hardware floating-point instructions and registers
24680 for floating-point operations.  When @option{-msoft-float} is specified,
24681 functions in @file{libgcc.a} are used to perform floating-point
24682 operations.  When @option{-mhard-float} is specified, the compiler
24683 generates IEEE floating-point instructions.  This is the default.
24685 @item -mhard-dfp
24686 @itemx -mno-hard-dfp
24687 @opindex mhard-dfp
24688 @opindex mno-hard-dfp
24689 Use (do not use) the hardware decimal-floating-point instructions for
24690 decimal-floating-point operations.  When @option{-mno-hard-dfp} is
24691 specified, functions in @file{libgcc.a} are used to perform
24692 decimal-floating-point operations.  When @option{-mhard-dfp} is
24693 specified, the compiler generates decimal-floating-point hardware
24694 instructions.  This is the default for @option{-march=z9-ec} or higher.
24696 @item -mlong-double-64
24697 @itemx -mlong-double-128
24698 @opindex mlong-double-64
24699 @opindex mlong-double-128
24700 These switches control the size of @code{long double} type. A size
24701 of 64 bits makes the @code{long double} type equivalent to the @code{double}
24702 type. This is the default.
24704 @item -mbackchain
24705 @itemx -mno-backchain
24706 @opindex mbackchain
24707 @opindex mno-backchain
24708 Store (do not store) the address of the caller's frame as backchain pointer
24709 into the callee's stack frame.
24710 A backchain may be needed to allow debugging using tools that do not understand
24711 DWARF call frame information.
24712 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
24713 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
24714 the backchain is placed into the topmost word of the 96/160 byte register
24715 save area.
24717 In general, code compiled with @option{-mbackchain} is call-compatible with
24718 code compiled with @option{-mmo-backchain}; however, use of the backchain
24719 for debugging purposes usually requires that the whole binary is built with
24720 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
24721 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
24722 to build a linux kernel use @option{-msoft-float}.
24724 The default is to not maintain the backchain.
24726 @item -mpacked-stack
24727 @itemx -mno-packed-stack
24728 @opindex mpacked-stack
24729 @opindex mno-packed-stack
24730 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
24731 specified, the compiler uses the all fields of the 96/160 byte register save
24732 area only for their default purpose; unused fields still take up stack space.
24733 When @option{-mpacked-stack} is specified, register save slots are densely
24734 packed at the top of the register save area; unused space is reused for other
24735 purposes, allowing for more efficient use of the available stack space.
24736 However, when @option{-mbackchain} is also in effect, the topmost word of
24737 the save area is always used to store the backchain, and the return address
24738 register is always saved two words below the backchain.
24740 As long as the stack frame backchain is not used, code generated with
24741 @option{-mpacked-stack} is call-compatible with code generated with
24742 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
24743 S/390 or zSeries generated code that uses the stack frame backchain at run
24744 time, not just for debugging purposes.  Such code is not call-compatible
24745 with code compiled with @option{-mpacked-stack}.  Also, note that the
24746 combination of @option{-mbackchain},
24747 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
24748 to build a linux kernel use @option{-msoft-float}.
24750 The default is to not use the packed stack layout.
24752 @item -msmall-exec
24753 @itemx -mno-small-exec
24754 @opindex msmall-exec
24755 @opindex mno-small-exec
24756 Generate (or do not generate) code using the @code{bras} instruction
24757 to do subroutine calls.
24758 This only works reliably if the total executable size does not
24759 exceed 64k.  The default is to use the @code{basr} instruction instead,
24760 which does not have this limitation.
24762 @item -m64
24763 @itemx -m31
24764 @opindex m64
24765 @opindex m31
24766 When @option{-m31} is specified, generate code compliant to the
24767 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
24768 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
24769 particular to generate 64-bit instructions.  For the @samp{s390}
24770 targets, the default is @option{-m31}, while the @samp{s390x}
24771 targets default to @option{-m64}.
24773 @item -mzarch
24774 @itemx -mesa
24775 @opindex mzarch
24776 @opindex mesa
24777 When @option{-mzarch} is specified, generate code using the
24778 instructions available on z/Architecture.
24779 When @option{-mesa} is specified, generate code using the
24780 instructions available on ESA/390.  Note that @option{-mesa} is
24781 not possible with @option{-m64}.
24782 When generating code compliant to the GNU/Linux for S/390 ABI,
24783 the default is @option{-mesa}.  When generating code compliant
24784 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
24786 @item -mhtm
24787 @itemx -mno-htm
24788 @opindex mhtm
24789 @opindex mno-htm
24790 The @option{-mhtm} option enables a set of builtins making use of
24791 instructions available with the transactional execution facility
24792 introduced with the IBM zEnterprise EC12 machine generation
24793 @ref{S/390 System z Built-in Functions}.
24794 @option{-mhtm} is enabled by default when using @option{-march=zEC12}.
24796 @item -mvx
24797 @itemx -mno-vx
24798 @opindex mvx
24799 @opindex mno-vx
24800 When @option{-mvx} is specified, generate code using the instructions
24801 available with the vector extension facility introduced with the IBM
24802 z13 machine generation.
24803 This option changes the ABI for some vector type values with regard to
24804 alignment and calling conventions.  In case vector type values are
24805 being used in an ABI-relevant context a GAS @samp{.gnu_attribute}
24806 command will be added to mark the resulting binary with the ABI used.
24807 @option{-mvx} is enabled by default when using @option{-march=z13}.
24809 @item -mzvector
24810 @itemx -mno-zvector
24811 @opindex mzvector
24812 @opindex mno-zvector
24813 The @option{-mzvector} option enables vector language extensions and
24814 builtins using instructions available with the vector extension
24815 facility introduced with the IBM z13 machine generation.
24816 This option adds support for @samp{vector} to be used as a keyword to
24817 define vector type variables and arguments.  @samp{vector} is only
24818 available when GNU extensions are enabled.  It will not be expanded
24819 when requesting strict standard compliance e.g. with @option{-std=c99}.
24820 In addition to the GCC low-level builtins @option{-mzvector} enables
24821 a set of builtins added for compatibility with AltiVec-style
24822 implementations like Power and Cell.  In order to make use of these
24823 builtins the header file @file{vecintrin.h} needs to be included.
24824 @option{-mzvector} is disabled by default.
24826 @item -mmvcle
24827 @itemx -mno-mvcle
24828 @opindex mmvcle
24829 @opindex mno-mvcle
24830 Generate (or do not generate) code using the @code{mvcle} instruction
24831 to perform block moves.  When @option{-mno-mvcle} is specified,
24832 use a @code{mvc} loop instead.  This is the default unless optimizing for
24833 size.
24835 @item -mdebug
24836 @itemx -mno-debug
24837 @opindex mdebug
24838 @opindex mno-debug
24839 Print (or do not print) additional debug information when compiling.
24840 The default is to not print debug information.
24842 @item -march=@var{cpu-type}
24843 @opindex march
24844 Generate code that runs on @var{cpu-type}, which is the name of a
24845 system representing a certain processor type.  Possible values for
24846 @var{cpu-type} are @samp{z900}/@samp{arch5}, @samp{z990}/@samp{arch6},
24847 @samp{z9-109}, @samp{z9-ec}/@samp{arch7}, @samp{z10}/@samp{arch8},
24848 @samp{z196}/@samp{arch9}, @samp{zEC12}, @samp{z13}/@samp{arch11}, and
24849 @samp{native}.
24851 The default is @option{-march=z900}.  @samp{g5}/@samp{arch3} and
24852 @samp{g6} are deprecated and will be removed with future releases.
24854 Specifying @samp{native} as cpu type can be used to select the best
24855 architecture option for the host processor.
24856 @option{-march=native} has no effect if GCC does not recognize the
24857 processor.
24859 @item -mtune=@var{cpu-type}
24860 @opindex mtune
24861 Tune to @var{cpu-type} everything applicable about the generated code,
24862 except for the ABI and the set of available instructions.
24863 The list of @var{cpu-type} values is the same as for @option{-march}.
24864 The default is the value used for @option{-march}.
24866 @item -mtpf-trace
24867 @itemx -mno-tpf-trace
24868 @opindex mtpf-trace
24869 @opindex mno-tpf-trace
24870 Generate code that adds (does not add) in TPF OS specific branches to trace
24871 routines in the operating system.  This option is off by default, even
24872 when compiling for the TPF OS@.
24874 @item -mfused-madd
24875 @itemx -mno-fused-madd
24876 @opindex mfused-madd
24877 @opindex mno-fused-madd
24878 Generate code that uses (does not use) the floating-point multiply and
24879 accumulate instructions.  These instructions are generated by default if
24880 hardware floating point is used.
24882 @item -mwarn-framesize=@var{framesize}
24883 @opindex mwarn-framesize
24884 Emit a warning if the current function exceeds the given frame size.  Because
24885 this is a compile-time check it doesn't need to be a real problem when the program
24886 runs.  It is intended to identify functions that most probably cause
24887 a stack overflow.  It is useful to be used in an environment with limited stack
24888 size e.g.@: the linux kernel.
24890 @item -mwarn-dynamicstack
24891 @opindex mwarn-dynamicstack
24892 Emit a warning if the function calls @code{alloca} or uses dynamically-sized
24893 arrays.  This is generally a bad idea with a limited stack size.
24895 @item -mstack-guard=@var{stack-guard}
24896 @itemx -mstack-size=@var{stack-size}
24897 @opindex mstack-guard
24898 @opindex mstack-size
24899 If these options are provided the S/390 back end emits additional instructions in
24900 the function prologue that trigger a trap if the stack size is @var{stack-guard}
24901 bytes above the @var{stack-size} (remember that the stack on S/390 grows downward).
24902 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
24903 the frame size of the compiled function is chosen.
24904 These options are intended to be used to help debugging stack overflow problems.
24905 The additionally emitted code causes only little overhead and hence can also be
24906 used in production-like systems without greater performance degradation.  The given
24907 values have to be exact powers of 2 and @var{stack-size} has to be greater than
24908 @var{stack-guard} without exceeding 64k.
24909 In order to be efficient the extra code makes the assumption that the stack starts
24910 at an address aligned to the value given by @var{stack-size}.
24911 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
24913 @item -mhotpatch=@var{pre-halfwords},@var{post-halfwords}
24914 @opindex mhotpatch
24915 If the hotpatch option is enabled, a ``hot-patching'' function
24916 prologue is generated for all functions in the compilation unit.
24917 The funtion label is prepended with the given number of two-byte
24918 NOP instructions (@var{pre-halfwords}, maximum 1000000).  After
24919 the label, 2 * @var{post-halfwords} bytes are appended, using the
24920 largest NOP like instructions the architecture allows (maximum
24921 1000000).
24923 If both arguments are zero, hotpatching is disabled.
24925 This option can be overridden for individual functions with the
24926 @code{hotpatch} attribute.
24927 @end table
24929 @node Score Options
24930 @subsection Score Options
24931 @cindex Score Options
24933 These options are defined for Score implementations:
24935 @table @gcctabopt
24936 @item -meb
24937 @opindex meb
24938 Compile code for big-endian mode.  This is the default.
24940 @item -mel
24941 @opindex mel
24942 Compile code for little-endian mode.
24944 @item -mnhwloop
24945 @opindex mnhwloop
24946 Disable generation of @code{bcnz} instructions.
24948 @item -muls
24949 @opindex muls
24950 Enable generation of unaligned load and store instructions.
24952 @item -mmac
24953 @opindex mmac
24954 Enable the use of multiply-accumulate instructions. Disabled by default.
24956 @item -mscore5
24957 @opindex mscore5
24958 Specify the SCORE5 as the target architecture.
24960 @item -mscore5u
24961 @opindex mscore5u
24962 Specify the SCORE5U of the target architecture.
24964 @item -mscore7
24965 @opindex mscore7
24966 Specify the SCORE7 as the target architecture. This is the default.
24968 @item -mscore7d
24969 @opindex mscore7d
24970 Specify the SCORE7D as the target architecture.
24971 @end table
24973 @node SH Options
24974 @subsection SH Options
24976 These @samp{-m} options are defined for the SH implementations:
24978 @table @gcctabopt
24979 @item -m1
24980 @opindex m1
24981 Generate code for the SH1.
24983 @item -m2
24984 @opindex m2
24985 Generate code for the SH2.
24987 @item -m2e
24988 Generate code for the SH2e.
24990 @item -m2a-nofpu
24991 @opindex m2a-nofpu
24992 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
24993 that the floating-point unit is not used.
24995 @item -m2a-single-only
24996 @opindex m2a-single-only
24997 Generate code for the SH2a-FPU, in such a way that no double-precision
24998 floating-point operations are used.
25000 @item -m2a-single
25001 @opindex m2a-single
25002 Generate code for the SH2a-FPU assuming the floating-point unit is in
25003 single-precision mode by default.
25005 @item -m2a
25006 @opindex m2a
25007 Generate code for the SH2a-FPU assuming the floating-point unit is in
25008 double-precision mode by default.
25010 @item -m3
25011 @opindex m3
25012 Generate code for the SH3.
25014 @item -m3e
25015 @opindex m3e
25016 Generate code for the SH3e.
25018 @item -m4-nofpu
25019 @opindex m4-nofpu
25020 Generate code for the SH4 without a floating-point unit.
25022 @item -m4-single-only
25023 @opindex m4-single-only
25024 Generate code for the SH4 with a floating-point unit that only
25025 supports single-precision arithmetic.
25027 @item -m4-single
25028 @opindex m4-single
25029 Generate code for the SH4 assuming the floating-point unit is in
25030 single-precision mode by default.
25032 @item -m4
25033 @opindex m4
25034 Generate code for the SH4.
25036 @item -m4-100
25037 @opindex m4-100
25038 Generate code for SH4-100.
25040 @item -m4-100-nofpu
25041 @opindex m4-100-nofpu
25042 Generate code for SH4-100 in such a way that the
25043 floating-point unit is not used.
25045 @item -m4-100-single
25046 @opindex m4-100-single
25047 Generate code for SH4-100 assuming the floating-point unit is in
25048 single-precision mode by default.
25050 @item -m4-100-single-only
25051 @opindex m4-100-single-only
25052 Generate code for SH4-100 in such a way that no double-precision
25053 floating-point operations are used.
25055 @item -m4-200
25056 @opindex m4-200
25057 Generate code for SH4-200.
25059 @item -m4-200-nofpu
25060 @opindex m4-200-nofpu
25061 Generate code for SH4-200 without in such a way that the
25062 floating-point unit is not used.
25064 @item -m4-200-single
25065 @opindex m4-200-single
25066 Generate code for SH4-200 assuming the floating-point unit is in
25067 single-precision mode by default.
25069 @item -m4-200-single-only
25070 @opindex m4-200-single-only
25071 Generate code for SH4-200 in such a way that no double-precision
25072 floating-point operations are used.
25074 @item -m4-300
25075 @opindex m4-300
25076 Generate code for SH4-300.
25078 @item -m4-300-nofpu
25079 @opindex m4-300-nofpu
25080 Generate code for SH4-300 without in such a way that the
25081 floating-point unit is not used.
25083 @item -m4-300-single
25084 @opindex m4-300-single
25085 Generate code for SH4-300 in such a way that no double-precision
25086 floating-point operations are used.
25088 @item -m4-300-single-only
25089 @opindex m4-300-single-only
25090 Generate code for SH4-300 in such a way that no double-precision
25091 floating-point operations are used.
25093 @item -m4-340
25094 @opindex m4-340
25095 Generate code for SH4-340 (no MMU, no FPU).
25097 @item -m4-500
25098 @opindex m4-500
25099 Generate code for SH4-500 (no FPU).  Passes @option{-isa=sh4-nofpu} to the
25100 assembler.
25102 @item -m4a-nofpu
25103 @opindex m4a-nofpu
25104 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
25105 floating-point unit is not used.
25107 @item -m4a-single-only
25108 @opindex m4a-single-only
25109 Generate code for the SH4a, in such a way that no double-precision
25110 floating-point operations are used.
25112 @item -m4a-single
25113 @opindex m4a-single
25114 Generate code for the SH4a assuming the floating-point unit is in
25115 single-precision mode by default.
25117 @item -m4a
25118 @opindex m4a
25119 Generate code for the SH4a.
25121 @item -m4al
25122 @opindex m4al
25123 Same as @option{-m4a-nofpu}, except that it implicitly passes
25124 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
25125 instructions at the moment.
25127 @item -mb
25128 @opindex mb
25129 Compile code for the processor in big-endian mode.
25131 @item -ml
25132 @opindex ml
25133 Compile code for the processor in little-endian mode.
25135 @item -mdalign
25136 @opindex mdalign
25137 Align doubles at 64-bit boundaries.  Note that this changes the calling
25138 conventions, and thus some functions from the standard C library do
25139 not work unless you recompile it first with @option{-mdalign}.
25141 @item -mrelax
25142 @opindex mrelax
25143 Shorten some address references at link time, when possible; uses the
25144 linker option @option{-relax}.
25146 @item -mbigtable
25147 @opindex mbigtable
25148 Use 32-bit offsets in @code{switch} tables.  The default is to use
25149 16-bit offsets.
25151 @item -mbitops
25152 @opindex mbitops
25153 Enable the use of bit manipulation instructions on SH2A.
25155 @item -mfmovd
25156 @opindex mfmovd
25157 Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
25158 alignment constraints.
25160 @item -mrenesas
25161 @opindex mrenesas
25162 Comply with the calling conventions defined by Renesas.
25164 @item -mno-renesas
25165 @opindex mno-renesas
25166 Comply with the calling conventions defined for GCC before the Renesas
25167 conventions were available.  This option is the default for all
25168 targets of the SH toolchain.
25170 @item -mnomacsave
25171 @opindex mnomacsave
25172 Mark the @code{MAC} register as call-clobbered, even if
25173 @option{-mrenesas} is given.
25175 @item -mieee
25176 @itemx -mno-ieee
25177 @opindex mieee
25178 @opindex mno-ieee
25179 Control the IEEE compliance of floating-point comparisons, which affects the
25180 handling of cases where the result of a comparison is unordered.  By default
25181 @option{-mieee} is implicitly enabled.  If @option{-ffinite-math-only} is
25182 enabled @option{-mno-ieee} is implicitly set, which results in faster
25183 floating-point greater-equal and less-equal comparisons.  The implicit settings
25184 can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.
25186 @item -minline-ic_invalidate
25187 @opindex minline-ic_invalidate
25188 Inline code to invalidate instruction cache entries after setting up
25189 nested function trampolines.
25190 This option has no effect if @option{-musermode} is in effect and the selected
25191 code generation option (e.g. @option{-m4}) does not allow the use of the @code{icbi}
25192 instruction.
25193 If the selected code generation option does not allow the use of the @code{icbi}
25194 instruction, and @option{-musermode} is not in effect, the inlined code
25195 manipulates the instruction cache address array directly with an associative
25196 write.  This not only requires privileged mode at run time, but it also
25197 fails if the cache line had been mapped via the TLB and has become unmapped.
25199 @item -misize
25200 @opindex misize
25201 Dump instruction size and location in the assembly code.
25203 @item -mpadstruct
25204 @opindex mpadstruct
25205 This option is deprecated.  It pads structures to multiple of 4 bytes,
25206 which is incompatible with the SH ABI@.
25208 @item -matomic-model=@var{model}
25209 @opindex matomic-model=@var{model}
25210 Sets the model of atomic operations and additional parameters as a comma
25211 separated list.  For details on the atomic built-in functions see
25212 @ref{__atomic Builtins}.  The following models and parameters are supported:
25214 @table @samp
25216 @item none
25217 Disable compiler generated atomic sequences and emit library calls for atomic
25218 operations.  This is the default if the target is not @code{sh*-*-linux*}.
25220 @item soft-gusa
25221 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
25222 built-in functions.  The generated atomic sequences require additional support
25223 from the interrupt/exception handling code of the system and are only suitable
25224 for SH3* and SH4* single-core systems.  This option is enabled by default when
25225 the target is @code{sh*-*-linux*} and SH3* or SH4*.  When the target is SH4A,
25226 this option also partially utilizes the hardware atomic instructions
25227 @code{movli.l} and @code{movco.l} to create more efficient code, unless
25228 @samp{strict} is specified.  
25230 @item soft-tcb
25231 Generate software atomic sequences that use a variable in the thread control
25232 block.  This is a variation of the gUSA sequences which can also be used on
25233 SH1* and SH2* targets.  The generated atomic sequences require additional
25234 support from the interrupt/exception handling code of the system and are only
25235 suitable for single-core systems.  When using this model, the @samp{gbr-offset=}
25236 parameter has to be specified as well.
25238 @item soft-imask
25239 Generate software atomic sequences that temporarily disable interrupts by
25240 setting @code{SR.IMASK = 1111}.  This model works only when the program runs
25241 in privileged mode and is only suitable for single-core systems.  Additional
25242 support from the interrupt/exception handling code of the system is not
25243 required.  This model is enabled by default when the target is
25244 @code{sh*-*-linux*} and SH1* or SH2*.
25246 @item hard-llcs
25247 Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
25248 instructions only.  This is only available on SH4A and is suitable for
25249 multi-core systems.  Since the hardware instructions support only 32 bit atomic
25250 variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
25251 Code compiled with this option is also compatible with other software
25252 atomic model interrupt/exception handling systems if executed on an SH4A
25253 system.  Additional support from the interrupt/exception handling code of the
25254 system is not required for this model.
25256 @item gbr-offset=
25257 This parameter specifies the offset in bytes of the variable in the thread
25258 control block structure that should be used by the generated atomic sequences
25259 when the @samp{soft-tcb} model has been selected.  For other models this
25260 parameter is ignored.  The specified value must be an integer multiple of four
25261 and in the range 0-1020.
25263 @item strict
25264 This parameter prevents mixed usage of multiple atomic models, even if they
25265 are compatible, and makes the compiler generate atomic sequences of the
25266 specified model only.
25268 @end table
25270 @item -mtas
25271 @opindex mtas
25272 Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
25273 Notice that depending on the particular hardware and software configuration
25274 this can degrade overall performance due to the operand cache line flushes
25275 that are implied by the @code{tas.b} instruction.  On multi-core SH4A
25276 processors the @code{tas.b} instruction must be used with caution since it
25277 can result in data corruption for certain cache configurations.
25279 @item -mprefergot
25280 @opindex mprefergot
25281 When generating position-independent code, emit function calls using
25282 the Global Offset Table instead of the Procedure Linkage Table.
25284 @item -musermode
25285 @itemx -mno-usermode
25286 @opindex musermode
25287 @opindex mno-usermode
25288 Don't allow (allow) the compiler generating privileged mode code.  Specifying
25289 @option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
25290 inlined code would not work in user mode.  @option{-musermode} is the default
25291 when the target is @code{sh*-*-linux*}.  If the target is SH1* or SH2*
25292 @option{-musermode} has no effect, since there is no user mode.
25294 @item -multcost=@var{number}
25295 @opindex multcost=@var{number}
25296 Set the cost to assume for a multiply insn.
25298 @item -mdiv=@var{strategy}
25299 @opindex mdiv=@var{strategy}
25300 Set the division strategy to be used for integer division operations.
25301 @var{strategy} can be one of: 
25303 @table @samp
25305 @item call-div1
25306 Calls a library function that uses the single-step division instruction
25307 @code{div1} to perform the operation.  Division by zero calculates an
25308 unspecified result and does not trap.  This is the default except for SH4,
25309 SH2A and SHcompact.
25311 @item call-fp
25312 Calls a library function that performs the operation in double precision
25313 floating point.  Division by zero causes a floating-point exception.  This is
25314 the default for SHcompact with FPU.  Specifying this for targets that do not
25315 have a double precision FPU defaults to @code{call-div1}.
25317 @item call-table
25318 Calls a library function that uses a lookup table for small divisors and
25319 the @code{div1} instruction with case distinction for larger divisors.  Division
25320 by zero calculates an unspecified result and does not trap.  This is the default
25321 for SH4.  Specifying this for targets that do not have dynamic shift
25322 instructions defaults to @code{call-div1}.
25324 @end table
25326 When a division strategy has not been specified the default strategy is
25327 selected based on the current target.  For SH2A the default strategy is to
25328 use the @code{divs} and @code{divu} instructions instead of library function
25329 calls.
25331 @item -maccumulate-outgoing-args
25332 @opindex maccumulate-outgoing-args
25333 Reserve space once for outgoing arguments in the function prologue rather
25334 than around each call.  Generally beneficial for performance and size.  Also
25335 needed for unwinding to avoid changing the stack frame around conditional code.
25337 @item -mdivsi3_libfunc=@var{name}
25338 @opindex mdivsi3_libfunc=@var{name}
25339 Set the name of the library function used for 32-bit signed division to
25340 @var{name}.
25341 This only affects the name used in the @samp{call} division strategies, and
25342 the compiler still expects the same sets of input/output/clobbered registers as
25343 if this option were not present.
25345 @item -mfixed-range=@var{register-range}
25346 @opindex mfixed-range
25347 Generate code treating the given register range as fixed registers.
25348 A fixed register is one that the register allocator can not use.  This is
25349 useful when compiling kernel code.  A register range is specified as
25350 two registers separated by a dash.  Multiple register ranges can be
25351 specified separated by a comma.
25353 @item -mbranch-cost=@var{num}
25354 @opindex mbranch-cost=@var{num}
25355 Assume @var{num} to be the cost for a branch instruction.  Higher numbers
25356 make the compiler try to generate more branch-free code if possible.  
25357 If not specified the value is selected depending on the processor type that
25358 is being compiled for.
25360 @item -mzdcbranch
25361 @itemx -mno-zdcbranch
25362 @opindex mzdcbranch
25363 @opindex mno-zdcbranch
25364 Assume (do not assume) that zero displacement conditional branch instructions
25365 @code{bt} and @code{bf} are fast.  If @option{-mzdcbranch} is specified, the
25366 compiler prefers zero displacement branch code sequences.  This is
25367 enabled by default when generating code for SH4 and SH4A.  It can be explicitly
25368 disabled by specifying @option{-mno-zdcbranch}.
25370 @item -mcbranch-force-delay-slot
25371 @opindex mcbranch-force-delay-slot
25372 Force the usage of delay slots for conditional branches, which stuffs the delay
25373 slot with a @code{nop} if a suitable instruction cannot be found.  By default
25374 this option is disabled.  It can be enabled to work around hardware bugs as
25375 found in the original SH7055.
25377 @item -mfused-madd
25378 @itemx -mno-fused-madd
25379 @opindex mfused-madd
25380 @opindex mno-fused-madd
25381 Generate code that uses (does not use) the floating-point multiply and
25382 accumulate instructions.  These instructions are generated by default
25383 if hardware floating point is used.  The machine-dependent
25384 @option{-mfused-madd} option is now mapped to the machine-independent
25385 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
25386 mapped to @option{-ffp-contract=off}.
25388 @item -mfsca
25389 @itemx -mno-fsca
25390 @opindex mfsca
25391 @opindex mno-fsca
25392 Allow or disallow the compiler to emit the @code{fsca} instruction for sine
25393 and cosine approximations.  The option @option{-mfsca} must be used in
25394 combination with @option{-funsafe-math-optimizations}.  It is enabled by default
25395 when generating code for SH4A.  Using @option{-mno-fsca} disables sine and cosine
25396 approximations even if @option{-funsafe-math-optimizations} is in effect.
25398 @item -mfsrra
25399 @itemx -mno-fsrra
25400 @opindex mfsrra
25401 @opindex mno-fsrra
25402 Allow or disallow the compiler to emit the @code{fsrra} instruction for
25403 reciprocal square root approximations.  The option @option{-mfsrra} must be used
25404 in combination with @option{-funsafe-math-optimizations} and
25405 @option{-ffinite-math-only}.  It is enabled by default when generating code for
25406 SH4A.  Using @option{-mno-fsrra} disables reciprocal square root approximations
25407 even if @option{-funsafe-math-optimizations} and @option{-ffinite-math-only} are
25408 in effect.
25410 @item -mpretend-cmove
25411 @opindex mpretend-cmove
25412 Prefer zero-displacement conditional branches for conditional move instruction
25413 patterns.  This can result in faster code on the SH4 processor.
25415 @item -mfdpic
25416 @opindex fdpic
25417 Generate code using the FDPIC ABI.
25419 @end table
25421 @node Solaris 2 Options
25422 @subsection Solaris 2 Options
25423 @cindex Solaris 2 options
25425 These @samp{-m} options are supported on Solaris 2:
25427 @table @gcctabopt
25428 @item -mclear-hwcap
25429 @opindex mclear-hwcap
25430 @option{-mclear-hwcap} tells the compiler to remove the hardware
25431 capabilities generated by the Solaris assembler.  This is only necessary
25432 when object files use ISA extensions not supported by the current
25433 machine, but check at runtime whether or not to use them.
25435 @item -mimpure-text
25436 @opindex mimpure-text
25437 @option{-mimpure-text}, used in addition to @option{-shared}, tells
25438 the compiler to not pass @option{-z text} to the linker when linking a
25439 shared object.  Using this option, you can link position-dependent
25440 code into a shared object.
25442 @option{-mimpure-text} suppresses the ``relocations remain against
25443 allocatable but non-writable sections'' linker error message.
25444 However, the necessary relocations trigger copy-on-write, and the
25445 shared object is not actually shared across processes.  Instead of
25446 using @option{-mimpure-text}, you should compile all source code with
25447 @option{-fpic} or @option{-fPIC}.
25449 @end table
25451 These switches are supported in addition to the above on Solaris 2:
25453 @table @gcctabopt
25454 @item -pthreads
25455 @opindex pthreads
25456 This is a synonym for @option{-pthread}.
25457 @end table
25459 @node SPARC Options
25460 @subsection SPARC Options
25461 @cindex SPARC options
25463 These @samp{-m} options are supported on the SPARC:
25465 @table @gcctabopt
25466 @item -mno-app-regs
25467 @itemx -mapp-regs
25468 @opindex mno-app-regs
25469 @opindex mapp-regs
25470 Specify @option{-mapp-regs} to generate output using the global registers
25471 2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
25472 global register 1, each global register 2 through 4 is then treated as an
25473 allocable register that is clobbered by function calls.  This is the default.
25475 To be fully SVR4 ABI-compliant at the cost of some performance loss,
25476 specify @option{-mno-app-regs}.  You should compile libraries and system
25477 software with this option.
25479 @item -mflat
25480 @itemx -mno-flat
25481 @opindex mflat
25482 @opindex mno-flat
25483 With @option{-mflat}, the compiler does not generate save/restore instructions
25484 and uses a ``flat'' or single register window model.  This model is compatible
25485 with the regular register window model.  The local registers and the input
25486 registers (0--5) are still treated as ``call-saved'' registers and are
25487 saved on the stack as needed.
25489 With @option{-mno-flat} (the default), the compiler generates save/restore
25490 instructions (except for leaf functions).  This is the normal operating mode.
25492 @item -mfpu
25493 @itemx -mhard-float
25494 @opindex mfpu
25495 @opindex mhard-float
25496 Generate output containing floating-point instructions.  This is the
25497 default.
25499 @item -mno-fpu
25500 @itemx -msoft-float
25501 @opindex mno-fpu
25502 @opindex msoft-float
25503 Generate output containing library calls for floating point.
25504 @strong{Warning:} the requisite libraries are not available for all SPARC
25505 targets.  Normally the facilities of the machine's usual C compiler are
25506 used, but this cannot be done directly in cross-compilation.  You must make
25507 your own arrangements to provide suitable library functions for
25508 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
25509 @samp{sparclite-*-*} do provide software floating-point support.
25511 @option{-msoft-float} changes the calling convention in the output file;
25512 therefore, it is only useful if you compile @emph{all} of a program with
25513 this option.  In particular, you need to compile @file{libgcc.a}, the
25514 library that comes with GCC, with @option{-msoft-float} in order for
25515 this to work.
25517 @item -mhard-quad-float
25518 @opindex mhard-quad-float
25519 Generate output containing quad-word (long double) floating-point
25520 instructions.
25522 @item -msoft-quad-float
25523 @opindex msoft-quad-float
25524 Generate output containing library calls for quad-word (long double)
25525 floating-point instructions.  The functions called are those specified
25526 in the SPARC ABI@.  This is the default.
25528 As of this writing, there are no SPARC implementations that have hardware
25529 support for the quad-word floating-point instructions.  They all invoke
25530 a trap handler for one of these instructions, and then the trap handler
25531 emulates the effect of the instruction.  Because of the trap handler overhead,
25532 this is much slower than calling the ABI library routines.  Thus the
25533 @option{-msoft-quad-float} option is the default.
25535 @item -mno-unaligned-doubles
25536 @itemx -munaligned-doubles
25537 @opindex mno-unaligned-doubles
25538 @opindex munaligned-doubles
25539 Assume that doubles have 8-byte alignment.  This is the default.
25541 With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
25542 alignment only if they are contained in another type, or if they have an
25543 absolute address.  Otherwise, it assumes they have 4-byte alignment.
25544 Specifying this option avoids some rare compatibility problems with code
25545 generated by other compilers.  It is not the default because it results
25546 in a performance loss, especially for floating-point code.
25548 @item -muser-mode
25549 @itemx -mno-user-mode
25550 @opindex muser-mode
25551 @opindex mno-user-mode
25552 Do not generate code that can only run in supervisor mode.  This is relevant
25553 only for the @code{casa} instruction emitted for the LEON3 processor.  This
25554 is the default.
25556 @item -mfaster-structs
25557 @itemx -mno-faster-structs
25558 @opindex mfaster-structs
25559 @opindex mno-faster-structs
25560 With @option{-mfaster-structs}, the compiler assumes that structures
25561 should have 8-byte alignment.  This enables the use of pairs of
25562 @code{ldd} and @code{std} instructions for copies in structure
25563 assignment, in place of twice as many @code{ld} and @code{st} pairs.
25564 However, the use of this changed alignment directly violates the SPARC
25565 ABI@.  Thus, it's intended only for use on targets where the developer
25566 acknowledges that their resulting code is not directly in line with
25567 the rules of the ABI@.
25569 @item -mstd-struct-return
25570 @itemx -mno-std-struct-return
25571 @opindex mstd-struct-return
25572 @opindex mno-std-struct-return
25573 With @option{-mstd-struct-return}, the compiler generates checking code
25574 in functions returning structures or unions to detect size mismatches
25575 between the two sides of function calls, as per the 32-bit ABI@.
25577 The default is @option{-mno-std-struct-return}.  This option has no effect
25578 in 64-bit mode.
25580 @item -mlra
25581 @itemx -mno-lra
25582 @opindex mlra
25583 @opindex mno-lra
25584 Enable Local Register Allocation.  This is the default for SPARC since GCC 7
25585 so @option{-mno-lra} needs to be passed to get old Reload.
25587 @item -mcpu=@var{cpu_type}
25588 @opindex mcpu
25589 Set the instruction set, register set, and instruction scheduling parameters
25590 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
25591 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
25592 @samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{sparclite}, @samp{f930},
25593 @samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
25594 @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
25595 @samp{niagara3}, @samp{niagara4}, @samp{niagara7} and @samp{m8}.
25597 Native Solaris and GNU/Linux toolchains also support the value @samp{native},
25598 which selects the best architecture option for the host processor.
25599 @option{-mcpu=native} has no effect if GCC does not recognize
25600 the processor.
25602 Default instruction scheduling parameters are used for values that select
25603 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
25604 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
25606 Here is a list of each supported architecture and their supported
25607 implementations.
25609 @table @asis
25610 @item v7
25611 cypress, leon3v7
25613 @item v8
25614 supersparc, hypersparc, leon, leon3
25616 @item sparclite
25617 f930, f934, sparclite86x
25619 @item sparclet
25620 tsc701
25622 @item v9
25623 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
25624 niagara7, m8
25625 @end table
25627 By default (unless configured otherwise), GCC generates code for the V7
25628 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
25629 additionally optimizes it for the Cypress CY7C602 chip, as used in the
25630 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
25631 SPARCStation 1, 2, IPX etc.
25633 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
25634 architecture.  The only difference from V7 code is that the compiler emits
25635 the integer multiply and integer divide instructions which exist in SPARC-V8
25636 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
25637 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
25638 2000 series.
25640 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
25641 the SPARC architecture.  This adds the integer multiply, integer divide step
25642 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
25643 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
25644 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
25645 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
25646 MB86934 chip, which is the more recent SPARClite with FPU@.
25648 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
25649 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
25650 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
25651 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
25652 optimizes it for the TEMIC SPARClet chip.
25654 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
25655 architecture.  This adds 64-bit integer and floating-point move instructions,
25656 3 additional floating-point condition code registers and conditional move
25657 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
25658 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
25659 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
25660 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
25661 @option{-mcpu=niagara}, the compiler additionally optimizes it for
25662 Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
25663 additionally optimizes it for Sun UltraSPARC T2 chips. With
25664 @option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
25665 UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
25666 additionally optimizes it for Sun UltraSPARC T4 chips.  With
25667 @option{-mcpu=niagara7}, the compiler additionally optimizes it for
25668 Oracle SPARC M7 chips.  With @option{-mcpu=m8}, the compiler
25669 additionally optimizes it for Oracle M8 chips.
25671 @item -mtune=@var{cpu_type}
25672 @opindex mtune
25673 Set the instruction scheduling parameters for machine type
25674 @var{cpu_type}, but do not set the instruction set or register set that the
25675 option @option{-mcpu=@var{cpu_type}} does.
25677 The same values for @option{-mcpu=@var{cpu_type}} can be used for
25678 @option{-mtune=@var{cpu_type}}, but the only useful values are those
25679 that select a particular CPU implementation.  Those are
25680 @samp{cypress}, @samp{supersparc}, @samp{hypersparc}, @samp{leon},
25681 @samp{leon3}, @samp{leon3v7}, @samp{f930}, @samp{f934},
25682 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
25683 @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3},
25684 @samp{niagara4}, @samp{niagara7} and @samp{m8}.  With native Solaris
25685 and GNU/Linux toolchains, @samp{native} can also be used.
25687 @item -mv8plus
25688 @itemx -mno-v8plus
25689 @opindex mv8plus
25690 @opindex mno-v8plus
25691 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
25692 difference from the V8 ABI is that the global and out registers are
25693 considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
25694 mode for all SPARC-V9 processors.
25696 @item -mvis
25697 @itemx -mno-vis
25698 @opindex mvis
25699 @opindex mno-vis
25700 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
25701 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
25703 @item -mvis2
25704 @itemx -mno-vis2
25705 @opindex mvis2
25706 @opindex mno-vis2
25707 With @option{-mvis2}, GCC generates code that takes advantage of
25708 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
25709 default is @option{-mvis2} when targeting a cpu that supports such
25710 instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
25711 also sets @option{-mvis}.
25713 @item -mvis3
25714 @itemx -mno-vis3
25715 @opindex mvis3
25716 @opindex mno-vis3
25717 With @option{-mvis3}, GCC generates code that takes advantage of
25718 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
25719 default is @option{-mvis3} when targeting a cpu that supports such
25720 instructions, such as niagara-3 and later.  Setting @option{-mvis3}
25721 also sets @option{-mvis2} and @option{-mvis}.
25723 @item -mvis4
25724 @itemx -mno-vis4
25725 @opindex mvis4
25726 @opindex mno-vis4
25727 With @option{-mvis4}, GCC generates code that takes advantage of
25728 version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
25729 default is @option{-mvis4} when targeting a cpu that supports such
25730 instructions, such as niagara-7 and later.  Setting @option{-mvis4}
25731 also sets @option{-mvis3}, @option{-mvis2} and @option{-mvis}.
25733 @item -mvis4b
25734 @itemx -mno-vis4b
25735 @opindex mvis4b
25736 @opindex mno-vis4b
25737 With @option{-mvis4b}, GCC generates code that takes advantage of
25738 version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
25739 the additional VIS instructions introduced in the Oracle SPARC
25740 Architecture 2017.  The default is @option{-mvis4b} when targeting a
25741 cpu that supports such instructions, such as m8 and later.  Setting
25742 @option{-mvis4b} also sets @option{-mvis4}, @option{-mvis3},
25743 @option{-mvis2} and @option{-mvis}.
25745 @item -mcbcond
25746 @itemx -mno-cbcond
25747 @opindex mcbcond
25748 @opindex mno-cbcond
25749 With @option{-mcbcond}, GCC generates code that takes advantage of the UltraSPARC
25750 Compare-and-Branch-on-Condition instructions.  The default is @option{-mcbcond}
25751 when targeting a CPU that supports such instructions, such as Niagara-4 and
25752 later.
25754 @item -mfmaf
25755 @itemx -mno-fmaf
25756 @opindex mfmaf
25757 @opindex mno-fmaf
25758 With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
25759 Fused Multiply-Add Floating-point instructions.  The default is @option{-mfmaf}
25760 when targeting a CPU that supports such instructions, such as Niagara-3 and
25761 later.
25763 @item -mfsmuld
25764 @itemx -mno-fsmuld
25765 @opindex mfsmuld
25766 @opindex mno-fsmuld
25767 With @option{-mfsmuld}, GCC generates code that takes advantage of the
25768 Floating-point Multiply Single to Double (FsMULd) instruction.  The default is
25769 @option{-mfsmuld} when targeting a CPU supporting the architecture versions V8
25770 or V9 with FPU except @option{-mcpu=leon}.
25772 @item -mpopc
25773 @itemx -mno-popc
25774 @opindex mpopc
25775 @opindex mno-popc
25776 With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
25777 Population Count instruction.  The default is @option{-mpopc}
25778 when targeting a CPU that supports such an instruction, such as Niagara-2 and
25779 later.
25781 @item -msubxc
25782 @itemx -mno-subxc
25783 @opindex msubxc
25784 @opindex mno-subxc
25785 With @option{-msubxc}, GCC generates code that takes advantage of the UltraSPARC
25786 Subtract-Extended-with-Carry instruction.  The default is @option{-msubxc}
25787 when targeting a CPU that supports such an instruction, such as Niagara-7 and
25788 later.
25790 @item -mfix-at697f
25791 @opindex mfix-at697f
25792 Enable the documented workaround for the single erratum of the Atmel AT697F
25793 processor (which corresponds to erratum #13 of the AT697E processor).
25795 @item -mfix-ut699
25796 @opindex mfix-ut699
25797 Enable the documented workarounds for the floating-point errata and the data
25798 cache nullify errata of the UT699 processor.
25800 @item -mfix-ut700
25801 @opindex mfix-ut700
25802 Enable the documented workaround for the back-to-back store errata of
25803 the UT699E/UT700 processor.
25805 @item -mfix-gr712rc
25806 @opindex mfix-gr712rc
25807 Enable the documented workaround for the back-to-back store errata of
25808 the GR712RC processor.
25809 @end table
25811 These @samp{-m} options are supported in addition to the above
25812 on SPARC-V9 processors in 64-bit environments:
25814 @table @gcctabopt
25815 @item -m32
25816 @itemx -m64
25817 @opindex m32
25818 @opindex m64
25819 Generate code for a 32-bit or 64-bit environment.
25820 The 32-bit environment sets int, long and pointer to 32 bits.
25821 The 64-bit environment sets int to 32 bits and long and pointer
25822 to 64 bits.
25824 @item -mcmodel=@var{which}
25825 @opindex mcmodel
25826 Set the code model to one of
25828 @table @samp
25829 @item medlow
25830 The Medium/Low code model: 64-bit addresses, programs
25831 must be linked in the low 32 bits of memory.  Programs can be statically
25832 or dynamically linked.
25834 @item medmid
25835 The Medium/Middle code model: 64-bit addresses, programs
25836 must be linked in the low 44 bits of memory, the text and data segments must
25837 be less than 2GB in size and the data segment must be located within 2GB of
25838 the text segment.
25840 @item medany
25841 The Medium/Anywhere code model: 64-bit addresses, programs
25842 may be linked anywhere in memory, the text and data segments must be less
25843 than 2GB in size and the data segment must be located within 2GB of the
25844 text segment.
25846 @item embmedany
25847 The Medium/Anywhere code model for embedded systems:
25848 64-bit addresses, the text and data segments must be less than 2GB in
25849 size, both starting anywhere in memory (determined at link time).  The
25850 global register %g4 points to the base of the data segment.  Programs
25851 are statically linked and PIC is not supported.
25852 @end table
25854 @item -mmemory-model=@var{mem-model}
25855 @opindex mmemory-model
25856 Set the memory model in force on the processor to one of
25858 @table @samp
25859 @item default
25860 The default memory model for the processor and operating system.
25862 @item rmo
25863 Relaxed Memory Order
25865 @item pso
25866 Partial Store Order
25868 @item tso
25869 Total Store Order
25871 @item sc
25872 Sequential Consistency
25873 @end table
25875 These memory models are formally defined in Appendix D of the SPARC-V9
25876 architecture manual, as set in the processor's @code{PSTATE.MM} field.
25878 @item -mstack-bias
25879 @itemx -mno-stack-bias
25880 @opindex mstack-bias
25881 @opindex mno-stack-bias
25882 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
25883 frame pointer if present, are offset by @minus{}2047 which must be added back
25884 when making stack frame references.  This is the default in 64-bit mode.
25885 Otherwise, assume no such offset is present.
25886 @end table
25888 @node SPU Options
25889 @subsection SPU Options
25890 @cindex SPU options
25892 These @samp{-m} options are supported on the SPU:
25894 @table @gcctabopt
25895 @item -mwarn-reloc
25896 @itemx -merror-reloc
25897 @opindex mwarn-reloc
25898 @opindex merror-reloc
25900 The loader for SPU does not handle dynamic relocations.  By default, GCC
25901 gives an error when it generates code that requires a dynamic
25902 relocation.  @option{-mno-error-reloc} disables the error,
25903 @option{-mwarn-reloc} generates a warning instead.
25905 @item -msafe-dma
25906 @itemx -munsafe-dma
25907 @opindex msafe-dma
25908 @opindex munsafe-dma
25910 Instructions that initiate or test completion of DMA must not be
25911 reordered with respect to loads and stores of the memory that is being
25912 accessed.
25913 With @option{-munsafe-dma} you must use the @code{volatile} keyword to protect
25914 memory accesses, but that can lead to inefficient code in places where the
25915 memory is known to not change.  Rather than mark the memory as volatile,
25916 you can use @option{-msafe-dma} to tell the compiler to treat
25917 the DMA instructions as potentially affecting all memory.  
25919 @item -mbranch-hints
25920 @opindex mbranch-hints
25922 By default, GCC generates a branch hint instruction to avoid
25923 pipeline stalls for always-taken or probably-taken branches.  A hint
25924 is not generated closer than 8 instructions away from its branch.
25925 There is little reason to disable them, except for debugging purposes,
25926 or to make an object a little bit smaller.
25928 @item -msmall-mem
25929 @itemx -mlarge-mem
25930 @opindex msmall-mem
25931 @opindex mlarge-mem
25933 By default, GCC generates code assuming that addresses are never larger
25934 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
25935 a full 32-bit address.
25937 @item -mstdmain
25938 @opindex mstdmain
25940 By default, GCC links against startup code that assumes the SPU-style
25941 main function interface (which has an unconventional parameter list).
25942 With @option{-mstdmain}, GCC links your program against startup
25943 code that assumes a C99-style interface to @code{main}, including a
25944 local copy of @code{argv} strings.
25946 @item -mfixed-range=@var{register-range}
25947 @opindex mfixed-range
25948 Generate code treating the given register range as fixed registers.
25949 A fixed register is one that the register allocator cannot use.  This is
25950 useful when compiling kernel code.  A register range is specified as
25951 two registers separated by a dash.  Multiple register ranges can be
25952 specified separated by a comma.
25954 @item -mea32
25955 @itemx -mea64
25956 @opindex mea32
25957 @opindex mea64
25958 Compile code assuming that pointers to the PPU address space accessed
25959 via the @code{__ea} named address space qualifier are either 32 or 64
25960 bits wide.  The default is 32 bits.  As this is an ABI-changing option,
25961 all object code in an executable must be compiled with the same setting.
25963 @item -maddress-space-conversion
25964 @itemx -mno-address-space-conversion
25965 @opindex maddress-space-conversion
25966 @opindex mno-address-space-conversion
25967 Allow/disallow treating the @code{__ea} address space as superset
25968 of the generic address space.  This enables explicit type casts
25969 between @code{__ea} and generic pointer as well as implicit
25970 conversions of generic pointers to @code{__ea} pointers.  The
25971 default is to allow address space pointer conversions.
25973 @item -mcache-size=@var{cache-size}
25974 @opindex mcache-size
25975 This option controls the version of libgcc that the compiler links to an
25976 executable and selects a software-managed cache for accessing variables
25977 in the @code{__ea} address space with a particular cache size.  Possible
25978 options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
25979 and @samp{128}.  The default cache size is 64KB.
25981 @item -matomic-updates
25982 @itemx -mno-atomic-updates
25983 @opindex matomic-updates
25984 @opindex mno-atomic-updates
25985 This option controls the version of libgcc that the compiler links to an
25986 executable and selects whether atomic updates to the software-managed
25987 cache of PPU-side variables are used.  If you use atomic updates, changes
25988 to a PPU variable from SPU code using the @code{__ea} named address space
25989 qualifier do not interfere with changes to other PPU variables residing
25990 in the same cache line from PPU code.  If you do not use atomic updates,
25991 such interference may occur; however, writing back cache lines is
25992 more efficient.  The default behavior is to use atomic updates.
25994 @item -mdual-nops
25995 @itemx -mdual-nops=@var{n}
25996 @opindex mdual-nops
25997 By default, GCC inserts NOPs to increase dual issue when it expects
25998 it to increase performance.  @var{n} can be a value from 0 to 10.  A
25999 smaller @var{n} inserts fewer NOPs.  10 is the default, 0 is the
26000 same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
26002 @item -mhint-max-nops=@var{n}
26003 @opindex mhint-max-nops
26004 Maximum number of NOPs to insert for a branch hint.  A branch hint must
26005 be at least 8 instructions away from the branch it is affecting.  GCC
26006 inserts up to @var{n} NOPs to enforce this, otherwise it does not
26007 generate the branch hint.
26009 @item -mhint-max-distance=@var{n}
26010 @opindex mhint-max-distance
26011 The encoding of the branch hint instruction limits the hint to be within
26012 256 instructions of the branch it is affecting.  By default, GCC makes
26013 sure it is within 125.
26015 @item -msafe-hints
26016 @opindex msafe-hints
26017 Work around a hardware bug that causes the SPU to stall indefinitely.
26018 By default, GCC inserts the @code{hbrp} instruction to make sure
26019 this stall won't happen.
26021 @end table
26023 @node System V Options
26024 @subsection Options for System V
26026 These additional options are available on System V Release 4 for
26027 compatibility with other compilers on those systems:
26029 @table @gcctabopt
26030 @item -G
26031 @opindex G
26032 Create a shared object.
26033 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
26035 @item -Qy
26036 @opindex Qy
26037 Identify the versions of each tool used by the compiler, in a
26038 @code{.ident} assembler directive in the output.
26040 @item -Qn
26041 @opindex Qn
26042 Refrain from adding @code{.ident} directives to the output file (this is
26043 the default).
26045 @item -YP,@var{dirs}
26046 @opindex YP
26047 Search the directories @var{dirs}, and no others, for libraries
26048 specified with @option{-l}.
26050 @item -Ym,@var{dir}
26051 @opindex Ym
26052 Look in the directory @var{dir} to find the M4 preprocessor.
26053 The assembler uses this option.
26054 @c This is supposed to go with a -Yd for predefined M4 macro files, but
26055 @c the generic assembler that comes with Solaris takes just -Ym.
26056 @end table
26058 @node TILE-Gx Options
26059 @subsection TILE-Gx Options
26060 @cindex TILE-Gx options
26062 These @samp{-m} options are supported on the TILE-Gx:
26064 @table @gcctabopt
26065 @item -mcmodel=small
26066 @opindex mcmodel=small
26067 Generate code for the small model.  The distance for direct calls is
26068 limited to 500M in either direction.  PC-relative addresses are 32
26069 bits.  Absolute addresses support the full address range.
26071 @item -mcmodel=large
26072 @opindex mcmodel=large
26073 Generate code for the large model.  There is no limitation on call
26074 distance, pc-relative addresses, or absolute addresses.
26076 @item -mcpu=@var{name}
26077 @opindex mcpu
26078 Selects the type of CPU to be targeted.  Currently the only supported
26079 type is @samp{tilegx}.
26081 @item -m32
26082 @itemx -m64
26083 @opindex m32
26084 @opindex m64
26085 Generate code for a 32-bit or 64-bit environment.  The 32-bit
26086 environment sets int, long, and pointer to 32 bits.  The 64-bit
26087 environment sets int to 32 bits and long and pointer to 64 bits.
26089 @item -mbig-endian
26090 @itemx -mlittle-endian
26091 @opindex mbig-endian
26092 @opindex mlittle-endian
26093 Generate code in big/little endian mode, respectively.
26094 @end table
26096 @node TILEPro Options
26097 @subsection TILEPro Options
26098 @cindex TILEPro options
26100 These @samp{-m} options are supported on the TILEPro:
26102 @table @gcctabopt
26103 @item -mcpu=@var{name}
26104 @opindex mcpu
26105 Selects the type of CPU to be targeted.  Currently the only supported
26106 type is @samp{tilepro}.
26108 @item -m32
26109 @opindex m32
26110 Generate code for a 32-bit environment, which sets int, long, and
26111 pointer to 32 bits.  This is the only supported behavior so the flag
26112 is essentially ignored.
26113 @end table
26115 @node V850 Options
26116 @subsection V850 Options
26117 @cindex V850 Options
26119 These @samp{-m} options are defined for V850 implementations:
26121 @table @gcctabopt
26122 @item -mlong-calls
26123 @itemx -mno-long-calls
26124 @opindex mlong-calls
26125 @opindex mno-long-calls
26126 Treat all calls as being far away (near).  If calls are assumed to be
26127 far away, the compiler always loads the function's address into a
26128 register, and calls indirect through the pointer.
26130 @item -mno-ep
26131 @itemx -mep
26132 @opindex mno-ep
26133 @opindex mep
26134 Do not optimize (do optimize) basic blocks that use the same index
26135 pointer 4 or more times to copy pointer into the @code{ep} register, and
26136 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
26137 option is on by default if you optimize.
26139 @item -mno-prolog-function
26140 @itemx -mprolog-function
26141 @opindex mno-prolog-function
26142 @opindex mprolog-function
26143 Do not use (do use) external functions to save and restore registers
26144 at the prologue and epilogue of a function.  The external functions
26145 are slower, but use less code space if more than one function saves
26146 the same number of registers.  The @option{-mprolog-function} option
26147 is on by default if you optimize.
26149 @item -mspace
26150 @opindex mspace
26151 Try to make the code as small as possible.  At present, this just turns
26152 on the @option{-mep} and @option{-mprolog-function} options.
26154 @item -mtda=@var{n}
26155 @opindex mtda
26156 Put static or global variables whose size is @var{n} bytes or less into
26157 the tiny data area that register @code{ep} points to.  The tiny data
26158 area can hold up to 256 bytes in total (128 bytes for byte references).
26160 @item -msda=@var{n}
26161 @opindex msda
26162 Put static or global variables whose size is @var{n} bytes or less into
26163 the small data area that register @code{gp} points to.  The small data
26164 area can hold up to 64 kilobytes.
26166 @item -mzda=@var{n}
26167 @opindex mzda
26168 Put static or global variables whose size is @var{n} bytes or less into
26169 the first 32 kilobytes of memory.
26171 @item -mv850
26172 @opindex mv850
26173 Specify that the target processor is the V850.
26175 @item -mv850e3v5
26176 @opindex mv850e3v5
26177 Specify that the target processor is the V850E3V5.  The preprocessor
26178 constant @code{__v850e3v5__} is defined if this option is used.
26180 @item -mv850e2v4
26181 @opindex mv850e2v4
26182 Specify that the target processor is the V850E3V5.  This is an alias for
26183 the @option{-mv850e3v5} option.
26185 @item -mv850e2v3
26186 @opindex mv850e2v3
26187 Specify that the target processor is the V850E2V3.  The preprocessor
26188 constant @code{__v850e2v3__} is defined if this option is used.
26190 @item -mv850e2
26191 @opindex mv850e2
26192 Specify that the target processor is the V850E2.  The preprocessor
26193 constant @code{__v850e2__} is defined if this option is used.
26195 @item -mv850e1
26196 @opindex mv850e1
26197 Specify that the target processor is the V850E1.  The preprocessor
26198 constants @code{__v850e1__} and @code{__v850e__} are defined if
26199 this option is used.
26201 @item -mv850es
26202 @opindex mv850es
26203 Specify that the target processor is the V850ES.  This is an alias for
26204 the @option{-mv850e1} option.
26206 @item -mv850e
26207 @opindex mv850e
26208 Specify that the target processor is the V850E@.  The preprocessor
26209 constant @code{__v850e__} is defined if this option is used.
26211 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
26212 nor @option{-mv850e2} nor @option{-mv850e2v3} nor @option{-mv850e3v5}
26213 are defined then a default target processor is chosen and the
26214 relevant @samp{__v850*__} preprocessor constant is defined.
26216 The preprocessor constants @code{__v850} and @code{__v851__} are always
26217 defined, regardless of which processor variant is the target.
26219 @item -mdisable-callt
26220 @itemx -mno-disable-callt
26221 @opindex mdisable-callt
26222 @opindex mno-disable-callt
26223 This option suppresses generation of the @code{CALLT} instruction for the
26224 v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
26225 architecture.
26227 This option is enabled by default when the RH850 ABI is
26228 in use (see @option{-mrh850-abi}), and disabled by default when the
26229 GCC ABI is in use.  If @code{CALLT} instructions are being generated
26230 then the C preprocessor symbol @code{__V850_CALLT__} is defined.
26232 @item -mrelax
26233 @itemx -mno-relax
26234 @opindex mrelax
26235 @opindex mno-relax
26236 Pass on (or do not pass on) the @option{-mrelax} command-line option
26237 to the assembler.
26239 @item -mlong-jumps
26240 @itemx -mno-long-jumps
26241 @opindex mlong-jumps
26242 @opindex mno-long-jumps
26243 Disable (or re-enable) the generation of PC-relative jump instructions.
26245 @item -msoft-float
26246 @itemx -mhard-float
26247 @opindex msoft-float
26248 @opindex mhard-float
26249 Disable (or re-enable) the generation of hardware floating point
26250 instructions.  This option is only significant when the target
26251 architecture is @samp{V850E2V3} or higher.  If hardware floating point
26252 instructions are being generated then the C preprocessor symbol
26253 @code{__FPU_OK__} is defined, otherwise the symbol
26254 @code{__NO_FPU__} is defined.
26256 @item -mloop
26257 @opindex mloop
26258 Enables the use of the e3v5 LOOP instruction.  The use of this
26259 instruction is not enabled by default when the e3v5 architecture is
26260 selected because its use is still experimental.
26262 @item -mrh850-abi
26263 @itemx -mghs
26264 @opindex mrh850-abi
26265 @opindex mghs
26266 Enables support for the RH850 version of the V850 ABI.  This is the
26267 default.  With this version of the ABI the following rules apply:
26269 @itemize
26270 @item
26271 Integer sized structures and unions are returned via a memory pointer
26272 rather than a register.
26274 @item
26275 Large structures and unions (more than 8 bytes in size) are passed by
26276 value.
26278 @item
26279 Functions are aligned to 16-bit boundaries.
26281 @item
26282 The @option{-m8byte-align} command-line option is supported.
26284 @item
26285 The @option{-mdisable-callt} command-line option is enabled by
26286 default.  The @option{-mno-disable-callt} command-line option is not
26287 supported.
26288 @end itemize
26290 When this version of the ABI is enabled the C preprocessor symbol
26291 @code{__V850_RH850_ABI__} is defined.
26293 @item -mgcc-abi
26294 @opindex mgcc-abi
26295 Enables support for the old GCC version of the V850 ABI.  With this
26296 version of the ABI the following rules apply:
26298 @itemize
26299 @item
26300 Integer sized structures and unions are returned in register @code{r10}.
26302 @item
26303 Large structures and unions (more than 8 bytes in size) are passed by
26304 reference.
26306 @item
26307 Functions are aligned to 32-bit boundaries, unless optimizing for
26308 size.
26310 @item
26311 The @option{-m8byte-align} command-line option is not supported.
26313 @item
26314 The @option{-mdisable-callt} command-line option is supported but not
26315 enabled by default.
26316 @end itemize
26318 When this version of the ABI is enabled the C preprocessor symbol
26319 @code{__V850_GCC_ABI__} is defined.
26321 @item -m8byte-align
26322 @itemx -mno-8byte-align
26323 @opindex m8byte-align
26324 @opindex mno-8byte-align
26325 Enables support for @code{double} and @code{long long} types to be
26326 aligned on 8-byte boundaries.  The default is to restrict the
26327 alignment of all objects to at most 4-bytes.  When
26328 @option{-m8byte-align} is in effect the C preprocessor symbol
26329 @code{__V850_8BYTE_ALIGN__} is defined.
26331 @item -mbig-switch
26332 @opindex mbig-switch
26333 Generate code suitable for big switch tables.  Use this option only if
26334 the assembler/linker complain about out of range branches within a switch
26335 table.
26337 @item -mapp-regs
26338 @opindex mapp-regs
26339 This option causes r2 and r5 to be used in the code generated by
26340 the compiler.  This setting is the default.
26342 @item -mno-app-regs
26343 @opindex mno-app-regs
26344 This option causes r2 and r5 to be treated as fixed registers.
26346 @end table
26348 @node VAX Options
26349 @subsection VAX Options
26350 @cindex VAX options
26352 These @samp{-m} options are defined for the VAX:
26354 @table @gcctabopt
26355 @item -munix
26356 @opindex munix
26357 Do not output certain jump instructions (@code{aobleq} and so on)
26358 that the Unix assembler for the VAX cannot handle across long
26359 ranges.
26361 @item -mgnu
26362 @opindex mgnu
26363 Do output those jump instructions, on the assumption that the
26364 GNU assembler is being used.
26366 @item -mg
26367 @opindex mg
26368 Output code for G-format floating-point numbers instead of D-format.
26369 @end table
26371 @node Visium Options
26372 @subsection Visium Options
26373 @cindex Visium options
26375 @table @gcctabopt
26377 @item -mdebug
26378 @opindex mdebug
26379 A program which performs file I/O and is destined to run on an MCM target
26380 should be linked with this option.  It causes the libraries libc.a and
26381 libdebug.a to be linked.  The program should be run on the target under
26382 the control of the GDB remote debugging stub.
26384 @item -msim
26385 @opindex msim
26386 A program which performs file I/O and is destined to run on the simulator
26387 should be linked with option.  This causes libraries libc.a and libsim.a to
26388 be linked.
26390 @item -mfpu
26391 @itemx -mhard-float
26392 @opindex mfpu
26393 @opindex mhard-float
26394 Generate code containing floating-point instructions.  This is the
26395 default.
26397 @item -mno-fpu
26398 @itemx -msoft-float
26399 @opindex mno-fpu
26400 @opindex msoft-float
26401 Generate code containing library calls for floating-point.
26403 @option{-msoft-float} changes the calling convention in the output file;
26404 therefore, it is only useful if you compile @emph{all} of a program with
26405 this option.  In particular, you need to compile @file{libgcc.a}, the
26406 library that comes with GCC, with @option{-msoft-float} in order for
26407 this to work.
26409 @item -mcpu=@var{cpu_type}
26410 @opindex mcpu
26411 Set the instruction set, register set, and instruction scheduling parameters
26412 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
26413 @samp{mcm}, @samp{gr5} and @samp{gr6}.
26415 @samp{mcm} is a synonym of @samp{gr5} present for backward compatibility.
26417 By default (unless configured otherwise), GCC generates code for the GR5
26418 variant of the Visium architecture.  
26420 With @option{-mcpu=gr6}, GCC generates code for the GR6 variant of the Visium
26421 architecture.  The only difference from GR5 code is that the compiler will
26422 generate block move instructions.
26424 @item -mtune=@var{cpu_type}
26425 @opindex mtune
26426 Set the instruction scheduling parameters for machine type @var{cpu_type},
26427 but do not set the instruction set or register set that the option
26428 @option{-mcpu=@var{cpu_type}} would.
26430 @item -msv-mode
26431 @opindex msv-mode
26432 Generate code for the supervisor mode, where there are no restrictions on
26433 the access to general registers.  This is the default.
26435 @item -muser-mode
26436 @opindex muser-mode
26437 Generate code for the user mode, where the access to some general registers
26438 is forbidden: on the GR5, registers r24 to r31 cannot be accessed in this
26439 mode; on the GR6, only registers r29 to r31 are affected.
26440 @end table
26442 @node VMS Options
26443 @subsection VMS Options
26445 These @samp{-m} options are defined for the VMS implementations:
26447 @table @gcctabopt
26448 @item -mvms-return-codes
26449 @opindex mvms-return-codes
26450 Return VMS condition codes from @code{main}. The default is to return POSIX-style
26451 condition (e.g.@ error) codes.
26453 @item -mdebug-main=@var{prefix}
26454 @opindex mdebug-main=@var{prefix}
26455 Flag the first routine whose name starts with @var{prefix} as the main
26456 routine for the debugger.
26458 @item -mmalloc64
26459 @opindex mmalloc64
26460 Default to 64-bit memory allocation routines.
26462 @item -mpointer-size=@var{size}
26463 @opindex mpointer-size=@var{size}
26464 Set the default size of pointers. Possible options for @var{size} are
26465 @samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
26466 for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
26467 The later option disables @code{pragma pointer_size}.
26468 @end table
26470 @node VxWorks Options
26471 @subsection VxWorks Options
26472 @cindex VxWorks Options
26474 The options in this section are defined for all VxWorks targets.
26475 Options specific to the target hardware are listed with the other
26476 options for that target.
26478 @table @gcctabopt
26479 @item -mrtp
26480 @opindex mrtp
26481 GCC can generate code for both VxWorks kernels and real time processes
26482 (RTPs).  This option switches from the former to the latter.  It also
26483 defines the preprocessor macro @code{__RTP__}.
26485 @item -non-static
26486 @opindex non-static
26487 Link an RTP executable against shared libraries rather than static
26488 libraries.  The options @option{-static} and @option{-shared} can
26489 also be used for RTPs (@pxref{Link Options}); @option{-static}
26490 is the default.
26492 @item -Bstatic
26493 @itemx -Bdynamic
26494 @opindex Bstatic
26495 @opindex Bdynamic
26496 These options are passed down to the linker.  They are defined for
26497 compatibility with Diab.
26499 @item -Xbind-lazy
26500 @opindex Xbind-lazy
26501 Enable lazy binding of function calls.  This option is equivalent to
26502 @option{-Wl,-z,now} and is defined for compatibility with Diab.
26504 @item -Xbind-now
26505 @opindex Xbind-now
26506 Disable lazy binding of function calls.  This option is the default and
26507 is defined for compatibility with Diab.
26508 @end table
26510 @node x86 Options
26511 @subsection x86 Options
26512 @cindex x86 Options
26514 These @samp{-m} options are defined for the x86 family of computers.
26516 @table @gcctabopt
26518 @item -march=@var{cpu-type}
26519 @opindex march
26520 Generate instructions for the machine type @var{cpu-type}.  In contrast to
26521 @option{-mtune=@var{cpu-type}}, which merely tunes the generated code 
26522 for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
26523 to generate code that may not run at all on processors other than the one
26524 indicated.  Specifying @option{-march=@var{cpu-type}} implies 
26525 @option{-mtune=@var{cpu-type}}.
26527 The choices for @var{cpu-type} are:
26529 @table @samp
26530 @item native
26531 This selects the CPU to generate code for at compilation time by determining
26532 the processor type of the compiling machine.  Using @option{-march=native}
26533 enables all instruction subsets supported by the local machine (hence
26534 the result might not run on different machines).  Using @option{-mtune=native}
26535 produces code optimized for the local machine under the constraints
26536 of the selected instruction set.  
26538 @item x86-64
26539 A generic CPU with 64-bit extensions.
26541 @item i386
26542 Original Intel i386 CPU@.
26544 @item i486
26545 Intel i486 CPU@.  (No scheduling is implemented for this chip.)
26547 @item i586
26548 @itemx pentium
26549 Intel Pentium CPU with no MMX support.
26551 @item lakemont
26552 Intel Lakemont MCU, based on Intel Pentium CPU.
26554 @item pentium-mmx
26555 Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
26557 @item pentiumpro
26558 Intel Pentium Pro CPU@.
26560 @item i686
26561 When used with @option{-march}, the Pentium Pro
26562 instruction set is used, so the code runs on all i686 family chips.
26563 When used with @option{-mtune}, it has the same meaning as @samp{generic}.
26565 @item pentium2
26566 Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
26567 support.
26569 @item pentium3
26570 @itemx pentium3m
26571 Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
26572 set support.
26574 @item pentium-m
26575 Intel Pentium M; low-power version of Intel Pentium III CPU
26576 with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.
26578 @item pentium4
26579 @itemx pentium4m
26580 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.
26582 @item prescott
26583 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
26584 set support.
26586 @item nocona
26587 Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
26588 SSE2 and SSE3 instruction set support.
26590 @item core2
26591 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
26592 instruction set support.
26594 @item nehalem
26595 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
26596 SSE4.1, SSE4.2 and POPCNT instruction set support.
26598 @item westmere
26599 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
26600 SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction set support.
26602 @item sandybridge
26603 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
26604 SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL instruction set support.
26606 @item ivybridge
26607 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
26608 SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C
26609 instruction set support.
26611 @item haswell
26612 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
26613 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
26614 BMI, BMI2 and F16C instruction set support.
26616 @item broadwell
26617 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
26618 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
26619 BMI, BMI2, F16C, RDSEED, ADCX and PREFETCHW instruction set support.
26621 @item skylake
26622 Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
26623 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
26624 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and
26625 XSAVES instruction set support.
26627 @item bonnell
26628 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
26629 instruction set support.
26631 @item silvermont
26632 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
26633 SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and RDRND instruction set support.
26635 @item goldmont
26636 Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
26637 SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT and FSGSBASE
26638 instruction set support.
26640 @item goldmont-plus
26641 Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
26642 SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE,
26643 PTWRITE, RDPID, SGX and UMIP instruction set support.
26645 @item knl
26646 Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
26647 SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
26648 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and
26649 AVX512CD instruction set support.
26651 @item knm
26652 Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
26653 SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
26654 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD,
26655 AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
26657 @item skylake-avx512
26658 Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
26659 SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
26660 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26661 CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set support.
26663 @item cannonlake
26664 Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
26665 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
26666 RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
26667 XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26668 AVX512IFMA, SHA and UMIP instruction set support.
26670 @item icelake-client
26671 Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
26672 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
26673 RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
26674 XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26675 AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
26676 AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set support.
26678 @item icelake-server
26679 Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
26680 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
26681 RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
26682 XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26683 AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
26684 AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and WBNOINVD instruction
26685 set support.
26687 @item k6
26688 AMD K6 CPU with MMX instruction set support.
26690 @item k6-2
26691 @itemx k6-3
26692 Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
26694 @item athlon
26695 @itemx athlon-tbird
26696 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
26697 support.
26699 @item athlon-4
26700 @itemx athlon-xp
26701 @itemx athlon-mp
26702 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
26703 instruction set support.
26705 @item k8
26706 @itemx opteron
26707 @itemx athlon64
26708 @itemx athlon-fx
26709 Processors based on the AMD K8 core with x86-64 instruction set support,
26710 including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
26711 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
26712 instruction set extensions.)
26714 @item k8-sse3
26715 @itemx opteron-sse3
26716 @itemx athlon64-sse3
26717 Improved versions of AMD K8 cores with SSE3 instruction set support.
26719 @item amdfam10
26720 @itemx barcelona
26721 CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
26722 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
26723 instruction set extensions.)
26725 @item bdver1
26726 CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
26727 supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
26728 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
26729 @item bdver2
26730 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
26731 supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX,
26732 SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
26733 extensions.)
26734 @item bdver3
26735 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
26736 supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
26737 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 
26738 64-bit instruction set extensions.
26739 @item bdver4
26740 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
26741 supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
26742 AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 
26743 SSE4.2, ABM and 64-bit instruction set extensions.
26745 @item znver1
26746 AMD Family 17h core based CPUs with x86-64 instruction set support.  (This
26747 supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
26748 SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
26749 SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
26750 instruction set extensions.
26752 @item btver1
26753 CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
26754 supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
26755 instruction set extensions.)
26757 @item btver2
26758 CPUs based on AMD Family 16h cores with x86-64 instruction set support. This
26759 includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM,
26760 SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set extensions.
26762 @item winchip-c6
26763 IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
26764 set support.
26766 @item winchip2
26767 IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
26768 instruction set support.
26770 @item c3
26771 VIA C3 CPU with MMX and 3DNow!@: instruction set support.
26772 (No scheduling is implemented for this chip.)
26774 @item c3-2
26775 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
26776 (No scheduling is implemented for this chip.)
26778 @item c7
26779 VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
26780 (No scheduling is implemented for this chip.)
26782 @item samuel-2
26783 VIA Eden Samuel 2 CPU with MMX and 3DNow!@: instruction set support.
26784 (No scheduling is implemented for this chip.)
26786 @item nehemiah
26787 VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
26788 (No scheduling is implemented for this chip.)
26790 @item esther
26791 VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
26792 (No scheduling is implemented for this chip.)
26794 @item eden-x2
26795 VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3 instruction set support.
26796 (No scheduling is implemented for this chip.)
26798 @item eden-x4
26799 VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
26800 AVX and AVX2 instruction set support.
26801 (No scheduling is implemented for this chip.)
26803 @item nano
26804 Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26805 instruction set support.
26806 (No scheduling is implemented for this chip.)
26808 @item nano-1000
26809 VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26810 instruction set support.
26811 (No scheduling is implemented for this chip.)
26813 @item nano-2000
26814 VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26815 instruction set support.
26816 (No scheduling is implemented for this chip.)
26818 @item nano-3000
26819 VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
26820 instruction set support.
26821 (No scheduling is implemented for this chip.)
26823 @item nano-x2
26824 VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
26825 instruction set support.
26826 (No scheduling is implemented for this chip.)
26828 @item nano-x4
26829 VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
26830 instruction set support.
26831 (No scheduling is implemented for this chip.)
26833 @item geode
26834 AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
26835 @end table
26837 @item -mtune=@var{cpu-type}
26838 @opindex mtune
26839 Tune to @var{cpu-type} everything applicable about the generated code, except
26840 for the ABI and the set of available instructions.  
26841 While picking a specific @var{cpu-type} schedules things appropriately
26842 for that particular chip, the compiler does not generate any code that
26843 cannot run on the default machine type unless you use a
26844 @option{-march=@var{cpu-type}} option.
26845 For example, if GCC is configured for i686-pc-linux-gnu
26846 then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
26847 but still runs on i686 machines.
26849 The choices for @var{cpu-type} are the same as for @option{-march}.
26850 In addition, @option{-mtune} supports 2 extra choices for @var{cpu-type}:
26852 @table @samp
26853 @item generic
26854 Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
26855 If you know the CPU on which your code will run, then you should use
26856 the corresponding @option{-mtune} or @option{-march} option instead of
26857 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
26858 of your application will have, then you should use this option.
26860 As new processors are deployed in the marketplace, the behavior of this
26861 option will change.  Therefore, if you upgrade to a newer version of
26862 GCC, code generation controlled by this option will change to reflect
26863 the processors
26864 that are most common at the time that version of GCC is released.
26866 There is no @option{-march=generic} option because @option{-march}
26867 indicates the instruction set the compiler can use, and there is no
26868 generic instruction set applicable to all processors.  In contrast,
26869 @option{-mtune} indicates the processor (or, in this case, collection of
26870 processors) for which the code is optimized.
26872 @item intel
26873 Produce code optimized for the most current Intel processors, which are
26874 Haswell and Silvermont for this version of GCC.  If you know the CPU
26875 on which your code will run, then you should use the corresponding
26876 @option{-mtune} or @option{-march} option instead of @option{-mtune=intel}.
26877 But, if you want your application performs better on both Haswell and
26878 Silvermont, then you should use this option.
26880 As new Intel processors are deployed in the marketplace, the behavior of
26881 this option will change.  Therefore, if you upgrade to a newer version of
26882 GCC, code generation controlled by this option will change to reflect
26883 the most current Intel processors at the time that version of GCC is
26884 released.
26886 There is no @option{-march=intel} option because @option{-march} indicates
26887 the instruction set the compiler can use, and there is no common
26888 instruction set applicable to all processors.  In contrast,
26889 @option{-mtune} indicates the processor (or, in this case, collection of
26890 processors) for which the code is optimized.
26891 @end table
26893 @item -mcpu=@var{cpu-type}
26894 @opindex mcpu
26895 A deprecated synonym for @option{-mtune}.
26897 @item -mfpmath=@var{unit}
26898 @opindex mfpmath
26899 Generate floating-point arithmetic for selected unit @var{unit}.  The choices
26900 for @var{unit} are:
26902 @table @samp
26903 @item 387
26904 Use the standard 387 floating-point coprocessor present on the majority of chips and
26905 emulated otherwise.  Code compiled with this option runs almost everywhere.
26906 The temporary results are computed in 80-bit precision instead of the precision
26907 specified by the type, resulting in slightly different results compared to most
26908 of other chips.  See @option{-ffloat-store} for more detailed description.
26910 This is the default choice for non-Darwin x86-32 targets.
26912 @item sse
26913 Use scalar floating-point instructions present in the SSE instruction set.
26914 This instruction set is supported by Pentium III and newer chips,
26915 and in the AMD line
26916 by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
26917 instruction set supports only single-precision arithmetic, thus the double and
26918 extended-precision arithmetic are still done using 387.  A later version, present
26919 only in Pentium 4 and AMD x86-64 chips, supports double-precision
26920 arithmetic too.
26922 For the x86-32 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
26923 or @option{-msse2} switches to enable SSE extensions and make this option
26924 effective.  For the x86-64 compiler, these extensions are enabled by default.
26926 The resulting code should be considerably faster in the majority of cases and avoid
26927 the numerical instability problems of 387 code, but may break some existing
26928 code that expects temporaries to be 80 bits.
26930 This is the default choice for the x86-64 compiler, Darwin x86-32 targets,
26931 and the default choice for x86-32 targets with the SSE2 instruction set
26932 when @option{-ffast-math} is enabled.
26934 @item sse,387
26935 @itemx sse+387
26936 @itemx both
26937 Attempt to utilize both instruction sets at once.  This effectively doubles the
26938 amount of available registers, and on chips with separate execution units for
26939 387 and SSE the execution resources too.  Use this option with care, as it is
26940 still experimental, because the GCC register allocator does not model separate
26941 functional units well, resulting in unstable performance.
26942 @end table
26944 @item -masm=@var{dialect}
26945 @opindex masm=@var{dialect}
26946 Output assembly instructions using selected @var{dialect}.  Also affects
26947 which dialect is used for basic @code{asm} (@pxref{Basic Asm}) and
26948 extended @code{asm} (@pxref{Extended Asm}). Supported choices (in dialect
26949 order) are @samp{att} or @samp{intel}. The default is @samp{att}. Darwin does
26950 not support @samp{intel}.
26952 @item -mieee-fp
26953 @itemx -mno-ieee-fp
26954 @opindex mieee-fp
26955 @opindex mno-ieee-fp
26956 Control whether or not the compiler uses IEEE floating-point
26957 comparisons.  These correctly handle the case where the result of a
26958 comparison is unordered.
26960 @item -m80387
26961 @itemx -mhard-float
26962 @opindex 80387
26963 @opindex mhard-float
26964 Generate output containing 80387 instructions for floating point.
26966 @item -mno-80387
26967 @itemx -msoft-float
26968 @opindex no-80387
26969 @opindex msoft-float
26970 Generate output containing library calls for floating point.
26972 @strong{Warning:} the requisite libraries are not part of GCC@.
26973 Normally the facilities of the machine's usual C compiler are used, but
26974 this cannot be done directly in cross-compilation.  You must make your
26975 own arrangements to provide suitable library functions for
26976 cross-compilation.
26978 On machines where a function returns floating-point results in the 80387
26979 register stack, some floating-point opcodes may be emitted even if
26980 @option{-msoft-float} is used.
26982 @item -mno-fp-ret-in-387
26983 @opindex mno-fp-ret-in-387
26984 Do not use the FPU registers for return values of functions.
26986 The usual calling convention has functions return values of types
26987 @code{float} and @code{double} in an FPU register, even if there
26988 is no FPU@.  The idea is that the operating system should emulate
26989 an FPU@.
26991 The option @option{-mno-fp-ret-in-387} causes such values to be returned
26992 in ordinary CPU registers instead.
26994 @item -mno-fancy-math-387
26995 @opindex mno-fancy-math-387
26996 Some 387 emulators do not support the @code{sin}, @code{cos} and
26997 @code{sqrt} instructions for the 387.  Specify this option to avoid
26998 generating those instructions.  This option is the default on
26999 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
27000 indicates that the target CPU always has an FPU and so the
27001 instruction does not need emulation.  These
27002 instructions are not generated unless you also use the
27003 @option{-funsafe-math-optimizations} switch.
27005 @item -malign-double
27006 @itemx -mno-align-double
27007 @opindex malign-double
27008 @opindex mno-align-double
27009 Control whether GCC aligns @code{double}, @code{long double}, and
27010 @code{long long} variables on a two-word boundary or a one-word
27011 boundary.  Aligning @code{double} variables on a two-word boundary
27012 produces code that runs somewhat faster on a Pentium at the
27013 expense of more memory.
27015 On x86-64, @option{-malign-double} is enabled by default.
27017 @strong{Warning:} if you use the @option{-malign-double} switch,
27018 structures containing the above types are aligned differently than
27019 the published application binary interface specifications for the x86-32
27020 and are not binary compatible with structures in code compiled
27021 without that switch.
27023 @item -m96bit-long-double
27024 @itemx -m128bit-long-double
27025 @opindex m96bit-long-double
27026 @opindex m128bit-long-double
27027 These switches control the size of @code{long double} type.  The x86-32
27028 application binary interface specifies the size to be 96 bits,
27029 so @option{-m96bit-long-double} is the default in 32-bit mode.
27031 Modern architectures (Pentium and newer) prefer @code{long double}
27032 to be aligned to an 8- or 16-byte boundary.  In arrays or structures
27033 conforming to the ABI, this is not possible.  So specifying
27034 @option{-m128bit-long-double} aligns @code{long double}
27035 to a 16-byte boundary by padding the @code{long double} with an additional
27036 32-bit zero.
27038 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
27039 its ABI specifies that @code{long double} is aligned on 16-byte boundary.
27041 Notice that neither of these options enable any extra precision over the x87
27042 standard of 80 bits for a @code{long double}.
27044 @strong{Warning:} if you override the default value for your target ABI, this
27045 changes the size of 
27046 structures and arrays containing @code{long double} variables,
27047 as well as modifying the function calling convention for functions taking
27048 @code{long double}.  Hence they are not binary-compatible
27049 with code compiled without that switch.
27051 @item -mlong-double-64
27052 @itemx -mlong-double-80
27053 @itemx -mlong-double-128
27054 @opindex mlong-double-64
27055 @opindex mlong-double-80
27056 @opindex mlong-double-128
27057 These switches control the size of @code{long double} type. A size
27058 of 64 bits makes the @code{long double} type equivalent to the @code{double}
27059 type. This is the default for 32-bit Bionic C library.  A size
27060 of 128 bits makes the @code{long double} type equivalent to the
27061 @code{__float128} type. This is the default for 64-bit Bionic C library.
27063 @strong{Warning:} if you override the default value for your target ABI, this
27064 changes the size of
27065 structures and arrays containing @code{long double} variables,
27066 as well as modifying the function calling convention for functions taking
27067 @code{long double}.  Hence they are not binary-compatible
27068 with code compiled without that switch.
27070 @item -malign-data=@var{type}
27071 @opindex malign-data
27072 Control how GCC aligns variables.  Supported values for @var{type} are
27073 @samp{compat} uses increased alignment value compatible uses GCC 4.8
27074 and earlier, @samp{abi} uses alignment value as specified by the
27075 psABI, and @samp{cacheline} uses increased alignment value to match
27076 the cache line size.  @samp{compat} is the default.
27078 @item -mlarge-data-threshold=@var{threshold}
27079 @opindex mlarge-data-threshold
27080 When @option{-mcmodel=medium} is specified, data objects larger than
27081 @var{threshold} are placed in the large data section.  This value must be the
27082 same across all objects linked into the binary, and defaults to 65535.
27084 @item -mrtd
27085 @opindex mrtd
27086 Use a different function-calling convention, in which functions that
27087 take a fixed number of arguments return with the @code{ret @var{num}}
27088 instruction, which pops their arguments while returning.  This saves one
27089 instruction in the caller since there is no need to pop the arguments
27090 there.
27092 You can specify that an individual function is called with this calling
27093 sequence with the function attribute @code{stdcall}.  You can also
27094 override the @option{-mrtd} option by using the function attribute
27095 @code{cdecl}.  @xref{Function Attributes}.
27097 @strong{Warning:} this calling convention is incompatible with the one
27098 normally used on Unix, so you cannot use it if you need to call
27099 libraries compiled with the Unix compiler.
27101 Also, you must provide function prototypes for all functions that
27102 take variable numbers of arguments (including @code{printf});
27103 otherwise incorrect code is generated for calls to those
27104 functions.
27106 In addition, seriously incorrect code results if you call a
27107 function with too many arguments.  (Normally, extra arguments are
27108 harmlessly ignored.)
27110 @item -mregparm=@var{num}
27111 @opindex mregparm
27112 Control how many registers are used to pass integer arguments.  By
27113 default, no registers are used to pass arguments, and at most 3
27114 registers can be used.  You can control this behavior for a specific
27115 function by using the function attribute @code{regparm}.
27116 @xref{Function Attributes}.
27118 @strong{Warning:} if you use this switch, and
27119 @var{num} is nonzero, then you must build all modules with the same
27120 value, including any libraries.  This includes the system libraries and
27121 startup modules.
27123 @item -msseregparm
27124 @opindex msseregparm
27125 Use SSE register passing conventions for float and double arguments
27126 and return values.  You can control this behavior for a specific
27127 function by using the function attribute @code{sseregparm}.
27128 @xref{Function Attributes}.
27130 @strong{Warning:} if you use this switch then you must build all
27131 modules with the same value, including any libraries.  This includes
27132 the system libraries and startup modules.
27134 @item -mvect8-ret-in-mem
27135 @opindex mvect8-ret-in-mem
27136 Return 8-byte vectors in memory instead of MMX registers.  This is the
27137 default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun
27138 Studio compilers until version 12.  Later compiler versions (starting
27139 with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which
27140 is the default on Solaris@tie{}10 and later.  @emph{Only} use this option if
27141 you need to remain compatible with existing code produced by those
27142 previous compiler versions or older versions of GCC@.
27144 @item -mpc32
27145 @itemx -mpc64
27146 @itemx -mpc80
27147 @opindex mpc32
27148 @opindex mpc64
27149 @opindex mpc80
27151 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
27152 is specified, the significands of results of floating-point operations are
27153 rounded to 24 bits (single precision); @option{-mpc64} rounds the
27154 significands of results of floating-point operations to 53 bits (double
27155 precision) and @option{-mpc80} rounds the significands of results of
27156 floating-point operations to 64 bits (extended double precision), which is
27157 the default.  When this option is used, floating-point operations in higher
27158 precisions are not available to the programmer without setting the FPU
27159 control word explicitly.
27161 Setting the rounding of floating-point operations to less than the default
27162 80 bits can speed some programs by 2% or more.  Note that some mathematical
27163 libraries assume that extended-precision (80-bit) floating-point operations
27164 are enabled by default; routines in such libraries could suffer significant
27165 loss of accuracy, typically through so-called ``catastrophic cancellation'',
27166 when this option is used to set the precision to less than extended precision.
27168 @item -mstackrealign
27169 @opindex mstackrealign
27170 Realign the stack at entry.  On the x86, the @option{-mstackrealign}
27171 option generates an alternate prologue and epilogue that realigns the
27172 run-time stack if necessary.  This supports mixing legacy codes that keep
27173 4-byte stack alignment with modern codes that keep 16-byte stack alignment for
27174 SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
27175 applicable to individual functions.
27177 @item -mpreferred-stack-boundary=@var{num}
27178 @opindex mpreferred-stack-boundary
27179 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
27180 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
27181 the default is 4 (16 bytes or 128 bits).
27183 @strong{Warning:} When generating code for the x86-64 architecture with
27184 SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
27185 used to keep the stack boundary aligned to 8 byte boundary.  Since
27186 x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
27187 intended to be used in controlled environment where stack space is
27188 important limitation.  This option leads to wrong code when functions
27189 compiled with 16 byte stack alignment (such as functions from a standard
27190 library) are called with misaligned stack.  In this case, SSE
27191 instructions may lead to misaligned memory access traps.  In addition,
27192 variable arguments are handled incorrectly for 16 byte aligned
27193 objects (including x87 long double and __int128), leading to wrong
27194 results.  You must build all modules with
27195 @option{-mpreferred-stack-boundary=3}, including any libraries.  This
27196 includes the system libraries and startup modules.
27198 @item -mincoming-stack-boundary=@var{num}
27199 @opindex mincoming-stack-boundary
27200 Assume the incoming stack is aligned to a 2 raised to @var{num} byte
27201 boundary.  If @option{-mincoming-stack-boundary} is not specified,
27202 the one specified by @option{-mpreferred-stack-boundary} is used.
27204 On Pentium and Pentium Pro, @code{double} and @code{long double} values
27205 should be aligned to an 8-byte boundary (see @option{-malign-double}) or
27206 suffer significant run time performance penalties.  On Pentium III, the
27207 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
27208 properly if it is not 16-byte aligned.
27210 To ensure proper alignment of this values on the stack, the stack boundary
27211 must be as aligned as that required by any value stored on the stack.
27212 Further, every function must be generated such that it keeps the stack
27213 aligned.  Thus calling a function compiled with a higher preferred
27214 stack boundary from a function compiled with a lower preferred stack
27215 boundary most likely misaligns the stack.  It is recommended that
27216 libraries that use callbacks always use the default setting.
27218 This extra alignment does consume extra stack space, and generally
27219 increases code size.  Code that is sensitive to stack space usage, such
27220 as embedded systems and operating system kernels, may want to reduce the
27221 preferred alignment to @option{-mpreferred-stack-boundary=2}.
27223 @need 200
27224 @item -mmmx
27225 @opindex mmmx
27226 @need 200
27227 @itemx -msse
27228 @opindex msse
27229 @need 200
27230 @itemx -msse2
27231 @opindex msse2
27232 @need 200
27233 @itemx -msse3
27234 @opindex msse3
27235 @need 200
27236 @itemx -mssse3
27237 @opindex mssse3
27238 @need 200
27239 @itemx -msse4
27240 @opindex msse4
27241 @need 200
27242 @itemx -msse4a
27243 @opindex msse4a
27244 @need 200
27245 @itemx -msse4.1
27246 @opindex msse4.1
27247 @need 200
27248 @itemx -msse4.2
27249 @opindex msse4.2
27250 @need 200
27251 @itemx -mavx
27252 @opindex mavx
27253 @need 200
27254 @itemx -mavx2
27255 @opindex mavx2
27256 @need 200
27257 @itemx -mavx512f
27258 @opindex mavx512f
27259 @need 200
27260 @itemx -mavx512pf
27261 @opindex mavx512pf
27262 @need 200
27263 @itemx -mavx512er
27264 @opindex mavx512er
27265 @need 200
27266 @itemx -mavx512cd
27267 @opindex mavx512cd
27268 @need 200
27269 @itemx -mavx512vl
27270 @opindex mavx512vl
27271 @need 200
27272 @itemx -mavx512bw
27273 @opindex mavx512bw
27274 @need 200
27275 @itemx -mavx512dq
27276 @opindex mavx512dq
27277 @need 200
27278 @itemx -mavx512ifma
27279 @opindex mavx512ifma
27280 @need 200
27281 @itemx -mavx512vbmi
27282 @opindex mavx512vbmi
27283 @need 200
27284 @itemx -msha
27285 @opindex msha
27286 @need 200
27287 @itemx -maes
27288 @opindex maes
27289 @need 200
27290 @itemx -mpclmul
27291 @opindex mpclmul
27292 @need 200
27293 @itemx -mclflushopt
27294 @opindex mclflushopt
27295 @need 200
27296 @itemx -mfsgsbase
27297 @opindex mfsgsbase
27298 @need 200
27299 @itemx -mrdrnd
27300 @opindex mrdrnd
27301 @need 200
27302 @itemx -mf16c
27303 @opindex mf16c
27304 @need 200
27305 @itemx -mfma
27306 @opindex mfma
27307 @need 200
27308 @itemx -mpconfig
27309 @opindex mpconfig
27310 @need 200
27311 @itemx -mwbnoinvd
27312 @opindex mwbnoinvd
27313 @need 200
27314 @itemx -mfma4
27315 @opindex mfma4
27316 @need 200
27317 @itemx -mprefetchwt1
27318 @opindex mprefetchwt1
27319 @need 200
27320 @itemx -mxop
27321 @opindex mxop
27322 @need 200
27323 @itemx -mlwp
27324 @opindex mlwp
27325 @need 200
27326 @itemx -m3dnow
27327 @opindex m3dnow
27328 @need 200
27329 @itemx -m3dnowa
27330 @opindex m3dnowa
27331 @need 200
27332 @itemx -mpopcnt
27333 @opindex mpopcnt
27334 @need 200
27335 @itemx -mabm
27336 @opindex mabm
27337 @need 200
27338 @itemx -mbmi
27339 @opindex mbmi
27340 @need 200
27341 @itemx -mbmi2
27342 @need 200
27343 @itemx -mlzcnt
27344 @opindex mlzcnt
27345 @need 200
27346 @itemx -mfxsr
27347 @opindex mfxsr
27348 @need 200
27349 @itemx -mxsave
27350 @opindex mxsave
27351 @need 200
27352 @itemx -mxsaveopt
27353 @opindex mxsaveopt
27354 @need 200
27355 @itemx -mxsavec
27356 @opindex mxsavec
27357 @need 200
27358 @itemx -mxsaves
27359 @opindex mxsaves
27360 @need 200
27361 @itemx -mrtm
27362 @opindex mrtm
27363 @need 200
27364 @itemx -mtbm
27365 @opindex mtbm
27366 @need 200
27367 @itemx -mmpx
27368 @opindex mmpx
27369 @need 200
27370 @itemx -mmwaitx
27371 @opindex mmwaitx
27372 @need 200
27373 @itemx -mclzero
27374 @opindex mclzero
27375 @need 200
27376 @itemx -mpku
27377 @opindex mpku
27378 @need 200
27379 @itemx -mavx512vbmi2
27380 @opindex mavx512vbmi2
27381 @need 200
27382 @itemx -mgfni
27383 @opindex mgfni
27384 @need 200
27385 @itemx -mvaes
27386 @opindex mvaes
27387 @need 200
27388 @itemx -mwaitpkg
27389 @opindex -mwaitpkg
27390 @need 200
27391 @itemx -mvpclmulqdq
27392 @opindex mvpclmulqdq
27393 @need 200
27394 @itemx -mavx512bitalg
27395 @opindex mavx512bitalg
27396 @need 200
27397 @itemx -mmovdiri
27398 @opindex mmovdiri
27399 @need 200
27400 @itemx -mmovdir64b
27401 @opindex mmovdir64b
27402 @need 200
27403 @itemx -mavx512vpopcntdq
27404 @opindex mavx512vpopcntdq
27405 @need 200
27406 @itemx -mcldemote
27407 @opindex mcldemote
27408 These switches enable the use of instructions in the MMX, SSE,
27409 SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD,
27410 SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM,
27411 AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, BMI, BMI2, VAES, WAITPKG,
27412 FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, MPX, MWAITX, PKU, IBT, SHSTK, AVX512VBMI2,
27413 GFNI, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
27414 AVX512VPOPCNTDQ, CLDEMOTE, 3DNow!@: or enhanced 3DNow!@: extended instruction
27415 sets. Each has a corresponding @option{-mno-} option to disable use of these
27416 instructions.
27418 These extensions are also available as built-in functions: see
27419 @ref{x86 Built-in Functions}, for details of the functions enabled and
27420 disabled by these switches.
27422 To generate SSE/SSE2 instructions automatically from floating-point
27423 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
27425 GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
27426 generates new AVX instructions or AVX equivalence for all SSEx instructions
27427 when needed.
27429 These options enable GCC to use these extended instructions in
27430 generated code, even without @option{-mfpmath=sse}.  Applications that
27431 perform run-time CPU detection must compile separate files for each
27432 supported architecture, using the appropriate flags.  In particular,
27433 the file containing the CPU detection code should be compiled without
27434 these options.
27436 @item -mdump-tune-features
27437 @opindex mdump-tune-features
27438 This option instructs GCC to dump the names of the x86 performance 
27439 tuning features and default settings. The names can be used in 
27440 @option{-mtune-ctrl=@var{feature-list}}.
27442 @item -mtune-ctrl=@var{feature-list}
27443 @opindex mtune-ctrl=@var{feature-list}
27444 This option is used to do fine grain control of x86 code generation features.
27445 @var{feature-list} is a comma separated list of @var{feature} names. See also
27446 @option{-mdump-tune-features}. When specified, the @var{feature} is turned
27447 on if it is not preceded with @samp{^}, otherwise, it is turned off. 
27448 @option{-mtune-ctrl=@var{feature-list}} is intended to be used by GCC
27449 developers. Using it may lead to code paths not covered by testing and can
27450 potentially result in compiler ICEs or runtime errors.
27452 @item -mno-default
27453 @opindex mno-default
27454 This option instructs GCC to turn off all tunable features. See also 
27455 @option{-mtune-ctrl=@var{feature-list}} and @option{-mdump-tune-features}.
27457 @item -mcld
27458 @opindex mcld
27459 This option instructs GCC to emit a @code{cld} instruction in the prologue
27460 of functions that use string instructions.  String instructions depend on
27461 the DF flag to select between autoincrement or autodecrement mode.  While the
27462 ABI specifies the DF flag to be cleared on function entry, some operating
27463 systems violate this specification by not clearing the DF flag in their
27464 exception dispatchers.  The exception handler can be invoked with the DF flag
27465 set, which leads to wrong direction mode when string instructions are used.
27466 This option can be enabled by default on 32-bit x86 targets by configuring
27467 GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
27468 instructions can be suppressed with the @option{-mno-cld} compiler option
27469 in this case.
27471 @item -mvzeroupper
27472 @opindex mvzeroupper
27473 This option instructs GCC to emit a @code{vzeroupper} instruction
27474 before a transfer of control flow out of the function to minimize
27475 the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
27476 intrinsics.
27478 @item -mprefer-avx128
27479 @opindex mprefer-avx128
27480 This option instructs GCC to use 128-bit AVX instructions instead of
27481 256-bit AVX instructions in the auto-vectorizer.
27483 @item -mprefer-vector-width=@var{opt}
27484 @opindex mprefer-vector-width
27485 This option instructs GCC to use @var{opt}-bit vector width in instructions
27486 instead of default on the selected platform.
27488 @table @samp
27489 @item none
27490 No extra limitations applied to GCC other than defined by the selected platform.
27492 @item 128
27493 Prefer 128-bit vector width for instructions.
27495 @item 256
27496 Prefer 256-bit vector width for instructions.
27498 @item 512
27499 Prefer 512-bit vector width for instructions.
27500 @end table
27502 @item -mcx16
27503 @opindex mcx16
27504 This option enables GCC to generate @code{CMPXCHG16B} instructions in 64-bit
27505 code to implement compare-and-exchange operations on 16-byte aligned 128-bit
27506 objects.  This is useful for atomic updates of data structures exceeding one
27507 machine word in size.  The compiler uses this instruction to implement
27508 @ref{__sync Builtins}.  However, for @ref{__atomic Builtins} operating on
27509 128-bit integers, a library call is always used.
27511 @item -msahf
27512 @opindex msahf
27513 This option enables generation of @code{SAHF} instructions in 64-bit code.
27514 Early Intel Pentium 4 CPUs with Intel 64 support,
27515 prior to the introduction of Pentium 4 G1 step in December 2005,
27516 lacked the @code{LAHF} and @code{SAHF} instructions
27517 which are supported by AMD64.
27518 These are load and store instructions, respectively, for certain status flags.
27519 In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
27520 @code{drem}, and @code{remainder} built-in functions;
27521 see @ref{Other Builtins} for details.
27523 @item -mmovbe
27524 @opindex mmovbe
27525 This option enables use of the @code{movbe} instruction to implement
27526 @code{__builtin_bswap32} and @code{__builtin_bswap64}.
27528 @item -mshstk
27529 @opindex mshstk
27530 The @option{-mshstk} option enables shadow stack built-in functions
27531 from x86 Control-flow Enforcement Technology (CET).
27533 @item -mcrc32
27534 @opindex mcrc32
27535 This option enables built-in functions @code{__builtin_ia32_crc32qi},
27536 @code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
27537 @code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.
27539 @item -mrecip
27540 @opindex mrecip
27541 This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
27542 (and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
27543 with an additional Newton-Raphson step
27544 to increase precision instead of @code{DIVSS} and @code{SQRTSS}
27545 (and their vectorized
27546 variants) for single-precision floating-point arguments.  These instructions
27547 are generated only when @option{-funsafe-math-optimizations} is enabled
27548 together with @option{-ffinite-math-only} and @option{-fno-trapping-math}.
27549 Note that while the throughput of the sequence is higher than the throughput
27550 of the non-reciprocal instruction, the precision of the sequence can be
27551 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
27553 Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
27554 (or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
27555 combination), and doesn't need @option{-mrecip}.
27557 Also note that GCC emits the above sequence with additional Newton-Raphson step
27558 for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
27559 already with @option{-ffast-math} (or the above option combination), and
27560 doesn't need @option{-mrecip}.
27562 @item -mrecip=@var{opt}
27563 @opindex mrecip=opt
27564 This option controls which reciprocal estimate instructions
27565 may be used.  @var{opt} is a comma-separated list of options, which may
27566 be preceded by a @samp{!} to invert the option:
27568 @table @samp
27569 @item all
27570 Enable all estimate instructions.
27572 @item default
27573 Enable the default instructions, equivalent to @option{-mrecip}.
27575 @item none
27576 Disable all estimate instructions, equivalent to @option{-mno-recip}.
27578 @item div
27579 Enable the approximation for scalar division.
27581 @item vec-div
27582 Enable the approximation for vectorized division.
27584 @item sqrt
27585 Enable the approximation for scalar square root.
27587 @item vec-sqrt
27588 Enable the approximation for vectorized square root.
27589 @end table
27591 So, for example, @option{-mrecip=all,!sqrt} enables
27592 all of the reciprocal approximations, except for square root.
27594 @item -mveclibabi=@var{type}
27595 @opindex mveclibabi
27596 Specifies the ABI type to use for vectorizing intrinsics using an
27597 external library.  Supported values for @var{type} are @samp{svml} 
27598 for the Intel short
27599 vector math library and @samp{acml} for the AMD math core library.
27600 To use this option, both @option{-ftree-vectorize} and
27601 @option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML 
27602 ABI-compatible library must be specified at link time.
27604 GCC currently emits calls to @code{vmldExp2},
27605 @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
27606 @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
27607 @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
27608 @code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
27609 @code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
27610 @code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
27611 @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
27612 @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
27613 @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
27614 function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin},
27615 @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
27616 @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
27617 @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
27618 @code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type
27619 when @option{-mveclibabi=acml} is used.  
27621 @item -mabi=@var{name}
27622 @opindex mabi
27623 Generate code for the specified calling convention.  Permissible values
27624 are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
27625 @samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
27626 ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
27627 You can control this behavior for specific functions by
27628 using the function attributes @code{ms_abi} and @code{sysv_abi}.
27629 @xref{Function Attributes}.
27631 @item -mforce-indirect-call
27632 @opindex mforce-indirect-call
27633 Force all calls to functions to be indirect. This is useful
27634 when using Intel Processor Trace where it generates more precise timing
27635 information for function calls.
27637 @item -mcall-ms2sysv-xlogues
27638 @opindex mcall-ms2sysv-xlogues
27639 @opindex mno-call-ms2sysv-xlogues
27640 Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
27641 System V ABI function must consider RSI, RDI and XMM6-15 as clobbered.  By
27642 default, the code for saving and restoring these registers is emitted inline,
27643 resulting in fairly lengthy prologues and epilogues.  Using
27644 @option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
27645 use stubs in the static portion of libgcc to perform these saves and restores,
27646 thus reducing function size at the cost of a few extra instructions.
27648 @item -mtls-dialect=@var{type}
27649 @opindex mtls-dialect
27650 Generate code to access thread-local storage using the @samp{gnu} or
27651 @samp{gnu2} conventions.  @samp{gnu} is the conservative default;
27652 @samp{gnu2} is more efficient, but it may add compile- and run-time
27653 requirements that cannot be satisfied on all systems.
27655 @item -mpush-args
27656 @itemx -mno-push-args
27657 @opindex mpush-args
27658 @opindex mno-push-args
27659 Use PUSH operations to store outgoing parameters.  This method is shorter
27660 and usually equally fast as method using SUB/MOV operations and is enabled
27661 by default.  In some cases disabling it may improve performance because of
27662 improved scheduling and reduced dependencies.
27664 @item -maccumulate-outgoing-args
27665 @opindex maccumulate-outgoing-args
27666 If enabled, the maximum amount of space required for outgoing arguments is
27667 computed in the function prologue.  This is faster on most modern CPUs
27668 because of reduced dependencies, improved scheduling and reduced stack usage
27669 when the preferred stack boundary is not equal to 2.  The drawback is a notable
27670 increase in code size.  This switch implies @option{-mno-push-args}.
27672 @item -mthreads
27673 @opindex mthreads
27674 Support thread-safe exception handling on MinGW.  Programs that rely
27675 on thread-safe exception handling must compile and link all code with the
27676 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
27677 @option{-D_MT}; when linking, it links in a special thread helper library
27678 @option{-lmingwthrd} which cleans up per-thread exception-handling data.
27680 @item -mms-bitfields
27681 @itemx -mno-ms-bitfields
27682 @opindex mms-bitfields
27683 @opindex mno-ms-bitfields
27685 Enable/disable bit-field layout compatible with the native Microsoft
27686 Windows compiler.  
27688 If @code{packed} is used on a structure, or if bit-fields are used,
27689 it may be that the Microsoft ABI lays out the structure differently
27690 than the way GCC normally does.  Particularly when moving packed
27691 data between functions compiled with GCC and the native Microsoft compiler
27692 (either via function call or as data in a file), it may be necessary to access
27693 either format.
27695 This option is enabled by default for Microsoft Windows
27696 targets.  This behavior can also be controlled locally by use of variable
27697 or type attributes.  For more information, see @ref{x86 Variable Attributes}
27698 and @ref{x86 Type Attributes}.
27700 The Microsoft structure layout algorithm is fairly simple with the exception
27701 of the bit-field packing.  
27702 The padding and alignment of members of structures and whether a bit-field 
27703 can straddle a storage-unit boundary are determine by these rules:
27705 @enumerate
27706 @item Structure members are stored sequentially in the order in which they are
27707 declared: the first member has the lowest memory address and the last member
27708 the highest.
27710 @item Every data object has an alignment requirement.  The alignment requirement
27711 for all data except structures, unions, and arrays is either the size of the
27712 object or the current packing size (specified with either the
27713 @code{aligned} attribute or the @code{pack} pragma),
27714 whichever is less.  For structures, unions, and arrays,
27715 the alignment requirement is the largest alignment requirement of its members.
27716 Every object is allocated an offset so that:
27718 @smallexample
27719 offset % alignment_requirement == 0
27720 @end smallexample
27722 @item Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation
27723 unit if the integral types are the same size and if the next bit-field fits
27724 into the current allocation unit without crossing the boundary imposed by the
27725 common alignment requirements of the bit-fields.
27726 @end enumerate
27728 MSVC interprets zero-length bit-fields in the following ways:
27730 @enumerate
27731 @item If a zero-length bit-field is inserted between two bit-fields that
27732 are normally coalesced, the bit-fields are not coalesced.
27734 For example:
27736 @smallexample
27737 struct
27738  @{
27739    unsigned long bf_1 : 12;
27740    unsigned long : 0;
27741    unsigned long bf_2 : 12;
27742  @} t1;
27743 @end smallexample
27745 @noindent
27746 The size of @code{t1} is 8 bytes with the zero-length bit-field.  If the
27747 zero-length bit-field were removed, @code{t1}'s size would be 4 bytes.
27749 @item If a zero-length bit-field is inserted after a bit-field, @code{foo}, and the
27750 alignment of the zero-length bit-field is greater than the member that follows it,
27751 @code{bar}, @code{bar} is aligned as the type of the zero-length bit-field.
27753 For example:
27755 @smallexample
27756 struct
27757  @{
27758    char foo : 4;
27759    short : 0;
27760    char bar;
27761  @} t2;
27763 struct
27764  @{
27765    char foo : 4;
27766    short : 0;
27767    double bar;
27768  @} t3;
27769 @end smallexample
27771 @noindent
27772 For @code{t2}, @code{bar} is placed at offset 2, rather than offset 1.
27773 Accordingly, the size of @code{t2} is 4.  For @code{t3}, the zero-length
27774 bit-field does not affect the alignment of @code{bar} or, as a result, the size
27775 of the structure.
27777 Taking this into account, it is important to note the following:
27779 @enumerate
27780 @item If a zero-length bit-field follows a normal bit-field, the type of the
27781 zero-length bit-field may affect the alignment of the structure as whole. For
27782 example, @code{t2} has a size of 4 bytes, since the zero-length bit-field follows a
27783 normal bit-field, and is of type short.
27785 @item Even if a zero-length bit-field is not followed by a normal bit-field, it may
27786 still affect the alignment of the structure:
27788 @smallexample
27789 struct
27790  @{
27791    char foo : 6;
27792    long : 0;
27793  @} t4;
27794 @end smallexample
27796 @noindent
27797 Here, @code{t4} takes up 4 bytes.
27798 @end enumerate
27800 @item Zero-length bit-fields following non-bit-field members are ignored:
27802 @smallexample
27803 struct
27804  @{
27805    char foo;
27806    long : 0;
27807    char bar;
27808  @} t5;
27809 @end smallexample
27811 @noindent
27812 Here, @code{t5} takes up 2 bytes.
27813 @end enumerate
27816 @item -mno-align-stringops
27817 @opindex mno-align-stringops
27818 Do not align the destination of inlined string operations.  This switch reduces
27819 code size and improves performance in case the destination is already aligned,
27820 but GCC doesn't know about it.
27822 @item -minline-all-stringops
27823 @opindex minline-all-stringops
27824 By default GCC inlines string operations only when the destination is 
27825 known to be aligned to least a 4-byte boundary.  
27826 This enables more inlining and increases code
27827 size, but may improve performance of code that depends on fast
27828 @code{memcpy}, @code{strlen},
27829 and @code{memset} for short lengths.
27831 @item -minline-stringops-dynamically
27832 @opindex minline-stringops-dynamically
27833 For string operations of unknown size, use run-time checks with
27834 inline code for small blocks and a library call for large blocks.
27836 @item -mstringop-strategy=@var{alg}
27837 @opindex mstringop-strategy=@var{alg}
27838 Override the internal decision heuristic for the particular algorithm to use
27839 for inlining string operations.  The allowed values for @var{alg} are:
27841 @table @samp
27842 @item rep_byte
27843 @itemx rep_4byte
27844 @itemx rep_8byte
27845 Expand using i386 @code{rep} prefix of the specified size.
27847 @item byte_loop
27848 @itemx loop
27849 @itemx unrolled_loop
27850 Expand into an inline loop.
27852 @item libcall
27853 Always use a library call.
27854 @end table
27856 @item -mmemcpy-strategy=@var{strategy}
27857 @opindex mmemcpy-strategy=@var{strategy}
27858 Override the internal decision heuristic to decide if @code{__builtin_memcpy}
27859 should be inlined and what inline algorithm to use when the expected size
27860 of the copy operation is known. @var{strategy} 
27861 is a comma-separated list of @var{alg}:@var{max_size}:@var{dest_align} triplets. 
27862 @var{alg} is specified in @option{-mstringop-strategy}, @var{max_size} specifies
27863 the max byte size with which inline algorithm @var{alg} is allowed.  For the last
27864 triplet, the @var{max_size} must be @code{-1}. The @var{max_size} of the triplets
27865 in the list must be specified in increasing order.  The minimal byte size for 
27866 @var{alg} is @code{0} for the first triplet and @code{@var{max_size} + 1} of the 
27867 preceding range.
27869 @item -mmemset-strategy=@var{strategy}
27870 @opindex mmemset-strategy=@var{strategy}
27871 The option is similar to @option{-mmemcpy-strategy=} except that it is to control
27872 @code{__builtin_memset} expansion.
27874 @item -momit-leaf-frame-pointer
27875 @opindex momit-leaf-frame-pointer
27876 Don't keep the frame pointer in a register for leaf functions.  This
27877 avoids the instructions to save, set up, and restore frame pointers and
27878 makes an extra register available in leaf functions.  The option
27879 @option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
27880 which might make debugging harder.
27882 @item -mtls-direct-seg-refs
27883 @itemx -mno-tls-direct-seg-refs
27884 @opindex mtls-direct-seg-refs
27885 Controls whether TLS variables may be accessed with offsets from the
27886 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
27887 or whether the thread base pointer must be added.  Whether or not this
27888 is valid depends on the operating system, and whether it maps the
27889 segment to cover the entire TLS area.
27891 For systems that use the GNU C Library, the default is on.
27893 @item -msse2avx
27894 @itemx -mno-sse2avx
27895 @opindex msse2avx
27896 Specify that the assembler should encode SSE instructions with VEX
27897 prefix.  The option @option{-mavx} turns this on by default.
27899 @item -mfentry
27900 @itemx -mno-fentry
27901 @opindex mfentry
27902 If profiling is active (@option{-pg}), put the profiling
27903 counter call before the prologue.
27904 Note: On x86 architectures the attribute @code{ms_hook_prologue}
27905 isn't possible at the moment for @option{-mfentry} and @option{-pg}.
27907 @item -mrecord-mcount
27908 @itemx -mno-record-mcount
27909 @opindex mrecord-mcount
27910 If profiling is active (@option{-pg}), generate a __mcount_loc section
27911 that contains pointers to each profiling call. This is useful for
27912 automatically patching and out calls.
27914 @item -mnop-mcount
27915 @itemx -mno-nop-mcount
27916 @opindex mnop-mcount
27917 If profiling is active (@option{-pg}), generate the calls to
27918 the profiling functions as NOPs. This is useful when they
27919 should be patched in later dynamically. This is likely only
27920 useful together with @option{-mrecord-mcount}.
27922 @item -mskip-rax-setup
27923 @itemx -mno-skip-rax-setup
27924 @opindex mskip-rax-setup
27925 When generating code for the x86-64 architecture with SSE extensions
27926 disabled, @option{-mskip-rax-setup} can be used to skip setting up RAX
27927 register when there are no variable arguments passed in vector registers.
27929 @strong{Warning:} Since RAX register is used to avoid unnecessarily
27930 saving vector registers on stack when passing variable arguments, the
27931 impacts of this option are callees may waste some stack space,
27932 misbehave or jump to a random location.  GCC 4.4 or newer don't have
27933 those issues, regardless the RAX register value.
27935 @item -m8bit-idiv
27936 @itemx -mno-8bit-idiv
27937 @opindex m8bit-idiv
27938 On some processors, like Intel Atom, 8-bit unsigned integer divide is
27939 much faster than 32-bit/64-bit integer divide.  This option generates a
27940 run-time check.  If both dividend and divisor are within range of 0
27941 to 255, 8-bit unsigned integer divide is used instead of
27942 32-bit/64-bit integer divide.
27944 @item -mavx256-split-unaligned-load
27945 @itemx -mavx256-split-unaligned-store
27946 @opindex mavx256-split-unaligned-load
27947 @opindex mavx256-split-unaligned-store
27948 Split 32-byte AVX unaligned load and store.
27950 @item -mstack-protector-guard=@var{guard}
27951 @itemx -mstack-protector-guard-reg=@var{reg}
27952 @itemx -mstack-protector-guard-offset=@var{offset}
27953 @opindex mstack-protector-guard
27954 @opindex mstack-protector-guard-reg
27955 @opindex mstack-protector-guard-offset
27956 Generate stack protection code using canary at @var{guard}.  Supported
27957 locations are @samp{global} for global canary or @samp{tls} for per-thread
27958 canary in the TLS block (the default).  This option has effect only when
27959 @option{-fstack-protector} or @option{-fstack-protector-all} is specified.
27961 With the latter choice the options
27962 @option{-mstack-protector-guard-reg=@var{reg}} and
27963 @option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
27964 which segment register (@code{%fs} or @code{%gs}) to use as base register
27965 for reading the canary, and from what offset from that base register.
27966 The default for those is as specified in the relevant ABI.
27968 @item -mmitigate-rop
27969 @opindex mmitigate-rop
27970 Try to avoid generating code sequences that contain unintended return
27971 opcodes, to mitigate against certain forms of attack. At the moment,
27972 this option is limited in what it can do and should not be relied
27973 on to provide serious protection.
27975 @item -mgeneral-regs-only
27976 @opindex mgeneral-regs-only
27977 Generate code that uses only the general-purpose registers.  This
27978 prevents the compiler from using floating-point, vector, mask and bound
27979 registers.
27981 @item -mindirect-branch=@var{choice}
27982 @opindex -mindirect-branch
27983 Convert indirect call and jump with @var{choice}.  The default is
27984 @samp{keep}, which keeps indirect call and jump unmodified.
27985 @samp{thunk} converts indirect call and jump to call and return thunk.
27986 @samp{thunk-inline} converts indirect call and jump to inlined call
27987 and return thunk.  @samp{thunk-extern} converts indirect call and jump
27988 to external call and return thunk provided in a separate object file.
27989 You can control this behavior for a specific function by using the
27990 function attribute @code{indirect_branch}.  @xref{Function Attributes}.
27992 Note that @option{-mcmodel=large} is incompatible with
27993 @option{-mindirect-branch=thunk} and
27994 @option{-mindirect-branch=thunk-extern} since the thunk function may
27995 not be reachable in the large code model.
27997 Note that @option{-mindirect-branch=thunk-extern} is incompatible with
27998 @option{-fcf-protection=branch} and @option{-fcheck-pointer-bounds}
27999 since the external thunk can not be modified to disable control-flow
28000 check.
28002 @item -mfunction-return=@var{choice}
28003 @opindex -mfunction-return
28004 Convert function return with @var{choice}.  The default is @samp{keep},
28005 which keeps function return unmodified.  @samp{thunk} converts function
28006 return to call and return thunk.  @samp{thunk-inline} converts function
28007 return to inlined call and return thunk.  @samp{thunk-extern} converts
28008 function return to external call and return thunk provided in a separate
28009 object file.  You can control this behavior for a specific function by
28010 using the function attribute @code{function_return}.
28011 @xref{Function Attributes}.
28013 Note that @option{-mcmodel=large} is incompatible with
28014 @option{-mfunction-return=thunk} and
28015 @option{-mfunction-return=thunk-extern} since the thunk function may
28016 not be reachable in the large code model.
28019 @item -mindirect-branch-register
28020 @opindex -mindirect-branch-register
28021 Force indirect call and jump via register.
28023 @end table
28025 These @samp{-m} switches are supported in addition to the above
28026 on x86-64 processors in 64-bit environments.
28028 @table @gcctabopt
28029 @item -m32
28030 @itemx -m64
28031 @itemx -mx32
28032 @itemx -m16
28033 @itemx -miamcu
28034 @opindex m32
28035 @opindex m64
28036 @opindex mx32
28037 @opindex m16
28038 @opindex miamcu
28039 Generate code for a 16-bit, 32-bit or 64-bit environment.
28040 The @option{-m32} option sets @code{int}, @code{long}, and pointer types
28041 to 32 bits, and
28042 generates code that runs on any i386 system.
28044 The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
28045 types to 64 bits, and generates code for the x86-64 architecture.
28046 For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
28047 and @option{-mdynamic-no-pic} options.
28049 The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
28050 to 32 bits, and
28051 generates code for the x86-64 architecture.
28053 The @option{-m16} option is the same as @option{-m32}, except for that
28054 it outputs the @code{.code16gcc} assembly directive at the beginning of
28055 the assembly output so that the binary can run in 16-bit mode.
28057 The @option{-miamcu} option generates code which conforms to Intel MCU
28058 psABI.  It requires the @option{-m32} option to be turned on.
28060 @item -mno-red-zone
28061 @opindex mno-red-zone
28062 Do not use a so-called ``red zone'' for x86-64 code.  The red zone is mandated
28063 by the x86-64 ABI; it is a 128-byte area beyond the location of the
28064 stack pointer that is not modified by signal or interrupt handlers
28065 and therefore can be used for temporary data without adjusting the stack
28066 pointer.  The flag @option{-mno-red-zone} disables this red zone.
28068 @item -mcmodel=small
28069 @opindex mcmodel=small
28070 Generate code for the small code model: the program and its symbols must
28071 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
28072 Programs can be statically or dynamically linked.  This is the default
28073 code model.
28075 @item -mcmodel=kernel
28076 @opindex mcmodel=kernel
28077 Generate code for the kernel code model.  The kernel runs in the
28078 negative 2 GB of the address space.
28079 This model has to be used for Linux kernel code.
28081 @item -mcmodel=medium
28082 @opindex mcmodel=medium
28083 Generate code for the medium model: the program is linked in the lower 2
28084 GB of the address space.  Small symbols are also placed there.  Symbols
28085 with sizes larger than @option{-mlarge-data-threshold} are put into
28086 large data or BSS sections and can be located above 2GB.  Programs can
28087 be statically or dynamically linked.
28089 @item -mcmodel=large
28090 @opindex mcmodel=large
28091 Generate code for the large model.  This model makes no assumptions
28092 about addresses and sizes of sections.
28094 @item -maddress-mode=long
28095 @opindex maddress-mode=long
28096 Generate code for long address mode.  This is only supported for 64-bit
28097 and x32 environments.  It is the default address mode for 64-bit
28098 environments.
28100 @item -maddress-mode=short
28101 @opindex maddress-mode=short
28102 Generate code for short address mode.  This is only supported for 32-bit
28103 and x32 environments.  It is the default address mode for 32-bit and
28104 x32 environments.
28105 @end table
28107 @node x86 Windows Options
28108 @subsection x86 Windows Options
28109 @cindex x86 Windows Options
28110 @cindex Windows Options for x86
28112 These additional options are available for Microsoft Windows targets:
28114 @table @gcctabopt
28115 @item -mconsole
28116 @opindex mconsole
28117 This option
28118 specifies that a console application is to be generated, by
28119 instructing the linker to set the PE header subsystem type
28120 required for console applications.
28121 This option is available for Cygwin and MinGW targets and is
28122 enabled by default on those targets.
28124 @item -mdll
28125 @opindex mdll
28126 This option is available for Cygwin and MinGW targets.  It
28127 specifies that a DLL---a dynamic link library---is to be
28128 generated, enabling the selection of the required runtime
28129 startup object and entry point.
28131 @item -mnop-fun-dllimport
28132 @opindex mnop-fun-dllimport
28133 This option is available for Cygwin and MinGW targets.  It
28134 specifies that the @code{dllimport} attribute should be ignored.
28136 @item -mthread
28137 @opindex mthread
28138 This option is available for MinGW targets. It specifies
28139 that MinGW-specific thread support is to be used.
28141 @item -municode
28142 @opindex municode
28143 This option is available for MinGW-w64 targets.  It causes
28144 the @code{UNICODE} preprocessor macro to be predefined, and
28145 chooses Unicode-capable runtime startup code.
28147 @item -mwin32
28148 @opindex mwin32
28149 This option is available for Cygwin and MinGW targets.  It
28150 specifies that the typical Microsoft Windows predefined macros are to
28151 be set in the pre-processor, but does not influence the choice
28152 of runtime library/startup code.
28154 @item -mwindows
28155 @opindex mwindows
28156 This option is available for Cygwin and MinGW targets.  It
28157 specifies that a GUI application is to be generated by
28158 instructing the linker to set the PE header subsystem type
28159 appropriately.
28161 @item -fno-set-stack-executable
28162 @opindex fno-set-stack-executable
28163 This option is available for MinGW targets. It specifies that
28164 the executable flag for the stack used by nested functions isn't
28165 set. This is necessary for binaries running in kernel mode of
28166 Microsoft Windows, as there the User32 API, which is used to set executable
28167 privileges, isn't available.
28169 @item -fwritable-relocated-rdata
28170 @opindex fno-writable-relocated-rdata
28171 This option is available for MinGW and Cygwin targets.  It specifies
28172 that relocated-data in read-only section is put into the @code{.data}
28173 section.  This is a necessary for older runtimes not supporting
28174 modification of @code{.rdata} sections for pseudo-relocation.
28176 @item -mpe-aligned-commons
28177 @opindex mpe-aligned-commons
28178 This option is available for Cygwin and MinGW targets.  It
28179 specifies that the GNU extension to the PE file format that
28180 permits the correct alignment of COMMON variables should be
28181 used when generating code.  It is enabled by default if
28182 GCC detects that the target assembler found during configuration
28183 supports the feature.
28184 @end table
28186 See also under @ref{x86 Options} for standard options.
28188 @node Xstormy16 Options
28189 @subsection Xstormy16 Options
28190 @cindex Xstormy16 Options
28192 These options are defined for Xstormy16:
28194 @table @gcctabopt
28195 @item -msim
28196 @opindex msim
28197 Choose startup files and linker script suitable for the simulator.
28198 @end table
28200 @node Xtensa Options
28201 @subsection Xtensa Options
28202 @cindex Xtensa Options
28204 These options are supported for Xtensa targets:
28206 @table @gcctabopt
28207 @item -mconst16
28208 @itemx -mno-const16
28209 @opindex mconst16
28210 @opindex mno-const16
28211 Enable or disable use of @code{CONST16} instructions for loading
28212 constant values.  The @code{CONST16} instruction is currently not a
28213 standard option from Tensilica.  When enabled, @code{CONST16}
28214 instructions are always used in place of the standard @code{L32R}
28215 instructions.  The use of @code{CONST16} is enabled by default only if
28216 the @code{L32R} instruction is not available.
28218 @item -mfused-madd
28219 @itemx -mno-fused-madd
28220 @opindex mfused-madd
28221 @opindex mno-fused-madd
28222 Enable or disable use of fused multiply/add and multiply/subtract
28223 instructions in the floating-point option.  This has no effect if the
28224 floating-point option is not also enabled.  Disabling fused multiply/add
28225 and multiply/subtract instructions forces the compiler to use separate
28226 instructions for the multiply and add/subtract operations.  This may be
28227 desirable in some cases where strict IEEE 754-compliant results are
28228 required: the fused multiply add/subtract instructions do not round the
28229 intermediate result, thereby producing results with @emph{more} bits of
28230 precision than specified by the IEEE standard.  Disabling fused multiply
28231 add/subtract instructions also ensures that the program output is not
28232 sensitive to the compiler's ability to combine multiply and add/subtract
28233 operations.
28235 @item -mserialize-volatile
28236 @itemx -mno-serialize-volatile
28237 @opindex mserialize-volatile
28238 @opindex mno-serialize-volatile
28239 When this option is enabled, GCC inserts @code{MEMW} instructions before
28240 @code{volatile} memory references to guarantee sequential consistency.
28241 The default is @option{-mserialize-volatile}.  Use
28242 @option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
28244 @item -mforce-no-pic
28245 @opindex mforce-no-pic
28246 For targets, like GNU/Linux, where all user-mode Xtensa code must be
28247 position-independent code (PIC), this option disables PIC for compiling
28248 kernel code.
28250 @item -mtext-section-literals
28251 @itemx -mno-text-section-literals
28252 @opindex mtext-section-literals
28253 @opindex mno-text-section-literals
28254 These options control the treatment of literal pools.  The default is
28255 @option{-mno-text-section-literals}, which places literals in a separate
28256 section in the output file.  This allows the literal pool to be placed
28257 in a data RAM/ROM, and it also allows the linker to combine literal
28258 pools from separate object files to remove redundant literals and
28259 improve code size.  With @option{-mtext-section-literals}, the literals
28260 are interspersed in the text section in order to keep them as close as
28261 possible to their references.  This may be necessary for large assembly
28262 files.  Literals for each function are placed right before that function.
28264 @item -mauto-litpools
28265 @itemx -mno-auto-litpools
28266 @opindex mauto-litpools
28267 @opindex mno-auto-litpools
28268 These options control the treatment of literal pools.  The default is
28269 @option{-mno-auto-litpools}, which places literals in a separate
28270 section in the output file unless @option{-mtext-section-literals} is
28271 used.  With @option{-mauto-litpools} the literals are interspersed in
28272 the text section by the assembler.  Compiler does not produce explicit
28273 @code{.literal} directives and loads literals into registers with
28274 @code{MOVI} instructions instead of @code{L32R} to let the assembler
28275 do relaxation and place literals as necessary.  This option allows
28276 assembler to create several literal pools per function and assemble
28277 very big functions, which may not be possible with
28278 @option{-mtext-section-literals}.
28280 @item -mtarget-align
28281 @itemx -mno-target-align
28282 @opindex mtarget-align
28283 @opindex mno-target-align
28284 When this option is enabled, GCC instructs the assembler to
28285 automatically align instructions to reduce branch penalties at the
28286 expense of some code density.  The assembler attempts to widen density
28287 instructions to align branch targets and the instructions following call
28288 instructions.  If there are not enough preceding safe density
28289 instructions to align a target, no widening is performed.  The
28290 default is @option{-mtarget-align}.  These options do not affect the
28291 treatment of auto-aligned instructions like @code{LOOP}, which the
28292 assembler always aligns, either by widening density instructions or
28293 by inserting NOP instructions.
28295 @item -mlongcalls
28296 @itemx -mno-longcalls
28297 @opindex mlongcalls
28298 @opindex mno-longcalls
28299 When this option is enabled, GCC instructs the assembler to translate
28300 direct calls to indirect calls unless it can determine that the target
28301 of a direct call is in the range allowed by the call instruction.  This
28302 translation typically occurs for calls to functions in other source
28303 files.  Specifically, the assembler translates a direct @code{CALL}
28304 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
28305 The default is @option{-mno-longcalls}.  This option should be used in
28306 programs where the call target can potentially be out of range.  This
28307 option is implemented in the assembler, not the compiler, so the
28308 assembly code generated by GCC still shows direct call
28309 instructions---look at the disassembled object code to see the actual
28310 instructions.  Note that the assembler uses an indirect call for
28311 every cross-file call, not just those that really are out of range.
28312 @end table
28314 @node zSeries Options
28315 @subsection zSeries Options
28316 @cindex zSeries options
28318 These are listed under @xref{S/390 and zSeries Options}.
28321 @c man end
28323 @node Spec Files
28324 @section Specifying Subprocesses and the Switches to Pass to Them
28325 @cindex Spec Files
28327 @command{gcc} is a driver program.  It performs its job by invoking a
28328 sequence of other programs to do the work of compiling, assembling and
28329 linking.  GCC interprets its command-line parameters and uses these to
28330 deduce which programs it should invoke, and which command-line options
28331 it ought to place on their command lines.  This behavior is controlled
28332 by @dfn{spec strings}.  In most cases there is one spec string for each
28333 program that GCC can invoke, but a few programs have multiple spec
28334 strings to control their behavior.  The spec strings built into GCC can
28335 be overridden by using the @option{-specs=} command-line switch to specify
28336 a spec file.
28338 @dfn{Spec files} are plain-text files that are used to construct spec
28339 strings.  They consist of a sequence of directives separated by blank
28340 lines.  The type of directive is determined by the first non-whitespace
28341 character on the line, which can be one of the following:
28343 @table @code
28344 @item %@var{command}
28345 Issues a @var{command} to the spec file processor.  The commands that can
28346 appear here are:
28348 @table @code
28349 @item %include <@var{file}>
28350 @cindex @code{%include}
28351 Search for @var{file} and insert its text at the current point in the
28352 specs file.
28354 @item %include_noerr <@var{file}>
28355 @cindex @code{%include_noerr}
28356 Just like @samp{%include}, but do not generate an error message if the include
28357 file cannot be found.
28359 @item %rename @var{old_name} @var{new_name}
28360 @cindex @code{%rename}
28361 Rename the spec string @var{old_name} to @var{new_name}.
28363 @end table
28365 @item *[@var{spec_name}]:
28366 This tells the compiler to create, override or delete the named spec
28367 string.  All lines after this directive up to the next directive or
28368 blank line are considered to be the text for the spec string.  If this
28369 results in an empty string then the spec is deleted.  (Or, if the
28370 spec did not exist, then nothing happens.)  Otherwise, if the spec
28371 does not currently exist a new spec is created.  If the spec does
28372 exist then its contents are overridden by the text of this
28373 directive, unless the first character of that text is the @samp{+}
28374 character, in which case the text is appended to the spec.
28376 @item [@var{suffix}]:
28377 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
28378 and up to the next directive or blank line are considered to make up the
28379 spec string for the indicated suffix.  When the compiler encounters an
28380 input file with the named suffix, it processes the spec string in
28381 order to work out how to compile that file.  For example:
28383 @smallexample
28384 .ZZ:
28385 z-compile -input %i
28386 @end smallexample
28388 This says that any input file whose name ends in @samp{.ZZ} should be
28389 passed to the program @samp{z-compile}, which should be invoked with the
28390 command-line switch @option{-input} and with the result of performing the
28391 @samp{%i} substitution.  (See below.)
28393 As an alternative to providing a spec string, the text following a
28394 suffix directive can be one of the following:
28396 @table @code
28397 @item @@@var{language}
28398 This says that the suffix is an alias for a known @var{language}.  This is
28399 similar to using the @option{-x} command-line switch to GCC to specify a
28400 language explicitly.  For example:
28402 @smallexample
28403 .ZZ:
28404 @@c++
28405 @end smallexample
28407 Says that .ZZ files are, in fact, C++ source files.
28409 @item #@var{name}
28410 This causes an error messages saying:
28412 @smallexample
28413 @var{name} compiler not installed on this system.
28414 @end smallexample
28415 @end table
28417 GCC already has an extensive list of suffixes built into it.
28418 This directive adds an entry to the end of the list of suffixes, but
28419 since the list is searched from the end backwards, it is effectively
28420 possible to override earlier entries using this technique.
28422 @end table
28424 GCC has the following spec strings built into it.  Spec files can
28425 override these strings or create their own.  Note that individual
28426 targets can also add their own spec strings to this list.
28428 @smallexample
28429 asm          Options to pass to the assembler
28430 asm_final    Options to pass to the assembler post-processor
28431 cpp          Options to pass to the C preprocessor
28432 cc1          Options to pass to the C compiler
28433 cc1plus      Options to pass to the C++ compiler
28434 endfile      Object files to include at the end of the link
28435 link         Options to pass to the linker
28436 lib          Libraries to include on the command line to the linker
28437 libgcc       Decides which GCC support library to pass to the linker
28438 linker       Sets the name of the linker
28439 predefines   Defines to be passed to the C preprocessor
28440 signed_char  Defines to pass to CPP to say whether @code{char} is signed
28441              by default
28442 startfile    Object files to include at the start of the link
28443 @end smallexample
28445 Here is a small example of a spec file:
28447 @smallexample
28448 %rename lib                 old_lib
28450 *lib:
28451 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
28452 @end smallexample
28454 This example renames the spec called @samp{lib} to @samp{old_lib} and
28455 then overrides the previous definition of @samp{lib} with a new one.
28456 The new definition adds in some extra command-line options before
28457 including the text of the old definition.
28459 @dfn{Spec strings} are a list of command-line options to be passed to their
28460 corresponding program.  In addition, the spec strings can contain
28461 @samp{%}-prefixed sequences to substitute variable text or to
28462 conditionally insert text into the command line.  Using these constructs
28463 it is possible to generate quite complex command lines.
28465 Here is a table of all defined @samp{%}-sequences for spec
28466 strings.  Note that spaces are not generated automatically around the
28467 results of expanding these sequences.  Therefore you can concatenate them
28468 together or combine them with constant text in a single argument.
28470 @table @code
28471 @item %%
28472 Substitute one @samp{%} into the program name or argument.
28474 @item %i
28475 Substitute the name of the input file being processed.
28477 @item %b
28478 Substitute the basename of the input file being processed.
28479 This is the substring up to (and not including) the last period
28480 and not including the directory.
28482 @item %B
28483 This is the same as @samp{%b}, but include the file suffix (text after
28484 the last period).
28486 @item %d
28487 Marks the argument containing or following the @samp{%d} as a
28488 temporary file name, so that that file is deleted if GCC exits
28489 successfully.  Unlike @samp{%g}, this contributes no text to the
28490 argument.
28492 @item %g@var{suffix}
28493 Substitute a file name that has suffix @var{suffix} and is chosen
28494 once per compilation, and mark the argument in the same way as
28495 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
28496 name is now chosen in a way that is hard to predict even when previously
28497 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
28498 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
28499 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
28500 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
28501 was simply substituted with a file name chosen once per compilation,
28502 without regard to any appended suffix (which was therefore treated
28503 just like ordinary text), making such attacks more likely to succeed.
28505 @item %u@var{suffix}
28506 Like @samp{%g}, but generates a new temporary file name
28507 each time it appears instead of once per compilation.
28509 @item %U@var{suffix}
28510 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
28511 new one if there is no such last file name.  In the absence of any
28512 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
28513 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
28514 involves the generation of two distinct file names, one
28515 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
28516 simply substituted with a file name chosen for the previous @samp{%u},
28517 without regard to any appended suffix.
28519 @item %j@var{suffix}
28520 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
28521 writable, and if @option{-save-temps} is not used; 
28522 otherwise, substitute the name
28523 of a temporary file, just like @samp{%u}.  This temporary file is not
28524 meant for communication between processes, but rather as a junk
28525 disposal mechanism.
28527 @item %|@var{suffix}
28528 @itemx %m@var{suffix}
28529 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
28530 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
28531 all.  These are the two most common ways to instruct a program that it
28532 should read from standard input or write to standard output.  If you
28533 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
28534 construct: see for example @file{f/lang-specs.h}.
28536 @item %.@var{SUFFIX}
28537 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
28538 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
28539 terminated by the next space or %.
28541 @item %w
28542 Marks the argument containing or following the @samp{%w} as the
28543 designated output file of this compilation.  This puts the argument
28544 into the sequence of arguments that @samp{%o} substitutes.
28546 @item %o
28547 Substitutes the names of all the output files, with spaces
28548 automatically placed around them.  You should write spaces
28549 around the @samp{%o} as well or the results are undefined.
28550 @samp{%o} is for use in the specs for running the linker.
28551 Input files whose names have no recognized suffix are not compiled
28552 at all, but they are included among the output files, so they are
28553 linked.
28555 @item %O
28556 Substitutes the suffix for object files.  Note that this is
28557 handled specially when it immediately follows @samp{%g, %u, or %U},
28558 because of the need for those to form complete file names.  The
28559 handling is such that @samp{%O} is treated exactly as if it had already
28560 been substituted, except that @samp{%g, %u, and %U} do not currently
28561 support additional @var{suffix} characters following @samp{%O} as they do
28562 following, for example, @samp{.o}.
28564 @item %p
28565 Substitutes the standard macro predefinitions for the
28566 current target machine.  Use this when running @command{cpp}.
28568 @item %P
28569 Like @samp{%p}, but puts @samp{__} before and after the name of each
28570 predefined macro, except for macros that start with @samp{__} or with
28571 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
28574 @item %I
28575 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
28576 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
28577 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
28578 and @option{-imultilib} as necessary.
28580 @item %s
28581 Current argument is the name of a library or startup file of some sort.
28582 Search for that file in a standard list of directories and substitute
28583 the full name found.  The current working directory is included in the
28584 list of directories scanned.
28586 @item %T
28587 Current argument is the name of a linker script.  Search for that file
28588 in the current list of directories to scan for libraries. If the file
28589 is located insert a @option{--script} option into the command line
28590 followed by the full path name found.  If the file is not found then
28591 generate an error message.  Note: the current working directory is not
28592 searched.
28594 @item %e@var{str}
28595 Print @var{str} as an error message.  @var{str} is terminated by a newline.
28596 Use this when inconsistent options are detected.
28598 @item %(@var{name})
28599 Substitute the contents of spec string @var{name} at this point.
28601 @item %x@{@var{option}@}
28602 Accumulate an option for @samp{%X}.
28604 @item %X
28605 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
28606 spec string.
28608 @item %Y
28609 Output the accumulated assembler options specified by @option{-Wa}.
28611 @item %Z
28612 Output the accumulated preprocessor options specified by @option{-Wp}.
28614 @item %a
28615 Process the @code{asm} spec.  This is used to compute the
28616 switches to be passed to the assembler.
28618 @item %A
28619 Process the @code{asm_final} spec.  This is a spec string for
28620 passing switches to an assembler post-processor, if such a program is
28621 needed.
28623 @item %l
28624 Process the @code{link} spec.  This is the spec for computing the
28625 command line passed to the linker.  Typically it makes use of the
28626 @samp{%L %G %S %D and %E} sequences.
28628 @item %D
28629 Dump out a @option{-L} option for each directory that GCC believes might
28630 contain startup files.  If the target supports multilibs then the
28631 current multilib directory is prepended to each of these paths.
28633 @item %L
28634 Process the @code{lib} spec.  This is a spec string for deciding which
28635 libraries are included on the command line to the linker.
28637 @item %G
28638 Process the @code{libgcc} spec.  This is a spec string for deciding
28639 which GCC support library is included on the command line to the linker.
28641 @item %S
28642 Process the @code{startfile} spec.  This is a spec for deciding which
28643 object files are the first ones passed to the linker.  Typically
28644 this might be a file named @file{crt0.o}.
28646 @item %E
28647 Process the @code{endfile} spec.  This is a spec string that specifies
28648 the last object files that are passed to the linker.
28650 @item %C
28651 Process the @code{cpp} spec.  This is used to construct the arguments
28652 to be passed to the C preprocessor.
28654 @item %1
28655 Process the @code{cc1} spec.  This is used to construct the options to be
28656 passed to the actual C compiler (@command{cc1}).
28658 @item %2
28659 Process the @code{cc1plus} spec.  This is used to construct the options to be
28660 passed to the actual C++ compiler (@command{cc1plus}).
28662 @item %*
28663 Substitute the variable part of a matched option.  See below.
28664 Note that each comma in the substituted string is replaced by
28665 a single space.
28667 @item %<S
28668 Remove all occurrences of @code{-S} from the command line.  Note---this
28669 command is position dependent.  @samp{%} commands in the spec string
28670 before this one see @code{-S}, @samp{%} commands in the spec string
28671 after this one do not.
28673 @item %:@var{function}(@var{args})
28674 Call the named function @var{function}, passing it @var{args}.
28675 @var{args} is first processed as a nested spec string, then split
28676 into an argument vector in the usual fashion.  The function returns
28677 a string which is processed as if it had appeared literally as part
28678 of the current spec.
28680 The following built-in spec functions are provided:
28682 @table @code
28683 @item @code{getenv}
28684 The @code{getenv} spec function takes two arguments: an environment
28685 variable name and a string.  If the environment variable is not
28686 defined, a fatal error is issued.  Otherwise, the return value is the
28687 value of the environment variable concatenated with the string.  For
28688 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
28690 @smallexample
28691 %:getenv(TOPDIR /include)
28692 @end smallexample
28694 expands to @file{/path/to/top/include}.
28696 @item @code{if-exists}
28697 The @code{if-exists} spec function takes one argument, an absolute
28698 pathname to a file.  If the file exists, @code{if-exists} returns the
28699 pathname.  Here is a small example of its usage:
28701 @smallexample
28702 *startfile:
28703 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
28704 @end smallexample
28706 @item @code{if-exists-else}
28707 The @code{if-exists-else} spec function is similar to the @code{if-exists}
28708 spec function, except that it takes two arguments.  The first argument is
28709 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
28710 returns the pathname.  If it does not exist, it returns the second argument.
28711 This way, @code{if-exists-else} can be used to select one file or another,
28712 based on the existence of the first.  Here is a small example of its usage:
28714 @smallexample
28715 *startfile:
28716 crt0%O%s %:if-exists(crti%O%s) \
28717 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
28718 @end smallexample
28720 @item @code{replace-outfile}
28721 The @code{replace-outfile} spec function takes two arguments.  It looks for the
28722 first argument in the outfiles array and replaces it with the second argument.  Here
28723 is a small example of its usage:
28725 @smallexample
28726 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
28727 @end smallexample
28729 @item @code{remove-outfile}
28730 The @code{remove-outfile} spec function takes one argument.  It looks for the
28731 first argument in the outfiles array and removes it.  Here is a small example
28732 its usage:
28734 @smallexample
28735 %:remove-outfile(-lm)
28736 @end smallexample
28738 @item @code{pass-through-libs}
28739 The @code{pass-through-libs} spec function takes any number of arguments.  It
28740 finds any @option{-l} options and any non-options ending in @file{.a} (which it
28741 assumes are the names of linker input library archive files) and returns a
28742 result containing all the found arguments each prepended by
28743 @option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
28744 intended to be passed to the LTO linker plugin.
28746 @smallexample
28747 %:pass-through-libs(%G %L %G)
28748 @end smallexample
28750 @item @code{print-asm-header}
28751 The @code{print-asm-header} function takes no arguments and simply
28752 prints a banner like:
28754 @smallexample
28755 Assembler options
28756 =================
28758 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
28759 @end smallexample
28761 It is used to separate compiler options from assembler options
28762 in the @option{--target-help} output.
28763 @end table
28765 @item %@{S@}
28766 Substitutes the @code{-S} switch, if that switch is given to GCC@.
28767 If that switch is not specified, this substitutes nothing.  Note that
28768 the leading dash is omitted when specifying this option, and it is
28769 automatically inserted if the substitution is performed.  Thus the spec
28770 string @samp{%@{foo@}} matches the command-line option @option{-foo}
28771 and outputs the command-line option @option{-foo}.
28773 @item %W@{S@}
28774 Like %@{@code{S}@} but mark last argument supplied within as a file to be
28775 deleted on failure.
28777 @item %@{S*@}
28778 Substitutes all the switches specified to GCC whose names start
28779 with @code{-S}, but which also take an argument.  This is used for
28780 switches like @option{-o}, @option{-D}, @option{-I}, etc.
28781 GCC considers @option{-o foo} as being
28782 one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
28783 text, including the space.  Thus two arguments are generated.
28785 @item %@{S*&T*@}
28786 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
28787 (the order of @code{S} and @code{T} in the spec is not significant).
28788 There can be any number of ampersand-separated variables; for each the
28789 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
28791 @item %@{S:X@}
28792 Substitutes @code{X}, if the @option{-S} switch is given to GCC@.
28794 @item %@{!S:X@}
28795 Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.
28797 @item %@{S*:X@}
28798 Substitutes @code{X} if one or more switches whose names start with
28799 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
28800 once, no matter how many such switches appeared.  However, if @code{%*}
28801 appears somewhere in @code{X}, then @code{X} is substituted once
28802 for each matching switch, with the @code{%*} replaced by the part of
28803 that switch matching the @code{*}.
28805 If @code{%*} appears as the last part of a spec sequence then a space
28806 is added after the end of the last substitution.  If there is more
28807 text in the sequence, however, then a space is not generated.  This
28808 allows the @code{%*} substitution to be used as part of a larger
28809 string.  For example, a spec string like this:
28811 @smallexample
28812 %@{mcu=*:--script=%*/memory.ld@}
28813 @end smallexample
28815 @noindent
28816 when matching an option like @option{-mcu=newchip} produces:
28818 @smallexample
28819 --script=newchip/memory.ld
28820 @end smallexample
28822 @item %@{.S:X@}
28823 Substitutes @code{X}, if processing a file with suffix @code{S}.
28825 @item %@{!.S:X@}
28826 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
28828 @item %@{,S:X@}
28829 Substitutes @code{X}, if processing a file for language @code{S}.
28831 @item %@{!,S:X@}
28832 Substitutes @code{X}, if not processing a file for language @code{S}.
28834 @item %@{S|P:X@}
28835 Substitutes @code{X} if either @code{-S} or @code{-P} is given to
28836 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
28837 @code{*} sequences as well, although they have a stronger binding than
28838 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
28839 alternatives must be starred, and only the first matching alternative
28840 is substituted.
28842 For example, a spec string like this:
28844 @smallexample
28845 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
28846 @end smallexample
28848 @noindent
28849 outputs the following command-line options from the following input
28850 command-line options:
28852 @smallexample
28853 fred.c        -foo -baz
28854 jim.d         -bar -boggle
28855 -d fred.c     -foo -baz -boggle
28856 -d jim.d      -bar -baz -boggle
28857 @end smallexample
28859 @item %@{S:X; T:Y; :D@}
28861 If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
28862 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
28863 be as many clauses as you need.  This may be combined with @code{.},
28864 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
28867 @end table
28869 The switch matching text @code{S} in a @samp{%@{S@}}, @samp{%@{S:X@}}
28870 or similar construct can use a backslash to ignore the special meaning
28871 of the character following it, thus allowing literal matching of a
28872 character that is otherwise specially treated.  For example,
28873 @samp{%@{std=iso9899\:1999:X@}} substitutes @code{X} if the
28874 @option{-std=iso9899:1999} option is given.
28876 The conditional text @code{X} in a @samp{%@{S:X@}} or similar
28877 construct may contain other nested @samp{%} constructs or spaces, or
28878 even newlines.  They are processed as usual, as described above.
28879 Trailing white space in @code{X} is ignored.  White space may also
28880 appear anywhere on the left side of the colon in these constructs,
28881 except between @code{.} or @code{*} and the corresponding word.
28883 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
28884 handled specifically in these constructs.  If another value of
28885 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
28886 @option{-W} switch is found later in the command line, the earlier
28887 switch value is ignored, except with @{@code{S}*@} where @code{S} is
28888 just one letter, which passes all matching options.
28890 The character @samp{|} at the beginning of the predicate text is used to
28891 indicate that a command should be piped to the following command, but
28892 only if @option{-pipe} is specified.
28894 It is built into GCC which switches take arguments and which do not.
28895 (You might think it would be useful to generalize this to allow each
28896 compiler's spec to say which switches take arguments.  But this cannot
28897 be done in a consistent fashion.  GCC cannot even decide which input
28898 files have been specified without knowing which switches take arguments,
28899 and it must know which input files to compile in order to tell which
28900 compilers to run).
28902 GCC also knows implicitly that arguments starting in @option{-l} are to be
28903 treated as compiler output files, and passed to the linker in their
28904 proper position among the other output files.
28906 @node Environment Variables
28907 @section Environment Variables Affecting GCC
28908 @cindex environment variables
28910 @c man begin ENVIRONMENT
28911 This section describes several environment variables that affect how GCC
28912 operates.  Some of them work by specifying directories or prefixes to use
28913 when searching for various kinds of files.  Some are used to specify other
28914 aspects of the compilation environment.
28916 Note that you can also specify places to search using options such as
28917 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
28918 take precedence over places specified using environment variables, which
28919 in turn take precedence over those specified by the configuration of GCC@.
28920 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
28921 GNU Compiler Collection (GCC) Internals}.
28923 @table @env
28924 @item LANG
28925 @itemx LC_CTYPE
28926 @c @itemx LC_COLLATE
28927 @itemx LC_MESSAGES
28928 @c @itemx LC_MONETARY
28929 @c @itemx LC_NUMERIC
28930 @c @itemx LC_TIME
28931 @itemx LC_ALL
28932 @findex LANG
28933 @findex LC_CTYPE
28934 @c @findex LC_COLLATE
28935 @findex LC_MESSAGES
28936 @c @findex LC_MONETARY
28937 @c @findex LC_NUMERIC
28938 @c @findex LC_TIME
28939 @findex LC_ALL
28940 @cindex locale
28941 These environment variables control the way that GCC uses
28942 localization information which allows GCC to work with different
28943 national conventions.  GCC inspects the locale categories
28944 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
28945 so.  These locale categories can be set to any value supported by your
28946 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
28947 Kingdom encoded in UTF-8.
28949 The @env{LC_CTYPE} environment variable specifies character
28950 classification.  GCC uses it to determine the character boundaries in
28951 a string; this is needed for some multibyte encodings that contain quote
28952 and escape characters that are otherwise interpreted as a string
28953 end or escape.
28955 The @env{LC_MESSAGES} environment variable specifies the language to
28956 use in diagnostic messages.
28958 If the @env{LC_ALL} environment variable is set, it overrides the value
28959 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
28960 and @env{LC_MESSAGES} default to the value of the @env{LANG}
28961 environment variable.  If none of these variables are set, GCC
28962 defaults to traditional C English behavior.
28964 @item TMPDIR
28965 @findex TMPDIR
28966 If @env{TMPDIR} is set, it specifies the directory to use for temporary
28967 files.  GCC uses temporary files to hold the output of one stage of
28968 compilation which is to be used as input to the next stage: for example,
28969 the output of the preprocessor, which is the input to the compiler
28970 proper.
28972 @item GCC_COMPARE_DEBUG
28973 @findex GCC_COMPARE_DEBUG
28974 Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
28975 @option{-fcompare-debug} to the compiler driver.  See the documentation
28976 of this option for more details.
28978 @item GCC_EXEC_PREFIX
28979 @findex GCC_EXEC_PREFIX
28980 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
28981 names of the subprograms executed by the compiler.  No slash is added
28982 when this prefix is combined with the name of a subprogram, but you can
28983 specify a prefix that ends with a slash if you wish.
28985 If @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
28986 an appropriate prefix to use based on the pathname it is invoked with.
28988 If GCC cannot find the subprogram using the specified prefix, it
28989 tries looking in the usual places for the subprogram.
28991 The default value of @env{GCC_EXEC_PREFIX} is
28992 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
28993 the installed compiler. In many cases @var{prefix} is the value
28994 of @code{prefix} when you ran the @file{configure} script.
28996 Other prefixes specified with @option{-B} take precedence over this prefix.
28998 This prefix is also used for finding files such as @file{crt0.o} that are
28999 used for linking.
29001 In addition, the prefix is used in an unusual way in finding the
29002 directories to search for header files.  For each of the standard
29003 directories whose name normally begins with @samp{/usr/local/lib/gcc}
29004 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
29005 replacing that beginning with the specified prefix to produce an
29006 alternate directory name.  Thus, with @option{-Bfoo/}, GCC searches
29007 @file{foo/bar} just before it searches the standard directory 
29008 @file{/usr/local/lib/bar}.
29009 If a standard directory begins with the configured
29010 @var{prefix} then the value of @var{prefix} is replaced by
29011 @env{GCC_EXEC_PREFIX} when looking for header files.
29013 @item COMPILER_PATH
29014 @findex COMPILER_PATH
29015 The value of @env{COMPILER_PATH} is a colon-separated list of
29016 directories, much like @env{PATH}.  GCC tries the directories thus
29017 specified when searching for subprograms, if it cannot find the
29018 subprograms using @env{GCC_EXEC_PREFIX}.
29020 @item LIBRARY_PATH
29021 @findex LIBRARY_PATH
29022 The value of @env{LIBRARY_PATH} is a colon-separated list of
29023 directories, much like @env{PATH}.  When configured as a native compiler,
29024 GCC tries the directories thus specified when searching for special
29025 linker files, if it cannot find them using @env{GCC_EXEC_PREFIX}.  Linking
29026 using GCC also uses these directories when searching for ordinary
29027 libraries for the @option{-l} option (but directories specified with
29028 @option{-L} come first).
29030 @item LANG
29031 @findex LANG
29032 @cindex locale definition
29033 This variable is used to pass locale information to the compiler.  One way in
29034 which this information is used is to determine the character set to be used
29035 when character literals, string literals and comments are parsed in C and C++.
29036 When the compiler is configured to allow multibyte characters,
29037 the following values for @env{LANG} are recognized:
29039 @table @samp
29040 @item C-JIS
29041 Recognize JIS characters.
29042 @item C-SJIS
29043 Recognize SJIS characters.
29044 @item C-EUCJP
29045 Recognize EUCJP characters.
29046 @end table
29048 If @env{LANG} is not defined, or if it has some other value, then the
29049 compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
29050 recognize and translate multibyte characters.
29051 @end table
29053 @noindent
29054 Some additional environment variables affect the behavior of the
29055 preprocessor.
29057 @include cppenv.texi
29059 @c man end
29061 @node Precompiled Headers
29062 @section Using Precompiled Headers
29063 @cindex precompiled headers
29064 @cindex speed of compilation
29066 Often large projects have many header files that are included in every
29067 source file.  The time the compiler takes to process these header files
29068 over and over again can account for nearly all of the time required to
29069 build the project.  To make builds faster, GCC allows you to
29070 @dfn{precompile} a header file.
29072 To create a precompiled header file, simply compile it as you would any
29073 other file, if necessary using the @option{-x} option to make the driver
29074 treat it as a C or C++ header file.  You may want to use a
29075 tool like @command{make} to keep the precompiled header up-to-date when
29076 the headers it contains change.
29078 A precompiled header file is searched for when @code{#include} is
29079 seen in the compilation.  As it searches for the included file
29080 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
29081 compiler looks for a precompiled header in each directory just before it
29082 looks for the include file in that directory.  The name searched for is
29083 the name specified in the @code{#include} with @samp{.gch} appended.  If
29084 the precompiled header file cannot be used, it is ignored.
29086 For instance, if you have @code{#include "all.h"}, and you have
29087 @file{all.h.gch} in the same directory as @file{all.h}, then the
29088 precompiled header file is used if possible, and the original
29089 header is used otherwise.
29091 Alternatively, you might decide to put the precompiled header file in a
29092 directory and use @option{-I} to ensure that directory is searched
29093 before (or instead of) the directory containing the original header.
29094 Then, if you want to check that the precompiled header file is always
29095 used, you can put a file of the same name as the original header in this
29096 directory containing an @code{#error} command.
29098 This also works with @option{-include}.  So yet another way to use
29099 precompiled headers, good for projects not designed with precompiled
29100 header files in mind, is to simply take most of the header files used by
29101 a project, include them from another header file, precompile that header
29102 file, and @option{-include} the precompiled header.  If the header files
29103 have guards against multiple inclusion, they are skipped because
29104 they've already been included (in the precompiled header).
29106 If you need to precompile the same header file for different
29107 languages, targets, or compiler options, you can instead make a
29108 @emph{directory} named like @file{all.h.gch}, and put each precompiled
29109 header in the directory, perhaps using @option{-o}.  It doesn't matter
29110 what you call the files in the directory; every precompiled header in
29111 the directory is considered.  The first precompiled header
29112 encountered in the directory that is valid for this compilation is
29113 used; they're searched in no particular order.
29115 There are many other possibilities, limited only by your imagination,
29116 good sense, and the constraints of your build system.
29118 A precompiled header file can be used only when these conditions apply:
29120 @itemize
29121 @item
29122 Only one precompiled header can be used in a particular compilation.
29124 @item
29125 A precompiled header cannot be used once the first C token is seen.  You
29126 can have preprocessor directives before a precompiled header; you cannot
29127 include a precompiled header from inside another header.
29129 @item
29130 The precompiled header file must be produced for the same language as
29131 the current compilation.  You cannot use a C precompiled header for a C++
29132 compilation.
29134 @item
29135 The precompiled header file must have been produced by the same compiler
29136 binary as the current compilation is using.
29138 @item
29139 Any macros defined before the precompiled header is included must
29140 either be defined in the same way as when the precompiled header was
29141 generated, or must not affect the precompiled header, which usually
29142 means that they don't appear in the precompiled header at all.
29144 The @option{-D} option is one way to define a macro before a
29145 precompiled header is included; using a @code{#define} can also do it.
29146 There are also some options that define macros implicitly, like
29147 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
29148 defined this way.
29150 @item If debugging information is output when using the precompiled
29151 header, using @option{-g} or similar, the same kind of debugging information
29152 must have been output when building the precompiled header.  However,
29153 a precompiled header built using @option{-g} can be used in a compilation
29154 when no debugging information is being output.
29156 @item The same @option{-m} options must generally be used when building
29157 and using the precompiled header.  @xref{Submodel Options},
29158 for any cases where this rule is relaxed.
29160 @item Each of the following options must be the same when building and using
29161 the precompiled header:
29163 @gccoptlist{-fexceptions}
29165 @item
29166 Some other command-line options starting with @option{-f},
29167 @option{-p}, or @option{-O} must be defined in the same way as when
29168 the precompiled header was generated.  At present, it's not clear
29169 which options are safe to change and which are not; the safest choice
29170 is to use exactly the same options when generating and using the
29171 precompiled header.  The following are known to be safe:
29173 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
29174 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
29175 -fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
29176 -pedantic-errors}
29178 @end itemize
29180 For all of these except the last, the compiler automatically
29181 ignores the precompiled header if the conditions aren't met.  If you
29182 find an option combination that doesn't work and doesn't cause the
29183 precompiled header to be ignored, please consider filing a bug report,
29184 see @ref{Bugs}.
29186 If you do use differing options when generating and using the
29187 precompiled header, the actual behavior is a mixture of the
29188 behavior for the options.  For instance, if you use @option{-g} to
29189 generate the precompiled header but not when using it, you may or may
29190 not get debugging information for routines in the precompiled header.