gcc/
[official-gcc.git] / gcc / doc / invoke.texi
blobd15d4a9d79b118a3aabef95782cc7148aadf2e1c
1 @c Copyright (C) 1988-2014 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-2014 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.  @samp{g++} accepts mostly the same options as @samp{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), adb(1), dbx(1), sdb(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.
76 Other options are passed on to one stage of processing.  Some options
77 control the preprocessor and others the compiler itself.  Yet other
78 options control the assembler and linker; most of these are not
79 documented here, since you rarely need to use any of them.
81 @cindex C compilation options
82 Most of the command-line options that you can use with GCC are useful
83 for C programs; when an option is only useful with another language
84 (usually C++), the explanation says so explicitly.  If the description
85 for a particular option does not mention a source language, you can use
86 that option with all supported languages.
88 @cindex C++ compilation options
89 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
90 options for compiling C++ programs.
92 @cindex grouping options
93 @cindex options, grouping
94 The @command{gcc} program accepts options and file names as operands.  Many
95 options have multi-letter names; therefore multiple single-letter options
96 may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
97 -v}}.
99 @cindex order of options
100 @cindex options, order
101 You can mix options and other arguments.  For the most part, the order
102 you use doesn't matter.  Order does matter when you use several
103 options of the same kind; for example, if you specify @option{-L} more
104 than once, the directories are searched in the order specified.  Also,
105 the placement of the @option{-l} option is significant.
107 Many options have long names starting with @samp{-f} or with
108 @samp{-W}---for example,
109 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
110 these have both positive and negative forms; the negative form of
111 @option{-ffoo} is @option{-fno-foo}.  This manual documents
112 only one of these two forms, whichever one is not the default.
114 @c man end
116 @xref{Option Index}, for an index to GCC's options.
118 @menu
119 * Option Summary::      Brief list of all options, without explanations.
120 * Overall Options::     Controlling the kind of output:
121                         an executable, object files, assembler files,
122                         or preprocessed source.
123 * Invoking G++::        Compiling C++ programs.
124 * C Dialect Options::   Controlling the variant of C language compiled.
125 * C++ Dialect Options:: Variations on C++.
126 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
127                         and Objective-C++.
128 * Language Independent Options:: Controlling how diagnostics should be
129                         formatted.
130 * Warning Options::     How picky should the compiler be?
131 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
132 * Optimize Options::    How much optimization?
133 * Preprocessor Options:: Controlling header files and macro definitions.
134                          Also, getting dependency information for Make.
135 * Assembler Options::   Passing options to the assembler.
136 * Link Options::        Specifying libraries and so on.
137 * Directory Options::   Where to find header files and libraries.
138                         Where to find the compiler executable files.
139 * Spec Files::          How to pass switches to sub-processes.
140 * Target Options::      Running a cross-compiler, or an old version of GCC.
141 * Submodel Options::    Specifying minor hardware or convention variations,
142                         such as 68010 vs 68020.
143 * Code Gen Options::    Specifying conventions for function calls, data layout
144                         and register usage.
145 * Environment Variables:: Env vars that affect GCC.
146 * Precompiled Headers:: Compiling a header once, and using it many times.
147 @end menu
149 @c man begin OPTIONS
151 @node Option Summary
152 @section Option Summary
154 Here is a summary of all the options, grouped by type.  Explanations are
155 in the following sections.
157 @table @emph
158 @item Overall Options
159 @xref{Overall Options,,Options Controlling the Kind of Output}.
160 @gccoptlist{-c  -S  -E  -o @var{file}  -no-canonical-prefixes  @gol
161 -pipe  -pass-exit-codes  @gol
162 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
163 --version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}  @gol
164 -fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{unit} -fdump-go-spec=@var{file}}
166 @item C Language Options
167 @xref{C Dialect Options,,Options Controlling C Dialect}.
168 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
169 -aux-info @var{filename} -fallow-parameterless-variadic-functions @gol
170 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
171 -fhosted  -ffreestanding -fopenmp -fopenmp-simd -fms-extensions @gol
172 -fplan9-extensions -trigraphs  -traditional  -traditional-cpp @gol
173 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
174 -fsigned-bitfields  -fsigned-char @gol
175 -funsigned-bitfields  -funsigned-char}
177 @item C++ Language Options
178 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
179 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
180 -fconstexpr-depth=@var{n}  -ffriend-injection @gol
181 -fno-elide-constructors @gol
182 -fno-enforce-eh-specs @gol
183 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
184 -fno-implicit-templates @gol
185 -fno-implicit-inline-templates @gol
186 -fno-implement-inlines  -fms-extensions @gol
187 -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
188 -fno-optional-diags  -fpermissive @gol
189 -fno-pretty-templates @gol
190 -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=@var{n} @gol
191 -ftemplate-depth=@var{n} @gol
192 -fno-threadsafe-statics  -fuse-cxa-atexit @gol
193 -fno-weak  -nostdinc++ @gol
194 -fvisibility-inlines-hidden @gol
195 -fvtable-verify=@var{std|preinit|none} @gol
196 -fvtv-counts -fvtv-debug @gol
197 -fvisibility-ms-compat @gol
198 -fext-numeric-literals @gol
199 -Wabi=@var{n}  -Wconversion-null  -Wctor-dtor-privacy @gol
200 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing @gol
201 -Wnoexcept -Wnon-virtual-dtor  -Wreorder @gol
202 -Weffc++  -Wstrict-null-sentinel @gol
203 -Wno-non-template-friend  -Wold-style-cast @gol
204 -Woverloaded-virtual  -Wno-pmf-conversions @gol
205 -Wsign-promo}
207 @item Objective-C and Objective-C++ Language Options
208 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
209 Objective-C and Objective-C++ Dialects}.
210 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
211 -fgnu-runtime  -fnext-runtime @gol
212 -fno-nil-receivers @gol
213 -fobjc-abi-version=@var{n} @gol
214 -fobjc-call-cxx-cdtors @gol
215 -fobjc-direct-dispatch @gol
216 -fobjc-exceptions @gol
217 -fobjc-gc @gol
218 -fobjc-nilcheck @gol
219 -fobjc-std=objc1 @gol
220 -fno-local-ivars @gol
221 -fivar-visibility=@var{public|protected|private|package} @gol
222 -freplace-objc-classes @gol
223 -fzero-link @gol
224 -gen-decls @gol
225 -Wassign-intercept @gol
226 -Wno-protocol  -Wselector @gol
227 -Wstrict-selector-match @gol
228 -Wundeclared-selector}
230 @item Language Independent Options
231 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
232 @gccoptlist{-fmessage-length=@var{n}  @gol
233 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
234 -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
235 -fno-diagnostics-show-option -fno-diagnostics-show-caret}
237 @item Warning Options
238 @xref{Warning Options,,Options to Request or Suppress Warnings}.
239 @gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
240 -pedantic-errors @gol
241 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  @gol
242 -Waggressive-loop-optimizations -Warray-bounds @gol
243 -Wbool-compare @gol
244 -Wno-attributes -Wno-builtin-macro-redefined @gol
245 -Wc90-c99-compat -Wc99-c11-compat @gol
246 -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual  @gol
247 -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported  @gol
248 -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp  @gol
249 -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init @gol
250 -Wdisabled-optimization -Wno-discarded-qualifiers @gol
251 -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare @gol
252 -Wno-endif-labels -Werror  -Werror=* @gol
253 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
254 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
255 -Wformat-security  -Wformat-signedness  -Wformat-y2k @gol
256 -Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
257 -Wignored-qualifiers  -Wincompatible-pointer-types @gol
258 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
259 -Winit-self  -Winline  -Wno-int-conversion @gol
260 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
261 -Winvalid-pch -Wlarger-than=@var{len}  -Wunsafe-loop-optimizations @gol
262 -Wlogical-op -Wlogical-not-parentheses -Wlong-long @gol
263 -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args -Wmissing-braces @gol
264 -Wmissing-field-initializers -Wmissing-include-dirs @gol
265 -Wno-multichar  -Wnonnull  -Wodr  -Wno-overflow  -Wopenmp-simd @gol
266 -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
267 -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
268 -Wpointer-arith  -Wno-pointer-to-int-cast @gol
269 -Wredundant-decls  -Wno-return-local-addr @gol
270 -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar @gol
271 -Wsign-compare  -Wsign-conversion -Wfloat-conversion @gol
272 -Wsizeof-pointer-memaccess  -Wsizeof-array-argument @gol
273 -Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol
274 -Wstrict-aliasing=n @gol -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
275 -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
276 -Wsuggest-final-types @gol -Wsuggest-final-methods @gol
277 -Wmissing-format-attribute @gol
278 -Wswitch  -Wswitch-default  -Wswitch-enum -Wswitch-bool -Wsync-nand @gol
279 -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef @gol
280 -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas @gol
281 -Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
282 -Wunused-label  -Wunused-local-typedefs -Wunused-parameter @gol
283 -Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
284 -Wunused-but-set-parameter -Wunused-but-set-variable @gol
285 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
286 -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant}
288 @item C and Objective-C-only Warning Options
289 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
290 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
291 -Wold-style-declaration  -Wold-style-definition @gol
292 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
293 -Wdeclaration-after-statement -Wpointer-sign}
295 @item Debugging Options
296 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
297 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
298 -fsanitize=@var{style} -fsanitize-recover @gol
299 -fsanitize-undefined-trap-on-error @gol
300 -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
301 -fdisable-ipa-@var{pass_name} @gol
302 -fdisable-rtl-@var{pass_name} @gol
303 -fdisable-rtl-@var{pass-name}=@var{range-list} @gol
304 -fdisable-tree-@var{pass_name} @gol
305 -fdisable-tree-@var{pass-name}=@var{range-list} @gol
306 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol
307 -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
308 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
309 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
310 -fdump-passes @gol
311 -fdump-statistics @gol
312 -fdump-tree-all @gol
313 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
314 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
315 -fdump-tree-cfg -fdump-tree-alias @gol
316 -fdump-tree-ch @gol
317 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
318 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
319 -fdump-tree-gimple@r{[}-raw@r{]} @gol
320 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
321 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
322 -fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol
323 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
324 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
325 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
326 -fdump-tree-nrv -fdump-tree-vect @gol
327 -fdump-tree-sink @gol
328 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
329 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
330 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
331 -fdump-tree-vtable-verify @gol
332 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
333 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
334 -fdump-final-insns=@var{file} @gol
335 -fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
336 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types @gol
337 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
338 -fenable-@var{kind}-@var{pass} @gol
339 -fenable-@var{kind}-@var{pass}=@var{range-list} @gol
340 -fdebug-types-section -fmem-report-wpa @gol
341 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
342 -fopt-info @gol
343 -fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol
344 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
345 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
346 -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking @gol
347 -fvar-tracking-assignments  -fvar-tracking-assignments-toggle @gol
348 -g  -g@var{level}  -gtoggle  -gcoff  -gdwarf-@var{version} @gol
349 -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
350 -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
351 -gvms  -gxcoff  -gxcoff+ -gz@r{[}=@var{type}@r{]} @gol
352 -fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
353 -fdebug-prefix-map=@var{old}=@var{new} @gol
354 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
355 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
356 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
357 -print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
358 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
359 -print-sysroot -print-sysroot-headers-suffix @gol
360 -save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}}
362 @item Optimization Options
363 @xref{Optimize Options,,Options that Control Optimization}.
364 @gccoptlist{-faggressive-loop-optimizations -falign-functions[=@var{n}] @gol
365 -falign-jumps[=@var{n}] @gol
366 -falign-labels[=@var{n}] -falign-loops[=@var{n}] @gol
367 -fassociative-math -fauto-inc-dec -fbranch-probabilities @gol
368 -fbranch-target-load-optimize -fbranch-target-load-optimize2 @gol
369 -fbtr-bb-exclusive -fcaller-saves @gol
370 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol
371 -fcompare-elim -fcprop-registers -fcrossjumping @gol
372 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
373 -fcx-limited-range @gol
374 -fdata-sections -fdce -fdelayed-branch @gol
375 -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively -fdse @gol
376 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol
377 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
378 -fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
379 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol
380 -fgcse-sm -fhoist-adjacent-loads -fif-conversion @gol
381 -fif-conversion2 -findirect-inlining @gol
382 -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
383 -finline-small-functions -fipa-cp -fipa-cp-clone @gol
384 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol
385 -fira-algorithm=@var{algorithm} @gol
386 -fira-region=@var{region} -fira-hoist-pressure @gol
387 -fira-loop-pressure -fno-ira-share-save-slots @gol
388 -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
389 -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute
390 -fivopts -fkeep-inline-functions -fkeep-static-consts -flive-range-shrinkage @gol
391 -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize @gol
392 -floop-parallelize-all -flto -flto-compression-level @gol
393 -flto-partition=@var{alg} -flto-report -flto-report-wpa -fmerge-all-constants @gol
394 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol
395 -fmove-loop-invariants -fno-branch-count-reg @gol
396 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
397 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
398 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
399 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
400 -fomit-frame-pointer -foptimize-sibling-calls @gol
401 -fpartial-inlining -fpeel-loops -fpredictive-commoning @gol
402 -fprefetch-loop-arrays -fprofile-report @gol
403 -fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
404 -fprofile-generate=@var{path} @gol
405 -fprofile-use -fprofile-use=@var{path} -fprofile-values -fprofile-reorder-functions @gol
406 -freciprocal-math -free -frename-registers -freorder-blocks @gol
407 -freorder-blocks-and-partition -freorder-functions @gol
408 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
409 -frounding-math -fsched2-use-superblocks -fsched-pressure @gol
410 -fsched-spec-load -fsched-spec-load-dangerous @gol
411 -fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
412 -fsched-group-heuristic -fsched-critical-path-heuristic @gol
413 -fsched-spec-insn-heuristic -fsched-rank-heuristic @gol
414 -fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol
415 -fschedule-insns -fschedule-insns2 -fsection-anchors @gol
416 -fselective-scheduling -fselective-scheduling2 @gol
417 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
418 -fsemantic-interposition @gol
419 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant @gol
420 -fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt -fstack-protector @gol
421 -fstack-protector-all -fstack-protector-strong -fstrict-aliasing @gol
422 -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp @gol
423 -ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
424 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop @gol
425 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol
426 -ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol
427 -ftree-loop-if-convert-stores -ftree-loop-im @gol
428 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol
429 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
430 -ftree-loop-vectorize @gol
431 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
432 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol
433 -ftree-switch-conversion -ftree-tail-merge -ftree-ter @gol
434 -ftree-vectorize -ftree-vrp @gol
435 -funit-at-a-time -funroll-all-loops -funroll-loops @gol
436 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
437 -fuse-caller-save -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol
438 -fweb -fwhole-program -fwpa -fuse-ld=@var{linker} -fuse-linker-plugin @gol
439 --param @var{name}=@var{value}
440 -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og}
442 @item Preprocessor Options
443 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
444 @gccoptlist{-A@var{question}=@var{answer} @gol
445 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
446 -C  -dD  -dI  -dM  -dN @gol
447 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
448 -idirafter @var{dir} @gol
449 -include @var{file}  -imacros @var{file} @gol
450 -iprefix @var{file}  -iwithprefix @var{dir} @gol
451 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
452 -imultilib @var{dir} -isysroot @var{dir} @gol
453 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
454 -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory @gol
455 -remap -trigraphs  -undef  -U@var{macro}  @gol
456 -Wp,@var{option} -Xpreprocessor @var{option} -no-integrated-cpp}
458 @item Assembler Option
459 @xref{Assembler Options,,Passing Options to the Assembler}.
460 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
462 @item Linker Options
463 @xref{Link Options,,Options for Linking}.
464 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
465 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
466 -s  -static -static-libgcc -static-libstdc++ @gol
467 -static-libasan -static-libtsan -static-liblsan -static-libubsan @gol
468 -shared -shared-libgcc  -symbolic @gol
469 -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
470 -u @var{symbol} -z @var{keyword}}
472 @item Directory Options
473 @xref{Directory Options,,Options for Directory Search}.
474 @gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir} @gol
475 -iquote@var{dir} -L@var{dir} -specs=@var{file} -I- @gol
476 --sysroot=@var{dir} --no-sysroot-suffix}
478 @item Machine Dependent Options
479 @xref{Submodel Options,,Hardware Models and Configurations}.
480 @c This list is ordered alphanumerically by subsection name.
481 @c Try and put the significant identifier (CPU or system) first,
482 @c so users have a clue at guessing where the ones they want will be.
484 @emph{AArch64 Options}
485 @gccoptlist{-mabi=@var{name}  -mbig-endian  -mlittle-endian @gol
486 -mgeneral-regs-only @gol
487 -mcmodel=tiny  -mcmodel=small  -mcmodel=large @gol
488 -mstrict-align @gol
489 -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
490 -mtls-dialect=desc  -mtls-dialect=traditional @gol
491 -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}}
493 @emph{Adapteva Epiphany Options}
494 @gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol
495 -mbranch-cost=@var{num} -mcmove -mnops=@var{num} -msoft-cmpsf @gol
496 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=@var{num} @gol
497 -mround-nearest -mlong-calls -mshort-calls -msmall16 @gol
498 -mfp-mode=@var{mode} -mvect-double -max-vect-align=@var{num} @gol
499 -msplit-vecmove-early -m1reg-@var{reg}}
501 @emph{ARC Options}
502 @gccoptlist{-mbarrel-shifter @gol
503 -mcpu=@var{cpu} -mA6 -mARC600 -mA7 -mARC700 @gol
504 -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr @gol
505 -mea -mno-mpy -mmul32x16 -mmul64 @gol
506 -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap @gol
507 -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape @gol
508 -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof @gol
509 -mepilogue-cfi -mlong-calls -mmedium-calls -msdata @gol
510 -mucb-mcount -mvolatile-cache @gol
511 -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc @gol
512 -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi @gol
513 -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none @gol
514 -mlra-priority-compact mlra-priority-noncompact -mno-millicode @gol
515 -mmixed-code -mq-class -mRcq -mRcw -msize-level=@var{level} @gol
516 -mtune=@var{cpu} -mmultcost=@var{num} -munalign-prob-threshold=@var{probability}}
518 @emph{ARM Options}
519 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
520 -mabi=@var{name} @gol
521 -mapcs-stack-check  -mno-apcs-stack-check @gol
522 -mapcs-float  -mno-apcs-float @gol
523 -mapcs-reentrant  -mno-apcs-reentrant @gol
524 -msched-prolog  -mno-sched-prolog @gol
525 -mlittle-endian  -mbig-endian @gol
526 -mfloat-abi=@var{name} @gol
527 -mfp16-format=@var{name}
528 -mthumb-interwork  -mno-thumb-interwork @gol
529 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
530 -mstructure-size-boundary=@var{n} @gol
531 -mabort-on-noreturn @gol
532 -mlong-calls  -mno-long-calls @gol
533 -msingle-pic-base  -mno-single-pic-base @gol
534 -mpic-register=@var{reg} @gol
535 -mnop-fun-dllimport @gol
536 -mpoke-function-name @gol
537 -mthumb  -marm @gol
538 -mtpcs-frame  -mtpcs-leaf-frame @gol
539 -mcaller-super-interworking  -mcallee-super-interworking @gol
540 -mtp=@var{name} -mtls-dialect=@var{dialect} @gol
541 -mword-relocations @gol
542 -mfix-cortex-m3-ldrd @gol
543 -munaligned-access @gol
544 -mneon-for-64bits @gol
545 -mslow-flash-data @gol
546 -mrestrict-it}
548 @emph{AVR Options}
549 @gccoptlist{-mmcu=@var{mcu} -maccumulate-args -mbranch-cost=@var{cost} @gol
550 -mcall-prologues -mint8 -mno-interrupts -mrelax @gol
551 -mstrict-X -mtiny-stack -Waddr-space-convert}
553 @emph{Blackfin Options}
554 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
555 -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
556 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
557 -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
558 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
559 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
560 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
561 -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
562 -micplb}
564 @emph{C6X Options}
565 @gccoptlist{-mbig-endian  -mlittle-endian -march=@var{cpu} @gol
566 -msim -msdata=@var{sdata-type}}
568 @emph{CRIS Options}
569 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
570 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
571 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
572 -mstack-align  -mdata-align  -mconst-align @gol
573 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
574 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
575 -mmul-bug-workaround  -mno-mul-bug-workaround}
577 @emph{CR16 Options}
578 @gccoptlist{-mmac @gol
579 -mcr16cplus -mcr16c @gol
580 -msim -mint32 -mbit-ops
581 -mdata-model=@var{model}}
583 @emph{Darwin Options}
584 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
585 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
586 -client_name  -compatibility_version  -current_version @gol
587 -dead_strip @gol
588 -dependency-file  -dylib_file  -dylinker_install_name @gol
589 -dynamic  -dynamiclib  -exported_symbols_list @gol
590 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
591 -force_flat_namespace  -headerpad_max_install_names @gol
592 -iframework @gol
593 -image_base  -init  -install_name  -keep_private_externs @gol
594 -multi_module  -multiply_defined  -multiply_defined_unused @gol
595 -noall_load   -no_dead_strip_inits_and_terms @gol
596 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
597 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
598 -private_bundle  -read_only_relocs  -sectalign @gol
599 -sectobjectsymbols  -whyload  -seg1addr @gol
600 -sectcreate  -sectobjectsymbols  -sectorder @gol
601 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
602 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
603 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
604 -single_module  -static  -sub_library  -sub_umbrella @gol
605 -twolevel_namespace  -umbrella  -undefined @gol
606 -unexported_symbols_list  -weak_reference_mismatches @gol
607 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
608 -mkernel -mone-byte-bool}
610 @emph{DEC Alpha Options}
611 @gccoptlist{-mno-fp-regs  -msoft-float @gol
612 -mieee  -mieee-with-inexact  -mieee-conformant @gol
613 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
614 -mtrap-precision=@var{mode}  -mbuild-constants @gol
615 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
616 -mbwx  -mmax  -mfix  -mcix @gol
617 -mfloat-vax  -mfloat-ieee @gol
618 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
619 -msmall-text  -mlarge-text @gol
620 -mmemory-latency=@var{time}}
622 @emph{FR30 Options}
623 @gccoptlist{-msmall-model -mno-lsim}
625 @emph{FRV Options}
626 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
627 -mhard-float  -msoft-float @gol
628 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
629 -mdouble  -mno-double @gol
630 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
631 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
632 -mlinked-fp  -mlong-calls  -malign-labels @gol
633 -mlibrary-pic  -macc-4  -macc-8 @gol
634 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
635 -moptimize-membar -mno-optimize-membar @gol
636 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
637 -mvliw-branch  -mno-vliw-branch @gol
638 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
639 -mno-nested-cond-exec  -mtomcat-stats @gol
640 -mTLS -mtls @gol
641 -mcpu=@var{cpu}}
643 @emph{GNU/Linux Options}
644 @gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol
645 -tno-android-cc -tno-android-ld}
647 @emph{H8/300 Options}
648 @gccoptlist{-mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300}
650 @emph{HPPA Options}
651 @gccoptlist{-march=@var{architecture-type} @gol
652 -mdisable-fpregs  -mdisable-indexing @gol
653 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
654 -mfixed-range=@var{register-range} @gol
655 -mjump-in-delay -mlinker-opt -mlong-calls @gol
656 -mlong-load-store  -mno-disable-fpregs @gol
657 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
658 -mno-jump-in-delay  -mno-long-load-store @gol
659 -mno-portable-runtime  -mno-soft-float @gol
660 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
661 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
662 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
663 -munix=@var{unix-std}  -nolibdld  -static  -threads}
665 @emph{i386 and x86-64 Options}
666 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
667 -mtune-ctrl=@var{feature-list} -mdump-tune-features -mno-default @gol
668 -mfpmath=@var{unit} @gol
669 -masm=@var{dialect}  -mno-fancy-math-387 @gol
670 -mno-fp-ret-in-387  -msoft-float @gol
671 -mno-wide-multiply  -mrtd  -malign-double @gol
672 -mpreferred-stack-boundary=@var{num} @gol
673 -mincoming-stack-boundary=@var{num} @gol
674 -mcld -mcx16 -msahf -mmovbe -mcrc32 @gol
675 -mrecip -mrecip=@var{opt} @gol
676 -mvzeroupper -mprefer-avx128 @gol
677 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
678 -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha @gol
679 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 @gol
680 -mclflushopt -mxsavec -mxsaves @gol
681 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt @gol
682 -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mthreads @gol
683 -mno-align-stringops  -minline-all-stringops @gol
684 -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
685 -mmemcpy-strategy=@var{strategy} -mmemset-strategy=@var{strategy}
686 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
687 -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 @gol
688 -mregparm=@var{num}  -msseregparm @gol
689 -mveclibabi=@var{type} -mvect8-ret-in-mem @gol
690 -mpc32 -mpc64 -mpc80 -mstackrealign @gol
691 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
692 -mcmodel=@var{code-model} -mabi=@var{name} -maddress-mode=@var{mode} @gol
693 -m32 -m64 -mx32 -m16 -mlarge-data-threshold=@var{num} @gol
694 -msse2avx -mfentry -m8bit-idiv @gol
695 -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol
696 -mstack-protector-guard=@var{guard}}
698 @emph{i386 and x86-64 Windows Options}
699 @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol
700 -mnop-fun-dllimport -mthread @gol
701 -municode -mwin32 -mwindows -fno-set-stack-executable}
703 @emph{IA-64 Options}
704 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
705 -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata @gol
706 -mconstant-gp  -mauto-pic  -mfused-madd @gol
707 -minline-float-divide-min-latency @gol
708 -minline-float-divide-max-throughput @gol
709 -mno-inline-float-divide @gol
710 -minline-int-divide-min-latency @gol
711 -minline-int-divide-max-throughput  @gol
712 -mno-inline-int-divide @gol
713 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
714 -mno-inline-sqrt @gol
715 -mdwarf2-asm -mearly-stop-bits @gol
716 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
717 -mtune=@var{cpu-type} -milp32 -mlp64 @gol
718 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol
719 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
720 -msched-spec-ldc -msched-spec-control-ldc @gol
721 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol
722 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol
723 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol
724 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}}
726 @emph{LM32 Options}
727 @gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
728 -msign-extend-enabled -muser-enabled}
730 @emph{M32R/D Options}
731 @gccoptlist{-m32r2 -m32rx -m32r @gol
732 -mdebug @gol
733 -malign-loops -mno-align-loops @gol
734 -missue-rate=@var{number} @gol
735 -mbranch-cost=@var{number} @gol
736 -mmodel=@var{code-size-model-type} @gol
737 -msdata=@var{sdata-type} @gol
738 -mno-flush-func -mflush-func=@var{name} @gol
739 -mno-flush-trap -mflush-trap=@var{number} @gol
740 -G @var{num}}
742 @emph{M32C Options}
743 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
745 @emph{M680x0 Options}
746 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
747 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
748 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
749 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
750 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
751 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
752 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
753 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
754 -mxgot -mno-xgot}
756 @emph{MCore Options}
757 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
758 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
759 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
760 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
761 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
763 @emph{MeP Options}
764 @gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol
765 -mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol
766 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol
767 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol
768 -mtiny=@var{n}}
770 @emph{MicroBlaze Options}
771 @gccoptlist{-msoft-float -mhard-float -msmall-divides -mcpu=@var{cpu} @gol
772 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift @gol
773 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss @gol
774 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt @gol
775 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-@var{app-model}}
777 @emph{MIPS Options}
778 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
779 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 @gol
780 -mips64  -mips64r2  -mips64r3  -mips64r5 @gol
781 -mips16  -mno-mips16  -mflip-mips16 @gol
782 -minterlink-compressed -mno-interlink-compressed @gol
783 -minterlink-mips16  -mno-interlink-mips16 @gol
784 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
785 -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
786 -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
787 -mno-float  -msingle-float  -mdouble-float @gol
788 -mabs=@var{mode}  -mnan=@var{encoding} @gol
789 -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
790 -mmcu -mmno-mcu @gol
791 -meva -mno-eva @gol
792 -mvirt -mno-virt @gol
793 -mxpa -mno-xpa @gol
794 -mmicromips -mno-micromips @gol
795 -mfpu=@var{fpu-type} @gol
796 -msmartmips  -mno-smartmips @gol
797 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
798 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
799 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
800 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
801 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
802 -membedded-data  -mno-embedded-data @gol
803 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
804 -mcode-readable=@var{setting} @gol
805 -msplit-addresses  -mno-split-addresses @gol
806 -mexplicit-relocs  -mno-explicit-relocs @gol
807 -mcheck-zero-division  -mno-check-zero-division @gol
808 -mdivide-traps  -mdivide-breaks @gol
809 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
810 -mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp @gol
811 -mfix-24k -mno-fix-24k @gol
812 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
813 -mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000 @gol
814 -mfix-vr4120  -mno-fix-vr4120 @gol
815 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
816 -mflush-func=@var{func}  -mno-flush-func @gol
817 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
818 -mfp-exceptions -mno-fp-exceptions @gol
819 -mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol
820 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address}
822 @emph{MMIX Options}
823 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
824 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
825 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
826 -mno-base-addresses  -msingle-exit  -mno-single-exit}
828 @emph{MN10300 Options}
829 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
830 -mno-am33 -mam33 -mam33-2 -mam34 @gol
831 -mtune=@var{cpu-type} @gol
832 -mreturn-pointer-on-d0 @gol
833 -mno-crt0  -mrelax -mliw -msetlb}
835 @emph{Moxie Options}
836 @gccoptlist{-meb -mel -mno-crt0}
838 @emph{MSP430 Options}
839 @gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
840 -mhwmult=}
842 @emph{NDS32 Options}
843 @gccoptlist{-mbig-endian -mlittle-endian @gol
844 -mreduced-regs -mfull-regs @gol
845 -mcmov -mno-cmov @gol
846 -mperf-ext -mno-perf-ext @gol
847 -mv3push -mno-v3push @gol
848 -m16bit -mno-16bit @gol
849 -mgp-direct -mno-gp-direct @gol
850 -misr-vector-size=@var{num} @gol
851 -mcache-block-size=@var{num} @gol
852 -march=@var{arch} @gol
853 -mforce-fp-as-gp -mforbid-fp-as-gp @gol
854 -mex9 -mctor-dtor -mrelax}
856 @emph{Nios II Options}
857 @gccoptlist{-G @var{num} -mgpopt -mno-gpopt -mel -meb @gol
858 -mno-bypass-cache -mbypass-cache @gol
859 -mno-cache-volatile -mcache-volatile @gol
860 -mno-fast-sw-div -mfast-sw-div @gol
861 -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div @gol
862 -mcustom-@var{insn}=@var{N} -mno-custom-@var{insn} @gol
863 -mcustom-fpu-cfg=@var{name} @gol
864 -mhal -msmallc -msys-crt0=@var{name} -msys-lib=@var{name}}
866 @emph{PDP-11 Options}
867 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
868 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
869 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
870 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
871 -mbranch-expensive  -mbranch-cheap @gol
872 -munix-asm  -mdec-asm}
874 @emph{picoChip Options}
875 @gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} @gol
876 -msymbol-as-address -mno-inefficient-warnings}
878 @emph{PowerPC Options}
879 See RS/6000 and PowerPC Options.
881 @emph{RL78 Options}
882 @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=rl78 -m64bit-doubles -m32bit-doubles}
884 @emph{RS/6000 and PowerPC Options}
885 @gccoptlist{-mcpu=@var{cpu-type} @gol
886 -mtune=@var{cpu-type} @gol
887 -mcmodel=@var{code-model} @gol
888 -mpowerpc64 @gol
889 -maltivec  -mno-altivec @gol
890 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
891 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
892 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd @gol
893 -mfprnd  -mno-fprnd @gol
894 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
895 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
896 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
897 -malign-power  -malign-natural @gol
898 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
899 -msingle-float -mdouble-float -msimple-fpu @gol
900 -mstring  -mno-string  -mupdate  -mno-update @gol
901 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
902 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
903 -mstrict-align  -mno-strict-align  -mrelocatable @gol
904 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
905 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
906 -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base @gol
907 -mprioritize-restricted-insns=@var{priority} @gol
908 -msched-costly-dep=@var{dependence_type} @gol
909 -minsert-sched-nops=@var{scheme} @gol
910 -mcall-sysv  -mcall-netbsd @gol
911 -maix-struct-return  -msvr4-struct-return @gol
912 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
913 -mblock-move-inline-limit=@var{num} @gol
914 -misel -mno-isel @gol
915 -misel=yes  -misel=no @gol
916 -mspe -mno-spe @gol
917 -mspe=yes  -mspe=no @gol
918 -mpaired @gol
919 -mgen-cell-microcode -mwarn-cell-microcode @gol
920 -mvrsave -mno-vrsave @gol
921 -mmulhw -mno-mulhw @gol
922 -mdlmzb -mno-dlmzb @gol
923 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
924 -mprototype  -mno-prototype @gol
925 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
926 -msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread @gol
927 -mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision @gol
928 -mno-recip-precision @gol
929 -mveclibabi=@var{type} -mfriz -mno-friz @gol
930 -mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol
931 -msave-toc-indirect -mno-save-toc-indirect @gol
932 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol
933 -mcrypto -mno-crypto -mdirect-move -mno-direct-move @gol
934 -mquad-memory -mno-quad-memory @gol
935 -mquad-memory-atomic -mno-quad-memory-atomic @gol
936 -mcompat-align-parm -mno-compat-align-parm}
938 @emph{RX Options}
939 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
940 -mcpu=@gol
941 -mbig-endian-data -mlittle-endian-data @gol
942 -msmall-data @gol
943 -msim  -mno-sim@gol
944 -mas100-syntax -mno-as100-syntax@gol
945 -mrelax@gol
946 -mmax-constant-size=@gol
947 -mint-register=@gol
948 -mpid@gol
949 -mno-warn-multiple-fast-interrupts@gol
950 -msave-acc-in-interrupts}
952 @emph{S/390 and zSeries Options}
953 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
954 -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
955 -mlong-double-64 -mlong-double-128 @gol
956 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
957 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
958 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
959 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
960 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard @gol
961 -mhotpatch[=@var{halfwords}] -mno-hotpatch}
963 @emph{Score Options}
964 @gccoptlist{-meb -mel @gol
965 -mnhwloop @gol
966 -muls @gol
967 -mmac @gol
968 -mscore5 -mscore5u -mscore7 -mscore7d}
970 @emph{SH Options}
971 @gccoptlist{-m1  -m2  -m2e @gol
972 -m2a-nofpu -m2a-single-only -m2a-single -m2a @gol
973 -m3  -m3e @gol
974 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
975 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
976 -m5-64media  -m5-64media-nofpu @gol
977 -m5-32media  -m5-32media-nofpu @gol
978 -m5-compact  -m5-compact-nofpu @gol
979 -mb  -ml  -mdalign  -mrelax @gol
980 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
981 -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct @gol
982 -mspace -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
983 -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
984 -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
985 -maccumulate-outgoing-args -minvalid-symbols @gol
986 -matomic-model=@var{atomic-model} @gol
987 -mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch @gol
988 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra @gol
989 -mpretend-cmove -mtas}
991 @emph{Solaris 2 Options}
992 @gccoptlist{-mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text @gol
993 -pthreads -pthread}
995 @emph{SPARC Options}
996 @gccoptlist{-mcpu=@var{cpu-type} @gol
997 -mtune=@var{cpu-type} @gol
998 -mcmodel=@var{code-model} @gol
999 -mmemory-model=@var{mem-model} @gol
1000 -m32  -m64  -mapp-regs  -mno-app-regs @gol
1001 -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
1002 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
1003 -mhard-quad-float  -msoft-quad-float @gol
1004 -mstack-bias  -mno-stack-bias @gol
1005 -munaligned-doubles  -mno-unaligned-doubles @gol
1006 -muser-mode  -mno-user-mode @gol
1007 -mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
1008 -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
1009 -mcbcond -mno-cbcond @gol
1010 -mfmaf  -mno-fmaf  -mpopc  -mno-popc @gol
1011 -mfix-at697f -mfix-ut699}
1013 @emph{SPU Options}
1014 @gccoptlist{-mwarn-reloc -merror-reloc @gol
1015 -msafe-dma -munsafe-dma @gol
1016 -mbranch-hints @gol
1017 -msmall-mem -mlarge-mem -mstdmain @gol
1018 -mfixed-range=@var{register-range} @gol
1019 -mea32 -mea64 @gol
1020 -maddress-space-conversion -mno-address-space-conversion @gol
1021 -mcache-size=@var{cache-size} @gol
1022 -matomic-updates -mno-atomic-updates}
1024 @emph{System V Options}
1025 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
1027 @emph{TILE-Gx Options}
1028 @gccoptlist{-mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian @gol
1029 -mcmodel=@var{code-model}}
1031 @emph{TILEPro Options}
1032 @gccoptlist{-mcpu=@var{cpu} -m32}
1034 @emph{V850 Options}
1035 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
1036 -mprolog-function  -mno-prolog-function  -mspace @gol
1037 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
1038 -mapp-regs  -mno-app-regs @gol
1039 -mdisable-callt  -mno-disable-callt @gol
1040 -mv850e2v3 -mv850e2 -mv850e1 -mv850es @gol
1041 -mv850e -mv850 -mv850e3v5 @gol
1042 -mloop @gol
1043 -mrelax @gol
1044 -mlong-jumps @gol
1045 -msoft-float @gol
1046 -mhard-float @gol
1047 -mgcc-abi @gol
1048 -mrh850-abi @gol
1049 -mbig-switch}
1051 @emph{VAX Options}
1052 @gccoptlist{-mg  -mgnu  -munix}
1054 @emph{VMS Options}
1055 @gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64 @gol
1056 -mpointer-size=@var{size}}
1058 @emph{VxWorks Options}
1059 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
1060 -Xbind-lazy  -Xbind-now}
1062 @emph{x86-64 Options}
1063 See i386 and x86-64 Options.
1065 @emph{Xstormy16 Options}
1066 @gccoptlist{-msim}
1068 @emph{Xtensa Options}
1069 @gccoptlist{-mconst16 -mno-const16 @gol
1070 -mfused-madd  -mno-fused-madd @gol
1071 -mforce-no-pic @gol
1072 -mserialize-volatile  -mno-serialize-volatile @gol
1073 -mtext-section-literals  -mno-text-section-literals @gol
1074 -mtarget-align  -mno-target-align @gol
1075 -mlongcalls  -mno-longcalls}
1077 @emph{zSeries Options}
1078 See S/390 and zSeries Options.
1080 @item Code Generation Options
1081 @xref{Code Gen Options,,Options for Code Generation Conventions}.
1082 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
1083 -ffixed-@var{reg}  -fexceptions @gol
1084 -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
1085 -fasynchronous-unwind-tables @gol
1086 -fno-gnu-unique @gol
1087 -finhibit-size-directive  -finstrument-functions @gol
1088 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
1089 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
1090 -fno-common  -fno-ident @gol
1091 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
1092 -fno-jump-tables @gol
1093 -frecord-gcc-switches @gol
1094 -freg-struct-return  -fshort-enums @gol
1095 -fshort-double  -fshort-wchar @gol
1096 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
1097 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
1098 -fno-stack-limit -fsplit-stack @gol
1099 -fleading-underscore  -ftls-model=@var{model} @gol
1100 -fstack-reuse=@var{reuse_level} @gol
1101 -ftrapv  -fwrapv  -fbounds-check @gol
1102 -fvisibility -fstrict-volatile-bitfields -fsync-libcalls}
1103 @end table
1106 @node Overall Options
1107 @section Options Controlling the Kind of Output
1109 Compilation can involve up to four stages: preprocessing, compilation
1110 proper, assembly and linking, always in that order.  GCC is capable of
1111 preprocessing and compiling several files either into several
1112 assembler input files, or into one assembler input file; then each
1113 assembler input file produces an object file, and linking combines all
1114 the object files (those newly compiled, and those specified as input)
1115 into an executable file.
1117 @cindex file name suffix
1118 For any given input file, the file name suffix determines what kind of
1119 compilation is done:
1121 @table @gcctabopt
1122 @item @var{file}.c
1123 C source code that must be preprocessed.
1125 @item @var{file}.i
1126 C source code that should not be preprocessed.
1128 @item @var{file}.ii
1129 C++ source code that should not be preprocessed.
1131 @item @var{file}.m
1132 Objective-C source code.  Note that you must link with the @file{libobjc}
1133 library to make an Objective-C program work.
1135 @item @var{file}.mi
1136 Objective-C source code that should not be preprocessed.
1138 @item @var{file}.mm
1139 @itemx @var{file}.M
1140 Objective-C++ source code.  Note that you must link with the @file{libobjc}
1141 library to make an Objective-C++ program work.  Note that @samp{.M} refers
1142 to a literal capital M@.
1144 @item @var{file}.mii
1145 Objective-C++ source code that should not be preprocessed.
1147 @item @var{file}.h
1148 C, C++, Objective-C or Objective-C++ header file to be turned into a
1149 precompiled header (default), or C, C++ header file to be turned into an
1150 Ada spec (via the @option{-fdump-ada-spec} switch).
1152 @item @var{file}.cc
1153 @itemx @var{file}.cp
1154 @itemx @var{file}.cxx
1155 @itemx @var{file}.cpp
1156 @itemx @var{file}.CPP
1157 @itemx @var{file}.c++
1158 @itemx @var{file}.C
1159 C++ source code that must be preprocessed.  Note that in @samp{.cxx},
1160 the last two letters must both be literally @samp{x}.  Likewise,
1161 @samp{.C} refers to a literal capital C@.
1163 @item @var{file}.mm
1164 @itemx @var{file}.M
1165 Objective-C++ source code that must be preprocessed.
1167 @item @var{file}.mii
1168 Objective-C++ source code that should not be preprocessed.
1170 @item @var{file}.hh
1171 @itemx @var{file}.H
1172 @itemx @var{file}.hp
1173 @itemx @var{file}.hxx
1174 @itemx @var{file}.hpp
1175 @itemx @var{file}.HPP
1176 @itemx @var{file}.h++
1177 @itemx @var{file}.tcc
1178 C++ header file to be turned into a precompiled header or Ada spec.
1180 @item @var{file}.f
1181 @itemx @var{file}.for
1182 @itemx @var{file}.ftn
1183 Fixed form Fortran source code that should not be preprocessed.
1185 @item @var{file}.F
1186 @itemx @var{file}.FOR
1187 @itemx @var{file}.fpp
1188 @itemx @var{file}.FPP
1189 @itemx @var{file}.FTN
1190 Fixed form Fortran source code that must be preprocessed (with the traditional
1191 preprocessor).
1193 @item @var{file}.f90
1194 @itemx @var{file}.f95
1195 @itemx @var{file}.f03
1196 @itemx @var{file}.f08
1197 Free form Fortran source code that should not be preprocessed.
1199 @item @var{file}.F90
1200 @itemx @var{file}.F95
1201 @itemx @var{file}.F03
1202 @itemx @var{file}.F08
1203 Free form Fortran source code that must be preprocessed (with the
1204 traditional preprocessor).
1206 @item @var{file}.go
1207 Go source code.
1209 @c FIXME: Descriptions of Java file types.
1210 @c @var{file}.java
1211 @c @var{file}.class
1212 @c @var{file}.zip
1213 @c @var{file}.jar
1215 @item @var{file}.ads
1216 Ada source code file that contains a library unit declaration (a
1217 declaration of a package, subprogram, or generic, or a generic
1218 instantiation), or a library unit renaming declaration (a package,
1219 generic, or subprogram renaming declaration).  Such files are also
1220 called @dfn{specs}.
1222 @item @var{file}.adb
1223 Ada source code file containing a library unit body (a subprogram or
1224 package body).  Such files are also called @dfn{bodies}.
1226 @c GCC also knows about some suffixes for languages not yet included:
1227 @c Pascal:
1228 @c @var{file}.p
1229 @c @var{file}.pas
1230 @c Ratfor:
1231 @c @var{file}.r
1233 @item @var{file}.s
1234 Assembler code.
1236 @item @var{file}.S
1237 @itemx @var{file}.sx
1238 Assembler code that must be preprocessed.
1240 @item @var{other}
1241 An object file to be fed straight into linking.
1242 Any file name with no recognized suffix is treated this way.
1243 @end table
1245 @opindex x
1246 You can specify the input language explicitly with the @option{-x} option:
1248 @table @gcctabopt
1249 @item -x @var{language}
1250 Specify explicitly the @var{language} for the following input files
1251 (rather than letting the compiler choose a default based on the file
1252 name suffix).  This option applies to all following input files until
1253 the next @option{-x} option.  Possible values for @var{language} are:
1254 @smallexample
1255 c  c-header  cpp-output
1256 c++  c++-header  c++-cpp-output
1257 objective-c  objective-c-header  objective-c-cpp-output
1258 objective-c++ objective-c++-header objective-c++-cpp-output
1259 assembler  assembler-with-cpp
1261 f77  f77-cpp-input f95  f95-cpp-input
1263 java
1264 @end smallexample
1266 @item -x none
1267 Turn off any specification of a language, so that subsequent files are
1268 handled according to their file name suffixes (as they are if @option{-x}
1269 has not been used at all).
1271 @item -pass-exit-codes
1272 @opindex pass-exit-codes
1273 Normally the @command{gcc} program exits with the code of 1 if any
1274 phase of the compiler returns a non-success return code.  If you specify
1275 @option{-pass-exit-codes}, the @command{gcc} program instead returns with
1276 the numerically highest error produced by any phase returning an error
1277 indication.  The C, C++, and Fortran front ends return 4 if an internal
1278 compiler error is encountered.
1279 @end table
1281 If you only want some of the stages of compilation, you can use
1282 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1283 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1284 @command{gcc} is to stop.  Note that some combinations (for example,
1285 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1287 @table @gcctabopt
1288 @item -c
1289 @opindex c
1290 Compile or assemble the source files, but do not link.  The linking
1291 stage simply is not done.  The ultimate output is in the form of an
1292 object file for each source file.
1294 By default, the object file name for a source file is made by replacing
1295 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1297 Unrecognized input files, not requiring compilation or assembly, are
1298 ignored.
1300 @item -S
1301 @opindex S
1302 Stop after the stage of compilation proper; do not assemble.  The output
1303 is in the form of an assembler code file for each non-assembler input
1304 file specified.
1306 By default, the assembler file name for a source file is made by
1307 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1309 Input files that don't require compilation are ignored.
1311 @item -E
1312 @opindex E
1313 Stop after the preprocessing stage; do not run the compiler proper.  The
1314 output is in the form of preprocessed source code, which is sent to the
1315 standard output.
1317 Input files that don't require preprocessing are ignored.
1319 @cindex output file option
1320 @item -o @var{file}
1321 @opindex o
1322 Place output in file @var{file}.  This applies to whatever
1323 sort of output is being produced, whether it be an executable file,
1324 an object file, an assembler file or preprocessed C code.
1326 If @option{-o} is not specified, the default is to put an executable
1327 file in @file{a.out}, the object file for
1328 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1329 assembler file in @file{@var{source}.s}, a precompiled header file in
1330 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1331 standard output.
1333 @item -v
1334 @opindex v
1335 Print (on standard error output) the commands executed to run the stages
1336 of compilation.  Also print the version number of the compiler driver
1337 program and of the preprocessor and the compiler proper.
1339 @item -###
1340 @opindex ###
1341 Like @option{-v} except the commands are not executed and arguments
1342 are quoted unless they contain only alphanumeric characters or @code{./-_}.
1343 This is useful for shell scripts to capture the driver-generated command lines.
1345 @item -pipe
1346 @opindex pipe
1347 Use pipes rather than temporary files for communication between the
1348 various stages of compilation.  This fails to work on some systems where
1349 the assembler is unable to read from a pipe; but the GNU assembler has
1350 no trouble.
1352 @item --help
1353 @opindex help
1354 Print (on the standard output) a description of the command-line options
1355 understood by @command{gcc}.  If the @option{-v} option is also specified
1356 then @option{--help} is also passed on to the various processes
1357 invoked by @command{gcc}, so that they can display the command-line options
1358 they accept.  If the @option{-Wextra} option has also been specified
1359 (prior to the @option{--help} option), then command-line options that
1360 have no documentation associated with them are also displayed.
1362 @item --target-help
1363 @opindex target-help
1364 Print (on the standard output) a description of target-specific command-line
1365 options for each tool.  For some targets extra target-specific
1366 information may also be printed.
1368 @item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1369 Print (on the standard output) a description of the command-line
1370 options understood by the compiler that fit into all specified classes
1371 and qualifiers.  These are the supported classes:
1373 @table @asis
1374 @item @samp{optimizers}
1375 Display all of the optimization options supported by the
1376 compiler.
1378 @item @samp{warnings}
1379 Display all of the options controlling warning messages
1380 produced by the compiler.
1382 @item @samp{target}
1383 Display target-specific options.  Unlike the
1384 @option{--target-help} option however, target-specific options of the
1385 linker and assembler are not displayed.  This is because those
1386 tools do not currently support the extended @option{--help=} syntax.
1388 @item @samp{params}
1389 Display the values recognized by the @option{--param}
1390 option.
1392 @item @var{language}
1393 Display the options supported for @var{language}, where
1394 @var{language} is the name of one of the languages supported in this
1395 version of GCC@.
1397 @item @samp{common}
1398 Display the options that are common to all languages.
1399 @end table
1401 These are the supported qualifiers:
1403 @table @asis
1404 @item @samp{undocumented}
1405 Display only those options that are undocumented.
1407 @item @samp{joined}
1408 Display options taking an argument that appears after an equal
1409 sign in the same continuous piece of text, such as:
1410 @samp{--help=target}.
1412 @item @samp{separate}
1413 Display options taking an argument that appears as a separate word
1414 following the original option, such as: @samp{-o output-file}.
1415 @end table
1417 Thus for example to display all the undocumented target-specific
1418 switches supported by the compiler, use:
1420 @smallexample
1421 --help=target,undocumented
1422 @end smallexample
1424 The sense of a qualifier can be inverted by prefixing it with the
1425 @samp{^} character, so for example to display all binary warning
1426 options (i.e., ones that are either on or off and that do not take an
1427 argument) that have a description, use:
1429 @smallexample
1430 --help=warnings,^joined,^undocumented
1431 @end smallexample
1433 The argument to @option{--help=} should not consist solely of inverted
1434 qualifiers.
1436 Combining several classes is possible, although this usually
1437 restricts the output so much that there is nothing to display.  One
1438 case where it does work, however, is when one of the classes is
1439 @var{target}.  For example, to display all the target-specific
1440 optimization options, use:
1442 @smallexample
1443 --help=target,optimizers
1444 @end smallexample
1446 The @option{--help=} option can be repeated on the command line.  Each
1447 successive use displays its requested class of options, skipping
1448 those that have already been displayed.
1450 If the @option{-Q} option appears on the command line before the
1451 @option{--help=} option, then the descriptive text displayed by
1452 @option{--help=} is changed.  Instead of describing the displayed
1453 options, an indication is given as to whether the option is enabled,
1454 disabled or set to a specific value (assuming that the compiler
1455 knows this at the point where the @option{--help=} option is used).
1457 Here is a truncated example from the ARM port of @command{gcc}:
1459 @smallexample
1460   % gcc -Q -mabi=2 --help=target -c
1461   The following options are target specific:
1462   -mabi=                                2
1463   -mabort-on-noreturn                   [disabled]
1464   -mapcs                                [disabled]
1465 @end smallexample
1467 The output is sensitive to the effects of previous command-line
1468 options, so for example it is possible to find out which optimizations
1469 are enabled at @option{-O2} by using:
1471 @smallexample
1472 -Q -O2 --help=optimizers
1473 @end smallexample
1475 Alternatively you can discover which binary optimizations are enabled
1476 by @option{-O3} by using:
1478 @smallexample
1479 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1480 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1481 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1482 @end smallexample
1484 @item -no-canonical-prefixes
1485 @opindex no-canonical-prefixes
1486 Do not expand any symbolic links, resolve references to @samp{/../}
1487 or @samp{/./}, or make the path absolute when generating a relative
1488 prefix.
1490 @item --version
1491 @opindex version
1492 Display the version number and copyrights of the invoked GCC@.
1494 @item -wrapper
1495 @opindex wrapper
1496 Invoke all subcommands under a wrapper program.  The name of the
1497 wrapper program and its parameters are passed as a comma separated
1498 list.
1500 @smallexample
1501 gcc -c t.c -wrapper gdb,--args
1502 @end smallexample
1504 @noindent
1505 This invokes all subprograms of @command{gcc} under
1506 @samp{gdb --args}, thus the invocation of @command{cc1} is
1507 @samp{gdb --args cc1 @dots{}}.
1509 @item -fplugin=@var{name}.so
1510 @opindex fplugin
1511 Load the plugin code in file @var{name}.so, assumed to be a
1512 shared object to be dlopen'd by the compiler.  The base name of
1513 the shared object file is used to identify the plugin for the
1514 purposes of argument parsing (See
1515 @option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1516 Each plugin should define the callback functions specified in the
1517 Plugins API.
1519 @item -fplugin-arg-@var{name}-@var{key}=@var{value}
1520 @opindex fplugin-arg
1521 Define an argument called @var{key} with a value of @var{value}
1522 for the plugin called @var{name}.
1524 @item -fdump-ada-spec@r{[}-slim@r{]}
1525 @opindex fdump-ada-spec
1526 For C and C++ source and include files, generate corresponding Ada specs.
1527 @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
1528 GNAT User's Guide}, which provides detailed documentation on this feature.
1530 @item -fada-spec-parent=@var{unit}
1531 @opindex fada-spec-parent
1532 In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
1533 Ada specs as child units of parent @var{unit}.
1535 @item -fdump-go-spec=@var{file}
1536 @opindex fdump-go-spec
1537 For input files in any language, generate corresponding Go
1538 declarations in @var{file}.  This generates Go @code{const},
1539 @code{type}, @code{var}, and @code{func} declarations which may be a
1540 useful way to start writing a Go interface to code written in some
1541 other language.
1543 @include @value{srcdir}/../libiberty/at-file.texi
1544 @end table
1546 @node Invoking G++
1547 @section Compiling C++ Programs
1549 @cindex suffixes for C++ source
1550 @cindex C++ source file suffixes
1551 C++ source files conventionally use one of the suffixes @samp{.C},
1552 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1553 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1554 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1555 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1556 files with these names and compiles them as C++ programs even if you
1557 call the compiler the same way as for compiling C programs (usually
1558 with the name @command{gcc}).
1560 @findex g++
1561 @findex c++
1562 However, the use of @command{gcc} does not add the C++ library.
1563 @command{g++} is a program that calls GCC and automatically specifies linking
1564 against the C++ library.  It treats @samp{.c},
1565 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1566 files unless @option{-x} is used.  This program is also useful when
1567 precompiling a C header file with a @samp{.h} extension for use in C++
1568 compilations.  On many systems, @command{g++} is also installed with
1569 the name @command{c++}.
1571 @cindex invoking @command{g++}
1572 When you compile C++ programs, you may specify many of the same
1573 command-line options that you use for compiling programs in any
1574 language; or command-line options meaningful for C and related
1575 languages; or options that are meaningful only for C++ programs.
1576 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1577 explanations of options for languages related to C@.
1578 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1579 explanations of options that are meaningful only for C++ programs.
1581 @node C Dialect Options
1582 @section Options Controlling C Dialect
1583 @cindex dialect options
1584 @cindex language dialect options
1585 @cindex options, dialect
1587 The following options control the dialect of C (or languages derived
1588 from C, such as C++, Objective-C and Objective-C++) that the compiler
1589 accepts:
1591 @table @gcctabopt
1592 @cindex ANSI support
1593 @cindex ISO support
1594 @item -ansi
1595 @opindex ansi
1596 In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
1597 equivalent to @option{-std=c++98}.
1599 This turns off certain features of GCC that are incompatible with ISO
1600 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1601 such as the @code{asm} and @code{typeof} keywords, and
1602 predefined macros such as @code{unix} and @code{vax} that identify the
1603 type of system you are using.  It also enables the undesirable and
1604 rarely used ISO trigraph feature.  For the C compiler,
1605 it disables recognition of C++ style @samp{//} comments as well as
1606 the @code{inline} keyword.
1608 The alternate keywords @code{__asm__}, @code{__extension__},
1609 @code{__inline__} and @code{__typeof__} continue to work despite
1610 @option{-ansi}.  You would not want to use them in an ISO C program, of
1611 course, but it is useful to put them in header files that might be included
1612 in compilations done with @option{-ansi}.  Alternate predefined macros
1613 such as @code{__unix__} and @code{__vax__} are also available, with or
1614 without @option{-ansi}.
1616 The @option{-ansi} option does not cause non-ISO programs to be
1617 rejected gratuitously.  For that, @option{-Wpedantic} is required in
1618 addition to @option{-ansi}.  @xref{Warning Options}.
1620 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1621 option is used.  Some header files may notice this macro and refrain
1622 from declaring certain functions or defining certain macros that the
1623 ISO standard doesn't call for; this is to avoid interfering with any
1624 programs that might use these names for other things.
1626 Functions that are normally built in but do not have semantics
1627 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1628 functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1629 built-in functions provided by GCC}, for details of the functions
1630 affected.
1632 @item -std=
1633 @opindex std
1634 Determine the language standard. @xref{Standards,,Language Standards
1635 Supported by GCC}, for details of these standard versions.  This option
1636 is currently only supported when compiling C or C++.
1638 The compiler can accept several base standards, such as @samp{c90} or
1639 @samp{c++98}, and GNU dialects of those standards, such as
1640 @samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
1641 compiler accepts all programs following that standard plus those
1642 using GNU extensions that do not contradict it.  For example,
1643 @option{-std=c90} turns off certain features of GCC that are
1644 incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1645 keywords, but not other GNU extensions that do not have a meaning in
1646 ISO C90, such as omitting the middle term of a @code{?:}
1647 expression. On the other hand, when a GNU dialect of a standard is
1648 specified, all features supported by the compiler are enabled, even when
1649 those features change the meaning of the base standard.  As a result, some
1650 strict-conforming programs may be rejected.  The particular standard
1651 is used by @option{-Wpedantic} to identify which features are GNU
1652 extensions given that version of the standard. For example
1653 @option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
1654 comments, while @option{-std=gnu99 -Wpedantic} does not.
1656 A value for this option must be provided; possible values are
1658 @table @samp
1659 @item c90
1660 @itemx c89
1661 @itemx iso9899:1990
1662 Support all ISO C90 programs (certain GNU extensions that conflict
1663 with ISO C90 are disabled). Same as @option{-ansi} for C code.
1665 @item iso9899:199409
1666 ISO C90 as modified in amendment 1.
1668 @item c99
1669 @itemx c9x
1670 @itemx iso9899:1999
1671 @itemx iso9899:199x
1672 ISO C99.  This standard is substantially completely supported, modulo
1673 bugs, extended identifiers (supported except for corner cases when
1674 @option{-fextended-identifiers} is used) and floating-point issues
1675 (mainly but not entirely relating to optional C99 features from
1676 Annexes F and G).  See
1677 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1678 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1680 @item c11
1681 @itemx c1x
1682 @itemx iso9899:2011
1683 ISO C11, the 2011 revision of the ISO C standard.  This standard is
1684 substantially completely supported, modulo bugs, extended identifiers
1685 (supported except for corner cases when
1686 @option{-fextended-identifiers} is used), floating-point issues
1687 (mainly but not entirely relating to optional C11 features from
1688 Annexes F and G) and the optional Annexes K (Bounds-checking
1689 interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.
1691 @item gnu90
1692 @itemx gnu89
1693 GNU dialect of ISO C90 (including some C99 features). This
1694 is the default for C code.
1696 @item gnu99
1697 @itemx gnu9x
1698 GNU dialect of ISO C99.  The name @samp{gnu9x} is deprecated.
1700 @item gnu11
1701 @itemx gnu1x
1702 GNU dialect of ISO C11.  This is intended to become the default in a
1703 future release of GCC.  The name @samp{gnu1x} is deprecated.
1705 @item c++98
1706 @itemx c++03
1707 The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
1708 additional defect reports. Same as @option{-ansi} for C++ code.
1710 @item gnu++98
1711 @itemx gnu++03
1712 GNU dialect of @option{-std=c++98}.  This is the default for
1713 C++ code.
1715 @item c++11
1716 @itemx c++0x
1717 The 2011 ISO C++ standard plus amendments.
1718 The name @samp{c++0x} is deprecated.
1720 @item gnu++11
1721 @itemx gnu++0x
1722 GNU dialect of @option{-std=c++11}.
1723 The name @samp{gnu++0x} is deprecated.
1725 @item c++14
1726 @itemx c++1y
1727 The 2014 ISO C++ standard plus amendments.
1728 The name @samp{c++1y} is deprecated.
1730 @item gnu++14
1731 @itemx gnu++1y
1732 GNU dialect of @option{-std=c++14}.
1733 The name @samp{gnu++1y} is deprecated.
1735 @item c++1z
1736 The next revision of the ISO C++ standard, tentatively planned for
1737 2017.  Support is highly experimental, and will almost certainly
1738 change in incompatible ways in future releases.
1740 @item gnu++1z
1741 GNU dialect of @option{-std=c++1z}.  Support is highly experimental,
1742 and will almost certainly change in incompatible ways in future
1743 releases.
1744 @end table
1746 @item -fgnu89-inline
1747 @opindex fgnu89-inline
1748 The option @option{-fgnu89-inline} tells GCC to use the traditional
1749 GNU semantics for @code{inline} functions when in C99 mode.
1750 @xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1751 is accepted and ignored by GCC versions 4.1.3 up to but not including
1752 4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1753 C99 mode.  Using this option is roughly equivalent to adding the
1754 @code{gnu_inline} function attribute to all inline functions
1755 (@pxref{Function Attributes}).
1757 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1758 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1759 specifies the default behavior).  This option was first supported in
1760 GCC 4.3.  This option is not supported in @option{-std=c90} or
1761 @option{-std=gnu90} mode.
1763 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1764 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1765 in effect for @code{inline} functions.  @xref{Common Predefined
1766 Macros,,,cpp,The C Preprocessor}.
1768 @item -aux-info @var{filename}
1769 @opindex aux-info
1770 Output to the given filename prototyped declarations for all functions
1771 declared and/or defined in a translation unit, including those in header
1772 files.  This option is silently ignored in any language other than C@.
1774 Besides declarations, the file indicates, in comments, the origin of
1775 each declaration (source file and line), whether the declaration was
1776 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1777 @samp{O} for old, respectively, in the first character after the line
1778 number and the colon), and whether it came from a declaration or a
1779 definition (@samp{C} or @samp{F}, respectively, in the following
1780 character).  In the case of function definitions, a K&R-style list of
1781 arguments followed by their declarations is also provided, inside
1782 comments, after the declaration.
1784 @item -fallow-parameterless-variadic-functions
1785 @opindex fallow-parameterless-variadic-functions
1786 Accept variadic functions without named parameters.
1788 Although it is possible to define such a function, this is not very
1789 useful as it is not possible to read the arguments.  This is only
1790 supported for C as this construct is allowed by C++.
1792 @item -fno-asm
1793 @opindex fno-asm
1794 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1795 keyword, so that code can use these words as identifiers.  You can use
1796 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1797 instead.  @option{-ansi} implies @option{-fno-asm}.
1799 In C++, this switch only affects the @code{typeof} keyword, since
1800 @code{asm} and @code{inline} are standard keywords.  You may want to
1801 use the @option{-fno-gnu-keywords} flag instead, which has the same
1802 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1803 switch only affects the @code{asm} and @code{typeof} keywords, since
1804 @code{inline} is a standard keyword in ISO C99.
1806 @item -fno-builtin
1807 @itemx -fno-builtin-@var{function}
1808 @opindex fno-builtin
1809 @cindex built-in functions
1810 Don't recognize built-in functions that do not begin with
1811 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1812 functions provided by GCC}, for details of the functions affected,
1813 including those which are not built-in functions when @option{-ansi} or
1814 @option{-std} options for strict ISO C conformance are used because they
1815 do not have an ISO standard meaning.
1817 GCC normally generates special code to handle certain built-in functions
1818 more efficiently; for instance, calls to @code{alloca} may become single
1819 instructions which adjust the stack directly, and calls to @code{memcpy}
1820 may become inline copy loops.  The resulting code is often both smaller
1821 and faster, but since the function calls no longer appear as such, you
1822 cannot set a breakpoint on those calls, nor can you change the behavior
1823 of the functions by linking with a different library.  In addition,
1824 when a function is recognized as a built-in function, GCC may use
1825 information about that function to warn about problems with calls to
1826 that function, or to generate more efficient code, even if the
1827 resulting code still contains calls to that function.  For example,
1828 warnings are given with @option{-Wformat} for bad calls to
1829 @code{printf} when @code{printf} is built in and @code{strlen} is
1830 known not to modify global memory.
1832 With the @option{-fno-builtin-@var{function}} option
1833 only the built-in function @var{function} is
1834 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1835 function is named that is not built-in in this version of GCC, this
1836 option is ignored.  There is no corresponding
1837 @option{-fbuiltin-@var{function}} option; if you wish to enable
1838 built-in functions selectively when using @option{-fno-builtin} or
1839 @option{-ffreestanding}, you may define macros such as:
1841 @smallexample
1842 #define abs(n)          __builtin_abs ((n))
1843 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1844 @end smallexample
1846 @item -fhosted
1847 @opindex fhosted
1848 @cindex hosted environment
1850 Assert that compilation targets a hosted environment.  This implies
1851 @option{-fbuiltin}.  A hosted environment is one in which the
1852 entire standard library is available, and in which @code{main} has a return
1853 type of @code{int}.  Examples are nearly everything except a kernel.
1854 This is equivalent to @option{-fno-freestanding}.
1856 @item -ffreestanding
1857 @opindex ffreestanding
1858 @cindex hosted environment
1860 Assert that compilation targets a freestanding environment.  This
1861 implies @option{-fno-builtin}.  A freestanding environment
1862 is one in which the standard library may not exist, and program startup may
1863 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1864 This is equivalent to @option{-fno-hosted}.
1866 @xref{Standards,,Language Standards Supported by GCC}, for details of
1867 freestanding and hosted environments.
1869 @item -fopenmp
1870 @opindex fopenmp
1871 @cindex OpenMP parallel
1872 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1873 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1874 compiler generates parallel code according to the OpenMP Application
1875 Program Interface v4.0 @w{@uref{http://www.openmp.org/}}.  This option
1876 implies @option{-pthread}, and thus is only supported on targets that
1877 have support for @option{-pthread}. @option{-fopenmp} implies
1878 @option{-fopenmp-simd}.
1880 @item -fopenmp-simd
1881 @opindex fopenmp-simd
1882 @cindex OpenMP SIMD
1883 @cindex SIMD
1884 Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
1885 in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
1886 are ignored.
1888 @item -fcilkplus
1889 @opindex fcilkplus
1890 @cindex Enable Cilk Plus
1891 Enable the usage of Cilk Plus language extension features for C/C++.
1892 When the option @option{-fcilkplus} is specified, enable the usage of
1893 the Cilk Plus Language extension features for C/C++.  The present
1894 implementation follows ABI version 1.2.  This is an experimental
1895 feature that is only partially complete, and whose interface may
1896 change in future versions of GCC as the official specification
1897 changes.  Currently, all features but @code{_Cilk_for} have been
1898 implemented.
1900 @item -fgnu-tm
1901 @opindex fgnu-tm
1902 When the option @option{-fgnu-tm} is specified, the compiler
1903 generates code for the Linux variant of Intel's current Transactional
1904 Memory ABI specification document (Revision 1.1, May 6 2009).  This is
1905 an experimental feature whose interface may change in future versions
1906 of GCC, as the official specification changes.  Please note that not
1907 all architectures are supported for this feature.
1909 For more information on GCC's support for transactional memory,
1910 @xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
1911 Transactional Memory Library}.
1913 Note that the transactional memory feature is not supported with
1914 non-call exceptions (@option{-fnon-call-exceptions}).
1916 @item -fms-extensions
1917 @opindex fms-extensions
1918 Accept some non-standard constructs used in Microsoft header files.
1920 In C++ code, this allows member names in structures to be similar
1921 to previous types declarations.
1923 @smallexample
1924 typedef int UOW;
1925 struct ABC @{
1926   UOW UOW;
1928 @end smallexample
1930 Some cases of unnamed fields in structures and unions are only
1931 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1932 fields within structs/unions}, for details.
1934 Note that this option is off for all targets but i?86 and x86_64
1935 targets using ms-abi.
1936 @item -fplan9-extensions
1937 Accept some non-standard constructs used in Plan 9 code.
1939 This enables @option{-fms-extensions}, permits passing pointers to
1940 structures with anonymous fields to functions that expect pointers to
1941 elements of the type of the field, and permits referring to anonymous
1942 fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
1943 struct/union fields within structs/unions}, for details.  This is only
1944 supported for C, not C++.
1946 @item -trigraphs
1947 @opindex trigraphs
1948 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1949 options for strict ISO C conformance) implies @option{-trigraphs}.
1951 @cindex traditional C language
1952 @cindex C language, traditional
1953 @item -traditional
1954 @itemx -traditional-cpp
1955 @opindex traditional-cpp
1956 @opindex traditional
1957 Formerly, these options caused GCC to attempt to emulate a pre-standard
1958 C compiler.  They are now only supported with the @option{-E} switch.
1959 The preprocessor continues to support a pre-standard mode.  See the GNU
1960 CPP manual for details.
1962 @item -fcond-mismatch
1963 @opindex fcond-mismatch
1964 Allow conditional expressions with mismatched types in the second and
1965 third arguments.  The value of such an expression is void.  This option
1966 is not supported for C++.
1968 @item -flax-vector-conversions
1969 @opindex flax-vector-conversions
1970 Allow implicit conversions between vectors with differing numbers of
1971 elements and/or incompatible element types.  This option should not be
1972 used for new code.
1974 @item -funsigned-char
1975 @opindex funsigned-char
1976 Let the type @code{char} be unsigned, like @code{unsigned char}.
1978 Each kind of machine has a default for what @code{char} should
1979 be.  It is either like @code{unsigned char} by default or like
1980 @code{signed char} by default.
1982 Ideally, a portable program should always use @code{signed char} or
1983 @code{unsigned char} when it depends on the signedness of an object.
1984 But many programs have been written to use plain @code{char} and
1985 expect it to be signed, or expect it to be unsigned, depending on the
1986 machines they were written for.  This option, and its inverse, let you
1987 make such a program work with the opposite default.
1989 The type @code{char} is always a distinct type from each of
1990 @code{signed char} or @code{unsigned char}, even though its behavior
1991 is always just like one of those two.
1993 @item -fsigned-char
1994 @opindex fsigned-char
1995 Let the type @code{char} be signed, like @code{signed char}.
1997 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1998 the negative form of @option{-funsigned-char}.  Likewise, the option
1999 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
2001 @item -fsigned-bitfields
2002 @itemx -funsigned-bitfields
2003 @itemx -fno-signed-bitfields
2004 @itemx -fno-unsigned-bitfields
2005 @opindex fsigned-bitfields
2006 @opindex funsigned-bitfields
2007 @opindex fno-signed-bitfields
2008 @opindex fno-unsigned-bitfields
2009 These options control whether a bit-field is signed or unsigned, when the
2010 declaration does not use either @code{signed} or @code{unsigned}.  By
2011 default, such a bit-field is signed, because this is consistent: the
2012 basic integer types such as @code{int} are signed types.
2013 @end table
2015 @node C++ Dialect Options
2016 @section Options Controlling C++ Dialect
2018 @cindex compiler options, C++
2019 @cindex C++ options, command-line
2020 @cindex options, C++
2021 This section describes the command-line options that are only meaningful
2022 for C++ programs.  You can also use most of the GNU compiler options
2023 regardless of what language your program is in.  For example, you
2024 might compile a file @code{firstClass.C} like this:
2026 @smallexample
2027 g++ -g -frepo -O -c firstClass.C
2028 @end smallexample
2030 @noindent
2031 In this example, only @option{-frepo} is an option meant
2032 only for C++ programs; you can use the other options with any
2033 language supported by GCC@.
2035 Here is a list of options that are @emph{only} for compiling C++ programs:
2037 @table @gcctabopt
2039 @item -fabi-version=@var{n}
2040 @opindex fabi-version
2041 Use version @var{n} of the C++ ABI@.  The default is version 0.
2043 Version 0 refers to the version conforming most closely to
2044 the C++ ABI specification.  Therefore, the ABI obtained using version 0
2045 will change in different versions of G++ as ABI bugs are fixed.
2047 Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.  
2049 Version 2 is the version of the C++ ABI that first appeared in G++
2050 3.4, and was the default through G++ 4.9.
2052 Version 3 corrects an error in mangling a constant address as a
2053 template argument.
2055 Version 4, which first appeared in G++ 4.5, implements a standard
2056 mangling for vector types.
2058 Version 5, which first appeared in G++ 4.6, corrects the mangling of
2059 attribute const/volatile on function pointer types, decltype of a
2060 plain decl, and use of a function parameter in the declaration of
2061 another parameter.
2063 Version 6, which first appeared in G++ 4.7, corrects the promotion
2064 behavior of C++11 scoped enums and the mangling of template argument
2065 packs, const/static_cast, prefix ++ and --, and a class scope function
2066 used as a template argument.
2068 Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
2069 builtin type and corrects the mangling of lambdas in default argument
2070 scope.
2072 Version 8, which first appeared in G++ 4.9, corrects the substitution
2073 behavior of function types with function-cv-qualifiers.
2075 See also @option{-Wabi}.
2077 @item -fabi-compat-version=@var{n}
2078 @opindex fabi-compat-version
2079 Starting with GCC 4.5, on targets that support strong aliases, G++
2080 works around mangling changes by creating an alias with the correct
2081 mangled name when defining a symbol with an incorrect mangled name.
2082 This switch specifies which ABI version to use for the alias.
2084 With @option{-fabi-version=0} (the default), this defaults to 2.  If
2085 another ABI version is explicitly selected, this defaults to 0.
2087 The compatibility version is also set by @option{-Wabi=@var{n}}.
2089 @item -fno-access-control
2090 @opindex fno-access-control
2091 Turn off all access checking.  This switch is mainly useful for working
2092 around bugs in the access control code.
2094 @item -fcheck-new
2095 @opindex fcheck-new
2096 Check that the pointer returned by @code{operator new} is non-null
2097 before attempting to modify the storage allocated.  This check is
2098 normally unnecessary because the C++ standard specifies that
2099 @code{operator new} only returns @code{0} if it is declared
2100 @samp{throw()}, in which case the compiler always checks the
2101 return value even without this option.  In all other cases, when
2102 @code{operator new} has a non-empty exception specification, memory
2103 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
2104 @samp{new (nothrow)}.
2106 @item -fconstexpr-depth=@var{n}
2107 @opindex fconstexpr-depth
2108 Set the maximum nested evaluation depth for C++11 constexpr functions
2109 to @var{n}.  A limit is needed to detect endless recursion during
2110 constant expression evaluation.  The minimum specified by the standard
2111 is 512.
2113 @item -fdeduce-init-list
2114 @opindex fdeduce-init-list
2115 Enable deduction of a template type parameter as
2116 @code{std::initializer_list} from a brace-enclosed initializer list, i.e.@:
2118 @smallexample
2119 template <class T> auto forward(T t) -> decltype (realfn (t))
2121   return realfn (t);
2124 void f()
2126   forward(@{1,2@}); // call forward<std::initializer_list<int>>
2128 @end smallexample
2130 This deduction was implemented as a possible extension to the
2131 originally proposed semantics for the C++11 standard, but was not part
2132 of the final standard, so it is disabled by default.  This option is
2133 deprecated, and may be removed in a future version of G++.
2135 @item -ffriend-injection
2136 @opindex ffriend-injection
2137 Inject friend functions into the enclosing namespace, so that they are
2138 visible outside the scope of the class in which they are declared.
2139 Friend functions were documented to work this way in the old Annotated
2140 C++ Reference Manual, and versions of G++ before 4.1 always worked
2141 that way.  However, in ISO C++ a friend function that is not declared
2142 in an enclosing scope can only be found using argument dependent
2143 lookup.  This option causes friends to be injected as they were in
2144 earlier releases.
2146 This option is for compatibility, and may be removed in a future
2147 release of G++.
2149 @item -fno-elide-constructors
2150 @opindex fno-elide-constructors
2151 The C++ standard allows an implementation to omit creating a temporary
2152 that is only used to initialize another object of the same type.
2153 Specifying this option disables that optimization, and forces G++ to
2154 call the copy constructor in all cases.
2156 @item -fno-enforce-eh-specs
2157 @opindex fno-enforce-eh-specs
2158 Don't generate code to check for violation of exception specifications
2159 at run time.  This option violates the C++ standard, but may be useful
2160 for reducing code size in production builds, much like defining
2161 @samp{NDEBUG}.  This does not give user code permission to throw
2162 exceptions in violation of the exception specifications; the compiler
2163 still optimizes based on the specifications, so throwing an
2164 unexpected exception results in undefined behavior at run time.
2166 @item -fextern-tls-init
2167 @itemx -fno-extern-tls-init
2168 @opindex fextern-tls-init
2169 @opindex fno-extern-tls-init
2170 The C++11 and OpenMP standards allow @samp{thread_local} and
2171 @samp{threadprivate} variables to have dynamic (runtime)
2172 initialization.  To support this, any use of such a variable goes
2173 through a wrapper function that performs any necessary initialization.
2174 When the use and definition of the variable are in the same
2175 translation unit, this overhead can be optimized away, but when the
2176 use is in a different translation unit there is significant overhead
2177 even if the variable doesn't actually need dynamic initialization.  If
2178 the programmer can be sure that no use of the variable in a
2179 non-defining TU needs to trigger dynamic initialization (either
2180 because the variable is statically initialized, or a use of the
2181 variable in the defining TU will be executed before any uses in
2182 another TU), they can avoid this overhead with the
2183 @option{-fno-extern-tls-init} option.
2185 On targets that support symbol aliases, the default is
2186 @option{-fextern-tls-init}.  On targets that do not support symbol
2187 aliases, the default is @option{-fno-extern-tls-init}.
2189 @item -ffor-scope
2190 @itemx -fno-for-scope
2191 @opindex ffor-scope
2192 @opindex fno-for-scope
2193 If @option{-ffor-scope} is specified, the scope of variables declared in
2194 a @i{for-init-statement} is limited to the @samp{for} loop itself,
2195 as specified by the C++ standard.
2196 If @option{-fno-for-scope} is specified, the scope of variables declared in
2197 a @i{for-init-statement} extends to the end of the enclosing scope,
2198 as was the case in old versions of G++, and other (traditional)
2199 implementations of C++.
2201 If neither flag is given, the default is to follow the standard,
2202 but to allow and give a warning for old-style code that would
2203 otherwise be invalid, or have different behavior.
2205 @item -fno-gnu-keywords
2206 @opindex fno-gnu-keywords
2207 Do not recognize @code{typeof} as a keyword, so that code can use this
2208 word as an identifier.  You can use the keyword @code{__typeof__} instead.
2209 @option{-ansi} implies @option{-fno-gnu-keywords}.
2211 @item -fno-implicit-templates
2212 @opindex fno-implicit-templates
2213 Never emit code for non-inline templates that are instantiated
2214 implicitly (i.e.@: by use); only emit code for explicit instantiations.
2215 @xref{Template Instantiation}, for more information.
2217 @item -fno-implicit-inline-templates
2218 @opindex fno-implicit-inline-templates
2219 Don't emit code for implicit instantiations of inline templates, either.
2220 The default is to handle inlines differently so that compiles with and
2221 without optimization need the same set of explicit instantiations.
2223 @item -fno-implement-inlines
2224 @opindex fno-implement-inlines
2225 To save space, do not emit out-of-line copies of inline functions
2226 controlled by @samp{#pragma implementation}.  This causes linker
2227 errors if these functions are not inlined everywhere they are called.
2229 @item -fms-extensions
2230 @opindex fms-extensions
2231 Disable Wpedantic warnings about constructs used in MFC, such as implicit
2232 int and getting a pointer to member function via non-standard syntax.
2234 @item -fno-nonansi-builtins
2235 @opindex fno-nonansi-builtins
2236 Disable built-in declarations of functions that are not mandated by
2237 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
2238 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
2240 @item -fnothrow-opt
2241 @opindex fnothrow-opt
2242 Treat a @code{throw()} exception specification as if it were a
2243 @code{noexcept} specification to reduce or eliminate the text size
2244 overhead relative to a function with no exception specification.  If
2245 the function has local variables of types with non-trivial
2246 destructors, the exception specification actually makes the
2247 function smaller because the EH cleanups for those variables can be
2248 optimized away.  The semantic effect is that an exception thrown out of
2249 a function with such an exception specification results in a call
2250 to @code{terminate} rather than @code{unexpected}.
2252 @item -fno-operator-names
2253 @opindex fno-operator-names
2254 Do not treat the operator name keywords @code{and}, @code{bitand},
2255 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
2256 synonyms as keywords.
2258 @item -fno-optional-diags
2259 @opindex fno-optional-diags
2260 Disable diagnostics that the standard says a compiler does not need to
2261 issue.  Currently, the only such diagnostic issued by G++ is the one for
2262 a name having multiple meanings within a class.
2264 @item -fpermissive
2265 @opindex fpermissive
2266 Downgrade some diagnostics about nonconformant code from errors to
2267 warnings.  Thus, using @option{-fpermissive} allows some
2268 nonconforming code to compile.
2270 @item -fno-pretty-templates
2271 @opindex fno-pretty-templates
2272 When an error message refers to a specialization of a function
2273 template, the compiler normally prints the signature of the
2274 template followed by the template arguments and any typedefs or
2275 typenames in the signature (e.g. @code{void f(T) [with T = int]}
2276 rather than @code{void f(int)}) so that it's clear which template is
2277 involved.  When an error message refers to a specialization of a class
2278 template, the compiler omits any template arguments that match
2279 the default template arguments for that template.  If either of these
2280 behaviors make it harder to understand the error message rather than
2281 easier, you can use @option{-fno-pretty-templates} to disable them.
2283 @item -frepo
2284 @opindex frepo
2285 Enable automatic template instantiation at link time.  This option also
2286 implies @option{-fno-implicit-templates}.  @xref{Template
2287 Instantiation}, for more information.
2289 @item -fno-rtti
2290 @opindex fno-rtti
2291 Disable generation of information about every class with virtual
2292 functions for use by the C++ run-time type identification features
2293 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
2294 of the language, you can save some space by using this flag.  Note that
2295 exception handling uses the same information, but G++ generates it as
2296 needed. The @samp{dynamic_cast} operator can still be used for casts that
2297 do not require run-time type information, i.e.@: casts to @code{void *} or to
2298 unambiguous base classes.
2300 @item -fstats
2301 @opindex fstats
2302 Emit statistics about front-end processing at the end of the compilation.
2303 This information is generally only useful to the G++ development team.
2305 @item -fstrict-enums
2306 @opindex fstrict-enums
2307 Allow the compiler to optimize using the assumption that a value of
2308 enumerated type can only be one of the values of the enumeration (as
2309 defined in the C++ standard; basically, a value that can be
2310 represented in the minimum number of bits needed to represent all the
2311 enumerators).  This assumption may not be valid if the program uses a
2312 cast to convert an arbitrary integer value to the enumerated type.
2314 @item -ftemplate-backtrace-limit=@var{n}
2315 @opindex ftemplate-backtrace-limit
2316 Set the maximum number of template instantiation notes for a single
2317 warning or error to @var{n}.  The default value is 10.
2319 @item -ftemplate-depth=@var{n}
2320 @opindex ftemplate-depth
2321 Set the maximum instantiation depth for template classes to @var{n}.
2322 A limit on the template instantiation depth is needed to detect
2323 endless recursions during template class instantiation.  ANSI/ISO C++
2324 conforming programs must not rely on a maximum depth greater than 17
2325 (changed to 1024 in C++11).  The default value is 900, as the compiler
2326 can run out of stack space before hitting 1024 in some situations.
2328 @item -fno-threadsafe-statics
2329 @opindex fno-threadsafe-statics
2330 Do not emit the extra code to use the routines specified in the C++
2331 ABI for thread-safe initialization of local statics.  You can use this
2332 option to reduce code size slightly in code that doesn't need to be
2333 thread-safe.
2335 @item -fuse-cxa-atexit
2336 @opindex fuse-cxa-atexit
2337 Register destructors for objects with static storage duration with the
2338 @code{__cxa_atexit} function rather than the @code{atexit} function.
2339 This option is required for fully standards-compliant handling of static
2340 destructors, but only works if your C library supports
2341 @code{__cxa_atexit}.
2343 @item -fno-use-cxa-get-exception-ptr
2344 @opindex fno-use-cxa-get-exception-ptr
2345 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2346 causes @code{std::uncaught_exception} to be incorrect, but is necessary
2347 if the runtime routine is not available.
2349 @item -fvisibility-inlines-hidden
2350 @opindex fvisibility-inlines-hidden
2351 This switch declares that the user does not attempt to compare
2352 pointers to inline functions or methods where the addresses of the two functions
2353 are taken in different shared objects.
2355 The effect of this is that GCC may, effectively, mark inline methods with
2356 @code{__attribute__ ((visibility ("hidden")))} so that they do not
2357 appear in the export table of a DSO and do not require a PLT indirection
2358 when used within the DSO@.  Enabling this option can have a dramatic effect
2359 on load and link times of a DSO as it massively reduces the size of the
2360 dynamic export table when the library makes heavy use of templates.
2362 The behavior of this switch is not quite the same as marking the
2363 methods as hidden directly, because it does not affect static variables
2364 local to the function or cause the compiler to deduce that
2365 the function is defined in only one shared object.
2367 You may mark a method as having a visibility explicitly to negate the
2368 effect of the switch for that method.  For example, if you do want to
2369 compare pointers to a particular inline method, you might mark it as
2370 having default visibility.  Marking the enclosing class with explicit
2371 visibility has no effect.
2373 Explicitly instantiated inline methods are unaffected by this option
2374 as their linkage might otherwise cross a shared library boundary.
2375 @xref{Template Instantiation}.
2377 @item -fvisibility-ms-compat
2378 @opindex fvisibility-ms-compat
2379 This flag attempts to use visibility settings to make GCC's C++
2380 linkage model compatible with that of Microsoft Visual Studio.
2382 The flag makes these changes to GCC's linkage model:
2384 @enumerate
2385 @item
2386 It sets the default visibility to @code{hidden}, like
2387 @option{-fvisibility=hidden}.
2389 @item
2390 Types, but not their members, are not hidden by default.
2392 @item
2393 The One Definition Rule is relaxed for types without explicit
2394 visibility specifications that are defined in more than one
2395 shared object: those declarations are permitted if they are
2396 permitted when this option is not used.
2397 @end enumerate
2399 In new code it is better to use @option{-fvisibility=hidden} and
2400 export those classes that are intended to be externally visible.
2401 Unfortunately it is possible for code to rely, perhaps accidentally,
2402 on the Visual Studio behavior.
2404 Among the consequences of these changes are that static data members
2405 of the same type with the same name but defined in different shared
2406 objects are different, so changing one does not change the other;
2407 and that pointers to function members defined in different shared
2408 objects may not compare equal.  When this flag is given, it is a
2409 violation of the ODR to define types with the same name differently.
2411 @item -fvtable-verify=@var{std|preinit|none}
2412 @opindex fvtable-verify
2413 Turn on (or off, if using @option{-fvtable-verify=none}) the security
2414 feature that verifies at runtime, for every virtual call that is made, that
2415 the vtable pointer through which the call is made is valid for the type of
2416 the object, and has not been corrupted or overwritten.  If an invalid vtable
2417 pointer is detected (at runtime), an error is reported and execution of the
2418 program is immediately halted.
2420 This option causes runtime data structures to be built, at program start up,
2421 for verifying the vtable pointers.  The options @code{std} and @code{preinit}
2422 control the timing of when these data structures are built.  In both cases the
2423 data structures are built before execution reaches 'main'.  The
2424 @option{-fvtable-verify=std} causes these data structure to be built after the
2425 shared libraries have been loaded and initialized.
2426 @option{-fvtable-verify=preinit} causes them to be built before the shared
2427 libraries have been loaded and initialized.
2429 If this option appears multiple times in the compiler line, with different
2430 values specified, 'none' will take highest priority over both 'std' and
2431 'preinit'; 'preinit' will take priority over 'std'.
2433 @item -fvtv-debug
2434 @opindex (fvtv-debug)
2435 Causes debug versions of the runtime functions for the vtable verification 
2436 feature to be called.  This assumes the @option{-fvtable-verify=std} or
2437 @option{-fvtable-verify=preinit} has been used.  This flag will also cause the
2438 compiler to keep track of which vtable pointers it found for each class, and
2439 record that information in the file ``vtv_set_ptr_data.log'', in the dump
2440 file directory on the user's machine.
2442 Note:  This feature APPENDS data to the log file. If you want a fresh log
2443 file, be sure to delete any existing one.
2445 @item -fvtv-counts
2446 @opindex fvtv-counts
2447 This is a debugging flag.  When used in conjunction with
2448 @option{-fvtable-verify=std} or @option{-fvtable-verify=preinit}, this
2449 causes the compiler to keep track of the total number of virtual calls
2450 it encountered and the number of verifications it inserted.  It also
2451 counts the number of calls to certain runtime library functions
2452 that it inserts.  This information, for each compilation unit, is written
2453 to a file named ``vtv_count_data.log'', in the dump_file directory on
2454 the user's machine.   It also counts the size of the vtable pointer sets
2455 for each class, and writes this information to ``vtv_class_set_sizes.log''
2456 in the same directory.
2458 Note:  This feature APPENDS data to the log files.  To get a fresh log
2459 files, be sure to delete any existing ones.
2461 @item -fno-weak
2462 @opindex fno-weak
2463 Do not use weak symbol support, even if it is provided by the linker.
2464 By default, G++ uses weak symbols if they are available.  This
2465 option exists only for testing, and should not be used by end-users;
2466 it results in inferior code and has no benefits.  This option may
2467 be removed in a future release of G++.
2469 @item -nostdinc++
2470 @opindex nostdinc++
2471 Do not search for header files in the standard directories specific to
2472 C++, but do still search the other standard directories.  (This option
2473 is used when building the C++ library.)
2474 @end table
2476 In addition, these optimization, warning, and code generation options
2477 have meanings only for C++ programs:
2479 @table @gcctabopt
2480 @item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2481 @opindex Wabi
2482 @opindex Wno-abi
2483 When an explicit @option{-fabi-version=@var{n}} option is used, causes
2484 G++ to warn when it generates code that is probably not compatible with the
2485 vendor-neutral C++ ABI@.  Since G++ now defaults to
2486 @option{-fabi-version=0}, @option{-Wabi} has no effect unless either
2487 an older ABI version is selected (with @option{-fabi-version=@var{n}})
2488 or an older compatibility version is selected (with
2489 @option{-Wabi=@var{n}} or @option{-fabi-compat-version=@var{n}}).
2491 Although an effort has been made to warn about
2492 all such cases, there are probably some cases that are not warned about,
2493 even though G++ is generating incompatible code.  There may also be
2494 cases where warnings are emitted even though the code that is generated
2495 is compatible.
2497 You should rewrite your code to avoid these warnings if you are
2498 concerned about the fact that code generated by G++ may not be binary
2499 compatible with code generated by other compilers.
2501 @option{-Wabi} can also be used with an explicit version number to
2502 warn about compatibility with a particular @option{-fabi-version}
2503 level, e.g. @option{-Wabi=2} to warn about changes relative to
2504 @option{-fabi-version=2}.  Specifying a version number also sets
2505 @option{-fabi-compat-version=@var{n}}.
2507 The known incompatibilities in @option{-fabi-version=2} (which was the
2508 default from GCC 3.4 to 4.9) include:
2510 @itemize @bullet
2512 @item
2513 A template with a non-type template parameter of reference type was
2514 mangled incorrectly:
2515 @smallexample
2516 extern int N;
2517 template <int &> struct S @{@};
2518 void n (S<N>) @{2@}
2519 @end smallexample
2521 This was fixed in @option{-fabi-version=3}.
2523 @item
2524 SIMD vector types declared using @code{__attribute ((vector_size))} were
2525 mangled in a non-standard way that does not allow for overloading of
2526 functions taking vectors of different sizes.
2528 The mangling was changed in @option{-fabi-version=4}.
2530 @item
2531 @code{__attribute ((const))} and @code{noreturn} were mangled as type
2532 qualifiers, and @code{decltype} of a plain declaration was folded away.
2534 These mangling issues were fixed in @option{-fabi-version=5}.
2536 @item
2537 Scoped enumerators passed as arguments to a variadic function are
2538 promoted like unscoped enumerators, causing @samp{va_arg} to complain.
2539 On most targets this does not actually affect the parameter passing
2540 ABI, as there is no way to pass an argument smaller than @samp{int}.
2542 Also, the ABI changed the mangling of template argument packs,
2543 @code{const_cast}, @code{static_cast}, prefix increment/decrement, and
2544 a class scope function used as a template argument.
2546 These issues were corrected in @option{-fabi-version=6}.
2548 @item
2549 Lambdas in default argument scope were mangled incorrectly, and the
2550 ABI changed the mangling of nullptr_t.
2552 These issues were corrected in @option{-fabi-version=7}.
2554 @item
2555 When mangling a function type with function-cv-qualifiers, the
2556 un-qualified function type was incorrectly treated as a substitution
2557 candidate.
2559 This was fixed in @option{-fabi-version=8}.
2560 @end itemize
2562 It also warns about psABI-related changes.  The known psABI changes at this
2563 point include:
2565 @itemize @bullet
2567 @item
2568 For SysV/x86-64, unions with @code{long double} members are 
2569 passed in memory as specified in psABI.  For example:
2571 @smallexample
2572 union U @{
2573   long double ld;
2574   int i;
2576 @end smallexample
2578 @noindent
2579 @code{union U} is always passed in memory.
2581 @end itemize
2583 @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2584 @opindex Wctor-dtor-privacy
2585 @opindex Wno-ctor-dtor-privacy
2586 Warn when a class seems unusable because all the constructors or
2587 destructors in that class are private, and it has neither friends nor
2588 public static member functions.  Also warn if there are no non-private
2589 methods, and there's at least one private member function that isn't
2590 a constructor or destructor.
2592 @item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
2593 @opindex Wdelete-non-virtual-dtor
2594 @opindex Wno-delete-non-virtual-dtor
2595 Warn when @samp{delete} is used to destroy an instance of a class that
2596 has virtual functions and non-virtual destructor. It is unsafe to delete
2597 an instance of a derived class through a pointer to a base class if the
2598 base class does not have a virtual destructor.  This warning is enabled
2599 by @option{-Wall}.
2601 @item -Wliteral-suffix @r{(C++ and Objective-C++ only)}
2602 @opindex Wliteral-suffix
2603 @opindex Wno-literal-suffix
2604 Warn when a string or character literal is followed by a ud-suffix which does
2605 not begin with an underscore.  As a conforming extension, GCC treats such
2606 suffixes as separate preprocessing tokens in order to maintain backwards
2607 compatibility with code that uses formatting macros from @code{<inttypes.h>}.
2608 For example:
2610 @smallexample
2611 #define __STDC_FORMAT_MACROS
2612 #include <inttypes.h>
2613 #include <stdio.h>
2615 int main() @{
2616   int64_t i64 = 123;
2617   printf("My int64: %"PRId64"\n", i64);
2619 @end smallexample
2621 In this case, @code{PRId64} is treated as a separate preprocessing token.
2623 This warning is enabled by default.
2625 @item -Wnarrowing @r{(C++ and Objective-C++ only)}
2626 @opindex Wnarrowing
2627 @opindex Wno-narrowing
2628 Warn when a narrowing conversion prohibited by C++11 occurs within
2629 @samp{@{ @}}, e.g.
2631 @smallexample
2632 int i = @{ 2.2 @}; // error: narrowing from double to int
2633 @end smallexample
2635 This flag is included in @option{-Wall} and @option{-Wc++11-compat}.
2637 With @option{-std=c++11}, @option{-Wno-narrowing} suppresses for
2638 non-constants the diagnostic required by the standard.  Note that this
2639 does not affect the meaning of well-formed code; narrowing conversions
2640 are still considered ill-formed in SFINAE context.
2642 @item -Wnoexcept @r{(C++ and Objective-C++ only)}
2643 @opindex Wnoexcept
2644 @opindex Wno-noexcept
2645 Warn when a noexcept-expression evaluates to false because of a call
2646 to a function that does not have a non-throwing exception
2647 specification (i.e. @samp{throw()} or @samp{noexcept}) but is known by
2648 the compiler to never throw an exception.
2650 @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2651 @opindex Wnon-virtual-dtor
2652 @opindex Wno-non-virtual-dtor
2653 Warn when a class has virtual functions and an accessible non-virtual
2654 destructor itself or in an accessible polymorphic base class, in which
2655 case it is possible but unsafe to delete an instance of a derived
2656 class through a pointer to the class itself or base class.  This
2657 warning is automatically enabled if @option{-Weffc++} is specified.
2659 @item -Wreorder @r{(C++ and Objective-C++ only)}
2660 @opindex Wreorder
2661 @opindex Wno-reorder
2662 @cindex reordering, warning
2663 @cindex warning for reordering of member initializers
2664 Warn when the order of member initializers given in the code does not
2665 match the order in which they must be executed.  For instance:
2667 @smallexample
2668 struct A @{
2669   int i;
2670   int j;
2671   A(): j (0), i (1) @{ @}
2673 @end smallexample
2675 @noindent
2676 The compiler rearranges the member initializers for @samp{i}
2677 and @samp{j} to match the declaration order of the members, emitting
2678 a warning to that effect.  This warning is enabled by @option{-Wall}.
2680 @item -fext-numeric-literals @r{(C++ and Objective-C++ only)}
2681 @opindex fext-numeric-literals
2682 @opindex fno-ext-numeric-literals
2683 Accept imaginary, fixed-point, or machine-defined
2684 literal number suffixes as GNU extensions.
2685 When this option is turned off these suffixes are treated
2686 as C++11 user-defined literal numeric suffixes.
2687 This is on by default for all pre-C++11 dialects and all GNU dialects:
2688 @option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11},
2689 @option{-std=gnu++14}.
2690 This option is off by default
2691 for ISO C++11 onwards (@option{-std=c++11}, ...).
2692 @end table
2694 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2696 @table @gcctabopt
2697 @item -Weffc++ @r{(C++ and Objective-C++ only)}
2698 @opindex Weffc++
2699 @opindex Wno-effc++
2700 Warn about violations of the following style guidelines from Scott Meyers'
2701 @cite{Effective C++} series of books:
2703 @itemize @bullet
2704 @item
2705 Define a copy constructor and an assignment operator for classes
2706 with dynamically-allocated memory.
2708 @item
2709 Prefer initialization to assignment in constructors.
2711 @item
2712 Have @code{operator=} return a reference to @code{*this}.
2714 @item
2715 Don't try to return a reference when you must return an object.
2717 @item
2718 Distinguish between prefix and postfix forms of increment and
2719 decrement operators.
2721 @item
2722 Never overload @code{&&}, @code{||}, or @code{,}.
2724 @end itemize
2726 This option also enables @option{-Wnon-virtual-dtor}, which is also
2727 one of the effective C++ recommendations.  However, the check is
2728 extended to warn about the lack of virtual destructor in accessible
2729 non-polymorphic bases classes too.
2731 When selecting this option, be aware that the standard library
2732 headers do not obey all of these guidelines; use @samp{grep -v}
2733 to filter out those warnings.
2735 @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2736 @opindex Wstrict-null-sentinel
2737 @opindex Wno-strict-null-sentinel
2738 Warn about the use of an uncasted @code{NULL} as sentinel.  When
2739 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2740 to @code{__null}.  Although it is a null pointer constant rather than a
2741 null pointer, it is guaranteed to be of the same size as a pointer.
2742 But this use is not portable across different compilers.
2744 @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2745 @opindex Wno-non-template-friend
2746 @opindex Wnon-template-friend
2747 Disable warnings when non-templatized friend functions are declared
2748 within a template.  Since the advent of explicit template specification
2749 support in G++, if the name of the friend is an unqualified-id (i.e.,
2750 @samp{friend foo(int)}), the C++ language specification demands that the
2751 friend declare or define an ordinary, nontemplate function.  (Section
2752 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2753 could be interpreted as a particular specialization of a templatized
2754 function.  Because this non-conforming behavior is no longer the default
2755 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2756 check existing code for potential trouble spots and is on by default.
2757 This new compiler behavior can be turned off with
2758 @option{-Wno-non-template-friend}, which keeps the conformant compiler code
2759 but disables the helpful warning.
2761 @item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2762 @opindex Wold-style-cast
2763 @opindex Wno-old-style-cast
2764 Warn if an old-style (C-style) cast to a non-void type is used within
2765 a C++ program.  The new-style casts (@samp{dynamic_cast},
2766 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2767 less vulnerable to unintended effects and much easier to search for.
2769 @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2770 @opindex Woverloaded-virtual
2771 @opindex Wno-overloaded-virtual
2772 @cindex overloaded virtual function, warning
2773 @cindex warning for overloaded virtual function
2774 Warn when a function declaration hides virtual functions from a
2775 base class.  For example, in:
2777 @smallexample
2778 struct A @{
2779   virtual void f();
2782 struct B: public A @{
2783   void f(int);
2785 @end smallexample
2787 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2788 like:
2790 @smallexample
2791 B* b;
2792 b->f();
2793 @end smallexample
2795 @noindent
2796 fails to compile.
2798 @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2799 @opindex Wno-pmf-conversions
2800 @opindex Wpmf-conversions
2801 Disable the diagnostic for converting a bound pointer to member function
2802 to a plain pointer.
2804 @item -Wsign-promo @r{(C++ and Objective-C++ only)}
2805 @opindex Wsign-promo
2806 @opindex Wno-sign-promo
2807 Warn when overload resolution chooses a promotion from unsigned or
2808 enumerated type to a signed type, over a conversion to an unsigned type of
2809 the same size.  Previous versions of G++ tried to preserve
2810 unsignedness, but the standard mandates the current behavior.
2811 @end table
2813 @node Objective-C and Objective-C++ Dialect Options
2814 @section Options Controlling Objective-C and Objective-C++ Dialects
2816 @cindex compiler options, Objective-C and Objective-C++
2817 @cindex Objective-C and Objective-C++ options, command-line
2818 @cindex options, Objective-C and Objective-C++
2819 (NOTE: This manual does not describe the Objective-C and Objective-C++
2820 languages themselves.  @xref{Standards,,Language Standards
2821 Supported by GCC}, for references.)
2823 This section describes the command-line options that are only meaningful
2824 for Objective-C and Objective-C++ programs.  You can also use most of
2825 the language-independent GNU compiler options.
2826 For example, you might compile a file @code{some_class.m} like this:
2828 @smallexample
2829 gcc -g -fgnu-runtime -O -c some_class.m
2830 @end smallexample
2832 @noindent
2833 In this example, @option{-fgnu-runtime} is an option meant only for
2834 Objective-C and Objective-C++ programs; you can use the other options with
2835 any language supported by GCC@.
2837 Note that since Objective-C is an extension of the C language, Objective-C
2838 compilations may also use options specific to the C front-end (e.g.,
2839 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2840 C++-specific options (e.g., @option{-Wabi}).
2842 Here is a list of options that are @emph{only} for compiling Objective-C
2843 and Objective-C++ programs:
2845 @table @gcctabopt
2846 @item -fconstant-string-class=@var{class-name}
2847 @opindex fconstant-string-class
2848 Use @var{class-name} as the name of the class to instantiate for each
2849 literal string specified with the syntax @code{@@"@dots{}"}.  The default
2850 class name is @code{NXConstantString} if the GNU runtime is being used, and
2851 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
2852 @option{-fconstant-cfstrings} option, if also present, overrides the
2853 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2854 to be laid out as constant CoreFoundation strings.
2856 @item -fgnu-runtime
2857 @opindex fgnu-runtime
2858 Generate object code compatible with the standard GNU Objective-C
2859 runtime.  This is the default for most types of systems.
2861 @item -fnext-runtime
2862 @opindex fnext-runtime
2863 Generate output compatible with the NeXT runtime.  This is the default
2864 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2865 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2866 used.
2868 @item -fno-nil-receivers
2869 @opindex fno-nil-receivers
2870 Assume that all Objective-C message dispatches (@code{[receiver
2871 message:arg]}) in this translation unit ensure that the receiver is
2872 not @code{nil}.  This allows for more efficient entry points in the
2873 runtime to be used.  This option is only available in conjunction with
2874 the NeXT runtime and ABI version 0 or 1.
2876 @item -fobjc-abi-version=@var{n}
2877 @opindex fobjc-abi-version
2878 Use version @var{n} of the Objective-C ABI for the selected runtime.
2879 This option is currently supported only for the NeXT runtime.  In that
2880 case, Version 0 is the traditional (32-bit) ABI without support for
2881 properties and other Objective-C 2.0 additions.  Version 1 is the
2882 traditional (32-bit) ABI with support for properties and other
2883 Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
2884 nothing is specified, the default is Version 0 on 32-bit target
2885 machines, and Version 2 on 64-bit target machines.
2887 @item -fobjc-call-cxx-cdtors
2888 @opindex fobjc-call-cxx-cdtors
2889 For each Objective-C class, check if any of its instance variables is a
2890 C++ object with a non-trivial default constructor.  If so, synthesize a
2891 special @code{- (id) .cxx_construct} instance method which runs
2892 non-trivial default constructors on any such instance variables, in order,
2893 and then return @code{self}.  Similarly, check if any instance variable
2894 is a C++ object with a non-trivial destructor, and if so, synthesize a
2895 special @code{- (void) .cxx_destruct} method which runs
2896 all such default destructors, in reverse order.
2898 The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
2899 methods thusly generated only operate on instance variables
2900 declared in the current Objective-C class, and not those inherited
2901 from superclasses.  It is the responsibility of the Objective-C
2902 runtime to invoke all such methods in an object's inheritance
2903 hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
2904 by the runtime immediately after a new object instance is allocated;
2905 the @code{- (void) .cxx_destruct} methods are invoked immediately
2906 before the runtime deallocates an object instance.
2908 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2909 support for invoking the @code{- (id) .cxx_construct} and
2910 @code{- (void) .cxx_destruct} methods.
2912 @item -fobjc-direct-dispatch
2913 @opindex fobjc-direct-dispatch
2914 Allow fast jumps to the message dispatcher.  On Darwin this is
2915 accomplished via the comm page.
2917 @item -fobjc-exceptions
2918 @opindex fobjc-exceptions
2919 Enable syntactic support for structured exception handling in
2920 Objective-C, similar to what is offered by C++ and Java.  This option
2921 is required to use the Objective-C keywords @code{@@try},
2922 @code{@@throw}, @code{@@catch}, @code{@@finally} and
2923 @code{@@synchronized}.  This option is available with both the GNU
2924 runtime and the NeXT runtime (but not available in conjunction with
2925 the NeXT runtime on Mac OS X 10.2 and earlier).
2927 @item -fobjc-gc
2928 @opindex fobjc-gc
2929 Enable garbage collection (GC) in Objective-C and Objective-C++
2930 programs.  This option is only available with the NeXT runtime; the
2931 GNU runtime has a different garbage collection implementation that
2932 does not require special compiler flags.
2934 @item -fobjc-nilcheck
2935 @opindex fobjc-nilcheck
2936 For the NeXT runtime with version 2 of the ABI, check for a nil
2937 receiver in method invocations before doing the actual method call.
2938 This is the default and can be disabled using
2939 @option{-fno-objc-nilcheck}.  Class methods and super calls are never
2940 checked for nil in this way no matter what this flag is set to.
2941 Currently this flag does nothing when the GNU runtime, or an older
2942 version of the NeXT runtime ABI, is used.
2944 @item -fobjc-std=objc1
2945 @opindex fobjc-std
2946 Conform to the language syntax of Objective-C 1.0, the language
2947 recognized by GCC 4.0.  This only affects the Objective-C additions to
2948 the C/C++ language; it does not affect conformance to C/C++ standards,
2949 which is controlled by the separate C/C++ dialect option flags.  When
2950 this option is used with the Objective-C or Objective-C++ compiler,
2951 any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
2952 This is useful if you need to make sure that your Objective-C code can
2953 be compiled with older versions of GCC@.
2955 @item -freplace-objc-classes
2956 @opindex freplace-objc-classes
2957 Emit a special marker instructing @command{ld(1)} not to statically link in
2958 the resulting object file, and allow @command{dyld(1)} to load it in at
2959 run time instead.  This is used in conjunction with the Fix-and-Continue
2960 debugging mode, where the object file in question may be recompiled and
2961 dynamically reloaded in the course of program execution, without the need
2962 to restart the program itself.  Currently, Fix-and-Continue functionality
2963 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2964 and later.
2966 @item -fzero-link
2967 @opindex fzero-link
2968 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2969 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2970 compile time) with static class references that get initialized at load time,
2971 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2972 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2973 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2974 for individual class implementations to be modified during program execution.
2975 The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
2976 regardless of command-line options.
2978 @item -fno-local-ivars
2979 @opindex fno-local-ivars
2980 @opindex flocal-ivars
2981 By default instance variables in Objective-C can be accessed as if
2982 they were local variables from within the methods of the class they're
2983 declared in.  This can lead to shadowing between instance variables
2984 and other variables declared either locally inside a class method or
2985 globally with the same name.  Specifying the @option{-fno-local-ivars}
2986 flag disables this behavior thus avoiding variable shadowing issues.
2988 @item -fivar-visibility=@var{public|protected|private|package}
2989 @opindex fivar-visibility
2990 Set the default instance variable visibility to the specified option
2991 so that instance variables declared outside the scope of any access
2992 modifier directives default to the specified visibility.
2994 @item -gen-decls
2995 @opindex gen-decls
2996 Dump interface declarations for all classes seen in the source file to a
2997 file named @file{@var{sourcename}.decl}.
2999 @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
3000 @opindex Wassign-intercept
3001 @opindex Wno-assign-intercept
3002 Warn whenever an Objective-C assignment is being intercepted by the
3003 garbage collector.
3005 @item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
3006 @opindex Wno-protocol
3007 @opindex Wprotocol
3008 If a class is declared to implement a protocol, a warning is issued for
3009 every method in the protocol that is not implemented by the class.  The
3010 default behavior is to issue a warning for every method not explicitly
3011 implemented in the class, even if a method implementation is inherited
3012 from the superclass.  If you use the @option{-Wno-protocol} option, then
3013 methods inherited from the superclass are considered to be implemented,
3014 and no warning is issued for them.
3016 @item -Wselector @r{(Objective-C and Objective-C++ only)}
3017 @opindex Wselector
3018 @opindex Wno-selector
3019 Warn if multiple methods of different types for the same selector are
3020 found during compilation.  The check is performed on the list of methods
3021 in the final stage of compilation.  Additionally, a check is performed
3022 for each selector appearing in a @code{@@selector(@dots{})}
3023 expression, and a corresponding method for that selector has been found
3024 during compilation.  Because these checks scan the method table only at
3025 the end of compilation, these warnings are not produced if the final
3026 stage of compilation is not reached, for example because an error is
3027 found during compilation, or because the @option{-fsyntax-only} option is
3028 being used.
3030 @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
3031 @opindex Wstrict-selector-match
3032 @opindex Wno-strict-selector-match
3033 Warn if multiple methods with differing argument and/or return types are
3034 found for a given selector when attempting to send a message using this
3035 selector to a receiver of type @code{id} or @code{Class}.  When this flag
3036 is off (which is the default behavior), the compiler omits such warnings
3037 if any differences found are confined to types that share the same size
3038 and alignment.
3040 @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
3041 @opindex Wundeclared-selector
3042 @opindex Wno-undeclared-selector
3043 Warn if a @code{@@selector(@dots{})} expression referring to an
3044 undeclared selector is found.  A selector is considered undeclared if no
3045 method with that name has been declared before the
3046 @code{@@selector(@dots{})} expression, either explicitly in an
3047 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
3048 an @code{@@implementation} section.  This option always performs its
3049 checks as soon as a @code{@@selector(@dots{})} expression is found,
3050 while @option{-Wselector} only performs its checks in the final stage of
3051 compilation.  This also enforces the coding style convention
3052 that methods and selectors must be declared before being used.
3054 @item -print-objc-runtime-info
3055 @opindex print-objc-runtime-info
3056 Generate C header describing the largest structure that is passed by
3057 value, if any.
3059 @end table
3061 @node Language Independent Options
3062 @section Options to Control Diagnostic Messages Formatting
3063 @cindex options to control diagnostics formatting
3064 @cindex diagnostic messages
3065 @cindex message formatting
3067 Traditionally, diagnostic messages have been formatted irrespective of
3068 the output device's aspect (e.g.@: its width, @dots{}).  You can use the
3069 options described below
3070 to control the formatting algorithm for diagnostic messages, 
3071 e.g.@: how many characters per line, how often source location
3072 information should be reported.  Note that some language front ends may not
3073 honor these options.
3075 @table @gcctabopt
3076 @item -fmessage-length=@var{n}
3077 @opindex fmessage-length
3078 Try to format error messages so that they fit on lines of about @var{n}
3079 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
3080 the front ends supported by GCC@.  If @var{n} is zero, then no
3081 line-wrapping is done; each error message appears on a single
3082 line.
3084 @item -fdiagnostics-show-location=once
3085 @opindex fdiagnostics-show-location
3086 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
3087 reporter to emit source location information @emph{once}; that is, in
3088 case the message is too long to fit on a single physical line and has to
3089 be wrapped, the source location won't be emitted (as prefix) again,
3090 over and over, in subsequent continuation lines.  This is the default
3091 behavior.
3093 @item -fdiagnostics-show-location=every-line
3094 Only meaningful in line-wrapping mode.  Instructs the diagnostic
3095 messages reporter to emit the same source location information (as
3096 prefix) for physical lines that result from the process of breaking
3097 a message which is too long to fit on a single line.
3099 @item -fdiagnostics-color[=@var{WHEN}]
3100 @itemx -fno-diagnostics-color
3101 @opindex fdiagnostics-color
3102 @cindex highlight, color, colour
3103 @vindex GCC_COLORS @r{environment variable}
3104 Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
3105 or @samp{auto}.  The default is @samp{never} if @env{GCC_COLORS} environment
3106 variable isn't present in the environment, and @samp{auto} otherwise.
3107 @samp{auto} means to use color only when the standard error is a terminal.
3108 The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
3109 aliases for @option{-fdiagnostics-color=always} and
3110 @option{-fdiagnostics-color=never}, respectively.
3112 The colors are defined by the environment variable @env{GCC_COLORS}.
3113 Its value is a colon-separated list of capabilities and Select Graphic
3114 Rendition (SGR) substrings. SGR commands are interpreted by the
3115 terminal or terminal emulator.  (See the section in the documentation
3116 of your text terminal for permitted values and their meanings as
3117 character attributes.)  These substring values are integers in decimal
3118 representation and can be concatenated with semicolons.
3119 Common values to concatenate include
3120 @samp{1} for bold,
3121 @samp{4} for underline,
3122 @samp{5} for blink,
3123 @samp{7} for inverse,
3124 @samp{39} for default foreground color,
3125 @samp{30} to @samp{37} for foreground colors,
3126 @samp{90} to @samp{97} for 16-color mode foreground colors,
3127 @samp{38;5;0} to @samp{38;5;255}
3128 for 88-color and 256-color modes foreground colors,
3129 @samp{49} for default background color,
3130 @samp{40} to @samp{47} for background colors,
3131 @samp{100} to @samp{107} for 16-color mode background colors,
3132 and @samp{48;5;0} to @samp{48;5;255}
3133 for 88-color and 256-color modes background colors.
3135 The default @env{GCC_COLORS} is
3136 @samp{error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01}
3137 where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
3138 @samp{01;36} is bold cyan, @samp{01;32} is bold green and
3139 @samp{01} is bold. Setting @env{GCC_COLORS} to the empty
3140 string disables colors.
3141 Supported capabilities are as follows.
3143 @table @code
3144 @item error=
3145 @vindex error GCC_COLORS @r{capability}
3146 SGR substring for error: markers.
3148 @item warning=
3149 @vindex warning GCC_COLORS @r{capability}
3150 SGR substring for warning: markers.
3152 @item note=
3153 @vindex note GCC_COLORS @r{capability}
3154 SGR substring for note: markers.
3156 @item caret=
3157 @vindex caret GCC_COLORS @r{capability}
3158 SGR substring for caret line.
3160 @item locus=
3161 @vindex locus GCC_COLORS @r{capability}
3162 SGR substring for location information, @samp{file:line} or
3163 @samp{file:line:column} etc.
3165 @item quote=
3166 @vindex quote GCC_COLORS @r{capability}
3167 SGR substring for information printed within quotes.
3168 @end table
3170 @item -fno-diagnostics-show-option
3171 @opindex fno-diagnostics-show-option
3172 @opindex fdiagnostics-show-option
3173 By default, each diagnostic emitted includes text indicating the
3174 command-line option that directly controls the diagnostic (if such an
3175 option is known to the diagnostic machinery).  Specifying the
3176 @option{-fno-diagnostics-show-option} flag suppresses that behavior.
3178 @item -fno-diagnostics-show-caret
3179 @opindex fno-diagnostics-show-caret
3180 @opindex fdiagnostics-show-caret
3181 By default, each diagnostic emitted includes the original source line
3182 and a caret '^' indicating the column.  This option suppresses this
3183 information.
3185 @end table
3187 @node Warning Options
3188 @section Options to Request or Suppress Warnings
3189 @cindex options to control warnings
3190 @cindex warning messages
3191 @cindex messages, warning
3192 @cindex suppressing warnings
3194 Warnings are diagnostic messages that report constructions that
3195 are not inherently erroneous but that are risky or suggest there
3196 may have been an error.
3198 The following language-independent options do not enable specific
3199 warnings but control the kinds of diagnostics produced by GCC@.
3201 @table @gcctabopt
3202 @cindex syntax checking
3203 @item -fsyntax-only
3204 @opindex fsyntax-only
3205 Check the code for syntax errors, but don't do anything beyond that.
3207 @item -fmax-errors=@var{n}
3208 @opindex fmax-errors
3209 Limits the maximum number of error messages to @var{n}, at which point
3210 GCC bails out rather than attempting to continue processing the source
3211 code.  If @var{n} is 0 (the default), there is no limit on the number
3212 of error messages produced.  If @option{-Wfatal-errors} is also
3213 specified, then @option{-Wfatal-errors} takes precedence over this
3214 option.
3216 @item -w
3217 @opindex w
3218 Inhibit all warning messages.
3220 @item -Werror
3221 @opindex Werror
3222 @opindex Wno-error
3223 Make all warnings into errors.
3225 @item -Werror=
3226 @opindex Werror=
3227 @opindex Wno-error=
3228 Make the specified warning into an error.  The specifier for a warning
3229 is appended; for example @option{-Werror=switch} turns the warnings
3230 controlled by @option{-Wswitch} into errors.  This switch takes a
3231 negative form, to be used to negate @option{-Werror} for specific
3232 warnings; for example @option{-Wno-error=switch} makes
3233 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
3234 is in effect.
3236 The warning message for each controllable warning includes the
3237 option that controls the warning.  That option can then be used with
3238 @option{-Werror=} and @option{-Wno-error=} as described above.
3239 (Printing of the option in the warning message can be disabled using the
3240 @option{-fno-diagnostics-show-option} flag.)
3242 Note that specifying @option{-Werror=}@var{foo} automatically implies
3243 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
3244 imply anything.
3246 @item -Wfatal-errors
3247 @opindex Wfatal-errors
3248 @opindex Wno-fatal-errors
3249 This option causes the compiler to abort compilation on the first error
3250 occurred rather than trying to keep going and printing further error
3251 messages.
3253 @end table
3255 You can request many specific warnings with options beginning with
3256 @samp{-W}, for example @option{-Wimplicit} to request warnings on
3257 implicit declarations.  Each of these specific warning options also
3258 has a negative form beginning @samp{-Wno-} to turn off warnings; for
3259 example, @option{-Wno-implicit}.  This manual lists only one of the
3260 two forms, whichever is not the default.  For further
3261 language-specific options also refer to @ref{C++ Dialect Options} and
3262 @ref{Objective-C and Objective-C++ Dialect Options}.
3264 When an unrecognized warning option is requested (e.g.,
3265 @option{-Wunknown-warning}), GCC emits a diagnostic stating
3266 that the option is not recognized.  However, if the @option{-Wno-} form
3267 is used, the behavior is slightly different: no diagnostic is
3268 produced for @option{-Wno-unknown-warning} unless other diagnostics
3269 are being produced.  This allows the use of new @option{-Wno-} options
3270 with old compilers, but if something goes wrong, the compiler
3271 warns that an unrecognized option is present.
3273 @table @gcctabopt
3274 @item -Wpedantic
3275 @itemx -pedantic
3276 @opindex pedantic
3277 @opindex Wpedantic
3278 Issue all the warnings demanded by strict ISO C and ISO C++;
3279 reject all programs that use forbidden extensions, and some other
3280 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
3281 version of the ISO C standard specified by any @option{-std} option used.
3283 Valid ISO C and ISO C++ programs should compile properly with or without
3284 this option (though a rare few require @option{-ansi} or a
3285 @option{-std} option specifying the required version of ISO C)@.  However,
3286 without this option, certain GNU extensions and traditional C and C++
3287 features are supported as well.  With this option, they are rejected.
3289 @option{-Wpedantic} does not cause warning messages for use of the
3290 alternate keywords whose names begin and end with @samp{__}.  Pedantic
3291 warnings are also disabled in the expression that follows
3292 @code{__extension__}.  However, only system header files should use
3293 these escape routes; application programs should avoid them.
3294 @xref{Alternate Keywords}.
3296 Some users try to use @option{-Wpedantic} to check programs for strict ISO
3297 C conformance.  They soon find that it does not do quite what they want:
3298 it finds some non-ISO practices, but not all---only those for which
3299 ISO C @emph{requires} a diagnostic, and some others for which
3300 diagnostics have been added.
3302 A feature to report any failure to conform to ISO C might be useful in
3303 some instances, but would require considerable additional work and would
3304 be quite different from @option{-Wpedantic}.  We don't have plans to
3305 support such a feature in the near future.
3307 Where the standard specified with @option{-std} represents a GNU
3308 extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
3309 corresponding @dfn{base standard}, the version of ISO C on which the GNU
3310 extended dialect is based.  Warnings from @option{-Wpedantic} are given
3311 where they are required by the base standard.  (It does not make sense
3312 for such warnings to be given only for features not in the specified GNU
3313 C dialect, since by definition the GNU dialects of C include all
3314 features the compiler supports with the given option, and there would be
3315 nothing to warn about.)
3317 @item -pedantic-errors
3318 @opindex pedantic-errors
3319 Like @option{-Wpedantic}, except that errors are produced rather than
3320 warnings.
3322 @item -Wall
3323 @opindex Wall
3324 @opindex Wno-all
3325 This enables all the warnings about constructions that some users
3326 consider questionable, and that are easy to avoid (or modify to
3327 prevent the warning), even in conjunction with macros.  This also
3328 enables some language-specific warnings described in @ref{C++ Dialect
3329 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
3331 @option{-Wall} turns on the following warning flags:
3333 @gccoptlist{-Waddress   @gol
3334 -Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
3335 -Wc++11-compat  @gol
3336 -Wchar-subscripts  @gol
3337 -Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol
3338 -Wimplicit-int @r{(C and Objective-C only)} @gol
3339 -Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
3340 -Wcomment  @gol
3341 -Wformat   @gol
3342 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
3343 -Wmaybe-uninitialized @gol
3344 -Wmissing-braces @r{(only for C/ObjC)} @gol
3345 -Wnonnull  @gol
3346 -Wopenmp-simd @gol
3347 -Wparentheses  @gol
3348 -Wpointer-sign  @gol
3349 -Wreorder   @gol
3350 -Wreturn-type  @gol
3351 -Wsequence-point  @gol
3352 -Wsign-compare @r{(only in C++)}  @gol
3353 -Wstrict-aliasing  @gol
3354 -Wstrict-overflow=1  @gol
3355 -Wswitch  @gol
3356 -Wtrigraphs  @gol
3357 -Wuninitialized  @gol
3358 -Wunknown-pragmas  @gol
3359 -Wunused-function  @gol
3360 -Wunused-label     @gol
3361 -Wunused-value     @gol
3362 -Wunused-variable  @gol
3363 -Wvolatile-register-var @gol
3366 Note that some warning flags are not implied by @option{-Wall}.  Some of
3367 them warn about constructions that users generally do not consider
3368 questionable, but which occasionally you might wish to check for;
3369 others warn about constructions that are necessary or hard to avoid in
3370 some cases, and there is no simple way to modify the code to suppress
3371 the warning. Some of them are enabled by @option{-Wextra} but many of
3372 them must be enabled individually.
3374 @item -Wextra
3375 @opindex W
3376 @opindex Wextra
3377 @opindex Wno-extra
3378 This enables some extra warning flags that are not enabled by
3379 @option{-Wall}. (This option used to be called @option{-W}.  The older
3380 name is still supported, but the newer name is more descriptive.)
3382 @gccoptlist{-Wclobbered  @gol
3383 -Wempty-body  @gol
3384 -Wignored-qualifiers @gol
3385 -Wmissing-field-initializers  @gol
3386 -Wmissing-parameter-type @r{(C only)}  @gol
3387 -Wold-style-declaration @r{(C only)}  @gol
3388 -Woverride-init  @gol
3389 -Wsign-compare  @gol
3390 -Wtype-limits  @gol
3391 -Wuninitialized  @gol
3392 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
3393 -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
3396 The option @option{-Wextra} also prints warning messages for the
3397 following cases:
3399 @itemize @bullet
3401 @item
3402 A pointer is compared against integer zero with @samp{<}, @samp{<=},
3403 @samp{>}, or @samp{>=}.
3405 @item
3406 (C++ only) An enumerator and a non-enumerator both appear in a
3407 conditional expression.
3409 @item
3410 (C++ only) Ambiguous virtual bases.
3412 @item
3413 (C++ only) Subscripting an array that has been declared @samp{register}.
3415 @item
3416 (C++ only) Taking the address of a variable that has been declared
3417 @samp{register}.
3419 @item
3420 (C++ only) A base class is not initialized in a derived class's copy
3421 constructor.
3423 @end itemize
3425 @item -Wchar-subscripts
3426 @opindex Wchar-subscripts
3427 @opindex Wno-char-subscripts
3428 Warn if an array subscript has type @code{char}.  This is a common cause
3429 of error, as programmers often forget that this type is signed on some
3430 machines.
3431 This warning is enabled by @option{-Wall}.
3433 @item -Wcomment
3434 @opindex Wcomment
3435 @opindex Wno-comment
3436 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
3437 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
3438 This warning is enabled by @option{-Wall}.
3440 @item -Wno-coverage-mismatch
3441 @opindex Wno-coverage-mismatch
3442 Warn if feedback profiles do not match when using the
3443 @option{-fprofile-use} option.
3444 If a source file is changed between compiling with @option{-fprofile-gen} and
3445 with @option{-fprofile-use}, the files with the profile feedback can fail
3446 to match the source file and GCC cannot use the profile feedback
3447 information.  By default, this warning is enabled and is treated as an
3448 error.  @option{-Wno-coverage-mismatch} can be used to disable the
3449 warning or @option{-Wno-error=coverage-mismatch} can be used to
3450 disable the error.  Disabling the error for this warning can result in
3451 poorly optimized code and is useful only in the
3452 case of very minor changes such as bug fixes to an existing code-base.
3453 Completely disabling the warning is not recommended.
3455 @item -Wno-cpp
3456 @r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
3458 Suppress warning messages emitted by @code{#warning} directives.
3460 @item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
3461 @opindex Wdouble-promotion
3462 @opindex Wno-double-promotion
3463 Give a warning when a value of type @code{float} is implicitly
3464 promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
3465 floating-point unit implement @code{float} in hardware, but emulate
3466 @code{double} in software.  On such a machine, doing computations
3467 using @code{double} values is much more expensive because of the
3468 overhead required for software emulation.
3470 It is easy to accidentally do computations with @code{double} because
3471 floating-point literals are implicitly of type @code{double}.  For
3472 example, in:
3473 @smallexample
3474 @group
3475 float area(float radius)
3477    return 3.14159 * radius * radius;
3479 @end group
3480 @end smallexample
3481 the compiler performs the entire computation with @code{double}
3482 because the floating-point literal is a @code{double}.
3484 @item -Wformat
3485 @itemx -Wformat=@var{n}
3486 @opindex Wformat
3487 @opindex Wno-format
3488 @opindex ffreestanding
3489 @opindex fno-builtin
3490 @opindex Wformat=
3491 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
3492 the arguments supplied have types appropriate to the format string
3493 specified, and that the conversions specified in the format string make
3494 sense.  This includes standard functions, and others specified by format
3495 attributes (@pxref{Function Attributes}), in the @code{printf},
3496 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
3497 not in the C standard) families (or other target-specific families).
3498 Which functions are checked without format attributes having been
3499 specified depends on the standard version selected, and such checks of
3500 functions without the attribute specified are disabled by
3501 @option{-ffreestanding} or @option{-fno-builtin}.
3503 The formats are checked against the format features supported by GNU
3504 libc version 2.2.  These include all ISO C90 and C99 features, as well
3505 as features from the Single Unix Specification and some BSD and GNU
3506 extensions.  Other library implementations may not support all these
3507 features; GCC does not support warning about features that go beyond a
3508 particular library's limitations.  However, if @option{-Wpedantic} is used
3509 with @option{-Wformat}, warnings are given about format features not
3510 in the selected standard version (but not for @code{strfmon} formats,
3511 since those are not in any version of the C standard).  @xref{C Dialect
3512 Options,,Options Controlling C Dialect}.
3514 @table @gcctabopt
3515 @item -Wformat=1
3516 @itemx -Wformat
3517 @opindex Wformat
3518 @opindex Wformat=1
3519 Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and
3520 @option{-Wno-format} is equivalent to @option{-Wformat=0}.  Since
3521 @option{-Wformat} also checks for null format arguments for several
3522 functions, @option{-Wformat} also implies @option{-Wnonnull}.  Some
3523 aspects of this level of format checking can be disabled by the
3524 options: @option{-Wno-format-contains-nul},
3525 @option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}.
3526 @option{-Wformat} is enabled by @option{-Wall}.
3528 @item -Wno-format-contains-nul
3529 @opindex Wno-format-contains-nul
3530 @opindex Wformat-contains-nul
3531 If @option{-Wformat} is specified, do not warn about format strings that
3532 contain NUL bytes.
3534 @item -Wno-format-extra-args
3535 @opindex Wno-format-extra-args
3536 @opindex Wformat-extra-args
3537 If @option{-Wformat} is specified, do not warn about excess arguments to a
3538 @code{printf} or @code{scanf} format function.  The C standard specifies
3539 that such arguments are ignored.
3541 Where the unused arguments lie between used arguments that are
3542 specified with @samp{$} operand number specifications, normally
3543 warnings are still given, since the implementation could not know what
3544 type to pass to @code{va_arg} to skip the unused arguments.  However,
3545 in the case of @code{scanf} formats, this option suppresses the
3546 warning if the unused arguments are all pointers, since the Single
3547 Unix Specification says that such unused arguments are allowed.
3549 @item -Wno-format-zero-length
3550 @opindex Wno-format-zero-length
3551 @opindex Wformat-zero-length
3552 If @option{-Wformat} is specified, do not warn about zero-length formats.
3553 The C standard specifies that zero-length formats are allowed.
3556 @item -Wformat=2
3557 @opindex Wformat=2
3558 Enable @option{-Wformat} plus additional format checks.  Currently
3559 equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security
3560 -Wformat-signedness -Wformat-y2k}.
3562 @item -Wformat-nonliteral
3563 @opindex Wformat-nonliteral
3564 @opindex Wno-format-nonliteral
3565 If @option{-Wformat} is specified, also warn if the format string is not a
3566 string literal and so cannot be checked, unless the format function
3567 takes its format arguments as a @code{va_list}.
3569 @item -Wformat-security
3570 @opindex Wformat-security
3571 @opindex Wno-format-security
3572 If @option{-Wformat} is specified, also warn about uses of format
3573 functions that represent possible security problems.  At present, this
3574 warns about calls to @code{printf} and @code{scanf} functions where the
3575 format string is not a string literal and there are no format arguments,
3576 as in @code{printf (foo);}.  This may be a security hole if the format
3577 string came from untrusted input and contains @samp{%n}.  (This is
3578 currently a subset of what @option{-Wformat-nonliteral} warns about, but
3579 in future warnings may be added to @option{-Wformat-security} that are not
3580 included in @option{-Wformat-nonliteral}.)
3582 @item -Wformat-signedness
3583 @opindex Wformat-signedness
3584 @opindex Wno-format-signedness
3585 If @option{-Wformat} is specified, also warn if the format string
3586 requires an unsigned argument and the argument is signed and vice versa.
3588 @item -Wformat-y2k
3589 @opindex Wformat-y2k
3590 @opindex Wno-format-y2k
3591 If @option{-Wformat} is specified, also warn about @code{strftime}
3592 formats that may yield only a two-digit year.
3593 @end table
3595 @item -Wnonnull
3596 @opindex Wnonnull
3597 @opindex Wno-nonnull
3598 Warn about passing a null pointer for arguments marked as
3599 requiring a non-null value by the @code{nonnull} function attribute.
3601 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
3602 can be disabled with the @option{-Wno-nonnull} option.
3604 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
3605 @opindex Winit-self
3606 @opindex Wno-init-self
3607 Warn about uninitialized variables that are initialized with themselves.
3608 Note this option can only be used with the @option{-Wuninitialized} option.
3610 For example, GCC warns about @code{i} being uninitialized in the
3611 following snippet only when @option{-Winit-self} has been specified:
3612 @smallexample
3613 @group
3614 int f()
3616   int i = i;
3617   return i;
3619 @end group
3620 @end smallexample
3622 This warning is enabled by @option{-Wall} in C++.
3624 @item -Wimplicit-int @r{(C and Objective-C only)}
3625 @opindex Wimplicit-int
3626 @opindex Wno-implicit-int
3627 Warn when a declaration does not specify a type.
3628 This warning is enabled by @option{-Wall}.
3630 @item -Wimplicit-function-declaration @r{(C and Objective-C only)}
3631 @opindex Wimplicit-function-declaration
3632 @opindex Wno-implicit-function-declaration
3633 Give a warning whenever a function is used before being declared. In
3634 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
3635 enabled by default and it is made into an error by
3636 @option{-pedantic-errors}. This warning is also enabled by
3637 @option{-Wall}.
3639 @item -Wimplicit @r{(C and Objective-C only)}
3640 @opindex Wimplicit
3641 @opindex Wno-implicit
3642 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
3643 This warning is enabled by @option{-Wall}.
3645 @item -Wignored-qualifiers @r{(C and C++ only)}
3646 @opindex Wignored-qualifiers
3647 @opindex Wno-ignored-qualifiers
3648 Warn if the return type of a function has a type qualifier
3649 such as @code{const}.  For ISO C such a type qualifier has no effect,
3650 since the value returned by a function is not an lvalue.
3651 For C++, the warning is only emitted for scalar types or @code{void}.
3652 ISO C prohibits qualified @code{void} return types on function
3653 definitions, so such return types always receive a warning
3654 even without this option.
3656 This warning is also enabled by @option{-Wextra}.
3658 @item -Wmain
3659 @opindex Wmain
3660 @opindex Wno-main
3661 Warn if the type of @samp{main} is suspicious.  @samp{main} should be
3662 a function with external linkage, returning int, taking either zero
3663 arguments, two, or three arguments of appropriate types.  This warning
3664 is enabled by default in C++ and is enabled by either @option{-Wall}
3665 or @option{-Wpedantic}.
3667 @item -Wmissing-braces
3668 @opindex Wmissing-braces
3669 @opindex Wno-missing-braces
3670 Warn if an aggregate or union initializer is not fully bracketed.  In
3671 the following example, the initializer for @samp{a} is not fully
3672 bracketed, but that for @samp{b} is fully bracketed.  This warning is
3673 enabled by @option{-Wall} in C.
3675 @smallexample
3676 int a[2][2] = @{ 0, 1, 2, 3 @};
3677 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3678 @end smallexample
3680 This warning is enabled by @option{-Wall}.
3682 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3683 @opindex Wmissing-include-dirs
3684 @opindex Wno-missing-include-dirs
3685 Warn if a user-supplied include directory does not exist.
3687 @item -Wparentheses
3688 @opindex Wparentheses
3689 @opindex Wno-parentheses
3690 Warn if parentheses are omitted in certain contexts, such
3691 as when there is an assignment in a context where a truth value
3692 is expected, or when operators are nested whose precedence people
3693 often get confused about.
3695 Also warn if a comparison like @samp{x<=y<=z} appears; this is
3696 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
3697 interpretation from that of ordinary mathematical notation.
3699 Also warn about constructions where there may be confusion to which
3700 @code{if} statement an @code{else} branch belongs.  Here is an example of
3701 such a case:
3703 @smallexample
3704 @group
3706   if (a)
3707     if (b)
3708       foo ();
3709   else
3710     bar ();
3712 @end group
3713 @end smallexample
3715 In C/C++, every @code{else} branch belongs to the innermost possible
3716 @code{if} statement, which in this example is @code{if (b)}.  This is
3717 often not what the programmer expected, as illustrated in the above
3718 example by indentation the programmer chose.  When there is the
3719 potential for this confusion, GCC issues a warning when this flag
3720 is specified.  To eliminate the warning, add explicit braces around
3721 the innermost @code{if} statement so there is no way the @code{else}
3722 can belong to the enclosing @code{if}.  The resulting code
3723 looks like this:
3725 @smallexample
3726 @group
3728   if (a)
3729     @{
3730       if (b)
3731         foo ();
3732       else
3733         bar ();
3734     @}
3736 @end group
3737 @end smallexample
3739 Also warn for dangerous uses of the GNU extension to
3740 @code{?:} with omitted middle operand. When the condition
3741 in the @code{?}: operator is a boolean expression, the omitted value is
3742 always 1.  Often programmers expect it to be a value computed
3743 inside the conditional expression instead.
3745 This warning is enabled by @option{-Wall}.
3747 @item -Wsequence-point
3748 @opindex Wsequence-point
3749 @opindex Wno-sequence-point
3750 Warn about code that may have undefined semantics because of violations
3751 of sequence point rules in the C and C++ standards.
3753 The C and C++ standards define the order in which expressions in a C/C++
3754 program are evaluated in terms of @dfn{sequence points}, which represent
3755 a partial ordering between the execution of parts of the program: those
3756 executed before the sequence point, and those executed after it.  These
3757 occur after the evaluation of a full expression (one which is not part
3758 of a larger expression), after the evaluation of the first operand of a
3759 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
3760 function is called (but after the evaluation of its arguments and the
3761 expression denoting the called function), and in certain other places.
3762 Other than as expressed by the sequence point rules, the order of
3763 evaluation of subexpressions of an expression is not specified.  All
3764 these rules describe only a partial order rather than a total order,
3765 since, for example, if two functions are called within one expression
3766 with no sequence point between them, the order in which the functions
3767 are called is not specified.  However, the standards committee have
3768 ruled that function calls do not overlap.
3770 It is not specified when between sequence points modifications to the
3771 values of objects take effect.  Programs whose behavior depends on this
3772 have undefined behavior; the C and C++ standards specify that ``Between
3773 the previous and next sequence point an object shall have its stored
3774 value modified at most once by the evaluation of an expression.
3775 Furthermore, the prior value shall be read only to determine the value
3776 to be stored.''.  If a program breaks these rules, the results on any
3777 particular implementation are entirely unpredictable.
3779 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
3780 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
3781 diagnosed by this option, and it may give an occasional false positive
3782 result, but in general it has been found fairly effective at detecting
3783 this sort of problem in programs.
3785 The standard is worded confusingly, therefore there is some debate
3786 over the precise meaning of the sequence point rules in subtle cases.
3787 Links to discussions of the problem, including proposed formal
3788 definitions, may be found on the GCC readings page, at
3789 @uref{http://gcc.gnu.org/@/readings.html}.
3791 This warning is enabled by @option{-Wall} for C and C++.
3793 @item -Wno-return-local-addr
3794 @opindex Wno-return-local-addr
3795 @opindex Wreturn-local-addr
3796 Do not warn about returning a pointer (or in C++, a reference) to a
3797 variable that goes out of scope after the function returns.
3799 @item -Wreturn-type
3800 @opindex Wreturn-type
3801 @opindex Wno-return-type
3802 Warn whenever a function is defined with a return type that defaults
3803 to @code{int}.  Also warn about any @code{return} statement with no
3804 return value in a function whose return type is not @code{void}
3805 (falling off the end of the function body is considered returning
3806 without a value), and about a @code{return} statement with an
3807 expression in a function whose return type is @code{void}.
3809 For C++, a function without return type always produces a diagnostic
3810 message, even when @option{-Wno-return-type} is specified.  The only
3811 exceptions are @samp{main} and functions defined in system headers.
3813 This warning is enabled by @option{-Wall}.
3815 @item -Wswitch
3816 @opindex Wswitch
3817 @opindex Wno-switch
3818 Warn whenever a @code{switch} statement has an index of enumerated type
3819 and lacks a @code{case} for one or more of the named codes of that
3820 enumeration.  (The presence of a @code{default} label prevents this
3821 warning.)  @code{case} labels outside the enumeration range also
3822 provoke warnings when this option is used (even if there is a
3823 @code{default} label).
3824 This warning is enabled by @option{-Wall}.
3826 @item -Wswitch-default
3827 @opindex Wswitch-default
3828 @opindex Wno-switch-default
3829 Warn whenever a @code{switch} statement does not have a @code{default}
3830 case.
3832 @item -Wswitch-enum
3833 @opindex Wswitch-enum
3834 @opindex Wno-switch-enum
3835 Warn whenever a @code{switch} statement has an index of enumerated type
3836 and lacks a @code{case} for one or more of the named codes of that
3837 enumeration.  @code{case} labels outside the enumeration range also
3838 provoke warnings when this option is used.  The only difference
3839 between @option{-Wswitch} and this option is that this option gives a
3840 warning about an omitted enumeration code even if there is a
3841 @code{default} label.
3843 @item -Wswitch-bool
3844 @opindex Wswitch-bool
3845 @opindex Wno-switch-bool
3846 Warn whenever a @code{switch} statement has an index of boolean type.
3847 It is possible to suppress this warning by casting the controlling
3848 expression to a type other than @code{bool}.  For example:
3849 @smallexample
3850 @group
3851 switch ((int) (a == 4))
3852   @{
3853   @dots{}
3854   @}
3855 @end group
3856 @end smallexample
3857 This warning is enabled by default for C and C++ programs.
3859 @item -Wsync-nand @r{(C and C++ only)}
3860 @opindex Wsync-nand
3861 @opindex Wno-sync-nand
3862 Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
3863 built-in functions are used.  These functions changed semantics in GCC 4.4.
3865 @item -Wtrigraphs
3866 @opindex Wtrigraphs
3867 @opindex Wno-trigraphs
3868 Warn if any trigraphs are encountered that might change the meaning of
3869 the program (trigraphs within comments are not warned about).
3870 This warning is enabled by @option{-Wall}.
3872 @item -Wunused-but-set-parameter
3873 @opindex Wunused-but-set-parameter
3874 @opindex Wno-unused-but-set-parameter
3875 Warn whenever a function parameter is assigned to, but otherwise unused
3876 (aside from its declaration).
3878 To suppress this warning use the @samp{unused} attribute
3879 (@pxref{Variable Attributes}).
3881 This warning is also enabled by @option{-Wunused} together with
3882 @option{-Wextra}.
3884 @item -Wunused-but-set-variable
3885 @opindex Wunused-but-set-variable
3886 @opindex Wno-unused-but-set-variable
3887 Warn whenever a local variable is assigned to, but otherwise unused
3888 (aside from its declaration).
3889 This warning is enabled by @option{-Wall}.
3891 To suppress this warning use the @samp{unused} attribute
3892 (@pxref{Variable Attributes}).
3894 This warning is also enabled by @option{-Wunused}, which is enabled
3895 by @option{-Wall}.
3897 @item -Wunused-function
3898 @opindex Wunused-function
3899 @opindex Wno-unused-function
3900 Warn whenever a static function is declared but not defined or a
3901 non-inline static function is unused.
3902 This warning is enabled by @option{-Wall}.
3904 @item -Wunused-label
3905 @opindex Wunused-label
3906 @opindex Wno-unused-label
3907 Warn whenever a label is declared but not used.
3908 This warning is enabled by @option{-Wall}.
3910 To suppress this warning use the @samp{unused} attribute
3911 (@pxref{Variable Attributes}).
3913 @item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
3914 @opindex Wunused-local-typedefs
3915 Warn when a typedef locally defined in a function is not used.
3916 This warning is enabled by @option{-Wall}.
3918 @item -Wunused-parameter
3919 @opindex Wunused-parameter
3920 @opindex Wno-unused-parameter
3921 Warn whenever a function parameter is unused aside from its declaration.
3923 To suppress this warning use the @samp{unused} attribute
3924 (@pxref{Variable Attributes}).
3926 @item -Wno-unused-result
3927 @opindex Wunused-result
3928 @opindex Wno-unused-result
3929 Do not warn if a caller of a function marked with attribute
3930 @code{warn_unused_result} (@pxref{Function Attributes}) does not use
3931 its return value. The default is @option{-Wunused-result}.
3933 @item -Wunused-variable
3934 @opindex Wunused-variable
3935 @opindex Wno-unused-variable
3936 Warn whenever a local variable or non-constant static variable is unused
3937 aside from its declaration.
3938 This warning is enabled by @option{-Wall}.
3940 To suppress this warning use the @samp{unused} attribute
3941 (@pxref{Variable Attributes}).
3943 @item -Wunused-value
3944 @opindex Wunused-value
3945 @opindex Wno-unused-value
3946 Warn whenever a statement computes a result that is explicitly not
3947 used. To suppress this warning cast the unused expression to
3948 @samp{void}. This includes an expression-statement or the left-hand
3949 side of a comma expression that contains no side effects. For example,
3950 an expression such as @samp{x[i,j]} causes a warning, while
3951 @samp{x[(void)i,j]} does not.
3953 This warning is enabled by @option{-Wall}.
3955 @item -Wunused
3956 @opindex Wunused
3957 @opindex Wno-unused
3958 All the above @option{-Wunused} options combined.
3960 In order to get a warning about an unused function parameter, you must
3961 either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
3962 @option{-Wunused}), or separately specify @option{-Wunused-parameter}.
3964 @item -Wuninitialized
3965 @opindex Wuninitialized
3966 @opindex Wno-uninitialized
3967 Warn if an automatic variable is used without first being initialized
3968 or if a variable may be clobbered by a @code{setjmp} call. In C++,
3969 warn if a non-static reference or non-static @samp{const} member
3970 appears in a class without constructors.
3972 If you want to warn about code that uses the uninitialized value of the
3973 variable in its own initializer, use the @option{-Winit-self} option.
3975 These warnings occur for individual uninitialized or clobbered
3976 elements of structure, union or array variables as well as for
3977 variables that are uninitialized or clobbered as a whole.  They do
3978 not occur for variables or elements declared @code{volatile}.  Because
3979 these warnings depend on optimization, the exact variables or elements
3980 for which there are warnings depends on the precise optimization
3981 options and version of GCC used.
3983 Note that there may be no warning about a variable that is used only
3984 to compute a value that itself is never used, because such
3985 computations may be deleted by data flow analysis before the warnings
3986 are printed.
3988 @item -Wmaybe-uninitialized
3989 @opindex Wmaybe-uninitialized
3990 @opindex Wno-maybe-uninitialized
3991 For an automatic variable, if there exists a path from the function
3992 entry to a use of the variable that is initialized, but there exist
3993 some other paths for which the variable is not initialized, the compiler
3994 emits a warning if it cannot prove the uninitialized paths are not
3995 executed at run time. These warnings are made optional because GCC is
3996 not smart enough to see all the reasons why the code might be correct
3997 in spite of appearing to have an error.  Here is one example of how
3998 this can happen:
4000 @smallexample
4001 @group
4003   int x;
4004   switch (y)
4005     @{
4006     case 1: x = 1;
4007       break;
4008     case 2: x = 4;
4009       break;
4010     case 3: x = 5;
4011     @}
4012   foo (x);
4014 @end group
4015 @end smallexample
4017 @noindent
4018 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
4019 always initialized, but GCC doesn't know this. To suppress the
4020 warning, you need to provide a default case with assert(0) or
4021 similar code.
4023 @cindex @code{longjmp} warnings
4024 This option also warns when a non-volatile automatic variable might be
4025 changed by a call to @code{longjmp}.  These warnings as well are possible
4026 only in optimizing compilation.
4028 The compiler sees only the calls to @code{setjmp}.  It cannot know
4029 where @code{longjmp} will be called; in fact, a signal handler could
4030 call it at any point in the code.  As a result, you may get a warning
4031 even when there is in fact no problem because @code{longjmp} cannot
4032 in fact be called at the place that would cause a problem.
4034 Some spurious warnings can be avoided if you declare all the functions
4035 you use that never return as @code{noreturn}.  @xref{Function
4036 Attributes}.
4038 This warning is enabled by @option{-Wall} or @option{-Wextra}.
4040 @item -Wunknown-pragmas
4041 @opindex Wunknown-pragmas
4042 @opindex Wno-unknown-pragmas
4043 @cindex warning for unknown pragmas
4044 @cindex unknown pragmas, warning
4045 @cindex pragmas, warning of unknown
4046 Warn when a @code{#pragma} directive is encountered that is not understood by 
4047 GCC@.  If this command-line option is used, warnings are even issued
4048 for unknown pragmas in system header files.  This is not the case if
4049 the warnings are only enabled by the @option{-Wall} command-line option.
4051 @item -Wno-pragmas
4052 @opindex Wno-pragmas
4053 @opindex Wpragmas
4054 Do not warn about misuses of pragmas, such as incorrect parameters,
4055 invalid syntax, or conflicts between pragmas.  See also
4056 @option{-Wunknown-pragmas}.
4058 @item -Wstrict-aliasing
4059 @opindex Wstrict-aliasing
4060 @opindex Wno-strict-aliasing
4061 This option is only active when @option{-fstrict-aliasing} is active.
4062 It warns about code that might break the strict aliasing rules that the
4063 compiler is using for optimization.  The warning does not catch all
4064 cases, but does attempt to catch the more common pitfalls.  It is
4065 included in @option{-Wall}.
4066 It is equivalent to @option{-Wstrict-aliasing=3}
4068 @item -Wstrict-aliasing=n
4069 @opindex Wstrict-aliasing=n
4070 This option is only active when @option{-fstrict-aliasing} is active.
4071 It warns about code that might break the strict aliasing rules that the
4072 compiler is using for optimization.
4073 Higher levels correspond to higher accuracy (fewer false positives).
4074 Higher levels also correspond to more effort, similar to the way @option{-O} 
4075 works.
4076 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.
4078 Level 1: Most aggressive, quick, least accurate.
4079 Possibly useful when higher levels
4080 do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
4081 false negatives.  However, it has many false positives.
4082 Warns for all pointer conversions between possibly incompatible types,
4083 even if never dereferenced.  Runs in the front end only.
4085 Level 2: Aggressive, quick, not too precise.
4086 May still have many false positives (not as many as level 1 though),
4087 and few false negatives (but possibly more than level 1).
4088 Unlike level 1, it only warns when an address is taken.  Warns about
4089 incomplete types.  Runs in the front end only.
4091 Level 3 (default for @option{-Wstrict-aliasing}):
4092 Should have very few false positives and few false
4093 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
4094 Takes care of the common pun+dereference pattern in the front end:
4095 @code{*(int*)&some_float}.
4096 If optimization is enabled, it also runs in the back end, where it deals
4097 with multiple statement cases using flow-sensitive points-to information.
4098 Only warns when the converted pointer is dereferenced.
4099 Does not warn about incomplete types.
4101 @item -Wstrict-overflow
4102 @itemx -Wstrict-overflow=@var{n}
4103 @opindex Wstrict-overflow
4104 @opindex Wno-strict-overflow
4105 This option is only active when @option{-fstrict-overflow} is active.
4106 It warns about cases where the compiler optimizes based on the
4107 assumption that signed overflow does not occur.  Note that it does not
4108 warn about all cases where the code might overflow: it only warns
4109 about cases where the compiler implements some optimization.  Thus
4110 this warning depends on the optimization level.
4112 An optimization that assumes that signed overflow does not occur is
4113 perfectly safe if the values of the variables involved are such that
4114 overflow never does, in fact, occur.  Therefore this warning can
4115 easily give a false positive: a warning about code that is not
4116 actually a problem.  To help focus on important issues, several
4117 warning levels are defined.  No warnings are issued for the use of
4118 undefined signed overflow when estimating how many iterations a loop
4119 requires, in particular when determining whether a loop will be
4120 executed at all.
4122 @table @gcctabopt
4123 @item -Wstrict-overflow=1
4124 Warn about cases that are both questionable and easy to avoid.  For
4125 example,  with @option{-fstrict-overflow}, the compiler simplifies
4126 @code{x + 1 > x} to @code{1}.  This level of
4127 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
4128 are not, and must be explicitly requested.
4130 @item -Wstrict-overflow=2
4131 Also warn about other cases where a comparison is simplified to a
4132 constant.  For example: @code{abs (x) >= 0}.  This can only be
4133 simplified when @option{-fstrict-overflow} is in effect, because
4134 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
4135 zero.  @option{-Wstrict-overflow} (with no level) is the same as
4136 @option{-Wstrict-overflow=2}.
4138 @item -Wstrict-overflow=3
4139 Also warn about other cases where a comparison is simplified.  For
4140 example: @code{x + 1 > 1} is simplified to @code{x > 0}.
4142 @item -Wstrict-overflow=4
4143 Also warn about other simplifications not covered by the above cases.
4144 For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.
4146 @item -Wstrict-overflow=5
4147 Also warn about cases where the compiler reduces the magnitude of a
4148 constant involved in a comparison.  For example: @code{x + 2 > y} is
4149 simplified to @code{x + 1 >= y}.  This is reported only at the
4150 highest warning level because this simplification applies to many
4151 comparisons, so this warning level gives a very large number of
4152 false positives.
4153 @end table
4155 @item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]}
4156 @opindex Wsuggest-attribute=
4157 @opindex Wno-suggest-attribute=
4158 Warn for cases where adding an attribute may be beneficial. The
4159 attributes currently supported are listed below.
4161 @table @gcctabopt
4162 @item -Wsuggest-attribute=pure
4163 @itemx -Wsuggest-attribute=const
4164 @itemx -Wsuggest-attribute=noreturn
4165 @opindex Wsuggest-attribute=pure
4166 @opindex Wno-suggest-attribute=pure
4167 @opindex Wsuggest-attribute=const
4168 @opindex Wno-suggest-attribute=const
4169 @opindex Wsuggest-attribute=noreturn
4170 @opindex Wno-suggest-attribute=noreturn
4172 Warn about functions that might be candidates for attributes
4173 @code{pure}, @code{const} or @code{noreturn}.  The compiler only warns for
4174 functions visible in other compilation units or (in the case of @code{pure} and
4175 @code{const}) if it cannot prove that the function returns normally. A function
4176 returns normally if it doesn't contain an infinite loop or return abnormally
4177 by throwing, calling @code{abort()} or trapping.  This analysis requires option
4178 @option{-fipa-pure-const}, which is enabled by default at @option{-O} and
4179 higher.  Higher optimization levels improve the accuracy of the analysis.
4181 @item -Wsuggest-attribute=format
4182 @itemx -Wmissing-format-attribute
4183 @opindex Wsuggest-attribute=format
4184 @opindex Wmissing-format-attribute
4185 @opindex Wno-suggest-attribute=format
4186 @opindex Wno-missing-format-attribute
4187 @opindex Wformat
4188 @opindex Wno-format
4190 Warn about function pointers that might be candidates for @code{format}
4191 attributes.  Note these are only possible candidates, not absolute ones.
4192 GCC guesses that function pointers with @code{format} attributes that
4193 are used in assignment, initialization, parameter passing or return
4194 statements should have a corresponding @code{format} attribute in the
4195 resulting type.  I.e.@: the left-hand side of the assignment or
4196 initialization, the type of the parameter variable, or the return type
4197 of the containing function respectively should also have a @code{format}
4198 attribute to avoid the warning.
4200 GCC also warns about function definitions that might be
4201 candidates for @code{format} attributes.  Again, these are only
4202 possible candidates.  GCC guesses that @code{format} attributes
4203 might be appropriate for any function that calls a function like
4204 @code{vprintf} or @code{vscanf}, but this might not always be the
4205 case, and some functions for which @code{format} attributes are
4206 appropriate may not be detected.
4207 @end table
4209 @item -Wsuggest-final-types
4210 @opindex Wno-suggest-final-types
4211 @opindex Wsuggest-final-types
4212 Warn about types with virtual methods where code quality would be improved
4213 if the type was declared with C++11 final specifier, or, if possible,
4214 declared in anonymous namespace. This allows GCC to devritualize more aggressively
4215 the polymorphic calls. This warning is more effective with link time optimization,
4216 where the information about the class hiearchy graph is more complete.
4218 @item -Wsuggest-final-methods
4219 @opindex Wno-suggest-final-methods
4220 @opindex Wsuggest-final-methods
4221 Warn about virtual methods where code quality would be improved if the method
4222 was declared with C++11 final specifier, or, if possible, its type was declared
4223 in the anonymous namespace or with final specifier. This warning is more
4224 effective with link time optimization, where the information about the class
4225 hiearchy graph is more complete. It is recommended to first consider suggestins
4226 of @option{-Wsuggest-final-types} and then rebuild with new annotations.
4228 @item -Warray-bounds
4229 @opindex Wno-array-bounds
4230 @opindex Warray-bounds
4231 This option is only active when @option{-ftree-vrp} is active
4232 (default for @option{-O2} and above). It warns about subscripts to arrays
4233 that are always out of bounds. This warning is enabled by @option{-Wall}.
4235 @item -Wbool-compare
4236 @opindex Wno-bool-compare
4237 @opindex Wbool-compare
4238 Warn about boolean expression compared with an integer value different from
4239 @code{true}/@code{false}.  For instance, the following comparison is
4240 always false:
4241 @smallexample
4242 int n = 5;
4243 @dots{}
4244 if ((n > 1) == 2) @{ @dots{} @}
4245 @end smallexample
4246 This warning is enabled by @option{-Wall}.
4248 @item -Wno-discarded-qualifiers @r{(C and Objective-C only)}
4249 @opindex Wno-discarded-qualifiers
4250 @opindex Wdiscarded-qualifiers
4251 Do not warn if type qualifiers on pointers are being discarded.
4252 Typically, the compiler will warn if a @code{const char *} variable is
4253 passed to a function that takes @code{char *} parameter.  This option
4254 can be used to suppress such a warning.
4256 @item -Wno-incompatible-pointer-types @r{(C and Objective-C only)}
4257 @opindex Wno-incompatible-pointer-types
4258 @opindex Wincompatible-pointer-types
4259 Do not warn when there is a conversion between pointers that have incompatible
4260 types.  This warning is for cases not covered by @option{-Wno-pointer-sign},
4261 which warns for pointer argument passing or assignment with different signedness
4263 @item -Wno-int-conversion @r{(C and Objective-C only)}
4264 @opindex Wno-int-conversion
4265 @opindex Wint-conversion
4266 Do not warn about incompatible integer to pointer and pointer to integer
4267 conversions.  This warning is about implicit conversions; for explicit
4268 conversions the warnings @option{-Wno-int-to-pointer-cast} and
4269 @option{-Wno-pointer-to-int-cast} may be used.
4271 @item -Wno-div-by-zero
4272 @opindex Wno-div-by-zero
4273 @opindex Wdiv-by-zero
4274 Do not warn about compile-time integer division by zero.  Floating-point
4275 division by zero is not warned about, as it can be a legitimate way of
4276 obtaining infinities and NaNs.
4278 @item -Wsystem-headers
4279 @opindex Wsystem-headers
4280 @opindex Wno-system-headers
4281 @cindex warnings from system headers
4282 @cindex system headers, warnings from
4283 Print warning messages for constructs found in system header files.
4284 Warnings from system headers are normally suppressed, on the assumption
4285 that they usually do not indicate real problems and would only make the
4286 compiler output harder to read.  Using this command-line option tells
4287 GCC to emit warnings from system headers as if they occurred in user
4288 code.  However, note that using @option{-Wall} in conjunction with this
4289 option does @emph{not} warn about unknown pragmas in system
4290 headers---for that, @option{-Wunknown-pragmas} must also be used.
4292 @item -Wtrampolines
4293 @opindex Wtrampolines
4294 @opindex Wno-trampolines
4295  Warn about trampolines generated for pointers to nested functions.
4297  A trampoline is a small piece of data or code that is created at run
4298  time on the stack when the address of a nested function is taken, and
4299  is used to call the nested function indirectly.  For some targets, it
4300  is made up of data only and thus requires no special treatment.  But,
4301  for most targets, it is made up of code and thus requires the stack
4302  to be made executable in order for the program to work properly.
4304 @item -Wfloat-equal
4305 @opindex Wfloat-equal
4306 @opindex Wno-float-equal
4307 Warn if floating-point values are used in equality comparisons.
4309 The idea behind this is that sometimes it is convenient (for the
4310 programmer) to consider floating-point values as approximations to
4311 infinitely precise real numbers.  If you are doing this, then you need
4312 to compute (by analyzing the code, or in some other way) the maximum or
4313 likely maximum error that the computation introduces, and allow for it
4314 when performing comparisons (and when producing output, but that's a
4315 different problem).  In particular, instead of testing for equality, you
4316 should check to see whether the two values have ranges that overlap; and
4317 this is done with the relational operators, so equality comparisons are
4318 probably mistaken.
4320 @item -Wtraditional @r{(C and Objective-C only)}
4321 @opindex Wtraditional
4322 @opindex Wno-traditional
4323 Warn about certain constructs that behave differently in traditional and
4324 ISO C@.  Also warn about ISO C constructs that have no traditional C
4325 equivalent, and/or problematic constructs that should be avoided.
4327 @itemize @bullet
4328 @item
4329 Macro parameters that appear within string literals in the macro body.
4330 In traditional C macro replacement takes place within string literals,
4331 but in ISO C it does not.
4333 @item
4334 In traditional C, some preprocessor directives did not exist.
4335 Traditional preprocessors only considered a line to be a directive
4336 if the @samp{#} appeared in column 1 on the line.  Therefore
4337 @option{-Wtraditional} warns about directives that traditional C
4338 understands but ignores because the @samp{#} does not appear as the
4339 first character on the line.  It also suggests you hide directives like
4340 @samp{#pragma} not understood by traditional C by indenting them.  Some
4341 traditional implementations do not recognize @samp{#elif}, so this option
4342 suggests avoiding it altogether.
4344 @item
4345 A function-like macro that appears without arguments.
4347 @item
4348 The unary plus operator.
4350 @item
4351 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
4352 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
4353 constants.)  Note, these suffixes appear in macros defined in the system
4354 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
4355 Use of these macros in user code might normally lead to spurious
4356 warnings, however GCC's integrated preprocessor has enough context to
4357 avoid warning in these cases.
4359 @item
4360 A function declared external in one block and then used after the end of
4361 the block.
4363 @item
4364 A @code{switch} statement has an operand of type @code{long}.
4366 @item
4367 A non-@code{static} function declaration follows a @code{static} one.
4368 This construct is not accepted by some traditional C compilers.
4370 @item
4371 The ISO type of an integer constant has a different width or
4372 signedness from its traditional type.  This warning is only issued if
4373 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
4374 typically represent bit patterns, are not warned about.
4376 @item
4377 Usage of ISO string concatenation is detected.
4379 @item
4380 Initialization of automatic aggregates.
4382 @item
4383 Identifier conflicts with labels.  Traditional C lacks a separate
4384 namespace for labels.
4386 @item
4387 Initialization of unions.  If the initializer is zero, the warning is
4388 omitted.  This is done under the assumption that the zero initializer in
4389 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
4390 initializer warnings and relies on default initialization to zero in the
4391 traditional C case.
4393 @item
4394 Conversions by prototypes between fixed/floating-point values and vice
4395 versa.  The absence of these prototypes when compiling with traditional
4396 C causes serious problems.  This is a subset of the possible
4397 conversion warnings; for the full set use @option{-Wtraditional-conversion}.
4399 @item
4400 Use of ISO C style function definitions.  This warning intentionally is
4401 @emph{not} issued for prototype declarations or variadic functions
4402 because these ISO C features appear in your code when using
4403 libiberty's traditional C compatibility macros, @code{PARAMS} and
4404 @code{VPARAMS}.  This warning is also bypassed for nested functions
4405 because that feature is already a GCC extension and thus not relevant to
4406 traditional C compatibility.
4407 @end itemize
4409 @item -Wtraditional-conversion @r{(C and Objective-C only)}
4410 @opindex Wtraditional-conversion
4411 @opindex Wno-traditional-conversion
4412 Warn if a prototype causes a type conversion that is different from what
4413 would happen to the same argument in the absence of a prototype.  This
4414 includes conversions of fixed point to floating and vice versa, and
4415 conversions changing the width or signedness of a fixed-point argument
4416 except when the same as the default promotion.
4418 @item -Wdeclaration-after-statement @r{(C and Objective-C only)}
4419 @opindex Wdeclaration-after-statement
4420 @opindex Wno-declaration-after-statement
4421 Warn when a declaration is found after a statement in a block.  This
4422 construct, known from C++, was introduced with ISO C99 and is by default
4423 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
4424 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
4426 @item -Wundef
4427 @opindex Wundef
4428 @opindex Wno-undef
4429 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
4431 @item -Wno-endif-labels
4432 @opindex Wno-endif-labels
4433 @opindex Wendif-labels
4434 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
4436 @item -Wshadow
4437 @opindex Wshadow
4438 @opindex Wno-shadow
4439 Warn whenever a local variable or type declaration shadows another
4440 variable, parameter, type, class member (in C++), or instance variable
4441 (in Objective-C) or whenever a built-in function is shadowed. Note
4442 that in C++, the compiler warns if a local variable shadows an
4443 explicit typedef, but not if it shadows a struct/class/enum.
4445 @item -Wno-shadow-ivar @r{(Objective-C only)}
4446 @opindex Wno-shadow-ivar
4447 @opindex Wshadow-ivar
4448 Do not warn whenever a local variable shadows an instance variable in an
4449 Objective-C method.
4451 @item -Wlarger-than=@var{len}
4452 @opindex Wlarger-than=@var{len}
4453 @opindex Wlarger-than-@var{len}
4454 Warn whenever an object of larger than @var{len} bytes is defined.
4456 @item -Wframe-larger-than=@var{len}
4457 @opindex Wframe-larger-than
4458 Warn if the size of a function frame is larger than @var{len} bytes.
4459 The computation done to determine the stack frame size is approximate
4460 and not conservative.
4461 The actual requirements may be somewhat greater than @var{len}
4462 even if you do not get a warning.  In addition, any space allocated
4463 via @code{alloca}, variable-length arrays, or related constructs
4464 is not included by the compiler when determining
4465 whether or not to issue a warning.
4467 @item -Wno-free-nonheap-object
4468 @opindex Wno-free-nonheap-object
4469 @opindex Wfree-nonheap-object
4470 Do not warn when attempting to free an object that was not allocated
4471 on the heap.
4473 @item -Wstack-usage=@var{len}
4474 @opindex Wstack-usage
4475 Warn if the stack usage of a function might be larger than @var{len} bytes.
4476 The computation done to determine the stack usage is conservative.
4477 Any space allocated via @code{alloca}, variable-length arrays, or related
4478 constructs is included by the compiler when determining whether or not to
4479 issue a warning.
4481 The message is in keeping with the output of @option{-fstack-usage}.
4483 @itemize
4484 @item
4485 If the stack usage is fully static but exceeds the specified amount, it's:
4487 @smallexample
4488   warning: stack usage is 1120 bytes
4489 @end smallexample
4490 @item
4491 If the stack usage is (partly) dynamic but bounded, it's:
4493 @smallexample
4494   warning: stack usage might be 1648 bytes
4495 @end smallexample
4496 @item
4497 If the stack usage is (partly) dynamic and not bounded, it's:
4499 @smallexample
4500   warning: stack usage might be unbounded
4501 @end smallexample
4502 @end itemize
4504 @item -Wunsafe-loop-optimizations
4505 @opindex Wunsafe-loop-optimizations
4506 @opindex Wno-unsafe-loop-optimizations
4507 Warn if the loop cannot be optimized because the compiler cannot
4508 assume anything on the bounds of the loop indices.  With
4509 @option{-funsafe-loop-optimizations} warn if the compiler makes
4510 such assumptions.
4512 @item -Wno-pedantic-ms-format @r{(MinGW targets only)}
4513 @opindex Wno-pedantic-ms-format
4514 @opindex Wpedantic-ms-format
4515 When used in combination with @option{-Wformat}
4516 and @option{-pedantic} without GNU extensions, this option
4517 disables the warnings about non-ISO @code{printf} / @code{scanf} format
4518 width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets,
4519 which depend on the MS runtime.
4521 @item -Wpointer-arith
4522 @opindex Wpointer-arith
4523 @opindex Wno-pointer-arith
4524 Warn about anything that depends on the ``size of'' a function type or
4525 of @code{void}.  GNU C assigns these types a size of 1, for
4526 convenience in calculations with @code{void *} pointers and pointers
4527 to functions.  In C++, warn also when an arithmetic operation involves
4528 @code{NULL}.  This warning is also enabled by @option{-Wpedantic}.
4530 @item -Wtype-limits
4531 @opindex Wtype-limits
4532 @opindex Wno-type-limits
4533 Warn if a comparison is always true or always false due to the limited
4534 range of the data type, but do not warn for constant expressions.  For
4535 example, warn if an unsigned variable is compared against zero with
4536 @samp{<} or @samp{>=}.  This warning is also enabled by
4537 @option{-Wextra}.
4539 @item -Wbad-function-cast @r{(C and Objective-C only)}
4540 @opindex Wbad-function-cast
4541 @opindex Wno-bad-function-cast
4542 Warn whenever a function call is cast to a non-matching type.
4543 For example, warn if @code{int malloc()} is cast to @code{anything *}.
4545 @item -Wc90-c99-compat @r{(C and Objective-C only)}
4546 @opindex Wc90-c99-compat
4547 @opindex Wno-c90-c99-compat
4548 Warn about features not present in ISO C90, but present in ISO C99.
4549 For instance, warn about use of variable length arrays, @code{long long}
4550 type, @code{bool} type, compound literals, designated initializers, and so
4551 on.  This option is independent of the standards mode.  Warnings are disabled
4552 in the expression that follows @code{__extension__}.
4554 @item -Wc99-c11-compat @r{(C and Objective-C only)}
4555 @opindex Wc99-c11-compat
4556 @opindex Wno-c99-c11-compat
4557 Warn about features not present in ISO C99, but present in ISO C11.
4558 For instance, warn about use of anonymous structures and unions,
4559 @code{_Atomic} type qualifier, @code{_Thread_local} storage-class specifier,
4560 @code{_Alignas} specifier, @code{Alignof} operator, @code{_Generic} keyword,
4561 and so on.  This option is independent of the standards mode.  Warnings are
4562 disabled in the expression that follows @code{__extension__}.
4564 @item -Wc++-compat @r{(C and Objective-C only)}
4565 Warn about ISO C constructs that are outside of the common subset of
4566 ISO C and ISO C++, e.g.@: request for implicit conversion from
4567 @code{void *} to a pointer to non-@code{void} type.
4569 @item -Wc++11-compat @r{(C++ and Objective-C++ only)}
4570 Warn about C++ constructs whose meaning differs between ISO C++ 1998
4571 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
4572 in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
4573 enabled by @option{-Wall}.
4575 @item -Wcast-qual
4576 @opindex Wcast-qual
4577 @opindex Wno-cast-qual
4578 Warn whenever a pointer is cast so as to remove a type qualifier from
4579 the target type.  For example, warn if a @code{const char *} is cast
4580 to an ordinary @code{char *}.
4582 Also warn when making a cast that introduces a type qualifier in an
4583 unsafe way.  For example, casting @code{char **} to @code{const char **}
4584 is unsafe, as in this example:
4586 @smallexample
4587   /* p is char ** value.  */
4588   const char **q = (const char **) p;
4589   /* Assignment of readonly string to const char * is OK.  */
4590   *q = "string";
4591   /* Now char** pointer points to read-only memory.  */
4592   **p = 'b';
4593 @end smallexample
4595 @item -Wcast-align
4596 @opindex Wcast-align
4597 @opindex Wno-cast-align
4598 Warn whenever a pointer is cast such that the required alignment of the
4599 target is increased.  For example, warn if a @code{char *} is cast to
4600 an @code{int *} on machines where integers can only be accessed at
4601 two- or four-byte boundaries.
4603 @item -Wwrite-strings
4604 @opindex Wwrite-strings
4605 @opindex Wno-write-strings
4606 When compiling C, give string constants the type @code{const
4607 char[@var{length}]} so that copying the address of one into a
4608 non-@code{const} @code{char *} pointer produces a warning.  These
4609 warnings help you find at compile time code that can try to write
4610 into a string constant, but only if you have been very careful about
4611 using @code{const} in declarations and prototypes.  Otherwise, it is
4612 just a nuisance. This is why we did not make @option{-Wall} request
4613 these warnings.
4615 When compiling C++, warn about the deprecated conversion from string
4616 literals to @code{char *}.  This warning is enabled by default for C++
4617 programs.
4619 @item -Wclobbered
4620 @opindex Wclobbered
4621 @opindex Wno-clobbered
4622 Warn for variables that might be changed by @samp{longjmp} or
4623 @samp{vfork}.  This warning is also enabled by @option{-Wextra}.
4625 @item -Wconditionally-supported @r{(C++ and Objective-C++ only)}
4626 @opindex Wconditionally-supported
4627 @opindex Wno-conditionally-supported
4628 Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4630 @item -Wconversion
4631 @opindex Wconversion
4632 @opindex Wno-conversion
4633 Warn for implicit conversions that may alter a value. This includes
4634 conversions between real and integer, like @code{abs (x)} when
4635 @code{x} is @code{double}; conversions between signed and unsigned,
4636 like @code{unsigned ui = -1}; and conversions to smaller types, like
4637 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
4638 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
4639 changed by the conversion like in @code{abs (2.0)}.  Warnings about
4640 conversions between signed and unsigned integers can be disabled by
4641 using @option{-Wno-sign-conversion}.
4643 For C++, also warn for confusing overload resolution for user-defined
4644 conversions; and conversions that never use a type conversion
4645 operator: conversions to @code{void}, the same type, a base class or a
4646 reference to them. Warnings about conversions between signed and
4647 unsigned integers are disabled by default in C++ unless
4648 @option{-Wsign-conversion} is explicitly enabled.
4650 @item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
4651 @opindex Wconversion-null
4652 @opindex Wno-conversion-null
4653 Do not warn for conversions between @code{NULL} and non-pointer
4654 types. @option{-Wconversion-null} is enabled by default.
4656 @item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
4657 @opindex Wzero-as-null-pointer-constant
4658 @opindex Wno-zero-as-null-pointer-constant
4659 Warn when a literal '0' is used as null pointer constant.  This can
4660 be useful to facilitate the conversion to @code{nullptr} in C++11.
4662 @item -Wdate-time
4663 @opindex Wdate-time
4664 @opindex Wno-date-time
4665 Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
4666 are encountered as they might prevent bit-wise-identical reproducible
4667 compilations.
4669 @item -Wdelete-incomplete @r{(C++ and Objective-C++ only)}
4670 @opindex Wdelete-incomplete
4671 @opindex Wno-delete-incomplete
4672 Warn when deleting a pointer to incomplete type, which may cause
4673 undefined behavior at runtime.  This warning is enabled by default.
4675 @item -Wuseless-cast @r{(C++ and Objective-C++ only)}
4676 @opindex Wuseless-cast
4677 @opindex Wno-useless-cast
4678 Warn when an expression is casted to its own type.
4680 @item -Wempty-body
4681 @opindex Wempty-body
4682 @opindex Wno-empty-body
4683 Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
4684 while} statement.  This warning is also enabled by @option{-Wextra}.
4686 @item -Wenum-compare
4687 @opindex Wenum-compare
4688 @opindex Wno-enum-compare
4689 Warn about a comparison between values of different enumerated types.
4690 In C++ enumeral mismatches in conditional expressions are also
4691 diagnosed and the warning is enabled by default.  In C this warning is 
4692 enabled by @option{-Wall}.
4694 @item -Wjump-misses-init @r{(C, Objective-C only)}
4695 @opindex Wjump-misses-init
4696 @opindex Wno-jump-misses-init
4697 Warn if a @code{goto} statement or a @code{switch} statement jumps
4698 forward across the initialization of a variable, or jumps backward to a
4699 label after the variable has been initialized.  This only warns about
4700 variables that are initialized when they are declared.  This warning is
4701 only supported for C and Objective-C; in C++ this sort of branch is an
4702 error in any case.
4704 @option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
4705 can be disabled with the @option{-Wno-jump-misses-init} option.
4707 @item -Wsign-compare
4708 @opindex Wsign-compare
4709 @opindex Wno-sign-compare
4710 @cindex warning for comparison of signed and unsigned values
4711 @cindex comparison of signed and unsigned values, warning
4712 @cindex signed and unsigned values, comparison warning
4713 Warn when a comparison between signed and unsigned values could produce
4714 an incorrect result when the signed value is converted to unsigned.
4715 This warning is also enabled by @option{-Wextra}; to get the other warnings
4716 of @option{-Wextra} without this warning, use @option{-Wextra -Wno-sign-compare}.
4718 @item -Wsign-conversion
4719 @opindex Wsign-conversion
4720 @opindex Wno-sign-conversion
4721 Warn for implicit conversions that may change the sign of an integer
4722 value, like assigning a signed integer expression to an unsigned
4723 integer variable. An explicit cast silences the warning. In C, this
4724 option is enabled also by @option{-Wconversion}.
4726 @item -Wfloat-conversion
4727 @opindex Wfloat-conversion
4728 @opindex Wno-float-conversion
4729 Warn for implicit conversions that reduce the precision of a real value.
4730 This includes conversions from real to integer, and from higher precision
4731 real to lower precision real values.  This option is also enabled by
4732 @option{-Wconversion}.
4734 @item -Wsizeof-pointer-memaccess
4735 @opindex Wsizeof-pointer-memaccess
4736 @opindex Wno-sizeof-pointer-memaccess
4737 Warn for suspicious length parameters to certain string and memory built-in
4738 functions if the argument uses @code{sizeof}.  This warning warns e.g.@:
4739 about @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not an array,
4740 but a pointer, and suggests a possible fix, or about
4741 @code{memcpy (&foo, ptr, sizeof (&foo));}.  This warning is enabled by
4742 @option{-Wall}.
4744 @item -Wsizeof-array-argument
4745 @opindex Wsizeof-array-argument
4746 @opindex Wno-sizeof-array-argument
4747 Warn when the @code{sizeof} operator is applied to a parameter that is
4748 declared as an array in a function definition.  This warning is enabled by
4749 default for C and C++ programs.
4751 @item -Wmemset-transposed-args
4752 @opindex Wmemset-transposed-args
4753 @opindex Wno-memset-transposed-args
4754 Warn for suspicious calls to the @code{memset} built-in function, if the
4755 second argument is not zero and the third argument is zero.  This warns e.g.@
4756 about @code{memset (buf, sizeof buf, 0)} where most probably
4757 @code{memset (buf, 0, sizeof buf)} was meant instead.  The diagnostics
4758 is only emitted if the third argument is literal zero, if it is some expression
4759 that is folded to zero, or e.g. a cast of zero to some type etc., it
4760 is far less likely that user has mistakenly exchanged the arguments and
4761 no warning is emitted.  This warning is enabled by @option{-Wall}.
4763 @item -Waddress
4764 @opindex Waddress
4765 @opindex Wno-address
4766 Warn about suspicious uses of memory addresses. These include using
4767 the address of a function in a conditional expression, such as
4768 @code{void func(void); if (func)}, and comparisons against the memory
4769 address of a string literal, such as @code{if (x == "abc")}.  Such
4770 uses typically indicate a programmer error: the address of a function
4771 always evaluates to true, so their use in a conditional usually
4772 indicate that the programmer forgot the parentheses in a function
4773 call; and comparisons against string literals result in unspecified
4774 behavior and are not portable in C, so they usually indicate that the
4775 programmer intended to use @code{strcmp}.  This warning is enabled by
4776 @option{-Wall}.
4778 @item -Wlogical-op
4779 @opindex Wlogical-op
4780 @opindex Wno-logical-op
4781 Warn about suspicious uses of logical operators in expressions.
4782 This includes using logical operators in contexts where a
4783 bit-wise operator is likely to be expected.
4785 @item -Wlogical-not-parentheses
4786 @opindex Wlogical-not-parentheses
4787 @opindex Wno-logical-not-parentheses
4788 Warn about logical not used on the left hand side operand of a comparison.
4789 This option does not warn if the RHS operand is of a boolean type.  Its
4790 purpose is to detect suspicious code like the following:
4791 @smallexample
4792 int a;
4793 @dots{}
4794 if (!a > 1) @{ @dots{} @}
4795 @end smallexample
4797 It is possible to suppress the warning by wrapping the LHS into
4798 parentheses:
4799 @smallexample
4800 if ((!a) > 1) @{ @dots{} @}
4801 @end smallexample
4803 @item -Waggregate-return
4804 @opindex Waggregate-return
4805 @opindex Wno-aggregate-return
4806 Warn if any functions that return structures or unions are defined or
4807 called.  (In languages where you can return an array, this also elicits
4808 a warning.)
4810 @item -Wno-aggressive-loop-optimizations
4811 @opindex Wno-aggressive-loop-optimizations
4812 @opindex Waggressive-loop-optimizations
4813 Warn if in a loop with constant number of iterations the compiler detects
4814 undefined behavior in some statement during one or more of the iterations.
4816 @item -Wno-attributes
4817 @opindex Wno-attributes
4818 @opindex Wattributes
4819 Do not warn if an unexpected @code{__attribute__} is used, such as
4820 unrecognized attributes, function attributes applied to variables,
4821 etc.  This does not stop errors for incorrect use of supported
4822 attributes.
4824 @item -Wno-builtin-macro-redefined
4825 @opindex Wno-builtin-macro-redefined
4826 @opindex Wbuiltin-macro-redefined
4827 Do not warn if certain built-in macros are redefined.  This suppresses
4828 warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
4829 @code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
4831 @item -Wstrict-prototypes @r{(C and Objective-C only)}
4832 @opindex Wstrict-prototypes
4833 @opindex Wno-strict-prototypes
4834 Warn if a function is declared or defined without specifying the
4835 argument types.  (An old-style function definition is permitted without
4836 a warning if preceded by a declaration that specifies the argument
4837 types.)
4839 @item -Wold-style-declaration @r{(C and Objective-C only)}
4840 @opindex Wold-style-declaration
4841 @opindex Wno-old-style-declaration
4842 Warn for obsolescent usages, according to the C Standard, in a
4843 declaration. For example, warn if storage-class specifiers like
4844 @code{static} are not the first things in a declaration.  This warning
4845 is also enabled by @option{-Wextra}.
4847 @item -Wold-style-definition @r{(C and Objective-C only)}
4848 @opindex Wold-style-definition
4849 @opindex Wno-old-style-definition
4850 Warn if an old-style function definition is used.  A warning is given
4851 even if there is a previous prototype.
4853 @item -Wmissing-parameter-type @r{(C and Objective-C only)}
4854 @opindex Wmissing-parameter-type
4855 @opindex Wno-missing-parameter-type
4856 A function parameter is declared without a type specifier in K&R-style
4857 functions:
4859 @smallexample
4860 void foo(bar) @{ @}
4861 @end smallexample
4863 This warning is also enabled by @option{-Wextra}.
4865 @item -Wmissing-prototypes @r{(C and Objective-C only)}
4866 @opindex Wmissing-prototypes
4867 @opindex Wno-missing-prototypes
4868 Warn if a global function is defined without a previous prototype
4869 declaration.  This warning is issued even if the definition itself
4870 provides a prototype.  Use this option to detect global functions
4871 that do not have a matching prototype declaration in a header file.
4872 This option is not valid for C++ because all function declarations
4873 provide prototypes and a non-matching declaration will declare an
4874 overload rather than conflict with an earlier declaration.
4875 Use @option{-Wmissing-declarations} to detect missing declarations in C++.
4877 @item -Wmissing-declarations
4878 @opindex Wmissing-declarations
4879 @opindex Wno-missing-declarations
4880 Warn if a global function is defined without a previous declaration.
4881 Do so even if the definition itself provides a prototype.
4882 Use this option to detect global functions that are not declared in
4883 header files.  In C, no warnings are issued for functions with previous
4884 non-prototype declarations; use @option{-Wmissing-prototypes} to detect
4885 missing prototypes.  In C++, no warnings are issued for function templates,
4886 or for inline functions, or for functions in anonymous namespaces.
4888 @item -Wmissing-field-initializers
4889 @opindex Wmissing-field-initializers
4890 @opindex Wno-missing-field-initializers
4891 @opindex W
4892 @opindex Wextra
4893 @opindex Wno-extra
4894 Warn if a structure's initializer has some fields missing.  For
4895 example, the following code causes such a warning, because
4896 @code{x.h} is implicitly zero:
4898 @smallexample
4899 struct s @{ int f, g, h; @};
4900 struct s x = @{ 3, 4 @};
4901 @end smallexample
4903 This option does not warn about designated initializers, so the following
4904 modification does not trigger a warning:
4906 @smallexample
4907 struct s @{ int f, g, h; @};
4908 struct s x = @{ .f = 3, .g = 4 @};
4909 @end smallexample
4911 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
4912 warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.
4914 @item -Wno-multichar
4915 @opindex Wno-multichar
4916 @opindex Wmultichar
4917 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
4918 Usually they indicate a typo in the user's code, as they have
4919 implementation-defined values, and should not be used in portable code.
4921 @item -Wnormalized=<none|id|nfc|nfkc>
4922 @opindex Wnormalized=
4923 @cindex NFC
4924 @cindex NFKC
4925 @cindex character set, input normalization
4926 In ISO C and ISO C++, two identifiers are different if they are
4927 different sequences of characters.  However, sometimes when characters
4928 outside the basic ASCII character set are used, you can have two
4929 different character sequences that look the same.  To avoid confusion,
4930 the ISO 10646 standard sets out some @dfn{normalization rules} which
4931 when applied ensure that two sequences that look the same are turned into
4932 the same sequence.  GCC can warn you if you are using identifiers that
4933 have not been normalized; this option controls that warning.
4935 There are four levels of warning supported by GCC@.  The default is
4936 @option{-Wnormalized=nfc}, which warns about any identifier that is
4937 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
4938 recommended form for most uses.
4940 Unfortunately, there are some characters allowed in identifiers by
4941 ISO C and ISO C++ that, when turned into NFC, are not allowed in 
4942 identifiers.  That is, there's no way to use these symbols in portable
4943 ISO C or C++ and have all your identifiers in NFC@.
4944 @option{-Wnormalized=id} suppresses the warning for these characters.
4945 It is hoped that future versions of the standards involved will correct
4946 this, which is why this option is not the default.
4948 You can switch the warning off for all characters by writing
4949 @option{-Wnormalized=none}.  You should only do this if you
4950 are using some other normalization scheme (like ``D''), because
4951 otherwise you can easily create bugs that are literally impossible to see.
4953 Some characters in ISO 10646 have distinct meanings but look identical
4954 in some fonts or display methodologies, especially once formatting has
4955 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
4956 LETTER N'', displays just like a regular @code{n} that has been
4957 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
4958 normalization scheme to convert all these into a standard form as
4959 well, and GCC warns if your code is not in NFKC if you use
4960 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
4961 about every identifier that contains the letter O because it might be
4962 confused with the digit 0, and so is not the default, but may be
4963 useful as a local coding convention if the programming environment 
4964 cannot be fixed to display these characters distinctly.
4966 @item -Wno-deprecated
4967 @opindex Wno-deprecated
4968 @opindex Wdeprecated
4969 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
4971 @item -Wno-deprecated-declarations
4972 @opindex Wno-deprecated-declarations
4973 @opindex Wdeprecated-declarations
4974 Do not warn about uses of functions (@pxref{Function Attributes}),
4975 variables (@pxref{Variable Attributes}), and types (@pxref{Type
4976 Attributes}) marked as deprecated by using the @code{deprecated}
4977 attribute.
4979 @item -Wno-overflow
4980 @opindex Wno-overflow
4981 @opindex Woverflow
4982 Do not warn about compile-time overflow in constant expressions.
4984 @item -Wno-odr
4985 @opindex Wno-odr
4986 @opindex Wodr
4987 Warn about One Definition Rule violations during link-time optimization.
4988 Requires @option{-flto-odr-type-merging} to be enabled.  Enabled by default.
4990 @item -Wopenmp-simd
4991 @opindex Wopenm-simd
4992 Warn if the vectorizer cost model overrides the OpenMP or the Cilk Plus
4993 simd directive set by user.  The @option{-fsimd-cost-model=unlimited} can
4994 be used to relax the cost model.
4996 @item -Woverride-init @r{(C and Objective-C only)}
4997 @opindex Woverride-init
4998 @opindex Wno-override-init
4999 @opindex W
5000 @opindex Wextra
5001 @opindex Wno-extra
5002 Warn if an initialized field without side effects is overridden when
5003 using designated initializers (@pxref{Designated Inits, , Designated
5004 Initializers}).
5006 This warning is included in @option{-Wextra}.  To get other
5007 @option{-Wextra} warnings without this one, use @option{-Wextra
5008 -Wno-override-init}.
5010 @item -Wpacked
5011 @opindex Wpacked
5012 @opindex Wno-packed
5013 Warn if a structure is given the packed attribute, but the packed
5014 attribute has no effect on the layout or size of the structure.
5015 Such structures may be mis-aligned for little benefit.  For
5016 instance, in this code, the variable @code{f.x} in @code{struct bar}
5017 is misaligned even though @code{struct bar} does not itself
5018 have the packed attribute:
5020 @smallexample
5021 @group
5022 struct foo @{
5023   int x;
5024   char a, b, c, d;
5025 @} __attribute__((packed));
5026 struct bar @{
5027   char z;
5028   struct foo f;
5030 @end group
5031 @end smallexample
5033 @item -Wpacked-bitfield-compat
5034 @opindex Wpacked-bitfield-compat
5035 @opindex Wno-packed-bitfield-compat
5036 The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
5037 on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
5038 the change can lead to differences in the structure layout.  GCC
5039 informs you when the offset of such a field has changed in GCC 4.4.
5040 For example there is no longer a 4-bit padding between field @code{a}
5041 and @code{b} in this structure:
5043 @smallexample
5044 struct foo
5046   char a:4;
5047   char b:8;
5048 @} __attribute__ ((packed));
5049 @end smallexample
5051 This warning is enabled by default.  Use
5052 @option{-Wno-packed-bitfield-compat} to disable this warning.
5054 @item -Wpadded
5055 @opindex Wpadded
5056 @opindex Wno-padded
5057 Warn if padding is included in a structure, either to align an element
5058 of the structure or to align the whole structure.  Sometimes when this
5059 happens it is possible to rearrange the fields of the structure to
5060 reduce the padding and so make the structure smaller.
5062 @item -Wredundant-decls
5063 @opindex Wredundant-decls
5064 @opindex Wno-redundant-decls
5065 Warn if anything is declared more than once in the same scope, even in
5066 cases where multiple declaration is valid and changes nothing.
5068 @item -Wnested-externs @r{(C and Objective-C only)}
5069 @opindex Wnested-externs
5070 @opindex Wno-nested-externs
5071 Warn if an @code{extern} declaration is encountered within a function.
5073 @item -Wno-inherited-variadic-ctor
5074 @opindex Winherited-variadic-ctor
5075 @opindex Wno-inherited-variadic-ctor
5076 Suppress warnings about use of C++11 inheriting constructors when the
5077 base class inherited from has a C variadic constructor; the warning is
5078 on by default because the ellipsis is not inherited.
5080 @item -Winline
5081 @opindex Winline
5082 @opindex Wno-inline
5083 Warn if a function that is declared as inline cannot be inlined.
5084 Even with this option, the compiler does not warn about failures to
5085 inline functions declared in system headers.
5087 The compiler uses a variety of heuristics to determine whether or not
5088 to inline a function.  For example, the compiler takes into account
5089 the size of the function being inlined and the amount of inlining
5090 that has already been done in the current function.  Therefore,
5091 seemingly insignificant changes in the source program can cause the
5092 warnings produced by @option{-Winline} to appear or disappear.
5094 @item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
5095 @opindex Wno-invalid-offsetof
5096 @opindex Winvalid-offsetof
5097 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
5098 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
5099 to a non-POD type is undefined.  In existing C++ implementations,
5100 however, @samp{offsetof} typically gives meaningful results even when
5101 applied to certain kinds of non-POD types (such as a simple
5102 @samp{struct} that fails to be a POD type only by virtue of having a
5103 constructor).  This flag is for users who are aware that they are
5104 writing nonportable code and who have deliberately chosen to ignore the
5105 warning about it.
5107 The restrictions on @samp{offsetof} may be relaxed in a future version
5108 of the C++ standard.
5110 @item -Wno-int-to-pointer-cast
5111 @opindex Wno-int-to-pointer-cast
5112 @opindex Wint-to-pointer-cast
5113 Suppress warnings from casts to pointer type of an integer of a
5114 different size. In C++, casting to a pointer type of smaller size is
5115 an error. @option{Wint-to-pointer-cast} is enabled by default.
5118 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
5119 @opindex Wno-pointer-to-int-cast
5120 @opindex Wpointer-to-int-cast
5121 Suppress warnings from casts from a pointer to an integer type of a
5122 different size.
5124 @item -Winvalid-pch
5125 @opindex Winvalid-pch
5126 @opindex Wno-invalid-pch
5127 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
5128 the search path but can't be used.
5130 @item -Wlong-long
5131 @opindex Wlong-long
5132 @opindex Wno-long-long
5133 Warn if @samp{long long} type is used.  This is enabled by either
5134 @option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
5135 modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
5137 @item -Wvariadic-macros
5138 @opindex Wvariadic-macros
5139 @opindex Wno-variadic-macros
5140 Warn if variadic macros are used in ISO C90 mode, or if the GNU
5141 alternate syntax is used in ISO C99 mode.  This is enabled by either
5142 @option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
5143 messages, use @option{-Wno-variadic-macros}.
5145 @item -Wvarargs
5146 @opindex Wvarargs
5147 @opindex Wno-varargs
5148 Warn upon questionable usage of the macros used to handle variable
5149 arguments like @samp{va_start}.  This is default.  To inhibit the
5150 warning messages, use @option{-Wno-varargs}.
5152 @item -Wvector-operation-performance
5153 @opindex Wvector-operation-performance
5154 @opindex Wno-vector-operation-performance
5155 Warn if vector operation is not implemented via SIMD capabilities of the
5156 architecture.  Mainly useful for the performance tuning.
5157 Vector operation can be implemented @code{piecewise}, which means that the
5158 scalar operation is performed on every vector element; 
5159 @code{in parallel}, which means that the vector operation is implemented
5160 using scalars of wider type, which normally is more performance efficient;
5161 and @code{as a single scalar}, which means that vector fits into a
5162 scalar type.
5164 @item -Wno-virtual-move-assign
5165 @opindex Wvirtual-move-assign
5166 @opindex Wno-virtual-move-assign
5167 Suppress warnings about inheriting from a virtual base with a
5168 non-trivial C++11 move assignment operator.  This is dangerous because
5169 if the virtual base is reachable along more than one path, it will be
5170 moved multiple times, which can mean both objects end up in the
5171 moved-from state.  If the move assignment operator is written to avoid
5172 moving from a moved-from object, this warning can be disabled.
5174 @item -Wvla
5175 @opindex Wvla
5176 @opindex Wno-vla
5177 Warn if variable length array is used in the code.
5178 @option{-Wno-vla} prevents the @option{-Wpedantic} warning of
5179 the variable length array.
5181 @item -Wvolatile-register-var
5182 @opindex Wvolatile-register-var
5183 @opindex Wno-volatile-register-var
5184 Warn if a register variable is declared volatile.  The volatile
5185 modifier does not inhibit all optimizations that may eliminate reads
5186 and/or writes to register variables.  This warning is enabled by
5187 @option{-Wall}.
5189 @item -Wdisabled-optimization
5190 @opindex Wdisabled-optimization
5191 @opindex Wno-disabled-optimization
5192 Warn if a requested optimization pass is disabled.  This warning does
5193 not generally indicate that there is anything wrong with your code; it
5194 merely indicates that GCC's optimizers are unable to handle the code
5195 effectively.  Often, the problem is that your code is too big or too
5196 complex; GCC refuses to optimize programs when the optimization
5197 itself is likely to take inordinate amounts of time.
5199 @item -Wpointer-sign @r{(C and Objective-C only)}
5200 @opindex Wpointer-sign
5201 @opindex Wno-pointer-sign
5202 Warn for pointer argument passing or assignment with different signedness.
5203 This option is only supported for C and Objective-C@.  It is implied by
5204 @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
5205 @option{-Wno-pointer-sign}.
5207 @item -Wstack-protector
5208 @opindex Wstack-protector
5209 @opindex Wno-stack-protector
5210 This option is only active when @option{-fstack-protector} is active.  It
5211 warns about functions that are not protected against stack smashing.
5213 @item -Woverlength-strings
5214 @opindex Woverlength-strings
5215 @opindex Wno-overlength-strings
5216 Warn about string constants that are longer than the ``minimum
5217 maximum'' length specified in the C standard.  Modern compilers
5218 generally allow string constants that are much longer than the
5219 standard's minimum limit, but very portable programs should avoid
5220 using longer strings.
5222 The limit applies @emph{after} string constant concatenation, and does
5223 not count the trailing NUL@.  In C90, the limit was 509 characters; in
5224 C99, it was raised to 4095.  C++98 does not specify a normative
5225 minimum maximum, so we do not diagnose overlength strings in C++@.
5227 This option is implied by @option{-Wpedantic}, and can be disabled with
5228 @option{-Wno-overlength-strings}.
5230 @item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
5231 @opindex Wunsuffixed-float-constants
5233 Issue a warning for any floating constant that does not have
5234 a suffix.  When used together with @option{-Wsystem-headers} it
5235 warns about such constants in system header files.  This can be useful
5236 when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
5237 from the decimal floating-point extension to C99.
5239 @item -Wno-designated-init @r{(C and Objective-C only)}
5240 Suppress warnings when a positional initializer is used to initialize
5241 a structure that has been marked with the @code{designated_init}
5242 attribute.
5244 @end table
5246 @node Debugging Options
5247 @section Options for Debugging Your Program or GCC
5248 @cindex options, debugging
5249 @cindex debugging information options
5251 GCC has various special options that are used for debugging
5252 either your program or GCC:
5254 @table @gcctabopt
5255 @item -g
5256 @opindex g
5257 Produce debugging information in the operating system's native format
5258 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
5259 information.
5261 On most systems that use stabs format, @option{-g} enables use of extra
5262 debugging information that only GDB can use; this extra information
5263 makes debugging work better in GDB but probably makes other debuggers
5264 crash or
5265 refuse to read the program.  If you want to control for certain whether
5266 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
5267 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
5269 GCC allows you to use @option{-g} with
5270 @option{-O}.  The shortcuts taken by optimized code may occasionally
5271 produce surprising results: some variables you declared may not exist
5272 at all; flow of control may briefly move where you did not expect it;
5273 some statements may not be executed because they compute constant
5274 results or their values are already at hand; some statements may
5275 execute in different places because they have been moved out of loops.
5277 Nevertheless it proves possible to debug optimized output.  This makes
5278 it reasonable to use the optimizer for programs that might have bugs.
5280 The following options are useful when GCC is generated with the
5281 capability for more than one debugging format.
5283 @item -gsplit-dwarf
5284 @opindex gsplit-dwarf
5285 Separate as much dwarf debugging information as possible into a
5286 separate output file with the extension .dwo.  This option allows
5287 the build system to avoid linking files with debug information.  To
5288 be useful, this option requires a debugger capable of reading .dwo
5289 files.
5291 @item -ggdb
5292 @opindex ggdb
5293 Produce debugging information for use by GDB@.  This means to use the
5294 most expressive format available (DWARF 2, stabs, or the native format
5295 if neither of those are supported), including GDB extensions if at all
5296 possible.
5298 @item -gpubnames
5299 @opindex gpubnames
5300 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
5302 @item -ggnu-pubnames
5303 @opindex ggnu-pubnames
5304 Generate .debug_pubnames and .debug_pubtypes sections in a format
5305 suitable for conversion into a GDB@ index.  This option is only useful
5306 with a linker that can produce GDB@ index version 7.
5308 @item -gstabs
5309 @opindex gstabs
5310 Produce debugging information in stabs format (if that is supported),
5311 without GDB extensions.  This is the format used by DBX on most BSD
5312 systems.  On MIPS, Alpha and System V Release 4 systems this option
5313 produces stabs debugging output that is not understood by DBX or SDB@.
5314 On System V Release 4 systems this option requires the GNU assembler.
5316 @item -feliminate-unused-debug-symbols
5317 @opindex feliminate-unused-debug-symbols
5318 Produce debugging information in stabs format (if that is supported),
5319 for only symbols that are actually used.
5321 @item -femit-class-debug-always
5322 Instead of emitting debugging information for a C++ class in only one
5323 object file, emit it in all object files using the class.  This option
5324 should be used only with debuggers that are unable to handle the way GCC
5325 normally emits debugging information for classes because using this
5326 option increases the size of debugging information by as much as a
5327 factor of two.
5329 @item -fdebug-types-section
5330 @opindex fdebug-types-section
5331 @opindex fno-debug-types-section
5332 When using DWARF Version 4 or higher, type DIEs can be put into
5333 their own @code{.debug_types} section instead of making them part of the
5334 @code{.debug_info} section.  It is more efficient to put them in a separate
5335 comdat sections since the linker can then remove duplicates.
5336 But not all DWARF consumers support @code{.debug_types} sections yet
5337 and on some objects @code{.debug_types} produces larger instead of smaller
5338 debugging information.
5340 @item -gstabs+
5341 @opindex gstabs+
5342 Produce debugging information in stabs format (if that is supported),
5343 using GNU extensions understood only by the GNU debugger (GDB)@.  The
5344 use of these extensions is likely to make other debuggers crash or
5345 refuse to read the program.
5347 @item -gcoff
5348 @opindex gcoff
5349 Produce debugging information in COFF format (if that is supported).
5350 This is the format used by SDB on most System V systems prior to
5351 System V Release 4.
5353 @item -gxcoff
5354 @opindex gxcoff
5355 Produce debugging information in XCOFF format (if that is supported).
5356 This is the format used by the DBX debugger on IBM RS/6000 systems.
5358 @item -gxcoff+
5359 @opindex gxcoff+
5360 Produce debugging information in XCOFF format (if that is supported),
5361 using GNU extensions understood only by the GNU debugger (GDB)@.  The
5362 use of these extensions is likely to make other debuggers crash or
5363 refuse to read the program, and may cause assemblers other than the GNU
5364 assembler (GAS) to fail with an error.
5366 @item -gdwarf-@var{version}
5367 @opindex gdwarf-@var{version}
5368 Produce debugging information in DWARF format (if that is supported).
5369 The value of @var{version} may be either 2, 3 or 4; the default version
5370 for most targets is 4.
5372 Note that with DWARF Version 2, some ports require and always
5373 use some non-conflicting DWARF 3 extensions in the unwind tables.
5375 Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
5376 for maximum benefit.
5378 @item -grecord-gcc-switches
5379 @opindex grecord-gcc-switches
5380 This switch causes the command-line options used to invoke the
5381 compiler that may affect code generation to be appended to the
5382 DW_AT_producer attribute in DWARF debugging information.  The options
5383 are concatenated with spaces separating them from each other and from
5384 the compiler version.  See also @option{-frecord-gcc-switches} for another
5385 way of storing compiler options into the object file.  This is the default.
5387 @item -gno-record-gcc-switches
5388 @opindex gno-record-gcc-switches
5389 Disallow appending command-line options to the DW_AT_producer attribute
5390 in DWARF debugging information.
5392 @item -gstrict-dwarf
5393 @opindex gstrict-dwarf
5394 Disallow using extensions of later DWARF standard version than selected
5395 with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
5396 DWARF extensions from later standard versions is allowed.
5398 @item -gno-strict-dwarf
5399 @opindex gno-strict-dwarf
5400 Allow using extensions of later DWARF standard version than selected with
5401 @option{-gdwarf-@var{version}}.
5403 @item -gz@r{[}=@var{type}@r{]}
5404 @opindex gz
5405 Produce compressed debug sections in DWARF format, if that is supported.
5406 If @var{type} is not given, the default type depends on the capabilities
5407 of the assembler and linker used.  @var{type} may be one of
5408 @option{none} (don't compress debug sections), @option{zlib} (use zlib
5409 compression in ELF gABI format), or @option{zlib-gnu} (use zlib
5410 compression in traditional GNU format).  If the linker doesn't support
5411 writing compressed debug sections, the option is rejected.  Otherwise,
5412 if the assembler does not support them, @option{-gz} is silently ignored
5413 when producing object files.
5415 @item -gvms
5416 @opindex gvms
5417 Produce debugging information in Alpha/VMS debug format (if that is
5418 supported).  This is the format used by DEBUG on Alpha/VMS systems.
5420 @item -g@var{level}
5421 @itemx -ggdb@var{level}
5422 @itemx -gstabs@var{level}
5423 @itemx -gcoff@var{level}
5424 @itemx -gxcoff@var{level}
5425 @itemx -gvms@var{level}
5426 Request debugging information and also use @var{level} to specify how
5427 much information.  The default level is 2.
5429 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
5430 @option{-g}.
5432 Level 1 produces minimal information, enough for making backtraces in
5433 parts of the program that you don't plan to debug.  This includes
5434 descriptions of functions and external variables, and line number
5435 tables, but no information about local variables.
5437 Level 3 includes extra information, such as all the macro definitions
5438 present in the program.  Some debuggers support macro expansion when
5439 you use @option{-g3}.
5441 @option{-gdwarf-2} does not accept a concatenated debug level, because
5442 GCC used to support an option @option{-gdwarf} that meant to generate
5443 debug information in version 1 of the DWARF format (which is very
5444 different from version 2), and it would have been too confusing.  That
5445 debug format is long obsolete, but the option cannot be changed now.
5446 Instead use an additional @option{-g@var{level}} option to change the
5447 debug level for DWARF.
5449 @item -gtoggle
5450 @opindex gtoggle
5451 Turn off generation of debug info, if leaving out this option
5452 generates it, or turn it on at level 2 otherwise.  The position of this
5453 argument in the command line does not matter; it takes effect after all
5454 other options are processed, and it does so only once, no matter how
5455 many times it is given.  This is mainly intended to be used with
5456 @option{-fcompare-debug}.
5458 @item -fsanitize=address
5459 @opindex fsanitize=address
5460 Enable AddressSanitizer, a fast memory error detector.
5461 Memory access instructions will be instrumented to detect
5462 out-of-bounds and use-after-free bugs.
5463 See @uref{http://code.google.com/p/address-sanitizer/} for
5464 more details.  The run-time behavior can be influenced using the
5465 @env{ASAN_OPTIONS} environment variable; see
5466 @url{https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags} for
5467 a list of supported options.
5469 @item -fsanitize=kernel-address
5470 @opindex fsanitize=kernel-address
5471 Enable AddressSanitizer for Linux kernel.
5472 See @uref{http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel} for more details.
5474 @item -fsanitize=thread
5475 @opindex fsanitize=thread
5476 Enable ThreadSanitizer, a fast data race detector.
5477 Memory access instructions will be instrumented to detect
5478 data race bugs.  See @uref{http://code.google.com/p/thread-sanitizer/} for more
5479 details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
5480 environment variable; see
5481 @url{https://code.google.com/p/thread-sanitizer/wiki/Flags} for a list of
5482 supported options.
5484 @item -fsanitize=leak
5485 @opindex fsanitize=leak
5486 Enable LeakSanitizer, a memory leak detector.
5487 This option only matters for linking of executables and if neither
5488 @option{-fsanitize=address} nor @option{-fsanitize=thread} is used.  In that
5489 case it will link the executable against a library that overrides @code{malloc}
5490 and other allocator functions.  See
5491 @uref{https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer} for more
5492 details.  The run-time behavior can be influenced using the
5493 @env{LSAN_OPTIONS} environment variable.
5495 @item -fsanitize=undefined
5496 @opindex fsanitize=undefined
5497 Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
5498 Various computations will be instrumented to detect undefined behavior
5499 at runtime.  Current suboptions are:
5501 @table @gcctabopt
5503 @item -fsanitize=shift
5504 @opindex fsanitize=shift
5505 This option enables checking that the result of a shift operation is
5506 not undefined.  Note that what exactly is considered undefined differs
5507 slightly between C and C++, as well as between ISO C90 and C99, etc.
5509 @item -fsanitize=integer-divide-by-zero
5510 @opindex fsanitize=integer-divide-by-zero
5511 Detect integer division by zero as well as @code{INT_MIN / -1} division.
5513 @item -fsanitize=unreachable
5514 @opindex fsanitize=unreachable
5515 With this option, the compiler will turn the @code{__builtin_unreachable}
5516 call into a diagnostics message call instead.  When reaching the
5517 @code{__builtin_unreachable} call, the behavior is undefined.
5519 @item -fsanitize=vla-bound
5520 @opindex fsanitize=vla-bound
5521 This option instructs the compiler to check that the size of a variable
5522 length array is positive.  This option does not have any effect in
5523 @option{-std=c++14} mode, as the standard requires the exception be thrown
5524 instead.
5526 @item -fsanitize=null
5527 @opindex fsanitize=null
5528 This option enables pointer checking.  Particularly, the application
5529 built with this option turned on will issue an error message when it
5530 tries to dereference a NULL pointer, or if a reference (possibly an
5531 rvalue reference) is bound to a NULL pointer, or if a method is invoked
5532 on an object pointed by a NULL pointer.
5534 @item -fsanitize=return
5535 @opindex fsanitize=return
5536 This option enables return statement checking.  Programs
5537 built with this option turned on will issue an error message
5538 when the end of a non-void function is reached without actually
5539 returning a value.  This option works in C++ only.
5541 @item -fsanitize=signed-integer-overflow
5542 @opindex fsanitize=signed-integer-overflow
5543 This option enables signed integer overflow checking.  We check that
5544 the result of @code{+}, @code{*}, and both unary and binary @code{-}
5545 does not overflow in the signed arithmetics.  Note, integer promotion
5546 rules must be taken into account.  That is, the following is not an
5547 overflow:
5548 @smallexample
5549 signed char a = SCHAR_MAX;
5550 a++;
5551 @end smallexample
5553 @item -fsanitize=bounds
5554 @opindex fsanitize=bounds
5555 This option enables instrumentation of array bounds.  Various out of bounds
5556 accesses are detected.  Flexible array members and initializers of variables
5557 with static storage are not instrumented.
5559 @item -fsanitize=alignment
5560 @opindex fsanitize=alignment
5562 This option enables checking of alignment of pointers when they are
5563 dereferenced, or when a reference is bound to insufficiently aligned target,
5564 or when a method or constructor is invoked on insufficiently aligned object.
5566 @item -fsanitize=float-divide-by-zero
5567 @opindex fsanitize=float-divide-by-zero
5568 Detect floating-point division by zero.  Unlike other similar options,
5569 @option{-fsanitize=float-divide-by-zero} is not enabled by
5570 @option{-fsanitize=undefined}, since floating-point division by zero can
5571 be a legitimate way of obtaining infinities and NaNs.
5573 @item -fsanitize=float-cast-overflow
5574 @opindex fsanitize=float-cast-overflow
5575 This option enables floating-point type to integer conversion checking.
5576 We check that the result of the conversion does not overflow.
5577 This option does not work well with @code{FE_INVALID} exceptions enabled.
5579 @end table
5581 While @option{-ftrapv} causes traps for signed overflows to be emitted,
5582 @option{-fsanitize=undefined} gives a diagnostic message.
5583 This currently works only for the C family of languages.
5585 @item -fsanitize-recover
5586 @opindex fsanitize-recover
5587 By default @option{-fsanitize=undefined} sanitization (and its suboptions
5588 except for @option{-fsanitize=unreachable} and @option{-fsanitize=return})
5589 after reporting undefined behavior attempts to continue running the
5590 program as if no undefined behavior happened.  This means multiple undefined
5591 behavior runtime errors can be reported in a single program run, and the exit
5592 code of the program may indicate success even when undefined behavior
5593 has been reported.  The @option{-fno-sanitize-recover} can be used to alter
5594 this behavior, only the first detected undefined behavior will be reported
5595 and program will exit after that with non-zero exit code.
5597 @item -fsanitize-undefined-trap-on-error
5598 @opindex fsanitize-undefined-trap-on-error
5599 The @option{-fsanitize-undefined-trap-on-error} instructs the compiler to
5600 report undefined behavior using @code{__builtin_trap ()} rather than
5601 a @code{libubsan} library routine.  The advantage of this is that the
5602 @code{libubsan} library is not needed and will not be linked in, so this
5603 is usable even for use in freestanding environments.
5605 @item -fdump-final-insns@r{[}=@var{file}@r{]}
5606 @opindex fdump-final-insns
5607 Dump the final internal representation (RTL) to @var{file}.  If the
5608 optional argument is omitted (or if @var{file} is @code{.}), the name
5609 of the dump file is determined by appending @code{.gkd} to the
5610 compilation output file name.
5612 @item -fcompare-debug@r{[}=@var{opts}@r{]}
5613 @opindex fcompare-debug
5614 @opindex fno-compare-debug
5615 If no error occurs during compilation, run the compiler a second time,
5616 adding @var{opts} and @option{-fcompare-debug-second} to the arguments
5617 passed to the second compilation.  Dump the final internal
5618 representation in both compilations, and print an error if they differ.
5620 If the equal sign is omitted, the default @option{-gtoggle} is used.
5622 The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
5623 and nonzero, implicitly enables @option{-fcompare-debug}.  If
5624 @env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
5625 then it is used for @var{opts}, otherwise the default @option{-gtoggle}
5626 is used.
5628 @option{-fcompare-debug=}, with the equal sign but without @var{opts},
5629 is equivalent to @option{-fno-compare-debug}, which disables the dumping
5630 of the final representation and the second compilation, preventing even
5631 @env{GCC_COMPARE_DEBUG} from taking effect.
5633 To verify full coverage during @option{-fcompare-debug} testing, set
5634 @env{GCC_COMPARE_DEBUG} to say @samp{-fcompare-debug-not-overridden},
5635 which GCC rejects as an invalid option in any actual compilation
5636 (rather than preprocessing, assembly or linking).  To get just a
5637 warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
5638 not overridden} will do.
5640 @item -fcompare-debug-second
5641 @opindex fcompare-debug-second
5642 This option is implicitly passed to the compiler for the second
5643 compilation requested by @option{-fcompare-debug}, along with options to
5644 silence warnings, and omitting other options that would cause
5645 side-effect compiler outputs to files or to the standard output.  Dump
5646 files and preserved temporary files are renamed so as to contain the
5647 @code{.gk} additional extension during the second compilation, to avoid
5648 overwriting those generated by the first.
5650 When this option is passed to the compiler driver, it causes the
5651 @emph{first} compilation to be skipped, which makes it useful for little
5652 other than debugging the compiler proper.
5654 @item -feliminate-dwarf2-dups
5655 @opindex feliminate-dwarf2-dups
5656 Compress DWARF 2 debugging information by eliminating duplicated
5657 information about each symbol.  This option only makes sense when
5658 generating DWARF 2 debugging information with @option{-gdwarf-2}.
5660 @item -femit-struct-debug-baseonly
5661 @opindex femit-struct-debug-baseonly
5662 Emit debug information for struct-like types
5663 only when the base name of the compilation source file
5664 matches the base name of file in which the struct is defined.
5666 This option substantially reduces the size of debugging information,
5667 but at significant potential loss in type information to the debugger.
5668 See @option{-femit-struct-debug-reduced} for a less aggressive option.
5669 See @option{-femit-struct-debug-detailed} for more detailed control.
5671 This option works only with DWARF 2.
5673 @item -femit-struct-debug-reduced
5674 @opindex femit-struct-debug-reduced
5675 Emit debug information for struct-like types
5676 only when the base name of the compilation source file
5677 matches the base name of file in which the type is defined,
5678 unless the struct is a template or defined in a system header.
5680 This option significantly reduces the size of debugging information,
5681 with some potential loss in type information to the debugger.
5682 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
5683 See @option{-femit-struct-debug-detailed} for more detailed control.
5685 This option works only with DWARF 2.
5687 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
5688 Specify the struct-like types
5689 for which the compiler generates debug information.
5690 The intent is to reduce duplicate struct debug information
5691 between different object files within the same program.
5693 This option is a detailed version of
5694 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
5695 which serves for most needs.
5697 A specification has the syntax@*
5698 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
5700 The optional first word limits the specification to
5701 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
5702 A struct type is used directly when it is the type of a variable, member.
5703 Indirect uses arise through pointers to structs.
5704 That is, when use of an incomplete struct is valid, the use is indirect.
5705 An example is
5706 @samp{struct one direct; struct two * indirect;}.
5708 The optional second word limits the specification to
5709 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
5710 Generic structs are a bit complicated to explain.
5711 For C++, these are non-explicit specializations of template classes,
5712 or non-template classes within the above.
5713 Other programming languages have generics,
5714 but @option{-femit-struct-debug-detailed} does not yet implement them.
5716 The third word specifies the source files for those
5717 structs for which the compiler should emit debug information.
5718 The values @samp{none} and @samp{any} have the normal meaning.
5719 The value @samp{base} means that
5720 the base of name of the file in which the type declaration appears
5721 must match the base of the name of the main compilation file.
5722 In practice, this means that when compiling @file{foo.c}, debug information
5723 is generated for types declared in that file and @file{foo.h},
5724 but not other header files.
5725 The value @samp{sys} means those types satisfying @samp{base}
5726 or declared in system or compiler headers.
5728 You may need to experiment to determine the best settings for your application.
5730 The default is @option{-femit-struct-debug-detailed=all}.
5732 This option works only with DWARF 2.
5734 @item -fno-merge-debug-strings
5735 @opindex fmerge-debug-strings
5736 @opindex fno-merge-debug-strings
5737 Direct the linker to not merge together strings in the debugging
5738 information that are identical in different object files.  Merging is
5739 not supported by all assemblers or linkers.  Merging decreases the size
5740 of the debug information in the output file at the cost of increasing
5741 link processing time.  Merging is enabled by default.
5743 @item -fdebug-prefix-map=@var{old}=@var{new}
5744 @opindex fdebug-prefix-map
5745 When compiling files in directory @file{@var{old}}, record debugging
5746 information describing them as in @file{@var{new}} instead.
5748 @item -fno-dwarf2-cfi-asm
5749 @opindex fdwarf2-cfi-asm
5750 @opindex fno-dwarf2-cfi-asm
5751 Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
5752 instead of using GAS @code{.cfi_*} directives.
5754 @cindex @command{prof}
5755 @item -p
5756 @opindex p
5757 Generate extra code to write profile information suitable for the
5758 analysis program @command{prof}.  You must use this option when compiling
5759 the source files you want data about, and you must also use it when
5760 linking.
5762 @cindex @command{gprof}
5763 @item -pg
5764 @opindex pg
5765 Generate extra code to write profile information suitable for the
5766 analysis program @command{gprof}.  You must use this option when compiling
5767 the source files you want data about, and you must also use it when
5768 linking.
5770 @item -Q
5771 @opindex Q
5772 Makes the compiler print out each function name as it is compiled, and
5773 print some statistics about each pass when it finishes.
5775 @item -ftime-report
5776 @opindex ftime-report
5777 Makes the compiler print some statistics about the time consumed by each
5778 pass when it finishes.
5780 @item -fmem-report
5781 @opindex fmem-report
5782 Makes the compiler print some statistics about permanent memory
5783 allocation when it finishes.
5785 @item -fmem-report-wpa
5786 @opindex fmem-report-wpa
5787 Makes the compiler print some statistics about permanent memory
5788 allocation for the WPA phase only.
5790 @item -fpre-ipa-mem-report
5791 @opindex fpre-ipa-mem-report
5792 @item -fpost-ipa-mem-report
5793 @opindex fpost-ipa-mem-report
5794 Makes the compiler print some statistics about permanent memory
5795 allocation before or after interprocedural optimization.
5797 @item -fprofile-report
5798 @opindex fprofile-report
5799 Makes the compiler print some statistics about consistency of the
5800 (estimated) profile and effect of individual passes.
5802 @item -fstack-usage
5803 @opindex fstack-usage
5804 Makes the compiler output stack usage information for the program, on a
5805 per-function basis.  The filename for the dump is made by appending
5806 @file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
5807 the output file, if explicitly specified and it is not an executable,
5808 otherwise it is the basename of the source file.  An entry is made up
5809 of three fields:
5811 @itemize
5812 @item
5813 The name of the function.
5814 @item
5815 A number of bytes.
5816 @item
5817 One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
5818 @end itemize
5820 The qualifier @code{static} means that the function manipulates the stack
5821 statically: a fixed number of bytes are allocated for the frame on function
5822 entry and released on function exit; no stack adjustments are otherwise made
5823 in the function.  The second field is this fixed number of bytes.
5825 The qualifier @code{dynamic} means that the function manipulates the stack
5826 dynamically: in addition to the static allocation described above, stack
5827 adjustments are made in the body of the function, for example to push/pop
5828 arguments around function calls.  If the qualifier @code{bounded} is also
5829 present, the amount of these adjustments is bounded at compile time and
5830 the second field is an upper bound of the total amount of stack used by
5831 the function.  If it is not present, the amount of these adjustments is
5832 not bounded at compile time and the second field only represents the
5833 bounded part.
5835 @item -fprofile-arcs
5836 @opindex fprofile-arcs
5837 Add code so that program flow @dfn{arcs} are instrumented.  During
5838 execution the program records how many times each branch and call is
5839 executed and how many times it is taken or returns.  When the compiled
5840 program exits it saves this data to a file called
5841 @file{@var{auxname}.gcda} for each source file.  The data may be used for
5842 profile-directed optimizations (@option{-fbranch-probabilities}), or for
5843 test coverage analysis (@option{-ftest-coverage}).  Each object file's
5844 @var{auxname} is generated from the name of the output file, if
5845 explicitly specified and it is not the final executable, otherwise it is
5846 the basename of the source file.  In both cases any suffix is removed
5847 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
5848 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
5849 @xref{Cross-profiling}.
5851 @cindex @command{gcov}
5852 @item --coverage
5853 @opindex coverage
5855 This option is used to compile and link code instrumented for coverage
5856 analysis.  The option is a synonym for @option{-fprofile-arcs}
5857 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
5858 linking).  See the documentation for those options for more details.
5860 @itemize
5862 @item
5863 Compile the source files with @option{-fprofile-arcs} plus optimization
5864 and code generation options.  For test coverage analysis, use the
5865 additional @option{-ftest-coverage} option.  You do not need to profile
5866 every source file in a program.
5868 @item
5869 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
5870 (the latter implies the former).
5872 @item
5873 Run the program on a representative workload to generate the arc profile
5874 information.  This may be repeated any number of times.  You can run
5875 concurrent instances of your program, and provided that the file system
5876 supports locking, the data files will be correctly updated.  Also
5877 @code{fork} calls are detected and correctly handled (double counting
5878 will not happen).
5880 @item
5881 For profile-directed optimizations, compile the source files again with
5882 the same optimization and code generation options plus
5883 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
5884 Control Optimization}).
5886 @item
5887 For test coverage analysis, use @command{gcov} to produce human readable
5888 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
5889 @command{gcov} documentation for further information.
5891 @end itemize
5893 With @option{-fprofile-arcs}, for each function of your program GCC
5894 creates a program flow graph, then finds a spanning tree for the graph.
5895 Only arcs that are not on the spanning tree have to be instrumented: the
5896 compiler adds code to count the number of times that these arcs are
5897 executed.  When an arc is the only exit or only entrance to a block, the
5898 instrumentation code can be added to the block; otherwise, a new basic
5899 block must be created to hold the instrumentation code.
5901 @need 2000
5902 @item -ftest-coverage
5903 @opindex ftest-coverage
5904 Produce a notes file that the @command{gcov} code-coverage utility
5905 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
5906 show program coverage.  Each source file's note file is called
5907 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
5908 above for a description of @var{auxname} and instructions on how to
5909 generate test coverage data.  Coverage data matches the source files
5910 more closely if you do not optimize.
5912 @item -fdbg-cnt-list
5913 @opindex fdbg-cnt-list
5914 Print the name and the counter upper bound for all debug counters.
5917 @item -fdbg-cnt=@var{counter-value-list}
5918 @opindex fdbg-cnt
5919 Set the internal debug counter upper bound.  @var{counter-value-list}
5920 is a comma-separated list of @var{name}:@var{value} pairs
5921 which sets the upper bound of each debug counter @var{name} to @var{value}.
5922 All debug counters have the initial upper bound of @code{UINT_MAX};
5923 thus @code{dbg_cnt()} returns true always unless the upper bound
5924 is set by this option.
5925 For example, with @option{-fdbg-cnt=dce:10,tail_call:0},
5926 @code{dbg_cnt(dce)} returns true only for first 10 invocations.
5928 @item -fenable-@var{kind}-@var{pass}
5929 @itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
5930 @opindex fdisable-
5931 @opindex fenable-
5933 This is a set of options that are used to explicitly disable/enable
5934 optimization passes.  These options are intended for use for debugging GCC.
5935 Compiler users should use regular options for enabling/disabling
5936 passes instead.
5938 @table @gcctabopt
5940 @item -fdisable-ipa-@var{pass}
5941 Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
5942 statically invoked in the compiler multiple times, the pass name should be
5943 appended with a sequential number starting from 1.
5945 @item -fdisable-rtl-@var{pass}
5946 @itemx -fdisable-rtl-@var{pass}=@var{range-list}
5947 Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
5948 statically invoked in the compiler multiple times, the pass name should be
5949 appended with a sequential number starting from 1.  @var{range-list} is a 
5950 comma-separated list of function ranges or assembler names.  Each range is a number
5951 pair separated by a colon.  The range is inclusive in both ends.  If the range
5952 is trivial, the number pair can be simplified as a single number.  If the
5953 function's call graph node's @var{uid} falls within one of the specified ranges,
5954 the @var{pass} is disabled for that function.  The @var{uid} is shown in the
5955 function header of a dump file, and the pass names can be dumped by using
5956 option @option{-fdump-passes}.
5958 @item -fdisable-tree-@var{pass}
5959 @itemx -fdisable-tree-@var{pass}=@var{range-list}
5960 Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
5961 option arguments.
5963 @item -fenable-ipa-@var{pass}
5964 Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
5965 statically invoked in the compiler multiple times, the pass name should be
5966 appended with a sequential number starting from 1.
5968 @item -fenable-rtl-@var{pass}
5969 @itemx -fenable-rtl-@var{pass}=@var{range-list}
5970 Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
5971 description and examples.
5973 @item -fenable-tree-@var{pass}
5974 @itemx -fenable-tree-@var{pass}=@var{range-list}
5975 Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
5976 of option arguments.
5978 @end table
5980 Here are some examples showing uses of these options.
5982 @smallexample
5984 # disable ccp1 for all functions
5985    -fdisable-tree-ccp1
5986 # disable complete unroll for function whose cgraph node uid is 1
5987    -fenable-tree-cunroll=1
5988 # disable gcse2 for functions at the following ranges [1,1],
5989 # [300,400], and [400,1000]
5990 # disable gcse2 for functions foo and foo2
5991    -fdisable-rtl-gcse2=foo,foo2
5992 # disable early inlining
5993    -fdisable-tree-einline
5994 # disable ipa inlining
5995    -fdisable-ipa-inline
5996 # enable tree full unroll
5997    -fenable-tree-unroll
5999 @end smallexample
6001 @item -d@var{letters}
6002 @itemx -fdump-rtl-@var{pass}
6003 @itemx -fdump-rtl-@var{pass}=@var{filename}
6004 @opindex d
6005 @opindex fdump-rtl-@var{pass}
6006 Says to make debugging dumps during compilation at times specified by
6007 @var{letters}.  This is used for debugging the RTL-based passes of the
6008 compiler.  The file names for most of the dumps are made by appending
6009 a pass number and a word to the @var{dumpname}, and the files are
6010 created in the directory of the output file. In case of
6011 @option{=@var{filename}} option, the dump is output on the given file
6012 instead of the pass numbered dump files. Note that the pass number is
6013 computed statically as passes get registered into the pass manager.
6014 Thus the numbering is not related to the dynamic order of execution of
6015 passes.  In particular, a pass installed by a plugin could have a
6016 number over 200 even if it executed quite early.  @var{dumpname} is
6017 generated from the name of the output file, if explicitly specified
6018 and it is not an executable, otherwise it is the basename of the
6019 source file. These switches may have different effects when
6020 @option{-E} is used for preprocessing.
6022 Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
6023 @option{-d} option @var{letters}.  Here are the possible
6024 letters for use in @var{pass} and @var{letters}, and their meanings:
6026 @table @gcctabopt
6028 @item -fdump-rtl-alignments
6029 @opindex fdump-rtl-alignments
6030 Dump after branch alignments have been computed.
6032 @item -fdump-rtl-asmcons
6033 @opindex fdump-rtl-asmcons
6034 Dump after fixing rtl statements that have unsatisfied in/out constraints.
6036 @item -fdump-rtl-auto_inc_dec
6037 @opindex fdump-rtl-auto_inc_dec
6038 Dump after auto-inc-dec discovery.  This pass is only run on
6039 architectures that have auto inc or auto dec instructions.
6041 @item -fdump-rtl-barriers
6042 @opindex fdump-rtl-barriers
6043 Dump after cleaning up the barrier instructions.
6045 @item -fdump-rtl-bbpart
6046 @opindex fdump-rtl-bbpart
6047 Dump after partitioning hot and cold basic blocks.
6049 @item -fdump-rtl-bbro
6050 @opindex fdump-rtl-bbro
6051 Dump after block reordering.
6053 @item -fdump-rtl-btl1
6054 @itemx -fdump-rtl-btl2
6055 @opindex fdump-rtl-btl2
6056 @opindex fdump-rtl-btl2
6057 @option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
6058 after the two branch
6059 target load optimization passes.
6061 @item -fdump-rtl-bypass
6062 @opindex fdump-rtl-bypass
6063 Dump after jump bypassing and control flow optimizations.
6065 @item -fdump-rtl-combine
6066 @opindex fdump-rtl-combine
6067 Dump after the RTL instruction combination pass.
6069 @item -fdump-rtl-compgotos
6070 @opindex fdump-rtl-compgotos
6071 Dump after duplicating the computed gotos.
6073 @item -fdump-rtl-ce1
6074 @itemx -fdump-rtl-ce2
6075 @itemx -fdump-rtl-ce3
6076 @opindex fdump-rtl-ce1
6077 @opindex fdump-rtl-ce2
6078 @opindex fdump-rtl-ce3
6079 @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
6080 @option{-fdump-rtl-ce3} enable dumping after the three
6081 if conversion passes.
6083 @item -fdump-rtl-cprop_hardreg
6084 @opindex fdump-rtl-cprop_hardreg
6085 Dump after hard register copy propagation.
6087 @item -fdump-rtl-csa
6088 @opindex fdump-rtl-csa
6089 Dump after combining stack adjustments.
6091 @item -fdump-rtl-cse1
6092 @itemx -fdump-rtl-cse2
6093 @opindex fdump-rtl-cse1
6094 @opindex fdump-rtl-cse2
6095 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
6096 the two common subexpression elimination passes.
6098 @item -fdump-rtl-dce
6099 @opindex fdump-rtl-dce
6100 Dump after the standalone dead code elimination passes.
6102 @item -fdump-rtl-dbr
6103 @opindex fdump-rtl-dbr
6104 Dump after delayed branch scheduling.
6106 @item -fdump-rtl-dce1
6107 @itemx -fdump-rtl-dce2
6108 @opindex fdump-rtl-dce1
6109 @opindex fdump-rtl-dce2
6110 @option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
6111 the two dead store elimination passes.
6113 @item -fdump-rtl-eh
6114 @opindex fdump-rtl-eh
6115 Dump after finalization of EH handling code.
6117 @item -fdump-rtl-eh_ranges
6118 @opindex fdump-rtl-eh_ranges
6119 Dump after conversion of EH handling range regions.
6121 @item -fdump-rtl-expand
6122 @opindex fdump-rtl-expand
6123 Dump after RTL generation.
6125 @item -fdump-rtl-fwprop1
6126 @itemx -fdump-rtl-fwprop2
6127 @opindex fdump-rtl-fwprop1
6128 @opindex fdump-rtl-fwprop2
6129 @option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
6130 dumping after the two forward propagation passes.
6132 @item -fdump-rtl-gcse1
6133 @itemx -fdump-rtl-gcse2
6134 @opindex fdump-rtl-gcse1
6135 @opindex fdump-rtl-gcse2
6136 @option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
6137 after global common subexpression elimination.
6139 @item -fdump-rtl-init-regs
6140 @opindex fdump-rtl-init-regs
6141 Dump after the initialization of the registers.
6143 @item -fdump-rtl-initvals
6144 @opindex fdump-rtl-initvals
6145 Dump after the computation of the initial value sets.
6147 @item -fdump-rtl-into_cfglayout
6148 @opindex fdump-rtl-into_cfglayout
6149 Dump after converting to cfglayout mode.
6151 @item -fdump-rtl-ira
6152 @opindex fdump-rtl-ira
6153 Dump after iterated register allocation.
6155 @item -fdump-rtl-jump
6156 @opindex fdump-rtl-jump
6157 Dump after the second jump optimization.
6159 @item -fdump-rtl-loop2
6160 @opindex fdump-rtl-loop2
6161 @option{-fdump-rtl-loop2} enables dumping after the rtl
6162 loop optimization passes.
6164 @item -fdump-rtl-mach
6165 @opindex fdump-rtl-mach
6166 Dump after performing the machine dependent reorganization pass, if that
6167 pass exists.
6169 @item -fdump-rtl-mode_sw
6170 @opindex fdump-rtl-mode_sw
6171 Dump after removing redundant mode switches.
6173 @item -fdump-rtl-rnreg
6174 @opindex fdump-rtl-rnreg
6175 Dump after register renumbering.
6177 @item -fdump-rtl-outof_cfglayout
6178 @opindex fdump-rtl-outof_cfglayout
6179 Dump after converting from cfglayout mode.
6181 @item -fdump-rtl-peephole2
6182 @opindex fdump-rtl-peephole2
6183 Dump after the peephole pass.
6185 @item -fdump-rtl-postreload
6186 @opindex fdump-rtl-postreload
6187 Dump after post-reload optimizations.
6189 @item -fdump-rtl-pro_and_epilogue
6190 @opindex fdump-rtl-pro_and_epilogue
6191 Dump after generating the function prologues and epilogues.
6193 @item -fdump-rtl-sched1
6194 @itemx -fdump-rtl-sched2
6195 @opindex fdump-rtl-sched1
6196 @opindex fdump-rtl-sched2
6197 @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
6198 after the basic block scheduling passes.
6200 @item -fdump-rtl-ree
6201 @opindex fdump-rtl-ree
6202 Dump after sign/zero extension elimination.
6204 @item -fdump-rtl-seqabstr
6205 @opindex fdump-rtl-seqabstr
6206 Dump after common sequence discovery.
6208 @item -fdump-rtl-shorten
6209 @opindex fdump-rtl-shorten
6210 Dump after shortening branches.
6212 @item -fdump-rtl-sibling
6213 @opindex fdump-rtl-sibling
6214 Dump after sibling call optimizations.
6216 @item -fdump-rtl-split1
6217 @itemx -fdump-rtl-split2
6218 @itemx -fdump-rtl-split3
6219 @itemx -fdump-rtl-split4
6220 @itemx -fdump-rtl-split5
6221 @opindex fdump-rtl-split1
6222 @opindex fdump-rtl-split2
6223 @opindex fdump-rtl-split3
6224 @opindex fdump-rtl-split4
6225 @opindex fdump-rtl-split5
6226 @option{-fdump-rtl-split1}, @option{-fdump-rtl-split2},
6227 @option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and
6228 @option{-fdump-rtl-split5} enable dumping after five rounds of
6229 instruction splitting.
6231 @item -fdump-rtl-sms
6232 @opindex fdump-rtl-sms
6233 Dump after modulo scheduling.  This pass is only run on some
6234 architectures.
6236 @item -fdump-rtl-stack
6237 @opindex fdump-rtl-stack
6238 Dump after conversion from GCC's ``flat register file'' registers to the
6239 x87's stack-like registers.  This pass is only run on x86 variants.
6241 @item -fdump-rtl-subreg1
6242 @itemx -fdump-rtl-subreg2
6243 @opindex fdump-rtl-subreg1
6244 @opindex fdump-rtl-subreg2
6245 @option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
6246 the two subreg expansion passes.
6248 @item -fdump-rtl-unshare
6249 @opindex fdump-rtl-unshare
6250 Dump after all rtl has been unshared.
6252 @item -fdump-rtl-vartrack
6253 @opindex fdump-rtl-vartrack
6254 Dump after variable tracking.
6256 @item -fdump-rtl-vregs
6257 @opindex fdump-rtl-vregs
6258 Dump after converting virtual registers to hard registers.
6260 @item -fdump-rtl-web
6261 @opindex fdump-rtl-web
6262 Dump after live range splitting.
6264 @item -fdump-rtl-regclass
6265 @itemx -fdump-rtl-subregs_of_mode_init
6266 @itemx -fdump-rtl-subregs_of_mode_finish
6267 @itemx -fdump-rtl-dfinit
6268 @itemx -fdump-rtl-dfinish
6269 @opindex fdump-rtl-regclass
6270 @opindex fdump-rtl-subregs_of_mode_init
6271 @opindex fdump-rtl-subregs_of_mode_finish
6272 @opindex fdump-rtl-dfinit
6273 @opindex fdump-rtl-dfinish
6274 These dumps are defined but always produce empty files.
6276 @item -da
6277 @itemx -fdump-rtl-all
6278 @opindex da
6279 @opindex fdump-rtl-all
6280 Produce all the dumps listed above.
6282 @item -dA
6283 @opindex dA
6284 Annotate the assembler output with miscellaneous debugging information.
6286 @item -dD
6287 @opindex dD
6288 Dump all macro definitions, at the end of preprocessing, in addition to
6289 normal output.
6291 @item -dH
6292 @opindex dH
6293 Produce a core dump whenever an error occurs.
6295 @item -dp
6296 @opindex dp
6297 Annotate the assembler output with a comment indicating which
6298 pattern and alternative is used.  The length of each instruction is
6299 also printed.
6301 @item -dP
6302 @opindex dP
6303 Dump the RTL in the assembler output as a comment before each instruction.
6304 Also turns on @option{-dp} annotation.
6306 @item -dx
6307 @opindex dx
6308 Just generate RTL for a function instead of compiling it.  Usually used
6309 with @option{-fdump-rtl-expand}.
6310 @end table
6312 @item -fdump-noaddr
6313 @opindex fdump-noaddr
6314 When doing debugging dumps, suppress address output.  This makes it more
6315 feasible to use diff on debugging dumps for compiler invocations with
6316 different compiler binaries and/or different
6317 text / bss / data / heap / stack / dso start locations.
6319 @item -fdump-unnumbered
6320 @opindex fdump-unnumbered
6321 When doing debugging dumps, suppress instruction numbers and address output.
6322 This makes it more feasible to use diff on debugging dumps for compiler
6323 invocations with different options, in particular with and without
6324 @option{-g}.
6326 @item -fdump-unnumbered-links
6327 @opindex fdump-unnumbered-links
6328 When doing debugging dumps (see @option{-d} option above), suppress
6329 instruction numbers for the links to the previous and next instructions
6330 in a sequence.
6332 @item -fdump-translation-unit @r{(C++ only)}
6333 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
6334 @opindex fdump-translation-unit
6335 Dump a representation of the tree structure for the entire translation
6336 unit to a file.  The file name is made by appending @file{.tu} to the
6337 source file name, and the file is created in the same directory as the
6338 output file.  If the @samp{-@var{options}} form is used, @var{options}
6339 controls the details of the dump as described for the
6340 @option{-fdump-tree} options.
6342 @item -fdump-class-hierarchy @r{(C++ only)}
6343 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
6344 @opindex fdump-class-hierarchy
6345 Dump a representation of each class's hierarchy and virtual function
6346 table layout to a file.  The file name is made by appending
6347 @file{.class} to the source file name, and the file is created in the
6348 same directory as the output file.  If the @samp{-@var{options}} form
6349 is used, @var{options} controls the details of the dump as described
6350 for the @option{-fdump-tree} options.
6352 @item -fdump-ipa-@var{switch}
6353 @opindex fdump-ipa
6354 Control the dumping at various stages of inter-procedural analysis
6355 language tree to a file.  The file name is generated by appending a
6356 switch specific suffix to the source file name, and the file is created
6357 in the same directory as the output file.  The following dumps are
6358 possible:
6360 @table @samp
6361 @item all
6362 Enables all inter-procedural analysis dumps.
6364 @item cgraph
6365 Dumps information about call-graph optimization, unused function removal,
6366 and inlining decisions.
6368 @item inline
6369 Dump after function inlining.
6371 @end table
6373 @item -fdump-passes
6374 @opindex fdump-passes
6375 Dump the list of optimization passes that are turned on and off by
6376 the current command-line options.
6378 @item -fdump-statistics-@var{option}
6379 @opindex fdump-statistics
6380 Enable and control dumping of pass statistics in a separate file.  The
6381 file name is generated by appending a suffix ending in
6382 @samp{.statistics} to the source file name, and the file is created in
6383 the same directory as the output file.  If the @samp{-@var{option}}
6384 form is used, @samp{-stats} causes counters to be summed over the
6385 whole compilation unit while @samp{-details} dumps every event as
6386 the passes generate them.  The default with no option is to sum
6387 counters for each function compiled.
6389 @item -fdump-tree-@var{switch}
6390 @itemx -fdump-tree-@var{switch}-@var{options}
6391 @itemx -fdump-tree-@var{switch}-@var{options}=@var{filename}
6392 @opindex fdump-tree
6393 Control the dumping at various stages of processing the intermediate
6394 language tree to a file.  The file name is generated by appending a
6395 switch-specific suffix to the source file name, and the file is
6396 created in the same directory as the output file. In case of
6397 @option{=@var{filename}} option, the dump is output on the given file
6398 instead of the auto named dump files.  If the @samp{-@var{options}}
6399 form is used, @var{options} is a list of @samp{-} separated options
6400 which control the details of the dump.  Not all options are applicable
6401 to all dumps; those that are not meaningful are ignored.  The
6402 following options are available
6404 @table @samp
6405 @item address
6406 Print the address of each node.  Usually this is not meaningful as it
6407 changes according to the environment and source file.  Its primary use
6408 is for tying up a dump file with a debug environment.
6409 @item asmname
6410 If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
6411 in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
6412 use working backward from mangled names in the assembly file.
6413 @item slim
6414 When dumping front-end intermediate representations, inhibit dumping
6415 of members of a scope or body of a function merely because that scope
6416 has been reached.  Only dump such items when they are directly reachable
6417 by some other path.
6419 When dumping pretty-printed trees, this option inhibits dumping the
6420 bodies of control structures.
6422 When dumping RTL, print the RTL in slim (condensed) form instead of
6423 the default LISP-like representation.
6424 @item raw
6425 Print a raw representation of the tree.  By default, trees are
6426 pretty-printed into a C-like representation.
6427 @item details
6428 Enable more detailed dumps (not honored by every dump option). Also
6429 include information from the optimization passes.
6430 @item stats
6431 Enable dumping various statistics about the pass (not honored by every dump
6432 option).
6433 @item blocks
6434 Enable showing basic block boundaries (disabled in raw dumps).
6435 @item graph
6436 For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
6437 dump a representation of the control flow graph suitable for viewing with
6438 GraphViz to @file{@var{file}.@var{passid}.@var{pass}.dot}.  Each function in
6439 the file is pretty-printed as a subgraph, so that GraphViz can render them
6440 all in a single plot.
6442 This option currently only works for RTL dumps, and the RTL is always
6443 dumped in slim form.
6444 @item vops
6445 Enable showing virtual operands for every statement.
6446 @item lineno
6447 Enable showing line numbers for statements.
6448 @item uid
6449 Enable showing the unique ID (@code{DECL_UID}) for each variable.
6450 @item verbose
6451 Enable showing the tree dump for each statement.
6452 @item eh
6453 Enable showing the EH region number holding each statement.
6454 @item scev
6455 Enable showing scalar evolution analysis details.
6456 @item optimized
6457 Enable showing optimization information (only available in certain
6458 passes).
6459 @item missed
6460 Enable showing missed optimization information (only available in certain
6461 passes).
6462 @item note
6463 Enable other detailed optimization information (only available in
6464 certain passes).
6465 @item =@var{filename}
6466 Instead of an auto named dump file, output into the given file
6467 name. The file names @file{stdout} and @file{stderr} are treated
6468 specially and are considered already open standard streams. For
6469 example,
6471 @smallexample
6472 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
6473      -fdump-tree-pre=stderr file.c
6474 @end smallexample
6476 outputs vectorizer dump into @file{foo.dump}, while the PRE dump is
6477 output on to @file{stderr}. If two conflicting dump filenames are
6478 given for the same pass, then the latter option overrides the earlier
6479 one.
6481 @item all
6482 Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
6483 and @option{lineno}.
6485 @item optall
6486 Turn on all optimization options, i.e., @option{optimized},
6487 @option{missed}, and @option{note}.
6488 @end table
6490 The following tree dumps are possible:
6491 @table @samp
6493 @item original
6494 @opindex fdump-tree-original
6495 Dump before any tree based optimization, to @file{@var{file}.original}.
6497 @item optimized
6498 @opindex fdump-tree-optimized
6499 Dump after all tree based optimization, to @file{@var{file}.optimized}.
6501 @item gimple
6502 @opindex fdump-tree-gimple
6503 Dump each function before and after the gimplification pass to a file.  The
6504 file name is made by appending @file{.gimple} to the source file name.
6506 @item cfg
6507 @opindex fdump-tree-cfg
6508 Dump the control flow graph of each function to a file.  The file name is
6509 made by appending @file{.cfg} to the source file name.
6511 @item ch
6512 @opindex fdump-tree-ch
6513 Dump each function after copying loop headers.  The file name is made by
6514 appending @file{.ch} to the source file name.
6516 @item ssa
6517 @opindex fdump-tree-ssa
6518 Dump SSA related information to a file.  The file name is made by appending
6519 @file{.ssa} to the source file name.
6521 @item alias
6522 @opindex fdump-tree-alias
6523 Dump aliasing information for each function.  The file name is made by
6524 appending @file{.alias} to the source file name.
6526 @item ccp
6527 @opindex fdump-tree-ccp
6528 Dump each function after CCP@.  The file name is made by appending
6529 @file{.ccp} to the source file name.
6531 @item storeccp
6532 @opindex fdump-tree-storeccp
6533 Dump each function after STORE-CCP@.  The file name is made by appending
6534 @file{.storeccp} to the source file name.
6536 @item pre
6537 @opindex fdump-tree-pre
6538 Dump trees after partial redundancy elimination.  The file name is made
6539 by appending @file{.pre} to the source file name.
6541 @item fre
6542 @opindex fdump-tree-fre
6543 Dump trees after full redundancy elimination.  The file name is made
6544 by appending @file{.fre} to the source file name.
6546 @item copyprop
6547 @opindex fdump-tree-copyprop
6548 Dump trees after copy propagation.  The file name is made
6549 by appending @file{.copyprop} to the source file name.
6551 @item store_copyprop
6552 @opindex fdump-tree-store_copyprop
6553 Dump trees after store copy-propagation.  The file name is made
6554 by appending @file{.store_copyprop} to the source file name.
6556 @item dce
6557 @opindex fdump-tree-dce
6558 Dump each function after dead code elimination.  The file name is made by
6559 appending @file{.dce} to the source file name.
6561 @item sra
6562 @opindex fdump-tree-sra
6563 Dump each function after performing scalar replacement of aggregates.  The
6564 file name is made by appending @file{.sra} to the source file name.
6566 @item sink
6567 @opindex fdump-tree-sink
6568 Dump each function after performing code sinking.  The file name is made
6569 by appending @file{.sink} to the source file name.
6571 @item dom
6572 @opindex fdump-tree-dom
6573 Dump each function after applying dominator tree optimizations.  The file
6574 name is made by appending @file{.dom} to the source file name.
6576 @item dse
6577 @opindex fdump-tree-dse
6578 Dump each function after applying dead store elimination.  The file
6579 name is made by appending @file{.dse} to the source file name.
6581 @item phiopt
6582 @opindex fdump-tree-phiopt
6583 Dump each function after optimizing PHI nodes into straightline code.  The file
6584 name is made by appending @file{.phiopt} to the source file name.
6586 @item forwprop
6587 @opindex fdump-tree-forwprop
6588 Dump each function after forward propagating single use variables.  The file
6589 name is made by appending @file{.forwprop} to the source file name.
6591 @item copyrename
6592 @opindex fdump-tree-copyrename
6593 Dump each function after applying the copy rename optimization.  The file
6594 name is made by appending @file{.copyrename} to the source file name.
6596 @item nrv
6597 @opindex fdump-tree-nrv
6598 Dump each function after applying the named return value optimization on
6599 generic trees.  The file name is made by appending @file{.nrv} to the source
6600 file name.
6602 @item vect
6603 @opindex fdump-tree-vect
6604 Dump each function after applying vectorization of loops.  The file name is
6605 made by appending @file{.vect} to the source file name.
6607 @item slp
6608 @opindex fdump-tree-slp
6609 Dump each function after applying vectorization of basic blocks.  The file name
6610 is made by appending @file{.slp} to the source file name.
6612 @item vrp
6613 @opindex fdump-tree-vrp
6614 Dump each function after Value Range Propagation (VRP).  The file name
6615 is made by appending @file{.vrp} to the source file name.
6617 @item all
6618 @opindex fdump-tree-all
6619 Enable all the available tree dumps with the flags provided in this option.
6620 @end table
6622 @item -fopt-info
6623 @itemx -fopt-info-@var{options}
6624 @itemx -fopt-info-@var{options}=@var{filename}
6625 @opindex fopt-info
6626 Controls optimization dumps from various optimization passes. If the
6627 @samp{-@var{options}} form is used, @var{options} is a list of
6628 @samp{-} separated options to select the dump details and
6629 optimizations.  If @var{options} is not specified, it defaults to
6630 @option{optimized} for details and @option{optall} for optimization
6631 groups. If the @var{filename} is not specified, it defaults to
6632 @file{stderr}. Note that the output @var{filename} will be overwritten
6633 in case of multiple translation units. If a combined output from
6634 multiple translation units is desired, @file{stderr} should be used
6635 instead.
6637 The options can be divided into two groups, 1) options describing the
6638 verbosity of the dump, and 2) options describing which optimizations
6639 should be included. The options from both the groups can be freely
6640 mixed as they are non-overlapping. However, in case of any conflicts,
6641 the latter options override the earlier options on the command
6642 line. Though multiple -fopt-info options are accepted, only one of
6643 them can have @option{=filename}. If other filenames are provided then
6644 all but the first one are ignored.
6646 The dump verbosity has the following options
6648 @table @samp
6649 @item optimized
6650 Print information when an optimization is successfully applied. It is
6651 up to a pass to decide which information is relevant. For example, the
6652 vectorizer passes print the source location of loops which got
6653 successfully vectorized.
6654 @item missed
6655 Print information about missed optimizations. Individual passes
6656 control which information to include in the output. For example,
6658 @smallexample
6659 gcc -O2 -ftree-vectorize -fopt-info-vec-missed
6660 @end smallexample
6662 will print information about missed optimization opportunities from
6663 vectorization passes on stderr.
6664 @item note
6665 Print verbose information about optimizations, such as certain
6666 transformations, more detailed messages about decisions etc.
6667 @item all
6668 Print detailed optimization information. This includes
6669 @var{optimized}, @var{missed}, and @var{note}.
6670 @end table
6672 The second set of options describes a group of optimizations and may
6673 include one or more of the following.
6675 @table @samp
6676 @item ipa
6677 Enable dumps from all interprocedural optimizations.
6678 @item loop
6679 Enable dumps from all loop optimizations.
6680 @item inline
6681 Enable dumps from all inlining optimizations.
6682 @item vec
6683 Enable dumps from all vectorization optimizations.
6684 @item optall
6685 Enable dumps from all optimizations. This is a superset of
6686 the optimization groups listed above.
6687 @end table
6689 For example,
6690 @smallexample
6691 gcc -O3 -fopt-info-missed=missed.all
6692 @end smallexample
6694 outputs missed optimization report from all the passes into
6695 @file{missed.all}.
6697 As another example,
6698 @smallexample
6699 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
6700 @end smallexample
6702 will output information about missed optimizations as well as
6703 optimized locations from all the inlining passes into
6704 @file{inline.txt}.
6706 If the @var{filename} is provided, then the dumps from all the
6707 applicable optimizations are concatenated into the @file{filename}.
6708 Otherwise the dump is output onto @file{stderr}. If @var{options} is
6709 omitted, it defaults to @option{all-optall}, which means dump all
6710 available optimization info from all the passes. In the following
6711 example, all optimization info is output on to @file{stderr}.
6713 @smallexample
6714 gcc -O3 -fopt-info
6715 @end smallexample
6717 Note that @option{-fopt-info-vec-missed} behaves the same as
6718 @option{-fopt-info-missed-vec}.
6720 As another example, consider
6722 @smallexample
6723 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
6724 @end smallexample
6726 Here the two output filenames @file{vec.miss} and @file{loop.opt} are
6727 in conflict since only one output file is allowed. In this case, only
6728 the first option takes effect and the subsequent options are
6729 ignored. Thus only the @file{vec.miss} is produced which contains
6730 dumps from the vectorizer about missed opportunities.
6732 @item -frandom-seed=@var{string}
6733 @opindex frandom-seed
6734 This option provides a seed that GCC uses in place of
6735 random numbers in generating certain symbol names
6736 that have to be different in every compiled file.  It is also used to
6737 place unique stamps in coverage data files and the object files that
6738 produce them.  You can use the @option{-frandom-seed} option to produce
6739 reproducibly identical object files.
6741 The @var{string} should be different for every file you compile.
6743 @item -fsched-verbose=@var{n}
6744 @opindex fsched-verbose
6745 On targets that use instruction scheduling, this option controls the
6746 amount of debugging output the scheduler prints.  This information is
6747 written to standard error, unless @option{-fdump-rtl-sched1} or
6748 @option{-fdump-rtl-sched2} is specified, in which case it is output
6749 to the usual dump listing file, @file{.sched1} or @file{.sched2}
6750 respectively.  However for @var{n} greater than nine, the output is
6751 always printed to standard error.
6753 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
6754 same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
6755 For @var{n} greater than one, it also output basic block probabilities,
6756 detailed ready list information and unit/insn info.  For @var{n} greater
6757 than two, it includes RTL at abort point, control-flow and regions info.
6758 And for @var{n} over four, @option{-fsched-verbose} also includes
6759 dependence info.
6761 @item -save-temps
6762 @itemx -save-temps=cwd
6763 @opindex save-temps
6764 Store the usual ``temporary'' intermediate files permanently; place them
6765 in the current directory and name them based on the source file.  Thus,
6766 compiling @file{foo.c} with @option{-c -save-temps} produces files
6767 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
6768 preprocessed @file{foo.i} output file even though the compiler now
6769 normally uses an integrated preprocessor.
6771 When used in combination with the @option{-x} command-line option,
6772 @option{-save-temps} is sensible enough to avoid over writing an
6773 input source file with the same extension as an intermediate file.
6774 The corresponding intermediate file may be obtained by renaming the
6775 source file before using @option{-save-temps}.
6777 If you invoke GCC in parallel, compiling several different source
6778 files that share a common base name in different subdirectories or the
6779 same source file compiled for multiple output destinations, it is
6780 likely that the different parallel compilers will interfere with each
6781 other, and overwrite the temporary files.  For instance:
6783 @smallexample
6784 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
6785 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
6786 @end smallexample
6788 may result in @file{foo.i} and @file{foo.o} being written to
6789 simultaneously by both compilers.
6791 @item -save-temps=obj
6792 @opindex save-temps=obj
6793 Store the usual ``temporary'' intermediate files permanently.  If the
6794 @option{-o} option is used, the temporary files are based on the
6795 object file.  If the @option{-o} option is not used, the
6796 @option{-save-temps=obj} switch behaves like @option{-save-temps}.
6798 For example:
6800 @smallexample
6801 gcc -save-temps=obj -c foo.c
6802 gcc -save-temps=obj -c bar.c -o dir/xbar.o
6803 gcc -save-temps=obj foobar.c -o dir2/yfoobar
6804 @end smallexample
6806 @noindent
6807 creates @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
6808 @file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
6809 @file{dir2/yfoobar.o}.
6811 @item -time@r{[}=@var{file}@r{]}
6812 @opindex time
6813 Report the CPU time taken by each subprocess in the compilation
6814 sequence.  For C source files, this is the compiler proper and assembler
6815 (plus the linker if linking is done).
6817 Without the specification of an output file, the output looks like this:
6819 @smallexample
6820 # cc1 0.12 0.01
6821 # as 0.00 0.01
6822 @end smallexample
6824 The first number on each line is the ``user time'', that is time spent
6825 executing the program itself.  The second number is ``system time'',
6826 time spent executing operating system routines on behalf of the program.
6827 Both numbers are in seconds.
6829 With the specification of an output file, the output is appended to the
6830 named file, and it looks like this:
6832 @smallexample
6833 0.12 0.01 cc1 @var{options}
6834 0.00 0.01 as @var{options}
6835 @end smallexample
6837 The ``user time'' and the ``system time'' are moved before the program
6838 name, and the options passed to the program are displayed, so that one
6839 can later tell what file was being compiled, and with which options.
6841 @item -fvar-tracking
6842 @opindex fvar-tracking
6843 Run variable tracking pass.  It computes where variables are stored at each
6844 position in code.  Better debugging information is then generated
6845 (if the debugging information format supports this information).
6847 It is enabled by default when compiling with optimization (@option{-Os},
6848 @option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
6849 the debug info format supports it.
6851 @item -fvar-tracking-assignments
6852 @opindex fvar-tracking-assignments
6853 @opindex fno-var-tracking-assignments
6854 Annotate assignments to user variables early in the compilation and
6855 attempt to carry the annotations over throughout the compilation all the
6856 way to the end, in an attempt to improve debug information while
6857 optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
6859 It can be enabled even if var-tracking is disabled, in which case
6860 annotations are created and maintained, but discarded at the end.
6862 @item -fvar-tracking-assignments-toggle
6863 @opindex fvar-tracking-assignments-toggle
6864 @opindex fno-var-tracking-assignments-toggle
6865 Toggle @option{-fvar-tracking-assignments}, in the same way that
6866 @option{-gtoggle} toggles @option{-g}.
6868 @item -print-file-name=@var{library}
6869 @opindex print-file-name
6870 Print the full absolute name of the library file @var{library} that
6871 would be used when linking---and don't do anything else.  With this
6872 option, GCC does not compile or link anything; it just prints the
6873 file name.
6875 @item -print-multi-directory
6876 @opindex print-multi-directory
6877 Print the directory name corresponding to the multilib selected by any
6878 other switches present in the command line.  This directory is supposed
6879 to exist in @env{GCC_EXEC_PREFIX}.
6881 @item -print-multi-lib
6882 @opindex print-multi-lib
6883 Print the mapping from multilib directory names to compiler switches
6884 that enable them.  The directory name is separated from the switches by
6885 @samp{;}, and each switch starts with an @samp{@@} instead of the
6886 @samp{-}, without spaces between multiple switches.  This is supposed to
6887 ease shell processing.
6889 @item -print-multi-os-directory
6890 @opindex print-multi-os-directory
6891 Print the path to OS libraries for the selected
6892 multilib, relative to some @file{lib} subdirectory.  If OS libraries are
6893 present in the @file{lib} subdirectory and no multilibs are used, this is
6894 usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
6895 sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
6896 @file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
6897 subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
6899 @item -print-multiarch
6900 @opindex print-multiarch
6901 Print the path to OS libraries for the selected multiarch,
6902 relative to some @file{lib} subdirectory.
6904 @item -print-prog-name=@var{program}
6905 @opindex print-prog-name
6906 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
6908 @item -print-libgcc-file-name
6909 @opindex print-libgcc-file-name
6910 Same as @option{-print-file-name=libgcc.a}.
6912 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
6913 but you do want to link with @file{libgcc.a}.  You can do:
6915 @smallexample
6916 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
6917 @end smallexample
6919 @item -print-search-dirs
6920 @opindex print-search-dirs
6921 Print the name of the configured installation directory and a list of
6922 program and library directories @command{gcc} searches---and don't do anything else.
6924 This is useful when @command{gcc} prints the error message
6925 @samp{installation problem, cannot exec cpp0: No such file or directory}.
6926 To resolve this you either need to put @file{cpp0} and the other compiler
6927 components where @command{gcc} expects to find them, or you can set the environment
6928 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
6929 Don't forget the trailing @samp{/}.
6930 @xref{Environment Variables}.
6932 @item -print-sysroot
6933 @opindex print-sysroot
6934 Print the target sysroot directory that is used during
6935 compilation.  This is the target sysroot specified either at configure
6936 time or using the @option{--sysroot} option, possibly with an extra
6937 suffix that depends on compilation options.  If no target sysroot is
6938 specified, the option prints nothing.
6940 @item -print-sysroot-headers-suffix
6941 @opindex print-sysroot-headers-suffix
6942 Print the suffix added to the target sysroot when searching for
6943 headers, or give an error if the compiler is not configured with such
6944 a suffix---and don't do anything else.
6946 @item -dumpmachine
6947 @opindex dumpmachine
6948 Print the compiler's target machine (for example,
6949 @samp{i686-pc-linux-gnu})---and don't do anything else.
6951 @item -dumpversion
6952 @opindex dumpversion
6953 Print the compiler version (for example, @samp{3.0})---and don't do
6954 anything else.
6956 @item -dumpspecs
6957 @opindex dumpspecs
6958 Print the compiler's built-in specs---and don't do anything else.  (This
6959 is used when GCC itself is being built.)  @xref{Spec Files}.
6961 @item -fno-eliminate-unused-debug-types
6962 @opindex feliminate-unused-debug-types
6963 @opindex fno-eliminate-unused-debug-types
6964 Normally, when producing DWARF 2 output, GCC avoids producing debug symbol 
6965 output for types that are nowhere used in the source file being compiled.
6966 Sometimes it is useful to have GCC emit debugging
6967 information for all types declared in a compilation
6968 unit, regardless of whether or not they are actually used
6969 in that compilation unit, for example 
6970 if, in the debugger, you want to cast a value to a type that is
6971 not actually used in your program (but is declared).  More often,
6972 however, this results in a significant amount of wasted space.
6973 @end table
6975 @node Optimize Options
6976 @section Options That Control Optimization
6977 @cindex optimize options
6978 @cindex options, optimization
6980 These options control various sorts of optimizations.
6982 Without any optimization option, the compiler's goal is to reduce the
6983 cost of compilation and to make debugging produce the expected
6984 results.  Statements are independent: if you stop the program with a
6985 breakpoint between statements, you can then assign a new value to any
6986 variable or change the program counter to any other statement in the
6987 function and get exactly the results you expect from the source
6988 code.
6990 Turning on optimization flags makes the compiler attempt to improve
6991 the performance and/or code size at the expense of compilation time
6992 and possibly the ability to debug the program.
6994 The compiler performs optimization based on the knowledge it has of the
6995 program.  Compiling multiple files at once to a single output file mode allows
6996 the compiler to use information gained from all of the files when compiling
6997 each of them.
6999 Not all optimizations are controlled directly by a flag.  Only
7000 optimizations that have a flag are listed in this section.
7002 Most optimizations are only enabled if an @option{-O} level is set on
7003 the command line.  Otherwise they are disabled, even if individual
7004 optimization flags are specified.
7006 Depending on the target and how GCC was configured, a slightly different
7007 set of optimizations may be enabled at each @option{-O} level than
7008 those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
7009 to find out the exact set of optimizations that are enabled at each level.
7010 @xref{Overall Options}, for examples.
7012 @table @gcctabopt
7013 @item -O
7014 @itemx -O1
7015 @opindex O
7016 @opindex O1
7017 Optimize.  Optimizing compilation takes somewhat more time, and a lot
7018 more memory for a large function.
7020 With @option{-O}, the compiler tries to reduce code size and execution
7021 time, without performing any optimizations that take a great deal of
7022 compilation time.
7024 @option{-O} turns on the following optimization flags:
7025 @gccoptlist{
7026 -fauto-inc-dec @gol
7027 -fbranch-count-reg @gol
7028 -fcombine-stack-adjustments @gol
7029 -fcompare-elim @gol
7030 -fcprop-registers @gol
7031 -fdce @gol
7032 -fdefer-pop @gol
7033 -fdelayed-branch @gol
7034 -fdse @gol
7035 -fforward-propagate @gol
7036 -fguess-branch-probability @gol
7037 -fif-conversion2 @gol
7038 -fif-conversion @gol
7039 -finline-functions-called-once @gol
7040 -fipa-pure-const @gol
7041 -fipa-profile @gol
7042 -fipa-reference @gol
7043 -fmerge-constants @gol
7044 -fmove-loop-invariants @gol
7045 -fshrink-wrap @gol
7046 -fsplit-wide-types @gol
7047 -ftree-bit-ccp @gol
7048 -ftree-ccp @gol
7049 -fssa-phiopt @gol
7050 -ftree-ch @gol
7051 -ftree-copy-prop @gol
7052 -ftree-copyrename @gol
7053 -ftree-dce @gol
7054 -ftree-dominator-opts @gol
7055 -ftree-dse @gol
7056 -ftree-forwprop @gol
7057 -ftree-fre @gol
7058 -ftree-phiprop @gol
7059 -ftree-sink @gol
7060 -ftree-slsr @gol
7061 -ftree-sra @gol
7062 -ftree-pta @gol
7063 -ftree-ter @gol
7064 -funit-at-a-time}
7066 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
7067 where doing so does not interfere with debugging.
7069 @item -O2
7070 @opindex O2
7071 Optimize even more.  GCC performs nearly all supported optimizations
7072 that do not involve a space-speed tradeoff.
7073 As compared to @option{-O}, this option increases both compilation time
7074 and the performance of the generated code.
7076 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
7077 also turns on the following optimization flags:
7078 @gccoptlist{-fthread-jumps @gol
7079 -falign-functions  -falign-jumps @gol
7080 -falign-loops  -falign-labels @gol
7081 -fcaller-saves @gol
7082 -fcrossjumping @gol
7083 -fcse-follow-jumps  -fcse-skip-blocks @gol
7084 -fdelete-null-pointer-checks @gol
7085 -fdevirtualize -fdevirtualize-speculatively @gol
7086 -fexpensive-optimizations @gol
7087 -fgcse  -fgcse-lm  @gol
7088 -fhoist-adjacent-loads @gol
7089 -finline-small-functions @gol
7090 -findirect-inlining @gol
7091 -fipa-cp @gol
7092 -fipa-sra @gol
7093 -fisolate-erroneous-paths-dereference @gol
7094 -foptimize-sibling-calls @gol
7095 -foptimize-strlen @gol
7096 -fpartial-inlining @gol
7097 -fpeephole2 @gol
7098 -freorder-blocks -freorder-blocks-and-partition -freorder-functions @gol
7099 -frerun-cse-after-loop  @gol
7100 -fsched-interblock  -fsched-spec @gol
7101 -fschedule-insns  -fschedule-insns2 @gol
7102 -fstrict-aliasing -fstrict-overflow @gol
7103 -ftree-builtin-call-dce @gol
7104 -ftree-switch-conversion -ftree-tail-merge @gol
7105 -ftree-pre @gol
7106 -ftree-vrp @gol
7107 -fuse-caller-save}
7109 Please note the warning under @option{-fgcse} about
7110 invoking @option{-O2} on programs that use computed gotos.
7112 @item -O3
7113 @opindex O3
7114 Optimize yet more.  @option{-O3} turns on all optimizations specified
7115 by @option{-O2} and also turns on the @option{-finline-functions},
7116 @option{-funswitch-loops}, @option{-fpredictive-commoning},
7117 @option{-fgcse-after-reload}, @option{-ftree-loop-vectorize},
7118 @option{-ftree-loop-distribute-patterns},
7119 @option{-ftree-slp-vectorize}, @option{-fvect-cost-model},
7120 @option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
7122 @item -O0
7123 @opindex O0
7124 Reduce compilation time and make debugging produce the expected
7125 results.  This is the default.
7127 @item -Os
7128 @opindex Os
7129 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
7130 do not typically increase code size.  It also performs further
7131 optimizations designed to reduce code size.
7133 @option{-Os} disables the following optimization flags:
7134 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
7135 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
7136 -fprefetch-loop-arrays}
7138 @item -Ofast
7139 @opindex Ofast
7140 Disregard strict standards compliance.  @option{-Ofast} enables all
7141 @option{-O3} optimizations.  It also enables optimizations that are not
7142 valid for all standard-compliant programs.
7143 It turns on @option{-ffast-math} and the Fortran-specific
7144 @option{-fno-protect-parens} and @option{-fstack-arrays}.
7146 @item -Og
7147 @opindex Og
7148 Optimize debugging experience.  @option{-Og} enables optimizations
7149 that do not interfere with debugging. It should be the optimization
7150 level of choice for the standard edit-compile-debug cycle, offering
7151 a reasonable level of optimization while maintaining fast compilation
7152 and a good debugging experience.
7154 If you use multiple @option{-O} options, with or without level numbers,
7155 the last such option is the one that is effective.
7156 @end table
7158 Options of the form @option{-f@var{flag}} specify machine-independent
7159 flags.  Most flags have both positive and negative forms; the negative
7160 form of @option{-ffoo} is @option{-fno-foo}.  In the table
7161 below, only one of the forms is listed---the one you typically 
7162 use.  You can figure out the other form by either removing @samp{no-}
7163 or adding it.
7165 The following options control specific optimizations.  They are either
7166 activated by @option{-O} options or are related to ones that are.  You
7167 can use the following flags in the rare cases when ``fine-tuning'' of
7168 optimizations to be performed is desired.
7170 @table @gcctabopt
7171 @item -fno-defer-pop
7172 @opindex fno-defer-pop
7173 Always pop the arguments to each function call as soon as that function
7174 returns.  For machines that must pop arguments after a function call,
7175 the compiler normally lets arguments accumulate on the stack for several
7176 function calls and pops them all at once.
7178 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7180 @item -fforward-propagate
7181 @opindex fforward-propagate
7182 Perform a forward propagation pass on RTL@.  The pass tries to combine two
7183 instructions and checks if the result can be simplified.  If loop unrolling
7184 is active, two passes are performed and the second is scheduled after
7185 loop unrolling.
7187 This option is enabled by default at optimization levels @option{-O},
7188 @option{-O2}, @option{-O3}, @option{-Os}.
7190 @item -ffp-contract=@var{style}
7191 @opindex ffp-contract
7192 @option{-ffp-contract=off} disables floating-point expression contraction.
7193 @option{-ffp-contract=fast} enables floating-point expression contraction
7194 such as forming of fused multiply-add operations if the target has
7195 native support for them.
7196 @option{-ffp-contract=on} enables floating-point expression contraction
7197 if allowed by the language standard.  This is currently not implemented
7198 and treated equal to @option{-ffp-contract=off}.
7200 The default is @option{-ffp-contract=fast}.
7202 @item -fomit-frame-pointer
7203 @opindex fomit-frame-pointer
7204 Don't keep the frame pointer in a register for functions that
7205 don't need one.  This avoids the instructions to save, set up and
7206 restore frame pointers; it also makes an extra register available
7207 in many functions.  @strong{It also makes debugging impossible on
7208 some machines.}
7210 On some machines, such as the VAX, this flag has no effect, because
7211 the standard calling sequence automatically handles the frame pointer
7212 and nothing is saved by pretending it doesn't exist.  The
7213 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
7214 whether a target machine supports this flag.  @xref{Registers,,Register
7215 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
7217 Starting with GCC version 4.6, the default setting (when not optimizing for
7218 size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets has been changed to
7219 @option{-fomit-frame-pointer}.  The default can be reverted to
7220 @option{-fno-omit-frame-pointer} by configuring GCC with the
7221 @option{--enable-frame-pointer} configure option.
7223 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7225 @item -foptimize-sibling-calls
7226 @opindex foptimize-sibling-calls
7227 Optimize sibling and tail recursive calls.
7229 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7231 @item -foptimize-strlen
7232 @opindex foptimize-strlen
7233 Optimize various standard C string functions (e.g. @code{strlen},
7234 @code{strchr} or @code{strcpy}) and
7235 their @code{_FORTIFY_SOURCE} counterparts into faster alternatives.
7237 Enabled at levels @option{-O2}, @option{-O3}.
7239 @item -fno-inline
7240 @opindex fno-inline
7241 Do not expand any functions inline apart from those marked with
7242 the @code{always_inline} attribute.  This is the default when not
7243 optimizing.
7245 Single functions can be exempted from inlining by marking them
7246 with the @code{noinline} attribute.
7248 @item -finline-small-functions
7249 @opindex finline-small-functions
7250 Integrate functions into their callers when their body is smaller than expected
7251 function call code (so overall size of program gets smaller).  The compiler
7252 heuristically decides which functions are simple enough to be worth integrating
7253 in this way.  This inlining applies to all functions, even those not declared
7254 inline.
7256 Enabled at level @option{-O2}.
7258 @item -findirect-inlining
7259 @opindex findirect-inlining
7260 Inline also indirect calls that are discovered to be known at compile
7261 time thanks to previous inlining.  This option has any effect only
7262 when inlining itself is turned on by the @option{-finline-functions}
7263 or @option{-finline-small-functions} options.
7265 Enabled at level @option{-O2}.
7267 @item -finline-functions
7268 @opindex finline-functions
7269 Consider all functions for inlining, even if they are not declared inline.
7270 The compiler heuristically decides which functions are worth integrating
7271 in this way.
7273 If all calls to a given function are integrated, and the function is
7274 declared @code{static}, then the function is normally not output as
7275 assembler code in its own right.
7277 Enabled at level @option{-O3}.
7279 @item -finline-functions-called-once
7280 @opindex finline-functions-called-once
7281 Consider all @code{static} functions called once for inlining into their
7282 caller even if they are not marked @code{inline}.  If a call to a given
7283 function is integrated, then the function is not output as assembler code
7284 in its own right.
7286 Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
7288 @item -fearly-inlining
7289 @opindex fearly-inlining
7290 Inline functions marked by @code{always_inline} and functions whose body seems
7291 smaller than the function call overhead early before doing
7292 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
7293 makes profiling significantly cheaper and usually inlining faster on programs
7294 having large chains of nested wrapper functions.
7296 Enabled by default.
7298 @item -fipa-sra
7299 @opindex fipa-sra
7300 Perform interprocedural scalar replacement of aggregates, removal of
7301 unused parameters and replacement of parameters passed by reference
7302 by parameters passed by value.
7304 Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
7306 @item -finline-limit=@var{n}
7307 @opindex finline-limit
7308 By default, GCC limits the size of functions that can be inlined.  This flag
7309 allows coarse control of this limit.  @var{n} is the size of functions that
7310 can be inlined in number of pseudo instructions.
7312 Inlining is actually controlled by a number of parameters, which may be
7313 specified individually by using @option{--param @var{name}=@var{value}}.
7314 The @option{-finline-limit=@var{n}} option sets some of these parameters
7315 as follows:
7317 @table @gcctabopt
7318 @item max-inline-insns-single
7319 is set to @var{n}/2.
7320 @item max-inline-insns-auto
7321 is set to @var{n}/2.
7322 @end table
7324 See below for a documentation of the individual
7325 parameters controlling inlining and for the defaults of these parameters.
7327 @emph{Note:} there may be no value to @option{-finline-limit} that results
7328 in default behavior.
7330 @emph{Note:} pseudo instruction represents, in this particular context, an
7331 abstract measurement of function's size.  In no way does it represent a count
7332 of assembly instructions and as such its exact meaning might change from one
7333 release to an another.
7335 @item -fno-keep-inline-dllexport
7336 @opindex -fno-keep-inline-dllexport
7337 This is a more fine-grained version of @option{-fkeep-inline-functions},
7338 which applies only to functions that are declared using the @code{dllexport}
7339 attribute or declspec (@xref{Function Attributes,,Declaring Attributes of
7340 Functions}.)
7342 @item -fkeep-inline-functions
7343 @opindex fkeep-inline-functions
7344 In C, emit @code{static} functions that are declared @code{inline}
7345 into the object file, even if the function has been inlined into all
7346 of its callers.  This switch does not affect functions using the
7347 @code{extern inline} extension in GNU C90@.  In C++, emit any and all
7348 inline functions into the object file.
7350 @item -fkeep-static-consts
7351 @opindex fkeep-static-consts
7352 Emit variables declared @code{static const} when optimization isn't turned
7353 on, even if the variables aren't referenced.
7355 GCC enables this option by default.  If you want to force the compiler to
7356 check if a variable is referenced, regardless of whether or not
7357 optimization is turned on, use the @option{-fno-keep-static-consts} option.
7359 @item -fmerge-constants
7360 @opindex fmerge-constants
7361 Attempt to merge identical constants (string constants and floating-point
7362 constants) across compilation units.
7364 This option is the default for optimized compilation if the assembler and
7365 linker support it.  Use @option{-fno-merge-constants} to inhibit this
7366 behavior.
7368 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7370 @item -fmerge-all-constants
7371 @opindex fmerge-all-constants
7372 Attempt to merge identical constants and identical variables.
7374 This option implies @option{-fmerge-constants}.  In addition to
7375 @option{-fmerge-constants} this considers e.g.@: even constant initialized
7376 arrays or initialized constant variables with integral or floating-point
7377 types.  Languages like C or C++ require each variable, including multiple
7378 instances of the same variable in recursive calls, to have distinct locations,
7379 so using this option results in non-conforming
7380 behavior.
7382 @item -fmodulo-sched
7383 @opindex fmodulo-sched
7384 Perform swing modulo scheduling immediately before the first scheduling
7385 pass.  This pass looks at innermost loops and reorders their
7386 instructions by overlapping different iterations.
7388 @item -fmodulo-sched-allow-regmoves
7389 @opindex fmodulo-sched-allow-regmoves
7390 Perform more aggressive SMS-based modulo scheduling with register moves
7391 allowed.  By setting this flag certain anti-dependences edges are
7392 deleted, which triggers the generation of reg-moves based on the
7393 life-range analysis.  This option is effective only with
7394 @option{-fmodulo-sched} enabled.
7396 @item -fno-branch-count-reg
7397 @opindex fno-branch-count-reg
7398 Do not use ``decrement and branch'' instructions on a count register,
7399 but instead generate a sequence of instructions that decrement a
7400 register, compare it against zero, then branch based upon the result.
7401 This option is only meaningful on architectures that support such
7402 instructions, which include x86, PowerPC, IA-64 and S/390.
7404 Enabled by default at @option{-O1} and higher.
7406 The default is @option{-fbranch-count-reg}.
7408 @item -fno-function-cse
7409 @opindex fno-function-cse
7410 Do not put function addresses in registers; make each instruction that
7411 calls a constant function contain the function's address explicitly.
7413 This option results in less efficient code, but some strange hacks
7414 that alter the assembler output may be confused by the optimizations
7415 performed when this option is not used.
7417 The default is @option{-ffunction-cse}
7419 @item -fno-zero-initialized-in-bss
7420 @opindex fno-zero-initialized-in-bss
7421 If the target supports a BSS section, GCC by default puts variables that
7422 are initialized to zero into BSS@.  This can save space in the resulting
7423 code.
7425 This option turns off this behavior because some programs explicitly
7426 rely on variables going to the data section---e.g., so that the
7427 resulting executable can find the beginning of that section and/or make
7428 assumptions based on that.
7430 The default is @option{-fzero-initialized-in-bss}.
7432 @item -fthread-jumps
7433 @opindex fthread-jumps
7434 Perform optimizations that check to see if a jump branches to a
7435 location where another comparison subsumed by the first is found.  If
7436 so, the first branch is redirected to either the destination of the
7437 second branch or a point immediately following it, depending on whether
7438 the condition is known to be true or false.
7440 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7442 @item -fsplit-wide-types
7443 @opindex fsplit-wide-types
7444 When using a type that occupies multiple registers, such as @code{long
7445 long} on a 32-bit system, split the registers apart and allocate them
7446 independently.  This normally generates better code for those types,
7447 but may make debugging more difficult.
7449 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
7450 @option{-Os}.
7452 @item -fcse-follow-jumps
7453 @opindex fcse-follow-jumps
7454 In common subexpression elimination (CSE), scan through jump instructions
7455 when the target of the jump is not reached by any other path.  For
7456 example, when CSE encounters an @code{if} statement with an
7457 @code{else} clause, CSE follows the jump when the condition
7458 tested is false.
7460 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7462 @item -fcse-skip-blocks
7463 @opindex fcse-skip-blocks
7464 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
7465 follow jumps that conditionally skip over blocks.  When CSE
7466 encounters a simple @code{if} statement with no else clause,
7467 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
7468 body of the @code{if}.
7470 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7472 @item -frerun-cse-after-loop
7473 @opindex frerun-cse-after-loop
7474 Re-run common subexpression elimination after loop optimizations are
7475 performed.
7477 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7479 @item -fgcse
7480 @opindex fgcse
7481 Perform a global common subexpression elimination pass.
7482 This pass also performs global constant and copy propagation.
7484 @emph{Note:} When compiling a program using computed gotos, a GCC
7485 extension, you may get better run-time performance if you disable
7486 the global common subexpression elimination pass by adding
7487 @option{-fno-gcse} to the command line.
7489 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7491 @item -fgcse-lm
7492 @opindex fgcse-lm
7493 When @option{-fgcse-lm} is enabled, global common subexpression elimination
7494 attempts to move loads that are only killed by stores into themselves.  This
7495 allows a loop containing a load/store sequence to be changed to a load outside
7496 the loop, and a copy/store within the loop.
7498 Enabled by default when @option{-fgcse} is enabled.
7500 @item -fgcse-sm
7501 @opindex fgcse-sm
7502 When @option{-fgcse-sm} is enabled, a store motion pass is run after
7503 global common subexpression elimination.  This pass attempts to move
7504 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
7505 loops containing a load/store sequence can be changed to a load before
7506 the loop and a store after the loop.
7508 Not enabled at any optimization level.
7510 @item -fgcse-las
7511 @opindex fgcse-las
7512 When @option{-fgcse-las} is enabled, the global common subexpression
7513 elimination pass eliminates redundant loads that come after stores to the
7514 same memory location (both partial and full redundancies).
7516 Not enabled at any optimization level.
7518 @item -fgcse-after-reload
7519 @opindex fgcse-after-reload
7520 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
7521 pass is performed after reload.  The purpose of this pass is to clean up
7522 redundant spilling.
7524 @item -faggressive-loop-optimizations
7525 @opindex faggressive-loop-optimizations
7526 This option tells the loop optimizer to use language constraints to
7527 derive bounds for the number of iterations of a loop.  This assumes that
7528 loop code does not invoke undefined behavior by for example causing signed
7529 integer overflows or out-of-bound array accesses.  The bounds for the
7530 number of iterations of a loop are used to guide loop unrolling and peeling
7531 and loop exit test optimizations.
7532 This option is enabled by default.
7534 @item -funsafe-loop-optimizations
7535 @opindex funsafe-loop-optimizations
7536 This option tells the loop optimizer to assume that loop indices do not
7537 overflow, and that loops with nontrivial exit condition are not
7538 infinite.  This enables a wider range of loop optimizations even if
7539 the loop optimizer itself cannot prove that these assumptions are valid.
7540 If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
7541 if it finds this kind of loop.
7543 @item -fcrossjumping
7544 @opindex fcrossjumping
7545 Perform cross-jumping transformation.
7546 This transformation unifies equivalent code and saves code size.  The
7547 resulting code may or may not perform better than without cross-jumping.
7549 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7551 @item -fauto-inc-dec
7552 @opindex fauto-inc-dec
7553 Combine increments or decrements of addresses with memory accesses.
7554 This pass is always skipped on architectures that do not have
7555 instructions to support this.  Enabled by default at @option{-O} and
7556 higher on architectures that support this.
7558 @item -fdce
7559 @opindex fdce
7560 Perform dead code elimination (DCE) on RTL@.
7561 Enabled by default at @option{-O} and higher.
7563 @item -fdse
7564 @opindex fdse
7565 Perform dead store elimination (DSE) on RTL@.
7566 Enabled by default at @option{-O} and higher.
7568 @item -fif-conversion
7569 @opindex fif-conversion
7570 Attempt to transform conditional jumps into branch-less equivalents.  This
7571 includes use of conditional moves, min, max, set flags and abs instructions, and
7572 some tricks doable by standard arithmetics.  The use of conditional execution
7573 on chips where it is available is controlled by @code{if-conversion2}.
7575 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7577 @item -fif-conversion2
7578 @opindex fif-conversion2
7579 Use conditional execution (where available) to transform conditional jumps into
7580 branch-less equivalents.
7582 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7584 @item -fdeclone-ctor-dtor
7585 @opindex fdeclone-ctor-dtor
7586 The C++ ABI requires multiple entry points for constructors and
7587 destructors: one for a base subobject, one for a complete object, and
7588 one for a virtual destructor that calls operator delete afterwards.
7589 For a hierarchy with virtual bases, the base and complete variants are
7590 clones, which means two copies of the function.  With this option, the
7591 base and complete variants are changed to be thunks that call a common
7592 implementation.
7594 Enabled by @option{-Os}.
7596 @item -fdelete-null-pointer-checks
7597 @opindex fdelete-null-pointer-checks
7598 Assume that programs cannot safely dereference null pointers, and that
7599 no code or data element resides there.  This enables simple constant
7600 folding optimizations at all optimization levels.  In addition, other
7601 optimization passes in GCC use this flag to control global dataflow
7602 analyses that eliminate useless checks for null pointers; these assume
7603 that if a pointer is checked after it has already been dereferenced,
7604 it cannot be null.
7606 Note however that in some environments this assumption is not true.
7607 Use @option{-fno-delete-null-pointer-checks} to disable this optimization
7608 for programs that depend on that behavior.
7610 Some targets, especially embedded ones, disable this option at all levels.
7611 Otherwise it is enabled at all levels: @option{-O0}, @option{-O1},
7612 @option{-O2}, @option{-O3}, @option{-Os}.  Passes that use the information
7613 are enabled independently at different optimization levels.
7615 @item -fdevirtualize
7616 @opindex fdevirtualize
7617 Attempt to convert calls to virtual functions to direct calls.  This
7618 is done both within a procedure and interprocedurally as part of
7619 indirect inlining (@code{-findirect-inlining}) and interprocedural constant
7620 propagation (@option{-fipa-cp}).
7621 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7623 @item -fdevirtualize-speculatively
7624 @opindex fdevirtualize-speculatively
7625 Attempt to convert calls to virtual functions to speculative direct calls.
7626 Based on the analysis of the type inheritance graph, determine for a given call
7627 the set of likely targets. If the set is small, preferably of size 1, change
7628 the call into an conditional deciding on direct and indirect call.  The
7629 speculative calls enable more optimizations, such as inlining.  When they seem
7630 useless after further optimization, they are converted back into original form.
7632 @item -fexpensive-optimizations
7633 @opindex fexpensive-optimizations
7634 Perform a number of minor optimizations that are relatively expensive.
7636 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7638 @item -free
7639 @opindex free
7640 Attempt to remove redundant extension instructions.  This is especially
7641 helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
7642 registers after writing to their lower 32-bit half.
7644 Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
7645 @option{-O3}, @option{-Os}.
7647 @item -flive-range-shrinkage
7648 @opindex flive-range-shrinkage
7649 Attempt to decrease register pressure through register live range
7650 shrinkage.  This is helpful for fast processors with small or moderate
7651 size register sets.
7653 @item -fira-algorithm=@var{algorithm}
7654 Use the specified coloring algorithm for the integrated register
7655 allocator.  The @var{algorithm} argument can be @samp{priority}, which
7656 specifies Chow's priority coloring, or @samp{CB}, which specifies
7657 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
7658 for all architectures, but for those targets that do support it, it is
7659 the default because it generates better code.
7661 @item -fira-region=@var{region}
7662 Use specified regions for the integrated register allocator.  The
7663 @var{region} argument should be one of the following:
7665 @table @samp
7667 @item all
7668 Use all loops as register allocation regions.
7669 This can give the best results for machines with a small and/or
7670 irregular register set.
7672 @item mixed
7673 Use all loops except for loops with small register pressure 
7674 as the regions.  This value usually gives
7675 the best results in most cases and for most architectures,
7676 and is enabled by default when compiling with optimization for speed
7677 (@option{-O}, @option{-O2}, @dots{}).
7679 @item one
7680 Use all functions as a single region.  
7681 This typically results in the smallest code size, and is enabled by default for
7682 @option{-Os} or @option{-O0}.
7684 @end table
7686 @item -fira-hoist-pressure
7687 @opindex fira-hoist-pressure
7688 Use IRA to evaluate register pressure in the code hoisting pass for
7689 decisions to hoist expressions.  This option usually results in smaller
7690 code, but it can slow the compiler down.
7692 This option is enabled at level @option{-Os} for all targets.
7694 @item -fira-loop-pressure
7695 @opindex fira-loop-pressure
7696 Use IRA to evaluate register pressure in loops for decisions to move
7697 loop invariants.  This option usually results in generation
7698 of faster and smaller code on machines with large register files (>= 32
7699 registers), but it can slow the compiler down.
7701 This option is enabled at level @option{-O3} for some targets.
7703 @item -fno-ira-share-save-slots
7704 @opindex fno-ira-share-save-slots
7705 Disable sharing of stack slots used for saving call-used hard
7706 registers living through a call.  Each hard register gets a
7707 separate stack slot, and as a result function stack frames are
7708 larger.
7710 @item -fno-ira-share-spill-slots
7711 @opindex fno-ira-share-spill-slots
7712 Disable sharing of stack slots allocated for pseudo-registers.  Each
7713 pseudo-register that does not get a hard register gets a separate
7714 stack slot, and as a result function stack frames are larger.
7716 @item -fira-verbose=@var{n}
7717 @opindex fira-verbose
7718 Control the verbosity of the dump file for the integrated register allocator.
7719 The default value is 5.  If the value @var{n} is greater or equal to 10,
7720 the dump output is sent to stderr using the same format as @var{n} minus 10.
7722 @item -fdelayed-branch
7723 @opindex fdelayed-branch
7724 If supported for the target machine, attempt to reorder instructions
7725 to exploit instruction slots available after delayed branch
7726 instructions.
7728 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7730 @item -fschedule-insns
7731 @opindex fschedule-insns
7732 If supported for the target machine, attempt to reorder instructions to
7733 eliminate execution stalls due to required data being unavailable.  This
7734 helps machines that have slow floating point or memory load instructions
7735 by allowing other instructions to be issued until the result of the load
7736 or floating-point instruction is required.
7738 Enabled at levels @option{-O2}, @option{-O3}.
7740 @item -fschedule-insns2
7741 @opindex fschedule-insns2
7742 Similar to @option{-fschedule-insns}, but requests an additional pass of
7743 instruction scheduling after register allocation has been done.  This is
7744 especially useful on machines with a relatively small number of
7745 registers and where memory load instructions take more than one cycle.
7747 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7749 @item -fno-sched-interblock
7750 @opindex fno-sched-interblock
7751 Don't schedule instructions across basic blocks.  This is normally
7752 enabled by default when scheduling before register allocation, i.e.@:
7753 with @option{-fschedule-insns} or at @option{-O2} or higher.
7755 @item -fno-sched-spec
7756 @opindex fno-sched-spec
7757 Don't allow speculative motion of non-load instructions.  This is normally
7758 enabled by default when scheduling before register allocation, i.e.@:
7759 with @option{-fschedule-insns} or at @option{-O2} or higher.
7761 @item -fsched-pressure
7762 @opindex fsched-pressure
7763 Enable register pressure sensitive insn scheduling before register
7764 allocation.  This only makes sense when scheduling before register
7765 allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
7766 @option{-O2} or higher.  Usage of this option can improve the
7767 generated code and decrease its size by preventing register pressure
7768 increase above the number of available hard registers and subsequent
7769 spills in register allocation.
7771 @item -fsched-spec-load
7772 @opindex fsched-spec-load
7773 Allow speculative motion of some load instructions.  This only makes
7774 sense when scheduling before register allocation, i.e.@: with
7775 @option{-fschedule-insns} or at @option{-O2} or higher.
7777 @item -fsched-spec-load-dangerous
7778 @opindex fsched-spec-load-dangerous
7779 Allow speculative motion of more load instructions.  This only makes
7780 sense when scheduling before register allocation, i.e.@: with
7781 @option{-fschedule-insns} or at @option{-O2} or higher.
7783 @item -fsched-stalled-insns
7784 @itemx -fsched-stalled-insns=@var{n}
7785 @opindex fsched-stalled-insns
7786 Define how many insns (if any) can be moved prematurely from the queue
7787 of stalled insns into the ready list during the second scheduling pass.
7788 @option{-fno-sched-stalled-insns} means that no insns are moved
7789 prematurely, @option{-fsched-stalled-insns=0} means there is no limit
7790 on how many queued insns can be moved prematurely.
7791 @option{-fsched-stalled-insns} without a value is equivalent to
7792 @option{-fsched-stalled-insns=1}.
7794 @item -fsched-stalled-insns-dep
7795 @itemx -fsched-stalled-insns-dep=@var{n}
7796 @opindex fsched-stalled-insns-dep
7797 Define how many insn groups (cycles) are examined for a dependency
7798 on a stalled insn that is a candidate for premature removal from the queue
7799 of stalled insns.  This has an effect only during the second scheduling pass,
7800 and only if @option{-fsched-stalled-insns} is used.
7801 @option{-fno-sched-stalled-insns-dep} is equivalent to
7802 @option{-fsched-stalled-insns-dep=0}.
7803 @option{-fsched-stalled-insns-dep} without a value is equivalent to
7804 @option{-fsched-stalled-insns-dep=1}.
7806 @item -fsched2-use-superblocks
7807 @opindex fsched2-use-superblocks
7808 When scheduling after register allocation, use superblock scheduling.
7809 This allows motion across basic block boundaries,
7810 resulting in faster schedules.  This option is experimental, as not all machine
7811 descriptions used by GCC model the CPU closely enough to avoid unreliable
7812 results from the algorithm.
7814 This only makes sense when scheduling after register allocation, i.e.@: with
7815 @option{-fschedule-insns2} or at @option{-O2} or higher.
7817 @item -fsched-group-heuristic
7818 @opindex fsched-group-heuristic
7819 Enable the group heuristic in the scheduler.  This heuristic favors
7820 the instruction that belongs to a schedule group.  This is enabled
7821 by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
7822 or @option{-fschedule-insns2} or at @option{-O2} or higher.
7824 @item -fsched-critical-path-heuristic
7825 @opindex fsched-critical-path-heuristic
7826 Enable the critical-path heuristic in the scheduler.  This heuristic favors
7827 instructions on the critical path.  This is enabled by default when
7828 scheduling is enabled, i.e.@: with @option{-fschedule-insns}
7829 or @option{-fschedule-insns2} or at @option{-O2} or higher.
7831 @item -fsched-spec-insn-heuristic
7832 @opindex fsched-spec-insn-heuristic
7833 Enable the speculative instruction heuristic in the scheduler.  This
7834 heuristic favors speculative instructions with greater dependency weakness.
7835 This is enabled by default when scheduling is enabled, i.e.@:
7836 with @option{-fschedule-insns} or @option{-fschedule-insns2}
7837 or at @option{-O2} or higher.
7839 @item -fsched-rank-heuristic
7840 @opindex fsched-rank-heuristic
7841 Enable the rank heuristic in the scheduler.  This heuristic favors
7842 the instruction belonging to a basic block with greater size or frequency.
7843 This is enabled by default when scheduling is enabled, i.e.@:
7844 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7845 at @option{-O2} or higher.
7847 @item -fsched-last-insn-heuristic
7848 @opindex fsched-last-insn-heuristic
7849 Enable the last-instruction heuristic in the scheduler.  This heuristic
7850 favors the instruction that is less dependent on the last instruction
7851 scheduled.  This is enabled by default when scheduling is enabled,
7852 i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7853 at @option{-O2} or higher.
7855 @item -fsched-dep-count-heuristic
7856 @opindex fsched-dep-count-heuristic
7857 Enable the dependent-count heuristic in the scheduler.  This heuristic
7858 favors the instruction that has more instructions depending on it.
7859 This is enabled by default when scheduling is enabled, i.e.@:
7860 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7861 at @option{-O2} or higher.
7863 @item -freschedule-modulo-scheduled-loops
7864 @opindex freschedule-modulo-scheduled-loops
7865 Modulo scheduling is performed before traditional scheduling.  If a loop
7866 is modulo scheduled, later scheduling passes may change its schedule.  
7867 Use this option to control that behavior.
7869 @item -fselective-scheduling
7870 @opindex fselective-scheduling
7871 Schedule instructions using selective scheduling algorithm.  Selective
7872 scheduling runs instead of the first scheduler pass.
7874 @item -fselective-scheduling2
7875 @opindex fselective-scheduling2
7876 Schedule instructions using selective scheduling algorithm.  Selective
7877 scheduling runs instead of the second scheduler pass.
7879 @item -fsel-sched-pipelining
7880 @opindex fsel-sched-pipelining
7881 Enable software pipelining of innermost loops during selective scheduling.
7882 This option has no effect unless one of @option{-fselective-scheduling} or
7883 @option{-fselective-scheduling2} is turned on.
7885 @item -fsel-sched-pipelining-outer-loops
7886 @opindex fsel-sched-pipelining-outer-loops
7887 When pipelining loops during selective scheduling, also pipeline outer loops.
7888 This option has no effect unless @option{-fsel-sched-pipelining} is turned on.
7890 @item -fsemantic-interposition
7891 @opindex fsemantic-interposition
7892 Some object formats, like ELF, allow interposing of symbols by dynamic linker.
7893 This means that for symbols exported from the DSO compiler can not perform
7894 inter-procedural propagation, inlining and other optimizations in anticipation
7895 that the function or variable in question may change. While this feature is
7896 useful, for example, to rewrite memory allocation functions by a debugging
7897 implementation, it is expensive in the terms of code quality.
7898 With @option{-fno-semantic-inteposition} compiler assumest that if interposition
7899 happens for functions the overwritting function will have
7900 precisely same semantics (and side effects). Similarly if interposition happens
7901 for variables, the constructor of the variable will be the same. The flag
7902 has no effect for functions explicitly declared inline, where
7903 interposition changing semantic is never allowed and for symbols explicitly
7904 declared weak.
7906 @item -fshrink-wrap
7907 @opindex fshrink-wrap
7908 Emit function prologues only before parts of the function that need it,
7909 rather than at the top of the function.  This flag is enabled by default at
7910 @option{-O} and higher.
7912 @item -fcaller-saves
7913 @opindex fcaller-saves
7914 Enable allocation of values to registers that are clobbered by
7915 function calls, by emitting extra instructions to save and restore the
7916 registers around such calls.  Such allocation is done only when it
7917 seems to result in better code.
7919 This option is always enabled by default on certain machines, usually
7920 those which have no call-preserved registers to use instead.
7922 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7924 @item -fcombine-stack-adjustments
7925 @opindex fcombine-stack-adjustments
7926 Tracks stack adjustments (pushes and pops) and stack memory references
7927 and then tries to find ways to combine them.
7929 Enabled by default at @option{-O1} and higher.
7931 @item -fuse-caller-save
7932 Use caller save registers for allocation if those registers are not used by
7933 any called function.  In that case it is not necessary to save and restore
7934 them around calls.  This is only possible if called functions are part of
7935 same compilation unit as current function and they are compiled before it.
7937 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7939 @item -fconserve-stack
7940 @opindex fconserve-stack
7941 Attempt to minimize stack usage.  The compiler attempts to use less
7942 stack space, even if that makes the program slower.  This option
7943 implies setting the @option{large-stack-frame} parameter to 100
7944 and the @option{large-stack-frame-growth} parameter to 400.
7946 @item -ftree-reassoc
7947 @opindex ftree-reassoc
7948 Perform reassociation on trees.  This flag is enabled by default
7949 at @option{-O} and higher.
7951 @item -ftree-pre
7952 @opindex ftree-pre
7953 Perform partial redundancy elimination (PRE) on trees.  This flag is
7954 enabled by default at @option{-O2} and @option{-O3}.
7956 @item -ftree-partial-pre
7957 @opindex ftree-partial-pre
7958 Make partial redundancy elimination (PRE) more aggressive.  This flag is
7959 enabled by default at @option{-O3}.
7961 @item -ftree-forwprop
7962 @opindex ftree-forwprop
7963 Perform forward propagation on trees.  This flag is enabled by default
7964 at @option{-O} and higher.
7966 @item -ftree-fre
7967 @opindex ftree-fre
7968 Perform full redundancy elimination (FRE) on trees.  The difference
7969 between FRE and PRE is that FRE only considers expressions
7970 that are computed on all paths leading to the redundant computation.
7971 This analysis is faster than PRE, though it exposes fewer redundancies.
7972 This flag is enabled by default at @option{-O} and higher.
7974 @item -ftree-phiprop
7975 @opindex ftree-phiprop
7976 Perform hoisting of loads from conditional pointers on trees.  This
7977 pass is enabled by default at @option{-O} and higher.
7979 @item -fhoist-adjacent-loads
7980 @opindex hoist-adjacent-loads
7981 Speculatively hoist loads from both branches of an if-then-else if the
7982 loads are from adjacent locations in the same structure and the target
7983 architecture has a conditional move instruction.  This flag is enabled
7984 by default at @option{-O2} and higher.
7986 @item -ftree-copy-prop
7987 @opindex ftree-copy-prop
7988 Perform copy propagation on trees.  This pass eliminates unnecessary
7989 copy operations.  This flag is enabled by default at @option{-O} and
7990 higher.
7992 @item -fipa-pure-const
7993 @opindex fipa-pure-const
7994 Discover which functions are pure or constant.
7995 Enabled by default at @option{-O} and higher.
7997 @item -fipa-reference
7998 @opindex fipa-reference
7999 Discover which static variables do not escape the
8000 compilation unit.
8001 Enabled by default at @option{-O} and higher.
8003 @item -fipa-pta
8004 @opindex fipa-pta
8005 Perform interprocedural pointer analysis and interprocedural modification
8006 and reference analysis.  This option can cause excessive memory and
8007 compile-time usage on large compilation units.  It is not enabled by
8008 default at any optimization level.
8010 @item -fipa-profile
8011 @opindex fipa-profile
8012 Perform interprocedural profile propagation.  The functions called only from
8013 cold functions are marked as cold. Also functions executed once (such as
8014 @code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold
8015 functions and loop less parts of functions executed once are then optimized for
8016 size.
8017 Enabled by default at @option{-O} and higher.
8019 @item -fipa-cp
8020 @opindex fipa-cp
8021 Perform interprocedural constant propagation.
8022 This optimization analyzes the program to determine when values passed
8023 to functions are constants and then optimizes accordingly.
8024 This optimization can substantially increase performance
8025 if the application has constants passed to functions.
8026 This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
8028 @item -fipa-cp-clone
8029 @opindex fipa-cp-clone
8030 Perform function cloning to make interprocedural constant propagation stronger.
8031 When enabled, interprocedural constant propagation performs function cloning
8032 when externally visible function can be called with constant arguments.
8033 Because this optimization can create multiple copies of functions,
8034 it may significantly increase code size
8035 (see @option{--param ipcp-unit-growth=@var{value}}).
8036 This flag is enabled by default at @option{-O3}.
8038 @item -fisolate-erroneous-paths-dereference
8039 Detect paths which trigger erroneous or undefined behaviour due to
8040 dereferencing a NULL pointer.  Isolate those paths from the main control
8041 flow and turn the statement with erroneous or undefined behaviour into a trap.
8043 @item -fisolate-erroneous-paths-attribute
8044 Detect paths which trigger erroneous or undefined behaviour due a NULL value
8045 being used in a way which is forbidden by a @code{returns_nonnull} or @code{nonnull}
8046 attribute.  Isolate those paths from the main control flow and turn the
8047 statement with erroneous or undefined behaviour into a trap.  This is not
8048 currently enabled, but may be enabled by @code{-O2} in the future.
8050 @item -ftree-sink
8051 @opindex ftree-sink
8052 Perform forward store motion  on trees.  This flag is
8053 enabled by default at @option{-O} and higher.
8055 @item -ftree-bit-ccp
8056 @opindex ftree-bit-ccp
8057 Perform sparse conditional bit constant propagation on trees and propagate
8058 pointer alignment information.
8059 This pass only operates on local scalar variables and is enabled by default
8060 at @option{-O} and higher.  It requires that @option{-ftree-ccp} is enabled.
8062 @item -ftree-ccp
8063 @opindex ftree-ccp
8064 Perform sparse conditional constant propagation (CCP) on trees.  This
8065 pass only operates on local scalar variables and is enabled by default
8066 at @option{-O} and higher.
8068 @item -fssa-phiopt
8069 @opindex fssa-phiopt
8070 Perform pattern matching on SSA PHI nodes to optimize conditional
8071 code.  This pass is enabled by default at @option{-O} and higher.
8073 @item -ftree-switch-conversion
8074 Perform conversion of simple initializations in a switch to
8075 initializations from a scalar array.  This flag is enabled by default
8076 at @option{-O2} and higher.
8078 @item -ftree-tail-merge
8079 Look for identical code sequences.  When found, replace one with a jump to the
8080 other.  This optimization is known as tail merging or cross jumping.  This flag
8081 is enabled by default at @option{-O2} and higher.  The compilation time
8082 in this pass can
8083 be limited using @option{max-tail-merge-comparisons} parameter and
8084 @option{max-tail-merge-iterations} parameter.
8086 @item -ftree-dce
8087 @opindex ftree-dce
8088 Perform dead code elimination (DCE) on trees.  This flag is enabled by
8089 default at @option{-O} and higher.
8091 @item -ftree-builtin-call-dce
8092 @opindex ftree-builtin-call-dce
8093 Perform conditional dead code elimination (DCE) for calls to built-in functions
8094 that may set @code{errno} but are otherwise side-effect free.  This flag is
8095 enabled by default at @option{-O2} and higher if @option{-Os} is not also
8096 specified.
8098 @item -ftree-dominator-opts
8099 @opindex ftree-dominator-opts
8100 Perform a variety of simple scalar cleanups (constant/copy
8101 propagation, redundancy elimination, range propagation and expression
8102 simplification) based on a dominator tree traversal.  This also
8103 performs jump threading (to reduce jumps to jumps). This flag is
8104 enabled by default at @option{-O} and higher.
8106 @item -ftree-dse
8107 @opindex ftree-dse
8108 Perform dead store elimination (DSE) on trees.  A dead store is a store into
8109 a memory location that is later overwritten by another store without
8110 any intervening loads.  In this case the earlier store can be deleted.  This
8111 flag is enabled by default at @option{-O} and higher.
8113 @item -ftree-ch
8114 @opindex ftree-ch
8115 Perform loop header copying on trees.  This is beneficial since it increases
8116 effectiveness of code motion optimizations.  It also saves one jump.  This flag
8117 is enabled by default at @option{-O} and higher.  It is not enabled
8118 for @option{-Os}, since it usually increases code size.
8120 @item -ftree-loop-optimize
8121 @opindex ftree-loop-optimize
8122 Perform loop optimizations on trees.  This flag is enabled by default
8123 at @option{-O} and higher.
8125 @item -ftree-loop-linear
8126 @opindex ftree-loop-linear
8127 Perform loop interchange transformations on tree.  Same as
8128 @option{-floop-interchange}.  To use this code transformation, GCC has
8129 to be configured with @option{--with-ppl} and @option{--with-cloog} to
8130 enable the Graphite loop transformation infrastructure.
8132 @item -floop-interchange
8133 @opindex floop-interchange
8134 Perform loop interchange transformations on loops.  Interchanging two
8135 nested loops switches the inner and outer loops.  For example, given a
8136 loop like:
8137 @smallexample
8138 DO J = 1, M
8139   DO I = 1, N
8140     A(J, I) = A(J, I) * C
8141   ENDDO
8142 ENDDO
8143 @end smallexample
8144 loop interchange transforms the loop as if it were written:
8145 @smallexample
8146 DO I = 1, N
8147   DO J = 1, M
8148     A(J, I) = A(J, I) * C
8149   ENDDO
8150 ENDDO
8151 @end smallexample
8152 which can be beneficial when @code{N} is larger than the caches,
8153 because in Fortran, the elements of an array are stored in memory
8154 contiguously by column, and the original loop iterates over rows,
8155 potentially creating at each access a cache miss.  This optimization
8156 applies to all the languages supported by GCC and is not limited to
8157 Fortran.  To use this code transformation, GCC has to be configured
8158 with @option{--with-ppl} and @option{--with-cloog} to enable the
8159 Graphite loop transformation infrastructure.
8161 @item -floop-strip-mine
8162 @opindex floop-strip-mine
8163 Perform loop strip mining transformations on loops.  Strip mining
8164 splits a loop into two nested loops.  The outer loop has strides
8165 equal to the strip size and the inner loop has strides of the
8166 original loop within a strip.  The strip length can be changed
8167 using the @option{loop-block-tile-size} parameter.  For example,
8168 given a loop like:
8169 @smallexample
8170 DO I = 1, N
8171   A(I) = A(I) + C
8172 ENDDO
8173 @end smallexample
8174 loop strip mining transforms the loop as if it were written:
8175 @smallexample
8176 DO II = 1, N, 51
8177   DO I = II, min (II + 50, N)
8178     A(I) = A(I) + C
8179   ENDDO
8180 ENDDO
8181 @end smallexample
8182 This optimization applies to all the languages supported by GCC and is
8183 not limited to Fortran.  To use this code transformation, GCC has to
8184 be configured with @option{--with-ppl} and @option{--with-cloog} to
8185 enable the Graphite loop transformation infrastructure.
8187 @item -floop-block
8188 @opindex floop-block
8189 Perform loop blocking transformations on loops.  Blocking strip mines
8190 each loop in the loop nest such that the memory accesses of the
8191 element loops fit inside caches.  The strip length can be changed
8192 using the @option{loop-block-tile-size} parameter.  For example, given
8193 a loop like:
8194 @smallexample
8195 DO I = 1, N
8196   DO J = 1, M
8197     A(J, I) = B(I) + C(J)
8198   ENDDO
8199 ENDDO
8200 @end smallexample
8201 loop blocking transforms the loop as if it were written:
8202 @smallexample
8203 DO II = 1, N, 51
8204   DO JJ = 1, M, 51
8205     DO I = II, min (II + 50, N)
8206       DO J = JJ, min (JJ + 50, M)
8207         A(J, I) = B(I) + C(J)
8208       ENDDO
8209     ENDDO
8210   ENDDO
8211 ENDDO
8212 @end smallexample
8213 which can be beneficial when @code{M} is larger than the caches,
8214 because the innermost loop iterates over a smaller amount of data
8215 which can be kept in the caches.  This optimization applies to all the
8216 languages supported by GCC and is not limited to Fortran.  To use this
8217 code transformation, GCC has to be configured with @option{--with-ppl}
8218 and @option{--with-cloog} to enable the Graphite loop transformation
8219 infrastructure.
8221 @item -fgraphite-identity
8222 @opindex fgraphite-identity
8223 Enable the identity transformation for graphite.  For every SCoP we generate
8224 the polyhedral representation and transform it back to gimple.  Using
8225 @option{-fgraphite-identity} we can check the costs or benefits of the
8226 GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
8227 are also performed by the code generator CLooG, like index splitting and
8228 dead code elimination in loops.
8230 @item -floop-nest-optimize
8231 @opindex floop-nest-optimize
8232 Enable the ISL based loop nest optimizer.  This is a generic loop nest
8233 optimizer based on the Pluto optimization algorithms.  It calculates a loop
8234 structure optimized for data-locality and parallelism.  This option
8235 is experimental.
8237 @item -floop-parallelize-all
8238 @opindex floop-parallelize-all
8239 Use the Graphite data dependence analysis to identify loops that can
8240 be parallelized.  Parallelize all the loops that can be analyzed to
8241 not contain loop carried dependences without checking that it is
8242 profitable to parallelize the loops.
8244 @item -fcheck-data-deps
8245 @opindex fcheck-data-deps
8246 Compare the results of several data dependence analyzers.  This option
8247 is used for debugging the data dependence analyzers.
8249 @item -ftree-loop-if-convert
8250 Attempt to transform conditional jumps in the innermost loops to
8251 branch-less equivalents.  The intent is to remove control-flow from
8252 the innermost loops in order to improve the ability of the
8253 vectorization pass to handle these loops.  This is enabled by default
8254 if vectorization is enabled.
8256 @item -ftree-loop-if-convert-stores
8257 Attempt to also if-convert conditional jumps containing memory writes.
8258 This transformation can be unsafe for multi-threaded programs as it
8259 transforms conditional memory writes into unconditional memory writes.
8260 For example,
8261 @smallexample
8262 for (i = 0; i < N; i++)
8263   if (cond)
8264     A[i] = expr;
8265 @end smallexample
8266 is transformed to
8267 @smallexample
8268 for (i = 0; i < N; i++)
8269   A[i] = cond ? expr : A[i];
8270 @end smallexample
8271 potentially producing data races.
8273 @item -ftree-loop-distribution
8274 Perform loop distribution.  This flag can improve cache performance on
8275 big loop bodies and allow further loop optimizations, like
8276 parallelization or vectorization, to take place.  For example, the loop
8277 @smallexample
8278 DO I = 1, N
8279   A(I) = B(I) + C
8280   D(I) = E(I) * F
8281 ENDDO
8282 @end smallexample
8283 is transformed to
8284 @smallexample
8285 DO I = 1, N
8286    A(I) = B(I) + C
8287 ENDDO
8288 DO I = 1, N
8289    D(I) = E(I) * F
8290 ENDDO
8291 @end smallexample
8293 @item -ftree-loop-distribute-patterns
8294 Perform loop distribution of patterns that can be code generated with
8295 calls to a library.  This flag is enabled by default at @option{-O3}.
8297 This pass distributes the initialization loops and generates a call to
8298 memset zero.  For example, the loop
8299 @smallexample
8300 DO I = 1, N
8301   A(I) = 0
8302   B(I) = A(I) + I
8303 ENDDO
8304 @end smallexample
8305 is transformed to
8306 @smallexample
8307 DO I = 1, N
8308    A(I) = 0
8309 ENDDO
8310 DO I = 1, N
8311    B(I) = A(I) + I
8312 ENDDO
8313 @end smallexample
8314 and the initialization loop is transformed into a call to memset zero.
8316 @item -ftree-loop-im
8317 @opindex ftree-loop-im
8318 Perform loop invariant motion on trees.  This pass moves only invariants that
8319 are hard to handle at RTL level (function calls, operations that expand to
8320 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
8321 operands of conditions that are invariant out of the loop, so that we can use
8322 just trivial invariantness analysis in loop unswitching.  The pass also includes
8323 store motion.
8325 @item -ftree-loop-ivcanon
8326 @opindex ftree-loop-ivcanon
8327 Create a canonical counter for number of iterations in loops for which
8328 determining number of iterations requires complicated analysis.  Later
8329 optimizations then may determine the number easily.  Useful especially
8330 in connection with unrolling.
8332 @item -fivopts
8333 @opindex fivopts
8334 Perform induction variable optimizations (strength reduction, induction
8335 variable merging and induction variable elimination) on trees.
8337 @item -ftree-parallelize-loops=n
8338 @opindex ftree-parallelize-loops
8339 Parallelize loops, i.e., split their iteration space to run in n threads.
8340 This is only possible for loops whose iterations are independent
8341 and can be arbitrarily reordered.  The optimization is only
8342 profitable on multiprocessor machines, for loops that are CPU-intensive,
8343 rather than constrained e.g.@: by memory bandwidth.  This option
8344 implies @option{-pthread}, and thus is only supported on targets
8345 that have support for @option{-pthread}.
8347 @item -ftree-pta
8348 @opindex ftree-pta
8349 Perform function-local points-to analysis on trees.  This flag is
8350 enabled by default at @option{-O} and higher.
8352 @item -ftree-sra
8353 @opindex ftree-sra
8354 Perform scalar replacement of aggregates.  This pass replaces structure
8355 references with scalars to prevent committing structures to memory too
8356 early.  This flag is enabled by default at @option{-O} and higher.
8358 @item -ftree-copyrename
8359 @opindex ftree-copyrename
8360 Perform copy renaming on trees.  This pass attempts to rename compiler
8361 temporaries to other variables at copy locations, usually resulting in
8362 variable names which more closely resemble the original variables.  This flag
8363 is enabled by default at @option{-O} and higher.
8365 @item -ftree-coalesce-inlined-vars
8366 @opindex ftree-coalesce-inlined-vars
8367 Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
8368 combine small user-defined variables too, but only if they were inlined
8369 from other functions.  It is a more limited form of
8370 @option{-ftree-coalesce-vars}.  This may harm debug information of such
8371 inlined variables, but it will keep variables of the inlined-into
8372 function apart from each other, such that they are more likely to
8373 contain the expected values in a debugging session.  This was the
8374 default in GCC versions older than 4.7.
8376 @item -ftree-coalesce-vars
8377 @opindex ftree-coalesce-vars
8378 Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
8379 combine small user-defined variables too, instead of just compiler
8380 temporaries.  This may severely limit the ability to debug an optimized
8381 program compiled with @option{-fno-var-tracking-assignments}.  In the
8382 negated form, this flag prevents SSA coalescing of user variables,
8383 including inlined ones.  This option is enabled by default.
8385 @item -ftree-ter
8386 @opindex ftree-ter
8387 Perform temporary expression replacement during the SSA->normal phase.  Single
8388 use/single def temporaries are replaced at their use location with their
8389 defining expression.  This results in non-GIMPLE code, but gives the expanders
8390 much more complex trees to work on resulting in better RTL generation.  This is
8391 enabled by default at @option{-O} and higher.
8393 @item -ftree-slsr
8394 @opindex ftree-slsr
8395 Perform straight-line strength reduction on trees.  This recognizes related
8396 expressions involving multiplications and replaces them by less expensive
8397 calculations when possible.  This is enabled by default at @option{-O} and
8398 higher.
8400 @item -ftree-vectorize
8401 @opindex ftree-vectorize
8402 Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
8403 and @option{-ftree-slp-vectorize} if not explicitly specified.
8405 @item -ftree-loop-vectorize
8406 @opindex ftree-loop-vectorize
8407 Perform loop vectorization on trees. This flag is enabled by default at
8408 @option{-O3} and when @option{-ftree-vectorize} is enabled.
8410 @item -ftree-slp-vectorize
8411 @opindex ftree-slp-vectorize
8412 Perform basic block vectorization on trees. This flag is enabled by default at
8413 @option{-O3} and when @option{-ftree-vectorize} is enabled.
8415 @item -fvect-cost-model=@var{model}
8416 @opindex fvect-cost-model
8417 Alter the cost model used for vectorization.  The @var{model} argument
8418 should be one of @code{unlimited}, @code{dynamic} or @code{cheap}.
8419 With the @code{unlimited} model the vectorized code-path is assumed
8420 to be profitable while with the @code{dynamic} model a runtime check
8421 will guard the vectorized code-path to enable it only for iteration
8422 counts that will likely execute faster than when executing the original
8423 scalar loop.  The @code{cheap} model will disable vectorization of
8424 loops where doing so would be cost prohibitive for example due to
8425 required runtime checks for data dependence or alignment but otherwise
8426 is equal to the @code{dynamic} model.
8427 The default cost model depends on other optimization flags and is
8428 either @code{dynamic} or @code{cheap}.
8430 @item -fsimd-cost-model=@var{model}
8431 @opindex fsimd-cost-model
8432 Alter the cost model used for vectorization of loops marked with the OpenMP
8433 or Cilk Plus simd directive.  The @var{model} argument should be one of
8434 @code{unlimited}, @code{dynamic}, @code{cheap}.  All values of @var{model}
8435 have the same meaning as described in @option{-fvect-cost-model} and by
8436 default a cost model defined with @option{-fvect-cost-model} is used.
8438 @item -ftree-vrp
8439 @opindex ftree-vrp
8440 Perform Value Range Propagation on trees.  This is similar to the
8441 constant propagation pass, but instead of values, ranges of values are
8442 propagated.  This allows the optimizers to remove unnecessary range
8443 checks like array bound checks and null pointer checks.  This is
8444 enabled by default at @option{-O2} and higher.  Null pointer check
8445 elimination is only done if @option{-fdelete-null-pointer-checks} is
8446 enabled.
8448 @item -ftracer
8449 @opindex ftracer
8450 Perform tail duplication to enlarge superblock size.  This transformation
8451 simplifies the control flow of the function allowing other optimizations to do
8452 a better job.
8454 @item -funroll-loops
8455 @opindex funroll-loops
8456 Unroll loops whose number of iterations can be determined at compile
8457 time or upon entry to the loop.  @option{-funroll-loops} implies
8458 @option{-frerun-cse-after-loop}.  This option makes code larger,
8459 and may or may not make it run faster.
8461 @item -funroll-all-loops
8462 @opindex funroll-all-loops
8463 Unroll all loops, even if their number of iterations is uncertain when
8464 the loop is entered.  This usually makes programs run more slowly.
8465 @option{-funroll-all-loops} implies the same options as
8466 @option{-funroll-loops},
8468 @item -fsplit-ivs-in-unroller
8469 @opindex fsplit-ivs-in-unroller
8470 Enables expression of values of induction variables in later iterations
8471 of the unrolled loop using the value in the first iteration.  This breaks
8472 long dependency chains, thus improving efficiency of the scheduling passes.
8474 A combination of @option{-fweb} and CSE is often sufficient to obtain the
8475 same effect.  However, that is not reliable in cases where the loop body
8476 is more complicated than a single basic block.  It also does not work at all
8477 on some architectures due to restrictions in the CSE pass.
8479 This optimization is enabled by default.
8481 @item -fvariable-expansion-in-unroller
8482 @opindex fvariable-expansion-in-unroller
8483 With this option, the compiler creates multiple copies of some
8484 local variables when unrolling a loop, which can result in superior code.
8486 @item -fpartial-inlining
8487 @opindex fpartial-inlining
8488 Inline parts of functions.  This option has any effect only
8489 when inlining itself is turned on by the @option{-finline-functions}
8490 or @option{-finline-small-functions} options.
8492 Enabled at level @option{-O2}.
8494 @item -fpredictive-commoning
8495 @opindex fpredictive-commoning
8496 Perform predictive commoning optimization, i.e., reusing computations
8497 (especially memory loads and stores) performed in previous
8498 iterations of loops.
8500 This option is enabled at level @option{-O3}.
8502 @item -fprefetch-loop-arrays
8503 @opindex fprefetch-loop-arrays
8504 If supported by the target machine, generate instructions to prefetch
8505 memory to improve the performance of loops that access large arrays.
8507 This option may generate better or worse code; results are highly
8508 dependent on the structure of loops within the source code.
8510 Disabled at level @option{-Os}.
8512 @item -fno-peephole
8513 @itemx -fno-peephole2
8514 @opindex fno-peephole
8515 @opindex fno-peephole2
8516 Disable any machine-specific peephole optimizations.  The difference
8517 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
8518 are implemented in the compiler; some targets use one, some use the
8519 other, a few use both.
8521 @option{-fpeephole} is enabled by default.
8522 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8524 @item -fno-guess-branch-probability
8525 @opindex fno-guess-branch-probability
8526 Do not guess branch probabilities using heuristics.
8528 GCC uses heuristics to guess branch probabilities if they are
8529 not provided by profiling feedback (@option{-fprofile-arcs}).  These
8530 heuristics are based on the control flow graph.  If some branch probabilities
8531 are specified by @samp{__builtin_expect}, then the heuristics are
8532 used to guess branch probabilities for the rest of the control flow graph,
8533 taking the @samp{__builtin_expect} info into account.  The interactions
8534 between the heuristics and @samp{__builtin_expect} can be complex, and in
8535 some cases, it may be useful to disable the heuristics so that the effects
8536 of @samp{__builtin_expect} are easier to understand.
8538 The default is @option{-fguess-branch-probability} at levels
8539 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8541 @item -freorder-blocks
8542 @opindex freorder-blocks
8543 Reorder basic blocks in the compiled function in order to reduce number of
8544 taken branches and improve code locality.
8546 Enabled at levels @option{-O2}, @option{-O3}.
8548 @item -freorder-blocks-and-partition
8549 @opindex freorder-blocks-and-partition
8550 In addition to reordering basic blocks in the compiled function, in order
8551 to reduce number of taken branches, partitions hot and cold basic blocks
8552 into separate sections of the assembly and .o files, to improve
8553 paging and cache locality performance.
8555 This optimization is automatically turned off in the presence of
8556 exception handling, for linkonce sections, for functions with a user-defined
8557 section attribute and on any architecture that does not support named
8558 sections.
8560 Enabled for x86 at levels @option{-O2}, @option{-O3}.
8562 @item -freorder-functions
8563 @opindex freorder-functions
8564 Reorder functions in the object file in order to
8565 improve code locality.  This is implemented by using special
8566 subsections @code{.text.hot} for most frequently executed functions and
8567 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
8568 the linker so object file format must support named sections and linker must
8569 place them in a reasonable way.
8571 Also profile feedback must be available to make this option effective.  See
8572 @option{-fprofile-arcs} for details.
8574 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8576 @item -fstrict-aliasing
8577 @opindex fstrict-aliasing
8578 Allow the compiler to assume the strictest aliasing rules applicable to
8579 the language being compiled.  For C (and C++), this activates
8580 optimizations based on the type of expressions.  In particular, an
8581 object of one type is assumed never to reside at the same address as an
8582 object of a different type, unless the types are almost the same.  For
8583 example, an @code{unsigned int} can alias an @code{int}, but not a
8584 @code{void*} or a @code{double}.  A character type may alias any other
8585 type.
8587 @anchor{Type-punning}Pay special attention to code like this:
8588 @smallexample
8589 union a_union @{
8590   int i;
8591   double d;
8594 int f() @{
8595   union a_union t;
8596   t.d = 3.0;
8597   return t.i;
8599 @end smallexample
8600 The practice of reading from a different union member than the one most
8601 recently written to (called ``type-punning'') is common.  Even with
8602 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
8603 is accessed through the union type.  So, the code above works as
8604 expected.  @xref{Structures unions enumerations and bit-fields
8605 implementation}.  However, this code might not:
8606 @smallexample
8607 int f() @{
8608   union a_union t;
8609   int* ip;
8610   t.d = 3.0;
8611   ip = &t.i;
8612   return *ip;
8614 @end smallexample
8616 Similarly, access by taking the address, casting the resulting pointer
8617 and dereferencing the result has undefined behavior, even if the cast
8618 uses a union type, e.g.:
8619 @smallexample
8620 int f() @{
8621   double d = 3.0;
8622   return ((union a_union *) &d)->i;
8624 @end smallexample
8626 The @option{-fstrict-aliasing} option is enabled at levels
8627 @option{-O2}, @option{-O3}, @option{-Os}.
8629 @item -fstrict-overflow
8630 @opindex fstrict-overflow
8631 Allow the compiler to assume strict signed overflow rules, depending
8632 on the language being compiled.  For C (and C++) this means that
8633 overflow when doing arithmetic with signed numbers is undefined, which
8634 means that the compiler may assume that it does not happen.  This
8635 permits various optimizations.  For example, the compiler assumes
8636 that an expression like @code{i + 10 > i} is always true for
8637 signed @code{i}.  This assumption is only valid if signed overflow is
8638 undefined, as the expression is false if @code{i + 10} overflows when
8639 using twos complement arithmetic.  When this option is in effect any
8640 attempt to determine whether an operation on signed numbers 
8641 overflows must be written carefully to not actually involve overflow.
8643 This option also allows the compiler to assume strict pointer
8644 semantics: given a pointer to an object, if adding an offset to that
8645 pointer does not produce a pointer to the same object, the addition is
8646 undefined.  This permits the compiler to conclude that @code{p + u >
8647 p} is always true for a pointer @code{p} and unsigned integer
8648 @code{u}.  This assumption is only valid because pointer wraparound is
8649 undefined, as the expression is false if @code{p + u} overflows using
8650 twos complement arithmetic.
8652 See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
8653 that integer signed overflow is fully defined: it wraps.  When
8654 @option{-fwrapv} is used, there is no difference between
8655 @option{-fstrict-overflow} and @option{-fno-strict-overflow} for
8656 integers.  With @option{-fwrapv} certain types of overflow are
8657 permitted.  For example, if the compiler gets an overflow when doing
8658 arithmetic on constants, the overflowed value can still be used with
8659 @option{-fwrapv}, but not otherwise.
8661 The @option{-fstrict-overflow} option is enabled at levels
8662 @option{-O2}, @option{-O3}, @option{-Os}.
8664 @item -falign-functions
8665 @itemx -falign-functions=@var{n}
8666 @opindex falign-functions
8667 Align the start of functions to the next power-of-two greater than
8668 @var{n}, skipping up to @var{n} bytes.  For instance,
8669 @option{-falign-functions=32} aligns functions to the next 32-byte
8670 boundary, but @option{-falign-functions=24} aligns to the next
8671 32-byte boundary only if this can be done by skipping 23 bytes or less.
8673 @option{-fno-align-functions} and @option{-falign-functions=1} are
8674 equivalent and mean that functions are not aligned.
8676 Some assemblers only support this flag when @var{n} is a power of two;
8677 in that case, it is rounded up.
8679 If @var{n} is not specified or is zero, use a machine-dependent default.
8681 Enabled at levels @option{-O2}, @option{-O3}.
8683 @item -falign-labels
8684 @itemx -falign-labels=@var{n}
8685 @opindex falign-labels
8686 Align all branch targets to a power-of-two boundary, skipping up to
8687 @var{n} bytes like @option{-falign-functions}.  This option can easily
8688 make code slower, because it must insert dummy operations for when the
8689 branch target is reached in the usual flow of the code.
8691 @option{-fno-align-labels} and @option{-falign-labels=1} are
8692 equivalent and mean that labels are not aligned.
8694 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
8695 are greater than this value, then their values are used instead.
8697 If @var{n} is not specified or is zero, use a machine-dependent default
8698 which is very likely to be @samp{1}, meaning no alignment.
8700 Enabled at levels @option{-O2}, @option{-O3}.
8702 @item -falign-loops
8703 @itemx -falign-loops=@var{n}
8704 @opindex falign-loops
8705 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
8706 like @option{-falign-functions}.  If the loops are
8707 executed many times, this makes up for any execution of the dummy
8708 operations.
8710 @option{-fno-align-loops} and @option{-falign-loops=1} are
8711 equivalent and mean that loops are not aligned.
8713 If @var{n} is not specified or is zero, use a machine-dependent default.
8715 Enabled at levels @option{-O2}, @option{-O3}.
8717 @item -falign-jumps
8718 @itemx -falign-jumps=@var{n}
8719 @opindex falign-jumps
8720 Align branch targets to a power-of-two boundary, for branch targets
8721 where the targets can only be reached by jumping, skipping up to @var{n}
8722 bytes like @option{-falign-functions}.  In this case, no dummy operations
8723 need be executed.
8725 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
8726 equivalent and mean that loops are not aligned.
8728 If @var{n} is not specified or is zero, use a machine-dependent default.
8730 Enabled at levels @option{-O2}, @option{-O3}.
8732 @item -funit-at-a-time
8733 @opindex funit-at-a-time
8734 This option is left for compatibility reasons. @option{-funit-at-a-time}
8735 has no effect, while @option{-fno-unit-at-a-time} implies
8736 @option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
8738 Enabled by default.
8740 @item -fno-toplevel-reorder
8741 @opindex fno-toplevel-reorder
8742 Do not reorder top-level functions, variables, and @code{asm}
8743 statements.  Output them in the same order that they appear in the
8744 input file.  When this option is used, unreferenced static variables
8745 are not removed.  This option is intended to support existing code
8746 that relies on a particular ordering.  For new code, it is better to
8747 use attributes when possible.
8749 Enabled at level @option{-O0}.  When disabled explicitly, it also implies
8750 @option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some
8751 targets.
8753 @item -fweb
8754 @opindex fweb
8755 Constructs webs as commonly used for register allocation purposes and assign
8756 each web individual pseudo register.  This allows the register allocation pass
8757 to operate on pseudos directly, but also strengthens several other optimization
8758 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
8759 however, make debugging impossible, since variables no longer stay in a
8760 ``home register''.
8762 Enabled by default with @option{-funroll-loops}.
8764 @item -fwhole-program
8765 @opindex fwhole-program
8766 Assume that the current compilation unit represents the whole program being
8767 compiled.  All public functions and variables with the exception of @code{main}
8768 and those merged by attribute @code{externally_visible} become static functions
8769 and in effect are optimized more aggressively by interprocedural optimizers.
8771 This option should not be used in combination with @code{-flto}.
8772 Instead relying on a linker plugin should provide safer and more precise
8773 information.
8775 @item -flto[=@var{n}]
8776 @opindex flto
8777 This option runs the standard link-time optimizer.  When invoked
8778 with source code, it generates GIMPLE (one of GCC's internal
8779 representations) and writes it to special ELF sections in the object
8780 file.  When the object files are linked together, all the function
8781 bodies are read from these ELF sections and instantiated as if they
8782 had been part of the same translation unit.
8784 To use the link-time optimizer, @option{-flto} and optimization
8785 options should be specified at compile time and during the final link.
8786 For example:
8788 @smallexample
8789 gcc -c -O2 -flto foo.c
8790 gcc -c -O2 -flto bar.c
8791 gcc -o myprog -flto -O2 foo.o bar.o
8792 @end smallexample
8794 The first two invocations to GCC save a bytecode representation
8795 of GIMPLE into special ELF sections inside @file{foo.o} and
8796 @file{bar.o}.  The final invocation reads the GIMPLE bytecode from
8797 @file{foo.o} and @file{bar.o}, merges the two files into a single
8798 internal image, and compiles the result as usual.  Since both
8799 @file{foo.o} and @file{bar.o} are merged into a single image, this
8800 causes all the interprocedural analyses and optimizations in GCC to
8801 work across the two files as if they were a single one.  This means,
8802 for example, that the inliner is able to inline functions in
8803 @file{bar.o} into functions in @file{foo.o} and vice-versa.
8805 Another (simpler) way to enable link-time optimization is:
8807 @smallexample
8808 gcc -o myprog -flto -O2 foo.c bar.c
8809 @end smallexample
8811 The above generates bytecode for @file{foo.c} and @file{bar.c},
8812 merges them together into a single GIMPLE representation and optimizes
8813 them as usual to produce @file{myprog}.
8815 The only important thing to keep in mind is that to enable link-time
8816 optimizations you need to use the GCC driver to perform the link-step.
8817 GCC then automatically performs link-time optimization if any of the
8818 objects involved were compiled with the @option{-flto}.  You generally
8819 should specify the optimization options to be used for link-time
8820 optimization though GCC will try to be clever at guessing an
8821 optimization level to use from the options used at compile-time
8822 if you fail to specify one at link-time.  You can always override
8823 the automatic decision to do link-time optimization at link-time
8824 by passing @option{-fno-lto} to the link command.
8826 To make whole program optimization effective, it is necessary to make
8827 certain whole program assumptions.  The compiler needs to know
8828 what functions and variables can be accessed by libraries and runtime
8829 outside of the link-time optimized unit.  When supported by the linker,
8830 the linker plugin (see @option{-fuse-linker-plugin}) passes information
8831 to the compiler about used and externally visible symbols.  When
8832 the linker plugin is not available, @option{-fwhole-program} should be
8833 used to allow the compiler to make these assumptions, which leads
8834 to more aggressive optimization decisions.
8836 When @option{-fuse-linker-plugin} is not enabled then, when a file is
8837 compiled with @option{-flto}, the generated object file is larger than
8838 a regular object file because it contains GIMPLE bytecodes and the usual
8839 final code (see @option{-ffat-lto-objects}.  This means that
8840 object files with LTO information can be linked as normal object
8841 files; if @option{-fno-lto} is passed to the linker, no
8842 interprocedural optimizations are applied.  Note that when
8843 @option{-fno-fat-lto-objects} is enabled the compile-stage is faster
8844 but you cannot perform a regular, non-LTO link on them.
8846 Additionally, the optimization flags used to compile individual files
8847 are not necessarily related to those used at link time.  For instance,
8849 @smallexample
8850 gcc -c -O0 -ffat-lto-objects -flto foo.c
8851 gcc -c -O0 -ffat-lto-objects -flto bar.c
8852 gcc -o myprog -O3 foo.o bar.o
8853 @end smallexample
8855 This produces individual object files with unoptimized assembler
8856 code, but the resulting binary @file{myprog} is optimized at
8857 @option{-O3}.  If, instead, the final binary is generated with
8858 @option{-fno-lto}, then @file{myprog} is not optimized.
8860 When producing the final binary, GCC only
8861 applies link-time optimizations to those files that contain bytecode.
8862 Therefore, you can mix and match object files and libraries with
8863 GIMPLE bytecodes and final object code.  GCC automatically selects
8864 which files to optimize in LTO mode and which files to link without
8865 further processing.
8867 There are some code generation flags preserved by GCC when
8868 generating bytecodes, as they need to be used during the final link
8869 stage.  Generally options specified at link-time override those
8870 specified at compile-time.
8872 If you do not specify an optimization level option @option{-O} at
8873 link-time then GCC will compute one based on the optimization levels
8874 used when compiling the object files.  The highest optimization
8875 level will win here.
8877 Currently, the following options and their setting are take from
8878 the first object file that explicitely specified it: 
8879 @option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon},
8880 @option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm}
8881 and all the @option{-m} target flags.
8883 Certain ABI changing flags are required to match in all compilation-units
8884 and trying to override this at link-time with a conflicting value
8885 is ignored.  This includes options such as @option{-freg-struct-return}
8886 and @option{-fpcc-struct-return}. 
8888 Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
8889 @option{-fwrapv}, @option{-fno-trapv} or @option{-fno-strict-aliasing}
8890 are passed through to the link stage and merged conservatively for
8891 conflicting translation units.  Specifically
8892 @option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
8893 precedence and for example @option{-ffp-contract=off} takes precedence
8894 over @option{-ffp-contract=fast}.  You can override them at linke-time.
8896 It is recommended that you compile all the files participating in the
8897 same link with the same options and also specify those options at
8898 link time.
8900 If LTO encounters objects with C linkage declared with incompatible
8901 types in separate translation units to be linked together (undefined
8902 behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
8903 issued.  The behavior is still undefined at run time.  Similar
8904 diagnostics may be raised for other languages.
8906 Another feature of LTO is that it is possible to apply interprocedural
8907 optimizations on files written in different languages:
8909 @smallexample
8910 gcc -c -flto foo.c
8911 g++ -c -flto bar.cc
8912 gfortran -c -flto baz.f90
8913 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
8914 @end smallexample
8916 Notice that the final link is done with @command{g++} to get the C++
8917 runtime libraries and @option{-lgfortran} is added to get the Fortran
8918 runtime libraries.  In general, when mixing languages in LTO mode, you
8919 should use the same link command options as when mixing languages in a
8920 regular (non-LTO) compilation.
8922 If object files containing GIMPLE bytecode are stored in a library archive, say
8923 @file{libfoo.a}, it is possible to extract and use them in an LTO link if you
8924 are using a linker with plugin support.  To create static libraries suitable
8925 for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar}
8926 and @code{ranlib}; to show the symbols of object files with GIMPLE bytecode, use
8927 @command{gcc-nm}.  Those commands require that @command{ar}, @command{ranlib}
8928 and @command{nm} have been compiled with plugin support.  At link time, use the the
8929 flag @option{-fuse-linker-plugin} to ensure that the library participates in
8930 the LTO optimization process:
8932 @smallexample
8933 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
8934 @end smallexample
8936 With the linker plugin enabled, the linker extracts the needed
8937 GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
8938 to make them part of the aggregated GIMPLE image to be optimized.
8940 If you are not using a linker with plugin support and/or do not
8941 enable the linker plugin, then the objects inside @file{libfoo.a}
8942 are extracted and linked as usual, but they do not participate
8943 in the LTO optimization process.  In order to make a static library suitable
8944 for both LTO optimization and usual linkage, compile its object files with
8945 @option{-flto} @code{-ffat-lto-objects}.
8947 Link-time optimizations do not require the presence of the whole program to
8948 operate.  If the program does not require any symbols to be exported, it is
8949 possible to combine @option{-flto} and @option{-fwhole-program} to allow
8950 the interprocedural optimizers to use more aggressive assumptions which may
8951 lead to improved optimization opportunities.
8952 Use of @option{-fwhole-program} is not needed when linker plugin is
8953 active (see @option{-fuse-linker-plugin}).
8955 The current implementation of LTO makes no
8956 attempt to generate bytecode that is portable between different
8957 types of hosts.  The bytecode files are versioned and there is a
8958 strict version check, so bytecode files generated in one version of
8959 GCC will not work with an older or newer version of GCC.
8961 Link-time optimization does not work well with generation of debugging
8962 information.  Combining @option{-flto} with
8963 @option{-g} is currently experimental and expected to produce unexpected
8964 results.
8966 If you specify the optional @var{n}, the optimization and code
8967 generation done at link time is executed in parallel using @var{n}
8968 parallel jobs by utilizing an installed @command{make} program.  The
8969 environment variable @env{MAKE} may be used to override the program
8970 used.  The default value for @var{n} is 1.
8972 You can also specify @option{-flto=jobserver} to use GNU make's
8973 job server mode to determine the number of parallel jobs. This
8974 is useful when the Makefile calling GCC is already executing in parallel.
8975 You must prepend a @samp{+} to the command recipe in the parent Makefile
8976 for this to work.  This option likely only works if @env{MAKE} is
8977 GNU make.
8979 @item -flto-partition=@var{alg}
8980 @opindex flto-partition
8981 Specify the partitioning algorithm used by the link-time optimizer.
8982 The value is either @code{1to1} to specify a partitioning mirroring
8983 the original source files or @code{balanced} to specify partitioning
8984 into equally sized chunks (whenever possible) or @code{max} to create
8985 new partition for every symbol where possible.  Specifying @code{none}
8986 as an algorithm disables partitioning and streaming completely. 
8987 The default value is @code{balanced}. While @code{1to1} can be used
8988 as an workaround for various code ordering issues, the @code{max}
8989 partitioning is intended for internal testing only.
8990 The value @code{one} specifies that exactly one partition should be
8991 used while the value @code{none} bypasses partitioning and executes
8992 the link-time optimization step directly from the WPA phase.
8994 @item -flto-compression-level=@var{n}
8995 This option specifies the level of compression used for intermediate
8996 language written to LTO object files, and is only meaningful in
8997 conjunction with LTO mode (@option{-flto}).  Valid
8998 values are 0 (no compression) to 9 (maximum compression).  Values
8999 outside this range are clamped to either 0 or 9.  If the option is not
9000 given, a default balanced compression setting is used.
9002 @item -flto-report
9003 Prints a report with internal details on the workings of the link-time
9004 optimizer.  The contents of this report vary from version to version.
9005 It is meant to be useful to GCC developers when processing object
9006 files in LTO mode (via @option{-flto}).
9008 Disabled by default.
9010 @item -flto-report-wpa
9011 Like @option{-flto-report}, but only print for the WPA phase of Link
9012 Time Optimization.
9014 @item -fuse-linker-plugin
9015 Enables the use of a linker plugin during link-time optimization.  This
9016 option relies on plugin support in the linker, which is available in gold
9017 or in GNU ld 2.21 or newer.
9019 This option enables the extraction of object files with GIMPLE bytecode out
9020 of library archives. This improves the quality of optimization by exposing
9021 more code to the link-time optimizer.  This information specifies what
9022 symbols can be accessed externally (by non-LTO object or during dynamic
9023 linking).  Resulting code quality improvements on binaries (and shared
9024 libraries that use hidden visibility) are similar to @code{-fwhole-program}.
9025 See @option{-flto} for a description of the effect of this flag and how to
9026 use it.
9028 This option is enabled by default when LTO support in GCC is enabled
9029 and GCC was configured for use with
9030 a linker supporting plugins (GNU ld 2.21 or newer or gold).
9032 @item -ffat-lto-objects
9033 @opindex ffat-lto-objects
9034 Fat LTO objects are object files that contain both the intermediate language
9035 and the object code. This makes them usable for both LTO linking and normal
9036 linking. This option is effective only when compiling with @option{-flto}
9037 and is ignored at link time.
9039 @option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
9040 requires the complete toolchain to be aware of LTO. It requires a linker with
9041 linker plugin support for basic functionality.  Additionally,
9042 @command{nm}, @command{ar} and @command{ranlib}
9043 need to support linker plugins to allow a full-featured build environment
9044 (capable of building static libraries etc).  GCC provides the @command{gcc-ar},
9045 @command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options
9046 to these tools. With non fat LTO makefiles need to be modified to use them.
9048 The default is @option{-fno-fat-lto-objects} on targets with linker plugin
9049 support.
9051 @item -fcompare-elim
9052 @opindex fcompare-elim
9053 After register allocation and post-register allocation instruction splitting,
9054 identify arithmetic instructions that compute processor flags similar to a
9055 comparison operation based on that arithmetic.  If possible, eliminate the
9056 explicit comparison operation.
9058 This pass only applies to certain targets that cannot explicitly represent
9059 the comparison operation before register allocation is complete.
9061 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9063 @item -fuse-ld=bfd
9064 @opindex fuse-ld=bfd
9065 Use the @command{bfd} linker instead of the default linker.
9067 @item -fuse-ld=gold
9068 @opindex fuse-ld=gold
9069 Use the @command{gold} linker instead of the default linker.
9071 @item -fcprop-registers
9072 @opindex fcprop-registers
9073 After register allocation and post-register allocation instruction splitting,
9074 perform a copy-propagation pass to try to reduce scheduling dependencies
9075 and occasionally eliminate the copy.
9077 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9079 @item -fprofile-correction
9080 @opindex fprofile-correction
9081 Profiles collected using an instrumented binary for multi-threaded programs may
9082 be inconsistent due to missed counter updates. When this option is specified,
9083 GCC uses heuristics to correct or smooth out such inconsistencies. By
9084 default, GCC emits an error message when an inconsistent profile is detected.
9086 @item -fprofile-dir=@var{path}
9087 @opindex fprofile-dir
9089 Set the directory to search for the profile data files in to @var{path}.
9090 This option affects only the profile data generated by
9091 @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
9092 and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
9093 and its related options.  Both absolute and relative paths can be used.
9094 By default, GCC uses the current directory as @var{path}, thus the
9095 profile data file appears in the same directory as the object file.
9097 @item -fprofile-generate
9098 @itemx -fprofile-generate=@var{path}
9099 @opindex fprofile-generate
9101 Enable options usually used for instrumenting application to produce
9102 profile useful for later recompilation with profile feedback based
9103 optimization.  You must use @option{-fprofile-generate} both when
9104 compiling and when linking your program.
9106 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
9108 If @var{path} is specified, GCC looks at the @var{path} to find
9109 the profile feedback data files. See @option{-fprofile-dir}.
9111 @item -fprofile-use
9112 @itemx -fprofile-use=@var{path}
9113 @opindex fprofile-use
9114 Enable profile feedback directed optimizations, and optimizations
9115 generally profitable only with profile feedback available.
9117 The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
9118 @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}, @code{-ftree-vectorize},
9119 @code{ftree-loop-distribute-patterns}
9121 By default, GCC emits an error message if the feedback profiles do not
9122 match the source code.  This error can be turned into a warning by using
9123 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
9124 code.
9126 If @var{path} is specified, GCC looks at the @var{path} to find
9127 the profile feedback data files. See @option{-fprofile-dir}.
9128 @end table
9130 The following options control compiler behavior regarding floating-point 
9131 arithmetic.  These options trade off between speed and
9132 correctness.  All must be specifically enabled.
9134 @table @gcctabopt
9135 @item -ffloat-store
9136 @opindex ffloat-store
9137 Do not store floating-point variables in registers, and inhibit other
9138 options that might change whether a floating-point value is taken from a
9139 register or memory.
9141 @cindex floating-point precision
9142 This option prevents undesirable excess precision on machines such as
9143 the 68000 where the floating registers (of the 68881) keep more
9144 precision than a @code{double} is supposed to have.  Similarly for the
9145 x86 architecture.  For most programs, the excess precision does only
9146 good, but a few programs rely on the precise definition of IEEE floating
9147 point.  Use @option{-ffloat-store} for such programs, after modifying
9148 them to store all pertinent intermediate computations into variables.
9150 @item -fexcess-precision=@var{style}
9151 @opindex fexcess-precision
9152 This option allows further control over excess precision on machines
9153 where floating-point registers have more precision than the IEEE
9154 @code{float} and @code{double} types and the processor does not
9155 support operations rounding to those types.  By default,
9156 @option{-fexcess-precision=fast} is in effect; this means that
9157 operations are carried out in the precision of the registers and that
9158 it is unpredictable when rounding to the types specified in the source
9159 code takes place.  When compiling C, if
9160 @option{-fexcess-precision=standard} is specified then excess
9161 precision follows the rules specified in ISO C99; in particular,
9162 both casts and assignments cause values to be rounded to their
9163 semantic types (whereas @option{-ffloat-store} only affects
9164 assignments).  This option is enabled by default for C if a strict
9165 conformance option such as @option{-std=c99} is used.
9167 @opindex mfpmath
9168 @option{-fexcess-precision=standard} is not implemented for languages
9169 other than C, and has no effect if
9170 @option{-funsafe-math-optimizations} or @option{-ffast-math} is
9171 specified.  On the x86, it also has no effect if @option{-mfpmath=sse}
9172 or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
9173 semantics apply without excess precision, and in the latter, rounding
9174 is unpredictable.
9176 @item -ffast-math
9177 @opindex ffast-math
9178 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
9179 @option{-ffinite-math-only}, @option{-fno-rounding-math},
9180 @option{-fno-signaling-nans} and @option{-fcx-limited-range}.
9182 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
9184 This option is not turned on by any @option{-O} option besides
9185 @option{-Ofast} since it can result in incorrect output for programs
9186 that depend on an exact implementation of IEEE or ISO rules/specifications
9187 for math functions. It may, however, yield faster code for programs
9188 that do not require the guarantees of these specifications.
9190 @item -fno-math-errno
9191 @opindex fno-math-errno
9192 Do not set @code{errno} after calling math functions that are executed
9193 with a single instruction, e.g., @code{sqrt}.  A program that relies on
9194 IEEE exceptions for math error handling may want to use this flag
9195 for speed while maintaining IEEE arithmetic compatibility.
9197 This option is not turned on by any @option{-O} option since
9198 it can result in incorrect output for programs that depend on
9199 an exact implementation of IEEE or ISO rules/specifications for
9200 math functions. It may, however, yield faster code for programs
9201 that do not require the guarantees of these specifications.
9203 The default is @option{-fmath-errno}.
9205 On Darwin systems, the math library never sets @code{errno}.  There is
9206 therefore no reason for the compiler to consider the possibility that
9207 it might, and @option{-fno-math-errno} is the default.
9209 @item -funsafe-math-optimizations
9210 @opindex funsafe-math-optimizations
9212 Allow optimizations for floating-point arithmetic that (a) assume
9213 that arguments and results are valid and (b) may violate IEEE or
9214 ANSI standards.  When used at link-time, it may include libraries
9215 or startup files that change the default FPU control word or other
9216 similar optimizations.
9218 This option is not turned on by any @option{-O} option since
9219 it can result in incorrect output for programs that depend on
9220 an exact implementation of IEEE or ISO rules/specifications for
9221 math functions. It may, however, yield faster code for programs
9222 that do not require the guarantees of these specifications.
9223 Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
9224 @option{-fassociative-math} and @option{-freciprocal-math}.
9226 The default is @option{-fno-unsafe-math-optimizations}.
9228 @item -fassociative-math
9229 @opindex fassociative-math
9231 Allow re-association of operands in series of floating-point operations.
9232 This violates the ISO C and C++ language standard by possibly changing
9233 computation result.  NOTE: re-ordering may change the sign of zero as
9234 well as ignore NaNs and inhibit or create underflow or overflow (and
9235 thus cannot be used on code that relies on rounding behavior like
9236 @code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
9237 and thus may not be used when ordered comparisons are required.
9238 This option requires that both @option{-fno-signed-zeros} and
9239 @option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
9240 much sense with @option{-frounding-math}. For Fortran the option
9241 is automatically enabled when both @option{-fno-signed-zeros} and
9242 @option{-fno-trapping-math} are in effect.
9244 The default is @option{-fno-associative-math}.
9246 @item -freciprocal-math
9247 @opindex freciprocal-math
9249 Allow the reciprocal of a value to be used instead of dividing by
9250 the value if this enables optimizations.  For example @code{x / y}
9251 can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
9252 is subject to common subexpression elimination.  Note that this loses
9253 precision and increases the number of flops operating on the value.
9255 The default is @option{-fno-reciprocal-math}.
9257 @item -ffinite-math-only
9258 @opindex ffinite-math-only
9259 Allow optimizations for floating-point arithmetic that assume
9260 that arguments and results are not NaNs or +-Infs.
9262 This option is not turned on by any @option{-O} option since
9263 it can result in incorrect output for programs that depend on
9264 an exact implementation of IEEE or ISO rules/specifications for
9265 math functions. It may, however, yield faster code for programs
9266 that do not require the guarantees of these specifications.
9268 The default is @option{-fno-finite-math-only}.
9270 @item -fno-signed-zeros
9271 @opindex fno-signed-zeros
9272 Allow optimizations for floating-point arithmetic that ignore the
9273 signedness of zero.  IEEE arithmetic specifies the behavior of
9274 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
9275 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
9276 This option implies that the sign of a zero result isn't significant.
9278 The default is @option{-fsigned-zeros}.
9280 @item -fno-trapping-math
9281 @opindex fno-trapping-math
9282 Compile code assuming that floating-point operations cannot generate
9283 user-visible traps.  These traps include division by zero, overflow,
9284 underflow, inexact result and invalid operation.  This option requires
9285 that @option{-fno-signaling-nans} be in effect.  Setting this option may
9286 allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
9288 This option should never be turned on by any @option{-O} option since
9289 it can result in incorrect output for programs that depend on
9290 an exact implementation of IEEE or ISO rules/specifications for
9291 math functions.
9293 The default is @option{-ftrapping-math}.
9295 @item -frounding-math
9296 @opindex frounding-math
9297 Disable transformations and optimizations that assume default floating-point
9298 rounding behavior.  This is round-to-zero for all floating point
9299 to integer conversions, and round-to-nearest for all other arithmetic
9300 truncations.  This option should be specified for programs that change
9301 the FP rounding mode dynamically, or that may be executed with a
9302 non-default rounding mode.  This option disables constant folding of
9303 floating-point expressions at compile time (which may be affected by
9304 rounding mode) and arithmetic transformations that are unsafe in the
9305 presence of sign-dependent rounding modes.
9307 The default is @option{-fno-rounding-math}.
9309 This option is experimental and does not currently guarantee to
9310 disable all GCC optimizations that are affected by rounding mode.
9311 Future versions of GCC may provide finer control of this setting
9312 using C99's @code{FENV_ACCESS} pragma.  This command-line option
9313 will be used to specify the default state for @code{FENV_ACCESS}.
9315 @item -fsignaling-nans
9316 @opindex fsignaling-nans
9317 Compile code assuming that IEEE signaling NaNs may generate user-visible
9318 traps during floating-point operations.  Setting this option disables
9319 optimizations that may change the number of exceptions visible with
9320 signaling NaNs.  This option implies @option{-ftrapping-math}.
9322 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
9323 be defined.
9325 The default is @option{-fno-signaling-nans}.
9327 This option is experimental and does not currently guarantee to
9328 disable all GCC optimizations that affect signaling NaN behavior.
9330 @item -fsingle-precision-constant
9331 @opindex fsingle-precision-constant
9332 Treat floating-point constants as single precision instead of
9333 implicitly converting them to double-precision constants.
9335 @item -fcx-limited-range
9336 @opindex fcx-limited-range
9337 When enabled, this option states that a range reduction step is not
9338 needed when performing complex division.  Also, there is no checking
9339 whether the result of a complex multiplication or division is @code{NaN
9340 + I*NaN}, with an attempt to rescue the situation in that case.  The
9341 default is @option{-fno-cx-limited-range}, but is enabled by
9342 @option{-ffast-math}.
9344 This option controls the default setting of the ISO C99
9345 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
9346 all languages.
9348 @item -fcx-fortran-rules
9349 @opindex fcx-fortran-rules
9350 Complex multiplication and division follow Fortran rules.  Range
9351 reduction is done as part of complex division, but there is no checking
9352 whether the result of a complex multiplication or division is @code{NaN
9353 + I*NaN}, with an attempt to rescue the situation in that case.
9355 The default is @option{-fno-cx-fortran-rules}.
9357 @end table
9359 The following options control optimizations that may improve
9360 performance, but are not enabled by any @option{-O} options.  This
9361 section includes experimental options that may produce broken code.
9363 @table @gcctabopt
9364 @item -fbranch-probabilities
9365 @opindex fbranch-probabilities
9366 After running a program compiled with @option{-fprofile-arcs}
9367 (@pxref{Debugging Options,, Options for Debugging Your Program or
9368 @command{gcc}}), you can compile it a second time using
9369 @option{-fbranch-probabilities}, to improve optimizations based on
9370 the number of times each branch was taken.  When a program
9371 compiled with @option{-fprofile-arcs} exits, it saves arc execution
9372 counts to a file called @file{@var{sourcename}.gcda} for each source
9373 file.  The information in this data file is very dependent on the
9374 structure of the generated code, so you must use the same source code
9375 and the same optimization options for both compilations.
9377 With @option{-fbranch-probabilities}, GCC puts a
9378 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
9379 These can be used to improve optimization.  Currently, they are only
9380 used in one place: in @file{reorg.c}, instead of guessing which path a
9381 branch is most likely to take, the @samp{REG_BR_PROB} values are used to
9382 exactly determine which path is taken more often.
9384 @item -fprofile-values
9385 @opindex fprofile-values
9386 If combined with @option{-fprofile-arcs}, it adds code so that some
9387 data about values of expressions in the program is gathered.
9389 With @option{-fbranch-probabilities}, it reads back the data gathered
9390 from profiling values of expressions for usage in optimizations.
9392 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
9394 @item -fprofile-reorder-functions
9395 @opindex fprofile-reorder-functions
9396 Function reordering based on profile instrumentation collects
9397 first time of execution of a function and orders these functions
9398 in ascending order.
9400 Enabled with @option{-fprofile-use}.
9402 @item -fvpt
9403 @opindex fvpt
9404 If combined with @option{-fprofile-arcs}, this option instructs the compiler
9405 to add code to gather information about values of expressions.
9407 With @option{-fbranch-probabilities}, it reads back the data gathered
9408 and actually performs the optimizations based on them.
9409 Currently the optimizations include specialization of division operations
9410 using the knowledge about the value of the denominator.
9412 @item -frename-registers
9413 @opindex frename-registers
9414 Attempt to avoid false dependencies in scheduled code by making use
9415 of registers left over after register allocation.  This optimization
9416 most benefits processors with lots of registers.  Depending on the
9417 debug information format adopted by the target, however, it can
9418 make debugging impossible, since variables no longer stay in
9419 a ``home register''.
9421 Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}.
9423 @item -ftracer
9424 @opindex ftracer
9425 Perform tail duplication to enlarge superblock size.  This transformation
9426 simplifies the control flow of the function allowing other optimizations to do
9427 a better job.
9429 Enabled with @option{-fprofile-use}.
9431 @item -funroll-loops
9432 @opindex funroll-loops
9433 Unroll loops whose number of iterations can be determined at compile time or
9434 upon entry to the loop.  @option{-funroll-loops} implies
9435 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
9436 It also turns on complete loop peeling (i.e.@: complete removal of loops with
9437 a small constant number of iterations).  This option makes code larger, and may
9438 or may not make it run faster.
9440 Enabled with @option{-fprofile-use}.
9442 @item -funroll-all-loops
9443 @opindex funroll-all-loops
9444 Unroll all loops, even if their number of iterations is uncertain when
9445 the loop is entered.  This usually makes programs run more slowly.
9446 @option{-funroll-all-loops} implies the same options as
9447 @option{-funroll-loops}.
9449 @item -fpeel-loops
9450 @opindex fpeel-loops
9451 Peels loops for which there is enough information that they do not
9452 roll much (from profile feedback).  It also turns on complete loop peeling
9453 (i.e.@: complete removal of loops with small constant number of iterations).
9455 Enabled with @option{-fprofile-use}.
9457 @item -fmove-loop-invariants
9458 @opindex fmove-loop-invariants
9459 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
9460 at level @option{-O1}
9462 @item -funswitch-loops
9463 @opindex funswitch-loops
9464 Move branches with loop invariant conditions out of the loop, with duplicates
9465 of the loop on both branches (modified according to result of the condition).
9467 @item -ffunction-sections
9468 @itemx -fdata-sections
9469 @opindex ffunction-sections
9470 @opindex fdata-sections
9471 Place each function or data item into its own section in the output
9472 file if the target supports arbitrary sections.  The name of the
9473 function or the name of the data item determines the section's name
9474 in the output file.
9476 Use these options on systems where the linker can perform optimizations
9477 to improve locality of reference in the instruction space.  Most systems
9478 using the ELF object format and SPARC processors running Solaris 2 have
9479 linkers with such optimizations.  AIX may have these optimizations in
9480 the future.
9482 Only use these options when there are significant benefits from doing
9483 so.  When you specify these options, the assembler and linker
9484 create larger object and executable files and are also slower.
9485 You cannot use @code{gprof} on all systems if you
9486 specify this option, and you may have problems with debugging if
9487 you specify both this option and @option{-g}.
9489 @item -fbranch-target-load-optimize
9490 @opindex fbranch-target-load-optimize
9491 Perform branch target register load optimization before prologue / epilogue
9492 threading.
9493 The use of target registers can typically be exposed only during reload,
9494 thus hoisting loads out of loops and doing inter-block scheduling needs
9495 a separate optimization pass.
9497 @item -fbranch-target-load-optimize2
9498 @opindex fbranch-target-load-optimize2
9499 Perform branch target register load optimization after prologue / epilogue
9500 threading.
9502 @item -fbtr-bb-exclusive
9503 @opindex fbtr-bb-exclusive
9504 When performing branch target register load optimization, don't reuse
9505 branch target registers within any basic block.
9507 @item -fstack-protector
9508 @opindex fstack-protector
9509 Emit extra code to check for buffer overflows, such as stack smashing
9510 attacks.  This is done by adding a guard variable to functions with
9511 vulnerable objects.  This includes functions that call @code{alloca}, and
9512 functions with buffers larger than 8 bytes.  The guards are initialized
9513 when a function is entered and then checked when the function exits.
9514 If a guard check fails, an error message is printed and the program exits.
9516 @item -fstack-protector-all
9517 @opindex fstack-protector-all
9518 Like @option{-fstack-protector} except that all functions are protected.
9520 @item -fstack-protector-strong
9521 @opindex fstack-protector-strong
9522 Like @option{-fstack-protector} but includes additional functions to
9523 be protected --- those that have local array definitions, or have
9524 references to local frame addresses.
9526 @item -fsection-anchors
9527 @opindex fsection-anchors
9528 Try to reduce the number of symbolic address calculations by using
9529 shared ``anchor'' symbols to address nearby objects.  This transformation
9530 can help to reduce the number of GOT entries and GOT accesses on some
9531 targets.
9533 For example, the implementation of the following function @code{foo}:
9535 @smallexample
9536 static int a, b, c;
9537 int foo (void) @{ return a + b + c; @}
9538 @end smallexample
9540 @noindent
9541 usually calculates the addresses of all three variables, but if you
9542 compile it with @option{-fsection-anchors}, it accesses the variables
9543 from a common anchor point instead.  The effect is similar to the
9544 following pseudocode (which isn't valid C):
9546 @smallexample
9547 int foo (void)
9549   register int *xr = &x;
9550   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
9552 @end smallexample
9554 Not all targets support this option.
9556 @item --param @var{name}=@var{value}
9557 @opindex param
9558 In some places, GCC uses various constants to control the amount of
9559 optimization that is done.  For example, GCC does not inline functions
9560 that contain more than a certain number of instructions.  You can
9561 control some of these constants on the command line using the
9562 @option{--param} option.
9564 The names of specific parameters, and the meaning of the values, are
9565 tied to the internals of the compiler, and are subject to change
9566 without notice in future releases.
9568 In each case, the @var{value} is an integer.  The allowable choices for
9569 @var{name} are:
9571 @table @gcctabopt
9572 @item predictable-branch-outcome
9573 When branch is predicted to be taken with probability lower than this threshold
9574 (in percent), then it is considered well predictable. The default is 10.
9576 @item max-crossjump-edges
9577 The maximum number of incoming edges to consider for cross-jumping.
9578 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
9579 the number of edges incoming to each block.  Increasing values mean
9580 more aggressive optimization, making the compilation time increase with
9581 probably small improvement in executable size.
9583 @item min-crossjump-insns
9584 The minimum number of instructions that must be matched at the end
9585 of two blocks before cross-jumping is performed on them.  This
9586 value is ignored in the case where all instructions in the block being
9587 cross-jumped from are matched.  The default value is 5.
9589 @item max-grow-copy-bb-insns
9590 The maximum code size expansion factor when copying basic blocks
9591 instead of jumping.  The expansion is relative to a jump instruction.
9592 The default value is 8.
9594 @item max-goto-duplication-insns
9595 The maximum number of instructions to duplicate to a block that jumps
9596 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
9597 passes, GCC factors computed gotos early in the compilation process,
9598 and unfactors them as late as possible.  Only computed jumps at the
9599 end of a basic blocks with no more than max-goto-duplication-insns are
9600 unfactored.  The default value is 8.
9602 @item max-delay-slot-insn-search
9603 The maximum number of instructions to consider when looking for an
9604 instruction to fill a delay slot.  If more than this arbitrary number of
9605 instructions are searched, the time savings from filling the delay slot
9606 are minimal, so stop searching.  Increasing values mean more
9607 aggressive optimization, making the compilation time increase with probably
9608 small improvement in execution time.
9610 @item max-delay-slot-live-search
9611 When trying to fill delay slots, the maximum number of instructions to
9612 consider when searching for a block with valid live register
9613 information.  Increasing this arbitrarily chosen value means more
9614 aggressive optimization, increasing the compilation time.  This parameter
9615 should be removed when the delay slot code is rewritten to maintain the
9616 control-flow graph.
9618 @item max-gcse-memory
9619 The approximate maximum amount of memory that can be allocated in
9620 order to perform the global common subexpression elimination
9621 optimization.  If more memory than specified is required, the
9622 optimization is not done.
9624 @item max-gcse-insertion-ratio
9625 If the ratio of expression insertions to deletions is larger than this value
9626 for any expression, then RTL PRE inserts or removes the expression and thus
9627 leaves partially redundant computations in the instruction stream.  The default value is 20.
9629 @item max-pending-list-length
9630 The maximum number of pending dependencies scheduling allows
9631 before flushing the current state and starting over.  Large functions
9632 with few branches or calls can create excessively large lists which
9633 needlessly consume memory and resources.
9635 @item max-modulo-backtrack-attempts
9636 The maximum number of backtrack attempts the scheduler should make
9637 when modulo scheduling a loop.  Larger values can exponentially increase
9638 compilation time.
9640 @item max-inline-insns-single
9641 Several parameters control the tree inliner used in GCC@.
9642 This number sets the maximum number of instructions (counted in GCC's
9643 internal representation) in a single function that the tree inliner
9644 considers for inlining.  This only affects functions declared
9645 inline and methods implemented in a class declaration (C++).
9646 The default value is 400.
9648 @item max-inline-insns-auto
9649 When you use @option{-finline-functions} (included in @option{-O3}),
9650 a lot of functions that would otherwise not be considered for inlining
9651 by the compiler are investigated.  To those functions, a different
9652 (more restrictive) limit compared to functions declared inline can
9653 be applied.
9654 The default value is 40.
9656 @item inline-min-speedup
9657 When estimated performance improvement of caller + callee runtime exceeds this
9658 threshold (in precent), the function can be inlined regardless the limit on
9659 @option{--param max-inline-insns-single} and @option{--param
9660 max-inline-insns-auto}.
9662 @item large-function-insns
9663 The limit specifying really large functions.  For functions larger than this
9664 limit after inlining, inlining is constrained by
9665 @option{--param large-function-growth}.  This parameter is useful primarily
9666 to avoid extreme compilation time caused by non-linear algorithms used by the
9667 back end.
9668 The default value is 2700.
9670 @item large-function-growth
9671 Specifies maximal growth of large function caused by inlining in percents.
9672 The default value is 100 which limits large function growth to 2.0 times
9673 the original size.
9675 @item large-unit-insns
9676 The limit specifying large translation unit.  Growth caused by inlining of
9677 units larger than this limit is limited by @option{--param inline-unit-growth}.
9678 For small units this might be too tight.
9679 For example, consider a unit consisting of function A
9680 that is inline and B that just calls A three times.  If B is small relative to
9681 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
9682 large units consisting of small inlineable functions, however, the overall unit
9683 growth limit is needed to avoid exponential explosion of code size.  Thus for
9684 smaller units, the size is increased to @option{--param large-unit-insns}
9685 before applying @option{--param inline-unit-growth}.  The default is 10000.
9687 @item inline-unit-growth
9688 Specifies maximal overall growth of the compilation unit caused by inlining.
9689 The default value is 30 which limits unit growth to 1.3 times the original
9690 size. Cold functions (either marked cold via an attribute or by profile
9691 feedback) are not accounted into the unit size.
9693 @item ipcp-unit-growth
9694 Specifies maximal overall growth of the compilation unit caused by
9695 interprocedural constant propagation.  The default value is 10 which limits
9696 unit growth to 1.1 times the original size.
9698 @item large-stack-frame
9699 The limit specifying large stack frames.  While inlining the algorithm is trying
9700 to not grow past this limit too much.  The default value is 256 bytes.
9702 @item large-stack-frame-growth
9703 Specifies maximal growth of large stack frames caused by inlining in percents.
9704 The default value is 1000 which limits large stack frame growth to 11 times
9705 the original size.
9707 @item max-inline-insns-recursive
9708 @itemx max-inline-insns-recursive-auto
9709 Specifies the maximum number of instructions an out-of-line copy of a
9710 self-recursive inline
9711 function can grow into by performing recursive inlining.
9713 For functions declared inline, @option{--param max-inline-insns-recursive} is
9714 taken into account.  For functions not declared inline, recursive inlining
9715 happens only when @option{-finline-functions} (included in @option{-O3}) is
9716 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
9717 default value is 450.
9719 @item max-inline-recursive-depth
9720 @itemx max-inline-recursive-depth-auto
9721 Specifies the maximum recursion depth used for recursive inlining.
9723 For functions declared inline, @option{--param max-inline-recursive-depth} is
9724 taken into account.  For functions not declared inline, recursive inlining
9725 happens only when @option{-finline-functions} (included in @option{-O3}) is
9726 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
9727 default value is 8.
9729 @item min-inline-recursive-probability
9730 Recursive inlining is profitable only for function having deep recursion
9731 in average and can hurt for function having little recursion depth by
9732 increasing the prologue size or complexity of function body to other
9733 optimizers.
9735 When profile feedback is available (see @option{-fprofile-generate}) the actual
9736 recursion depth can be guessed from probability that function recurses via a
9737 given call expression.  This parameter limits inlining only to call expressions
9738 whose probability exceeds the given threshold (in percents).
9739 The default value is 10.
9741 @item early-inlining-insns
9742 Specify growth that the early inliner can make.  In effect it increases
9743 the amount of inlining for code having a large abstraction penalty.
9744 The default value is 10.
9746 @item max-early-inliner-iterations
9747 @itemx max-early-inliner-iterations
9748 Limit of iterations of the early inliner.  This basically bounds
9749 the number of nested indirect calls the early inliner can resolve.
9750 Deeper chains are still handled by late inlining.
9752 @item comdat-sharing-probability
9753 @itemx comdat-sharing-probability
9754 Probability (in percent) that C++ inline function with comdat visibility
9755 are shared across multiple compilation units.  The default value is 20.
9757 @item profile-func-internal-id
9758 @itemx profile-func-internal-id
9759 A parameter to control whether to use function internal id in profile
9760 database lookup. If the value is 0, the compiler will use id that
9761 is based on function assembler name and filename, which makes old profile
9762 data more tolerant to source changes such as function reordering etc.
9763 The default value is 0.
9765 @item min-vect-loop-bound
9766 The minimum number of iterations under which loops are not vectorized
9767 when @option{-ftree-vectorize} is used.  The number of iterations after
9768 vectorization needs to be greater than the value specified by this option
9769 to allow vectorization.  The default value is 0.
9771 @item gcse-cost-distance-ratio
9772 Scaling factor in calculation of maximum distance an expression
9773 can be moved by GCSE optimizations.  This is currently supported only in the
9774 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
9775 is with simple expressions, i.e., the expressions that have cost
9776 less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
9777 hoisting of simple expressions.  The default value is 10.
9779 @item gcse-unrestricted-cost
9780 Cost, roughly measured as the cost of a single typical machine
9781 instruction, at which GCSE optimizations do not constrain
9782 the distance an expression can travel.  This is currently
9783 supported only in the code hoisting pass.  The lesser the cost,
9784 the more aggressive code hoisting is.  Specifying 0 
9785 allows all expressions to travel unrestricted distances.
9786 The default value is 3.
9788 @item max-hoist-depth
9789 The depth of search in the dominator tree for expressions to hoist.
9790 This is used to avoid quadratic behavior in hoisting algorithm.
9791 The value of 0 does not limit on the search, but may slow down compilation
9792 of huge functions.  The default value is 30.
9794 @item max-tail-merge-comparisons
9795 The maximum amount of similar bbs to compare a bb with.  This is used to
9796 avoid quadratic behavior in tree tail merging.  The default value is 10.
9798 @item max-tail-merge-iterations
9799 The maximum amount of iterations of the pass over the function.  This is used to
9800 limit compilation time in tree tail merging.  The default value is 2.
9802 @item max-unrolled-insns
9803 The maximum number of instructions that a loop may have to be unrolled.
9804 If a loop is unrolled, this parameter also determines how many times
9805 the loop code is unrolled.
9807 @item max-average-unrolled-insns
9808 The maximum number of instructions biased by probabilities of their execution
9809 that a loop may have to be unrolled.  If a loop is unrolled,
9810 this parameter also determines how many times the loop code is unrolled.
9812 @item max-unroll-times
9813 The maximum number of unrollings of a single loop.
9815 @item max-peeled-insns
9816 The maximum number of instructions that a loop may have to be peeled.
9817 If a loop is peeled, this parameter also determines how many times
9818 the loop code is peeled.
9820 @item max-peel-times
9821 The maximum number of peelings of a single loop.
9823 @item max-peel-branches
9824 The maximum number of branches on the hot path through the peeled sequence.
9826 @item max-completely-peeled-insns
9827 The maximum number of insns of a completely peeled loop.
9829 @item max-completely-peel-times
9830 The maximum number of iterations of a loop to be suitable for complete peeling.
9832 @item max-completely-peel-loop-nest-depth
9833 The maximum depth of a loop nest suitable for complete peeling.
9835 @item max-unswitch-insns
9836 The maximum number of insns of an unswitched loop.
9838 @item max-unswitch-level
9839 The maximum number of branches unswitched in a single loop.
9841 @item lim-expensive
9842 The minimum cost of an expensive expression in the loop invariant motion.
9844 @item iv-consider-all-candidates-bound
9845 Bound on number of candidates for induction variables, below which
9846 all candidates are considered for each use in induction variable
9847 optimizations.  If there are more candidates than this,
9848 only the most relevant ones are considered to avoid quadratic time complexity.
9850 @item iv-max-considered-uses
9851 The induction variable optimizations give up on loops that contain more
9852 induction variable uses.
9854 @item iv-always-prune-cand-set-bound
9855 If the number of candidates in the set is smaller than this value,
9856 always try to remove unnecessary ivs from the set
9857 when adding a new one.
9859 @item scev-max-expr-size
9860 Bound on size of expressions used in the scalar evolutions analyzer.
9861 Large expressions slow the analyzer.
9863 @item scev-max-expr-complexity
9864 Bound on the complexity of the expressions in the scalar evolutions analyzer.
9865 Complex expressions slow the analyzer.
9867 @item omega-max-vars
9868 The maximum number of variables in an Omega constraint system.
9869 The default value is 128.
9871 @item omega-max-geqs
9872 The maximum number of inequalities in an Omega constraint system.
9873 The default value is 256.
9875 @item omega-max-eqs
9876 The maximum number of equalities in an Omega constraint system.
9877 The default value is 128.
9879 @item omega-max-wild-cards
9880 The maximum number of wildcard variables that the Omega solver is
9881 able to insert.  The default value is 18.
9883 @item omega-hash-table-size
9884 The size of the hash table in the Omega solver.  The default value is
9885 550.
9887 @item omega-max-keys
9888 The maximal number of keys used by the Omega solver.  The default
9889 value is 500.
9891 @item omega-eliminate-redundant-constraints
9892 When set to 1, use expensive methods to eliminate all redundant
9893 constraints.  The default value is 0.
9895 @item vect-max-version-for-alignment-checks
9896 The maximum number of run-time checks that can be performed when
9897 doing loop versioning for alignment in the vectorizer. 
9899 @item vect-max-version-for-alias-checks
9900 The maximum number of run-time checks that can be performed when
9901 doing loop versioning for alias in the vectorizer. 
9903 @item vect-max-peeling-for-alignment
9904 The maximum number of loop peels to enhance access alignment
9905 for vectorizer. Value -1 means 'no limit'.
9907 @item max-iterations-to-track
9908 The maximum number of iterations of a loop the brute-force algorithm
9909 for analysis of the number of iterations of the loop tries to evaluate.
9911 @item hot-bb-count-ws-permille
9912 A basic block profile count is considered hot if it contributes to 
9913 the given permillage (i.e. 0...1000) of the entire profiled execution.
9915 @item hot-bb-frequency-fraction
9916 Select fraction of the entry block frequency of executions of basic block in
9917 function given basic block needs to have to be considered hot.
9919 @item max-predicted-iterations
9920 The maximum number of loop iterations we predict statically.  This is useful
9921 in cases where a function contains a single loop with known bound and
9922 another loop with unknown bound.
9923 The known number of iterations is predicted correctly, while
9924 the unknown number of iterations average to roughly 10.  This means that the
9925 loop without bounds appears artificially cold relative to the other one.
9927 @item builtin-expect-probability
9928 Control the probability of the expression having the specified value. This
9929 parameter takes a percentage (i.e. 0 ... 100) as input.
9930 The default probability of 90 is obtained empirically.
9932 @item align-threshold
9934 Select fraction of the maximal frequency of executions of a basic block in
9935 a function to align the basic block.
9937 @item align-loop-iterations
9939 A loop expected to iterate at least the selected number of iterations is
9940 aligned.
9942 @item tracer-dynamic-coverage
9943 @itemx tracer-dynamic-coverage-feedback
9945 This value is used to limit superblock formation once the given percentage of
9946 executed instructions is covered.  This limits unnecessary code size
9947 expansion.
9949 The @option{tracer-dynamic-coverage-feedback} is used only when profile
9950 feedback is available.  The real profiles (as opposed to statically estimated
9951 ones) are much less balanced allowing the threshold to be larger value.
9953 @item tracer-max-code-growth
9954 Stop tail duplication once code growth has reached given percentage.  This is
9955 a rather artificial limit, as most of the duplicates are eliminated later in
9956 cross jumping, so it may be set to much higher values than is the desired code
9957 growth.
9959 @item tracer-min-branch-ratio
9961 Stop reverse growth when the reverse probability of best edge is less than this
9962 threshold (in percent).
9964 @item tracer-min-branch-ratio
9965 @itemx tracer-min-branch-ratio-feedback
9967 Stop forward growth if the best edge has probability lower than this
9968 threshold.
9970 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
9971 compilation for profile feedback and one for compilation without.  The value
9972 for compilation with profile feedback needs to be more conservative (higher) in
9973 order to make tracer effective.
9975 @item max-cse-path-length
9977 The maximum number of basic blocks on path that CSE considers.
9978 The default is 10.
9980 @item max-cse-insns
9981 The maximum number of instructions CSE processes before flushing.
9982 The default is 1000.
9984 @item ggc-min-expand
9986 GCC uses a garbage collector to manage its own memory allocation.  This
9987 parameter specifies the minimum percentage by which the garbage
9988 collector's heap should be allowed to expand between collections.
9989 Tuning this may improve compilation speed; it has no effect on code
9990 generation.
9992 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
9993 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
9994 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
9995 GCC is not able to calculate RAM on a particular platform, the lower
9996 bound of 30% is used.  Setting this parameter and
9997 @option{ggc-min-heapsize} to zero causes a full collection to occur at
9998 every opportunity.  This is extremely slow, but can be useful for
9999 debugging.
10001 @item ggc-min-heapsize
10003 Minimum size of the garbage collector's heap before it begins bothering
10004 to collect garbage.  The first collection occurs after the heap expands
10005 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
10006 tuning this may improve compilation speed, and has no effect on code
10007 generation.
10009 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
10010 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
10011 with a lower bound of 4096 (four megabytes) and an upper bound of
10012 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
10013 particular platform, the lower bound is used.  Setting this parameter
10014 very large effectively disables garbage collection.  Setting this
10015 parameter and @option{ggc-min-expand} to zero causes a full collection
10016 to occur at every opportunity.
10018 @item max-reload-search-insns
10019 The maximum number of instruction reload should look backward for equivalent
10020 register.  Increasing values mean more aggressive optimization, making the
10021 compilation time increase with probably slightly better performance.
10022 The default value is 100.
10024 @item max-cselib-memory-locations
10025 The maximum number of memory locations cselib should take into account.
10026 Increasing values mean more aggressive optimization, making the compilation time
10027 increase with probably slightly better performance.  The default value is 500.
10029 @item reorder-blocks-duplicate
10030 @itemx reorder-blocks-duplicate-feedback
10032 Used by the basic block reordering pass to decide whether to use unconditional
10033 branch or duplicate the code on its destination.  Code is duplicated when its
10034 estimated size is smaller than this value multiplied by the estimated size of
10035 unconditional jump in the hot spots of the program.
10037 The @option{reorder-block-duplicate-feedback} is used only when profile
10038 feedback is available.  It may be set to higher values than
10039 @option{reorder-block-duplicate} since information about the hot spots is more
10040 accurate.
10042 @item max-sched-ready-insns
10043 The maximum number of instructions ready to be issued the scheduler should
10044 consider at any given time during the first scheduling pass.  Increasing
10045 values mean more thorough searches, making the compilation time increase
10046 with probably little benefit.  The default value is 100.
10048 @item max-sched-region-blocks
10049 The maximum number of blocks in a region to be considered for
10050 interblock scheduling.  The default value is 10.
10052 @item max-pipeline-region-blocks
10053 The maximum number of blocks in a region to be considered for
10054 pipelining in the selective scheduler.  The default value is 15.
10056 @item max-sched-region-insns
10057 The maximum number of insns in a region to be considered for
10058 interblock scheduling.  The default value is 100.
10060 @item max-pipeline-region-insns
10061 The maximum number of insns in a region to be considered for
10062 pipelining in the selective scheduler.  The default value is 200.
10064 @item min-spec-prob
10065 The minimum probability (in percents) of reaching a source block
10066 for interblock speculative scheduling.  The default value is 40.
10068 @item max-sched-extend-regions-iters
10069 The maximum number of iterations through CFG to extend regions.
10070 A value of 0 (the default) disables region extensions.
10072 @item max-sched-insn-conflict-delay
10073 The maximum conflict delay for an insn to be considered for speculative motion.
10074 The default value is 3.
10076 @item sched-spec-prob-cutoff
10077 The minimal probability of speculation success (in percents), so that
10078 speculative insns are scheduled.
10079 The default value is 40.
10081 @item sched-spec-state-edge-prob-cutoff
10082 The minimum probability an edge must have for the scheduler to save its
10083 state across it.
10084 The default value is 10.
10086 @item sched-mem-true-dep-cost
10087 Minimal distance (in CPU cycles) between store and load targeting same
10088 memory locations.  The default value is 1.
10090 @item selsched-max-lookahead
10091 The maximum size of the lookahead window of selective scheduling.  It is a
10092 depth of search for available instructions.
10093 The default value is 50.
10095 @item selsched-max-sched-times
10096 The maximum number of times that an instruction is scheduled during
10097 selective scheduling.  This is the limit on the number of iterations
10098 through which the instruction may be pipelined.  The default value is 2.
10100 @item selsched-max-insns-to-rename
10101 The maximum number of best instructions in the ready list that are considered
10102 for renaming in the selective scheduler.  The default value is 2.
10104 @item sms-min-sc
10105 The minimum value of stage count that swing modulo scheduler
10106 generates.  The default value is 2.
10108 @item max-last-value-rtl
10109 The maximum size measured as number of RTLs that can be recorded in an expression
10110 in combiner for a pseudo register as last known value of that register.  The default
10111 is 10000.
10113 @item max-combine-insns
10114 The maximum number of instructions the RTL combiner tries to combine.
10115 The default value is 2 at @option{-Og} and 4 otherwise.
10117 @item integer-share-limit
10118 Small integer constants can use a shared data structure, reducing the
10119 compiler's memory usage and increasing its speed.  This sets the maximum
10120 value of a shared integer constant.  The default value is 256.
10122 @item ssp-buffer-size
10123 The minimum size of buffers (i.e.@: arrays) that receive stack smashing
10124 protection when @option{-fstack-protection} is used.
10126 @item min-size-for-stack-sharing
10127 The minimum size of variables taking part in stack slot sharing when not
10128 optimizing. The default value is 32.
10130 @item max-jump-thread-duplication-stmts
10131 Maximum number of statements allowed in a block that needs to be
10132 duplicated when threading jumps.
10134 @item max-fields-for-field-sensitive
10135 Maximum number of fields in a structure treated in
10136 a field sensitive manner during pointer analysis.  The default is zero
10137 for @option{-O0} and @option{-O1},
10138 and 100 for @option{-Os}, @option{-O2}, and @option{-O3}.
10140 @item prefetch-latency
10141 Estimate on average number of instructions that are executed before
10142 prefetch finishes.  The distance prefetched ahead is proportional
10143 to this constant.  Increasing this number may also lead to less
10144 streams being prefetched (see @option{simultaneous-prefetches}).
10146 @item simultaneous-prefetches
10147 Maximum number of prefetches that can run at the same time.
10149 @item l1-cache-line-size
10150 The size of cache line in L1 cache, in bytes.
10152 @item l1-cache-size
10153 The size of L1 cache, in kilobytes.
10155 @item l2-cache-size
10156 The size of L2 cache, in kilobytes.
10158 @item min-insn-to-prefetch-ratio
10159 The minimum ratio between the number of instructions and the
10160 number of prefetches to enable prefetching in a loop.
10162 @item prefetch-min-insn-to-mem-ratio
10163 The minimum ratio between the number of instructions and the
10164 number of memory references to enable prefetching in a loop.
10166 @item use-canonical-types
10167 Whether the compiler should use the ``canonical'' type system.  By
10168 default, this should always be 1, which uses a more efficient internal
10169 mechanism for comparing types in C++ and Objective-C++.  However, if
10170 bugs in the canonical type system are causing compilation failures,
10171 set this value to 0 to disable canonical types.
10173 @item switch-conversion-max-branch-ratio
10174 Switch initialization conversion refuses to create arrays that are
10175 bigger than @option{switch-conversion-max-branch-ratio} times the number of
10176 branches in the switch.
10178 @item max-partial-antic-length
10179 Maximum length of the partial antic set computed during the tree
10180 partial redundancy elimination optimization (@option{-ftree-pre}) when
10181 optimizing at @option{-O3} and above.  For some sorts of source code
10182 the enhanced partial redundancy elimination optimization can run away,
10183 consuming all of the memory available on the host machine.  This
10184 parameter sets a limit on the length of the sets that are computed,
10185 which prevents the runaway behavior.  Setting a value of 0 for
10186 this parameter allows an unlimited set length.
10188 @item sccvn-max-scc-size
10189 Maximum size of a strongly connected component (SCC) during SCCVN
10190 processing.  If this limit is hit, SCCVN processing for the whole
10191 function is not done and optimizations depending on it are
10192 disabled.  The default maximum SCC size is 10000.
10194 @item sccvn-max-alias-queries-per-access
10195 Maximum number of alias-oracle queries we perform when looking for
10196 redundancies for loads and stores.  If this limit is hit the search
10197 is aborted and the load or store is not considered redundant.  The
10198 number of queries is algorithmically limited to the number of
10199 stores on all paths from the load to the function entry.
10200 The default maxmimum number of queries is 1000.
10202 @item ira-max-loops-num
10203 IRA uses regional register allocation by default.  If a function
10204 contains more loops than the number given by this parameter, only at most
10205 the given number of the most frequently-executed loops form regions
10206 for regional register allocation.  The default value of the
10207 parameter is 100.
10209 @item ira-max-conflict-table-size 
10210 Although IRA uses a sophisticated algorithm to compress the conflict
10211 table, the table can still require excessive amounts of memory for
10212 huge functions.  If the conflict table for a function could be more
10213 than the size in MB given by this parameter, the register allocator
10214 instead uses a faster, simpler, and lower-quality
10215 algorithm that does not require building a pseudo-register conflict table.  
10216 The default value of the parameter is 2000.
10218 @item ira-loop-reserved-regs
10219 IRA can be used to evaluate more accurate register pressure in loops
10220 for decisions to move loop invariants (see @option{-O3}).  The number
10221 of available registers reserved for some other purposes is given
10222 by this parameter.  The default value of the parameter is 2, which is
10223 the minimal number of registers needed by typical instructions.
10224 This value is the best found from numerous experiments.
10226 @item loop-invariant-max-bbs-in-loop
10227 Loop invariant motion can be very expensive, both in compilation time and
10228 in amount of needed compile-time memory, with very large loops.  Loops
10229 with more basic blocks than this parameter won't have loop invariant
10230 motion optimization performed on them.  The default value of the
10231 parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.
10233 @item loop-max-datarefs-for-datadeps
10234 Building data dapendencies is expensive for very large loops.  This
10235 parameter limits the number of data references in loops that are
10236 considered for data dependence analysis.  These large loops are no
10237 handled by the optimizations using loop data dependencies.
10238 The default value is 1000.
10240 @item max-vartrack-size
10241 Sets a maximum number of hash table slots to use during variable
10242 tracking dataflow analysis of any function.  If this limit is exceeded
10243 with variable tracking at assignments enabled, analysis for that
10244 function is retried without it, after removing all debug insns from
10245 the function.  If the limit is exceeded even without debug insns, var
10246 tracking analysis is completely disabled for the function.  Setting
10247 the parameter to zero makes it unlimited.
10249 @item max-vartrack-expr-depth
10250 Sets a maximum number of recursion levels when attempting to map
10251 variable names or debug temporaries to value expressions.  This trades
10252 compilation time for more complete debug information.  If this is set too
10253 low, value expressions that are available and could be represented in
10254 debug information may end up not being used; setting this higher may
10255 enable the compiler to find more complex debug expressions, but compile
10256 time and memory use may grow.  The default is 12.
10258 @item min-nondebug-insn-uid
10259 Use uids starting at this parameter for nondebug insns.  The range below
10260 the parameter is reserved exclusively for debug insns created by
10261 @option{-fvar-tracking-assignments}, but debug insns may get
10262 (non-overlapping) uids above it if the reserved range is exhausted.
10264 @item ipa-sra-ptr-growth-factor
10265 IPA-SRA replaces a pointer to an aggregate with one or more new
10266 parameters only when their cumulative size is less or equal to
10267 @option{ipa-sra-ptr-growth-factor} times the size of the original
10268 pointer parameter.
10270 @item tm-max-aggregate-size
10271 When making copies of thread-local variables in a transaction, this
10272 parameter specifies the size in bytes after which variables are
10273 saved with the logging functions as opposed to save/restore code
10274 sequence pairs.  This option only applies when using
10275 @option{-fgnu-tm}.
10277 @item graphite-max-nb-scop-params
10278 To avoid exponential effects in the Graphite loop transforms, the
10279 number of parameters in a Static Control Part (SCoP) is bounded.  The
10280 default value is 10 parameters.  A variable whose value is unknown at
10281 compilation time and defined outside a SCoP is a parameter of the SCoP.
10283 @item graphite-max-bbs-per-function
10284 To avoid exponential effects in the detection of SCoPs, the size of
10285 the functions analyzed by Graphite is bounded.  The default value is
10286 100 basic blocks.
10288 @item loop-block-tile-size
10289 Loop blocking or strip mining transforms, enabled with
10290 @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
10291 loop in the loop nest by a given number of iterations.  The strip
10292 length can be changed using the @option{loop-block-tile-size}
10293 parameter.  The default value is 51 iterations.
10295 @item ipa-cp-value-list-size
10296 IPA-CP attempts to track all possible values and types passed to a function's
10297 parameter in order to propagate them and perform devirtualization.
10298 @option{ipa-cp-value-list-size} is the maximum number of values and types it
10299 stores per one formal parameter of a function.
10301 @item ipa-cp-eval-threshold
10302 IPA-CP calculates its own score of cloning profitability heuristics
10303 and performs those cloning opportunities with scores that exceed
10304 @option{ipa-cp-eval-threshold}.
10306 @item ipa-max-agg-items
10307 IPA-CP is also capable to propagate a number of scalar values passed
10308 in an aggregate. @option{ipa-max-agg-items} controls the maximum
10309 number of such values per one parameter.
10311 @item ipa-cp-loop-hint-bonus
10312 When IPA-CP determines that a cloning candidate would make the number
10313 of iterations of a loop known, it adds a bonus of
10314 @option{ipa-cp-loop-hint-bonus} to the profitability score of
10315 the candidate.
10317 @item ipa-cp-array-index-hint-bonus
10318 When IPA-CP determines that a cloning candidate would make the index of
10319 an array access known, it adds a bonus of
10320 @option{ipa-cp-array-index-hint-bonus} to the profitability
10321 score of the candidate.
10323 @item ipa-max-aa-steps
10324 During its analysis of function bodies, IPA-CP employs alias analysis
10325 in order to track values pointed to by function parameters.  In order
10326 not spend too much time analyzing huge functions, it will give up and
10327 consider all memory clobbered after examining
10328 @option{ipa-max-aa-steps} statements modifying memory.
10330 @item lto-partitions
10331 Specify desired number of partitions produced during WHOPR compilation.
10332 The number of partitions should exceed the number of CPUs used for compilation.
10333 The default value is 32.
10335 @item lto-minpartition
10336 Size of minimal partition for WHOPR (in estimated instructions).
10337 This prevents expenses of splitting very small programs into too many
10338 partitions.
10340 @item cxx-max-namespaces-for-diagnostic-help
10341 The maximum number of namespaces to consult for suggestions when C++
10342 name lookup fails for an identifier.  The default is 1000.
10344 @item sink-frequency-threshold
10345 The maximum relative execution frequency (in percents) of the target block
10346 relative to a statement's original block to allow statement sinking of a
10347 statement.  Larger numbers result in more aggressive statement sinking.
10348 The default value is 75.  A small positive adjustment is applied for
10349 statements with memory operands as those are even more profitable so sink.
10351 @item max-stores-to-sink
10352 The maximum number of conditional stores paires that can be sunk.  Set to 0
10353 if either vectorization (@option{-ftree-vectorize}) or if-conversion
10354 (@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
10356 @item allow-store-data-races
10357 Allow optimizers to introduce new data races on stores.
10358 Set to 1 to allow, otherwise to 0.  This option is enabled by default
10359 at optimization level @option{-Ofast}.
10361 @item case-values-threshold
10362 The smallest number of different values for which it is best to use a
10363 jump-table instead of a tree of conditional branches.  If the value is
10364 0, use the default for the machine.  The default is 0.
10366 @item tree-reassoc-width
10367 Set the maximum number of instructions executed in parallel in
10368 reassociated tree. This parameter overrides target dependent
10369 heuristics used by default if has non zero value.
10371 @item sched-pressure-algorithm
10372 Choose between the two available implementations of
10373 @option{-fsched-pressure}.  Algorithm 1 is the original implementation
10374 and is the more likely to prevent instructions from being reordered.
10375 Algorithm 2 was designed to be a compromise between the relatively
10376 conservative approach taken by algorithm 1 and the rather aggressive
10377 approach taken by the default scheduler.  It relies more heavily on
10378 having a regular register file and accurate register pressure classes.
10379 See @file{haifa-sched.c} in the GCC sources for more details.
10381 The default choice depends on the target.
10383 @item max-slsr-cand-scan
10384 Set the maximum number of existing candidates that will be considered when
10385 seeking a basis for a new straight-line strength reduction candidate.
10387 @item asan-globals
10388 Enable buffer overflow detection for global objects.  This kind
10389 of protection is enabled by default if you are using
10390 @option{-fsanitize=address} option.
10391 To disable global objects protection use @option{--param asan-globals=0}.
10393 @item asan-stack
10394 Enable buffer overflow detection for stack objects.  This kind of
10395 protection is enabled by default when using@option{-fsanitize=address}.
10396 To disable stack protection use @option{--param asan-stack=0} option.
10398 @item asan-instrument-reads
10399 Enable buffer overflow detection for memory reads.  This kind of
10400 protection is enabled by default when using @option{-fsanitize=address}.
10401 To disable memory reads protection use
10402 @option{--param asan-instrument-reads=0}.
10404 @item asan-instrument-writes
10405 Enable buffer overflow detection for memory writes.  This kind of
10406 protection is enabled by default when using @option{-fsanitize=address}.
10407 To disable memory writes protection use
10408 @option{--param asan-instrument-writes=0} option.
10410 @item asan-memintrin
10411 Enable detection for built-in functions.  This kind of protection
10412 is enabled by default when using @option{-fsanitize=address}.
10413 To disable built-in functions protection use
10414 @option{--param asan-memintrin=0}.
10416 @item asan-use-after-return
10417 Enable detection of use-after-return.  This kind of protection
10418 is enabled by default when using @option{-fsanitize=address} option.
10419 To disable use-after-return detection use 
10420 @option{--param asan-use-after-return=0}.
10422 @item asan-instrumentation-with-call-threshold
10423 If number of memory accesses in function being instrumented
10424 is greater or equal to this number, use callbacks instead of inline checks.
10425 E.g. to disable inline code use
10426 @option{--param asan-instrumentation-with-call-threshold=0}.
10428 @end table
10429 @end table
10431 @node Preprocessor Options
10432 @section Options Controlling the Preprocessor
10433 @cindex preprocessor options
10434 @cindex options, preprocessor
10436 These options control the C preprocessor, which is run on each C source
10437 file before actual compilation.
10439 If you use the @option{-E} option, nothing is done except preprocessing.
10440 Some of these options make sense only together with @option{-E} because
10441 they cause the preprocessor output to be unsuitable for actual
10442 compilation.
10444 @table @gcctabopt
10445 @item -Wp,@var{option}
10446 @opindex Wp
10447 You can use @option{-Wp,@var{option}} to bypass the compiler driver
10448 and pass @var{option} directly through to the preprocessor.  If
10449 @var{option} contains commas, it is split into multiple options at the
10450 commas.  However, many options are modified, translated or interpreted
10451 by the compiler driver before being passed to the preprocessor, and
10452 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
10453 interface is undocumented and subject to change, so whenever possible
10454 you should avoid using @option{-Wp} and let the driver handle the
10455 options instead.
10457 @item -Xpreprocessor @var{option}
10458 @opindex Xpreprocessor
10459 Pass @var{option} as an option to the preprocessor.  You can use this to
10460 supply system-specific preprocessor options that GCC does not 
10461 recognize.
10463 If you want to pass an option that takes an argument, you must use
10464 @option{-Xpreprocessor} twice, once for the option and once for the argument.
10466 @item -no-integrated-cpp
10467 @opindex no-integrated-cpp
10468 Perform preprocessing as a separate pass before compilation.
10469 By default, GCC performs preprocessing as an integrated part of
10470 input tokenization and parsing.
10471 If this option is provided, the appropriate language front end
10472 (@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
10473 and Objective-C, respectively) is instead invoked twice,
10474 once for preprocessing only and once for actual compilation
10475 of the preprocessed input.
10476 This option may be useful in conjunction with the @option{-B} or
10477 @option{-wrapper} options to specify an alternate preprocessor or
10478 perform additional processing of the program source between
10479 normal preprocessing and compilation.
10480 @end table
10482 @include cppopts.texi
10484 @node Assembler Options
10485 @section Passing Options to the Assembler
10487 @c prevent bad page break with this line
10488 You can pass options to the assembler.
10490 @table @gcctabopt
10491 @item -Wa,@var{option}
10492 @opindex Wa
10493 Pass @var{option} as an option to the assembler.  If @var{option}
10494 contains commas, it is split into multiple options at the commas.
10496 @item -Xassembler @var{option}
10497 @opindex Xassembler
10498 Pass @var{option} as an option to the assembler.  You can use this to
10499 supply system-specific assembler options that GCC does not
10500 recognize.
10502 If you want to pass an option that takes an argument, you must use
10503 @option{-Xassembler} twice, once for the option and once for the argument.
10505 @end table
10507 @node Link Options
10508 @section Options for Linking
10509 @cindex link options
10510 @cindex options, linking
10512 These options come into play when the compiler links object files into
10513 an executable output file.  They are meaningless if the compiler is
10514 not doing a link step.
10516 @table @gcctabopt
10517 @cindex file names
10518 @item @var{object-file-name}
10519 A file name that does not end in a special recognized suffix is
10520 considered to name an object file or library.  (Object files are
10521 distinguished from libraries by the linker according to the file
10522 contents.)  If linking is done, these object files are used as input
10523 to the linker.
10525 @item -c
10526 @itemx -S
10527 @itemx -E
10528 @opindex c
10529 @opindex S
10530 @opindex E
10531 If any of these options is used, then the linker is not run, and
10532 object file names should not be used as arguments.  @xref{Overall
10533 Options}.
10535 @cindex Libraries
10536 @item -l@var{library}
10537 @itemx -l @var{library}
10538 @opindex l
10539 Search the library named @var{library} when linking.  (The second
10540 alternative with the library as a separate argument is only for
10541 POSIX compliance and is not recommended.)
10543 It makes a difference where in the command you write this option; the
10544 linker searches and processes libraries and object files in the order they
10545 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
10546 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
10547 to functions in @samp{z}, those functions may not be loaded.
10549 The linker searches a standard list of directories for the library,
10550 which is actually a file named @file{lib@var{library}.a}.  The linker
10551 then uses this file as if it had been specified precisely by name.
10553 The directories searched include several standard system directories
10554 plus any that you specify with @option{-L}.
10556 Normally the files found this way are library files---archive files
10557 whose members are object files.  The linker handles an archive file by
10558 scanning through it for members which define symbols that have so far
10559 been referenced but not defined.  But if the file that is found is an
10560 ordinary object file, it is linked in the usual fashion.  The only
10561 difference between using an @option{-l} option and specifying a file name
10562 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
10563 and searches several directories.
10565 @item -lobjc
10566 @opindex lobjc
10567 You need this special case of the @option{-l} option in order to
10568 link an Objective-C or Objective-C++ program.
10570 @item -nostartfiles
10571 @opindex nostartfiles
10572 Do not use the standard system startup files when linking.
10573 The standard system libraries are used normally, unless @option{-nostdlib}
10574 or @option{-nodefaultlibs} is used.
10576 @item -nodefaultlibs
10577 @opindex nodefaultlibs
10578 Do not use the standard system libraries when linking.
10579 Only the libraries you specify are passed to the linker, and options
10580 specifying linkage of the system libraries, such as @code{-static-libgcc}
10581 or @code{-shared-libgcc}, are ignored.  
10582 The standard startup files are used normally, unless @option{-nostartfiles}
10583 is used.  
10585 The compiler may generate calls to @code{memcmp},
10586 @code{memset}, @code{memcpy} and @code{memmove}.
10587 These entries are usually resolved by entries in
10588 libc.  These entry points should be supplied through some other
10589 mechanism when this option is specified.
10591 @item -nostdlib
10592 @opindex nostdlib
10593 Do not use the standard system startup files or libraries when linking.
10594 No startup files and only the libraries you specify are passed to
10595 the linker, and options specifying linkage of the system libraries, such as
10596 @code{-static-libgcc} or @code{-shared-libgcc}, are ignored.
10598 The compiler may generate calls to @code{memcmp}, @code{memset},
10599 @code{memcpy} and @code{memmove}.
10600 These entries are usually resolved by entries in
10601 libc.  These entry points should be supplied through some other
10602 mechanism when this option is specified.
10604 @cindex @option{-lgcc}, use with @option{-nostdlib}
10605 @cindex @option{-nostdlib} and unresolved references
10606 @cindex unresolved references and @option{-nostdlib}
10607 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
10608 @cindex @option{-nodefaultlibs} and unresolved references
10609 @cindex unresolved references and @option{-nodefaultlibs}
10610 One of the standard libraries bypassed by @option{-nostdlib} and
10611 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
10612 which GCC uses to overcome shortcomings of particular machines, or special
10613 needs for some languages.
10614 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
10615 Collection (GCC) Internals},
10616 for more discussion of @file{libgcc.a}.)
10617 In most cases, you need @file{libgcc.a} even when you want to avoid
10618 other standard libraries.  In other words, when you specify @option{-nostdlib}
10619 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
10620 This ensures that you have no unresolved references to internal GCC
10621 library subroutines.
10622 (An example of such an internal subroutine is @samp{__main}, used to ensure C++
10623 constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
10624 GNU Compiler Collection (GCC) Internals}.)
10626 @item -pie
10627 @opindex pie
10628 Produce a position independent executable on targets that support it.
10629 For predictable results, you must also specify the same set of options
10630 used for compilation (@option{-fpie}, @option{-fPIE},
10631 or model suboptions) when you specify this linker option.
10633 @item -rdynamic
10634 @opindex rdynamic
10635 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
10636 that support it. This instructs the linker to add all symbols, not
10637 only used ones, to the dynamic symbol table. This option is needed
10638 for some uses of @code{dlopen} or to allow obtaining backtraces
10639 from within a program.
10641 @item -s
10642 @opindex s
10643 Remove all symbol table and relocation information from the executable.
10645 @item -static
10646 @opindex static
10647 On systems that support dynamic linking, this prevents linking with the shared
10648 libraries.  On other systems, this option has no effect.
10650 @item -shared
10651 @opindex shared
10652 Produce a shared object which can then be linked with other objects to
10653 form an executable.  Not all systems support this option.  For predictable
10654 results, you must also specify the same set of options used for compilation
10655 (@option{-fpic}, @option{-fPIC}, or model suboptions) when
10656 you specify this linker option.@footnote{On some systems, @samp{gcc -shared}
10657 needs to build supplementary stub code for constructors to work.  On
10658 multi-libbed systems, @samp{gcc -shared} must select the correct support
10659 libraries to link against.  Failing to supply the correct flags may lead
10660 to subtle defects.  Supplying them in cases where they are not necessary
10661 is innocuous.}
10663 @item -shared-libgcc
10664 @itemx -static-libgcc
10665 @opindex shared-libgcc
10666 @opindex static-libgcc
10667 On systems that provide @file{libgcc} as a shared library, these options
10668 force the use of either the shared or static version, respectively.
10669 If no shared version of @file{libgcc} was built when the compiler was
10670 configured, these options have no effect.
10672 There are several situations in which an application should use the
10673 shared @file{libgcc} instead of the static version.  The most common
10674 of these is when the application wishes to throw and catch exceptions
10675 across different shared libraries.  In that case, each of the libraries
10676 as well as the application itself should use the shared @file{libgcc}.
10678 Therefore, the G++ and GCJ drivers automatically add
10679 @option{-shared-libgcc} whenever you build a shared library or a main
10680 executable, because C++ and Java programs typically use exceptions, so
10681 this is the right thing to do.
10683 If, instead, you use the GCC driver to create shared libraries, you may
10684 find that they are not always linked with the shared @file{libgcc}.
10685 If GCC finds, at its configuration time, that you have a non-GNU linker
10686 or a GNU linker that does not support option @option{--eh-frame-hdr},
10687 it links the shared version of @file{libgcc} into shared libraries
10688 by default.  Otherwise, it takes advantage of the linker and optimizes
10689 away the linking with the shared version of @file{libgcc}, linking with
10690 the static version of libgcc by default.  This allows exceptions to
10691 propagate through such shared libraries, without incurring relocation
10692 costs at library load time.
10694 However, if a library or main executable is supposed to throw or catch
10695 exceptions, you must link it using the G++ or GCJ driver, as appropriate
10696 for the languages used in the program, or using the option
10697 @option{-shared-libgcc}, such that it is linked with the shared
10698 @file{libgcc}.
10700 @item -static-libasan
10701 @opindex static-libasan
10702 When the @option{-fsanitize=address} option is used to link a program,
10703 the GCC driver automatically links against @option{libasan}.  If
10704 @file{libasan} is available as a shared library, and the @option{-static}
10705 option is not used, then this links against the shared version of
10706 @file{libasan}.  The @option{-static-libasan} option directs the GCC
10707 driver to link @file{libasan} statically, without necessarily linking
10708 other libraries statically.
10710 @item -static-libtsan
10711 @opindex static-libtsan
10712 When the @option{-fsanitize=thread} option is used to link a program,
10713 the GCC driver automatically links against @option{libtsan}.  If
10714 @file{libtsan} is available as a shared library, and the @option{-static}
10715 option is not used, then this links against the shared version of
10716 @file{libtsan}.  The @option{-static-libtsan} option directs the GCC
10717 driver to link @file{libtsan} statically, without necessarily linking
10718 other libraries statically.
10720 @item -static-liblsan
10721 @opindex static-liblsan
10722 When the @option{-fsanitize=leak} option is used to link a program,
10723 the GCC driver automatically links against @option{liblsan}.  If
10724 @file{liblsan} is available as a shared library, and the @option{-static}
10725 option is not used, then this links against the shared version of
10726 @file{liblsan}.  The @option{-static-liblsan} option directs the GCC
10727 driver to link @file{liblsan} statically, without necessarily linking
10728 other libraries statically.
10730 @item -static-libubsan
10731 @opindex static-libubsan
10732 When the @option{-fsanitize=undefined} option is used to link a program,
10733 the GCC driver automatically links against @option{libubsan}.  If
10734 @file{libubsan} is available as a shared library, and the @option{-static}
10735 option is not used, then this links against the shared version of
10736 @file{libubsan}.  The @option{-static-libubsan} option directs the GCC
10737 driver to link @file{libubsan} statically, without necessarily linking
10738 other libraries statically.
10740 @item -static-libstdc++
10741 @opindex static-libstdc++
10742 When the @command{g++} program is used to link a C++ program, it
10743 normally automatically links against @option{libstdc++}.  If
10744 @file{libstdc++} is available as a shared library, and the
10745 @option{-static} option is not used, then this links against the
10746 shared version of @file{libstdc++}.  That is normally fine.  However, it
10747 is sometimes useful to freeze the version of @file{libstdc++} used by
10748 the program without going all the way to a fully static link.  The
10749 @option{-static-libstdc++} option directs the @command{g++} driver to
10750 link @file{libstdc++} statically, without necessarily linking other
10751 libraries statically.
10753 @item -symbolic
10754 @opindex symbolic
10755 Bind references to global symbols when building a shared object.  Warn
10756 about any unresolved references (unless overridden by the link editor
10757 option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
10758 this option.
10760 @item -T @var{script}
10761 @opindex T
10762 @cindex linker script
10763 Use @var{script} as the linker script.  This option is supported by most
10764 systems using the GNU linker.  On some targets, such as bare-board
10765 targets without an operating system, the @option{-T} option may be required
10766 when linking to avoid references to undefined symbols.
10768 @item -Xlinker @var{option}
10769 @opindex Xlinker
10770 Pass @var{option} as an option to the linker.  You can use this to
10771 supply system-specific linker options that GCC does not recognize.
10773 If you want to pass an option that takes a separate argument, you must use
10774 @option{-Xlinker} twice, once for the option and once for the argument.
10775 For example, to pass @option{-assert definitions}, you must write
10776 @option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
10777 @option{-Xlinker "-assert definitions"}, because this passes the entire
10778 string as a single argument, which is not what the linker expects.
10780 When using the GNU linker, it is usually more convenient to pass
10781 arguments to linker options using the @option{@var{option}=@var{value}}
10782 syntax than as separate arguments.  For example, you can specify
10783 @option{-Xlinker -Map=output.map} rather than
10784 @option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
10785 this syntax for command-line options.
10787 @item -Wl,@var{option}
10788 @opindex Wl
10789 Pass @var{option} as an option to the linker.  If @var{option} contains
10790 commas, it is split into multiple options at the commas.  You can use this
10791 syntax to pass an argument to the option.
10792 For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
10793 linker.  When using the GNU linker, you can also get the same effect with
10794 @option{-Wl,-Map=output.map}.
10796 @item -u @var{symbol}
10797 @opindex u
10798 Pretend the symbol @var{symbol} is undefined, to force linking of
10799 library modules to define it.  You can use @option{-u} multiple times with
10800 different symbols to force loading of additional library modules.
10802 @item -z @var{keyword}
10803 @opindex z
10804 @option{-z} is passed directly on to the linker along with the keyword
10805 @var{keyword}. See the section in the documentation of your linker for
10806 permitted values and their meanings.
10807 @end table
10809 @node Directory Options
10810 @section Options for Directory Search
10811 @cindex directory options
10812 @cindex options, directory search
10813 @cindex search path
10815 These options specify directories to search for header files, for
10816 libraries and for parts of the compiler:
10818 @table @gcctabopt
10819 @item -I@var{dir}
10820 @opindex I
10821 Add the directory @var{dir} to the head of the list of directories to be
10822 searched for header files.  This can be used to override a system header
10823 file, substituting your own version, since these directories are
10824 searched before the system header file directories.  However, you should
10825 not use this option to add directories that contain vendor-supplied
10826 system header files (use @option{-isystem} for that).  If you use more than
10827 one @option{-I} option, the directories are scanned in left-to-right
10828 order; the standard system directories come after.
10830 If a standard system include directory, or a directory specified with
10831 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
10832 option is ignored.  The directory is still searched but as a
10833 system directory at its normal position in the system include chain.
10834 This is to ensure that GCC's procedure to fix buggy system headers and
10835 the ordering for the @code{include_next} directive are not inadvertently changed.
10836 If you really need to change the search order for system directories,
10837 use the @option{-nostdinc} and/or @option{-isystem} options.
10839 @item -iplugindir=@var{dir}
10840 @opindex iplugindir=
10841 Set the directory to search for plugins that are passed
10842 by @option{-fplugin=@var{name}} instead of
10843 @option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
10844 to be used by the user, but only passed by the driver.
10846 @item -iquote@var{dir}
10847 @opindex iquote
10848 Add the directory @var{dir} to the head of the list of directories to
10849 be searched for header files only for the case of @samp{#include
10850 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
10851 otherwise just like @option{-I}.
10853 @item -L@var{dir}
10854 @opindex L
10855 Add directory @var{dir} to the list of directories to be searched
10856 for @option{-l}.
10858 @item -B@var{prefix}
10859 @opindex B
10860 This option specifies where to find the executables, libraries,
10861 include files, and data files of the compiler itself.
10863 The compiler driver program runs one or more of the subprograms
10864 @command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
10865 @var{prefix} as a prefix for each program it tries to run, both with and
10866 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
10868 For each subprogram to be run, the compiler driver first tries the
10869 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
10870 is not specified, the driver tries two standard prefixes, 
10871 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
10872 those results in a file name that is found, the unmodified program
10873 name is searched for using the directories specified in your
10874 @env{PATH} environment variable.
10876 The compiler checks to see if the path provided by the @option{-B}
10877 refers to a directory, and if necessary it adds a directory
10878 separator character at the end of the path.
10880 @option{-B} prefixes that effectively specify directory names also apply
10881 to libraries in the linker, because the compiler translates these
10882 options into @option{-L} options for the linker.  They also apply to
10883 include files in the preprocessor, because the compiler translates these
10884 options into @option{-isystem} options for the preprocessor.  In this case,
10885 the compiler appends @samp{include} to the prefix.
10887 The runtime support file @file{libgcc.a} can also be searched for using
10888 the @option{-B} prefix, if needed.  If it is not found there, the two
10889 standard prefixes above are tried, and that is all.  The file is left
10890 out of the link if it is not found by those means.
10892 Another way to specify a prefix much like the @option{-B} prefix is to use
10893 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
10894 Variables}.
10896 As a special kludge, if the path provided by @option{-B} is
10897 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
10898 9, then it is replaced by @file{[dir/]include}.  This is to help
10899 with boot-strapping the compiler.
10901 @item -specs=@var{file}
10902 @opindex specs
10903 Process @var{file} after the compiler reads in the standard @file{specs}
10904 file, in order to override the defaults which the @command{gcc} driver
10905 program uses when determining what switches to pass to @command{cc1},
10906 @command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
10907 @option{-specs=@var{file}} can be specified on the command line, and they
10908 are processed in order, from left to right.
10910 @item --sysroot=@var{dir}
10911 @opindex sysroot
10912 Use @var{dir} as the logical root directory for headers and libraries.
10913 For example, if the compiler normally searches for headers in
10914 @file{/usr/include} and libraries in @file{/usr/lib}, it instead
10915 searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
10917 If you use both this option and the @option{-isysroot} option, then
10918 the @option{--sysroot} option applies to libraries, but the
10919 @option{-isysroot} option applies to header files.
10921 The GNU linker (beginning with version 2.16) has the necessary support
10922 for this option.  If your linker does not support this option, the
10923 header file aspect of @option{--sysroot} still works, but the
10924 library aspect does not.
10926 @item --no-sysroot-suffix
10927 @opindex no-sysroot-suffix
10928 For some targets, a suffix is added to the root directory specified
10929 with @option{--sysroot}, depending on the other options used, so that
10930 headers may for example be found in
10931 @file{@var{dir}/@var{suffix}/usr/include} instead of
10932 @file{@var{dir}/usr/include}.  This option disables the addition of
10933 such a suffix.
10935 @item -I-
10936 @opindex I-
10937 This option has been deprecated.  Please use @option{-iquote} instead for
10938 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
10939 Any directories you specify with @option{-I} options before the @option{-I-}
10940 option are searched only for the case of @samp{#include "@var{file}"};
10941 they are not searched for @samp{#include <@var{file}>}.
10943 If additional directories are specified with @option{-I} options after
10944 the @option{-I-}, these directories are searched for all @samp{#include}
10945 directives.  (Ordinarily @emph{all} @option{-I} directories are used
10946 this way.)
10948 In addition, the @option{-I-} option inhibits the use of the current
10949 directory (where the current input file came from) as the first search
10950 directory for @samp{#include "@var{file}"}.  There is no way to
10951 override this effect of @option{-I-}.  With @option{-I.} you can specify
10952 searching the directory that is current when the compiler is
10953 invoked.  That is not exactly the same as what the preprocessor does
10954 by default, but it is often satisfactory.
10956 @option{-I-} does not inhibit the use of the standard system directories
10957 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
10958 independent.
10959 @end table
10961 @c man end
10963 @node Spec Files
10964 @section Specifying subprocesses and the switches to pass to them
10965 @cindex Spec Files
10967 @command{gcc} is a driver program.  It performs its job by invoking a
10968 sequence of other programs to do the work of compiling, assembling and
10969 linking.  GCC interprets its command-line parameters and uses these to
10970 deduce which programs it should invoke, and which command-line options
10971 it ought to place on their command lines.  This behavior is controlled
10972 by @dfn{spec strings}.  In most cases there is one spec string for each
10973 program that GCC can invoke, but a few programs have multiple spec
10974 strings to control their behavior.  The spec strings built into GCC can
10975 be overridden by using the @option{-specs=} command-line switch to specify
10976 a spec file.
10978 @dfn{Spec files} are plaintext files that are used to construct spec
10979 strings.  They consist of a sequence of directives separated by blank
10980 lines.  The type of directive is determined by the first non-whitespace
10981 character on the line, which can be one of the following:
10983 @table @code
10984 @item %@var{command}
10985 Issues a @var{command} to the spec file processor.  The commands that can
10986 appear here are:
10988 @table @code
10989 @item %include <@var{file}>
10990 @cindex @code{%include}
10991 Search for @var{file} and insert its text at the current point in the
10992 specs file.
10994 @item %include_noerr <@var{file}>
10995 @cindex @code{%include_noerr}
10996 Just like @samp{%include}, but do not generate an error message if the include
10997 file cannot be found.
10999 @item %rename @var{old_name} @var{new_name}
11000 @cindex @code{%rename}
11001 Rename the spec string @var{old_name} to @var{new_name}.
11003 @end table
11005 @item *[@var{spec_name}]:
11006 This tells the compiler to create, override or delete the named spec
11007 string.  All lines after this directive up to the next directive or
11008 blank line are considered to be the text for the spec string.  If this
11009 results in an empty string then the spec is deleted.  (Or, if the
11010 spec did not exist, then nothing happens.)  Otherwise, if the spec
11011 does not currently exist a new spec is created.  If the spec does
11012 exist then its contents are overridden by the text of this
11013 directive, unless the first character of that text is the @samp{+}
11014 character, in which case the text is appended to the spec.
11016 @item [@var{suffix}]:
11017 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
11018 and up to the next directive or blank line are considered to make up the
11019 spec string for the indicated suffix.  When the compiler encounters an
11020 input file with the named suffix, it processes the spec string in
11021 order to work out how to compile that file.  For example:
11023 @smallexample
11024 .ZZ:
11025 z-compile -input %i
11026 @end smallexample
11028 This says that any input file whose name ends in @samp{.ZZ} should be
11029 passed to the program @samp{z-compile}, which should be invoked with the
11030 command-line switch @option{-input} and with the result of performing the
11031 @samp{%i} substitution.  (See below.)
11033 As an alternative to providing a spec string, the text following a
11034 suffix directive can be one of the following:
11036 @table @code
11037 @item @@@var{language}
11038 This says that the suffix is an alias for a known @var{language}.  This is
11039 similar to using the @option{-x} command-line switch to GCC to specify a
11040 language explicitly.  For example:
11042 @smallexample
11043 .ZZ:
11044 @@c++
11045 @end smallexample
11047 Says that .ZZ files are, in fact, C++ source files.
11049 @item #@var{name}
11050 This causes an error messages saying:
11052 @smallexample
11053 @var{name} compiler not installed on this system.
11054 @end smallexample
11055 @end table
11057 GCC already has an extensive list of suffixes built into it.
11058 This directive adds an entry to the end of the list of suffixes, but
11059 since the list is searched from the end backwards, it is effectively
11060 possible to override earlier entries using this technique.
11062 @end table
11064 GCC has the following spec strings built into it.  Spec files can
11065 override these strings or create their own.  Note that individual
11066 targets can also add their own spec strings to this list.
11068 @smallexample
11069 asm          Options to pass to the assembler
11070 asm_final    Options to pass to the assembler post-processor
11071 cpp          Options to pass to the C preprocessor
11072 cc1          Options to pass to the C compiler
11073 cc1plus      Options to pass to the C++ compiler
11074 endfile      Object files to include at the end of the link
11075 link         Options to pass to the linker
11076 lib          Libraries to include on the command line to the linker
11077 libgcc       Decides which GCC support library to pass to the linker
11078 linker       Sets the name of the linker
11079 predefines   Defines to be passed to the C preprocessor
11080 signed_char  Defines to pass to CPP to say whether @code{char} is signed
11081              by default
11082 startfile    Object files to include at the start of the link
11083 @end smallexample
11085 Here is a small example of a spec file:
11087 @smallexample
11088 %rename lib                 old_lib
11090 *lib:
11091 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
11092 @end smallexample
11094 This example renames the spec called @samp{lib} to @samp{old_lib} and
11095 then overrides the previous definition of @samp{lib} with a new one.
11096 The new definition adds in some extra command-line options before
11097 including the text of the old definition.
11099 @dfn{Spec strings} are a list of command-line options to be passed to their
11100 corresponding program.  In addition, the spec strings can contain
11101 @samp{%}-prefixed sequences to substitute variable text or to
11102 conditionally insert text into the command line.  Using these constructs
11103 it is possible to generate quite complex command lines.
11105 Here is a table of all defined @samp{%}-sequences for spec
11106 strings.  Note that spaces are not generated automatically around the
11107 results of expanding these sequences.  Therefore you can concatenate them
11108 together or combine them with constant text in a single argument.
11110 @table @code
11111 @item %%
11112 Substitute one @samp{%} into the program name or argument.
11114 @item %i
11115 Substitute the name of the input file being processed.
11117 @item %b
11118 Substitute the basename of the input file being processed.
11119 This is the substring up to (and not including) the last period
11120 and not including the directory.
11122 @item %B
11123 This is the same as @samp{%b}, but include the file suffix (text after
11124 the last period).
11126 @item %d
11127 Marks the argument containing or following the @samp{%d} as a
11128 temporary file name, so that that file is deleted if GCC exits
11129 successfully.  Unlike @samp{%g}, this contributes no text to the
11130 argument.
11132 @item %g@var{suffix}
11133 Substitute a file name that has suffix @var{suffix} and is chosen
11134 once per compilation, and mark the argument in the same way as
11135 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
11136 name is now chosen in a way that is hard to predict even when previously
11137 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
11138 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
11139 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
11140 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
11141 was simply substituted with a file name chosen once per compilation,
11142 without regard to any appended suffix (which was therefore treated
11143 just like ordinary text), making such attacks more likely to succeed.
11145 @item %u@var{suffix}
11146 Like @samp{%g}, but generates a new temporary file name
11147 each time it appears instead of once per compilation.
11149 @item %U@var{suffix}
11150 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
11151 new one if there is no such last file name.  In the absence of any
11152 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
11153 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
11154 involves the generation of two distinct file names, one
11155 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
11156 simply substituted with a file name chosen for the previous @samp{%u},
11157 without regard to any appended suffix.
11159 @item %j@var{suffix}
11160 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
11161 writable, and if @option{-save-temps} is not used; 
11162 otherwise, substitute the name
11163 of a temporary file, just like @samp{%u}.  This temporary file is not
11164 meant for communication between processes, but rather as a junk
11165 disposal mechanism.
11167 @item %|@var{suffix}
11168 @itemx %m@var{suffix}
11169 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
11170 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
11171 all.  These are the two most common ways to instruct a program that it
11172 should read from standard input or write to standard output.  If you
11173 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
11174 construct: see for example @file{f/lang-specs.h}.
11176 @item %.@var{SUFFIX}
11177 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
11178 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
11179 terminated by the next space or %.
11181 @item %w
11182 Marks the argument containing or following the @samp{%w} as the
11183 designated output file of this compilation.  This puts the argument
11184 into the sequence of arguments that @samp{%o} substitutes.
11186 @item %o
11187 Substitutes the names of all the output files, with spaces
11188 automatically placed around them.  You should write spaces
11189 around the @samp{%o} as well or the results are undefined.
11190 @samp{%o} is for use in the specs for running the linker.
11191 Input files whose names have no recognized suffix are not compiled
11192 at all, but they are included among the output files, so they are
11193 linked.
11195 @item %O
11196 Substitutes the suffix for object files.  Note that this is
11197 handled specially when it immediately follows @samp{%g, %u, or %U},
11198 because of the need for those to form complete file names.  The
11199 handling is such that @samp{%O} is treated exactly as if it had already
11200 been substituted, except that @samp{%g, %u, and %U} do not currently
11201 support additional @var{suffix} characters following @samp{%O} as they do
11202 following, for example, @samp{.o}.
11204 @item %p
11205 Substitutes the standard macro predefinitions for the
11206 current target machine.  Use this when running @code{cpp}.
11208 @item %P
11209 Like @samp{%p}, but puts @samp{__} before and after the name of each
11210 predefined macro, except for macros that start with @samp{__} or with
11211 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
11214 @item %I
11215 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
11216 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
11217 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
11218 and @option{-imultilib} as necessary.
11220 @item %s
11221 Current argument is the name of a library or startup file of some sort.
11222 Search for that file in a standard list of directories and substitute
11223 the full name found.  The current working directory is included in the
11224 list of directories scanned.
11226 @item %T
11227 Current argument is the name of a linker script.  Search for that file
11228 in the current list of directories to scan for libraries. If the file
11229 is located insert a @option{--script} option into the command line
11230 followed by the full path name found.  If the file is not found then
11231 generate an error message.  Note: the current working directory is not
11232 searched.
11234 @item %e@var{str}
11235 Print @var{str} as an error message.  @var{str} is terminated by a newline.
11236 Use this when inconsistent options are detected.
11238 @item %(@var{name})
11239 Substitute the contents of spec string @var{name} at this point.
11241 @item %x@{@var{option}@}
11242 Accumulate an option for @samp{%X}.
11244 @item %X
11245 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
11246 spec string.
11248 @item %Y
11249 Output the accumulated assembler options specified by @option{-Wa}.
11251 @item %Z
11252 Output the accumulated preprocessor options specified by @option{-Wp}.
11254 @item %a
11255 Process the @code{asm} spec.  This is used to compute the
11256 switches to be passed to the assembler.
11258 @item %A
11259 Process the @code{asm_final} spec.  This is a spec string for
11260 passing switches to an assembler post-processor, if such a program is
11261 needed.
11263 @item %l
11264 Process the @code{link} spec.  This is the spec for computing the
11265 command line passed to the linker.  Typically it makes use of the
11266 @samp{%L %G %S %D and %E} sequences.
11268 @item %D
11269 Dump out a @option{-L} option for each directory that GCC believes might
11270 contain startup files.  If the target supports multilibs then the
11271 current multilib directory is prepended to each of these paths.
11273 @item %L
11274 Process the @code{lib} spec.  This is a spec string for deciding which
11275 libraries are included on the command line to the linker.
11277 @item %G
11278 Process the @code{libgcc} spec.  This is a spec string for deciding
11279 which GCC support library is included on the command line to the linker.
11281 @item %S
11282 Process the @code{startfile} spec.  This is a spec for deciding which
11283 object files are the first ones passed to the linker.  Typically
11284 this might be a file named @file{crt0.o}.
11286 @item %E
11287 Process the @code{endfile} spec.  This is a spec string that specifies
11288 the last object files that are passed to the linker.
11290 @item %C
11291 Process the @code{cpp} spec.  This is used to construct the arguments
11292 to be passed to the C preprocessor.
11294 @item %1
11295 Process the @code{cc1} spec.  This is used to construct the options to be
11296 passed to the actual C compiler (@samp{cc1}).
11298 @item %2
11299 Process the @code{cc1plus} spec.  This is used to construct the options to be
11300 passed to the actual C++ compiler (@samp{cc1plus}).
11302 @item %*
11303 Substitute the variable part of a matched option.  See below.
11304 Note that each comma in the substituted string is replaced by
11305 a single space.
11307 @item %<@code{S}
11308 Remove all occurrences of @code{-S} from the command line.  Note---this
11309 command is position dependent.  @samp{%} commands in the spec string
11310 before this one see @code{-S}, @samp{%} commands in the spec string
11311 after this one do not.
11313 @item %:@var{function}(@var{args})
11314 Call the named function @var{function}, passing it @var{args}.
11315 @var{args} is first processed as a nested spec string, then split
11316 into an argument vector in the usual fashion.  The function returns
11317 a string which is processed as if it had appeared literally as part
11318 of the current spec.
11320 The following built-in spec functions are provided:
11322 @table @code
11323 @item @code{getenv}
11324 The @code{getenv} spec function takes two arguments: an environment
11325 variable name and a string.  If the environment variable is not
11326 defined, a fatal error is issued.  Otherwise, the return value is the
11327 value of the environment variable concatenated with the string.  For
11328 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
11330 @smallexample
11331 %:getenv(TOPDIR /include)
11332 @end smallexample
11334 expands to @file{/path/to/top/include}.
11336 @item @code{if-exists}
11337 The @code{if-exists} spec function takes one argument, an absolute
11338 pathname to a file.  If the file exists, @code{if-exists} returns the
11339 pathname.  Here is a small example of its usage:
11341 @smallexample
11342 *startfile:
11343 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
11344 @end smallexample
11346 @item @code{if-exists-else}
11347 The @code{if-exists-else} spec function is similar to the @code{if-exists}
11348 spec function, except that it takes two arguments.  The first argument is
11349 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
11350 returns the pathname.  If it does not exist, it returns the second argument.
11351 This way, @code{if-exists-else} can be used to select one file or another,
11352 based on the existence of the first.  Here is a small example of its usage:
11354 @smallexample
11355 *startfile:
11356 crt0%O%s %:if-exists(crti%O%s) \
11357 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
11358 @end smallexample
11360 @item @code{replace-outfile}
11361 The @code{replace-outfile} spec function takes two arguments.  It looks for the
11362 first argument in the outfiles array and replaces it with the second argument.  Here
11363 is a small example of its usage:
11365 @smallexample
11366 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
11367 @end smallexample
11369 @item @code{remove-outfile}
11370 The @code{remove-outfile} spec function takes one argument.  It looks for the
11371 first argument in the outfiles array and removes it.  Here is a small example
11372 its usage:
11374 @smallexample
11375 %:remove-outfile(-lm)
11376 @end smallexample
11378 @item @code{pass-through-libs}
11379 The @code{pass-through-libs} spec function takes any number of arguments.  It
11380 finds any @option{-l} options and any non-options ending in @file{.a} (which it
11381 assumes are the names of linker input library archive files) and returns a
11382 result containing all the found arguments each prepended by
11383 @option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
11384 intended to be passed to the LTO linker plugin.
11386 @smallexample
11387 %:pass-through-libs(%G %L %G)
11388 @end smallexample
11390 @item @code{print-asm-header}
11391 The @code{print-asm-header} function takes no arguments and simply
11392 prints a banner like:
11394 @smallexample
11395 Assembler options
11396 =================
11398 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
11399 @end smallexample
11401 It is used to separate compiler options from assembler options
11402 in the @option{--target-help} output.
11403 @end table
11405 @item %@{@code{S}@}
11406 Substitutes the @code{-S} switch, if that switch is given to GCC@.
11407 If that switch is not specified, this substitutes nothing.  Note that
11408 the leading dash is omitted when specifying this option, and it is
11409 automatically inserted if the substitution is performed.  Thus the spec
11410 string @samp{%@{foo@}} matches the command-line option @option{-foo}
11411 and outputs the command-line option @option{-foo}.
11413 @item %W@{@code{S}@}
11414 Like %@{@code{S}@} but mark last argument supplied within as a file to be
11415 deleted on failure.
11417 @item %@{@code{S}*@}
11418 Substitutes all the switches specified to GCC whose names start
11419 with @code{-S}, but which also take an argument.  This is used for
11420 switches like @option{-o}, @option{-D}, @option{-I}, etc.
11421 GCC considers @option{-o foo} as being
11422 one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
11423 text, including the space.  Thus two arguments are generated.
11425 @item %@{@code{S}*&@code{T}*@}
11426 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
11427 (the order of @code{S} and @code{T} in the spec is not significant).
11428 There can be any number of ampersand-separated variables; for each the
11429 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
11431 @item %@{@code{S}:@code{X}@}
11432 Substitutes @code{X}, if the @option{-S} switch is given to GCC@.
11434 @item %@{!@code{S}:@code{X}@}
11435 Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.
11437 @item %@{@code{S}*:@code{X}@}
11438 Substitutes @code{X} if one or more switches whose names start with
11439 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
11440 once, no matter how many such switches appeared.  However, if @code{%*}
11441 appears somewhere in @code{X}, then @code{X} is substituted once
11442 for each matching switch, with the @code{%*} replaced by the part of
11443 that switch matching the @code{*}.
11445 If @code{%*} appears as the last part of a spec sequence then a space
11446 will be added after the end of the last substitution.  If there is more
11447 text in the sequence however then a space will not be generated.  This
11448 allows the @code{%*} substitution to be used as part of a larger
11449 string.  For example, a spec string like this:
11451 @smallexample
11452 %@{mcu=*:--script=%*/memory.ld@}
11453 @end smallexample
11455 when matching an option like @code{-mcu=newchip} will produce:
11457 @smallexample
11458 --script=newchip/memory.ld
11459 @end smallexample
11461 @item %@{.@code{S}:@code{X}@}
11462 Substitutes @code{X}, if processing a file with suffix @code{S}.
11464 @item %@{!.@code{S}:@code{X}@}
11465 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
11467 @item %@{,@code{S}:@code{X}@}
11468 Substitutes @code{X}, if processing a file for language @code{S}.
11470 @item %@{!,@code{S}:@code{X}@}
11471 Substitutes @code{X}, if not processing a file for language @code{S}.
11473 @item %@{@code{S}|@code{P}:@code{X}@}
11474 Substitutes @code{X} if either @code{-S} or @code{-P} is given to
11475 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
11476 @code{*} sequences as well, although they have a stronger binding than
11477 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
11478 alternatives must be starred, and only the first matching alternative
11479 is substituted.
11481 For example, a spec string like this:
11483 @smallexample
11484 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
11485 @end smallexample
11487 @noindent
11488 outputs the following command-line options from the following input
11489 command-line options:
11491 @smallexample
11492 fred.c        -foo -baz
11493 jim.d         -bar -boggle
11494 -d fred.c     -foo -baz -boggle
11495 -d jim.d      -bar -baz -boggle
11496 @end smallexample
11498 @item %@{S:X; T:Y; :D@}
11500 If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
11501 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
11502 be as many clauses as you need.  This may be combined with @code{.},
11503 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
11506 @end table
11508 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
11509 construct may contain other nested @samp{%} constructs or spaces, or
11510 even newlines.  They are processed as usual, as described above.
11511 Trailing white space in @code{X} is ignored.  White space may also
11512 appear anywhere on the left side of the colon in these constructs,
11513 except between @code{.} or @code{*} and the corresponding word.
11515 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
11516 handled specifically in these constructs.  If another value of
11517 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
11518 @option{-W} switch is found later in the command line, the earlier
11519 switch value is ignored, except with @{@code{S}*@} where @code{S} is
11520 just one letter, which passes all matching options.
11522 The character @samp{|} at the beginning of the predicate text is used to
11523 indicate that a command should be piped to the following command, but
11524 only if @option{-pipe} is specified.
11526 It is built into GCC which switches take arguments and which do not.
11527 (You might think it would be useful to generalize this to allow each
11528 compiler's spec to say which switches take arguments.  But this cannot
11529 be done in a consistent fashion.  GCC cannot even decide which input
11530 files have been specified without knowing which switches take arguments,
11531 and it must know which input files to compile in order to tell which
11532 compilers to run).
11534 GCC also knows implicitly that arguments starting in @option{-l} are to be
11535 treated as compiler output files, and passed to the linker in their
11536 proper position among the other output files.
11538 @c man begin OPTIONS
11540 @node Target Options
11541 @section Specifying Target Machine and Compiler Version
11542 @cindex target options
11543 @cindex cross compiling
11544 @cindex specifying machine version
11545 @cindex specifying compiler version and target machine
11546 @cindex compiler version, specifying
11547 @cindex target machine, specifying
11549 The usual way to run GCC is to run the executable called @command{gcc}, or
11550 @command{@var{machine}-gcc} when cross-compiling, or
11551 @command{@var{machine}-gcc-@var{version}} to run a version other than the
11552 one that was installed last.
11554 @node Submodel Options
11555 @section Hardware Models and Configurations
11556 @cindex submodel options
11557 @cindex specifying hardware config
11558 @cindex hardware models and configurations, specifying
11559 @cindex machine dependent options
11561 Each target machine types can have its own
11562 special options, starting with @samp{-m}, to choose among various
11563 hardware models or configurations---for example, 68010 vs 68020,
11564 floating coprocessor or none.  A single installed version of the
11565 compiler can compile for any model or configuration, according to the
11566 options specified.
11568 Some configurations of the compiler also support additional special
11569 options, usually for compatibility with other compilers on the same
11570 platform.
11572 @c This list is ordered alphanumerically by subsection name.
11573 @c It should be the same order and spelling as these options are listed
11574 @c in Machine Dependent Options
11576 @menu
11577 * AArch64 Options::
11578 * Adapteva Epiphany Options::
11579 * ARC Options::
11580 * ARM Options::
11581 * AVR Options::
11582 * Blackfin Options::
11583 * C6X Options::
11584 * CRIS Options::
11585 * CR16 Options::
11586 * Darwin Options::
11587 * DEC Alpha Options::
11588 * FR30 Options::
11589 * FRV Options::
11590 * GNU/Linux Options::
11591 * H8/300 Options::
11592 * HPPA Options::
11593 * i386 and x86-64 Options::
11594 * i386 and x86-64 Windows Options::
11595 * IA-64 Options::
11596 * LM32 Options::
11597 * M32C Options::
11598 * M32R/D Options::
11599 * M680x0 Options::
11600 * MCore Options::
11601 * MeP Options::
11602 * MicroBlaze Options::
11603 * MIPS Options::
11604 * MMIX Options::
11605 * MN10300 Options::
11606 * Moxie Options::
11607 * MSP430 Options::
11608 * NDS32 Options::
11609 * Nios II Options::
11610 * PDP-11 Options::
11611 * picoChip Options::
11612 * PowerPC Options::
11613 * RL78 Options::
11614 * RS/6000 and PowerPC Options::
11615 * RX Options::
11616 * S/390 and zSeries Options::
11617 * Score Options::
11618 * SH Options::
11619 * Solaris 2 Options::
11620 * SPARC Options::
11621 * SPU Options::
11622 * System V Options::
11623 * TILE-Gx Options::
11624 * TILEPro Options::
11625 * V850 Options::
11626 * VAX Options::
11627 * VMS Options::
11628 * VxWorks Options::
11629 * x86-64 Options::
11630 * Xstormy16 Options::
11631 * Xtensa Options::
11632 * zSeries Options::
11633 @end menu
11635 @node AArch64 Options
11636 @subsection AArch64 Options
11637 @cindex AArch64 Options
11639 These options are defined for AArch64 implementations:
11641 @table @gcctabopt
11643 @item -mabi=@var{name}
11644 @opindex mabi
11645 Generate code for the specified data model.  Permissible values
11646 are @samp{ilp32} for SysV-like data model where int, long int and pointer
11647 are 32-bit, and @samp{lp64} for SysV-like data model where int is 32-bit,
11648 but long int and pointer are 64-bit.
11650 The default depends on the specific target configuration.  Note that
11651 the LP64 and ILP32 ABIs are not link-compatible; you must compile your
11652 entire program with the same ABI, and link with a compatible set of libraries.
11654 @item -mbig-endian
11655 @opindex mbig-endian
11656 Generate big-endian code.  This is the default when GCC is configured for an
11657 @samp{aarch64_be-*-*} target.
11659 @item -mgeneral-regs-only
11660 @opindex mgeneral-regs-only
11661 Generate code which uses only the general registers.
11663 @item -mlittle-endian
11664 @opindex mlittle-endian
11665 Generate little-endian code.  This is the default when GCC is configured for an
11666 @samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.
11668 @item -mcmodel=tiny
11669 @opindex mcmodel=tiny
11670 Generate code for the tiny code model.  The program and its statically defined
11671 symbols must be within 1GB of each other.  Pointers are 64 bits.  Programs can
11672 be statically or dynamically linked.  This model is not fully implemented and
11673 mostly treated as @samp{small}.
11675 @item -mcmodel=small
11676 @opindex mcmodel=small
11677 Generate code for the small code model.  The program and its statically defined
11678 symbols must be within 4GB of each other.  Pointers are 64 bits.  Programs can
11679 be statically or dynamically linked.  This is the default code model.
11681 @item -mcmodel=large
11682 @opindex mcmodel=large
11683 Generate code for the large code model.  This makes no assumptions about
11684 addresses and sizes of sections.  Pointers are 64 bits.  Programs can be
11685 statically linked only.
11687 @item -mstrict-align
11688 @opindex mstrict-align
11689 Do not assume that unaligned memory references will be handled by the system.
11691 @item -momit-leaf-frame-pointer
11692 @itemx -mno-omit-leaf-frame-pointer
11693 @opindex momit-leaf-frame-pointer
11694 @opindex mno-omit-leaf-frame-pointer
11695 Omit or keep the frame pointer in leaf functions.  The former behaviour is the
11696 default.
11698 @item -mtls-dialect=desc
11699 @opindex mtls-dialect=desc
11700 Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
11701 of TLS variables.  This is the default.
11703 @item -mtls-dialect=traditional
11704 @opindex mtls-dialect=traditional
11705 Use traditional TLS as the thread-local storage mechanism for dynamic accesses
11706 of TLS variables.
11708 @item -march=@var{name}
11709 @opindex march
11710 Specify the name of the target architecture, optionally suffixed by one or
11711 more feature modifiers.  This option has the form
11712 @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where the
11713 only permissible value for @var{arch} is @samp{armv8-a}.  The permissible
11714 values for @var{feature} are documented in the sub-section below.
11716 Where conflicting feature modifiers are specified, the right-most feature is
11717 used.
11719 GCC uses this name to determine what kind of instructions it can emit when
11720 generating assembly code.
11722 Where @option{-march} is specified without either of @option{-mtune}
11723 or @option{-mcpu} also being specified, the code will be tuned to perform
11724 well across a range of target processors implementing the target
11725 architecture.
11727 @item -mtune=@var{name}
11728 @opindex mtune
11729 Specify the name of the target processor for which GCC should tune the
11730 performance of the code.  Permissible values for this option are:
11731 @samp{generic}, @samp{cortex-a53}, @samp{cortex-a57}.
11733 Additionally, this option can specify that GCC should tune the performance
11734 of the code for a big.LITTLE system.  The only permissible value is
11735 @samp{cortex-a57.cortex-a53}.
11737 Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
11738 are specified, the code will be tuned to perform well across a range
11739 of target processors.
11741 This option cannot be suffixed by feature modifiers.
11743 @item -mcpu=@var{name}
11744 @opindex mcpu
11745 Specify the name of the target processor, optionally suffixed by one or more
11746 feature modifiers.  This option has the form
11747 @option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where the
11748 permissible values for @var{cpu} are the same as those available for
11749 @option{-mtune}.
11751 The permissible values for @var{feature} are documented in the sub-section
11752 below.
11754 Where conflicting feature modifiers are specified, the right-most feature is
11755 used.
11757 GCC uses this name to determine what kind of instructions it can emit when
11758 generating assembly code (as if by @option{-march}) and to determine
11759 the target processor for which to tune for performance (as if
11760 by @option{-mtune}).  Where this option is used in conjunction
11761 with @option{-march} or @option{-mtune}, those options take precedence
11762 over the appropriate part of this option.
11763 @end table
11765 @subsubsection @option{-march} and @option{-mcpu} feature modifiers
11766 @cindex @option{-march} feature modifiers
11767 @cindex @option{-mcpu} feature modifiers
11768 Feature modifiers used with @option{-march} and @option{-mcpu} can be one
11769 the following:
11771 @table @samp
11772 @item crc
11773 Enable CRC extension.
11774 @item crypto
11775 Enable Crypto extension.  This implies Advanced SIMD is enabled.
11776 @item fp
11777 Enable floating-point instructions.
11778 @item simd
11779 Enable Advanced SIMD instructions.  This implies floating-point instructions
11780 are enabled.  This is the default for all current possible values for options
11781 @option{-march} and @option{-mcpu=}.
11782 @end table
11784 @node Adapteva Epiphany Options
11785 @subsection Adapteva Epiphany Options
11787 These @samp{-m} options are defined for Adapteva Epiphany:
11789 @table @gcctabopt
11790 @item -mhalf-reg-file
11791 @opindex mhalf-reg-file
11792 Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
11793 That allows code to run on hardware variants that lack these registers.
11795 @item -mprefer-short-insn-regs
11796 @opindex mprefer-short-insn-regs
11797 Preferrentially allocate registers that allow short instruction generation.
11798 This can result in increased instruction count, so this may either reduce or
11799 increase overall code size.
11801 @item -mbranch-cost=@var{num}
11802 @opindex mbranch-cost
11803 Set the cost of branches to roughly @var{num} ``simple'' instructions.
11804 This cost is only a heuristic and is not guaranteed to produce
11805 consistent results across releases.
11807 @item -mcmove
11808 @opindex mcmove
11809 Enable the generation of conditional moves.
11811 @item -mnops=@var{num}
11812 @opindex mnops
11813 Emit @var{num} NOPs before every other generated instruction.
11815 @item -mno-soft-cmpsf
11816 @opindex mno-soft-cmpsf
11817 For single-precision floating-point comparisons, emit an @code{fsub} instruction
11818 and test the flags.  This is faster than a software comparison, but can
11819 get incorrect results in the presence of NaNs, or when two different small
11820 numbers are compared such that their difference is calculated as zero.
11821 The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
11822 software comparisons.
11824 @item -mstack-offset=@var{num}
11825 @opindex mstack-offset
11826 Set the offset between the top of the stack and the stack pointer.
11827 E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
11828 can be used by leaf functions without stack allocation.
11829 Values other than @samp{8} or @samp{16} are untested and unlikely to work.
11830 Note also that this option changes the ABI; compiling a program with a
11831 different stack offset than the libraries have been compiled with
11832 generally does not work.
11833 This option can be useful if you want to evaluate if a different stack
11834 offset would give you better code, but to actually use a different stack
11835 offset to build working programs, it is recommended to configure the
11836 toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.
11838 @item -mno-round-nearest
11839 @opindex mno-round-nearest
11840 Make the scheduler assume that the rounding mode has been set to
11841 truncating.  The default is @option{-mround-nearest}.
11843 @item -mlong-calls
11844 @opindex mlong-calls
11845 If not otherwise specified by an attribute, assume all calls might be beyond
11846 the offset range of the @code{b} / @code{bl} instructions, and therefore load the
11847 function address into a register before performing a (otherwise direct) call.
11848 This is the default.
11850 @item -mshort-calls
11851 @opindex short-calls
11852 If not otherwise specified by an attribute, assume all direct calls are
11853 in the range of the @code{b} / @code{bl} instructions, so use these instructions
11854 for direct calls.  The default is @option{-mlong-calls}.
11856 @item -msmall16
11857 @opindex msmall16
11858 Assume addresses can be loaded as 16-bit unsigned values.  This does not
11859 apply to function addresses for which @option{-mlong-calls} semantics
11860 are in effect.
11862 @item -mfp-mode=@var{mode}
11863 @opindex mfp-mode
11864 Set the prevailing mode of the floating-point unit.
11865 This determines the floating-point mode that is provided and expected
11866 at function call and return time.  Making this mode match the mode you
11867 predominantly need at function start can make your programs smaller and
11868 faster by avoiding unnecessary mode switches.
11870 @var{mode} can be set to one the following values:
11872 @table @samp
11873 @item caller
11874 Any mode at function entry is valid, and retained or restored when
11875 the function returns, and when it calls other functions.
11876 This mode is useful for compiling libraries or other compilation units
11877 you might want to incorporate into different programs with different
11878 prevailing FPU modes, and the convenience of being able to use a single
11879 object file outweighs the size and speed overhead for any extra
11880 mode switching that might be needed, compared with what would be needed
11881 with a more specific choice of prevailing FPU mode.
11883 @item truncate
11884 This is the mode used for floating-point calculations with
11885 truncating (i.e.@: round towards zero) rounding mode.  That includes
11886 conversion from floating point to integer.
11888 @item round-nearest
11889 This is the mode used for floating-point calculations with
11890 round-to-nearest-or-even rounding mode.
11892 @item int
11893 This is the mode used to perform integer calculations in the FPU, e.g.@:
11894 integer multiply, or integer multiply-and-accumulate.
11895 @end table
11897 The default is @option{-mfp-mode=caller}
11899 @item -mnosplit-lohi
11900 @itemx -mno-postinc
11901 @itemx -mno-postmodify
11902 @opindex mnosplit-lohi
11903 @opindex mno-postinc
11904 @opindex mno-postmodify
11905 Code generation tweaks that disable, respectively, splitting of 32-bit
11906 loads, generation of post-increment addresses, and generation of
11907 post-modify addresses.  The defaults are @option{msplit-lohi},
11908 @option{-mpost-inc}, and @option{-mpost-modify}.
11910 @item -mnovect-double
11911 @opindex mno-vect-double
11912 Change the preferred SIMD mode to SImode.  The default is
11913 @option{-mvect-double}, which uses DImode as preferred SIMD mode.
11915 @item -max-vect-align=@var{num}
11916 @opindex max-vect-align
11917 The maximum alignment for SIMD vector mode types.
11918 @var{num} may be 4 or 8.  The default is 8.
11919 Note that this is an ABI change, even though many library function
11920 interfaces are unaffected if they don't use SIMD vector modes
11921 in places that affect size and/or alignment of relevant types.
11923 @item -msplit-vecmove-early
11924 @opindex msplit-vecmove-early
11925 Split vector moves into single word moves before reload.  In theory this
11926 can give better register allocation, but so far the reverse seems to be
11927 generally the case.
11929 @item -m1reg-@var{reg}
11930 @opindex m1reg-
11931 Specify a register to hold the constant @minus{}1, which makes loading small negative
11932 constants and certain bitmasks faster.
11933 Allowable values for @var{reg} are @samp{r43} and @samp{r63},
11934 which specify use of that register as a fixed register,
11935 and @samp{none}, which means that no register is used for this
11936 purpose.  The default is @option{-m1reg-none}.
11938 @end table
11940 @node ARC Options
11941 @subsection ARC Options
11942 @cindex ARC options
11944 The following options control the architecture variant for which code
11945 is being compiled:
11947 @c architecture variants
11948 @table @gcctabopt
11950 @item -mbarrel-shifter
11951 @opindex mbarrel-shifter
11952 Generate instructions supported by barrel shifter.  This is the default
11953 unless @samp{-mcpu=ARC601} is in effect.
11955 @item -mcpu=@var{cpu}
11956 @opindex mcpu
11957 Set architecture type, register usage, and instruction scheduling
11958 parameters for @var{cpu}.  There are also shortcut alias options
11959 available for backward compatibility and convenience.  Supported
11960 values for @var{cpu} are
11962 @table @samp
11963 @opindex mA6
11964 @opindex mARC600
11965 @item ARC600
11966 Compile for ARC600.  Aliases: @option{-mA6}, @option{-mARC600}.
11968 @item ARC601
11969 @opindex mARC601
11970 Compile for ARC601.  Alias: @option{-mARC601}.
11972 @item ARC700
11973 @opindex mA7
11974 @opindex mARC700
11975 Compile for ARC700.  Aliases: @option{-mA7}, @option{-mARC700}.
11976 This is the default when configured with @samp{--with-cpu=arc700}@.
11977 @end table
11979 @item -mdpfp
11980 @opindex mdpfp
11981 @itemx -mdpfp-compact
11982 @opindex mdpfp-compact
11983 FPX: Generate Double Precision FPX instructions, tuned for the compact
11984 implementation.
11986 @item -mdpfp-fast
11987 @opindex mdpfp-fast
11988 FPX: Generate Double Precision FPX instructions, tuned for the fast
11989 implementation.
11991 @item -mno-dpfp-lrsr
11992 @opindex mno-dpfp-lrsr
11993 Disable LR and SR instructions from using FPX extension aux registers.
11995 @item -mea
11996 @opindex mea
11997 Generate Extended arithmetic instructions.  Currently only
11998 @code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
11999 supported.  This is always enabled for @samp{-mcpu=ARC700}.
12001 @item -mno-mpy
12002 @opindex mno-mpy
12003 Do not generate mpy instructions for ARC700.
12005 @item -mmul32x16
12006 @opindex mmul32x16
12007 Generate 32x16 bit multiply and mac instructions.
12009 @item -mmul64
12010 @opindex mmul64
12011 Generate mul64 and mulu64 instructions.  Only valid for @samp{-mcpu=ARC600}.
12013 @item -mnorm
12014 @opindex mnorm
12015 Generate norm instruction.  This is the default if @samp{-mcpu=ARC700}
12016 is in effect.
12018 @item -mspfp
12019 @opindex mspfp
12020 @itemx -mspfp-compact
12021 @opindex mspfp-compact
12022 FPX: Generate Single Precision FPX instructions, tuned for the compact
12023 implementation.
12025 @item -mspfp-fast
12026 @opindex mspfp-fast
12027 FPX: Generate Single Precision FPX instructions, tuned for the fast
12028 implementation.
12030 @item -msimd
12031 @opindex msimd
12032 Enable generation of ARC SIMD instructions via target-specific
12033 builtins.  Only valid for @samp{-mcpu=ARC700}.
12035 @item -msoft-float
12036 @opindex msoft-float
12037 This option ignored; it is provided for compatibility purposes only.
12038 Software floating point code is emitted by default, and this default
12039 can overridden by FPX options; @samp{mspfp}, @samp{mspfp-compact}, or
12040 @samp{mspfp-fast} for single precision, and @samp{mdpfp},
12041 @samp{mdpfp-compact}, or @samp{mdpfp-fast} for double precision.
12043 @item -mswap
12044 @opindex mswap
12045 Generate swap instructions.
12047 @end table
12049 The following options are passed through to the assembler, and also
12050 define preprocessor macro symbols.
12052 @c Flags used by the assembler, but for which we define preprocessor
12053 @c macro symbols as well.
12054 @table @gcctabopt
12055 @item -mdsp-packa
12056 @opindex mdsp-packa
12057 Passed down to the assembler to enable the DSP Pack A extensions.
12058 Also sets the preprocessor symbol @code{__Xdsp_packa}.
12060 @item -mdvbf
12061 @opindex mdvbf
12062 Passed down to the assembler to enable the dual viterbi butterfly
12063 extension.  Also sets the preprocessor symbol @code{__Xdvbf}.
12065 @c ARC700 4.10 extension instruction
12066 @item -mlock
12067 @opindex mlock
12068 Passed down to the assembler to enable the Locked Load/Store
12069 Conditional extension.  Also sets the preprocessor symbol
12070 @code{__Xlock}.
12072 @item -mmac-d16
12073 @opindex mmac-d16
12074 Passed down to the assembler.  Also sets the preprocessor symbol
12075 @code{__Xxmac_d16}.
12077 @item -mmac-24
12078 @opindex mmac-24
12079 Passed down to the assembler.  Also sets the preprocessor symbol
12080 @code{__Xxmac_24}.
12082 @c ARC700 4.10 extension instruction
12083 @item -mrtsc
12084 @opindex mrtsc
12085 Passed down to the assembler to enable the 64-bit Time-Stamp Counter
12086 extension instruction.  Also sets the preprocessor symbol
12087 @code{__Xrtsc}.
12089 @c ARC700 4.10 extension instruction
12090 @item -mswape
12091 @opindex mswape
12092 Passed down to the assembler to enable the swap byte ordering
12093 extension instruction.  Also sets the preprocessor symbol
12094 @code{__Xswape}.
12096 @item -mtelephony
12097 @opindex mtelephony
12098 Passed down to the assembler to enable dual and single operand
12099 instructions for telephony.  Also sets the preprocessor symbol
12100 @code{__Xtelephony}.
12102 @item -mxy
12103 @opindex mxy
12104 Passed down to the assembler to enable the XY Memory extension.  Also
12105 sets the preprocessor symbol @code{__Xxy}.
12107 @end table
12109 The following options control how the assembly code is annotated:
12111 @c Assembly annotation options
12112 @table @gcctabopt
12113 @item -misize
12114 @opindex misize
12115 Annotate assembler instructions with estimated addresses.
12117 @item -mannotate-align
12118 @opindex mannotate-align
12119 Explain what alignment considerations lead to the decision to make an
12120 instruction short or long.
12122 @end table
12124 The following options are passed through to the linker:
12126 @c options passed through to the linker
12127 @table @gcctabopt
12128 @item -marclinux
12129 @opindex marclinux
12130 Passed through to the linker, to specify use of the @code{arclinux} emulation.
12131 This option is enabled by default in tool chains built for
12132 @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
12133 when profiling is not requested.
12135 @item -marclinux_prof
12136 @opindex marclinux_prof
12137 Passed through to the linker, to specify use of the
12138 @code{arclinux_prof} emulation.  This option is enabled by default in
12139 tool chains built for @w{@code{arc-linux-uclibc}} and
12140 @w{@code{arceb-linux-uclibc}} targets when profiling is requested.
12142 @end table
12144 The following options control the semantics of generated code:
12146 @c semantically relevant code generation options
12147 @table @gcctabopt
12148 @item -mepilogue-cfi
12149 @opindex mepilogue-cfi
12150 Enable generation of call frame information for epilogues.
12152 @item -mno-epilogue-cfi
12153 @opindex mno-epilogue-cfi
12154 Disable generation of call frame information for epilogues.
12156 @item -mlong-calls
12157 @opindex mlong-calls
12158 Generate call insns as register indirect calls, thus providing access
12159 to the full 32-bit address range.
12161 @item -mmedium-calls
12162 @opindex mmedium-calls
12163 Don't use less than 25 bit addressing range for calls, which is the
12164 offset available for an unconditional branch-and-link
12165 instruction.  Conditional execution of function calls is suppressed, to
12166 allow use of the 25-bit range, rather than the 21-bit range with
12167 conditional branch-and-link.  This is the default for tool chains built
12168 for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets.
12170 @item -mno-sdata
12171 @opindex mno-sdata
12172 Do not generate sdata references.  This is the default for tool chains
12173 built for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}}
12174 targets.
12176 @item -mucb-mcount
12177 @opindex mucb-mcount
12178 Instrument with mcount calls as used in UCB code.  I.e. do the
12179 counting in the callee, not the caller.  By default ARC instrumentation
12180 counts in the caller.
12182 @item -mvolatile-cache
12183 @opindex mvolatile-cache
12184 Use ordinarily cached memory accesses for volatile references.  This is the
12185 default.
12187 @item -mno-volatile-cache
12188 @opindex mno-volatile-cache
12189 Enable cache bypass for volatile references.
12191 @end table
12193 The following options fine tune code generation:
12194 @c code generation tuning options
12195 @table @gcctabopt
12196 @item -malign-call
12197 @opindex malign-call
12198 Do alignment optimizations for call instructions.
12200 @item -mauto-modify-reg
12201 @opindex mauto-modify-reg
12202 Enable the use of pre/post modify with register displacement.
12204 @item -mbbit-peephole
12205 @opindex mbbit-peephole
12206 Enable bbit peephole2.
12208 @item -mno-brcc
12209 @opindex mno-brcc
12210 This option disables a target-specific pass in @file{arc_reorg} to
12211 generate @code{BRcc} instructions.  It has no effect on @code{BRcc}
12212 generation driven by the combiner pass.
12214 @item -mcase-vector-pcrel
12215 @opindex mcase-vector-pcrel
12216 Use pc-relative switch case tables - this enables case table shortening.
12217 This is the default for @option{-Os}.
12219 @item -mcompact-casesi
12220 @opindex mcompact-casesi
12221 Enable compact casesi pattern.
12222 This is the default for @option{-Os}.
12224 @item -mno-cond-exec
12225 @opindex mno-cond-exec
12226 Disable ARCompact specific pass to generate conditional execution instructions.
12227 Due to delay slot scheduling and interactions between operand numbers,
12228 literal sizes, instruction lengths, and the support for conditional execution,
12229 the target-independent pass to generate conditional execution is often lacking,
12230 so the ARC port has kept a special pass around that tries to find more
12231 conditional execution generating opportunities after register allocation,
12232 branch shortening, and delay slot scheduling have been done.  This pass
12233 generally, but not always, improves performance and code size, at the cost of
12234 extra compilation time, which is why there is an option to switch it off.
12235 If you have a problem with call instructions exceeding their allowable
12236 offset range because they are conditionalized, you should consider using
12237 @option{-mmedium-calls} instead.
12239 @item -mearly-cbranchsi
12240 @opindex mearly-cbranchsi
12241 Enable pre-reload use of the cbranchsi pattern.
12243 @item -mexpand-adddi
12244 @opindex mexpand-adddi
12245 Expand @code{adddi3} and @code{subdi3} at rtl generation time into
12246 @code{add.f}, @code{adc} etc.
12248 @item -mindexed-loads
12249 @opindex mindexed-loads
12250 Enable the use of indexed loads.  This can be problematic because some
12251 optimizers will then assume the that indexed stores exist, which is not
12252 the case.
12254 @item -mlra
12255 @opindex mlra
12256 Enable Local Register Allocation.  This is still experimental for ARC,
12257 so by default the compiler uses standard reload
12258 (i.e. @samp{-mno-lra}).
12260 @item -mlra-priority-none
12261 @opindex mlra-priority-none
12262 Don't indicate any priority for target registers.
12264 @item -mlra-priority-compact
12265 @opindex mlra-priority-compact
12266 Indicate target register priority for r0..r3 / r12..r15.
12268 @item -mlra-priority-noncompact
12269 @opindex mlra-priority-noncompact
12270 Reduce target regsiter priority for r0..r3 / r12..r15.
12272 @item -mno-millicode
12273 @opindex mno-millicode
12274 When optimizing for size (using @option{-Os}), prologues and epilogues
12275 that have to save or restore a large number of registers are often
12276 shortened by using call to a special function in libgcc; this is
12277 referred to as a @emph{millicode} call.  As these calls can pose
12278 performance issues, and/or cause linking issues when linking in a
12279 nonstandard way, this option is provided to turn off millicode call
12280 generation.
12282 @item -mmixed-code
12283 @opindex mmixed-code
12284 Tweak register allocation to help 16-bit instruction generation.
12285 This generally has the effect of decreasing the average instruction size
12286 while increasing the instruction count.
12288 @item -mq-class
12289 @opindex mq-class
12290 Enable 'q' instruction alternatives.
12291 This is the default for @option{-Os}.
12293 @item -mRcq
12294 @opindex mRcq
12295 Enable Rcq constraint handling - most short code generation depends on this.
12296 This is the default.
12298 @item -mRcw
12299 @opindex mRcw
12300 Enable Rcw constraint handling - ccfsm condexec mostly depends on this.
12301 This is the default.
12303 @item -msize-level=@var{level}
12304 @opindex msize-level
12305 Fine-tune size optimization with regards to instruction lengths and alignment.
12306 The recognized values for @var{level} are:
12307 @table @samp
12308 @item 0
12309 No size optimization.  This level is deprecated and treated like @samp{1}.
12311 @item 1
12312 Short instructions are used opportunistically.
12314 @item 2
12315 In addition, alignment of loops and of code after barriers are dropped.
12317 @item 3
12318 In addition, optional data alignment is dropped, and the option @option{Os} is enabled.
12320 @end table
12322 This defaults to @samp{3} when @option{-Os} is in effect.  Otherwise,
12323 the behavior when this is not set is equivalent to level @samp{1}.
12325 @item -mtune=@var{cpu}
12326 @opindex mtune
12327 Set instruction scheduling parameters for @var{cpu}, overriding any implied
12328 by @option{-mcpu=}.
12330 Supported values for @var{cpu} are
12332 @table @samp
12333 @item ARC600
12334 Tune for ARC600 cpu.
12336 @item ARC601
12337 Tune for ARC601 cpu.
12339 @item ARC700
12340 Tune for ARC700 cpu with standard multiplier block.
12342 @item ARC700-xmac
12343 Tune for ARC700 cpu with XMAC block.
12345 @item ARC725D
12346 Tune for ARC725D cpu.
12348 @item ARC750D
12349 Tune for ARC750D cpu.
12351 @end table
12353 @item -mmultcost=@var{num}
12354 @opindex mmultcost
12355 Cost to assume for a multiply instruction, with @samp{4} being equal to a
12356 normal instruction.
12358 @item -munalign-prob-threshold=@var{probability}
12359 @opindex munalign-prob-threshold
12360 Set probability threshold for unaligning branches.
12361 When tuning for @samp{ARC700} and optimizing for speed, branches without
12362 filled delay slot are preferably emitted unaligned and long, unless
12363 profiling indicates that the probability for the branch to be taken
12364 is below @var{probability}.  @xref{Cross-profiling}.
12365 The default is (REG_BR_PROB_BASE/2), i.e.@: 5000.
12367 @end table
12369 The following options are maintained for backward compatibility, but
12370 are now deprecated and will be removed in a future release:
12372 @c Deprecated options
12373 @table @gcctabopt
12375 @item -margonaut
12376 @opindex margonaut
12377 Obsolete FPX.
12379 @item -mbig-endian
12380 @opindex mbig-endian
12381 @itemx -EB
12382 @opindex EB
12383 Compile code for big endian targets.  Use of these options is now
12384 deprecated.  Users wanting big-endian code, should use the
12385 @w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets when
12386 building the tool chain, for which big-endian is the default.
12388 @item -mlittle-endian
12389 @opindex mlittle-endian
12390 @itemx -EL
12391 @opindex EL
12392 Compile code for little endian targets.  Use of these options is now
12393 deprecated.  Users wanting little-endian code should use the
12394 @w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets when
12395 building the tool chain, for which little-endian is the default.
12397 @item -mbarrel_shifter
12398 @opindex mbarrel_shifter
12399 Replaced by @samp{-mbarrel-shifter}
12401 @item -mdpfp_compact
12402 @opindex mdpfp_compact
12403 Replaced by @samp{-mdpfp-compact}
12405 @item -mdpfp_fast
12406 @opindex mdpfp_fast
12407 Replaced by @samp{-mdpfp-fast}
12409 @item -mdsp_packa
12410 @opindex mdsp_packa
12411 Replaced by @samp{-mdsp-packa}
12413 @item -mEA
12414 @opindex mEA
12415 Replaced by @samp{-mea}
12417 @item -mmac_24
12418 @opindex mmac_24
12419 Replaced by @samp{-mmac-24}
12421 @item -mmac_d16
12422 @opindex mmac_d16
12423 Replaced by @samp{-mmac-d16}
12425 @item -mspfp_compact
12426 @opindex mspfp_compact
12427 Replaced by @samp{-mspfp-compact}
12429 @item -mspfp_fast
12430 @opindex mspfp_fast
12431 Replaced by @samp{-mspfp-fast}
12433 @item -mtune=@var{cpu}
12434 @opindex mtune
12435 Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
12436 @samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
12437 @samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively
12439 @item -multcost=@var{num}
12440 @opindex multcost
12441 Replaced by @samp{-mmultcost}.
12443 @end table
12445 @node ARM Options
12446 @subsection ARM Options
12447 @cindex ARM options
12449 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
12450 architectures:
12452 @table @gcctabopt
12453 @item -mabi=@var{name}
12454 @opindex mabi
12455 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
12456 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
12458 @item -mapcs-frame
12459 @opindex mapcs-frame
12460 Generate a stack frame that is compliant with the ARM Procedure Call
12461 Standard for all functions, even if this is not strictly necessary for
12462 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
12463 with this option causes the stack frames not to be generated for
12464 leaf functions.  The default is @option{-mno-apcs-frame}.
12466 @item -mapcs
12467 @opindex mapcs
12468 This is a synonym for @option{-mapcs-frame}.
12470 @ignore
12471 @c not currently implemented
12472 @item -mapcs-stack-check
12473 @opindex mapcs-stack-check
12474 Generate code to check the amount of stack space available upon entry to
12475 every function (that actually uses some stack space).  If there is
12476 insufficient space available then either the function
12477 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} is
12478 called, depending upon the amount of stack space required.  The runtime
12479 system is required to provide these functions.  The default is
12480 @option{-mno-apcs-stack-check}, since this produces smaller code.
12482 @c not currently implemented
12483 @item -mapcs-float
12484 @opindex mapcs-float
12485 Pass floating-point arguments using the floating-point registers.  This is
12486 one of the variants of the APCS@.  This option is recommended if the
12487 target hardware has a floating-point unit or if a lot of floating-point
12488 arithmetic is going to be performed by the code.  The default is
12489 @option{-mno-apcs-float}, since the size of integer-only code is 
12490 slightly increased if @option{-mapcs-float} is used.
12492 @c not currently implemented
12493 @item -mapcs-reentrant
12494 @opindex mapcs-reentrant
12495 Generate reentrant, position-independent code.  The default is
12496 @option{-mno-apcs-reentrant}.
12497 @end ignore
12499 @item -mthumb-interwork
12500 @opindex mthumb-interwork
12501 Generate code that supports calling between the ARM and Thumb
12502 instruction sets.  Without this option, on pre-v5 architectures, the
12503 two instruction sets cannot be reliably used inside one program.  The
12504 default is @option{-mno-thumb-interwork}, since slightly larger code
12505 is generated when @option{-mthumb-interwork} is specified.  In AAPCS
12506 configurations this option is meaningless.
12508 @item -mno-sched-prolog
12509 @opindex mno-sched-prolog
12510 Prevent the reordering of instructions in the function prologue, or the
12511 merging of those instruction with the instructions in the function's
12512 body.  This means that all functions start with a recognizable set
12513 of instructions (or in fact one of a choice from a small set of
12514 different function prologues), and this information can be used to
12515 locate the start of functions inside an executable piece of code.  The
12516 default is @option{-msched-prolog}.
12518 @item -mfloat-abi=@var{name}
12519 @opindex mfloat-abi
12520 Specifies which floating-point ABI to use.  Permissible values
12521 are: @samp{soft}, @samp{softfp} and @samp{hard}.
12523 Specifying @samp{soft} causes GCC to generate output containing
12524 library calls for floating-point operations.
12525 @samp{softfp} allows the generation of code using hardware floating-point
12526 instructions, but still uses the soft-float calling conventions.
12527 @samp{hard} allows generation of floating-point instructions
12528 and uses FPU-specific calling conventions.
12530 The default depends on the specific target configuration.  Note that
12531 the hard-float and soft-float ABIs are not link-compatible; you must
12532 compile your entire program with the same ABI, and link with a
12533 compatible set of libraries.
12535 @item -mlittle-endian
12536 @opindex mlittle-endian
12537 Generate code for a processor running in little-endian mode.  This is
12538 the default for all standard configurations.
12540 @item -mbig-endian
12541 @opindex mbig-endian
12542 Generate code for a processor running in big-endian mode; the default is
12543 to compile code for a little-endian processor.
12545 @item -march=@var{name}
12546 @opindex march
12547 This specifies the name of the target ARM architecture.  GCC uses this
12548 name to determine what kind of instructions it can emit when generating
12549 assembly code.  This option can be used in conjunction with or instead
12550 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
12551 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
12552 @samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
12553 @samp{armv6}, @samp{armv6j},
12554 @samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
12555 @samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m}, @samp{armv7e-m},
12556 @samp{armv7ve}, @samp{armv8-a}, @samp{armv8-a+crc},
12557 @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
12559 @option{-march=armv7ve} is the armv7-a architecture with virtualization
12560 extensions.
12562 @option{-march=armv8-a+crc} enables code generation for the ARMv8-A
12563 architecture together with the optional CRC32 extensions.
12565 @option{-march=native} causes the compiler to auto-detect the architecture
12566 of the build computer.  At present, this feature is only supported on
12567 Linux, and not all architectures are recognized.  If the auto-detect is
12568 unsuccessful the option has no effect.
12570 @item -mtune=@var{name}
12571 @opindex mtune
12572 This option specifies the name of the target ARM processor for
12573 which GCC should tune the performance of the code.
12574 For some ARM implementations better performance can be obtained by using
12575 this option.
12576 Permissible names are: @samp{arm2}, @samp{arm250},
12577 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
12578 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
12579 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
12580 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
12581 @samp{arm720},
12582 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
12583 @samp{arm710t}, @samp{arm720t}, @samp{arm740t},
12584 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
12585 @samp{strongarm1110},
12586 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
12587 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
12588 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
12589 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
12590 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
12591 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
12592 @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
12593 @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8}, @samp{cortex-a9},
12594 @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a53}, @samp{cortex-a57},
12595 @samp{cortex-r4},
12596 @samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-m4},
12597 @samp{cortex-m3},
12598 @samp{cortex-m1},
12599 @samp{cortex-m0},
12600 @samp{cortex-m0plus},
12601 @samp{marvell-pj4},
12602 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312},
12603 @samp{fa526}, @samp{fa626},
12604 @samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}.
12606 Additionally, this option can specify that GCC should tune the performance
12607 of the code for a big.LITTLE system.  Permissible names are:
12608 @samp{cortex-a15.cortex-a7}, @samp{cortex-a57.cortex-a53}.
12610 @option{-mtune=generic-@var{arch}} specifies that GCC should tune the
12611 performance for a blend of processors within architecture @var{arch}.
12612 The aim is to generate code that run well on the current most popular
12613 processors, balancing between optimizations that benefit some CPUs in the
12614 range, and avoiding performance pitfalls of other CPUs.  The effects of
12615 this option may change in future GCC versions as CPU models come and go.
12617 @option{-mtune=native} causes the compiler to auto-detect the CPU
12618 of the build computer.  At present, this feature is only supported on
12619 Linux, and not all architectures are recognized.  If the auto-detect is
12620 unsuccessful the option has no effect.
12622 @item -mcpu=@var{name}
12623 @opindex mcpu
12624 This specifies the name of the target ARM processor.  GCC uses this name
12625 to derive the name of the target ARM architecture (as if specified
12626 by @option{-march}) and the ARM processor type for which to tune for
12627 performance (as if specified by @option{-mtune}).  Where this option
12628 is used in conjunction with @option{-march} or @option{-mtune},
12629 those options take precedence over the appropriate part of this option.
12631 Permissible names for this option are the same as those for
12632 @option{-mtune}.
12634 @option{-mcpu=generic-@var{arch}} is also permissible, and is
12635 equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
12636 See @option{-mtune} for more information.
12638 @option{-mcpu=native} causes the compiler to auto-detect the CPU
12639 of the build computer.  At present, this feature is only supported on
12640 Linux, and not all architectures are recognized.  If the auto-detect is
12641 unsuccessful the option has no effect.
12643 @item -mfpu=@var{name}
12644 @opindex mfpu
12645 This specifies what floating-point hardware (or hardware emulation) is
12646 available on the target.  Permissible names are: @samp{vfp}, @samp{vfpv3},
12647 @samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
12648 @samp{vfpv3xd-fp16}, @samp{neon}, @samp{neon-fp16}, @samp{vfpv4},
12649 @samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
12650 @samp{fp-armv8}, @samp{neon-fp-armv8}, and @samp{crypto-neon-fp-armv8}.
12652 If @option{-msoft-float} is specified this specifies the format of
12653 floating-point values.
12655 If the selected floating-point hardware includes the NEON extension
12656 (e.g. @option{-mfpu}=@samp{neon}), note that floating-point
12657 operations are not generated by GCC's auto-vectorization pass unless
12658 @option{-funsafe-math-optimizations} is also specified.  This is
12659 because NEON hardware does not fully implement the IEEE 754 standard for
12660 floating-point arithmetic (in particular denormal values are treated as
12661 zero), so the use of NEON instructions may lead to a loss of precision.
12663 @item -mfp16-format=@var{name}
12664 @opindex mfp16-format
12665 Specify the format of the @code{__fp16} half-precision floating-point type.
12666 Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
12667 the default is @samp{none}, in which case the @code{__fp16} type is not
12668 defined.  @xref{Half-Precision}, for more information.
12670 @item -mstructure-size-boundary=@var{n}
12671 @opindex mstructure-size-boundary
12672 The sizes of all structures and unions are rounded up to a multiple
12673 of the number of bits set by this option.  Permissible values are 8, 32
12674 and 64.  The default value varies for different toolchains.  For the COFF
12675 targeted toolchain the default value is 8.  A value of 64 is only allowed
12676 if the underlying ABI supports it.
12678 Specifying a larger number can produce faster, more efficient code, but
12679 can also increase the size of the program.  Different values are potentially
12680 incompatible.  Code compiled with one value cannot necessarily expect to
12681 work with code or libraries compiled with another value, if they exchange
12682 information using structures or unions.
12684 @item -mabort-on-noreturn
12685 @opindex mabort-on-noreturn
12686 Generate a call to the function @code{abort} at the end of a
12687 @code{noreturn} function.  It is executed if the function tries to
12688 return.
12690 @item -mlong-calls
12691 @itemx -mno-long-calls
12692 @opindex mlong-calls
12693 @opindex mno-long-calls
12694 Tells the compiler to perform function calls by first loading the
12695 address of the function into a register and then performing a subroutine
12696 call on this register.  This switch is needed if the target function
12697 lies outside of the 64-megabyte addressing range of the offset-based
12698 version of subroutine call instruction.
12700 Even if this switch is enabled, not all function calls are turned
12701 into long calls.  The heuristic is that static functions, functions
12702 that have the @samp{short-call} attribute, functions that are inside
12703 the scope of a @samp{#pragma no_long_calls} directive, and functions whose
12704 definitions have already been compiled within the current compilation
12705 unit are not turned into long calls.  The exceptions to this rule are
12706 that weak function definitions, functions with the @samp{long-call}
12707 attribute or the @samp{section} attribute, and functions that are within
12708 the scope of a @samp{#pragma long_calls} directive are always
12709 turned into long calls.
12711 This feature is not enabled by default.  Specifying
12712 @option{-mno-long-calls} restores the default behavior, as does
12713 placing the function calls within the scope of a @samp{#pragma
12714 long_calls_off} directive.  Note these switches have no effect on how
12715 the compiler generates code to handle function calls via function
12716 pointers.
12718 @item -msingle-pic-base
12719 @opindex msingle-pic-base
12720 Treat the register used for PIC addressing as read-only, rather than
12721 loading it in the prologue for each function.  The runtime system is
12722 responsible for initializing this register with an appropriate value
12723 before execution begins.
12725 @item -mpic-register=@var{reg}
12726 @opindex mpic-register
12727 Specify the register to be used for PIC addressing.
12728 For standard PIC base case, the default will be any suitable register
12729 determined by compiler.  For single PIC base case, the default is
12730 @samp{R9} if target is EABI based or stack-checking is enabled,
12731 otherwise the default is @samp{R10}.
12733 @item -mpic-data-is-text-relative
12734 @opindex mpic-data-is-text-relative
12735 Assume that each data segments are relative to text segment at load time.
12736 Therefore, it permits addressing data using PC-relative operations.
12737 This option is on by default for targets other than VxWorks RTP.
12739 @item -mpoke-function-name
12740 @opindex mpoke-function-name
12741 Write the name of each function into the text section, directly
12742 preceding the function prologue.  The generated code is similar to this:
12744 @smallexample
12745      t0
12746          .ascii "arm_poke_function_name", 0
12747          .align
12748      t1
12749          .word 0xff000000 + (t1 - t0)
12750      arm_poke_function_name
12751          mov     ip, sp
12752          stmfd   sp!, @{fp, ip, lr, pc@}
12753          sub     fp, ip, #4
12754 @end smallexample
12756 When performing a stack backtrace, code can inspect the value of
12757 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
12758 location @code{pc - 12} and the top 8 bits are set, then we know that
12759 there is a function name embedded immediately preceding this location
12760 and has length @code{((pc[-3]) & 0xff000000)}.
12762 @item -mthumb
12763 @itemx -marm
12764 @opindex marm
12765 @opindex mthumb
12767 Select between generating code that executes in ARM and Thumb
12768 states.  The default for most configurations is to generate code
12769 that executes in ARM state, but the default can be changed by
12770 configuring GCC with the @option{--with-mode=}@var{state}
12771 configure option.
12773 @item -mtpcs-frame
12774 @opindex mtpcs-frame
12775 Generate a stack frame that is compliant with the Thumb Procedure Call
12776 Standard for all non-leaf functions.  (A leaf function is one that does
12777 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
12779 @item -mtpcs-leaf-frame
12780 @opindex mtpcs-leaf-frame
12781 Generate a stack frame that is compliant with the Thumb Procedure Call
12782 Standard for all leaf functions.  (A leaf function is one that does
12783 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
12785 @item -mcallee-super-interworking
12786 @opindex mcallee-super-interworking
12787 Gives all externally visible functions in the file being compiled an ARM
12788 instruction set header which switches to Thumb mode before executing the
12789 rest of the function.  This allows these functions to be called from
12790 non-interworking code.  This option is not valid in AAPCS configurations
12791 because interworking is enabled by default.
12793 @item -mcaller-super-interworking
12794 @opindex mcaller-super-interworking
12795 Allows calls via function pointers (including virtual functions) to
12796 execute correctly regardless of whether the target code has been
12797 compiled for interworking or not.  There is a small overhead in the cost
12798 of executing a function pointer if this option is enabled.  This option
12799 is not valid in AAPCS configurations because interworking is enabled
12800 by default.
12802 @item -mtp=@var{name}
12803 @opindex mtp
12804 Specify the access model for the thread local storage pointer.  The valid
12805 models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
12806 @option{cp15}, which fetches the thread pointer from @code{cp15} directly
12807 (supported in the arm6k architecture), and @option{auto}, which uses the
12808 best available method for the selected processor.  The default setting is
12809 @option{auto}.
12811 @item -mtls-dialect=@var{dialect}
12812 @opindex mtls-dialect
12813 Specify the dialect to use for accessing thread local storage.  Two
12814 @var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
12815 @samp{gnu} dialect selects the original GNU scheme for supporting
12816 local and global dynamic TLS models.  The @samp{gnu2} dialect
12817 selects the GNU descriptor scheme, which provides better performance
12818 for shared libraries.  The GNU descriptor scheme is compatible with
12819 the original scheme, but does require new assembler, linker and
12820 library support.  Initial and local exec TLS models are unaffected by
12821 this option and always use the original scheme.
12823 @item -mword-relocations
12824 @opindex mword-relocations
12825 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
12826 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
12827 loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
12828 is specified.
12830 @item -mfix-cortex-m3-ldrd
12831 @opindex mfix-cortex-m3-ldrd
12832 Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
12833 with overlapping destination and base registers are used.  This option avoids
12834 generating these instructions.  This option is enabled by default when
12835 @option{-mcpu=cortex-m3} is specified.
12837 @item -munaligned-access
12838 @itemx -mno-unaligned-access
12839 @opindex munaligned-access
12840 @opindex mno-unaligned-access
12841 Enables (or disables) reading and writing of 16- and 32- bit values
12842 from addresses that are not 16- or 32- bit aligned.  By default
12843 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
12844 architectures, and enabled for all other architectures.  If unaligned
12845 access is not enabled then words in packed data structures will be
12846 accessed a byte at a time.
12848 The ARM attribute @code{Tag_CPU_unaligned_access} will be set in the
12849 generated object file to either true or false, depending upon the
12850 setting of this option.  If unaligned access is enabled then the
12851 preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} will also be
12852 defined.
12854 @item -mneon-for-64bits
12855 @opindex mneon-for-64bits
12856 Enables using Neon to handle scalar 64-bits operations. This is
12857 disabled by default since the cost of moving data from core registers
12858 to Neon is high.
12860 @item -mslow-flash-data
12861 @opindex mslow-flash-data
12862 Assume loading data from flash is slower than fetching instruction.
12863 Therefore literal load is minimized for better performance.
12864 This option is only supported when compiling for ARMv7 M-profile and
12865 off by default.
12867 @item -mrestrict-it
12868 @opindex mrestrict-it
12869 Restricts generation of IT blocks to conform to the rules of ARMv8.
12870 IT blocks can only contain a single 16-bit instruction from a select
12871 set of instructions. This option is on by default for ARMv8 Thumb mode.
12872 @end table
12874 @node AVR Options
12875 @subsection AVR Options
12876 @cindex AVR Options
12878 These options are defined for AVR implementations:
12880 @table @gcctabopt
12881 @item -mmcu=@var{mcu}
12882 @opindex mmcu
12883 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
12885 The default for this option is@tie{}@code{avr2}.
12887 GCC supports the following AVR devices and ISAs:
12889 @include avr-mmcu.texi
12891 @item -maccumulate-args
12892 @opindex maccumulate-args
12893 Accumulate outgoing function arguments and acquire/release the needed
12894 stack space for outgoing function arguments once in function
12895 prologue/epilogue.  Without this option, outgoing arguments are pushed
12896 before calling a function and popped afterwards.
12898 Popping the arguments after the function call can be expensive on
12899 AVR so that accumulating the stack space might lead to smaller
12900 executables because arguments need not to be removed from the
12901 stack after such a function call.
12903 This option can lead to reduced code size for functions that perform
12904 several calls to functions that get their arguments on the stack like
12905 calls to printf-like functions.
12907 @item -mbranch-cost=@var{cost}
12908 @opindex mbranch-cost
12909 Set the branch costs for conditional branch instructions to
12910 @var{cost}.  Reasonable values for @var{cost} are small, non-negative
12911 integers. The default branch cost is 0.
12913 @item -mcall-prologues
12914 @opindex mcall-prologues
12915 Functions prologues/epilogues are expanded as calls to appropriate
12916 subroutines.  Code size is smaller.
12918 @item -mint8
12919 @opindex mint8
12920 Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
12921 @code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
12922 and @code{long long} is 4 bytes.  Please note that this option does not
12923 conform to the C standards, but it results in smaller code
12924 size.
12926 @item -mno-interrupts
12927 @opindex mno-interrupts
12928 Generated code is not compatible with hardware interrupts.
12929 Code size is smaller.
12931 @item -mrelax
12932 @opindex mrelax
12933 Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
12934 @code{RCALL} resp.@: @code{RJMP} instruction if applicable.
12935 Setting @code{-mrelax} just adds the @code{--relax} option to the
12936 linker command line when the linker is called.
12938 Jump relaxing is performed by the linker because jump offsets are not
12939 known before code is located. Therefore, the assembler code generated by the
12940 compiler is the same, but the instructions in the executable may
12941 differ from instructions in the assembler code.
12943 Relaxing must be turned on if linker stubs are needed, see the
12944 section on @code{EIND} and linker stubs below.
12946 @item -msp8
12947 @opindex msp8
12948 Treat the stack pointer register as an 8-bit register,
12949 i.e.@: assume the high byte of the stack pointer is zero.
12950 In general, you don't need to set this option by hand.
12952 This option is used internally by the compiler to select and
12953 build multilibs for architectures @code{avr2} and @code{avr25}.
12954 These architectures mix devices with and without @code{SPH}.
12955 For any setting other than @code{-mmcu=avr2} or @code{-mmcu=avr25}
12956 the compiler driver will add or remove this option from the compiler
12957 proper's command line, because the compiler then knows if the device
12958 or architecture has an 8-bit stack pointer and thus no @code{SPH}
12959 register or not.
12961 @item -mstrict-X
12962 @opindex mstrict-X
12963 Use address register @code{X} in a way proposed by the hardware.  This means
12964 that @code{X} is only used in indirect, post-increment or
12965 pre-decrement addressing.
12967 Without this option, the @code{X} register may be used in the same way
12968 as @code{Y} or @code{Z} which then is emulated by additional
12969 instructions.  
12970 For example, loading a value with @code{X+const} addressing with a
12971 small non-negative @code{const < 64} to a register @var{Rn} is
12972 performed as
12974 @example
12975 adiw r26, const   ; X += const
12976 ld   @var{Rn}, X        ; @var{Rn} = *X
12977 sbiw r26, const   ; X -= const
12978 @end example
12980 @item -mtiny-stack
12981 @opindex mtiny-stack
12982 Only change the lower 8@tie{}bits of the stack pointer.
12984 @item -Waddr-space-convert
12985 @opindex Waddr-space-convert
12986 Warn about conversions between address spaces in the case where the
12987 resulting address space is not contained in the incoming address space.
12988 @end table
12990 @subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash
12991 @cindex @code{EIND}
12992 Pointers in the implementation are 16@tie{}bits wide.
12993 The address of a function or label is represented as word address so
12994 that indirect jumps and calls can target any code address in the
12995 range of 64@tie{}Ki words.
12997 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
12998 bytes of program memory space, there is a special function register called
12999 @code{EIND} that serves as most significant part of the target address
13000 when @code{EICALL} or @code{EIJMP} instructions are used.
13002 Indirect jumps and calls on these devices are handled as follows by
13003 the compiler and are subject to some limitations:
13005 @itemize @bullet
13007 @item
13008 The compiler never sets @code{EIND}.
13010 @item
13011 The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP}
13012 instructions or might read @code{EIND} directly in order to emulate an
13013 indirect call/jump by means of a @code{RET} instruction.
13015 @item
13016 The compiler assumes that @code{EIND} never changes during the startup
13017 code or during the application. In particular, @code{EIND} is not
13018 saved/restored in function or interrupt service routine
13019 prologue/epilogue.
13021 @item
13022 For indirect calls to functions and computed goto, the linker
13023 generates @emph{stubs}. Stubs are jump pads sometimes also called
13024 @emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
13025 The stub contains a direct jump to the desired address.
13027 @item
13028 Linker relaxation must be turned on so that the linker will generate
13029 the stubs correctly an all situaltion. See the compiler option
13030 @code{-mrelax} and the linler option @code{--relax}.
13031 There are corner cases where the linker is supposed to generate stubs
13032 but aborts without relaxation and without a helpful error message.
13034 @item
13035 The default linker script is arranged for code with @code{EIND = 0}.
13036 If code is supposed to work for a setup with @code{EIND != 0}, a custom
13037 linker script has to be used in order to place the sections whose
13038 name start with @code{.trampolines} into the segment where @code{EIND}
13039 points to.
13041 @item
13042 The startup code from libgcc never sets @code{EIND}.
13043 Notice that startup code is a blend of code from libgcc and AVR-LibC.
13044 For the impact of AVR-LibC on @code{EIND}, see the
13045 @w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}.
13047 @item
13048 It is legitimate for user-specific startup code to set up @code{EIND}
13049 early, for example by means of initialization code located in
13050 section @code{.init3}. Such code runs prior to general startup code
13051 that initializes RAM and calls constructors, but after the bit
13052 of startup code from AVR-LibC that sets @code{EIND} to the segment
13053 where the vector table is located.
13054 @example
13055 #include <avr/io.h>
13057 static void
13058 __attribute__((section(".init3"),naked,used,no_instrument_function))
13059 init3_set_eind (void)
13061   __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
13062                   "out %i0,r24" :: "n" (&EIND) : "r24","memory");
13064 @end example
13066 @noindent
13067 The @code{__trampolines_start} symbol is defined in the linker script.
13069 @item
13070 Stubs are generated automatically by the linker if
13071 the following two conditions are met:
13072 @itemize @minus
13074 @item The address of a label is taken by means of the @code{gs} modifier
13075 (short for @emph{generate stubs}) like so:
13076 @example
13077 LDI r24, lo8(gs(@var{func}))
13078 LDI r25, hi8(gs(@var{func}))
13079 @end example
13080 @item The final location of that label is in a code segment
13081 @emph{outside} the segment where the stubs are located.
13082 @end itemize
13084 @item
13085 The compiler emits such @code{gs} modifiers for code labels in the
13086 following situations:
13087 @itemize @minus
13088 @item Taking address of a function or code label.
13089 @item Computed goto.
13090 @item If prologue-save function is used, see @option{-mcall-prologues}
13091 command-line option.
13092 @item Switch/case dispatch tables. If you do not want such dispatch
13093 tables you can specify the @option{-fno-jump-tables} command-line option.
13094 @item C and C++ constructors/destructors called during startup/shutdown.
13095 @item If the tools hit a @code{gs()} modifier explained above.
13096 @end itemize
13098 @item
13099 Jumping to non-symbolic addresses like so is @emph{not} supported:
13101 @example
13102 int main (void)
13104     /* Call function at word address 0x2 */
13105     return ((int(*)(void)) 0x2)();
13107 @end example
13109 Instead, a stub has to be set up, i.e.@: the function has to be called
13110 through a symbol (@code{func_4} in the example):
13112 @example
13113 int main (void)
13115     extern int func_4 (void);
13117     /* Call function at byte address 0x4 */
13118     return func_4();
13120 @end example
13122 and the application be linked with @code{-Wl,--defsym,func_4=0x4}.
13123 Alternatively, @code{func_4} can be defined in the linker script.
13124 @end itemize
13126 @subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
13127 @cindex @code{RAMPD}
13128 @cindex @code{RAMPX}
13129 @cindex @code{RAMPY}
13130 @cindex @code{RAMPZ}
13131 Some AVR devices support memories larger than the 64@tie{}KiB range
13132 that can be accessed with 16-bit pointers.  To access memory locations
13133 outside this 64@tie{}KiB range, the contentent of a @code{RAMP}
13134 register is used as high part of the address:
13135 The @code{X}, @code{Y}, @code{Z} address register is concatenated
13136 with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
13137 register, respectively, to get a wide address. Similarly,
13138 @code{RAMPD} is used together with direct addressing.
13140 @itemize
13141 @item
13142 The startup code initializes the @code{RAMP} special function
13143 registers with zero.
13145 @item
13146 If a @ref{AVR Named Address Spaces,named address space} other than
13147 generic or @code{__flash} is used, then @code{RAMPZ} is set
13148 as needed before the operation.
13150 @item
13151 If the device supports RAM larger than 64@tie{}KiB and the compiler
13152 needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
13153 is reset to zero after the operation.
13155 @item
13156 If the device comes with a specific @code{RAMP} register, the ISR
13157 prologue/epilogue saves/restores that SFR and initializes it with
13158 zero in case the ISR code might (implicitly) use it.
13160 @item
13161 RAM larger than 64@tie{}KiB is not supported by GCC for AVR targets.
13162 If you use inline assembler to read from locations outside the
13163 16-bit address range and change one of the @code{RAMP} registers,
13164 you must reset it to zero after the access.
13166 @end itemize
13168 @subsubsection AVR Built-in Macros
13170 GCC defines several built-in macros so that the user code can test
13171 for the presence or absence of features.  Almost any of the following
13172 built-in macros are deduced from device capabilities and thus
13173 triggered by the @code{-mmcu=} command-line option.
13175 For even more AVR-specific built-in macros see
13176 @ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.
13178 @table @code
13180 @item __AVR_ARCH__
13181 Build-in macro that resolves to a decimal number that identifies the
13182 architecture and depends on the @code{-mmcu=@var{mcu}} option.
13183 Possible values are:
13185 @code{2}, @code{25}, @code{3}, @code{31}, @code{35},
13186 @code{4}, @code{5}, @code{51}, @code{6}, @code{102}, @code{104},
13187 @code{105}, @code{106}, @code{107}
13189 for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3},
13190 @code{avr31}, @code{avr35}, @code{avr4}, @code{avr5}, @code{avr51},
13191 @code{avr6}, @code{avrxmega2}, @code{avrxmega4}, @code{avrxmega5},
13192 @code{avrxmega6}, @code{avrxmega7}, respectively.
13193 If @var{mcu} specifies a device, this built-in macro is set
13194 accordingly. For example, with @code{-mmcu=atmega8} the macro will be
13195 defined to @code{4}.
13197 @item __AVR_@var{Device}__
13198 Setting @code{-mmcu=@var{device}} defines this built-in macro which reflects
13199 the device's name. For example, @code{-mmcu=atmega8} defines the
13200 built-in macro @code{__AVR_ATmega8__}, @code{-mmcu=attiny261a} defines
13201 @code{__AVR_ATtiny261A__}, etc.
13203 The built-in macros' names follow
13204 the scheme @code{__AVR_@var{Device}__} where @var{Device} is
13205 the device name as from the AVR user manual. The difference between
13206 @var{Device} in the built-in macro and @var{device} in
13207 @code{-mmcu=@var{device}} is that the latter is always lowercase.
13209 If @var{device} is not a device but only a core architecture like
13210 @code{avr51}, this macro will not be defined.
13212 @item   __AVR_DEVICE_NAME__
13213 Setting @code{-mmcu=@var{device}} defines this built-in macro to
13214 the device's name. For example, with @code{-mmcu=atmega8} the macro
13215 will be defined to @code{atmega8}.
13217 If @var{device} is not a device but only a core architecture like
13218 @code{avr51}, this macro will not be defined.
13220 @item __AVR_XMEGA__
13221 The device / architecture belongs to the XMEGA family of devices.
13223 @item __AVR_HAVE_ELPM__
13224 The device has the the @code{ELPM} instruction.
13226 @item __AVR_HAVE_ELPMX__
13227 The device has the @code{ELPM R@var{n},Z} and @code{ELPM
13228 R@var{n},Z+} instructions.
13230 @item __AVR_HAVE_MOVW__
13231 The device has the @code{MOVW} instruction to perform 16-bit
13232 register-register moves.
13234 @item __AVR_HAVE_LPMX__
13235 The device has the @code{LPM R@var{n},Z} and
13236 @code{LPM R@var{n},Z+} instructions.
13238 @item __AVR_HAVE_MUL__
13239 The device has a hardware multiplier. 
13241 @item __AVR_HAVE_JMP_CALL__
13242 The device has the @code{JMP} and @code{CALL} instructions.
13243 This is the case for devices with at least 16@tie{}KiB of program
13244 memory.
13246 @item __AVR_HAVE_EIJMP_EICALL__
13247 @itemx __AVR_3_BYTE_PC__
13248 The device has the @code{EIJMP} and @code{EICALL} instructions.
13249 This is the case for devices with more than 128@tie{}KiB of program memory.
13250 This also means that the program counter
13251 (PC) is 3@tie{}bytes wide.
13253 @item __AVR_2_BYTE_PC__
13254 The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
13255 with up to 128@tie{}KiB of program memory.
13257 @item __AVR_HAVE_8BIT_SP__
13258 @itemx __AVR_HAVE_16BIT_SP__
13259 The stack pointer (SP) register is treated as 8-bit respectively
13260 16-bit register by the compiler.
13261 The definition of these macros is affected by @code{-mtiny-stack}.
13263 @item __AVR_HAVE_SPH__
13264 @itemx __AVR_SP8__
13265 The device has the SPH (high part of stack pointer) special function
13266 register or has an 8-bit stack pointer, respectively.
13267 The definition of these macros is affected by @code{-mmcu=} and
13268 in the cases of @code{-mmcu=avr2} and @code{-mmcu=avr25} also
13269 by @code{-msp8}.
13271 @item __AVR_HAVE_RAMPD__
13272 @itemx __AVR_HAVE_RAMPX__
13273 @itemx __AVR_HAVE_RAMPY__
13274 @itemx __AVR_HAVE_RAMPZ__
13275 The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
13276 @code{RAMPZ} special function register, respectively.
13278 @item __NO_INTERRUPTS__
13279 This macro reflects the @code{-mno-interrupts} command line option.
13281 @item __AVR_ERRATA_SKIP__
13282 @itemx __AVR_ERRATA_SKIP_JMP_CALL__
13283 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
13284 instructions because of a hardware erratum.  Skip instructions are
13285 @code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
13286 The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
13287 set.
13289 @item __AVR_ISA_RMW__
13290 The device has Read-Modify-Write instructions (XCH, LAC, LAS and LAT).
13292 @item __AVR_SFR_OFFSET__=@var{offset}
13293 Instructions that can address I/O special function registers directly
13294 like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
13295 address as if addressed by an instruction to access RAM like @code{LD}
13296 or @code{STS}. This offset depends on the device architecture and has
13297 to be subtracted from the RAM address in order to get the
13298 respective I/O@tie{}address.
13300 @item __WITH_AVRLIBC__
13301 The compiler is configured to be used together with AVR-Libc.
13302 See the @code{--with-avrlibc} configure option.
13304 @end table
13306 @node Blackfin Options
13307 @subsection Blackfin Options
13308 @cindex Blackfin Options
13310 @table @gcctabopt
13311 @item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
13312 @opindex mcpu=
13313 Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
13314 can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
13315 @samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
13316 @samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
13317 @samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
13318 @samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
13319 @samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
13320 @samp{bf561}, @samp{bf592}.
13322 The optional @var{sirevision} specifies the silicon revision of the target
13323 Blackfin processor.  Any workarounds available for the targeted silicon revision
13324 are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
13325 If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
13326 are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
13327 hexadecimal digits representing the major and minor numbers in the silicon
13328 revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
13329 is not defined.  If @var{sirevision} is @samp{any}, the
13330 @code{__SILICON_REVISION__} is defined to be @code{0xffff}.
13331 If this optional @var{sirevision} is not used, GCC assumes the latest known
13332 silicon revision of the targeted Blackfin processor.
13334 GCC defines a preprocessor macro for the specified @var{cpu}.
13335 For the @samp{bfin-elf} toolchain, this option causes the hardware BSP
13336 provided by libgloss to be linked in if @option{-msim} is not given.
13338 Without this option, @samp{bf532} is used as the processor by default.
13340 Note that support for @samp{bf561} is incomplete.  For @samp{bf561},
13341 only the preprocessor macro is defined.
13343 @item -msim
13344 @opindex msim
13345 Specifies that the program will be run on the simulator.  This causes
13346 the simulator BSP provided by libgloss to be linked in.  This option
13347 has effect only for @samp{bfin-elf} toolchain.
13348 Certain other options, such as @option{-mid-shared-library} and
13349 @option{-mfdpic}, imply @option{-msim}.
13351 @item -momit-leaf-frame-pointer
13352 @opindex momit-leaf-frame-pointer
13353 Don't keep the frame pointer in a register for leaf functions.  This
13354 avoids the instructions to save, set up and restore frame pointers and
13355 makes an extra register available in leaf functions.  The option
13356 @option{-fomit-frame-pointer} removes the frame pointer for all functions,
13357 which might make debugging harder.
13359 @item -mspecld-anomaly
13360 @opindex mspecld-anomaly
13361 When enabled, the compiler ensures that the generated code does not
13362 contain speculative loads after jump instructions. If this option is used,
13363 @code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
13365 @item -mno-specld-anomaly
13366 @opindex mno-specld-anomaly
13367 Don't generate extra code to prevent speculative loads from occurring.
13369 @item -mcsync-anomaly
13370 @opindex mcsync-anomaly
13371 When enabled, the compiler ensures that the generated code does not
13372 contain CSYNC or SSYNC instructions too soon after conditional branches.
13373 If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
13375 @item -mno-csync-anomaly
13376 @opindex mno-csync-anomaly
13377 Don't generate extra code to prevent CSYNC or SSYNC instructions from
13378 occurring too soon after a conditional branch.
13380 @item -mlow-64k
13381 @opindex mlow-64k
13382 When enabled, the compiler is free to take advantage of the knowledge that
13383 the entire program fits into the low 64k of memory.
13385 @item -mno-low-64k
13386 @opindex mno-low-64k
13387 Assume that the program is arbitrarily large.  This is the default.
13389 @item -mstack-check-l1
13390 @opindex mstack-check-l1
13391 Do stack checking using information placed into L1 scratchpad memory by the
13392 uClinux kernel.
13394 @item -mid-shared-library
13395 @opindex mid-shared-library
13396 Generate code that supports shared libraries via the library ID method.
13397 This allows for execute in place and shared libraries in an environment
13398 without virtual memory management.  This option implies @option{-fPIC}.
13399 With a @samp{bfin-elf} target, this option implies @option{-msim}.
13401 @item -mno-id-shared-library
13402 @opindex mno-id-shared-library
13403 Generate code that doesn't assume ID-based shared libraries are being used.
13404 This is the default.
13406 @item -mleaf-id-shared-library
13407 @opindex mleaf-id-shared-library
13408 Generate code that supports shared libraries via the library ID method,
13409 but assumes that this library or executable won't link against any other
13410 ID shared libraries.  That allows the compiler to use faster code for jumps
13411 and calls.
13413 @item -mno-leaf-id-shared-library
13414 @opindex mno-leaf-id-shared-library
13415 Do not assume that the code being compiled won't link against any ID shared
13416 libraries.  Slower code is generated for jump and call insns.
13418 @item -mshared-library-id=n
13419 @opindex mshared-library-id
13420 Specifies the identification number of the ID-based shared library being
13421 compiled.  Specifying a value of 0 generates more compact code; specifying
13422 other values forces the allocation of that number to the current
13423 library but is no more space- or time-efficient than omitting this option.
13425 @item -msep-data
13426 @opindex msep-data
13427 Generate code that allows the data segment to be located in a different
13428 area of memory from the text segment.  This allows for execute in place in
13429 an environment without virtual memory management by eliminating relocations
13430 against the text section.
13432 @item -mno-sep-data
13433 @opindex mno-sep-data
13434 Generate code that assumes that the data segment follows the text segment.
13435 This is the default.
13437 @item -mlong-calls
13438 @itemx -mno-long-calls
13439 @opindex mlong-calls
13440 @opindex mno-long-calls
13441 Tells the compiler to perform function calls by first loading the
13442 address of the function into a register and then performing a subroutine
13443 call on this register.  This switch is needed if the target function
13444 lies outside of the 24-bit addressing range of the offset-based
13445 version of subroutine call instruction.
13447 This feature is not enabled by default.  Specifying
13448 @option{-mno-long-calls} restores the default behavior.  Note these
13449 switches have no effect on how the compiler generates code to handle
13450 function calls via function pointers.
13452 @item -mfast-fp
13453 @opindex mfast-fp
13454 Link with the fast floating-point library. This library relaxes some of
13455 the IEEE floating-point standard's rules for checking inputs against
13456 Not-a-Number (NAN), in the interest of performance.
13458 @item -minline-plt
13459 @opindex minline-plt
13460 Enable inlining of PLT entries in function calls to functions that are
13461 not known to bind locally.  It has no effect without @option{-mfdpic}.
13463 @item -mmulticore
13464 @opindex mmulticore
13465 Build a standalone application for multicore Blackfin processors. 
13466 This option causes proper start files and link scripts supporting 
13467 multicore to be used, and defines the macro @code{__BFIN_MULTICORE}. 
13468 It can only be used with @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. 
13470 This option can be used with @option{-mcorea} or @option{-mcoreb}, which
13471 selects the one-application-per-core programming model.  Without
13472 @option{-mcorea} or @option{-mcoreb}, the single-application/dual-core
13473 programming model is used. In this model, the main function of Core B
13474 should be named as @code{coreb_main}.
13476 If this option is not used, the single-core application programming
13477 model is used.
13479 @item -mcorea
13480 @opindex mcorea
13481 Build a standalone application for Core A of BF561 when using
13482 the one-application-per-core programming model. Proper start files
13483 and link scripts are used to support Core A, and the macro
13484 @code{__BFIN_COREA} is defined.
13485 This option can only be used in conjunction with @option{-mmulticore}.
13487 @item -mcoreb
13488 @opindex mcoreb
13489 Build a standalone application for Core B of BF561 when using
13490 the one-application-per-core programming model. Proper start files
13491 and link scripts are used to support Core B, and the macro
13492 @code{__BFIN_COREB} is defined. When this option is used, @code{coreb_main}
13493 should be used instead of @code{main}. 
13494 This option can only be used in conjunction with @option{-mmulticore}.
13496 @item -msdram
13497 @opindex msdram
13498 Build a standalone application for SDRAM. Proper start files and
13499 link scripts are used to put the application into SDRAM, and the macro
13500 @code{__BFIN_SDRAM} is defined.
13501 The loader should initialize SDRAM before loading the application.
13503 @item -micplb
13504 @opindex micplb
13505 Assume that ICPLBs are enabled at run time.  This has an effect on certain
13506 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
13507 are enabled; for standalone applications the default is off.
13508 @end table
13510 @node C6X Options
13511 @subsection C6X Options
13512 @cindex C6X Options
13514 @table @gcctabopt
13515 @item -march=@var{name}
13516 @opindex march
13517 This specifies the name of the target architecture.  GCC uses this
13518 name to determine what kind of instructions it can emit when generating
13519 assembly code.  Permissible names are: @samp{c62x},
13520 @samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.
13522 @item -mbig-endian
13523 @opindex mbig-endian
13524 Generate code for a big-endian target.
13526 @item -mlittle-endian
13527 @opindex mlittle-endian
13528 Generate code for a little-endian target.  This is the default.
13530 @item -msim
13531 @opindex msim
13532 Choose startup files and linker script suitable for the simulator.
13534 @item -msdata=default
13535 @opindex msdata=default
13536 Put small global and static data in the @samp{.neardata} section,
13537 which is pointed to by register @code{B14}.  Put small uninitialized
13538 global and static data in the @samp{.bss} section, which is adjacent
13539 to the @samp{.neardata} section.  Put small read-only data into the
13540 @samp{.rodata} section.  The corresponding sections used for large
13541 pieces of data are @samp{.fardata}, @samp{.far} and @samp{.const}.
13543 @item -msdata=all
13544 @opindex msdata=all
13545 Put all data, not just small objects, into the sections reserved for
13546 small data, and use addressing relative to the @code{B14} register to
13547 access them.
13549 @item -msdata=none
13550 @opindex msdata=none
13551 Make no use of the sections reserved for small data, and use absolute
13552 addresses to access all data.  Put all initialized global and static
13553 data in the @samp{.fardata} section, and all uninitialized data in the
13554 @samp{.far} section.  Put all constant data into the @samp{.const}
13555 section.
13556 @end table
13558 @node CRIS Options
13559 @subsection CRIS Options
13560 @cindex CRIS Options
13562 These options are defined specifically for the CRIS ports.
13564 @table @gcctabopt
13565 @item -march=@var{architecture-type}
13566 @itemx -mcpu=@var{architecture-type}
13567 @opindex march
13568 @opindex mcpu
13569 Generate code for the specified architecture.  The choices for
13570 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
13571 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
13572 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
13573 @samp{v10}.
13575 @item -mtune=@var{architecture-type}
13576 @opindex mtune
13577 Tune to @var{architecture-type} everything applicable about the generated
13578 code, except for the ABI and the set of available instructions.  The
13579 choices for @var{architecture-type} are the same as for
13580 @option{-march=@var{architecture-type}}.
13582 @item -mmax-stack-frame=@var{n}
13583 @opindex mmax-stack-frame
13584 Warn when the stack frame of a function exceeds @var{n} bytes.
13586 @item -metrax4
13587 @itemx -metrax100
13588 @opindex metrax4
13589 @opindex metrax100
13590 The options @option{-metrax4} and @option{-metrax100} are synonyms for
13591 @option{-march=v3} and @option{-march=v8} respectively.
13593 @item -mmul-bug-workaround
13594 @itemx -mno-mul-bug-workaround
13595 @opindex mmul-bug-workaround
13596 @opindex mno-mul-bug-workaround
13597 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
13598 models where it applies.  This option is active by default.
13600 @item -mpdebug
13601 @opindex mpdebug
13602 Enable CRIS-specific verbose debug-related information in the assembly
13603 code.  This option also has the effect of turning off the @samp{#NO_APP}
13604 formatted-code indicator to the assembler at the beginning of the
13605 assembly file.
13607 @item -mcc-init
13608 @opindex mcc-init
13609 Do not use condition-code results from previous instruction; always emit
13610 compare and test instructions before use of condition codes.
13612 @item -mno-side-effects
13613 @opindex mno-side-effects
13614 Do not emit instructions with side effects in addressing modes other than
13615 post-increment.
13617 @item -mstack-align
13618 @itemx -mno-stack-align
13619 @itemx -mdata-align
13620 @itemx -mno-data-align
13621 @itemx -mconst-align
13622 @itemx -mno-const-align
13623 @opindex mstack-align
13624 @opindex mno-stack-align
13625 @opindex mdata-align
13626 @opindex mno-data-align
13627 @opindex mconst-align
13628 @opindex mno-const-align
13629 These options (@samp{no-} options) arrange (eliminate arrangements) for the
13630 stack frame, individual data and constants to be aligned for the maximum
13631 single data access size for the chosen CPU model.  The default is to
13632 arrange for 32-bit alignment.  ABI details such as structure layout are
13633 not affected by these options.
13635 @item -m32-bit
13636 @itemx -m16-bit
13637 @itemx -m8-bit
13638 @opindex m32-bit
13639 @opindex m16-bit
13640 @opindex m8-bit
13641 Similar to the stack- data- and const-align options above, these options
13642 arrange for stack frame, writable data and constants to all be 32-bit,
13643 16-bit or 8-bit aligned.  The default is 32-bit alignment.
13645 @item -mno-prologue-epilogue
13646 @itemx -mprologue-epilogue
13647 @opindex mno-prologue-epilogue
13648 @opindex mprologue-epilogue
13649 With @option{-mno-prologue-epilogue}, the normal function prologue and
13650 epilogue which set up the stack frame are omitted and no return
13651 instructions or return sequences are generated in the code.  Use this
13652 option only together with visual inspection of the compiled code: no
13653 warnings or errors are generated when call-saved registers must be saved,
13654 or storage for local variables needs to be allocated.
13656 @item -mno-gotplt
13657 @itemx -mgotplt
13658 @opindex mno-gotplt
13659 @opindex mgotplt
13660 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
13661 instruction sequences that load addresses for functions from the PLT part
13662 of the GOT rather than (traditional on other architectures) calls to the
13663 PLT@.  The default is @option{-mgotplt}.
13665 @item -melf
13666 @opindex melf
13667 Legacy no-op option only recognized with the cris-axis-elf and
13668 cris-axis-linux-gnu targets.
13670 @item -mlinux
13671 @opindex mlinux
13672 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
13674 @item -sim
13675 @opindex sim
13676 This option, recognized for the cris-axis-elf, arranges
13677 to link with input-output functions from a simulator library.  Code,
13678 initialized data and zero-initialized data are allocated consecutively.
13680 @item -sim2
13681 @opindex sim2
13682 Like @option{-sim}, but pass linker options to locate initialized data at
13683 0x40000000 and zero-initialized data at 0x80000000.
13684 @end table
13686 @node CR16 Options
13687 @subsection CR16 Options
13688 @cindex CR16 Options
13690 These options are defined specifically for the CR16 ports.
13692 @table @gcctabopt
13694 @item -mmac
13695 @opindex mmac
13696 Enable the use of multiply-accumulate instructions. Disabled by default.
13698 @item -mcr16cplus
13699 @itemx -mcr16c
13700 @opindex mcr16cplus
13701 @opindex mcr16c
13702 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 
13703 is default.
13705 @item -msim
13706 @opindex msim
13707 Links the library libsim.a which is in compatible with simulator. Applicable
13708 to ELF compiler only.
13710 @item -mint32
13711 @opindex mint32
13712 Choose integer type as 32-bit wide.
13714 @item -mbit-ops
13715 @opindex mbit-ops
13716 Generates @code{sbit}/@code{cbit} instructions for bit manipulations.
13718 @item -mdata-model=@var{model}
13719 @opindex mdata-model
13720 Choose a data model. The choices for @var{model} are @samp{near},
13721 @samp{far} or @samp{medium}. @samp{medium} is default.
13722 However, @samp{far} is not valid with @option{-mcr16c}, as the
13723 CR16C architecture does not support the far data model.
13724 @end table
13726 @node Darwin Options
13727 @subsection Darwin Options
13728 @cindex Darwin options
13730 These options are defined for all architectures running the Darwin operating
13731 system.
13733 FSF GCC on Darwin does not create ``fat'' object files; it creates
13734 an object file for the single architecture that GCC was built to
13735 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
13736 @option{-arch} options are used; it does so by running the compiler or
13737 linker multiple times and joining the results together with
13738 @file{lipo}.
13740 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
13741 @samp{i686}) is determined by the flags that specify the ISA
13742 that GCC is targeting, like @option{-mcpu} or @option{-march}.  The
13743 @option{-force_cpusubtype_ALL} option can be used to override this.
13745 The Darwin tools vary in their behavior when presented with an ISA
13746 mismatch.  The assembler, @file{as}, only permits instructions to
13747 be used that are valid for the subtype of the file it is generating,
13748 so you cannot put 64-bit instructions in a @samp{ppc750} object file.
13749 The linker for shared libraries, @file{/usr/bin/libtool}, fails
13750 and prints an error if asked to create a shared library with a less
13751 restrictive subtype than its input files (for instance, trying to put
13752 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
13753 for executables, @command{ld}, quietly gives the executable the most
13754 restrictive subtype of any of its input files.
13756 @table @gcctabopt
13757 @item -F@var{dir}
13758 @opindex F
13759 Add the framework directory @var{dir} to the head of the list of
13760 directories to be searched for header files.  These directories are
13761 interleaved with those specified by @option{-I} options and are
13762 scanned in a left-to-right order.
13764 A framework directory is a directory with frameworks in it.  A
13765 framework is a directory with a @file{Headers} and/or
13766 @file{PrivateHeaders} directory contained directly in it that ends
13767 in @file{.framework}.  The name of a framework is the name of this
13768 directory excluding the @file{.framework}.  Headers associated with
13769 the framework are found in one of those two directories, with
13770 @file{Headers} being searched first.  A subframework is a framework
13771 directory that is in a framework's @file{Frameworks} directory.
13772 Includes of subframework headers can only appear in a header of a
13773 framework that contains the subframework, or in a sibling subframework
13774 header.  Two subframeworks are siblings if they occur in the same
13775 framework.  A subframework should not have the same name as a
13776 framework; a warning is issued if this is violated.  Currently a
13777 subframework cannot have subframeworks; in the future, the mechanism
13778 may be extended to support this.  The standard frameworks can be found
13779 in @file{/System/Library/Frameworks} and
13780 @file{/Library/Frameworks}.  An example include looks like
13781 @code{#include <Framework/header.h>}, where @file{Framework} denotes
13782 the name of the framework and @file{header.h} is found in the
13783 @file{PrivateHeaders} or @file{Headers} directory.
13785 @item -iframework@var{dir}
13786 @opindex iframework
13787 Like @option{-F} except the directory is a treated as a system
13788 directory.  The main difference between this @option{-iframework} and
13789 @option{-F} is that with @option{-iframework} the compiler does not
13790 warn about constructs contained within header files found via
13791 @var{dir}.  This option is valid only for the C family of languages.
13793 @item -gused
13794 @opindex gused
13795 Emit debugging information for symbols that are used.  For stabs
13796 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
13797 This is by default ON@.
13799 @item -gfull
13800 @opindex gfull
13801 Emit debugging information for all symbols and types.
13803 @item -mmacosx-version-min=@var{version}
13804 The earliest version of MacOS X that this executable will run on
13805 is @var{version}.  Typical values of @var{version} include @code{10.1},
13806 @code{10.2}, and @code{10.3.9}.
13808 If the compiler was built to use the system's headers by default,
13809 then the default for this option is the system version on which the
13810 compiler is running, otherwise the default is to make choices that
13811 are compatible with as many systems and code bases as possible.
13813 @item -mkernel
13814 @opindex mkernel
13815 Enable kernel development mode.  The @option{-mkernel} option sets
13816 @option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
13817 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
13818 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
13819 applicable.  This mode also sets @option{-mno-altivec},
13820 @option{-msoft-float}, @option{-fno-builtin} and
13821 @option{-mlong-branch} for PowerPC targets.
13823 @item -mone-byte-bool
13824 @opindex mone-byte-bool
13825 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
13826 By default @samp{sizeof(bool)} is @samp{4} when compiling for
13827 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
13828 option has no effect on x86.
13830 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
13831 to generate code that is not binary compatible with code generated
13832 without that switch.  Using this switch may require recompiling all
13833 other modules in a program, including system libraries.  Use this
13834 switch to conform to a non-default data model.
13836 @item -mfix-and-continue
13837 @itemx -ffix-and-continue
13838 @itemx -findirect-data
13839 @opindex mfix-and-continue
13840 @opindex ffix-and-continue
13841 @opindex findirect-data
13842 Generate code suitable for fast turnaround development, such as to
13843 allow GDB to dynamically load @code{.o} files into already-running
13844 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
13845 are provided for backwards compatibility.
13847 @item -all_load
13848 @opindex all_load
13849 Loads all members of static archive libraries.
13850 See man ld(1) for more information.
13852 @item -arch_errors_fatal
13853 @opindex arch_errors_fatal
13854 Cause the errors having to do with files that have the wrong architecture
13855 to be fatal.
13857 @item -bind_at_load
13858 @opindex bind_at_load
13859 Causes the output file to be marked such that the dynamic linker will
13860 bind all undefined references when the file is loaded or launched.
13862 @item -bundle
13863 @opindex bundle
13864 Produce a Mach-o bundle format file.
13865 See man ld(1) for more information.
13867 @item -bundle_loader @var{executable}
13868 @opindex bundle_loader
13869 This option specifies the @var{executable} that will load the build
13870 output file being linked.  See man ld(1) for more information.
13872 @item -dynamiclib
13873 @opindex dynamiclib
13874 When passed this option, GCC produces a dynamic library instead of
13875 an executable when linking, using the Darwin @file{libtool} command.
13877 @item -force_cpusubtype_ALL
13878 @opindex force_cpusubtype_ALL
13879 This causes GCC's output file to have the @var{ALL} subtype, instead of
13880 one controlled by the @option{-mcpu} or @option{-march} option.
13882 @item -allowable_client  @var{client_name}
13883 @itemx -client_name
13884 @itemx -compatibility_version
13885 @itemx -current_version
13886 @itemx -dead_strip
13887 @itemx -dependency-file
13888 @itemx -dylib_file
13889 @itemx -dylinker_install_name
13890 @itemx -dynamic
13891 @itemx -exported_symbols_list
13892 @itemx -filelist
13893 @need 800
13894 @itemx -flat_namespace
13895 @itemx -force_flat_namespace
13896 @itemx -headerpad_max_install_names
13897 @itemx -image_base
13898 @itemx -init
13899 @itemx -install_name
13900 @itemx -keep_private_externs
13901 @itemx -multi_module
13902 @itemx -multiply_defined
13903 @itemx -multiply_defined_unused
13904 @need 800
13905 @itemx -noall_load
13906 @itemx -no_dead_strip_inits_and_terms
13907 @itemx -nofixprebinding
13908 @itemx -nomultidefs
13909 @itemx -noprebind
13910 @itemx -noseglinkedit
13911 @itemx -pagezero_size
13912 @itemx -prebind
13913 @itemx -prebind_all_twolevel_modules
13914 @itemx -private_bundle
13915 @need 800
13916 @itemx -read_only_relocs
13917 @itemx -sectalign
13918 @itemx -sectobjectsymbols
13919 @itemx -whyload
13920 @itemx -seg1addr
13921 @itemx -sectcreate
13922 @itemx -sectobjectsymbols
13923 @itemx -sectorder
13924 @itemx -segaddr
13925 @itemx -segs_read_only_addr
13926 @need 800
13927 @itemx -segs_read_write_addr
13928 @itemx -seg_addr_table
13929 @itemx -seg_addr_table_filename
13930 @itemx -seglinkedit
13931 @itemx -segprot
13932 @itemx -segs_read_only_addr
13933 @itemx -segs_read_write_addr
13934 @itemx -single_module
13935 @itemx -static
13936 @itemx -sub_library
13937 @need 800
13938 @itemx -sub_umbrella
13939 @itemx -twolevel_namespace
13940 @itemx -umbrella
13941 @itemx -undefined
13942 @itemx -unexported_symbols_list
13943 @itemx -weak_reference_mismatches
13944 @itemx -whatsloaded
13945 @opindex allowable_client
13946 @opindex client_name
13947 @opindex compatibility_version
13948 @opindex current_version
13949 @opindex dead_strip
13950 @opindex dependency-file
13951 @opindex dylib_file
13952 @opindex dylinker_install_name
13953 @opindex dynamic
13954 @opindex exported_symbols_list
13955 @opindex filelist
13956 @opindex flat_namespace
13957 @opindex force_flat_namespace
13958 @opindex headerpad_max_install_names
13959 @opindex image_base
13960 @opindex init
13961 @opindex install_name
13962 @opindex keep_private_externs
13963 @opindex multi_module
13964 @opindex multiply_defined
13965 @opindex multiply_defined_unused
13966 @opindex noall_load
13967 @opindex no_dead_strip_inits_and_terms
13968 @opindex nofixprebinding
13969 @opindex nomultidefs
13970 @opindex noprebind
13971 @opindex noseglinkedit
13972 @opindex pagezero_size
13973 @opindex prebind
13974 @opindex prebind_all_twolevel_modules
13975 @opindex private_bundle
13976 @opindex read_only_relocs
13977 @opindex sectalign
13978 @opindex sectobjectsymbols
13979 @opindex whyload
13980 @opindex seg1addr
13981 @opindex sectcreate
13982 @opindex sectobjectsymbols
13983 @opindex sectorder
13984 @opindex segaddr
13985 @opindex segs_read_only_addr
13986 @opindex segs_read_write_addr
13987 @opindex seg_addr_table
13988 @opindex seg_addr_table_filename
13989 @opindex seglinkedit
13990 @opindex segprot
13991 @opindex segs_read_only_addr
13992 @opindex segs_read_write_addr
13993 @opindex single_module
13994 @opindex static
13995 @opindex sub_library
13996 @opindex sub_umbrella
13997 @opindex twolevel_namespace
13998 @opindex umbrella
13999 @opindex undefined
14000 @opindex unexported_symbols_list
14001 @opindex weak_reference_mismatches
14002 @opindex whatsloaded
14003 These options are passed to the Darwin linker.  The Darwin linker man page
14004 describes them in detail.
14005 @end table
14007 @node DEC Alpha Options
14008 @subsection DEC Alpha Options
14010 These @samp{-m} options are defined for the DEC Alpha implementations:
14012 @table @gcctabopt
14013 @item -mno-soft-float
14014 @itemx -msoft-float
14015 @opindex mno-soft-float
14016 @opindex msoft-float
14017 Use (do not use) the hardware floating-point instructions for
14018 floating-point operations.  When @option{-msoft-float} is specified,
14019 functions in @file{libgcc.a} are used to perform floating-point
14020 operations.  Unless they are replaced by routines that emulate the
14021 floating-point operations, or compiled in such a way as to call such
14022 emulations routines, these routines issue floating-point
14023 operations.   If you are compiling for an Alpha without floating-point
14024 operations, you must ensure that the library is built so as not to call
14025 them.
14027 Note that Alpha implementations without floating-point operations are
14028 required to have floating-point registers.
14030 @item -mfp-reg
14031 @itemx -mno-fp-regs
14032 @opindex mfp-reg
14033 @opindex mno-fp-regs
14034 Generate code that uses (does not use) the floating-point register set.
14035 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
14036 register set is not used, floating-point operands are passed in integer
14037 registers as if they were integers and floating-point results are passed
14038 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
14039 so any function with a floating-point argument or return value called by code
14040 compiled with @option{-mno-fp-regs} must also be compiled with that
14041 option.
14043 A typical use of this option is building a kernel that does not use,
14044 and hence need not save and restore, any floating-point registers.
14046 @item -mieee
14047 @opindex mieee
14048 The Alpha architecture implements floating-point hardware optimized for
14049 maximum performance.  It is mostly compliant with the IEEE floating-point
14050 standard.  However, for full compliance, software assistance is
14051 required.  This option generates code fully IEEE-compliant code
14052 @emph{except} that the @var{inexact-flag} is not maintained (see below).
14053 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
14054 defined during compilation.  The resulting code is less efficient but is
14055 able to correctly support denormalized numbers and exceptional IEEE
14056 values such as not-a-number and plus/minus infinity.  Other Alpha
14057 compilers call this option @option{-ieee_with_no_inexact}.
14059 @item -mieee-with-inexact
14060 @opindex mieee-with-inexact
14061 This is like @option{-mieee} except the generated code also maintains
14062 the IEEE @var{inexact-flag}.  Turning on this option causes the
14063 generated code to implement fully-compliant IEEE math.  In addition to
14064 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
14065 macro.  On some Alpha implementations the resulting code may execute
14066 significantly slower than the code generated by default.  Since there is
14067 very little code that depends on the @var{inexact-flag}, you should
14068 normally not specify this option.  Other Alpha compilers call this
14069 option @option{-ieee_with_inexact}.
14071 @item -mfp-trap-mode=@var{trap-mode}
14072 @opindex mfp-trap-mode
14073 This option controls what floating-point related traps are enabled.
14074 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
14075 The trap mode can be set to one of four values:
14077 @table @samp
14078 @item n
14079 This is the default (normal) setting.  The only traps that are enabled
14080 are the ones that cannot be disabled in software (e.g., division by zero
14081 trap).
14083 @item u
14084 In addition to the traps enabled by @samp{n}, underflow traps are enabled
14085 as well.
14087 @item su
14088 Like @samp{u}, but the instructions are marked to be safe for software
14089 completion (see Alpha architecture manual for details).
14091 @item sui
14092 Like @samp{su}, but inexact traps are enabled as well.
14093 @end table
14095 @item -mfp-rounding-mode=@var{rounding-mode}
14096 @opindex mfp-rounding-mode
14097 Selects the IEEE rounding mode.  Other Alpha compilers call this option
14098 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
14101 @table @samp
14102 @item n
14103 Normal IEEE rounding mode.  Floating-point numbers are rounded towards
14104 the nearest machine number or towards the even machine number in case
14105 of a tie.
14107 @item m
14108 Round towards minus infinity.
14110 @item c
14111 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
14113 @item d
14114 Dynamic rounding mode.  A field in the floating-point control register
14115 (@var{fpcr}, see Alpha architecture reference manual) controls the
14116 rounding mode in effect.  The C library initializes this register for
14117 rounding towards plus infinity.  Thus, unless your program modifies the
14118 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
14119 @end table
14121 @item -mtrap-precision=@var{trap-precision}
14122 @opindex mtrap-precision
14123 In the Alpha architecture, floating-point traps are imprecise.  This
14124 means without software assistance it is impossible to recover from a
14125 floating trap and program execution normally needs to be terminated.
14126 GCC can generate code that can assist operating system trap handlers
14127 in determining the exact location that caused a floating-point trap.
14128 Depending on the requirements of an application, different levels of
14129 precisions can be selected:
14131 @table @samp
14132 @item p
14133 Program precision.  This option is the default and means a trap handler
14134 can only identify which program caused a floating-point exception.
14136 @item f
14137 Function precision.  The trap handler can determine the function that
14138 caused a floating-point exception.
14140 @item i
14141 Instruction precision.  The trap handler can determine the exact
14142 instruction that caused a floating-point exception.
14143 @end table
14145 Other Alpha compilers provide the equivalent options called
14146 @option{-scope_safe} and @option{-resumption_safe}.
14148 @item -mieee-conformant
14149 @opindex mieee-conformant
14150 This option marks the generated code as IEEE conformant.  You must not
14151 use this option unless you also specify @option{-mtrap-precision=i} and either
14152 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
14153 is to emit the line @samp{.eflag 48} in the function prologue of the
14154 generated assembly file.
14156 @item -mbuild-constants
14157 @opindex mbuild-constants
14158 Normally GCC examines a 32- or 64-bit integer constant to
14159 see if it can construct it from smaller constants in two or three
14160 instructions.  If it cannot, it outputs the constant as a literal and
14161 generates code to load it from the data segment at run time.
14163 Use this option to require GCC to construct @emph{all} integer constants
14164 using code, even if it takes more instructions (the maximum is six).
14166 You typically use this option to build a shared library dynamic
14167 loader.  Itself a shared library, it must relocate itself in memory
14168 before it can find the variables and constants in its own data segment.
14170 @item -mbwx
14171 @itemx -mno-bwx
14172 @itemx -mcix
14173 @itemx -mno-cix
14174 @itemx -mfix
14175 @itemx -mno-fix
14176 @itemx -mmax
14177 @itemx -mno-max
14178 @opindex mbwx
14179 @opindex mno-bwx
14180 @opindex mcix
14181 @opindex mno-cix
14182 @opindex mfix
14183 @opindex mno-fix
14184 @opindex mmax
14185 @opindex mno-max
14186 Indicate whether GCC should generate code to use the optional BWX,
14187 CIX, FIX and MAX instruction sets.  The default is to use the instruction
14188 sets supported by the CPU type specified via @option{-mcpu=} option or that
14189 of the CPU on which GCC was built if none is specified.
14191 @item -mfloat-vax
14192 @itemx -mfloat-ieee
14193 @opindex mfloat-vax
14194 @opindex mfloat-ieee
14195 Generate code that uses (does not use) VAX F and G floating-point
14196 arithmetic instead of IEEE single and double precision.
14198 @item -mexplicit-relocs
14199 @itemx -mno-explicit-relocs
14200 @opindex mexplicit-relocs
14201 @opindex mno-explicit-relocs
14202 Older Alpha assemblers provided no way to generate symbol relocations
14203 except via assembler macros.  Use of these macros does not allow
14204 optimal instruction scheduling.  GNU binutils as of version 2.12
14205 supports a new syntax that allows the compiler to explicitly mark
14206 which relocations should apply to which instructions.  This option
14207 is mostly useful for debugging, as GCC detects the capabilities of
14208 the assembler when it is built and sets the default accordingly.
14210 @item -msmall-data
14211 @itemx -mlarge-data
14212 @opindex msmall-data
14213 @opindex mlarge-data
14214 When @option{-mexplicit-relocs} is in effect, static data is
14215 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
14216 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
14217 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
14218 16-bit relocations off of the @code{$gp} register.  This limits the
14219 size of the small data area to 64KB, but allows the variables to be
14220 directly accessed via a single instruction.
14222 The default is @option{-mlarge-data}.  With this option the data area
14223 is limited to just below 2GB@.  Programs that require more than 2GB of
14224 data must use @code{malloc} or @code{mmap} to allocate the data in the
14225 heap instead of in the program's data segment.
14227 When generating code for shared libraries, @option{-fpic} implies
14228 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
14230 @item -msmall-text
14231 @itemx -mlarge-text
14232 @opindex msmall-text
14233 @opindex mlarge-text
14234 When @option{-msmall-text} is used, the compiler assumes that the
14235 code of the entire program (or shared library) fits in 4MB, and is
14236 thus reachable with a branch instruction.  When @option{-msmall-data}
14237 is used, the compiler can assume that all local symbols share the
14238 same @code{$gp} value, and thus reduce the number of instructions
14239 required for a function call from 4 to 1.
14241 The default is @option{-mlarge-text}.
14243 @item -mcpu=@var{cpu_type}
14244 @opindex mcpu
14245 Set the instruction set and instruction scheduling parameters for
14246 machine type @var{cpu_type}.  You can specify either the @samp{EV}
14247 style name or the corresponding chip number.  GCC supports scheduling
14248 parameters for the EV4, EV5 and EV6 family of processors and
14249 chooses the default values for the instruction set from the processor
14250 you specify.  If you do not specify a processor type, GCC defaults
14251 to the processor on which the compiler was built.
14253 Supported values for @var{cpu_type} are
14255 @table @samp
14256 @item ev4
14257 @itemx ev45
14258 @itemx 21064
14259 Schedules as an EV4 and has no instruction set extensions.
14261 @item ev5
14262 @itemx 21164
14263 Schedules as an EV5 and has no instruction set extensions.
14265 @item ev56
14266 @itemx 21164a
14267 Schedules as an EV5 and supports the BWX extension.
14269 @item pca56
14270 @itemx 21164pc
14271 @itemx 21164PC
14272 Schedules as an EV5 and supports the BWX and MAX extensions.
14274 @item ev6
14275 @itemx 21264
14276 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
14278 @item ev67
14279 @itemx 21264a
14280 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
14281 @end table
14283 Native toolchains also support the value @samp{native},
14284 which selects the best architecture option for the host processor.
14285 @option{-mcpu=native} has no effect if GCC does not recognize
14286 the processor.
14288 @item -mtune=@var{cpu_type}
14289 @opindex mtune
14290 Set only the instruction scheduling parameters for machine type
14291 @var{cpu_type}.  The instruction set is not changed.
14293 Native toolchains also support the value @samp{native},
14294 which selects the best architecture option for the host processor.
14295 @option{-mtune=native} has no effect if GCC does not recognize
14296 the processor.
14298 @item -mmemory-latency=@var{time}
14299 @opindex mmemory-latency
14300 Sets the latency the scheduler should assume for typical memory
14301 references as seen by the application.  This number is highly
14302 dependent on the memory access patterns used by the application
14303 and the size of the external cache on the machine.
14305 Valid options for @var{time} are
14307 @table @samp
14308 @item @var{number}
14309 A decimal number representing clock cycles.
14311 @item L1
14312 @itemx L2
14313 @itemx L3
14314 @itemx main
14315 The compiler contains estimates of the number of clock cycles for
14316 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
14317 (also called Dcache, Scache, and Bcache), as well as to main memory.
14318 Note that L3 is only valid for EV5.
14320 @end table
14321 @end table
14323 @node FR30 Options
14324 @subsection FR30 Options
14325 @cindex FR30 Options
14327 These options are defined specifically for the FR30 port.
14329 @table @gcctabopt
14331 @item -msmall-model
14332 @opindex msmall-model
14333 Use the small address space model.  This can produce smaller code, but
14334 it does assume that all symbolic values and addresses fit into a
14335 20-bit range.
14337 @item -mno-lsim
14338 @opindex mno-lsim
14339 Assume that runtime support has been provided and so there is no need
14340 to include the simulator library (@file{libsim.a}) on the linker
14341 command line.
14343 @end table
14345 @node FRV Options
14346 @subsection FRV Options
14347 @cindex FRV Options
14349 @table @gcctabopt
14350 @item -mgpr-32
14351 @opindex mgpr-32
14353 Only use the first 32 general-purpose registers.
14355 @item -mgpr-64
14356 @opindex mgpr-64
14358 Use all 64 general-purpose registers.
14360 @item -mfpr-32
14361 @opindex mfpr-32
14363 Use only the first 32 floating-point registers.
14365 @item -mfpr-64
14366 @opindex mfpr-64
14368 Use all 64 floating-point registers.
14370 @item -mhard-float
14371 @opindex mhard-float
14373 Use hardware instructions for floating-point operations.
14375 @item -msoft-float
14376 @opindex msoft-float
14378 Use library routines for floating-point operations.
14380 @item -malloc-cc
14381 @opindex malloc-cc
14383 Dynamically allocate condition code registers.
14385 @item -mfixed-cc
14386 @opindex mfixed-cc
14388 Do not try to dynamically allocate condition code registers, only
14389 use @code{icc0} and @code{fcc0}.
14391 @item -mdword
14392 @opindex mdword
14394 Change ABI to use double word insns.
14396 @item -mno-dword
14397 @opindex mno-dword
14399 Do not use double word instructions.
14401 @item -mdouble
14402 @opindex mdouble
14404 Use floating-point double instructions.
14406 @item -mno-double
14407 @opindex mno-double
14409 Do not use floating-point double instructions.
14411 @item -mmedia
14412 @opindex mmedia
14414 Use media instructions.
14416 @item -mno-media
14417 @opindex mno-media
14419 Do not use media instructions.
14421 @item -mmuladd
14422 @opindex mmuladd
14424 Use multiply and add/subtract instructions.
14426 @item -mno-muladd
14427 @opindex mno-muladd
14429 Do not use multiply and add/subtract instructions.
14431 @item -mfdpic
14432 @opindex mfdpic
14434 Select the FDPIC ABI, which uses function descriptors to represent
14435 pointers to functions.  Without any PIC/PIE-related options, it
14436 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
14437 assumes GOT entries and small data are within a 12-bit range from the
14438 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
14439 are computed with 32 bits.
14440 With a @samp{bfin-elf} target, this option implies @option{-msim}.
14442 @item -minline-plt
14443 @opindex minline-plt
14445 Enable inlining of PLT entries in function calls to functions that are
14446 not known to bind locally.  It has no effect without @option{-mfdpic}.
14447 It's enabled by default if optimizing for speed and compiling for
14448 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
14449 optimization option such as @option{-O3} or above is present in the
14450 command line.
14452 @item -mTLS
14453 @opindex mTLS
14455 Assume a large TLS segment when generating thread-local code.
14457 @item -mtls
14458 @opindex mtls
14460 Do not assume a large TLS segment when generating thread-local code.
14462 @item -mgprel-ro
14463 @opindex mgprel-ro
14465 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
14466 that is known to be in read-only sections.  It's enabled by default,
14467 except for @option{-fpic} or @option{-fpie}: even though it may help
14468 make the global offset table smaller, it trades 1 instruction for 4.
14469 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
14470 one of which may be shared by multiple symbols, and it avoids the need
14471 for a GOT entry for the referenced symbol, so it's more likely to be a
14472 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
14474 @item -multilib-library-pic
14475 @opindex multilib-library-pic
14477 Link with the (library, not FD) pic libraries.  It's implied by
14478 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
14479 @option{-fpic} without @option{-mfdpic}.  You should never have to use
14480 it explicitly.
14482 @item -mlinked-fp
14483 @opindex mlinked-fp
14485 Follow the EABI requirement of always creating a frame pointer whenever
14486 a stack frame is allocated.  This option is enabled by default and can
14487 be disabled with @option{-mno-linked-fp}.
14489 @item -mlong-calls
14490 @opindex mlong-calls
14492 Use indirect addressing to call functions outside the current
14493 compilation unit.  This allows the functions to be placed anywhere
14494 within the 32-bit address space.
14496 @item -malign-labels
14497 @opindex malign-labels
14499 Try to align labels to an 8-byte boundary by inserting NOPs into the
14500 previous packet.  This option only has an effect when VLIW packing
14501 is enabled.  It doesn't create new packets; it merely adds NOPs to
14502 existing ones.
14504 @item -mlibrary-pic
14505 @opindex mlibrary-pic
14507 Generate position-independent EABI code.
14509 @item -macc-4
14510 @opindex macc-4
14512 Use only the first four media accumulator registers.
14514 @item -macc-8
14515 @opindex macc-8
14517 Use all eight media accumulator registers.
14519 @item -mpack
14520 @opindex mpack
14522 Pack VLIW instructions.
14524 @item -mno-pack
14525 @opindex mno-pack
14527 Do not pack VLIW instructions.
14529 @item -mno-eflags
14530 @opindex mno-eflags
14532 Do not mark ABI switches in e_flags.
14534 @item -mcond-move
14535 @opindex mcond-move
14537 Enable the use of conditional-move instructions (default).
14539 This switch is mainly for debugging the compiler and will likely be removed
14540 in a future version.
14542 @item -mno-cond-move
14543 @opindex mno-cond-move
14545 Disable the use of conditional-move instructions.
14547 This switch is mainly for debugging the compiler and will likely be removed
14548 in a future version.
14550 @item -mscc
14551 @opindex mscc
14553 Enable the use of conditional set instructions (default).
14555 This switch is mainly for debugging the compiler and will likely be removed
14556 in a future version.
14558 @item -mno-scc
14559 @opindex mno-scc
14561 Disable the use of conditional set instructions.
14563 This switch is mainly for debugging the compiler and will likely be removed
14564 in a future version.
14566 @item -mcond-exec
14567 @opindex mcond-exec
14569 Enable the use of conditional execution (default).
14571 This switch is mainly for debugging the compiler and will likely be removed
14572 in a future version.
14574 @item -mno-cond-exec
14575 @opindex mno-cond-exec
14577 Disable the use of conditional execution.
14579 This switch is mainly for debugging the compiler and will likely be removed
14580 in a future version.
14582 @item -mvliw-branch
14583 @opindex mvliw-branch
14585 Run a pass to pack branches into VLIW instructions (default).
14587 This switch is mainly for debugging the compiler and will likely be removed
14588 in a future version.
14590 @item -mno-vliw-branch
14591 @opindex mno-vliw-branch
14593 Do not run a pass to pack branches into VLIW instructions.
14595 This switch is mainly for debugging the compiler and will likely be removed
14596 in a future version.
14598 @item -mmulti-cond-exec
14599 @opindex mmulti-cond-exec
14601 Enable optimization of @code{&&} and @code{||} in conditional execution
14602 (default).
14604 This switch is mainly for debugging the compiler and will likely be removed
14605 in a future version.
14607 @item -mno-multi-cond-exec
14608 @opindex mno-multi-cond-exec
14610 Disable optimization of @code{&&} and @code{||} in conditional execution.
14612 This switch is mainly for debugging the compiler and will likely be removed
14613 in a future version.
14615 @item -mnested-cond-exec
14616 @opindex mnested-cond-exec
14618 Enable nested conditional execution optimizations (default).
14620 This switch is mainly for debugging the compiler and will likely be removed
14621 in a future version.
14623 @item -mno-nested-cond-exec
14624 @opindex mno-nested-cond-exec
14626 Disable nested conditional execution optimizations.
14628 This switch is mainly for debugging the compiler and will likely be removed
14629 in a future version.
14631 @item -moptimize-membar
14632 @opindex moptimize-membar
14634 This switch removes redundant @code{membar} instructions from the
14635 compiler-generated code.  It is enabled by default.
14637 @item -mno-optimize-membar
14638 @opindex mno-optimize-membar
14640 This switch disables the automatic removal of redundant @code{membar}
14641 instructions from the generated code.
14643 @item -mtomcat-stats
14644 @opindex mtomcat-stats
14646 Cause gas to print out tomcat statistics.
14648 @item -mcpu=@var{cpu}
14649 @opindex mcpu
14651 Select the processor type for which to generate code.  Possible values are
14652 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
14653 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
14655 @end table
14657 @node GNU/Linux Options
14658 @subsection GNU/Linux Options
14660 These @samp{-m} options are defined for GNU/Linux targets:
14662 @table @gcctabopt
14663 @item -mglibc
14664 @opindex mglibc
14665 Use the GNU C library.  This is the default except
14666 on @samp{*-*-linux-*uclibc*} and @samp{*-*-linux-*android*} targets.
14668 @item -muclibc
14669 @opindex muclibc
14670 Use uClibc C library.  This is the default on
14671 @samp{*-*-linux-*uclibc*} targets.
14673 @item -mbionic
14674 @opindex mbionic
14675 Use Bionic C library.  This is the default on
14676 @samp{*-*-linux-*android*} targets.
14678 @item -mandroid
14679 @opindex mandroid
14680 Compile code compatible with Android platform.  This is the default on
14681 @samp{*-*-linux-*android*} targets.
14683 When compiling, this option enables @option{-mbionic}, @option{-fPIC},
14684 @option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
14685 this option makes the GCC driver pass Android-specific options to the linker.
14686 Finally, this option causes the preprocessor macro @code{__ANDROID__}
14687 to be defined.
14689 @item -tno-android-cc
14690 @opindex tno-android-cc
14691 Disable compilation effects of @option{-mandroid}, i.e., do not enable
14692 @option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
14693 @option{-fno-rtti} by default.
14695 @item -tno-android-ld
14696 @opindex tno-android-ld
14697 Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
14698 linking options to the linker.
14700 @end table
14702 @node H8/300 Options
14703 @subsection H8/300 Options
14705 These @samp{-m} options are defined for the H8/300 implementations:
14707 @table @gcctabopt
14708 @item -mrelax
14709 @opindex mrelax
14710 Shorten some address references at link time, when possible; uses the
14711 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
14712 ld, Using ld}, for a fuller description.
14714 @item -mh
14715 @opindex mh
14716 Generate code for the H8/300H@.
14718 @item -ms
14719 @opindex ms
14720 Generate code for the H8S@.
14722 @item -mn
14723 @opindex mn
14724 Generate code for the H8S and H8/300H in the normal mode.  This switch
14725 must be used either with @option{-mh} or @option{-ms}.
14727 @item -ms2600
14728 @opindex ms2600
14729 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
14731 @item -mexr
14732 @opindex mexr
14733 Extended registers are stored on stack before execution of function
14734 with monitor attribute. Default option is @option{-mexr}.
14735 This option is valid only for H8S targets.
14737 @item -mno-exr
14738 @opindex mno-exr
14739 Extended registers are not stored on stack before execution of function 
14740 with monitor attribute. Default option is @option{-mno-exr}. 
14741 This option is valid only for H8S targets.
14743 @item -mint32
14744 @opindex mint32
14745 Make @code{int} data 32 bits by default.
14747 @item -malign-300
14748 @opindex malign-300
14749 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
14750 The default for the H8/300H and H8S is to align longs and floats on
14751 4-byte boundaries.
14752 @option{-malign-300} causes them to be aligned on 2-byte boundaries.
14753 This option has no effect on the H8/300.
14754 @end table
14756 @node HPPA Options
14757 @subsection HPPA Options
14758 @cindex HPPA Options
14760 These @samp{-m} options are defined for the HPPA family of computers:
14762 @table @gcctabopt
14763 @item -march=@var{architecture-type}
14764 @opindex march
14765 Generate code for the specified architecture.  The choices for
14766 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
14767 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
14768 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
14769 architecture option for your machine.  Code compiled for lower numbered
14770 architectures runs on higher numbered architectures, but not the
14771 other way around.
14773 @item -mpa-risc-1-0
14774 @itemx -mpa-risc-1-1
14775 @itemx -mpa-risc-2-0
14776 @opindex mpa-risc-1-0
14777 @opindex mpa-risc-1-1
14778 @opindex mpa-risc-2-0
14779 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
14781 @item -mjump-in-delay
14782 @opindex mjump-in-delay
14783 Fill delay slots of function calls with unconditional jump instructions
14784 by modifying the return pointer for the function call to be the target
14785 of the conditional jump.
14787 @item -mdisable-fpregs
14788 @opindex mdisable-fpregs
14789 Prevent floating-point registers from being used in any manner.  This is
14790 necessary for compiling kernels that perform lazy context switching of
14791 floating-point registers.  If you use this option and attempt to perform
14792 floating-point operations, the compiler aborts.
14794 @item -mdisable-indexing
14795 @opindex mdisable-indexing
14796 Prevent the compiler from using indexing address modes.  This avoids some
14797 rather obscure problems when compiling MIG generated code under MACH@.
14799 @item -mno-space-regs
14800 @opindex mno-space-regs
14801 Generate code that assumes the target has no space registers.  This allows
14802 GCC to generate faster indirect calls and use unscaled index address modes.
14804 Such code is suitable for level 0 PA systems and kernels.
14806 @item -mfast-indirect-calls
14807 @opindex mfast-indirect-calls
14808 Generate code that assumes calls never cross space boundaries.  This
14809 allows GCC to emit code that performs faster indirect calls.
14811 This option does not work in the presence of shared libraries or nested
14812 functions.
14814 @item -mfixed-range=@var{register-range}
14815 @opindex mfixed-range
14816 Generate code treating the given register range as fixed registers.
14817 A fixed register is one that the register allocator cannot use.  This is
14818 useful when compiling kernel code.  A register range is specified as
14819 two registers separated by a dash.  Multiple register ranges can be
14820 specified separated by a comma.
14822 @item -mlong-load-store
14823 @opindex mlong-load-store
14824 Generate 3-instruction load and store sequences as sometimes required by
14825 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
14826 the HP compilers.
14828 @item -mportable-runtime
14829 @opindex mportable-runtime
14830 Use the portable calling conventions proposed by HP for ELF systems.
14832 @item -mgas
14833 @opindex mgas
14834 Enable the use of assembler directives only GAS understands.
14836 @item -mschedule=@var{cpu-type}
14837 @opindex mschedule
14838 Schedule code according to the constraints for the machine type
14839 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
14840 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
14841 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
14842 proper scheduling option for your machine.  The default scheduling is
14843 @samp{8000}.
14845 @item -mlinker-opt
14846 @opindex mlinker-opt
14847 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
14848 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
14849 linkers in which they give bogus error messages when linking some programs.
14851 @item -msoft-float
14852 @opindex msoft-float
14853 Generate output containing library calls for floating point.
14854 @strong{Warning:} the requisite libraries are not available for all HPPA
14855 targets.  Normally the facilities of the machine's usual C compiler are
14856 used, but this cannot be done directly in cross-compilation.  You must make
14857 your own arrangements to provide suitable library functions for
14858 cross-compilation.
14860 @option{-msoft-float} changes the calling convention in the output file;
14861 therefore, it is only useful if you compile @emph{all} of a program with
14862 this option.  In particular, you need to compile @file{libgcc.a}, the
14863 library that comes with GCC, with @option{-msoft-float} in order for
14864 this to work.
14866 @item -msio
14867 @opindex msio
14868 Generate the predefine, @code{_SIO}, for server IO@.  The default is
14869 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
14870 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
14871 options are available under HP-UX and HI-UX@.
14873 @item -mgnu-ld
14874 @opindex mgnu-ld
14875 Use options specific to GNU @command{ld}.
14876 This passes @option{-shared} to @command{ld} when
14877 building a shared library.  It is the default when GCC is configured,
14878 explicitly or implicitly, with the GNU linker.  This option does not
14879 affect which @command{ld} is called; it only changes what parameters
14880 are passed to that @command{ld}.
14881 The @command{ld} that is called is determined by the
14882 @option{--with-ld} configure option, GCC's program search path, and
14883 finally by the user's @env{PATH}.  The linker used by GCC can be printed
14884 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
14885 on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
14887 @item -mhp-ld
14888 @opindex mhp-ld
14889 Use options specific to HP @command{ld}.
14890 This passes @option{-b} to @command{ld} when building
14891 a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
14892 links.  It is the default when GCC is configured, explicitly or
14893 implicitly, with the HP linker.  This option does not affect
14894 which @command{ld} is called; it only changes what parameters are passed to that
14895 @command{ld}.
14896 The @command{ld} that is called is determined by the @option{--with-ld}
14897 configure option, GCC's program search path, and finally by the user's
14898 @env{PATH}.  The linker used by GCC can be printed using @samp{which
14899 `gcc -print-prog-name=ld`}.  This option is only available on the 64-bit
14900 HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
14902 @item -mlong-calls
14903 @opindex mno-long-calls
14904 Generate code that uses long call sequences.  This ensures that a call
14905 is always able to reach linker generated stubs.  The default is to generate
14906 long calls only when the distance from the call site to the beginning
14907 of the function or translation unit, as the case may be, exceeds a
14908 predefined limit set by the branch type being used.  The limits for
14909 normal calls are 7,600,000 and 240,000 bytes, respectively for the
14910 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
14911 240,000 bytes.
14913 Distances are measured from the beginning of functions when using the
14914 @option{-ffunction-sections} option, or when using the @option{-mgas}
14915 and @option{-mno-portable-runtime} options together under HP-UX with
14916 the SOM linker.
14918 It is normally not desirable to use this option as it degrades
14919 performance.  However, it may be useful in large applications,
14920 particularly when partial linking is used to build the application.
14922 The types of long calls used depends on the capabilities of the
14923 assembler and linker, and the type of code being generated.  The
14924 impact on systems that support long absolute calls, and long pic
14925 symbol-difference or pc-relative calls should be relatively small.
14926 However, an indirect call is used on 32-bit ELF systems in pic code
14927 and it is quite long.
14929 @item -munix=@var{unix-std}
14930 @opindex march
14931 Generate compiler predefines and select a startfile for the specified
14932 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
14933 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
14934 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
14935 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
14936 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
14937 and later.
14939 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
14940 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
14941 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
14942 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
14943 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
14944 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
14946 It is @emph{important} to note that this option changes the interfaces
14947 for various library routines.  It also affects the operational behavior
14948 of the C library.  Thus, @emph{extreme} care is needed in using this
14949 option.
14951 Library code that is intended to operate with more than one UNIX
14952 standard must test, set and restore the variable @var{__xpg4_extended_mask}
14953 as appropriate.  Most GNU software doesn't provide this capability.
14955 @item -nolibdld
14956 @opindex nolibdld
14957 Suppress the generation of link options to search libdld.sl when the
14958 @option{-static} option is specified on HP-UX 10 and later.
14960 @item -static
14961 @opindex static
14962 The HP-UX implementation of setlocale in libc has a dependency on
14963 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14964 when the @option{-static} option is specified, special link options
14965 are needed to resolve this dependency.
14967 On HP-UX 10 and later, the GCC driver adds the necessary options to
14968 link with libdld.sl when the @option{-static} option is specified.
14969 This causes the resulting binary to be dynamic.  On the 64-bit port,
14970 the linkers generate dynamic binaries by default in any case.  The
14971 @option{-nolibdld} option can be used to prevent the GCC driver from
14972 adding these link options.
14974 @item -threads
14975 @opindex threads
14976 Add support for multithreading with the @dfn{dce thread} library
14977 under HP-UX@.  This option sets flags for both the preprocessor and
14978 linker.
14979 @end table
14981 @node i386 and x86-64 Options
14982 @subsection Intel 386 and AMD x86-64 Options
14983 @cindex i386 Options
14984 @cindex x86-64 Options
14985 @cindex Intel 386 Options
14986 @cindex AMD x86-64 Options
14988 These @samp{-m} options are defined for the i386 and x86-64 family of
14989 computers:
14991 @table @gcctabopt
14993 @item -march=@var{cpu-type}
14994 @opindex march
14995 Generate instructions for the machine type @var{cpu-type}.  In contrast to
14996 @option{-mtune=@var{cpu-type}}, which merely tunes the generated code 
14997 for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
14998 to generate code that may not run at all on processors other than the one
14999 indicated.  Specifying @option{-march=@var{cpu-type}} implies 
15000 @option{-mtune=@var{cpu-type}}.
15002 The choices for @var{cpu-type} are:
15004 @table @samp
15005 @item native
15006 This selects the CPU to generate code for at compilation time by determining
15007 the processor type of the compiling machine.  Using @option{-march=native}
15008 enables all instruction subsets supported by the local machine (hence
15009 the result might not run on different machines).  Using @option{-mtune=native}
15010 produces code optimized for the local machine under the constraints
15011 of the selected instruction set.  
15013 @item i386
15014 Original Intel i386 CPU@.
15016 @item i486
15017 Intel i486 CPU@.  (No scheduling is implemented for this chip.)
15019 @item i586
15020 @itemx pentium
15021 Intel Pentium CPU with no MMX support.
15023 @item pentium-mmx
15024 Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
15026 @item pentiumpro
15027 Intel Pentium Pro CPU@.
15029 @item i686
15030 When used with @option{-march}, the Pentium Pro
15031 instruction set is used, so the code runs on all i686 family chips.
15032 When used with @option{-mtune}, it has the same meaning as @samp{generic}.
15034 @item pentium2
15035 Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
15036 support.
15038 @item pentium3
15039 @itemx pentium3m
15040 Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
15041 set support.
15043 @item pentium-m
15044 Intel Pentium M; low-power version of Intel Pentium III CPU
15045 with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.
15047 @item pentium4
15048 @itemx pentium4m
15049 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.
15051 @item prescott
15052 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
15053 set support.
15055 @item nocona
15056 Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
15057 SSE2 and SSE3 instruction set support.
15059 @item core2
15060 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
15061 instruction set support.
15063 @item nehalem
15064 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
15065 SSE4.1, SSE4.2 and POPCNT instruction set support.
15067 @item westmere
15068 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
15069 SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction set support.
15071 @item sandybridge
15072 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
15073 SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL instruction set support.
15075 @item ivybridge
15076 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
15077 SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C
15078 instruction set support.
15080 @item haswell
15081 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
15082 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
15083 BMI, BMI2 and F16C instruction set support.
15085 @item broadwell
15086 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
15087 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
15088 BMI, BMI2, F16C, RDSEED, ADCX and PREFETCHW instruction set support.
15090 @item bonnell
15091 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
15092 instruction set support.
15094 @item silvermont
15095 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
15096 SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and RDRND instruction set support.
15098 @item k6
15099 AMD K6 CPU with MMX instruction set support.
15101 @item k6-2
15102 @itemx k6-3
15103 Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
15105 @item athlon
15106 @itemx athlon-tbird
15107 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
15108 support.
15110 @item athlon-4
15111 @itemx athlon-xp
15112 @itemx athlon-mp
15113 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
15114 instruction set support.
15116 @item k8
15117 @itemx opteron
15118 @itemx athlon64
15119 @itemx athlon-fx
15120 Processors based on the AMD K8 core with x86-64 instruction set support,
15121 including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
15122 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
15123 instruction set extensions.)
15125 @item k8-sse3
15126 @itemx opteron-sse3
15127 @itemx athlon64-sse3
15128 Improved versions of AMD K8 cores with SSE3 instruction set support.
15130 @item amdfam10
15131 @itemx barcelona
15132 CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
15133 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
15134 instruction set extensions.)
15136 @item bdver1
15137 CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
15138 supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
15139 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
15140 @item bdver2
15141 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
15142 supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX,
15143 SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
15144 extensions.)
15145 @item bdver3
15146 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
15147 supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
15148 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 
15149 64-bit instruction set extensions.
15150 @item bdver4
15151 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
15152 supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
15153 AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 
15154 SSE4.2, ABM and 64-bit instruction set extensions.
15156 @item btver1
15157 CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
15158 supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
15159 instruction set extensions.)
15161 @item btver2
15162 CPUs based on AMD Family 16h cores with x86-64 instruction set support. This
15163 includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM,
15164 SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set extensions.
15166 @item winchip-c6
15167 IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
15168 set support.
15170 @item winchip2
15171 IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
15172 instruction set support.
15174 @item c3
15175 VIA C3 CPU with MMX and 3DNow!@: instruction set support.  (No scheduling is
15176 implemented for this chip.)
15178 @item c3-2
15179 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
15180 (No scheduling is
15181 implemented for this chip.)
15183 @item geode
15184 AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
15185 @end table
15187 @item -mtune=@var{cpu-type}
15188 @opindex mtune
15189 Tune to @var{cpu-type} everything applicable about the generated code, except
15190 for the ABI and the set of available instructions.  
15191 While picking a specific @var{cpu-type} schedules things appropriately
15192 for that particular chip, the compiler does not generate any code that
15193 cannot run on the default machine type unless you use a
15194 @option{-march=@var{cpu-type}} option.
15195 For example, if GCC is configured for i686-pc-linux-gnu
15196 then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
15197 but still runs on i686 machines.
15199 The choices for @var{cpu-type} are the same as for @option{-march}.
15200 In addition, @option{-mtune} supports 2 extra choices for @var{cpu-type}:
15202 @table @samp
15203 @item generic
15204 Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
15205 If you know the CPU on which your code will run, then you should use
15206 the corresponding @option{-mtune} or @option{-march} option instead of
15207 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
15208 of your application will have, then you should use this option.
15210 As new processors are deployed in the marketplace, the behavior of this
15211 option will change.  Therefore, if you upgrade to a newer version of
15212 GCC, code generation controlled by this option will change to reflect
15213 the processors
15214 that are most common at the time that version of GCC is released.
15216 There is no @option{-march=generic} option because @option{-march}
15217 indicates the instruction set the compiler can use, and there is no
15218 generic instruction set applicable to all processors.  In contrast,
15219 @option{-mtune} indicates the processor (or, in this case, collection of
15220 processors) for which the code is optimized.
15222 @item intel
15223 Produce code optimized for the most current Intel processors, which are
15224 Haswell and Silvermont for this version of GCC.  If you know the CPU
15225 on which your code will run, then you should use the corresponding
15226 @option{-mtune} or @option{-march} option instead of @option{-mtune=intel}.
15227 But, if you want your application performs better on both Haswell and
15228 Silvermont, then you should use this option.
15230 As new Intel processors are deployed in the marketplace, the behavior of
15231 this option will change.  Therefore, if you upgrade to a newer version of
15232 GCC, code generation controlled by this option will change to reflect
15233 the most current Intel processors at the time that version of GCC is
15234 released.
15236 There is no @option{-march=intel} option because @option{-march} indicates
15237 the instruction set the compiler can use, and there is no common
15238 instruction set applicable to all processors.  In contrast,
15239 @option{-mtune} indicates the processor (or, in this case, collection of
15240 processors) for which the code is optimized.
15241 @end table
15243 @item -mcpu=@var{cpu-type}
15244 @opindex mcpu
15245 A deprecated synonym for @option{-mtune}.
15247 @item -mfpmath=@var{unit}
15248 @opindex mfpmath
15249 Generate floating-point arithmetic for selected unit @var{unit}.  The choices
15250 for @var{unit} are:
15252 @table @samp
15253 @item 387
15254 Use the standard 387 floating-point coprocessor present on the majority of chips and
15255 emulated otherwise.  Code compiled with this option runs almost everywhere.
15256 The temporary results are computed in 80-bit precision instead of the precision
15257 specified by the type, resulting in slightly different results compared to most
15258 of other chips.  See @option{-ffloat-store} for more detailed description.
15260 This is the default choice for i386 compiler.
15262 @item sse
15263 Use scalar floating-point instructions present in the SSE instruction set.
15264 This instruction set is supported by Pentium III and newer chips,
15265 and in the AMD line
15266 by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
15267 instruction set supports only single-precision arithmetic, thus the double and
15268 extended-precision arithmetic are still done using 387.  A later version, present
15269 only in Pentium 4 and AMD x86-64 chips, supports double-precision
15270 arithmetic too.
15272 For the i386 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
15273 or @option{-msse2} switches to enable SSE extensions and make this option
15274 effective.  For the x86-64 compiler, these extensions are enabled by default.
15276 The resulting code should be considerably faster in the majority of cases and avoid
15277 the numerical instability problems of 387 code, but may break some existing
15278 code that expects temporaries to be 80 bits.
15280 This is the default choice for the x86-64 compiler.
15282 @item sse,387
15283 @itemx sse+387
15284 @itemx both
15285 Attempt to utilize both instruction sets at once.  This effectively doubles the
15286 amount of available registers, and on chips with separate execution units for
15287 387 and SSE the execution resources too.  Use this option with care, as it is
15288 still experimental, because the GCC register allocator does not model separate
15289 functional units well, resulting in unstable performance.
15290 @end table
15292 @item -masm=@var{dialect}
15293 @opindex masm=@var{dialect}
15294 Output assembly instructions using selected @var{dialect}.  Supported
15295 choices are @samp{intel} or @samp{att} (the default).  Darwin does
15296 not support @samp{intel}.
15298 @item -mieee-fp
15299 @itemx -mno-ieee-fp
15300 @opindex mieee-fp
15301 @opindex mno-ieee-fp
15302 Control whether or not the compiler uses IEEE floating-point
15303 comparisons.  These correctly handle the case where the result of a
15304 comparison is unordered.
15306 @item -msoft-float
15307 @opindex msoft-float
15308 Generate output containing library calls for floating point.
15310 @strong{Warning:} the requisite libraries are not part of GCC@.
15311 Normally the facilities of the machine's usual C compiler are used, but
15312 this can't be done directly in cross-compilation.  You must make your
15313 own arrangements to provide suitable library functions for
15314 cross-compilation.
15316 On machines where a function returns floating-point results in the 80387
15317 register stack, some floating-point opcodes may be emitted even if
15318 @option{-msoft-float} is used.
15320 @item -mno-fp-ret-in-387
15321 @opindex mno-fp-ret-in-387
15322 Do not use the FPU registers for return values of functions.
15324 The usual calling convention has functions return values of types
15325 @code{float} and @code{double} in an FPU register, even if there
15326 is no FPU@.  The idea is that the operating system should emulate
15327 an FPU@.
15329 The option @option{-mno-fp-ret-in-387} causes such values to be returned
15330 in ordinary CPU registers instead.
15332 @item -mno-fancy-math-387
15333 @opindex mno-fancy-math-387
15334 Some 387 emulators do not support the @code{sin}, @code{cos} and
15335 @code{sqrt} instructions for the 387.  Specify this option to avoid
15336 generating those instructions.  This option is the default on FreeBSD,
15337 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
15338 indicates that the target CPU always has an FPU and so the
15339 instruction does not need emulation.  These
15340 instructions are not generated unless you also use the
15341 @option{-funsafe-math-optimizations} switch.
15343 @item -malign-double
15344 @itemx -mno-align-double
15345 @opindex malign-double
15346 @opindex mno-align-double
15347 Control whether GCC aligns @code{double}, @code{long double}, and
15348 @code{long long} variables on a two-word boundary or a one-word
15349 boundary.  Aligning @code{double} variables on a two-word boundary
15350 produces code that runs somewhat faster on a Pentium at the
15351 expense of more memory.
15353 On x86-64, @option{-malign-double} is enabled by default.
15355 @strong{Warning:} if you use the @option{-malign-double} switch,
15356 structures containing the above types are aligned differently than
15357 the published application binary interface specifications for the 386
15358 and are not binary compatible with structures in code compiled
15359 without that switch.
15361 @item -m96bit-long-double
15362 @itemx -m128bit-long-double
15363 @opindex m96bit-long-double
15364 @opindex m128bit-long-double
15365 These switches control the size of @code{long double} type.  The i386
15366 application binary interface specifies the size to be 96 bits,
15367 so @option{-m96bit-long-double} is the default in 32-bit mode.
15369 Modern architectures (Pentium and newer) prefer @code{long double}
15370 to be aligned to an 8- or 16-byte boundary.  In arrays or structures
15371 conforming to the ABI, this is not possible.  So specifying
15372 @option{-m128bit-long-double} aligns @code{long double}
15373 to a 16-byte boundary by padding the @code{long double} with an additional
15374 32-bit zero.
15376 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
15377 its ABI specifies that @code{long double} is aligned on 16-byte boundary.
15379 Notice that neither of these options enable any extra precision over the x87
15380 standard of 80 bits for a @code{long double}.
15382 @strong{Warning:} if you override the default value for your target ABI, this
15383 changes the size of 
15384 structures and arrays containing @code{long double} variables,
15385 as well as modifying the function calling convention for functions taking
15386 @code{long double}.  Hence they are not binary-compatible
15387 with code compiled without that switch.
15389 @item -mlong-double-64
15390 @itemx -mlong-double-80
15391 @itemx -mlong-double-128
15392 @opindex mlong-double-64
15393 @opindex mlong-double-80
15394 @opindex mlong-double-128
15395 These switches control the size of @code{long double} type. A size
15396 of 64 bits makes the @code{long double} type equivalent to the @code{double}
15397 type. This is the default for 32-bit Bionic C library.  A size
15398 of 128 bits makes the @code{long double} type equivalent to the
15399 @code{__float128} type. This is the default for 64-bit Bionic C library.
15401 @strong{Warning:} if you override the default value for your target ABI, this
15402 changes the size of
15403 structures and arrays containing @code{long double} variables,
15404 as well as modifying the function calling convention for functions taking
15405 @code{long double}.  Hence they are not binary-compatible
15406 with code compiled without that switch.
15408 @item -mlarge-data-threshold=@var{threshold}
15409 @opindex mlarge-data-threshold
15410 When @option{-mcmodel=medium} is specified, data objects larger than
15411 @var{threshold} are placed in the large data section.  This value must be the
15412 same across all objects linked into the binary, and defaults to 65535.
15414 @item -mrtd
15415 @opindex mrtd
15416 Use a different function-calling convention, in which functions that
15417 take a fixed number of arguments return with the @code{ret @var{num}}
15418 instruction, which pops their arguments while returning.  This saves one
15419 instruction in the caller since there is no need to pop the arguments
15420 there.
15422 You can specify that an individual function is called with this calling
15423 sequence with the function attribute @samp{stdcall}.  You can also
15424 override the @option{-mrtd} option by using the function attribute
15425 @samp{cdecl}.  @xref{Function Attributes}.
15427 @strong{Warning:} this calling convention is incompatible with the one
15428 normally used on Unix, so you cannot use it if you need to call
15429 libraries compiled with the Unix compiler.
15431 Also, you must provide function prototypes for all functions that
15432 take variable numbers of arguments (including @code{printf});
15433 otherwise incorrect code is generated for calls to those
15434 functions.
15436 In addition, seriously incorrect code results if you call a
15437 function with too many arguments.  (Normally, extra arguments are
15438 harmlessly ignored.)
15440 @item -mregparm=@var{num}
15441 @opindex mregparm
15442 Control how many registers are used to pass integer arguments.  By
15443 default, no registers are used to pass arguments, and at most 3
15444 registers can be used.  You can control this behavior for a specific
15445 function by using the function attribute @samp{regparm}.
15446 @xref{Function Attributes}.
15448 @strong{Warning:} if you use this switch, and
15449 @var{num} is nonzero, then you must build all modules with the same
15450 value, including any libraries.  This includes the system libraries and
15451 startup modules.
15453 @item -msseregparm
15454 @opindex msseregparm
15455 Use SSE register passing conventions for float and double arguments
15456 and return values.  You can control this behavior for a specific
15457 function by using the function attribute @samp{sseregparm}.
15458 @xref{Function Attributes}.
15460 @strong{Warning:} if you use this switch then you must build all
15461 modules with the same value, including any libraries.  This includes
15462 the system libraries and startup modules.
15464 @item -mvect8-ret-in-mem
15465 @opindex mvect8-ret-in-mem
15466 Return 8-byte vectors in memory instead of MMX registers.  This is the
15467 default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun
15468 Studio compilers until version 12.  Later compiler versions (starting
15469 with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which
15470 is the default on Solaris@tie{}10 and later.  @emph{Only} use this option if
15471 you need to remain compatible with existing code produced by those
15472 previous compiler versions or older versions of GCC@.
15474 @item -mpc32
15475 @itemx -mpc64
15476 @itemx -mpc80
15477 @opindex mpc32
15478 @opindex mpc64
15479 @opindex mpc80
15481 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
15482 is specified, the significands of results of floating-point operations are
15483 rounded to 24 bits (single precision); @option{-mpc64} rounds the
15484 significands of results of floating-point operations to 53 bits (double
15485 precision) and @option{-mpc80} rounds the significands of results of
15486 floating-point operations to 64 bits (extended double precision), which is
15487 the default.  When this option is used, floating-point operations in higher
15488 precisions are not available to the programmer without setting the FPU
15489 control word explicitly.
15491 Setting the rounding of floating-point operations to less than the default
15492 80 bits can speed some programs by 2% or more.  Note that some mathematical
15493 libraries assume that extended-precision (80-bit) floating-point operations
15494 are enabled by default; routines in such libraries could suffer significant
15495 loss of accuracy, typically through so-called ``catastrophic cancellation'',
15496 when this option is used to set the precision to less than extended precision.
15498 @item -mstackrealign
15499 @opindex mstackrealign
15500 Realign the stack at entry.  On the Intel x86, the @option{-mstackrealign}
15501 option generates an alternate prologue and epilogue that realigns the
15502 run-time stack if necessary.  This supports mixing legacy codes that keep
15503 4-byte stack alignment with modern codes that keep 16-byte stack alignment for
15504 SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
15505 applicable to individual functions.
15507 @item -mpreferred-stack-boundary=@var{num}
15508 @opindex mpreferred-stack-boundary
15509 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
15510 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
15511 the default is 4 (16 bytes or 128 bits).
15513 @strong{Warning:} When generating code for the x86-64 architecture with
15514 SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
15515 used to keep the stack boundary aligned to 8 byte boundary.  Since
15516 x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
15517 intended to be used in controlled environment where stack space is
15518 important limitation.  This option will lead to wrong code when functions
15519 compiled with 16 byte stack alignment (such as functions from a standard
15520 library) are called with misaligned stack.  In this case, SSE
15521 instructions may lead to misaligned memory access traps.  In addition,
15522 variable arguments will be handled incorrectly for 16 byte aligned
15523 objects (including x87 long double and __int128), leading to wrong
15524 results.  You must build all modules with
15525 @option{-mpreferred-stack-boundary=3}, including any libraries.  This
15526 includes the system libraries and startup modules.
15528 @item -mincoming-stack-boundary=@var{num}
15529 @opindex mincoming-stack-boundary
15530 Assume the incoming stack is aligned to a 2 raised to @var{num} byte
15531 boundary.  If @option{-mincoming-stack-boundary} is not specified,
15532 the one specified by @option{-mpreferred-stack-boundary} is used.
15534 On Pentium and Pentium Pro, @code{double} and @code{long double} values
15535 should be aligned to an 8-byte boundary (see @option{-malign-double}) or
15536 suffer significant run time performance penalties.  On Pentium III, the
15537 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
15538 properly if it is not 16-byte aligned.
15540 To ensure proper alignment of this values on the stack, the stack boundary
15541 must be as aligned as that required by any value stored on the stack.
15542 Further, every function must be generated such that it keeps the stack
15543 aligned.  Thus calling a function compiled with a higher preferred
15544 stack boundary from a function compiled with a lower preferred stack
15545 boundary most likely misaligns the stack.  It is recommended that
15546 libraries that use callbacks always use the default setting.
15548 This extra alignment does consume extra stack space, and generally
15549 increases code size.  Code that is sensitive to stack space usage, such
15550 as embedded systems and operating system kernels, may want to reduce the
15551 preferred alignment to @option{-mpreferred-stack-boundary=2}.
15553 @item -mmmx
15554 @itemx -mno-mmx
15555 @itemx -msse
15556 @itemx -mno-sse
15557 @itemx -msse2
15558 @itemx -mno-sse2
15559 @itemx -msse3
15560 @itemx -mno-sse3
15561 @itemx -mssse3
15562 @itemx -mno-ssse3
15563 @itemx -msse4.1
15564 @need 800
15565 @itemx -mno-sse4.1
15566 @itemx -msse4.2
15567 @itemx -mno-sse4.2
15568 @itemx -msse4
15569 @itemx -mno-sse4
15570 @itemx -mavx
15571 @itemx -mno-avx
15572 @itemx -mavx2
15573 @itemx -mno-avx2
15574 @itemx -mavx512f
15575 @itemx -mno-avx512f
15576 @need 800
15577 @itemx -mavx512pf
15578 @itemx -mno-avx512pf
15579 @itemx -mavx512er
15580 @itemx -mno-avx512er
15581 @itemx -mavx512cd
15582 @itemx -mno-avx512cd
15583 @itemx -msha
15584 @itemx -mno-sha
15585 @itemx -maes
15586 @itemx -mno-aes
15587 @itemx -mpclmul
15588 @itemx -mno-pclmul
15589 @itemx -mclfushopt
15590 @itemx -mno-clflsuhopt
15591 @need 800
15592 @itemx -mfsgsbase
15593 @itemx -mno-fsgsbase
15594 @itemx -mrdrnd
15595 @itemx -mno-rdrnd
15596 @itemx -mf16c
15597 @itemx -mno-f16c
15598 @itemx -mfma
15599 @itemx -mno-fma
15600 @itemx -mprefetchwt1
15601 @itemx -mno-prefetchwt1
15602 @itemx -msse4a
15603 @itemx -mno-sse4a
15604 @itemx -mfma4
15605 @itemx -mno-fma4
15606 @need 800
15607 @itemx -mxop
15608 @itemx -mno-xop
15609 @itemx -mlwp
15610 @itemx -mno-lwp
15611 @itemx -m3dnow
15612 @itemx -mno-3dnow
15613 @itemx -mpopcnt
15614 @itemx -mno-popcnt
15615 @itemx -mabm
15616 @itemx -mno-abm
15617 @itemx -mbmi
15618 @itemx -mbmi2
15619 @itemx -mno-bmi
15620 @itemx -mno-bmi2
15621 @itemx -mlzcnt
15622 @itemx -mno-lzcnt
15623 @itemx -mfxsr
15624 @itemx -mxsave
15625 @itemx -mxsaveopt
15626 @itemx -mrtm
15627 @itemx -mtbm
15628 @itemx -mno-tbm
15629 @itemx -mxsavec
15630 @itemx -mno-xsavec
15631 @itemx -mxsaves
15632 @itemx -mno-xsaves
15633 @opindex mmmx
15634 @opindex mno-mmx
15635 @opindex msse
15636 @opindex mno-sse
15637 @opindex m3dnow
15638 @opindex mno-3dnow
15639 These switches enable or disable the use of instructions in the MMX, SSE,
15640 SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD,
15641 SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM,
15642 BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, or 3DNow!@:
15643 extended instruction sets.
15644 These extensions are also available as built-in functions: see
15645 @ref{X86 Built-in Functions}, for details of the functions enabled and
15646 disabled by these switches.
15648 To generate SSE/SSE2 instructions automatically from floating-point
15649 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
15651 GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
15652 generates new AVX instructions or AVX equivalence for all SSEx instructions
15653 when needed.
15655 These options enable GCC to use these extended instructions in
15656 generated code, even without @option{-mfpmath=sse}.  Applications that
15657 perform run-time CPU detection must compile separate files for each
15658 supported architecture, using the appropriate flags.  In particular,
15659 the file containing the CPU detection code should be compiled without
15660 these options.
15662 @item -mdump-tune-features
15663 @opindex mdump-tune-features
15664 This option instructs GCC to dump the names of the x86 performance 
15665 tuning features and default settings. The names can be used in 
15666 @option{-mtune-ctrl=@var{feature-list}}.
15668 @item -mtune-ctrl=@var{feature-list}
15669 @opindex mtune-ctrl=@var{feature-list}
15670 This option is used to do fine grain control of x86 code generation features.
15671 @var{feature-list} is a comma separated list of @var{feature} names. See also
15672 @option{-mdump-tune-features}. When specified, the @var{feature} will be turned
15673 on if it is not preceded with @code{^}, otherwise, it will be turned off. 
15674 @option{-mtune-ctrl=@var{feature-list}} is intended to be used by GCC
15675 developers. Using it may lead to code paths not covered by testing and can
15676 potentially result in compiler ICEs or runtime errors.
15678 @item -mno-default
15679 @opindex mno-default
15680 This option instructs GCC to turn off all tunable features. See also 
15681 @option{-mtune-ctrl=@var{feature-list}} and @option{-mdump-tune-features}.
15683 @item -mcld
15684 @opindex mcld
15685 This option instructs GCC to emit a @code{cld} instruction in the prologue
15686 of functions that use string instructions.  String instructions depend on
15687 the DF flag to select between autoincrement or autodecrement mode.  While the
15688 ABI specifies the DF flag to be cleared on function entry, some operating
15689 systems violate this specification by not clearing the DF flag in their
15690 exception dispatchers.  The exception handler can be invoked with the DF flag
15691 set, which leads to wrong direction mode when string instructions are used.
15692 This option can be enabled by default on 32-bit x86 targets by configuring
15693 GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
15694 instructions can be suppressed with the @option{-mno-cld} compiler option
15695 in this case.
15697 @item -mvzeroupper
15698 @opindex mvzeroupper
15699 This option instructs GCC to emit a @code{vzeroupper} instruction
15700 before a transfer of control flow out of the function to minimize
15701 the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
15702 intrinsics.
15704 @item -mprefer-avx128
15705 @opindex mprefer-avx128
15706 This option instructs GCC to use 128-bit AVX instructions instead of
15707 256-bit AVX instructions in the auto-vectorizer.
15709 @item -mcx16
15710 @opindex mcx16
15711 This option enables GCC to generate @code{CMPXCHG16B} instructions.
15712 @code{CMPXCHG16B} allows for atomic operations on 128-bit double quadword
15713 (or oword) data types.  
15714 This is useful for high-resolution counters that can be updated
15715 by multiple processors (or cores).  This instruction is generated as part of
15716 atomic built-in functions: see @ref{__sync Builtins} or
15717 @ref{__atomic Builtins} for details.
15719 @item -msahf
15720 @opindex msahf
15721 This option enables generation of @code{SAHF} instructions in 64-bit code.
15722 Early Intel Pentium 4 CPUs with Intel 64 support,
15723 prior to the introduction of Pentium 4 G1 step in December 2005,
15724 lacked the @code{LAHF} and @code{SAHF} instructions
15725 which were supported by AMD64.
15726 These are load and store instructions, respectively, for certain status flags.
15727 In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
15728 @code{drem}, and @code{remainder} built-in functions;
15729 see @ref{Other Builtins} for details.
15731 @item -mmovbe
15732 @opindex mmovbe
15733 This option enables use of the @code{movbe} instruction to implement
15734 @code{__builtin_bswap32} and @code{__builtin_bswap64}.
15736 @item -mcrc32
15737 @opindex mcrc32
15738 This option enables built-in functions @code{__builtin_ia32_crc32qi},
15739 @code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
15740 @code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.
15742 @item -mrecip
15743 @opindex mrecip
15744 This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
15745 (and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
15746 with an additional Newton-Raphson step
15747 to increase precision instead of @code{DIVSS} and @code{SQRTSS}
15748 (and their vectorized
15749 variants) for single-precision floating-point arguments.  These instructions
15750 are generated only when @option{-funsafe-math-optimizations} is enabled
15751 together with @option{-finite-math-only} and @option{-fno-trapping-math}.
15752 Note that while the throughput of the sequence is higher than the throughput
15753 of the non-reciprocal instruction, the precision of the sequence can be
15754 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
15756 Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
15757 (or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
15758 combination), and doesn't need @option{-mrecip}.
15760 Also note that GCC emits the above sequence with additional Newton-Raphson step
15761 for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
15762 already with @option{-ffast-math} (or the above option combination), and
15763 doesn't need @option{-mrecip}.
15765 @item -mrecip=@var{opt}
15766 @opindex mrecip=opt
15767 This option controls which reciprocal estimate instructions
15768 may be used.  @var{opt} is a comma-separated list of options, which may
15769 be preceded by a @samp{!} to invert the option:
15771 @table @samp
15772 @item all
15773 Enable all estimate instructions.
15775 @item default
15776 Enable the default instructions, equivalent to @option{-mrecip}.
15778 @item none
15779 Disable all estimate instructions, equivalent to @option{-mno-recip}.
15781 @item div
15782 Enable the approximation for scalar division.
15784 @item vec-div
15785 Enable the approximation for vectorized division.
15787 @item sqrt
15788 Enable the approximation for scalar square root.
15790 @item vec-sqrt
15791 Enable the approximation for vectorized square root.
15792 @end table
15794 So, for example, @option{-mrecip=all,!sqrt} enables
15795 all of the reciprocal approximations, except for square root.
15797 @item -mveclibabi=@var{type}
15798 @opindex mveclibabi
15799 Specifies the ABI type to use for vectorizing intrinsics using an
15800 external library.  Supported values for @var{type} are @samp{svml} 
15801 for the Intel short
15802 vector math library and @samp{acml} for the AMD math core library.
15803 To use this option, both @option{-ftree-vectorize} and
15804 @option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML 
15805 ABI-compatible library must be specified at link time.
15807 GCC currently emits calls to @code{vmldExp2},
15808 @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
15809 @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
15810 @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
15811 @code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
15812 @code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
15813 @code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
15814 @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
15815 @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
15816 @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
15817 function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin},
15818 @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
15819 @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
15820 @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
15821 @code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type
15822 when @option{-mveclibabi=acml} is used.  
15824 @item -mabi=@var{name}
15825 @opindex mabi
15826 Generate code for the specified calling convention.  Permissible values
15827 are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
15828 @samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
15829 ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
15830 You can control this behavior for a specific function by
15831 using the function attribute @samp{ms_abi}/@samp{sysv_abi}.
15832 @xref{Function Attributes}.
15834 @item -mtls-dialect=@var{type}
15835 @opindex mtls-dialect
15836 Generate code to access thread-local storage using the @samp{gnu} or
15837 @samp{gnu2} conventions.  @samp{gnu} is the conservative default;
15838 @samp{gnu2} is more efficient, but it may add compile- and run-time
15839 requirements that cannot be satisfied on all systems.
15841 @item -mpush-args
15842 @itemx -mno-push-args
15843 @opindex mpush-args
15844 @opindex mno-push-args
15845 Use PUSH operations to store outgoing parameters.  This method is shorter
15846 and usually equally fast as method using SUB/MOV operations and is enabled
15847 by default.  In some cases disabling it may improve performance because of
15848 improved scheduling and reduced dependencies.
15850 @item -maccumulate-outgoing-args
15851 @opindex maccumulate-outgoing-args
15852 If enabled, the maximum amount of space required for outgoing arguments is
15853 computed in the function prologue.  This is faster on most modern CPUs
15854 because of reduced dependencies, improved scheduling and reduced stack usage
15855 when the preferred stack boundary is not equal to 2.  The drawback is a notable
15856 increase in code size.  This switch implies @option{-mno-push-args}.
15858 @item -mthreads
15859 @opindex mthreads
15860 Support thread-safe exception handling on MinGW.  Programs that rely
15861 on thread-safe exception handling must compile and link all code with the
15862 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
15863 @code{-D_MT}; when linking, it links in a special thread helper library
15864 @option{-lmingwthrd} which cleans up per-thread exception-handling data.
15866 @item -mno-align-stringops
15867 @opindex mno-align-stringops
15868 Do not align the destination of inlined string operations.  This switch reduces
15869 code size and improves performance in case the destination is already aligned,
15870 but GCC doesn't know about it.
15872 @item -minline-all-stringops
15873 @opindex minline-all-stringops
15874 By default GCC inlines string operations only when the destination is 
15875 known to be aligned to least a 4-byte boundary.  
15876 This enables more inlining and increases code
15877 size, but may improve performance of code that depends on fast
15878 @code{memcpy}, @code{strlen},
15879 and @code{memset} for short lengths.
15881 @item -minline-stringops-dynamically
15882 @opindex minline-stringops-dynamically
15883 For string operations of unknown size, use run-time checks with
15884 inline code for small blocks and a library call for large blocks.
15886 @item -mstringop-strategy=@var{alg}
15887 @opindex mstringop-strategy=@var{alg}
15888 Override the internal decision heuristic for the particular algorithm to use
15889 for inlining string operations.  The allowed values for @var{alg} are:
15891 @table @samp
15892 @item rep_byte
15893 @itemx rep_4byte
15894 @itemx rep_8byte
15895 Expand using i386 @code{rep} prefix of the specified size.
15897 @item byte_loop
15898 @itemx loop
15899 @itemx unrolled_loop
15900 Expand into an inline loop.
15902 @item libcall
15903 Always use a library call.
15904 @end table
15906 @item -mmemcpy-strategy=@var{strategy}
15907 @opindex mmemcpy-strategy=@var{strategy}
15908 Override the internal decision heuristic to decide if @code{__builtin_memcpy}
15909 should be inlined and what inline algorithm to use when the expected size
15910 of the copy operation is known. @var{strategy} 
15911 is a comma-separated list of @var{alg}:@var{max_size}:@var{dest_align} triplets. 
15912 @var{alg} is specified in @option{-mstringop-strategy}, @var{max_size} specifies
15913 the max byte size with which inline algorithm @var{alg} is allowed.  For the last
15914 triplet, the @var{max_size} must be @code{-1}. The @var{max_size} of the triplets
15915 in the list must be specified in increasing order.  The minimal byte size for 
15916 @var{alg} is @code{0} for the first triplet and @code{@var{max_size} + 1} of the 
15917 preceding range.
15919 @item -mmemset-strategy=@var{strategy}
15920 @opindex mmemset-strategy=@var{strategy}
15921 The option is similar to @option{-mmemcpy-strategy=} except that it is to control
15922 @code{__builtin_memset} expansion.
15924 @item -momit-leaf-frame-pointer
15925 @opindex momit-leaf-frame-pointer
15926 Don't keep the frame pointer in a register for leaf functions.  This
15927 avoids the instructions to save, set up, and restore frame pointers and
15928 makes an extra register available in leaf functions.  The option
15929 @option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
15930 which might make debugging harder.
15932 @item -mtls-direct-seg-refs
15933 @itemx -mno-tls-direct-seg-refs
15934 @opindex mtls-direct-seg-refs
15935 Controls whether TLS variables may be accessed with offsets from the
15936 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
15937 or whether the thread base pointer must be added.  Whether or not this
15938 is valid depends on the operating system, and whether it maps the
15939 segment to cover the entire TLS area.
15941 For systems that use the GNU C Library, the default is on.
15943 @item -msse2avx
15944 @itemx -mno-sse2avx
15945 @opindex msse2avx
15946 Specify that the assembler should encode SSE instructions with VEX
15947 prefix.  The option @option{-mavx} turns this on by default.
15949 @item -mfentry
15950 @itemx -mno-fentry
15951 @opindex mfentry
15952 If profiling is active (@option{-pg}), put the profiling
15953 counter call before the prologue.
15954 Note: On x86 architectures the attribute @code{ms_hook_prologue}
15955 isn't possible at the moment for @option{-mfentry} and @option{-pg}.
15957 @item -m8bit-idiv
15958 @itemx -mno-8bit-idiv
15959 @opindex 8bit-idiv
15960 On some processors, like Intel Atom, 8-bit unsigned integer divide is
15961 much faster than 32-bit/64-bit integer divide.  This option generates a
15962 run-time check.  If both dividend and divisor are within range of 0
15963 to 255, 8-bit unsigned integer divide is used instead of
15964 32-bit/64-bit integer divide.
15966 @item -mavx256-split-unaligned-load
15967 @itemx -mavx256-split-unaligned-store
15968 @opindex avx256-split-unaligned-load
15969 @opindex avx256-split-unaligned-store
15970 Split 32-byte AVX unaligned load and store.
15972 @item -mstack-protector-guard=@var{guard}
15973 @opindex mstack-protector-guard=@var{guard}
15974 Generate stack protection code using canary at @var{guard}.  Supported
15975 locations are @samp{global} for global canary or @samp{tls} for per-thread
15976 canary in the TLS block (the default).  This option has effect only when
15977 @option{-fstack-protector} or @option{-fstack-protector-all} is specified.
15979 @end table
15981 These @samp{-m} switches are supported in addition to the above
15982 on x86-64 processors in 64-bit environments.
15984 @table @gcctabopt
15985 @item -m32
15986 @itemx -m64
15987 @itemx -mx32
15988 @itemx -m16
15989 @opindex m32
15990 @opindex m64
15991 @opindex mx32
15992 @opindex m16
15993 Generate code for a 16-bit, 32-bit or 64-bit environment.
15994 The @option{-m32} option sets @code{int}, @code{long}, and pointer types
15995 to 32 bits, and
15996 generates code that runs on any i386 system.
15998 The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
15999 types to 64 bits, and generates code for the x86-64 architecture.
16000 For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
16001 and @option{-mdynamic-no-pic} options.
16003 The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
16004 to 32 bits, and
16005 generates code for the x86-64 architecture.
16007 The @option{-m16} option is the same as @option{-m32}, except for that
16008 it outputs the @code{.code16gcc} assembly directive at the beginning of
16009 the assembly output so that the binary can run in 16-bit mode.
16011 @item -mno-red-zone
16012 @opindex mno-red-zone
16013 Do not use a so-called ``red zone'' for x86-64 code.  The red zone is mandated
16014 by the x86-64 ABI; it is a 128-byte area beyond the location of the
16015 stack pointer that is not modified by signal or interrupt handlers
16016 and therefore can be used for temporary data without adjusting the stack
16017 pointer.  The flag @option{-mno-red-zone} disables this red zone.
16019 @item -mcmodel=small
16020 @opindex mcmodel=small
16021 Generate code for the small code model: the program and its symbols must
16022 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
16023 Programs can be statically or dynamically linked.  This is the default
16024 code model.
16026 @item -mcmodel=kernel
16027 @opindex mcmodel=kernel
16028 Generate code for the kernel code model.  The kernel runs in the
16029 negative 2 GB of the address space.
16030 This model has to be used for Linux kernel code.
16032 @item -mcmodel=medium
16033 @opindex mcmodel=medium
16034 Generate code for the medium model: the program is linked in the lower 2
16035 GB of the address space.  Small symbols are also placed there.  Symbols
16036 with sizes larger than @option{-mlarge-data-threshold} are put into
16037 large data or BSS sections and can be located above 2GB.  Programs can
16038 be statically or dynamically linked.
16040 @item -mcmodel=large
16041 @opindex mcmodel=large
16042 Generate code for the large model.  This model makes no assumptions
16043 about addresses and sizes of sections.
16045 @item -maddress-mode=long
16046 @opindex maddress-mode=long
16047 Generate code for long address mode.  This is only supported for 64-bit
16048 and x32 environments.  It is the default address mode for 64-bit
16049 environments.
16051 @item -maddress-mode=short
16052 @opindex maddress-mode=short
16053 Generate code for short address mode.  This is only supported for 32-bit
16054 and x32 environments.  It is the default address mode for 32-bit and
16055 x32 environments.
16056 @end table
16058 @node i386 and x86-64 Windows Options
16059 @subsection i386 and x86-64 Windows Options
16060 @cindex i386 and x86-64 Windows Options
16062 These additional options are available for Microsoft Windows targets:
16064 @table @gcctabopt
16065 @item -mconsole
16066 @opindex mconsole
16067 This option
16068 specifies that a console application is to be generated, by
16069 instructing the linker to set the PE header subsystem type
16070 required for console applications.
16071 This option is available for Cygwin and MinGW targets and is
16072 enabled by default on those targets.
16074 @item -mdll
16075 @opindex mdll
16076 This option is available for Cygwin and MinGW targets.  It
16077 specifies that a DLL---a dynamic link library---is to be
16078 generated, enabling the selection of the required runtime
16079 startup object and entry point.
16081 @item -mnop-fun-dllimport
16082 @opindex mnop-fun-dllimport
16083 This option is available for Cygwin and MinGW targets.  It
16084 specifies that the @code{dllimport} attribute should be ignored.
16086 @item -mthread
16087 @opindex mthread
16088 This option is available for MinGW targets. It specifies
16089 that MinGW-specific thread support is to be used.
16091 @item -municode
16092 @opindex municode
16093 This option is available for MinGW-w64 targets.  It causes
16094 the @code{UNICODE} preprocessor macro to be predefined, and
16095 chooses Unicode-capable runtime startup code.
16097 @item -mwin32
16098 @opindex mwin32
16099 This option is available for Cygwin and MinGW targets.  It
16100 specifies that the typical Microsoft Windows predefined macros are to
16101 be set in the pre-processor, but does not influence the choice
16102 of runtime library/startup code.
16104 @item -mwindows
16105 @opindex mwindows
16106 This option is available for Cygwin and MinGW targets.  It
16107 specifies that a GUI application is to be generated by
16108 instructing the linker to set the PE header subsystem type
16109 appropriately.
16111 @item -fno-set-stack-executable
16112 @opindex fno-set-stack-executable
16113 This option is available for MinGW targets. It specifies that
16114 the executable flag for the stack used by nested functions isn't
16115 set. This is necessary for binaries running in kernel mode of
16116 Microsoft Windows, as there the User32 API, which is used to set executable
16117 privileges, isn't available.
16119 @item -fwritable-relocated-rdata
16120 @opindex fno-writable-relocated-rdata
16121 This option is available for MinGW and Cygwin targets.  It specifies
16122 that relocated-data in read-only section is put into .data
16123 section.  This is a necessary for older runtimes not supporting
16124 modification of .rdata sections for pseudo-relocation.
16126 @item -mpe-aligned-commons
16127 @opindex mpe-aligned-commons
16128 This option is available for Cygwin and MinGW targets.  It
16129 specifies that the GNU extension to the PE file format that
16130 permits the correct alignment of COMMON variables should be
16131 used when generating code.  It is enabled by default if
16132 GCC detects that the target assembler found during configuration
16133 supports the feature.
16134 @end table
16136 See also under @ref{i386 and x86-64 Options} for standard options.
16138 @node IA-64 Options
16139 @subsection IA-64 Options
16140 @cindex IA-64 Options
16142 These are the @samp{-m} options defined for the Intel IA-64 architecture.
16144 @table @gcctabopt
16145 @item -mbig-endian
16146 @opindex mbig-endian
16147 Generate code for a big-endian target.  This is the default for HP-UX@.
16149 @item -mlittle-endian
16150 @opindex mlittle-endian
16151 Generate code for a little-endian target.  This is the default for AIX5
16152 and GNU/Linux.
16154 @item -mgnu-as
16155 @itemx -mno-gnu-as
16156 @opindex mgnu-as
16157 @opindex mno-gnu-as
16158 Generate (or don't) code for the GNU assembler.  This is the default.
16159 @c Also, this is the default if the configure option @option{--with-gnu-as}
16160 @c is used.
16162 @item -mgnu-ld
16163 @itemx -mno-gnu-ld
16164 @opindex mgnu-ld
16165 @opindex mno-gnu-ld
16166 Generate (or don't) code for the GNU linker.  This is the default.
16167 @c Also, this is the default if the configure option @option{--with-gnu-ld}
16168 @c is used.
16170 @item -mno-pic
16171 @opindex mno-pic
16172 Generate code that does not use a global pointer register.  The result
16173 is not position independent code, and violates the IA-64 ABI@.
16175 @item -mvolatile-asm-stop
16176 @itemx -mno-volatile-asm-stop
16177 @opindex mvolatile-asm-stop
16178 @opindex mno-volatile-asm-stop
16179 Generate (or don't) a stop bit immediately before and after volatile asm
16180 statements.
16182 @item -mregister-names
16183 @itemx -mno-register-names
16184 @opindex mregister-names
16185 @opindex mno-register-names
16186 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
16187 the stacked registers.  This may make assembler output more readable.
16189 @item -mno-sdata
16190 @itemx -msdata
16191 @opindex mno-sdata
16192 @opindex msdata
16193 Disable (or enable) optimizations that use the small data section.  This may
16194 be useful for working around optimizer bugs.
16196 @item -mconstant-gp
16197 @opindex mconstant-gp
16198 Generate code that uses a single constant global pointer value.  This is
16199 useful when compiling kernel code.
16201 @item -mauto-pic
16202 @opindex mauto-pic
16203 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
16204 This is useful when compiling firmware code.
16206 @item -minline-float-divide-min-latency
16207 @opindex minline-float-divide-min-latency
16208 Generate code for inline divides of floating-point values
16209 using the minimum latency algorithm.
16211 @item -minline-float-divide-max-throughput
16212 @opindex minline-float-divide-max-throughput
16213 Generate code for inline divides of floating-point values
16214 using the maximum throughput algorithm.
16216 @item -mno-inline-float-divide
16217 @opindex mno-inline-float-divide
16218 Do not generate inline code for divides of floating-point values.
16220 @item -minline-int-divide-min-latency
16221 @opindex minline-int-divide-min-latency
16222 Generate code for inline divides of integer values
16223 using the minimum latency algorithm.
16225 @item -minline-int-divide-max-throughput
16226 @opindex minline-int-divide-max-throughput
16227 Generate code for inline divides of integer values
16228 using the maximum throughput algorithm.
16230 @item -mno-inline-int-divide
16231 @opindex mno-inline-int-divide
16232 Do not generate inline code for divides of integer values.
16234 @item -minline-sqrt-min-latency
16235 @opindex minline-sqrt-min-latency
16236 Generate code for inline square roots
16237 using the minimum latency algorithm.
16239 @item -minline-sqrt-max-throughput
16240 @opindex minline-sqrt-max-throughput
16241 Generate code for inline square roots
16242 using the maximum throughput algorithm.
16244 @item -mno-inline-sqrt
16245 @opindex mno-inline-sqrt
16246 Do not generate inline code for @code{sqrt}.
16248 @item -mfused-madd
16249 @itemx -mno-fused-madd
16250 @opindex mfused-madd
16251 @opindex mno-fused-madd
16252 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
16253 instructions.  The default is to use these instructions.
16255 @item -mno-dwarf2-asm
16256 @itemx -mdwarf2-asm
16257 @opindex mno-dwarf2-asm
16258 @opindex mdwarf2-asm
16259 Don't (or do) generate assembler code for the DWARF 2 line number debugging
16260 info.  This may be useful when not using the GNU assembler.
16262 @item -mearly-stop-bits
16263 @itemx -mno-early-stop-bits
16264 @opindex mearly-stop-bits
16265 @opindex mno-early-stop-bits
16266 Allow stop bits to be placed earlier than immediately preceding the
16267 instruction that triggered the stop bit.  This can improve instruction
16268 scheduling, but does not always do so.
16270 @item -mfixed-range=@var{register-range}
16271 @opindex mfixed-range
16272 Generate code treating the given register range as fixed registers.
16273 A fixed register is one that the register allocator cannot use.  This is
16274 useful when compiling kernel code.  A register range is specified as
16275 two registers separated by a dash.  Multiple register ranges can be
16276 specified separated by a comma.
16278 @item -mtls-size=@var{tls-size}
16279 @opindex mtls-size
16280 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
16283 @item -mtune=@var{cpu-type}
16284 @opindex mtune
16285 Tune the instruction scheduling for a particular CPU, Valid values are
16286 @samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
16287 and @samp{mckinley}.
16289 @item -milp32
16290 @itemx -mlp64
16291 @opindex milp32
16292 @opindex mlp64
16293 Generate code for a 32-bit or 64-bit environment.
16294 The 32-bit environment sets int, long and pointer to 32 bits.
16295 The 64-bit environment sets int to 32 bits and long and pointer
16296 to 64 bits.  These are HP-UX specific flags.
16298 @item -mno-sched-br-data-spec
16299 @itemx -msched-br-data-spec
16300 @opindex mno-sched-br-data-spec
16301 @opindex msched-br-data-spec
16302 (Dis/En)able data speculative scheduling before reload.
16303 This results in generation of @code{ld.a} instructions and
16304 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
16305 The default is 'disable'.
16307 @item -msched-ar-data-spec
16308 @itemx -mno-sched-ar-data-spec
16309 @opindex msched-ar-data-spec
16310 @opindex mno-sched-ar-data-spec
16311 (En/Dis)able data speculative scheduling after reload.
16312 This results in generation of @code{ld.a} instructions and
16313 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
16314 The default is 'enable'.
16316 @item -mno-sched-control-spec
16317 @itemx -msched-control-spec
16318 @opindex mno-sched-control-spec
16319 @opindex msched-control-spec
16320 (Dis/En)able control speculative scheduling.  This feature is
16321 available only during region scheduling (i.e.@: before reload).
16322 This results in generation of the @code{ld.s} instructions and
16323 the corresponding check instructions @code{chk.s}.
16324 The default is 'disable'.
16326 @item -msched-br-in-data-spec
16327 @itemx -mno-sched-br-in-data-spec
16328 @opindex msched-br-in-data-spec
16329 @opindex mno-sched-br-in-data-spec
16330 (En/Dis)able speculative scheduling of the instructions that
16331 are dependent on the data speculative loads before reload.
16332 This is effective only with @option{-msched-br-data-spec} enabled.
16333 The default is 'enable'.
16335 @item -msched-ar-in-data-spec
16336 @itemx -mno-sched-ar-in-data-spec
16337 @opindex msched-ar-in-data-spec
16338 @opindex mno-sched-ar-in-data-spec
16339 (En/Dis)able speculative scheduling of the instructions that
16340 are dependent on the data speculative loads after reload.
16341 This is effective only with @option{-msched-ar-data-spec} enabled.
16342 The default is 'enable'.
16344 @item -msched-in-control-spec
16345 @itemx -mno-sched-in-control-spec
16346 @opindex msched-in-control-spec
16347 @opindex mno-sched-in-control-spec
16348 (En/Dis)able speculative scheduling of the instructions that
16349 are dependent on the control speculative loads.
16350 This is effective only with @option{-msched-control-spec} enabled.
16351 The default is 'enable'.
16353 @item -mno-sched-prefer-non-data-spec-insns
16354 @itemx -msched-prefer-non-data-spec-insns
16355 @opindex mno-sched-prefer-non-data-spec-insns
16356 @opindex msched-prefer-non-data-spec-insns
16357 If enabled, data-speculative instructions are chosen for schedule
16358 only if there are no other choices at the moment.  This makes
16359 the use of the data speculation much more conservative.
16360 The default is 'disable'.
16362 @item -mno-sched-prefer-non-control-spec-insns
16363 @itemx -msched-prefer-non-control-spec-insns
16364 @opindex mno-sched-prefer-non-control-spec-insns
16365 @opindex msched-prefer-non-control-spec-insns
16366 If enabled, control-speculative instructions are chosen for schedule
16367 only if there are no other choices at the moment.  This makes
16368 the use of the control speculation much more conservative.
16369 The default is 'disable'.
16371 @item -mno-sched-count-spec-in-critical-path
16372 @itemx -msched-count-spec-in-critical-path
16373 @opindex mno-sched-count-spec-in-critical-path
16374 @opindex msched-count-spec-in-critical-path
16375 If enabled, speculative dependencies are considered during
16376 computation of the instructions priorities.  This makes the use of the
16377 speculation a bit more conservative.
16378 The default is 'disable'.
16380 @item -msched-spec-ldc
16381 @opindex msched-spec-ldc
16382 Use a simple data speculation check.  This option is on by default.
16384 @item -msched-control-spec-ldc
16385 @opindex msched-spec-ldc
16386 Use a simple check for control speculation.  This option is on by default.
16388 @item -msched-stop-bits-after-every-cycle
16389 @opindex msched-stop-bits-after-every-cycle
16390 Place a stop bit after every cycle when scheduling.  This option is on
16391 by default.
16393 @item -msched-fp-mem-deps-zero-cost
16394 @opindex msched-fp-mem-deps-zero-cost
16395 Assume that floating-point stores and loads are not likely to cause a conflict
16396 when placed into the same instruction group.  This option is disabled by
16397 default.
16399 @item -msel-sched-dont-check-control-spec
16400 @opindex msel-sched-dont-check-control-spec
16401 Generate checks for control speculation in selective scheduling.
16402 This flag is disabled by default.
16404 @item -msched-max-memory-insns=@var{max-insns}
16405 @opindex msched-max-memory-insns
16406 Limit on the number of memory insns per instruction group, giving lower
16407 priority to subsequent memory insns attempting to schedule in the same
16408 instruction group. Frequently useful to prevent cache bank conflicts.
16409 The default value is 1.
16411 @item -msched-max-memory-insns-hard-limit
16412 @opindex msched-max-memory-insns-hard-limit
16413 Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
16414 disallowing more than that number in an instruction group.
16415 Otherwise, the limit is ``soft'', meaning that non-memory operations
16416 are preferred when the limit is reached, but memory operations may still
16417 be scheduled.
16419 @end table
16421 @node LM32 Options
16422 @subsection LM32 Options
16423 @cindex LM32 options
16425 These @option{-m} options are defined for the LatticeMico32 architecture:
16427 @table @gcctabopt
16428 @item -mbarrel-shift-enabled
16429 @opindex mbarrel-shift-enabled
16430 Enable barrel-shift instructions.
16432 @item -mdivide-enabled
16433 @opindex mdivide-enabled
16434 Enable divide and modulus instructions.
16436 @item -mmultiply-enabled
16437 @opindex multiply-enabled
16438 Enable multiply instructions.
16440 @item -msign-extend-enabled
16441 @opindex msign-extend-enabled
16442 Enable sign extend instructions.
16444 @item -muser-enabled
16445 @opindex muser-enabled
16446 Enable user-defined instructions.
16448 @end table
16450 @node M32C Options
16451 @subsection M32C Options
16452 @cindex M32C options
16454 @table @gcctabopt
16455 @item -mcpu=@var{name}
16456 @opindex mcpu=
16457 Select the CPU for which code is generated.  @var{name} may be one of
16458 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
16459 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
16460 the M32C/80 series.
16462 @item -msim
16463 @opindex msim
16464 Specifies that the program will be run on the simulator.  This causes
16465 an alternate runtime library to be linked in which supports, for
16466 example, file I/O@.  You must not use this option when generating
16467 programs that will run on real hardware; you must provide your own
16468 runtime library for whatever I/O functions are needed.
16470 @item -memregs=@var{number}
16471 @opindex memregs=
16472 Specifies the number of memory-based pseudo-registers GCC uses
16473 during code generation.  These pseudo-registers are used like real
16474 registers, so there is a tradeoff between GCC's ability to fit the
16475 code into available registers, and the performance penalty of using
16476 memory instead of registers.  Note that all modules in a program must
16477 be compiled with the same value for this option.  Because of that, you
16478 must not use this option with GCC's default runtime libraries.
16480 @end table
16482 @node M32R/D Options
16483 @subsection M32R/D Options
16484 @cindex M32R/D options
16486 These @option{-m} options are defined for Renesas M32R/D architectures:
16488 @table @gcctabopt
16489 @item -m32r2
16490 @opindex m32r2
16491 Generate code for the M32R/2@.
16493 @item -m32rx
16494 @opindex m32rx
16495 Generate code for the M32R/X@.
16497 @item -m32r
16498 @opindex m32r
16499 Generate code for the M32R@.  This is the default.
16501 @item -mmodel=small
16502 @opindex mmodel=small
16503 Assume all objects live in the lower 16MB of memory (so that their addresses
16504 can be loaded with the @code{ld24} instruction), and assume all subroutines
16505 are reachable with the @code{bl} instruction.
16506 This is the default.
16508 The addressability of a particular object can be set with the
16509 @code{model} attribute.
16511 @item -mmodel=medium
16512 @opindex mmodel=medium
16513 Assume objects may be anywhere in the 32-bit address space (the compiler
16514 generates @code{seth/add3} instructions to load their addresses), and
16515 assume all subroutines are reachable with the @code{bl} instruction.
16517 @item -mmodel=large
16518 @opindex mmodel=large
16519 Assume objects may be anywhere in the 32-bit address space (the compiler
16520 generates @code{seth/add3} instructions to load their addresses), and
16521 assume subroutines may not be reachable with the @code{bl} instruction
16522 (the compiler generates the much slower @code{seth/add3/jl}
16523 instruction sequence).
16525 @item -msdata=none
16526 @opindex msdata=none
16527 Disable use of the small data area.  Variables are put into
16528 one of @samp{.data}, @samp{.bss}, or @samp{.rodata} (unless the
16529 @code{section} attribute has been specified).
16530 This is the default.
16532 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
16533 Objects may be explicitly put in the small data area with the
16534 @code{section} attribute using one of these sections.
16536 @item -msdata=sdata
16537 @opindex msdata=sdata
16538 Put small global and static data in the small data area, but do not
16539 generate special code to reference them.
16541 @item -msdata=use
16542 @opindex msdata=use
16543 Put small global and static data in the small data area, and generate
16544 special instructions to reference them.
16546 @item -G @var{num}
16547 @opindex G
16548 @cindex smaller data references
16549 Put global and static objects less than or equal to @var{num} bytes
16550 into the small data or BSS sections instead of the normal data or BSS
16551 sections.  The default value of @var{num} is 8.
16552 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
16553 for this option to have any effect.
16555 All modules should be compiled with the same @option{-G @var{num}} value.
16556 Compiling with different values of @var{num} may or may not work; if it
16557 doesn't the linker gives an error message---incorrect code is not
16558 generated.
16560 @item -mdebug
16561 @opindex mdebug
16562 Makes the M32R-specific code in the compiler display some statistics
16563 that might help in debugging programs.
16565 @item -malign-loops
16566 @opindex malign-loops
16567 Align all loops to a 32-byte boundary.
16569 @item -mno-align-loops
16570 @opindex mno-align-loops
16571 Do not enforce a 32-byte alignment for loops.  This is the default.
16573 @item -missue-rate=@var{number}
16574 @opindex missue-rate=@var{number}
16575 Issue @var{number} instructions per cycle.  @var{number} can only be 1
16576 or 2.
16578 @item -mbranch-cost=@var{number}
16579 @opindex mbranch-cost=@var{number}
16580 @var{number} can only be 1 or 2.  If it is 1 then branches are
16581 preferred over conditional code, if it is 2, then the opposite applies.
16583 @item -mflush-trap=@var{number}
16584 @opindex mflush-trap=@var{number}
16585 Specifies the trap number to use to flush the cache.  The default is
16586 12.  Valid numbers are between 0 and 15 inclusive.
16588 @item -mno-flush-trap
16589 @opindex mno-flush-trap
16590 Specifies that the cache cannot be flushed by using a trap.
16592 @item -mflush-func=@var{name}
16593 @opindex mflush-func=@var{name}
16594 Specifies the name of the operating system function to call to flush
16595 the cache.  The default is @emph{_flush_cache}, but a function call
16596 is only used if a trap is not available.
16598 @item -mno-flush-func
16599 @opindex mno-flush-func
16600 Indicates that there is no OS function for flushing the cache.
16602 @end table
16604 @node M680x0 Options
16605 @subsection M680x0 Options
16606 @cindex M680x0 options
16608 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
16609 The default settings depend on which architecture was selected when
16610 the compiler was configured; the defaults for the most common choices
16611 are given below.
16613 @table @gcctabopt
16614 @item -march=@var{arch}
16615 @opindex march
16616 Generate code for a specific M680x0 or ColdFire instruction set
16617 architecture.  Permissible values of @var{arch} for M680x0
16618 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
16619 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
16620 architectures are selected according to Freescale's ISA classification
16621 and the permissible values are: @samp{isaa}, @samp{isaaplus},
16622 @samp{isab} and @samp{isac}.
16624 GCC defines a macro @samp{__mcf@var{arch}__} whenever it is generating
16625 code for a ColdFire target.  The @var{arch} in this macro is one of the
16626 @option{-march} arguments given above.
16628 When used together, @option{-march} and @option{-mtune} select code
16629 that runs on a family of similar processors but that is optimized
16630 for a particular microarchitecture.
16632 @item -mcpu=@var{cpu}
16633 @opindex mcpu
16634 Generate code for a specific M680x0 or ColdFire processor.
16635 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
16636 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
16637 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
16638 below, which also classifies the CPUs into families:
16640 @multitable @columnfractions 0.20 0.80
16641 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
16642 @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}
16643 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
16644 @item @samp{5206e} @tab @samp{5206e}
16645 @item @samp{5208} @tab @samp{5207} @samp{5208}
16646 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
16647 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
16648 @item @samp{5216} @tab @samp{5214} @samp{5216}
16649 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
16650 @item @samp{5225} @tab @samp{5224} @samp{5225}
16651 @item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
16652 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
16653 @item @samp{5249} @tab @samp{5249}
16654 @item @samp{5250} @tab @samp{5250}
16655 @item @samp{5271} @tab @samp{5270} @samp{5271}
16656 @item @samp{5272} @tab @samp{5272}
16657 @item @samp{5275} @tab @samp{5274} @samp{5275}
16658 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
16659 @item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
16660 @item @samp{5307} @tab @samp{5307}
16661 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
16662 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
16663 @item @samp{5407} @tab @samp{5407}
16664 @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}
16665 @end multitable
16667 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
16668 @var{arch} is compatible with @var{cpu}.  Other combinations of
16669 @option{-mcpu} and @option{-march} are rejected.
16671 GCC defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
16672 @var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
16673 where the value of @var{family} is given by the table above.
16675 @item -mtune=@var{tune}
16676 @opindex mtune
16677 Tune the code for a particular microarchitecture within the
16678 constraints set by @option{-march} and @option{-mcpu}.
16679 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
16680 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
16681 and @samp{cpu32}.  The ColdFire microarchitectures
16682 are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
16684 You can also use @option{-mtune=68020-40} for code that needs
16685 to run relatively well on 68020, 68030 and 68040 targets.
16686 @option{-mtune=68020-60} is similar but includes 68060 targets
16687 as well.  These two options select the same tuning decisions as
16688 @option{-m68020-40} and @option{-m68020-60} respectively.
16690 GCC defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
16691 when tuning for 680x0 architecture @var{arch}.  It also defines
16692 @samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
16693 option is used.  If GCC is tuning for a range of architectures,
16694 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
16695 it defines the macros for every architecture in the range.
16697 GCC also defines the macro @samp{__m@var{uarch}__} when tuning for
16698 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
16699 of the arguments given above.
16701 @item -m68000
16702 @itemx -mc68000
16703 @opindex m68000
16704 @opindex mc68000
16705 Generate output for a 68000.  This is the default
16706 when the compiler is configured for 68000-based systems.
16707 It is equivalent to @option{-march=68000}.
16709 Use this option for microcontrollers with a 68000 or EC000 core,
16710 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16712 @item -m68010
16713 @opindex m68010
16714 Generate output for a 68010.  This is the default
16715 when the compiler is configured for 68010-based systems.
16716 It is equivalent to @option{-march=68010}.
16718 @item -m68020
16719 @itemx -mc68020
16720 @opindex m68020
16721 @opindex mc68020
16722 Generate output for a 68020.  This is the default
16723 when the compiler is configured for 68020-based systems.
16724 It is equivalent to @option{-march=68020}.
16726 @item -m68030
16727 @opindex m68030
16728 Generate output for a 68030.  This is the default when the compiler is
16729 configured for 68030-based systems.  It is equivalent to
16730 @option{-march=68030}.
16732 @item -m68040
16733 @opindex m68040
16734 Generate output for a 68040.  This is the default when the compiler is
16735 configured for 68040-based systems.  It is equivalent to
16736 @option{-march=68040}.
16738 This option inhibits the use of 68881/68882 instructions that have to be
16739 emulated by software on the 68040.  Use this option if your 68040 does not
16740 have code to emulate those instructions.
16742 @item -m68060
16743 @opindex m68060
16744 Generate output for a 68060.  This is the default when the compiler is
16745 configured for 68060-based systems.  It is equivalent to
16746 @option{-march=68060}.
16748 This option inhibits the use of 68020 and 68881/68882 instructions that
16749 have to be emulated by software on the 68060.  Use this option if your 68060
16750 does not have code to emulate those instructions.
16752 @item -mcpu32
16753 @opindex mcpu32
16754 Generate output for a CPU32.  This is the default
16755 when the compiler is configured for CPU32-based systems.
16756 It is equivalent to @option{-march=cpu32}.
16758 Use this option for microcontrollers with a
16759 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
16760 68336, 68340, 68341, 68349 and 68360.
16762 @item -m5200
16763 @opindex m5200
16764 Generate output for a 520X ColdFire CPU@.  This is the default
16765 when the compiler is configured for 520X-based systems.
16766 It is equivalent to @option{-mcpu=5206}, and is now deprecated
16767 in favor of that option.
16769 Use this option for microcontroller with a 5200 core, including
16770 the MCF5202, MCF5203, MCF5204 and MCF5206.
16772 @item -m5206e
16773 @opindex m5206e
16774 Generate output for a 5206e ColdFire CPU@.  The option is now
16775 deprecated in favor of the equivalent @option{-mcpu=5206e}.
16777 @item -m528x
16778 @opindex m528x
16779 Generate output for a member of the ColdFire 528X family.
16780 The option is now deprecated in favor of the equivalent
16781 @option{-mcpu=528x}.
16783 @item -m5307
16784 @opindex m5307
16785 Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
16786 in favor of the equivalent @option{-mcpu=5307}.
16788 @item -m5407
16789 @opindex m5407
16790 Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
16791 in favor of the equivalent @option{-mcpu=5407}.
16793 @item -mcfv4e
16794 @opindex mcfv4e
16795 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
16796 This includes use of hardware floating-point instructions.
16797 The option is equivalent to @option{-mcpu=547x}, and is now
16798 deprecated in favor of that option.
16800 @item -m68020-40
16801 @opindex m68020-40
16802 Generate output for a 68040, without using any of the new instructions.
16803 This results in code that can run relatively efficiently on either a
16804 68020/68881 or a 68030 or a 68040.  The generated code does use the
16805 68881 instructions that are emulated on the 68040.
16807 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
16809 @item -m68020-60
16810 @opindex m68020-60
16811 Generate output for a 68060, without using any of the new instructions.
16812 This results in code that can run relatively efficiently on either a
16813 68020/68881 or a 68030 or a 68040.  The generated code does use the
16814 68881 instructions that are emulated on the 68060.
16816 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
16818 @item -mhard-float
16819 @itemx -m68881
16820 @opindex mhard-float
16821 @opindex m68881
16822 Generate floating-point instructions.  This is the default for 68020
16823 and above, and for ColdFire devices that have an FPU@.  It defines the
16824 macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
16825 on ColdFire targets.
16827 @item -msoft-float
16828 @opindex msoft-float
16829 Do not generate floating-point instructions; use library calls instead.
16830 This is the default for 68000, 68010, and 68832 targets.  It is also
16831 the default for ColdFire devices that have no FPU.
16833 @item -mdiv
16834 @itemx -mno-div
16835 @opindex mdiv
16836 @opindex mno-div
16837 Generate (do not generate) ColdFire hardware divide and remainder
16838 instructions.  If @option{-march} is used without @option{-mcpu},
16839 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
16840 architectures.  Otherwise, the default is taken from the target CPU
16841 (either the default CPU, or the one specified by @option{-mcpu}).  For
16842 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
16843 @option{-mcpu=5206e}.
16845 GCC defines the macro @samp{__mcfhwdiv__} when this option is enabled.
16847 @item -mshort
16848 @opindex mshort
16849 Consider type @code{int} to be 16 bits wide, like @code{short int}.
16850 Additionally, parameters passed on the stack are also aligned to a
16851 16-bit boundary even on targets whose API mandates promotion to 32-bit.
16853 @item -mno-short
16854 @opindex mno-short
16855 Do not consider type @code{int} to be 16 bits wide.  This is the default.
16857 @item -mnobitfield
16858 @itemx -mno-bitfield
16859 @opindex mnobitfield
16860 @opindex mno-bitfield
16861 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
16862 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
16864 @item -mbitfield
16865 @opindex mbitfield
16866 Do use the bit-field instructions.  The @option{-m68020} option implies
16867 @option{-mbitfield}.  This is the default if you use a configuration
16868 designed for a 68020.
16870 @item -mrtd
16871 @opindex mrtd
16872 Use a different function-calling convention, in which functions
16873 that take a fixed number of arguments return with the @code{rtd}
16874 instruction, which pops their arguments while returning.  This
16875 saves one instruction in the caller since there is no need to pop
16876 the arguments there.
16878 This calling convention is incompatible with the one normally
16879 used on Unix, so you cannot use it if you need to call libraries
16880 compiled with the Unix compiler.
16882 Also, you must provide function prototypes for all functions that
16883 take variable numbers of arguments (including @code{printf});
16884 otherwise incorrect code is generated for calls to those
16885 functions.
16887 In addition, seriously incorrect code results if you call a
16888 function with too many arguments.  (Normally, extra arguments are
16889 harmlessly ignored.)
16891 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
16892 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
16894 @item -mno-rtd
16895 @opindex mno-rtd
16896 Do not use the calling conventions selected by @option{-mrtd}.
16897 This is the default.
16899 @item -malign-int
16900 @itemx -mno-align-int
16901 @opindex malign-int
16902 @opindex mno-align-int
16903 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
16904 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
16905 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
16906 Aligning variables on 32-bit boundaries produces code that runs somewhat
16907 faster on processors with 32-bit busses at the expense of more memory.
16909 @strong{Warning:} if you use the @option{-malign-int} switch, GCC
16910 aligns structures containing the above types differently than
16911 most published application binary interface specifications for the m68k.
16913 @item -mpcrel
16914 @opindex mpcrel
16915 Use the pc-relative addressing mode of the 68000 directly, instead of
16916 using a global offset table.  At present, this option implies @option{-fpic},
16917 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
16918 not presently supported with @option{-mpcrel}, though this could be supported for
16919 68020 and higher processors.
16921 @item -mno-strict-align
16922 @itemx -mstrict-align
16923 @opindex mno-strict-align
16924 @opindex mstrict-align
16925 Do not (do) assume that unaligned memory references are handled by
16926 the system.
16928 @item -msep-data
16929 Generate code that allows the data segment to be located in a different
16930 area of memory from the text segment.  This allows for execute-in-place in
16931 an environment without virtual memory management.  This option implies
16932 @option{-fPIC}.
16934 @item -mno-sep-data
16935 Generate code that assumes that the data segment follows the text segment.
16936 This is the default.
16938 @item -mid-shared-library
16939 Generate code that supports shared libraries via the library ID method.
16940 This allows for execute-in-place and shared libraries in an environment
16941 without virtual memory management.  This option implies @option{-fPIC}.
16943 @item -mno-id-shared-library
16944 Generate code that doesn't assume ID-based shared libraries are being used.
16945 This is the default.
16947 @item -mshared-library-id=n
16948 Specifies the identification number of the ID-based shared library being
16949 compiled.  Specifying a value of 0 generates more compact code; specifying
16950 other values forces the allocation of that number to the current
16951 library, but is no more space- or time-efficient than omitting this option.
16953 @item -mxgot
16954 @itemx -mno-xgot
16955 @opindex mxgot
16956 @opindex mno-xgot
16957 When generating position-independent code for ColdFire, generate code
16958 that works if the GOT has more than 8192 entries.  This code is
16959 larger and slower than code generated without this option.  On M680x0
16960 processors, this option is not needed; @option{-fPIC} suffices.
16962 GCC normally uses a single instruction to load values from the GOT@.
16963 While this is relatively efficient, it only works if the GOT
16964 is smaller than about 64k.  Anything larger causes the linker
16965 to report an error such as:
16967 @cindex relocation truncated to fit (ColdFire)
16968 @smallexample
16969 relocation truncated to fit: R_68K_GOT16O foobar
16970 @end smallexample
16972 If this happens, you should recompile your code with @option{-mxgot}.
16973 It should then work with very large GOTs.  However, code generated with
16974 @option{-mxgot} is less efficient, since it takes 4 instructions to fetch
16975 the value of a global symbol.
16977 Note that some linkers, including newer versions of the GNU linker,
16978 can create multiple GOTs and sort GOT entries.  If you have such a linker,
16979 you should only need to use @option{-mxgot} when compiling a single
16980 object file that accesses more than 8192 GOT entries.  Very few do.
16982 These options have no effect unless GCC is generating
16983 position-independent code.
16985 @end table
16987 @node MCore Options
16988 @subsection MCore Options
16989 @cindex MCore options
16991 These are the @samp{-m} options defined for the Motorola M*Core
16992 processors.
16994 @table @gcctabopt
16996 @item -mhardlit
16997 @itemx -mno-hardlit
16998 @opindex mhardlit
16999 @opindex mno-hardlit
17000 Inline constants into the code stream if it can be done in two
17001 instructions or less.
17003 @item -mdiv
17004 @itemx -mno-div
17005 @opindex mdiv
17006 @opindex mno-div
17007 Use the divide instruction.  (Enabled by default).
17009 @item -mrelax-immediate
17010 @itemx -mno-relax-immediate
17011 @opindex mrelax-immediate
17012 @opindex mno-relax-immediate
17013 Allow arbitrary-sized immediates in bit operations.
17015 @item -mwide-bitfields
17016 @itemx -mno-wide-bitfields
17017 @opindex mwide-bitfields
17018 @opindex mno-wide-bitfields
17019 Always treat bit-fields as @code{int}-sized.
17021 @item -m4byte-functions
17022 @itemx -mno-4byte-functions
17023 @opindex m4byte-functions
17024 @opindex mno-4byte-functions
17025 Force all functions to be aligned to a 4-byte boundary.
17027 @item -mcallgraph-data
17028 @itemx -mno-callgraph-data
17029 @opindex mcallgraph-data
17030 @opindex mno-callgraph-data
17031 Emit callgraph information.
17033 @item -mslow-bytes
17034 @itemx -mno-slow-bytes
17035 @opindex mslow-bytes
17036 @opindex mno-slow-bytes
17037 Prefer word access when reading byte quantities.
17039 @item -mlittle-endian
17040 @itemx -mbig-endian
17041 @opindex mlittle-endian
17042 @opindex mbig-endian
17043 Generate code for a little-endian target.
17045 @item -m210
17046 @itemx -m340
17047 @opindex m210
17048 @opindex m340
17049 Generate code for the 210 processor.
17051 @item -mno-lsim
17052 @opindex mno-lsim
17053 Assume that runtime support has been provided and so omit the
17054 simulator library (@file{libsim.a)} from the linker command line.
17056 @item -mstack-increment=@var{size}
17057 @opindex mstack-increment
17058 Set the maximum amount for a single stack increment operation.  Large
17059 values can increase the speed of programs that contain functions
17060 that need a large amount of stack space, but they can also trigger a
17061 segmentation fault if the stack is extended too much.  The default
17062 value is 0x1000.
17064 @end table
17066 @node MeP Options
17067 @subsection MeP Options
17068 @cindex MeP options
17070 @table @gcctabopt
17072 @item -mabsdiff
17073 @opindex mabsdiff
17074 Enables the @code{abs} instruction, which is the absolute difference
17075 between two registers.
17077 @item -mall-opts
17078 @opindex mall-opts
17079 Enables all the optional instructions---average, multiply, divide, bit
17080 operations, leading zero, absolute difference, min/max, clip, and
17081 saturation.
17084 @item -maverage
17085 @opindex maverage
17086 Enables the @code{ave} instruction, which computes the average of two
17087 registers.
17089 @item -mbased=@var{n}
17090 @opindex mbased=
17091 Variables of size @var{n} bytes or smaller are placed in the
17092 @code{.based} section by default.  Based variables use the @code{$tp}
17093 register as a base register, and there is a 128-byte limit to the
17094 @code{.based} section.
17096 @item -mbitops
17097 @opindex mbitops
17098 Enables the bit operation instructions---bit test (@code{btstm}), set
17099 (@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
17100 test-and-set (@code{tas}).
17102 @item -mc=@var{name}
17103 @opindex mc=
17104 Selects which section constant data is placed in.  @var{name} may
17105 be @code{tiny}, @code{near}, or @code{far}.
17107 @item -mclip
17108 @opindex mclip
17109 Enables the @code{clip} instruction.  Note that @code{-mclip} is not
17110 useful unless you also provide @code{-mminmax}.
17112 @item -mconfig=@var{name}
17113 @opindex mconfig=
17114 Selects one of the built-in core configurations.  Each MeP chip has
17115 one or more modules in it; each module has a core CPU and a variety of
17116 coprocessors, optional instructions, and peripherals.  The
17117 @code{MeP-Integrator} tool, not part of GCC, provides these
17118 configurations through this option; using this option is the same as
17119 using all the corresponding command-line options.  The default
17120 configuration is @code{default}.
17122 @item -mcop
17123 @opindex mcop
17124 Enables the coprocessor instructions.  By default, this is a 32-bit
17125 coprocessor.  Note that the coprocessor is normally enabled via the
17126 @code{-mconfig=} option.
17128 @item -mcop32
17129 @opindex mcop32
17130 Enables the 32-bit coprocessor's instructions.
17132 @item -mcop64
17133 @opindex mcop64
17134 Enables the 64-bit coprocessor's instructions.
17136 @item -mivc2
17137 @opindex mivc2
17138 Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
17140 @item -mdc
17141 @opindex mdc
17142 Causes constant variables to be placed in the @code{.near} section.
17144 @item -mdiv
17145 @opindex mdiv
17146 Enables the @code{div} and @code{divu} instructions.
17148 @item -meb
17149 @opindex meb
17150 Generate big-endian code.
17152 @item -mel
17153 @opindex mel
17154 Generate little-endian code.
17156 @item -mio-volatile
17157 @opindex mio-volatile
17158 Tells the compiler that any variable marked with the @code{io}
17159 attribute is to be considered volatile.
17161 @item -ml
17162 @opindex ml
17163 Causes variables to be assigned to the @code{.far} section by default.
17165 @item -mleadz
17166 @opindex mleadz
17167 Enables the @code{leadz} (leading zero) instruction.
17169 @item -mm
17170 @opindex mm
17171 Causes variables to be assigned to the @code{.near} section by default.
17173 @item -mminmax
17174 @opindex mminmax
17175 Enables the @code{min} and @code{max} instructions.
17177 @item -mmult
17178 @opindex mmult
17179 Enables the multiplication and multiply-accumulate instructions.
17181 @item -mno-opts
17182 @opindex mno-opts
17183 Disables all the optional instructions enabled by @code{-mall-opts}.
17185 @item -mrepeat
17186 @opindex mrepeat
17187 Enables the @code{repeat} and @code{erepeat} instructions, used for
17188 low-overhead looping.
17190 @item -ms
17191 @opindex ms
17192 Causes all variables to default to the @code{.tiny} section.  Note
17193 that there is a 65536-byte limit to this section.  Accesses to these
17194 variables use the @code{%gp} base register.
17196 @item -msatur
17197 @opindex msatur
17198 Enables the saturation instructions.  Note that the compiler does not
17199 currently generate these itself, but this option is included for
17200 compatibility with other tools, like @code{as}.
17202 @item -msdram
17203 @opindex msdram
17204 Link the SDRAM-based runtime instead of the default ROM-based runtime.
17206 @item -msim
17207 @opindex msim
17208 Link the simulator run-time libraries.
17210 @item -msimnovec
17211 @opindex msimnovec
17212 Link the simulator runtime libraries, excluding built-in support
17213 for reset and exception vectors and tables.
17215 @item -mtf
17216 @opindex mtf
17217 Causes all functions to default to the @code{.far} section.  Without
17218 this option, functions default to the @code{.near} section.
17220 @item -mtiny=@var{n}
17221 @opindex mtiny=
17222 Variables that are @var{n} bytes or smaller are allocated to the
17223 @code{.tiny} section.  These variables use the @code{$gp} base
17224 register.  The default for this option is 4, but note that there's a
17225 65536-byte limit to the @code{.tiny} section.
17227 @end table
17229 @node MicroBlaze Options
17230 @subsection MicroBlaze Options
17231 @cindex MicroBlaze Options
17233 @table @gcctabopt
17235 @item -msoft-float
17236 @opindex msoft-float
17237 Use software emulation for floating point (default).
17239 @item -mhard-float
17240 @opindex mhard-float
17241 Use hardware floating-point instructions.
17243 @item -mmemcpy
17244 @opindex mmemcpy
17245 Do not optimize block moves, use @code{memcpy}.
17247 @item -mno-clearbss
17248 @opindex mno-clearbss
17249 This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.
17251 @item -mcpu=@var{cpu-type}
17252 @opindex mcpu=
17253 Use features of, and schedule code for, the given CPU.
17254 Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
17255 where @var{X} is a major version, @var{YY} is the minor version, and
17256 @var{Z} is compatibility code.  Example values are @samp{v3.00.a},
17257 @samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}.
17259 @item -mxl-soft-mul
17260 @opindex mxl-soft-mul
17261 Use software multiply emulation (default).
17263 @item -mxl-soft-div
17264 @opindex mxl-soft-div
17265 Use software emulation for divides (default).
17267 @item -mxl-barrel-shift
17268 @opindex mxl-barrel-shift
17269 Use the hardware barrel shifter.
17271 @item -mxl-pattern-compare
17272 @opindex mxl-pattern-compare
17273 Use pattern compare instructions.
17275 @item -msmall-divides
17276 @opindex msmall-divides
17277 Use table lookup optimization for small signed integer divisions.
17279 @item -mxl-stack-check
17280 @opindex mxl-stack-check
17281 This option is deprecated.  Use @option{-fstack-check} instead.
17283 @item -mxl-gp-opt
17284 @opindex mxl-gp-opt
17285 Use GP-relative @code{.sdata}/@code{.sbss} sections.
17287 @item -mxl-multiply-high
17288 @opindex mxl-multiply-high
17289 Use multiply high instructions for high part of 32x32 multiply.
17291 @item -mxl-float-convert
17292 @opindex mxl-float-convert
17293 Use hardware floating-point conversion instructions.
17295 @item -mxl-float-sqrt
17296 @opindex mxl-float-sqrt
17297 Use hardware floating-point square root instruction.
17299 @item -mbig-endian
17300 @opindex mbig-endian
17301 Generate code for a big-endian target.
17303 @item -mlittle-endian
17304 @opindex mlittle-endian
17305 Generate code for a little-endian target.
17307 @item -mxl-reorder
17308 @opindex mxl-reorder
17309 Use reorder instructions (swap and byte reversed load/store).
17311 @item -mxl-mode-@var{app-model}
17312 Select application model @var{app-model}.  Valid models are
17313 @table @samp
17314 @item executable
17315 normal executable (default), uses startup code @file{crt0.o}.
17317 @item xmdstub
17318 for use with Xilinx Microprocessor Debugger (XMD) based
17319 software intrusive debug agent called xmdstub. This uses startup file
17320 @file{crt1.o} and sets the start address of the program to 0x800.
17322 @item bootstrap
17323 for applications that are loaded using a bootloader.
17324 This model uses startup file @file{crt2.o} which does not contain a processor
17325 reset vector handler. This is suitable for transferring control on a
17326 processor reset to the bootloader rather than the application.
17328 @item novectors
17329 for applications that do not require any of the
17330 MicroBlaze vectors. This option may be useful for applications running
17331 within a monitoring application. This model uses @file{crt3.o} as a startup file.
17332 @end table
17334 Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
17335 @option{-mxl-mode-@var{app-model}}.
17337 @end table
17339 @node MIPS Options
17340 @subsection MIPS Options
17341 @cindex MIPS options
17343 @table @gcctabopt
17345 @item -EB
17346 @opindex EB
17347 Generate big-endian code.
17349 @item -EL
17350 @opindex EL
17351 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
17352 configurations.
17354 @item -march=@var{arch}
17355 @opindex march
17356 Generate code that runs on @var{arch}, which can be the name of a
17357 generic MIPS ISA, or the name of a particular processor.
17358 The ISA names are:
17359 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
17360 @samp{mips32}, @samp{mips32r2}, @samp{mips32r3}, @samp{mips32r5}, 
17361 @samp{mips64}, @samp{mips64r2}, @samp{mips64r3} and @samp{mips64r5}.
17362 The processor names are:
17363 @samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
17364 @samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
17365 @samp{5kc}, @samp{5kf},
17366 @samp{20kc},
17367 @samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
17368 @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
17369 @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, @samp{34kn},
17370 @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
17371 @samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
17372 @samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a},
17373 @samp{m4k},
17374 @samp{m14k}, @samp{m14kc}, @samp{m14ke}, @samp{m14kec},
17375 @samp{octeon}, @samp{octeon+}, @samp{octeon2},
17376 @samp{orion},
17377 @samp{p5600},
17378 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
17379 @samp{r4600}, @samp{r4650}, @samp{r4700}, @samp{r6000}, @samp{r8000},
17380 @samp{rm7000}, @samp{rm9000},
17381 @samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
17382 @samp{sb1},
17383 @samp{sr71000},
17384 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
17385 @samp{vr5000}, @samp{vr5400}, @samp{vr5500},
17386 @samp{xlr} and @samp{xlp}.
17387 The special value @samp{from-abi} selects the
17388 most compatible architecture for the selected ABI (that is,
17389 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
17391 The native Linux/GNU toolchain also supports the value @samp{native},
17392 which selects the best architecture option for the host processor.
17393 @option{-march=native} has no effect if GCC does not recognize
17394 the processor.
17396 In processor names, a final @samp{000} can be abbreviated as @samp{k}
17397 (for example, @option{-march=r2k}).  Prefixes are optional, and
17398 @samp{vr} may be written @samp{r}.
17400 Names of the form @samp{@var{n}f2_1} refer to processors with
17401 FPUs clocked at half the rate of the core, names of the form
17402 @samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
17403 rate as the core, and names of the form @samp{@var{n}f3_2} refer to
17404 processors with FPUs clocked a ratio of 3:2 with respect to the core.
17405 For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
17406 for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
17407 accepted as synonyms for @samp{@var{n}f1_1}.
17409 GCC defines two macros based on the value of this option.  The first
17410 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
17411 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
17412 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
17413 For example, @option{-march=r2000} sets @samp{_MIPS_ARCH}
17414 to @samp{"r2000"} and defines the macro @samp{_MIPS_ARCH_R2000}.
17416 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
17417 above.  In other words, it has the full prefix and does not
17418 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
17419 the macro names the resolved architecture (either @samp{"mips1"} or
17420 @samp{"mips3"}).  It names the default architecture when no
17421 @option{-march} option is given.
17423 @item -mtune=@var{arch}
17424 @opindex mtune
17425 Optimize for @var{arch}.  Among other things, this option controls
17426 the way instructions are scheduled, and the perceived cost of arithmetic
17427 operations.  The list of @var{arch} values is the same as for
17428 @option{-march}.
17430 When this option is not used, GCC optimizes for the processor
17431 specified by @option{-march}.  By using @option{-march} and
17432 @option{-mtune} together, it is possible to generate code that
17433 runs on a family of processors, but optimize the code for one
17434 particular member of that family.
17436 @option{-mtune} defines the macros @samp{_MIPS_TUNE} and
17437 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
17438 @option{-march} ones described above.
17440 @item -mips1
17441 @opindex mips1
17442 Equivalent to @option{-march=mips1}.
17444 @item -mips2
17445 @opindex mips2
17446 Equivalent to @option{-march=mips2}.
17448 @item -mips3
17449 @opindex mips3
17450 Equivalent to @option{-march=mips3}.
17452 @item -mips4
17453 @opindex mips4
17454 Equivalent to @option{-march=mips4}.
17456 @item -mips32
17457 @opindex mips32
17458 Equivalent to @option{-march=mips32}.
17460 @item -mips32r3
17461 @opindex mips32r3
17462 Equivalent to @option{-march=mips32r3}.
17464 @item -mips32r5
17465 @opindex mips32r5
17466 Equivalent to @option{-march=mips32r5}.
17468 @item -mips64
17469 @opindex mips64
17470 Equivalent to @option{-march=mips64}.
17472 @item -mips64r2
17473 @opindex mips64r2
17474 Equivalent to @option{-march=mips64r2}.
17476 @item -mips64r3
17477 @opindex mips64r3
17478 Equivalent to @option{-march=mips64r3}.
17480 @item -mips64r5
17481 @opindex mips64r5
17482 Equivalent to @option{-march=mips64r5}.
17484 @item -mips16
17485 @itemx -mno-mips16
17486 @opindex mips16
17487 @opindex mno-mips16
17488 Generate (do not generate) MIPS16 code.  If GCC is targeting a
17489 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.
17491 MIPS16 code generation can also be controlled on a per-function basis
17492 by means of @code{mips16} and @code{nomips16} attributes.
17493 @xref{Function Attributes}, for more information.
17495 @item -mflip-mips16
17496 @opindex mflip-mips16
17497 Generate MIPS16 code on alternating functions.  This option is provided
17498 for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
17499 not intended for ordinary use in compiling user code.
17501 @item -minterlink-compressed
17502 @item -mno-interlink-compressed
17503 @opindex minterlink-compressed
17504 @opindex mno-interlink-compressed
17505 Require (do not require) that code using the standard (uncompressed) MIPS ISA
17506 be link-compatible with MIPS16 and microMIPS code, and vice versa.
17508 For example, code using the standard ISA encoding cannot jump directly
17509 to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
17510 @option{-minterlink-compressed} therefore disables direct jumps unless GCC
17511 knows that the target of the jump is not compressed.
17513 @item -minterlink-mips16
17514 @itemx -mno-interlink-mips16
17515 @opindex minterlink-mips16
17516 @opindex mno-interlink-mips16
17517 Aliases of @option{-minterlink-compressed} and
17518 @option{-mno-interlink-compressed}.  These options predate the microMIPS ASE
17519 and are retained for backwards compatibility.
17521 @item -mabi=32
17522 @itemx -mabi=o64
17523 @itemx -mabi=n32
17524 @itemx -mabi=64
17525 @itemx -mabi=eabi
17526 @opindex mabi=32
17527 @opindex mabi=o64
17528 @opindex mabi=n32
17529 @opindex mabi=64
17530 @opindex mabi=eabi
17531 Generate code for the given ABI@.
17533 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
17534 generates 64-bit code when you select a 64-bit architecture, but you
17535 can use @option{-mgp32} to get 32-bit code instead.
17537 For information about the O64 ABI, see
17538 @uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.
17540 GCC supports a variant of the o32 ABI in which floating-point registers
17541 are 64 rather than 32 bits wide.  You can select this combination with
17542 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
17543 and @code{mfhc1} instructions and is therefore only supported for
17544 MIPS32R2, MIPS32R3 and MIPS32R5 processors.
17546 The register assignments for arguments and return values remain the
17547 same, but each scalar value is passed in a single 64-bit register
17548 rather than a pair of 32-bit registers.  For example, scalar
17549 floating-point values are returned in @samp{$f0} only, not a
17550 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
17551 remains the same, but all 64 bits are saved.
17553 @item -mabicalls
17554 @itemx -mno-abicalls
17555 @opindex mabicalls
17556 @opindex mno-abicalls
17557 Generate (do not generate) code that is suitable for SVR4-style
17558 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
17559 systems.
17561 @item -mshared
17562 @itemx -mno-shared
17563 Generate (do not generate) code that is fully position-independent,
17564 and that can therefore be linked into shared libraries.  This option
17565 only affects @option{-mabicalls}.
17567 All @option{-mabicalls} code has traditionally been position-independent,
17568 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
17569 as an extension, the GNU toolchain allows executables to use absolute
17570 accesses for locally-binding symbols.  It can also use shorter GP
17571 initialization sequences and generate direct calls to locally-defined
17572 functions.  This mode is selected by @option{-mno-shared}.
17574 @option{-mno-shared} depends on binutils 2.16 or higher and generates
17575 objects that can only be linked by the GNU linker.  However, the option
17576 does not affect the ABI of the final executable; it only affects the ABI
17577 of relocatable objects.  Using @option{-mno-shared} generally makes
17578 executables both smaller and quicker.
17580 @option{-mshared} is the default.
17582 @item -mplt
17583 @itemx -mno-plt
17584 @opindex mplt
17585 @opindex mno-plt
17586 Assume (do not assume) that the static and dynamic linkers
17587 support PLTs and copy relocations.  This option only affects
17588 @option{-mno-shared -mabicalls}.  For the n64 ABI, this option
17589 has no effect without @option{-msym32}.
17591 You can make @option{-mplt} the default by configuring
17592 GCC with @option{--with-mips-plt}.  The default is
17593 @option{-mno-plt} otherwise.
17595 @item -mxgot
17596 @itemx -mno-xgot
17597 @opindex mxgot
17598 @opindex mno-xgot
17599 Lift (do not lift) the usual restrictions on the size of the global
17600 offset table.
17602 GCC normally uses a single instruction to load values from the GOT@.
17603 While this is relatively efficient, it only works if the GOT
17604 is smaller than about 64k.  Anything larger causes the linker
17605 to report an error such as:
17607 @cindex relocation truncated to fit (MIPS)
17608 @smallexample
17609 relocation truncated to fit: R_MIPS_GOT16 foobar
17610 @end smallexample
17612 If this happens, you should recompile your code with @option{-mxgot}.
17613 This works with very large GOTs, although the code is also
17614 less efficient, since it takes three instructions to fetch the
17615 value of a global symbol.
17617 Note that some linkers can create multiple GOTs.  If you have such a
17618 linker, you should only need to use @option{-mxgot} when a single object
17619 file accesses more than 64k's worth of GOT entries.  Very few do.
17621 These options have no effect unless GCC is generating position
17622 independent code.
17624 @item -mgp32
17625 @opindex mgp32
17626 Assume that general-purpose registers are 32 bits wide.
17628 @item -mgp64
17629 @opindex mgp64
17630 Assume that general-purpose registers are 64 bits wide.
17632 @item -mfp32
17633 @opindex mfp32
17634 Assume that floating-point registers are 32 bits wide.
17636 @item -mfp64
17637 @opindex mfp64
17638 Assume that floating-point registers are 64 bits wide.
17640 @item -mhard-float
17641 @opindex mhard-float
17642 Use floating-point coprocessor instructions.
17644 @item -msoft-float
17645 @opindex msoft-float
17646 Do not use floating-point coprocessor instructions.  Implement
17647 floating-point calculations using library calls instead.
17649 @item -mno-float
17650 @opindex mno-float
17651 Equivalent to @option{-msoft-float}, but additionally asserts that the
17652 program being compiled does not perform any floating-point operations.
17653 This option is presently supported only by some bare-metal MIPS
17654 configurations, where it may select a special set of libraries
17655 that lack all floating-point support (including, for example, the
17656 floating-point @code{printf} formats).  
17657 If code compiled with @code{-mno-float} accidentally contains
17658 floating-point operations, it is likely to suffer a link-time
17659 or run-time failure.
17661 @item -msingle-float
17662 @opindex msingle-float
17663 Assume that the floating-point coprocessor only supports single-precision
17664 operations.
17666 @item -mdouble-float
17667 @opindex mdouble-float
17668 Assume that the floating-point coprocessor supports double-precision
17669 operations.  This is the default.
17671 @item -mabs=2008
17672 @itemx -mabs=legacy
17673 @opindex mabs=2008
17674 @opindex mabs=legacy
17675 These options control the treatment of the special not-a-number (NaN)
17676 IEEE 754 floating-point data with the @code{abs.@i{fmt}} and
17677 @code{neg.@i{fmt}} machine instructions.
17679 By default or when the @option{-mabs=legacy} is used the legacy
17680 treatment is selected.  In this case these instructions are considered
17681 arithmetic and avoided where correct operation is required and the
17682 input operand might be a NaN.  A longer sequence of instructions that
17683 manipulate the sign bit of floating-point datum manually is used
17684 instead unless the @option{-ffinite-math-only} option has also been
17685 specified.
17687 The @option{-mabs=2008} option selects the IEEE 754-2008 treatment.  In
17688 this case these instructions are considered non-arithmetic and therefore
17689 operating correctly in all cases, including in particular where the
17690 input operand is a NaN.  These instructions are therefore always used
17691 for the respective operations.
17693 @item -mnan=2008
17694 @itemx -mnan=legacy
17695 @opindex mnan=2008
17696 @opindex mnan=legacy
17697 These options control the encoding of the special not-a-number (NaN)
17698 IEEE 754 floating-point data.
17700 The @option{-mnan=legacy} option selects the legacy encoding.  In this
17701 case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17702 significand field being 0, whereas signalling NaNs (sNaNs) are denoted
17703 by the first bit of their trailing significand field being 1.
17705 The @option{-mnan=2008} option selects the IEEE 754-2008 encoding.  In
17706 this case qNaNs are denoted by the first bit of their trailing
17707 significand field being 1, whereas sNaNs are denoted by the first bit of
17708 their trailing significand field being 0.
17710 The default is @option{-mnan=legacy} unless GCC has been configured with
17711 @option{--with-nan=2008}.
17713 @item -mllsc
17714 @itemx -mno-llsc
17715 @opindex mllsc
17716 @opindex mno-llsc
17717 Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
17718 implement atomic memory built-in functions.  When neither option is
17719 specified, GCC uses the instructions if the target architecture
17720 supports them.
17722 @option{-mllsc} is useful if the runtime environment can emulate the
17723 instructions and @option{-mno-llsc} can be useful when compiling for
17724 nonstandard ISAs.  You can make either option the default by
17725 configuring GCC with @option{--with-llsc} and @option{--without-llsc}
17726 respectively.  @option{--with-llsc} is the default for some
17727 configurations; see the installation documentation for details.
17729 @item -mdsp
17730 @itemx -mno-dsp
17731 @opindex mdsp
17732 @opindex mno-dsp
17733 Use (do not use) revision 1 of the MIPS DSP ASE@.
17734 @xref{MIPS DSP Built-in Functions}.  This option defines the
17735 preprocessor macro @samp{__mips_dsp}.  It also defines
17736 @samp{__mips_dsp_rev} to 1.
17738 @item -mdspr2
17739 @itemx -mno-dspr2
17740 @opindex mdspr2
17741 @opindex mno-dspr2
17742 Use (do not use) revision 2 of the MIPS DSP ASE@.
17743 @xref{MIPS DSP Built-in Functions}.  This option defines the
17744 preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
17745 It also defines @samp{__mips_dsp_rev} to 2.
17747 @item -msmartmips
17748 @itemx -mno-smartmips
17749 @opindex msmartmips
17750 @opindex mno-smartmips
17751 Use (do not use) the MIPS SmartMIPS ASE.
17753 @item -mpaired-single
17754 @itemx -mno-paired-single
17755 @opindex mpaired-single
17756 @opindex mno-paired-single
17757 Use (do not use) paired-single floating-point instructions.
17758 @xref{MIPS Paired-Single Support}.  This option requires
17759 hardware floating-point support to be enabled.
17761 @item -mdmx
17762 @itemx -mno-mdmx
17763 @opindex mdmx
17764 @opindex mno-mdmx
17765 Use (do not use) MIPS Digital Media Extension instructions.
17766 This option can only be used when generating 64-bit code and requires
17767 hardware floating-point support to be enabled.
17769 @item -mips3d
17770 @itemx -mno-mips3d
17771 @opindex mips3d
17772 @opindex mno-mips3d
17773 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
17774 The option @option{-mips3d} implies @option{-mpaired-single}.
17776 @item -mmicromips
17777 @itemx -mno-micromips
17778 @opindex mmicromips
17779 @opindex mno-mmicromips
17780 Generate (do not generate) microMIPS code.
17782 MicroMIPS code generation can also be controlled on a per-function basis
17783 by means of @code{micromips} and @code{nomicromips} attributes.
17784 @xref{Function Attributes}, for more information.
17786 @item -mmt
17787 @itemx -mno-mt
17788 @opindex mmt
17789 @opindex mno-mt
17790 Use (do not use) MT Multithreading instructions.
17792 @item -mmcu
17793 @itemx -mno-mcu
17794 @opindex mmcu
17795 @opindex mno-mcu
17796 Use (do not use) the MIPS MCU ASE instructions.
17798 @item -meva
17799 @itemx -mno-eva
17800 @opindex meva
17801 @opindex mno-eva
17802 Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17804 @item -mvirt
17805 @itemx -mno-virt
17806 @opindex mvirt
17807 @opindex mno-virt
17808 Use (do not use) the MIPS Virtualization Application Specific instructions.
17810 @item -mxpa
17811 @itemx -mno-xpa
17812 @opindex mxpa
17813 @opindex mno-xpa
17814 Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.
17816 @item -mlong64
17817 @opindex mlong64
17818 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
17819 an explanation of the default and the way that the pointer size is
17820 determined.
17822 @item -mlong32
17823 @opindex mlong32
17824 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
17826 The default size of @code{int}s, @code{long}s and pointers depends on
17827 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
17828 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
17829 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
17830 or the same size as integer registers, whichever is smaller.
17832 @item -msym32
17833 @itemx -mno-sym32
17834 @opindex msym32
17835 @opindex mno-sym32
17836 Assume (do not assume) that all symbols have 32-bit values, regardless
17837 of the selected ABI@.  This option is useful in combination with
17838 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
17839 to generate shorter and faster references to symbolic addresses.
17841 @item -G @var{num}
17842 @opindex G
17843 Put definitions of externally-visible data in a small data section
17844 if that data is no bigger than @var{num} bytes.  GCC can then generate
17845 more efficient accesses to the data; see @option{-mgpopt} for details.
17847 The default @option{-G} option depends on the configuration.
17849 @item -mlocal-sdata
17850 @itemx -mno-local-sdata
17851 @opindex mlocal-sdata
17852 @opindex mno-local-sdata
17853 Extend (do not extend) the @option{-G} behavior to local data too,
17854 such as to static variables in C@.  @option{-mlocal-sdata} is the
17855 default for all configurations.
17857 If the linker complains that an application is using too much small data,
17858 you might want to try rebuilding the less performance-critical parts with
17859 @option{-mno-local-sdata}.  You might also want to build large
17860 libraries with @option{-mno-local-sdata}, so that the libraries leave
17861 more room for the main program.
17863 @item -mextern-sdata
17864 @itemx -mno-extern-sdata
17865 @opindex mextern-sdata
17866 @opindex mno-extern-sdata
17867 Assume (do not assume) that externally-defined data is in
17868 a small data section if the size of that data is within the @option{-G} limit.
17869 @option{-mextern-sdata} is the default for all configurations.
17871 If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
17872 @var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
17873 that is no bigger than @var{num} bytes, you must make sure that @var{Var}
17874 is placed in a small data section.  If @var{Var} is defined by another
17875 module, you must either compile that module with a high-enough
17876 @option{-G} setting or attach a @code{section} attribute to @var{Var}'s
17877 definition.  If @var{Var} is common, you must link the application
17878 with a high-enough @option{-G} setting.
17880 The easiest way of satisfying these restrictions is to compile
17881 and link every module with the same @option{-G} option.  However,
17882 you may wish to build a library that supports several different
17883 small data limits.  You can do this by compiling the library with
17884 the highest supported @option{-G} setting and additionally using
17885 @option{-mno-extern-sdata} to stop the library from making assumptions
17886 about externally-defined data.
17888 @item -mgpopt
17889 @itemx -mno-gpopt
17890 @opindex mgpopt
17891 @opindex mno-gpopt
17892 Use (do not use) GP-relative accesses for symbols that are known to be
17893 in a small data section; see @option{-G}, @option{-mlocal-sdata} and
17894 @option{-mextern-sdata}.  @option{-mgpopt} is the default for all
17895 configurations.
17897 @option{-mno-gpopt} is useful for cases where the @code{$gp} register
17898 might not hold the value of @code{_gp}.  For example, if the code is
17899 part of a library that might be used in a boot monitor, programs that
17900 call boot monitor routines pass an unknown value in @code{$gp}.
17901 (In such situations, the boot monitor itself is usually compiled
17902 with @option{-G0}.)
17904 @option{-mno-gpopt} implies @option{-mno-local-sdata} and
17905 @option{-mno-extern-sdata}.
17907 @item -membedded-data
17908 @itemx -mno-embedded-data
17909 @opindex membedded-data
17910 @opindex mno-embedded-data
17911 Allocate variables to the read-only data section first if possible, then
17912 next in the small data section if possible, otherwise in data.  This gives
17913 slightly slower code than the default, but reduces the amount of RAM required
17914 when executing, and thus may be preferred for some embedded systems.
17916 @item -muninit-const-in-rodata
17917 @itemx -mno-uninit-const-in-rodata
17918 @opindex muninit-const-in-rodata
17919 @opindex mno-uninit-const-in-rodata
17920 Put uninitialized @code{const} variables in the read-only data section.
17921 This option is only meaningful in conjunction with @option{-membedded-data}.
17923 @item -mcode-readable=@var{setting}
17924 @opindex mcode-readable
17925 Specify whether GCC may generate code that reads from executable sections.
17926 There are three possible settings:
17928 @table @gcctabopt
17929 @item -mcode-readable=yes
17930 Instructions may freely access executable sections.  This is the
17931 default setting.
17933 @item -mcode-readable=pcrel
17934 MIPS16 PC-relative load instructions can access executable sections,
17935 but other instructions must not do so.  This option is useful on 4KSc
17936 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
17937 It is also useful on processors that can be configured to have a dual
17938 instruction/data SRAM interface and that, like the M4K, automatically
17939 redirect PC-relative loads to the instruction RAM.
17941 @item -mcode-readable=no
17942 Instructions must not access executable sections.  This option can be
17943 useful on targets that are configured to have a dual instruction/data
17944 SRAM interface but that (unlike the M4K) do not automatically redirect
17945 PC-relative loads to the instruction RAM.
17946 @end table
17948 @item -msplit-addresses
17949 @itemx -mno-split-addresses
17950 @opindex msplit-addresses
17951 @opindex mno-split-addresses
17952 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
17953 relocation operators.  This option has been superseded by
17954 @option{-mexplicit-relocs} but is retained for backwards compatibility.
17956 @item -mexplicit-relocs
17957 @itemx -mno-explicit-relocs
17958 @opindex mexplicit-relocs
17959 @opindex mno-explicit-relocs
17960 Use (do not use) assembler relocation operators when dealing with symbolic
17961 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
17962 is to use assembler macros instead.
17964 @option{-mexplicit-relocs} is the default if GCC was configured
17965 to use an assembler that supports relocation operators.
17967 @item -mcheck-zero-division
17968 @itemx -mno-check-zero-division
17969 @opindex mcheck-zero-division
17970 @opindex mno-check-zero-division
17971 Trap (do not trap) on integer division by zero.
17973 The default is @option{-mcheck-zero-division}.
17975 @item -mdivide-traps
17976 @itemx -mdivide-breaks
17977 @opindex mdivide-traps
17978 @opindex mdivide-breaks
17979 MIPS systems check for division by zero by generating either a
17980 conditional trap or a break instruction.  Using traps results in
17981 smaller code, but is only supported on MIPS II and later.  Also, some
17982 versions of the Linux kernel have a bug that prevents trap from
17983 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
17984 allow conditional traps on architectures that support them and
17985 @option{-mdivide-breaks} to force the use of breaks.
17987 The default is usually @option{-mdivide-traps}, but this can be
17988 overridden at configure time using @option{--with-divide=breaks}.
17989 Divide-by-zero checks can be completely disabled using
17990 @option{-mno-check-zero-division}.
17992 @item -mmemcpy
17993 @itemx -mno-memcpy
17994 @opindex mmemcpy
17995 @opindex mno-memcpy
17996 Force (do not force) the use of @code{memcpy()} for non-trivial block
17997 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
17998 most constant-sized copies.
18000 @item -mlong-calls
18001 @itemx -mno-long-calls
18002 @opindex mlong-calls
18003 @opindex mno-long-calls
18004 Disable (do not disable) use of the @code{jal} instruction.  Calling
18005 functions using @code{jal} is more efficient but requires the caller
18006 and callee to be in the same 256 megabyte segment.
18008 This option has no effect on abicalls code.  The default is
18009 @option{-mno-long-calls}.
18011 @item -mmad
18012 @itemx -mno-mad
18013 @opindex mmad
18014 @opindex mno-mad
18015 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
18016 instructions, as provided by the R4650 ISA@.
18018 @item -mimadd
18019 @itemx -mno-imadd
18020 @opindex mimadd
18021 @opindex mno-imadd
18022 Enable (disable) use of the @code{madd} and @code{msub} integer
18023 instructions.  The default is @option{-mimadd} on architectures
18024 that support @code{madd} and @code{msub} except for the 74k 
18025 architecture where it was found to generate slower code.
18027 @item -mfused-madd
18028 @itemx -mno-fused-madd
18029 @opindex mfused-madd
18030 @opindex mno-fused-madd
18031 Enable (disable) use of the floating-point multiply-accumulate
18032 instructions, when they are available.  The default is
18033 @option{-mfused-madd}.
18035 On the R8000 CPU when multiply-accumulate instructions are used,
18036 the intermediate product is calculated to infinite precision
18037 and is not subject to the FCSR Flush to Zero bit.  This may be
18038 undesirable in some circumstances.  On other processors the result
18039 is numerically identical to the equivalent computation using
18040 separate multiply, add, subtract and negate instructions.
18042 @item -nocpp
18043 @opindex nocpp
18044 Tell the MIPS assembler to not run its preprocessor over user
18045 assembler files (with a @samp{.s} suffix) when assembling them.
18047 @item -mfix-24k
18048 @item -mno-fix-24k
18049 @opindex mfix-24k
18050 @opindex mno-fix-24k
18051 Work around the 24K E48 (lost data on stores during refill) errata.
18052 The workarounds are implemented by the assembler rather than by GCC@.
18054 @item -mfix-r4000
18055 @itemx -mno-fix-r4000
18056 @opindex mfix-r4000
18057 @opindex mno-fix-r4000
18058 Work around certain R4000 CPU errata:
18059 @itemize @minus
18060 @item
18061 A double-word or a variable shift may give an incorrect result if executed
18062 immediately after starting an integer division.
18063 @item
18064 A double-word or a variable shift may give an incorrect result if executed
18065 while an integer multiplication is in progress.
18066 @item
18067 An integer division may give an incorrect result if started in a delay slot
18068 of a taken branch or a jump.
18069 @end itemize
18071 @item -mfix-r4400
18072 @itemx -mno-fix-r4400
18073 @opindex mfix-r4400
18074 @opindex mno-fix-r4400
18075 Work around certain R4400 CPU errata:
18076 @itemize @minus
18077 @item
18078 A double-word or a variable shift may give an incorrect result if executed
18079 immediately after starting an integer division.
18080 @end itemize
18082 @item -mfix-r10000
18083 @itemx -mno-fix-r10000
18084 @opindex mfix-r10000
18085 @opindex mno-fix-r10000
18086 Work around certain R10000 errata:
18087 @itemize @minus
18088 @item
18089 @code{ll}/@code{sc} sequences may not behave atomically on revisions
18090 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
18091 @end itemize
18093 This option can only be used if the target architecture supports
18094 branch-likely instructions.  @option{-mfix-r10000} is the default when
18095 @option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
18096 otherwise.
18098 @item -mfix-rm7000
18099 @itemx -mno-fix-rm7000
18100 @opindex mfix-rm7000
18101 Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
18102 workarounds are implemented by the assembler rather than by GCC@.
18104 @item -mfix-vr4120
18105 @itemx -mno-fix-vr4120
18106 @opindex mfix-vr4120
18107 Work around certain VR4120 errata:
18108 @itemize @minus
18109 @item
18110 @code{dmultu} does not always produce the correct result.
18111 @item
18112 @code{div} and @code{ddiv} do not always produce the correct result if one
18113 of the operands is negative.
18114 @end itemize
18115 The workarounds for the division errata rely on special functions in
18116 @file{libgcc.a}.  At present, these functions are only provided by
18117 the @code{mips64vr*-elf} configurations.
18119 Other VR4120 errata require a NOP to be inserted between certain pairs of
18120 instructions.  These errata are handled by the assembler, not by GCC itself.
18122 @item -mfix-vr4130
18123 @opindex mfix-vr4130
18124 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
18125 workarounds are implemented by the assembler rather than by GCC,
18126 although GCC avoids using @code{mflo} and @code{mfhi} if the
18127 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
18128 instructions are available instead.
18130 @item -mfix-sb1
18131 @itemx -mno-fix-sb1
18132 @opindex mfix-sb1
18133 Work around certain SB-1 CPU core errata.
18134 (This flag currently works around the SB-1 revision 2
18135 ``F1'' and ``F2'' floating-point errata.)
18137 @item -mr10k-cache-barrier=@var{setting}
18138 @opindex mr10k-cache-barrier
18139 Specify whether GCC should insert cache barriers to avoid the
18140 side-effects of speculation on R10K processors.
18142 In common with many processors, the R10K tries to predict the outcome
18143 of a conditional branch and speculatively executes instructions from
18144 the ``taken'' branch.  It later aborts these instructions if the
18145 predicted outcome is wrong.  However, on the R10K, even aborted
18146 instructions can have side effects.
18148 This problem only affects kernel stores and, depending on the system,
18149 kernel loads.  As an example, a speculatively-executed store may load
18150 the target memory into cache and mark the cache line as dirty, even if
18151 the store itself is later aborted.  If a DMA operation writes to the
18152 same area of memory before the ``dirty'' line is flushed, the cached
18153 data overwrites the DMA-ed data.  See the R10K processor manual
18154 for a full description, including other potential problems.
18156 One workaround is to insert cache barrier instructions before every memory
18157 access that might be speculatively executed and that might have side
18158 effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
18159 controls GCC's implementation of this workaround.  It assumes that
18160 aborted accesses to any byte in the following regions does not have
18161 side effects:
18163 @enumerate
18164 @item
18165 the memory occupied by the current function's stack frame;
18167 @item
18168 the memory occupied by an incoming stack argument;
18170 @item
18171 the memory occupied by an object with a link-time-constant address.
18172 @end enumerate
18174 It is the kernel's responsibility to ensure that speculative
18175 accesses to these regions are indeed safe.
18177 If the input program contains a function declaration such as:
18179 @smallexample
18180 void foo (void);
18181 @end smallexample
18183 then the implementation of @code{foo} must allow @code{j foo} and
18184 @code{jal foo} to be executed speculatively.  GCC honors this
18185 restriction for functions it compiles itself.  It expects non-GCC
18186 functions (such as hand-written assembly code) to do the same.
18188 The option has three forms:
18190 @table @gcctabopt
18191 @item -mr10k-cache-barrier=load-store
18192 Insert a cache barrier before a load or store that might be
18193 speculatively executed and that might have side effects even
18194 if aborted.
18196 @item -mr10k-cache-barrier=store
18197 Insert a cache barrier before a store that might be speculatively
18198 executed and that might have side effects even if aborted.
18200 @item -mr10k-cache-barrier=none
18201 Disable the insertion of cache barriers.  This is the default setting.
18202 @end table
18204 @item -mflush-func=@var{func}
18205 @itemx -mno-flush-func
18206 @opindex mflush-func
18207 Specifies the function to call to flush the I and D caches, or to not
18208 call any such function.  If called, the function must take the same
18209 arguments as the common @code{_flush_func()}, that is, the address of the
18210 memory range for which the cache is being flushed, the size of the
18211 memory range, and the number 3 (to flush both caches).  The default
18212 depends on the target GCC was configured for, but commonly is either
18213 @samp{_flush_func} or @samp{__cpu_flush}.
18215 @item mbranch-cost=@var{num}
18216 @opindex mbranch-cost
18217 Set the cost of branches to roughly @var{num} ``simple'' instructions.
18218 This cost is only a heuristic and is not guaranteed to produce
18219 consistent results across releases.  A zero cost redundantly selects
18220 the default, which is based on the @option{-mtune} setting.
18222 @item -mbranch-likely
18223 @itemx -mno-branch-likely
18224 @opindex mbranch-likely
18225 @opindex mno-branch-likely
18226 Enable or disable use of Branch Likely instructions, regardless of the
18227 default for the selected architecture.  By default, Branch Likely
18228 instructions may be generated if they are supported by the selected
18229 architecture.  An exception is for the MIPS32 and MIPS64 architectures
18230 and processors that implement those architectures; for those, Branch
18231 Likely instructions are not be generated by default because the MIPS32
18232 and MIPS64 architectures specifically deprecate their use.
18234 @item -mfp-exceptions
18235 @itemx -mno-fp-exceptions
18236 @opindex mfp-exceptions
18237 Specifies whether FP exceptions are enabled.  This affects how
18238 FP instructions are scheduled for some processors.
18239 The default is that FP exceptions are
18240 enabled.
18242 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
18243 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
18244 FP pipe.
18246 @item -mvr4130-align
18247 @itemx -mno-vr4130-align
18248 @opindex mvr4130-align
18249 The VR4130 pipeline is two-way superscalar, but can only issue two
18250 instructions together if the first one is 8-byte aligned.  When this
18251 option is enabled, GCC aligns pairs of instructions that it
18252 thinks should execute in parallel.
18254 This option only has an effect when optimizing for the VR4130.
18255 It normally makes code faster, but at the expense of making it bigger.
18256 It is enabled by default at optimization level @option{-O3}.
18258 @item -msynci
18259 @itemx -mno-synci
18260 @opindex msynci
18261 Enable (disable) generation of @code{synci} instructions on
18262 architectures that support it.  The @code{synci} instructions (if
18263 enabled) are generated when @code{__builtin___clear_cache()} is
18264 compiled.
18266 This option defaults to @code{-mno-synci}, but the default can be
18267 overridden by configuring with @code{--with-synci}.
18269 When compiling code for single processor systems, it is generally safe
18270 to use @code{synci}.  However, on many multi-core (SMP) systems, it
18271 does not invalidate the instruction caches on all cores and may lead
18272 to undefined behavior.
18274 @item -mrelax-pic-calls
18275 @itemx -mno-relax-pic-calls
18276 @opindex mrelax-pic-calls
18277 Try to turn PIC calls that are normally dispatched via register
18278 @code{$25} into direct calls.  This is only possible if the linker can
18279 resolve the destination at link-time and if the destination is within
18280 range for a direct call.
18282 @option{-mrelax-pic-calls} is the default if GCC was configured to use
18283 an assembler and a linker that support the @code{.reloc} assembly
18284 directive and @code{-mexplicit-relocs} is in effect.  With
18285 @code{-mno-explicit-relocs}, this optimization can be performed by the
18286 assembler and the linker alone without help from the compiler.
18288 @item -mmcount-ra-address
18289 @itemx -mno-mcount-ra-address
18290 @opindex mmcount-ra-address
18291 @opindex mno-mcount-ra-address
18292 Emit (do not emit) code that allows @code{_mcount} to modify the
18293 calling function's return address.  When enabled, this option extends
18294 the usual @code{_mcount} interface with a new @var{ra-address}
18295 parameter, which has type @code{intptr_t *} and is passed in register
18296 @code{$12}.  @code{_mcount} can then modify the return address by
18297 doing both of the following:
18298 @itemize
18299 @item
18300 Returning the new address in register @code{$31}.
18301 @item
18302 Storing the new address in @code{*@var{ra-address}},
18303 if @var{ra-address} is nonnull.
18304 @end itemize
18306 The default is @option{-mno-mcount-ra-address}.
18308 @end table
18310 @node MMIX Options
18311 @subsection MMIX Options
18312 @cindex MMIX Options
18314 These options are defined for the MMIX:
18316 @table @gcctabopt
18317 @item -mlibfuncs
18318 @itemx -mno-libfuncs
18319 @opindex mlibfuncs
18320 @opindex mno-libfuncs
18321 Specify that intrinsic library functions are being compiled, passing all
18322 values in registers, no matter the size.
18324 @item -mepsilon
18325 @itemx -mno-epsilon
18326 @opindex mepsilon
18327 @opindex mno-epsilon
18328 Generate floating-point comparison instructions that compare with respect
18329 to the @code{rE} epsilon register.
18331 @item -mabi=mmixware
18332 @itemx -mabi=gnu
18333 @opindex mabi=mmixware
18334 @opindex mabi=gnu
18335 Generate code that passes function parameters and return values that (in
18336 the called function) are seen as registers @code{$0} and up, as opposed to
18337 the GNU ABI which uses global registers @code{$231} and up.
18339 @item -mzero-extend
18340 @itemx -mno-zero-extend
18341 @opindex mzero-extend
18342 @opindex mno-zero-extend
18343 When reading data from memory in sizes shorter than 64 bits, use (do not
18344 use) zero-extending load instructions by default, rather than
18345 sign-extending ones.
18347 @item -mknuthdiv
18348 @itemx -mno-knuthdiv
18349 @opindex mknuthdiv
18350 @opindex mno-knuthdiv
18351 Make the result of a division yielding a remainder have the same sign as
18352 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
18353 remainder follows the sign of the dividend.  Both methods are
18354 arithmetically valid, the latter being almost exclusively used.
18356 @item -mtoplevel-symbols
18357 @itemx -mno-toplevel-symbols
18358 @opindex mtoplevel-symbols
18359 @opindex mno-toplevel-symbols
18360 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
18361 code can be used with the @code{PREFIX} assembly directive.
18363 @item -melf
18364 @opindex melf
18365 Generate an executable in the ELF format, rather than the default
18366 @samp{mmo} format used by the @command{mmix} simulator.
18368 @item -mbranch-predict
18369 @itemx -mno-branch-predict
18370 @opindex mbranch-predict
18371 @opindex mno-branch-predict
18372 Use (do not use) the probable-branch instructions, when static branch
18373 prediction indicates a probable branch.
18375 @item -mbase-addresses
18376 @itemx -mno-base-addresses
18377 @opindex mbase-addresses
18378 @opindex mno-base-addresses
18379 Generate (do not generate) code that uses @emph{base addresses}.  Using a
18380 base address automatically generates a request (handled by the assembler
18381 and the linker) for a constant to be set up in a global register.  The
18382 register is used for one or more base address requests within the range 0
18383 to 255 from the value held in the register.  The generally leads to short
18384 and fast code, but the number of different data items that can be
18385 addressed is limited.  This means that a program that uses lots of static
18386 data may require @option{-mno-base-addresses}.
18388 @item -msingle-exit
18389 @itemx -mno-single-exit
18390 @opindex msingle-exit
18391 @opindex mno-single-exit
18392 Force (do not force) generated code to have a single exit point in each
18393 function.
18394 @end table
18396 @node MN10300 Options
18397 @subsection MN10300 Options
18398 @cindex MN10300 options
18400 These @option{-m} options are defined for Matsushita MN10300 architectures:
18402 @table @gcctabopt
18403 @item -mmult-bug
18404 @opindex mmult-bug
18405 Generate code to avoid bugs in the multiply instructions for the MN10300
18406 processors.  This is the default.
18408 @item -mno-mult-bug
18409 @opindex mno-mult-bug
18410 Do not generate code to avoid bugs in the multiply instructions for the
18411 MN10300 processors.
18413 @item -mam33
18414 @opindex mam33
18415 Generate code using features specific to the AM33 processor.
18417 @item -mno-am33
18418 @opindex mno-am33
18419 Do not generate code using features specific to the AM33 processor.  This
18420 is the default.
18422 @item -mam33-2
18423 @opindex mam33-2
18424 Generate code using features specific to the AM33/2.0 processor.
18426 @item -mam34
18427 @opindex mam34
18428 Generate code using features specific to the AM34 processor.
18430 @item -mtune=@var{cpu-type}
18431 @opindex mtune
18432 Use the timing characteristics of the indicated CPU type when
18433 scheduling instructions.  This does not change the targeted processor
18434 type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
18435 @samp{am33-2} or @samp{am34}.
18437 @item -mreturn-pointer-on-d0
18438 @opindex mreturn-pointer-on-d0
18439 When generating a function that returns a pointer, return the pointer
18440 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
18441 only in @code{a0}, and attempts to call such functions without a prototype
18442 result in errors.  Note that this option is on by default; use
18443 @option{-mno-return-pointer-on-d0} to disable it.
18445 @item -mno-crt0
18446 @opindex mno-crt0
18447 Do not link in the C run-time initialization object file.
18449 @item -mrelax
18450 @opindex mrelax
18451 Indicate to the linker that it should perform a relaxation optimization pass
18452 to shorten branches, calls and absolute memory addresses.  This option only
18453 has an effect when used on the command line for the final link step.
18455 This option makes symbolic debugging impossible.
18457 @item -mliw
18458 @opindex mliw
18459 Allow the compiler to generate @emph{Long Instruction Word}
18460 instructions if the target is the @samp{AM33} or later.  This is the
18461 default.  This option defines the preprocessor macro @samp{__LIW__}.
18463 @item -mnoliw
18464 @opindex mnoliw
18465 Do not allow the compiler to generate @emph{Long Instruction Word}
18466 instructions.  This option defines the preprocessor macro
18467 @samp{__NO_LIW__}.
18469 @item -msetlb
18470 @opindex msetlb
18471 Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
18472 instructions if the target is the @samp{AM33} or later.  This is the
18473 default.  This option defines the preprocessor macro @samp{__SETLB__}.
18475 @item -mnosetlb
18476 @opindex mnosetlb
18477 Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
18478 instructions.  This option defines the preprocessor macro
18479 @samp{__NO_SETLB__}.
18481 @end table
18483 @node Moxie Options
18484 @subsection Moxie Options
18485 @cindex Moxie Options
18487 @table @gcctabopt
18489 @item -meb
18490 @opindex meb
18491 Generate big-endian code.  This is the default for @samp{moxie-*-*}
18492 configurations.
18494 @item -mel
18495 @opindex mel
18496 Generate little-endian code.
18498 @item -mno-crt0
18499 @opindex mno-crt0
18500 Do not link in the C run-time initialization object file.
18502 @end table
18504 @node MSP430 Options
18505 @subsection MSP430 Options
18506 @cindex MSP430 Options
18508 These options are defined for the MSP430:
18510 @table @gcctabopt
18512 @item -masm-hex
18513 @opindex masm-hex
18514 Force assembly output to always use hex constants.  Normally such
18515 constants are signed decimals, but this option is available for
18516 testsuite and/or aesthetic purposes.
18518 @item -mmcu=
18519 @opindex mmcu=
18520 Select the MCU to target.  This is used to create a C preprocessor
18521 symbol based upon the MCU name, converted to upper case and pre- and
18522 post- fixed with @code{__}.  This in turn will be used by the
18523 @code{msp430.h} header file to select an MCU specific supplimentary
18524 header file.
18526 The option also sets the ISA to use.  If the MCU name is one that is
18527 known to only support the 430 ISA then that is selected, otherwise the
18528 430X ISA is selected.  A generic MCU name of @code{msp430} can also be
18529 used to select the 430 ISA.  Similarly the generic @code{msp430x} MCU
18530 name will select the 430X ISA.
18532 In addition an MCU specific linker script will be added to the linker
18533 command line.  The script's name is the name of the MCU with
18534 @code{.ld} appended.  Thus specifying @option{-mmcu=xxx} on the gcc
18535 command line will define the C preprocessor symbol @code{__XXX__} and
18536 cause the linker to search for a script called @file{xxx.ld}.
18538 This option is also passed on to the assembler.
18540 @item -mcpu=
18541 @opindex -mcpu=
18542 Specifies the ISA to use.  Accepted values are @code{msp430},
18543 @code{msp430x} and @code{msp430xv2}.  This option is deprecated.  The
18544 @option{-mmcu=} option should be used to select the ISA.
18546 @item -msim
18547 @opindex msim
18548 Link to the simulator runtime libraries and linker script.  Overrides
18549 any scripts that would be selected by the @option{-mmcu=} option.
18551 @item -mlarge
18552 @opindex mlarge
18553 Use large-model addressing (20-bit pointers, 32-bit @code{size_t}).
18555 @item -msmall
18556 @opindex msmall
18557 Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).
18559 @item -mrelax
18560 @opindex mrelax
18561 This option is passed to the assembler and linker, and allows the
18562 linker to perform certain optimizations that cannot be done until
18563 the final link.
18565 @item mhwmult=
18566 @opindex mhwmult=
18567 Describes the type of hardware multiply supported by the target.
18568 Accepted values are @code{none} for no hardware multiply, @code{16bit}
18569 for the original 16-bit-only multiply supported by early MCUs.
18570 @code{32bit} for the 16/32-bit multiply supported by later MCUs and
18571 @code{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
18572 A value of @code{auto} can also be given.  This tells GCC to deduce
18573 the hardware multiply support based upon the MCU name provided by the
18574 @option{-mmcu} option.  If no @option{-mmcu} option is specified then
18575 @code{32bit} hardware multiply support is assumed.  @code{auto} is the
18576 default setting.
18578 Hardware multiplies are normally performed by calling a library
18579 routine.  This saves space in the generated code.  When compiling at
18580 @code{-O3} or higher however the hardware multiplier is invoked
18581 inline.  This makes for bigger, but faster code.
18583 The hardware multiply routines disable interrupts whilst running and
18584 restore the previous interrupt state when they finish.  This makes
18585 them safe to use inside interrupt handlers as well as in normal code.
18587 @end table
18589 @node NDS32 Options
18590 @subsection NDS32 Options
18591 @cindex NDS32 Options
18593 These options are defined for NDS32 implementations:
18595 @table @gcctabopt
18597 @item -mbig-endian
18598 @opindex mbig-endian
18599 Generate code in big-endian mode.
18601 @item -mlittle-endian
18602 @opindex mlittle-endian
18603 Generate code in little-endian mode.
18605 @item -mreduced-regs
18606 @opindex mreduced-regs
18607 Use reduced-set registers for register allocation.
18609 @item -mfull-regs
18610 @opindex mfull-regs
18611 Use full-set registers for register allocation.
18613 @item -mcmov
18614 @opindex mcmov
18615 Generate conditional move instructions.
18617 @item -mno-cmov
18618 @opindex mno-cmov
18619 Do not generate conditional move instructions.
18621 @item -mperf-ext
18622 @opindex mperf-ext
18623 Generate performance extension instructions.
18625 @item -mno-perf-ext
18626 @opindex mno-perf-ext
18627 Do not generate performance extension instructions.
18629 @item -mv3push
18630 @opindex mv3push
18631 Generate v3 push25/pop25 instructions.
18633 @item -mno-v3push
18634 @opindex mno-v3push
18635 Do not generate v3 push25/pop25 instructions.
18637 @item -m16-bit
18638 @opindex m16-bit
18639 Generate 16-bit instructions.
18641 @item -mno-16-bit
18642 @opindex mno-16-bit
18643 Do not generate 16-bit instructions.
18645 @item -mgp-direct
18646 @opindex mgp-direct
18647 Generate GP base instructions directly.
18649 @item -mno-gp-direct
18650 @opindex mno-gp-direct
18651 Do no generate GP base instructions directly.
18653 @item -misr-vector-size=@var{num}
18654 @opindex misr-vector-size
18655 Specify the size of each interrupt vector, which must be 4 or 16.
18657 @item -mcache-block-size=@var{num}
18658 @opindex mcache-block-size
18659 Specify the size of each cache block,
18660 which must be a power of 2 between 4 and 512.
18662 @item -march=@var{arch}
18663 @opindex march
18664 Specify the name of the target architecture.
18666 @item -mforce-fp-as-gp
18667 @opindex mforce-fp-as-gp
18668 Prevent $fp being allocated during register allocation so that compiler
18669 is able to force performing fp-as-gp optimization.
18671 @item -mforbid-fp-as-gp
18672 @opindex mforbid-fp-as-gp
18673 Forbid using $fp to access static and global variables.
18674 This option strictly forbids fp-as-gp optimization
18675 regardless of @option{-mforce-fp-as-gp}.
18677 @item -mex9
18678 @opindex mex9
18679 Use special directives to guide linker doing ex9 optimization.
18681 @item -mctor-dtor
18682 @opindex mctor-dtor
18683 Enable constructor/destructor feature.
18685 @item -mrelax
18686 @opindex mrelax
18687 Guide linker to relax instructions.
18689 @end table
18691 @node Nios II Options
18692 @subsection Nios II Options
18693 @cindex Nios II options
18694 @cindex Altera Nios II options
18696 These are the options defined for the Altera Nios II processor.
18698 @table @gcctabopt
18700 @item -G @var{num}
18701 @opindex G
18702 @cindex smaller data references
18703 Put global and static objects less than or equal to @var{num} bytes
18704 into the small data or BSS sections instead of the normal data or BSS
18705 sections.  The default value of @var{num} is 8.
18707 @item -mgpopt
18708 @itemx -mno-gpopt
18709 @opindex mgpopt
18710 @opindex mno-gpopt
18711 Generate (do not generate) GP-relative accesses for objects in the
18712 small data or BSS sections.  The default is @option{-mgpopt} except
18713 when @option{-fpic} or @option{-fPIC} is specified to generate
18714 position-independent code.  Note that the Nios II ABI does not permit
18715 GP-relative accesses from shared libraries.
18717 You may need to specify @option{-mno-gpopt} explicitly when building
18718 programs that include large amounts of small data, including large
18719 GOT data sections.  In this case, the 16-bit offset for GP-relative
18720 addressing may not be large enough to allow access to the entire 
18721 small data section.
18723 @item -mel
18724 @itemx -meb
18725 @opindex mel
18726 @opindex meb
18727 Generate little-endian (default) or big-endian (experimental) code,
18728 respectively.
18730 @item -mbypass-cache
18731 @itemx -mno-bypass-cache
18732 @opindex mno-bypass-cache
18733 @opindex mbypass-cache
18734 Force all load and store instructions to always bypass cache by 
18735 using I/O variants of the instructions. The default is not to
18736 bypass the cache.
18738 @item -mno-cache-volatile 
18739 @itemx -mcache-volatile       
18740 @opindex mcache-volatile 
18741 @opindex mno-cache-volatile
18742 Volatile memory access bypass the cache using the I/O variants of 
18743 the load and store instructions. The default is not to bypass the cache.
18745 @item -mno-fast-sw-div
18746 @itemx -mfast-sw-div
18747 @opindex mno-fast-sw-div
18748 @opindex mfast-sw-div
18749 Do not use table-based fast divide for small numbers. The default 
18750 is to use the fast divide at @option{-O3} and above.
18752 @item -mno-hw-mul
18753 @itemx -mhw-mul
18754 @itemx -mno-hw-mulx
18755 @itemx -mhw-mulx
18756 @itemx -mno-hw-div
18757 @itemx -mhw-div
18758 @opindex mno-hw-mul
18759 @opindex mhw-mul
18760 @opindex mno-hw-mulx
18761 @opindex mhw-mulx
18762 @opindex mno-hw-div
18763 @opindex mhw-div
18764 Enable or disable emitting @code{mul}, @code{mulx} and @code{div} family of 
18765 instructions by the compiler. The default is to emit @code{mul}
18766 and not emit @code{div} and @code{mulx}.
18768 @item -mcustom-@var{insn}=@var{N}
18769 @itemx -mno-custom-@var{insn}
18770 @opindex mcustom-@var{insn}
18771 @opindex mno-custom-@var{insn}
18772 Each @option{-mcustom-@var{insn}=@var{N}} option enables use of a
18773 custom instruction with encoding @var{N} when generating code that uses 
18774 @var{insn}.  For example, @code{-mcustom-fadds=253} generates custom
18775 instruction 253 for single-precision floating-point add operations instead
18776 of the default behavior of using a library call.
18778 The following values of @var{insn} are supported.  Except as otherwise
18779 noted, floating-point operations are expected to be implemented with
18780 normal IEEE 754 semantics and correspond directly to the C operators or the
18781 equivalent GCC built-in functions (@pxref{Other Builtins}).
18783 Single-precision floating point:
18784 @table @asis
18786 @item @samp{fadds}, @samp{fsubs}, @samp{fdivs}, @samp{fmuls}
18787 Binary arithmetic operations.
18789 @item @samp{fnegs}
18790 Unary negation.
18792 @item @samp{fabss}
18793 Unary absolute value.
18795 @item @samp{fcmpeqs}, @samp{fcmpges}, @samp{fcmpgts}, @samp{fcmples}, @samp{fcmplts}, @samp{fcmpnes}
18796 Comparison operations.
18798 @item @samp{fmins}, @samp{fmaxs}
18799 Floating-point minimum and maximum.  These instructions are only
18800 generated if @option{-ffinite-math-only} is specified.
18802 @item @samp{fsqrts}
18803 Unary square root operation.
18805 @item @samp{fcoss}, @samp{fsins}, @samp{ftans}, @samp{fatans}, @samp{fexps}, @samp{flogs}
18806 Floating-point trigonometric and exponential functions.  These instructions
18807 are only generated if @option{-funsafe-math-optimizations} is also specified.
18809 @end table
18811 Double-precision floating point:
18812 @table @asis
18814 @item @samp{faddd}, @samp{fsubd}, @samp{fdivd}, @samp{fmuld}
18815 Binary arithmetic operations.
18817 @item @samp{fnegd}
18818 Unary negation.
18820 @item @samp{fabsd}
18821 Unary absolute value.
18823 @item @samp{fcmpeqd}, @samp{fcmpged}, @samp{fcmpgtd}, @samp{fcmpled}, @samp{fcmpltd}, @samp{fcmpned}
18824 Comparison operations.
18826 @item @samp{fmind}, @samp{fmaxd}
18827 Double-precision minimum and maximum.  These instructions are only
18828 generated if @option{-ffinite-math-only} is specified.
18830 @item @samp{fsqrtd}
18831 Unary square root operation.
18833 @item @samp{fcosd}, @samp{fsind}, @samp{ftand}, @samp{fatand}, @samp{fexpd}, @samp{flogd}
18834 Double-precision trigonometric and exponential functions.  These instructions
18835 are only generated if @option{-funsafe-math-optimizations} is also specified.
18837 @end table
18839 Conversions:
18840 @table @asis
18841 @item @samp{fextsd}
18842 Conversion from single precision to double precision.
18844 @item @samp{ftruncds}
18845 Conversion from double precision to single precision.
18847 @item @samp{fixsi}, @samp{fixsu}, @samp{fixdi}, @samp{fixdu}
18848 Conversion from floating point to signed or unsigned integer types, with
18849 truncation towards zero.
18851 @item @samp{round}
18852 Conversion from single-precision floating point to signed integer,
18853 rounding to the nearest integer and ties away from zero.
18854 This corresponds to the @code{__builtin_lroundf} function when
18855 @option{-fno-math-errno} is used.
18857 @item @samp{floatis}, @samp{floatus}, @samp{floatid}, @samp{floatud}
18858 Conversion from signed or unsigned integer types to floating-point types.
18860 @end table
18862 In addition, all of the following transfer instructions for internal
18863 registers X and Y must be provided to use any of the double-precision
18864 floating-point instructions.  Custom instructions taking two
18865 double-precision source operands expect the first operand in the
18866 64-bit register X.  The other operand (or only operand of a unary
18867 operation) is given to the custom arithmetic instruction with the
18868 least significant half in source register @var{src1} and the most
18869 significant half in @var{src2}.  A custom instruction that returns a
18870 double-precision result returns the most significant 32 bits in the
18871 destination register and the other half in 32-bit register Y.  
18872 GCC automatically generates the necessary code sequences to write
18873 register X and/or read register Y when double-precision floating-point
18874 instructions are used.
18876 @table @asis
18878 @item @samp{fwrx}
18879 Write @var{src1} into the least significant half of X and @var{src2} into
18880 the most significant half of X.
18882 @item @samp{fwry}
18883 Write @var{src1} into Y.
18885 @item @samp{frdxhi}, @samp{frdxlo}
18886 Read the most or least (respectively) significant half of X and store it in
18887 @var{dest}.
18889 @item @samp{frdy}
18890 Read the value of Y and store it into @var{dest}.
18891 @end table
18893 Note that you can gain more local control over generation of Nios II custom
18894 instructions by using the @code{target("custom-@var{insn}=@var{N}")}
18895 and @code{target("no-custom-@var{insn}")} function attributes
18896 (@pxref{Function Attributes})
18897 or pragmas (@pxref{Function Specific Option Pragmas}).
18899 @item -mcustom-fpu-cfg=@var{name}
18900 @opindex mcustom-fpu-cfg
18902 This option enables a predefined, named set of custom instruction encodings
18903 (see @option{-mcustom-@var{insn}} above).  
18904 Currently, the following sets are defined:
18906 @option{-mcustom-fpu-cfg=60-1} is equivalent to:
18907 @gccoptlist{-mcustom-fmuls=252 @gol
18908 -mcustom-fadds=253 @gol
18909 -mcustom-fsubs=254 @gol
18910 -fsingle-precision-constant}
18912 @option{-mcustom-fpu-cfg=60-2} is equivalent to:
18913 @gccoptlist{-mcustom-fmuls=252 @gol
18914 -mcustom-fadds=253 @gol
18915 -mcustom-fsubs=254 @gol
18916 -mcustom-fdivs=255 @gol
18917 -fsingle-precision-constant}
18919 @option{-mcustom-fpu-cfg=72-3} is equivalent to:
18920 @gccoptlist{-mcustom-floatus=243 @gol
18921 -mcustom-fixsi=244 @gol
18922 -mcustom-floatis=245 @gol
18923 -mcustom-fcmpgts=246 @gol
18924 -mcustom-fcmples=249 @gol
18925 -mcustom-fcmpeqs=250 @gol
18926 -mcustom-fcmpnes=251 @gol
18927 -mcustom-fmuls=252 @gol
18928 -mcustom-fadds=253 @gol
18929 -mcustom-fsubs=254 @gol
18930 -mcustom-fdivs=255 @gol
18931 -fsingle-precision-constant}
18933 Custom instruction assignments given by individual
18934 @option{-mcustom-@var{insn}=} options override those given by
18935 @option{-mcustom-fpu-cfg=}, regardless of the
18936 order of the options on the command line.
18938 Note that you can gain more local control over selection of a FPU
18939 configuration by using the @code{target("custom-fpu-cfg=@var{name}")}
18940 function attribute (@pxref{Function Attributes})
18941 or pragma (@pxref{Function Specific Option Pragmas}).
18943 @end table
18945 These additional @samp{-m} options are available for the Altera Nios II
18946 ELF (bare-metal) target:
18948 @table @gcctabopt
18950 @item -mhal
18951 @opindex mhal
18952 Link with HAL BSP.  This suppresses linking with the GCC-provided C runtime
18953 startup and termination code, and is typically used in conjunction with
18954 @option{-msys-crt0=} to specify the location of the alternate startup code
18955 provided by the HAL BSP.
18957 @item -msmallc
18958 @opindex msmallc
18959 Link with a limited version of the C library, @option{-lsmallc}, rather than
18960 Newlib.
18962 @item -msys-crt0=@var{startfile}
18963 @opindex msys-crt0
18964 @var{startfile} is the file name of the startfile (crt0) to use 
18965 when linking.  This option is only useful in conjunction with @option{-mhal}.
18967 @item -msys-lib=@var{systemlib}
18968 @opindex msys-lib
18969 @var{systemlib} is the library name of the library that provides
18970 low-level system calls required by the C library,
18971 e.g. @code{read} and @code{write}.
18972 This option is typically used to link with a library provided by a HAL BSP.
18974 @end table
18976 @node PDP-11 Options
18977 @subsection PDP-11 Options
18978 @cindex PDP-11 Options
18980 These options are defined for the PDP-11:
18982 @table @gcctabopt
18983 @item -mfpu
18984 @opindex mfpu
18985 Use hardware FPP floating point.  This is the default.  (FIS floating
18986 point on the PDP-11/40 is not supported.)
18988 @item -msoft-float
18989 @opindex msoft-float
18990 Do not use hardware floating point.
18992 @item -mac0
18993 @opindex mac0
18994 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
18996 @item -mno-ac0
18997 @opindex mno-ac0
18998 Return floating-point results in memory.  This is the default.
19000 @item -m40
19001 @opindex m40
19002 Generate code for a PDP-11/40.
19004 @item -m45
19005 @opindex m45
19006 Generate code for a PDP-11/45.  This is the default.
19008 @item -m10
19009 @opindex m10
19010 Generate code for a PDP-11/10.
19012 @item -mbcopy-builtin
19013 @opindex mbcopy-builtin
19014 Use inline @code{movmemhi} patterns for copying memory.  This is the
19015 default.
19017 @item -mbcopy
19018 @opindex mbcopy
19019 Do not use inline @code{movmemhi} patterns for copying memory.
19021 @item -mint16
19022 @itemx -mno-int32
19023 @opindex mint16
19024 @opindex mno-int32
19025 Use 16-bit @code{int}.  This is the default.
19027 @item -mint32
19028 @itemx -mno-int16
19029 @opindex mint32
19030 @opindex mno-int16
19031 Use 32-bit @code{int}.
19033 @item -mfloat64
19034 @itemx -mno-float32
19035 @opindex mfloat64
19036 @opindex mno-float32
19037 Use 64-bit @code{float}.  This is the default.
19039 @item -mfloat32
19040 @itemx -mno-float64
19041 @opindex mfloat32
19042 @opindex mno-float64
19043 Use 32-bit @code{float}.
19045 @item -mabshi
19046 @opindex mabshi
19047 Use @code{abshi2} pattern.  This is the default.
19049 @item -mno-abshi
19050 @opindex mno-abshi
19051 Do not use @code{abshi2} pattern.
19053 @item -mbranch-expensive
19054 @opindex mbranch-expensive
19055 Pretend that branches are expensive.  This is for experimenting with
19056 code generation only.
19058 @item -mbranch-cheap
19059 @opindex mbranch-cheap
19060 Do not pretend that branches are expensive.  This is the default.
19062 @item -munix-asm
19063 @opindex munix-asm
19064 Use Unix assembler syntax.  This is the default when configured for
19065 @samp{pdp11-*-bsd}.
19067 @item -mdec-asm
19068 @opindex mdec-asm
19069 Use DEC assembler syntax.  This is the default when configured for any
19070 PDP-11 target other than @samp{pdp11-*-bsd}.
19071 @end table
19073 @node picoChip Options
19074 @subsection picoChip Options
19075 @cindex picoChip options
19077 These @samp{-m} options are defined for picoChip implementations:
19079 @table @gcctabopt
19081 @item -mae=@var{ae_type}
19082 @opindex mcpu
19083 Set the instruction set, register set, and instruction scheduling
19084 parameters for array element type @var{ae_type}.  Supported values
19085 for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
19087 @option{-mae=ANY} selects a completely generic AE type.  Code
19088 generated with this option runs on any of the other AE types.  The
19089 code is not as efficient as it would be if compiled for a specific
19090 AE type, and some types of operation (e.g., multiplication) do not
19091 work properly on all types of AE.
19093 @option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
19094 for compiled code, and is the default.
19096 @option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
19097 option may suffer from poor performance of byte (char) manipulation,
19098 since the DSP AE does not provide hardware support for byte load/stores.
19100 @item -msymbol-as-address
19101 Enable the compiler to directly use a symbol name as an address in a
19102 load/store instruction, without first loading it into a
19103 register.  Typically, the use of this option generates larger
19104 programs, which run faster than when the option isn't used.  However, the
19105 results vary from program to program, so it is left as a user option,
19106 rather than being permanently enabled.
19108 @item -mno-inefficient-warnings
19109 Disables warnings about the generation of inefficient code.  These
19110 warnings can be generated, for example, when compiling code that
19111 performs byte-level memory operations on the MAC AE type.  The MAC AE has
19112 no hardware support for byte-level memory operations, so all byte
19113 load/stores must be synthesized from word load/store operations.  This is
19114 inefficient and a warning is generated to indicate
19115 that you should rewrite the code to avoid byte operations, or to target
19116 an AE type that has the necessary hardware support.  This option disables
19117 these warnings.
19119 @end table
19121 @node PowerPC Options
19122 @subsection PowerPC Options
19123 @cindex PowerPC options
19125 These are listed under @xref{RS/6000 and PowerPC Options}.
19127 @node RL78 Options
19128 @subsection RL78 Options
19129 @cindex RL78 Options
19131 @table @gcctabopt
19133 @item -msim
19134 @opindex msim
19135 Links in additional target libraries to support operation within a
19136 simulator.
19138 @item -mmul=none
19139 @itemx -mmul=g13
19140 @itemx -mmul=rl78
19141 @opindex mmul
19142 Specifies the type of hardware multiplication support to be used.  The
19143 default is @code{none}, which uses software multiplication functions.
19144 The @code{g13} option is for the hardware multiply/divide peripheral
19145 only on the RL78/G13 targets.  The @code{rl78} option is for the
19146 standard hardware multiplication defined in the RL78 software manual.
19148 @item -m64bit-doubles
19149 @itemx -m32bit-doubles
19150 @opindex m64bit-doubles
19151 @opindex m32bit-doubles
19152 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
19153 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
19154 @option{-m32bit-doubles}.
19156 @end table
19158 @node RS/6000 and PowerPC Options
19159 @subsection IBM RS/6000 and PowerPC Options
19160 @cindex RS/6000 and PowerPC Options
19161 @cindex IBM RS/6000 and PowerPC Options
19163 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
19164 @table @gcctabopt
19165 @item -mpowerpc-gpopt
19166 @itemx -mno-powerpc-gpopt
19167 @itemx -mpowerpc-gfxopt
19168 @itemx -mno-powerpc-gfxopt
19169 @need 800
19170 @itemx -mpowerpc64
19171 @itemx -mno-powerpc64
19172 @itemx -mmfcrf
19173 @itemx -mno-mfcrf
19174 @itemx -mpopcntb
19175 @itemx -mno-popcntb
19176 @itemx -mpopcntd
19177 @itemx -mno-popcntd
19178 @itemx -mfprnd
19179 @itemx -mno-fprnd
19180 @need 800
19181 @itemx -mcmpb
19182 @itemx -mno-cmpb
19183 @itemx -mmfpgpr
19184 @itemx -mno-mfpgpr
19185 @itemx -mhard-dfp
19186 @itemx -mno-hard-dfp
19187 @opindex mpowerpc-gpopt
19188 @opindex mno-powerpc-gpopt
19189 @opindex mpowerpc-gfxopt
19190 @opindex mno-powerpc-gfxopt
19191 @opindex mpowerpc64
19192 @opindex mno-powerpc64
19193 @opindex mmfcrf
19194 @opindex mno-mfcrf
19195 @opindex mpopcntb
19196 @opindex mno-popcntb
19197 @opindex mpopcntd
19198 @opindex mno-popcntd
19199 @opindex mfprnd
19200 @opindex mno-fprnd
19201 @opindex mcmpb
19202 @opindex mno-cmpb
19203 @opindex mmfpgpr
19204 @opindex mno-mfpgpr
19205 @opindex mhard-dfp
19206 @opindex mno-hard-dfp
19207 You use these options to specify which instructions are available on the
19208 processor you are using.  The default value of these options is
19209 determined when configuring GCC@.  Specifying the
19210 @option{-mcpu=@var{cpu_type}} overrides the specification of these
19211 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
19212 rather than the options listed above.
19214 Specifying @option{-mpowerpc-gpopt} allows
19215 GCC to use the optional PowerPC architecture instructions in the
19216 General Purpose group, including floating-point square root.  Specifying
19217 @option{-mpowerpc-gfxopt} allows GCC to
19218 use the optional PowerPC architecture instructions in the Graphics
19219 group, including floating-point select.
19221 The @option{-mmfcrf} option allows GCC to generate the move from
19222 condition register field instruction implemented on the POWER4
19223 processor and other processors that support the PowerPC V2.01
19224 architecture.
19225 The @option{-mpopcntb} option allows GCC to generate the popcount and
19226 double-precision FP reciprocal estimate instruction implemented on the
19227 POWER5 processor and other processors that support the PowerPC V2.02
19228 architecture.
19229 The @option{-mpopcntd} option allows GCC to generate the popcount
19230 instruction implemented on the POWER7 processor and other processors
19231 that support the PowerPC V2.06 architecture.
19232 The @option{-mfprnd} option allows GCC to generate the FP round to
19233 integer instructions implemented on the POWER5+ processor and other
19234 processors that support the PowerPC V2.03 architecture.
19235 The @option{-mcmpb} option allows GCC to generate the compare bytes
19236 instruction implemented on the POWER6 processor and other processors
19237 that support the PowerPC V2.05 architecture.
19238 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
19239 general-purpose register instructions implemented on the POWER6X
19240 processor and other processors that support the extended PowerPC V2.05
19241 architecture.
19242 The @option{-mhard-dfp} option allows GCC to generate the decimal
19243 floating-point instructions implemented on some POWER processors.
19245 The @option{-mpowerpc64} option allows GCC to generate the additional
19246 64-bit instructions that are found in the full PowerPC64 architecture
19247 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
19248 @option{-mno-powerpc64}.
19250 @item -mcpu=@var{cpu_type}
19251 @opindex mcpu
19252 Set architecture type, register usage, and
19253 instruction scheduling parameters for machine type @var{cpu_type}.
19254 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
19255 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
19256 @samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
19257 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
19258 @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
19259 @samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
19260 @samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
19261 @samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
19262 @samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
19263 @samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8}, @samp{powerpc},
19264 @samp{powerpc64}, and @samp{rs64}.
19266 @option{-mcpu=powerpc}, and @option{-mcpu=powerpc64} specify pure 32-bit
19267 PowerPC and 64-bit PowerPC architecture machine
19268 types, with an appropriate, generic processor model assumed for
19269 scheduling purposes.
19271 The other options specify a specific processor.  Code generated under
19272 those options runs best on that processor, and may not run at all on
19273 others.
19275 The @option{-mcpu} options automatically enable or disable the
19276 following options:
19278 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
19279 -mpopcntb -mpopcntd  -mpowerpc64 @gol
19280 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
19281 -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx @gol
19282 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector @gol
19283 -mquad-memory -mquad-memory-atomic}
19285 The particular options set for any particular CPU varies between
19286 compiler versions, depending on what setting seems to produce optimal
19287 code for that CPU; it doesn't necessarily reflect the actual hardware's
19288 capabilities.  If you wish to set an individual option to a particular
19289 value, you may specify it after the @option{-mcpu} option, like
19290 @option{-mcpu=970 -mno-altivec}.
19292 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
19293 not enabled or disabled by the @option{-mcpu} option at present because
19294 AIX does not have full support for these options.  You may still
19295 enable or disable them individually if you're sure it'll work in your
19296 environment.
19298 @item -mtune=@var{cpu_type}
19299 @opindex mtune
19300 Set the instruction scheduling parameters for machine type
19301 @var{cpu_type}, but do not set the architecture type or register usage,
19302 as @option{-mcpu=@var{cpu_type}} does.  The same
19303 values for @var{cpu_type} are used for @option{-mtune} as for
19304 @option{-mcpu}.  If both are specified, the code generated uses the
19305 architecture and registers set by @option{-mcpu}, but the
19306 scheduling parameters set by @option{-mtune}.
19308 @item -mcmodel=small
19309 @opindex mcmodel=small
19310 Generate PowerPC64 code for the small model: The TOC is limited to
19311 64k.
19313 @item -mcmodel=medium
19314 @opindex mcmodel=medium
19315 Generate PowerPC64 code for the medium model: The TOC and other static
19316 data may be up to a total of 4G in size.
19318 @item -mcmodel=large
19319 @opindex mcmodel=large
19320 Generate PowerPC64 code for the large model: The TOC may be up to 4G
19321 in size.  Other data and code is only limited by the 64-bit address
19322 space.
19324 @item -maltivec
19325 @itemx -mno-altivec
19326 @opindex maltivec
19327 @opindex mno-altivec
19328 Generate code that uses (does not use) AltiVec instructions, and also
19329 enable the use of built-in functions that allow more direct access to
19330 the AltiVec instruction set.  You may also need to set
19331 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
19332 enhancements.
19334 When @option{-maltivec} is used, rather than @option{-maltivec=le} or
19335 @option{-maltivec=be}, the element order for Altivec intrinsics such
19336 as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} will
19337 match array element order corresponding to the endianness of the
19338 target.  That is, element zero identifies the leftmost element in a
19339 vector register when targeting a big-endian platform, and identifies
19340 the rightmost element in a vector register when targeting a
19341 little-endian platform.
19343 @item -maltivec=be
19344 @opindex maltivec=be
19345 Generate Altivec instructions using big-endian element order,
19346 regardless of whether the target is big- or little-endian.  This is
19347 the default when targeting a big-endian platform.
19349 The element order is used to interpret element numbers in Altivec
19350 intrinsics such as @code{vec_splat}, @code{vec_extract}, and
19351 @code{vec_insert}.  By default, these will match array element order
19352 corresponding to the endianness for the target.
19354 @item -maltivec=le
19355 @opindex maltivec=le
19356 Generate Altivec instructions using little-endian element order,
19357 regardless of whether the target is big- or little-endian.  This is
19358 the default when targeting a little-endian platform.  This option is
19359 currently ignored when targeting a big-endian platform.
19361 The element order is used to interpret element numbers in Altivec
19362 intrinsics such as @code{vec_splat}, @code{vec_extract}, and
19363 @code{vec_insert}.  By default, these will match array element order
19364 corresponding to the endianness for the target.
19366 @item -mvrsave
19367 @itemx -mno-vrsave
19368 @opindex mvrsave
19369 @opindex mno-vrsave
19370 Generate VRSAVE instructions when generating AltiVec code.
19372 @item -mgen-cell-microcode
19373 @opindex mgen-cell-microcode
19374 Generate Cell microcode instructions.
19376 @item -mwarn-cell-microcode
19377 @opindex mwarn-cell-microcode
19378 Warn when a Cell microcode instruction is emitted.  An example
19379 of a Cell microcode instruction is a variable shift.
19381 @item -msecure-plt
19382 @opindex msecure-plt
19383 Generate code that allows @command{ld} and @command{ld.so}
19384 to build executables and shared
19385 libraries with non-executable @code{.plt} and @code{.got} sections.
19386 This is a PowerPC
19387 32-bit SYSV ABI option.
19389 @item -mbss-plt
19390 @opindex mbss-plt
19391 Generate code that uses a BSS @code{.plt} section that @command{ld.so}
19392 fills in, and
19393 requires @code{.plt} and @code{.got}
19394 sections that are both writable and executable.
19395 This is a PowerPC 32-bit SYSV ABI option.
19397 @item -misel
19398 @itemx -mno-isel
19399 @opindex misel
19400 @opindex mno-isel
19401 This switch enables or disables the generation of ISEL instructions.
19403 @item -misel=@var{yes/no}
19404 This switch has been deprecated.  Use @option{-misel} and
19405 @option{-mno-isel} instead.
19407 @item -mspe
19408 @itemx -mno-spe
19409 @opindex mspe
19410 @opindex mno-spe
19411 This switch enables or disables the generation of SPE simd
19412 instructions.
19414 @item -mpaired
19415 @itemx -mno-paired
19416 @opindex mpaired
19417 @opindex mno-paired
19418 This switch enables or disables the generation of PAIRED simd
19419 instructions.
19421 @item -mspe=@var{yes/no}
19422 This option has been deprecated.  Use @option{-mspe} and
19423 @option{-mno-spe} instead.
19425 @item -mvsx
19426 @itemx -mno-vsx
19427 @opindex mvsx
19428 @opindex mno-vsx
19429 Generate code that uses (does not use) vector/scalar (VSX)
19430 instructions, and also enable the use of built-in functions that allow
19431 more direct access to the VSX instruction set.
19433 @item -mcrypto
19434 @itemx -mno-crypto
19435 @opindex mcrypto
19436 @opindex mno-crypto
19437 Enable the use (disable) of the built-in functions that allow direct
19438 access to the cryptographic instructions that were added in version
19439 2.07 of the PowerPC ISA.
19441 @item -mdirect-move
19442 @itemx -mno-direct-move
19443 @opindex mdirect-move
19444 @opindex mno-direct-move
19445 Generate code that uses (does not use) the instructions to move data
19446 between the general purpose registers and the vector/scalar (VSX)
19447 registers that were added in version 2.07 of the PowerPC ISA.
19449 @item -mpower8-fusion
19450 @itemx -mno-power8-fusion
19451 @opindex mpower8-fusion
19452 @opindex mno-power8-fusion
19453 Generate code that keeps (does not keeps) some integer operations
19454 adjacent so that the instructions can be fused together on power8 and
19455 later processors.
19457 @item -mpower8-vector
19458 @itemx -mno-power8-vector
19459 @opindex mpower8-vector
19460 @opindex mno-power8-vector
19461 Generate code that uses (does not use) the vector and scalar
19462 instructions that were added in version 2.07 of the PowerPC ISA.  Also
19463 enable the use of built-in functions that allow more direct access to
19464 the vector instructions.
19466 @item -mquad-memory
19467 @itemx -mno-quad-memory
19468 @opindex mquad-memory
19469 @opindex mno-quad-memory
19470 Generate code that uses (does not use) the non-atomic quad word memory
19471 instructions.  The @option{-mquad-memory} option requires use of
19472 64-bit mode.
19474 @item -mquad-memory-atomic
19475 @itemx -mno-quad-memory-atomic
19476 @opindex mquad-memory-atomic
19477 @opindex mno-quad-memory-atomic
19478 Generate code that uses (does not use) the atomic quad word memory
19479 instructions.  The @option{-mquad-memory-atomic} option requires use of
19480 64-bit mode.
19482 @item -mfloat-gprs=@var{yes/single/double/no}
19483 @itemx -mfloat-gprs
19484 @opindex mfloat-gprs
19485 This switch enables or disables the generation of floating-point
19486 operations on the general-purpose registers for architectures that
19487 support it.
19489 The argument @var{yes} or @var{single} enables the use of
19490 single-precision floating-point operations.
19492 The argument @var{double} enables the use of single and
19493 double-precision floating-point operations.
19495 The argument @var{no} disables floating-point operations on the
19496 general-purpose registers.
19498 This option is currently only available on the MPC854x.
19500 @item -m32
19501 @itemx -m64
19502 @opindex m32
19503 @opindex m64
19504 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
19505 targets (including GNU/Linux).  The 32-bit environment sets int, long
19506 and pointer to 32 bits and generates code that runs on any PowerPC
19507 variant.  The 64-bit environment sets int to 32 bits and long and
19508 pointer to 64 bits, and generates code for PowerPC64, as for
19509 @option{-mpowerpc64}.
19511 @item -mfull-toc
19512 @itemx -mno-fp-in-toc
19513 @itemx -mno-sum-in-toc
19514 @itemx -mminimal-toc
19515 @opindex mfull-toc
19516 @opindex mno-fp-in-toc
19517 @opindex mno-sum-in-toc
19518 @opindex mminimal-toc
19519 Modify generation of the TOC (Table Of Contents), which is created for
19520 every executable file.  The @option{-mfull-toc} option is selected by
19521 default.  In that case, GCC allocates at least one TOC entry for
19522 each unique non-automatic variable reference in your program.  GCC
19523 also places floating-point constants in the TOC@.  However, only
19524 16,384 entries are available in the TOC@.
19526 If you receive a linker error message that saying you have overflowed
19527 the available TOC space, you can reduce the amount of TOC space used
19528 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
19529 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
19530 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
19531 generate code to calculate the sum of an address and a constant at
19532 run time instead of putting that sum into the TOC@.  You may specify one
19533 or both of these options.  Each causes GCC to produce very slightly
19534 slower and larger code at the expense of conserving TOC space.
19536 If you still run out of space in the TOC even when you specify both of
19537 these options, specify @option{-mminimal-toc} instead.  This option causes
19538 GCC to make only one TOC entry for every file.  When you specify this
19539 option, GCC produces code that is slower and larger but which
19540 uses extremely little TOC space.  You may wish to use this option
19541 only on files that contain less frequently-executed code.
19543 @item -maix64
19544 @itemx -maix32
19545 @opindex maix64
19546 @opindex maix32
19547 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
19548 @code{long} type, and the infrastructure needed to support them.
19549 Specifying @option{-maix64} implies @option{-mpowerpc64},
19550 while @option{-maix32} disables the 64-bit ABI and
19551 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
19553 @item -mxl-compat
19554 @itemx -mno-xl-compat
19555 @opindex mxl-compat
19556 @opindex mno-xl-compat
19557 Produce code that conforms more closely to IBM XL compiler semantics
19558 when using AIX-compatible ABI@.  Pass floating-point arguments to
19559 prototyped functions beyond the register save area (RSA) on the stack
19560 in addition to argument FPRs.  Do not assume that most significant
19561 double in 128-bit long double value is properly rounded when comparing
19562 values and converting to double.  Use XL symbol names for long double
19563 support routines.
19565 The AIX calling convention was extended but not initially documented to
19566 handle an obscure K&R C case of calling a function that takes the
19567 address of its arguments with fewer arguments than declared.  IBM XL
19568 compilers access floating-point arguments that do not fit in the
19569 RSA from the stack when a subroutine is compiled without
19570 optimization.  Because always storing floating-point arguments on the
19571 stack is inefficient and rarely needed, this option is not enabled by
19572 default and only is necessary when calling subroutines compiled by IBM
19573 XL compilers without optimization.
19575 @item -mpe
19576 @opindex mpe
19577 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
19578 application written to use message passing with special startup code to
19579 enable the application to run.  The system must have PE installed in the
19580 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
19581 must be overridden with the @option{-specs=} option to specify the
19582 appropriate directory location.  The Parallel Environment does not
19583 support threads, so the @option{-mpe} option and the @option{-pthread}
19584 option are incompatible.
19586 @item -malign-natural
19587 @itemx -malign-power
19588 @opindex malign-natural
19589 @opindex malign-power
19590 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19591 @option{-malign-natural} overrides the ABI-defined alignment of larger
19592 types, such as floating-point doubles, on their natural size-based boundary.
19593 The option @option{-malign-power} instructs GCC to follow the ABI-specified
19594 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
19596 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
19597 is not supported.
19599 @item -msoft-float
19600 @itemx -mhard-float
19601 @opindex msoft-float
19602 @opindex mhard-float
19603 Generate code that does not use (uses) the floating-point register set.
19604 Software floating-point emulation is provided if you use the
19605 @option{-msoft-float} option, and pass the option to GCC when linking.
19607 @item -msingle-float
19608 @itemx -mdouble-float
19609 @opindex msingle-float
19610 @opindex mdouble-float
19611 Generate code for single- or double-precision floating-point operations.
19612 @option{-mdouble-float} implies @option{-msingle-float}.
19614 @item -msimple-fpu
19615 @opindex msimple-fpu
19616 Do not generate @code{sqrt} and @code{div} instructions for hardware
19617 floating-point unit.
19619 @item -mfpu=@var{name}
19620 @opindex mfpu
19621 Specify type of floating-point unit.  Valid values for @var{name} are
19622 @samp{sp_lite} (equivalent to @option{-msingle-float -msimple-fpu}),
19623 @samp{dp_lite} (equivalent to @option{-mdouble-float -msimple-fpu}),
19624 @samp{sp_full} (equivalent to @option{-msingle-float}),
19625 and @samp{dp_full} (equivalent to @option{-mdouble-float}).
19627 @item -mxilinx-fpu
19628 @opindex mxilinx-fpu
19629 Perform optimizations for the floating-point unit on Xilinx PPC 405/440.
19631 @item -mmultiple
19632 @itemx -mno-multiple
19633 @opindex mmultiple
19634 @opindex mno-multiple
19635 Generate code that uses (does not use) the load multiple word
19636 instructions and the store multiple word instructions.  These
19637 instructions are generated by default on POWER systems, and not
19638 generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
19639 PowerPC systems, since those instructions do not work when the
19640 processor is in little-endian mode.  The exceptions are PPC740 and
19641 PPC750 which permit these instructions in little-endian mode.
19643 @item -mstring
19644 @itemx -mno-string
19645 @opindex mstring
19646 @opindex mno-string
19647 Generate code that uses (does not use) the load string instructions
19648 and the store string word instructions to save multiple registers and
19649 do small block moves.  These instructions are generated by default on
19650 POWER systems, and not generated on PowerPC systems.  Do not use
19651 @option{-mstring} on little-endian PowerPC systems, since those
19652 instructions do not work when the processor is in little-endian mode.
19653 The exceptions are PPC740 and PPC750 which permit these instructions
19654 in little-endian mode.
19656 @item -mupdate
19657 @itemx -mno-update
19658 @opindex mupdate
19659 @opindex mno-update
19660 Generate code that uses (does not use) the load or store instructions
19661 that update the base register to the address of the calculated memory
19662 location.  These instructions are generated by default.  If you use
19663 @option{-mno-update}, there is a small window between the time that the
19664 stack pointer is updated and the address of the previous frame is
19665 stored, which means code that walks the stack frame across interrupts or
19666 signals may get corrupted data.
19668 @item -mavoid-indexed-addresses
19669 @itemx -mno-avoid-indexed-addresses
19670 @opindex mavoid-indexed-addresses
19671 @opindex mno-avoid-indexed-addresses
19672 Generate code that tries to avoid (not avoid) the use of indexed load
19673 or store instructions. These instructions can incur a performance
19674 penalty on Power6 processors in certain situations, such as when
19675 stepping through large arrays that cross a 16M boundary.  This option
19676 is enabled by default when targeting Power6 and disabled otherwise.
19678 @item -mfused-madd
19679 @itemx -mno-fused-madd
19680 @opindex mfused-madd
19681 @opindex mno-fused-madd
19682 Generate code that uses (does not use) the floating-point multiply and
19683 accumulate instructions.  These instructions are generated by default
19684 if hardware floating point is used.  The machine-dependent
19685 @option{-mfused-madd} option is now mapped to the machine-independent
19686 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
19687 mapped to @option{-ffp-contract=off}.
19689 @item -mmulhw
19690 @itemx -mno-mulhw
19691 @opindex mmulhw
19692 @opindex mno-mulhw
19693 Generate code that uses (does not use) the half-word multiply and
19694 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
19695 These instructions are generated by default when targeting those
19696 processors.
19698 @item -mdlmzb
19699 @itemx -mno-dlmzb
19700 @opindex mdlmzb
19701 @opindex mno-dlmzb
19702 Generate code that uses (does not use) the string-search @samp{dlmzb}
19703 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
19704 generated by default when targeting those processors.
19706 @item -mno-bit-align
19707 @itemx -mbit-align
19708 @opindex mno-bit-align
19709 @opindex mbit-align
19710 On System V.4 and embedded PowerPC systems do not (do) force structures
19711 and unions that contain bit-fields to be aligned to the base type of the
19712 bit-field.
19714 For example, by default a structure containing nothing but 8
19715 @code{unsigned} bit-fields of length 1 is aligned to a 4-byte
19716 boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
19717 the structure is aligned to a 1-byte boundary and is 1 byte in
19718 size.
19720 @item -mno-strict-align
19721 @itemx -mstrict-align
19722 @opindex mno-strict-align
19723 @opindex mstrict-align
19724 On System V.4 and embedded PowerPC systems do not (do) assume that
19725 unaligned memory references are handled by the system.
19727 @item -mrelocatable
19728 @itemx -mno-relocatable
19729 @opindex mrelocatable
19730 @opindex mno-relocatable
19731 Generate code that allows (does not allow) a static executable to be
19732 relocated to a different address at run time.  A simple embedded
19733 PowerPC system loader should relocate the entire contents of
19734 @code{.got2} and 4-byte locations listed in the @code{.fixup} section,
19735 a table of 32-bit addresses generated by this option.  For this to
19736 work, all objects linked together must be compiled with
19737 @option{-mrelocatable} or @option{-mrelocatable-lib}.
19738 @option{-mrelocatable} code aligns the stack to an 8-byte boundary.
19740 @item -mrelocatable-lib
19741 @itemx -mno-relocatable-lib
19742 @opindex mrelocatable-lib
19743 @opindex mno-relocatable-lib
19744 Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
19745 @code{.fixup} section to allow static executables to be relocated at
19746 run time, but @option{-mrelocatable-lib} does not use the smaller stack
19747 alignment of @option{-mrelocatable}.  Objects compiled with
19748 @option{-mrelocatable-lib} may be linked with objects compiled with
19749 any combination of the @option{-mrelocatable} options.
19751 @item -mno-toc
19752 @itemx -mtoc
19753 @opindex mno-toc
19754 @opindex mtoc
19755 On System V.4 and embedded PowerPC systems do not (do) assume that
19756 register 2 contains a pointer to a global area pointing to the addresses
19757 used in the program.
19759 @item -mlittle
19760 @itemx -mlittle-endian
19761 @opindex mlittle
19762 @opindex mlittle-endian
19763 On System V.4 and embedded PowerPC systems compile code for the
19764 processor in little-endian mode.  The @option{-mlittle-endian} option is
19765 the same as @option{-mlittle}.
19767 @item -mbig
19768 @itemx -mbig-endian
19769 @opindex mbig
19770 @opindex mbig-endian
19771 On System V.4 and embedded PowerPC systems compile code for the
19772 processor in big-endian mode.  The @option{-mbig-endian} option is
19773 the same as @option{-mbig}.
19775 @item -mdynamic-no-pic
19776 @opindex mdynamic-no-pic
19777 On Darwin and Mac OS X systems, compile code so that it is not
19778 relocatable, but that its external references are relocatable.  The
19779 resulting code is suitable for applications, but not shared
19780 libraries.
19782 @item -msingle-pic-base
19783 @opindex msingle-pic-base
19784 Treat the register used for PIC addressing as read-only, rather than
19785 loading it in the prologue for each function.  The runtime system is
19786 responsible for initializing this register with an appropriate value
19787 before execution begins.
19789 @item -mprioritize-restricted-insns=@var{priority}
19790 @opindex mprioritize-restricted-insns
19791 This option controls the priority that is assigned to
19792 dispatch-slot restricted instructions during the second scheduling
19793 pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
19794 or @samp{2} to assign no, highest, or second-highest (respectively) 
19795 priority to dispatch-slot restricted
19796 instructions.
19798 @item -msched-costly-dep=@var{dependence_type}
19799 @opindex msched-costly-dep
19800 This option controls which dependences are considered costly
19801 by the target during instruction scheduling.  The argument
19802 @var{dependence_type} takes one of the following values:
19804 @table @asis
19805 @item @samp{no}
19806 No dependence is costly.
19808 @item @samp{all}
19809 All dependences are costly.
19811 @item @samp{true_store_to_load}
19812 A true dependence from store to load is costly.
19814 @item @samp{store_to_load}
19815 Any dependence from store to load is costly.
19817 @item @var{number}
19818 Any dependence for which the latency is greater than or equal to 
19819 @var{number} is costly.
19820 @end table
19822 @item -minsert-sched-nops=@var{scheme}
19823 @opindex minsert-sched-nops
19824 This option controls which NOP insertion scheme is used during
19825 the second scheduling pass.  The argument @var{scheme} takes one of the
19826 following values:
19828 @table @asis
19829 @item @samp{no}
19830 Don't insert NOPs.
19832 @item @samp{pad}
19833 Pad with NOPs any dispatch group that has vacant issue slots,
19834 according to the scheduler's grouping.
19836 @item @samp{regroup_exact}
19837 Insert NOPs to force costly dependent insns into
19838 separate groups.  Insert exactly as many NOPs as needed to force an insn
19839 to a new group, according to the estimated processor grouping.
19841 @item @var{number}
19842 Insert NOPs to force costly dependent insns into
19843 separate groups.  Insert @var{number} NOPs to force an insn to a new group.
19844 @end table
19846 @item -mcall-sysv
19847 @opindex mcall-sysv
19848 On System V.4 and embedded PowerPC systems compile code using calling
19849 conventions that adhere to the March 1995 draft of the System V
19850 Application Binary Interface, PowerPC processor supplement.  This is the
19851 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
19853 @item -mcall-sysv-eabi
19854 @itemx -mcall-eabi
19855 @opindex mcall-sysv-eabi
19856 @opindex mcall-eabi
19857 Specify both @option{-mcall-sysv} and @option{-meabi} options.
19859 @item -mcall-sysv-noeabi
19860 @opindex mcall-sysv-noeabi
19861 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
19863 @item -mcall-aixdesc
19864 @opindex m
19865 On System V.4 and embedded PowerPC systems compile code for the AIX
19866 operating system.
19868 @item -mcall-linux
19869 @opindex mcall-linux
19870 On System V.4 and embedded PowerPC systems compile code for the
19871 Linux-based GNU system.
19873 @item -mcall-freebsd
19874 @opindex mcall-freebsd
19875 On System V.4 and embedded PowerPC systems compile code for the
19876 FreeBSD operating system.
19878 @item -mcall-netbsd
19879 @opindex mcall-netbsd
19880 On System V.4 and embedded PowerPC systems compile code for the
19881 NetBSD operating system.
19883 @item -mcall-openbsd
19884 @opindex mcall-netbsd
19885 On System V.4 and embedded PowerPC systems compile code for the
19886 OpenBSD operating system.
19888 @item -maix-struct-return
19889 @opindex maix-struct-return
19890 Return all structures in memory (as specified by the AIX ABI)@.
19892 @item -msvr4-struct-return
19893 @opindex msvr4-struct-return
19894 Return structures smaller than 8 bytes in registers (as specified by the
19895 SVR4 ABI)@.
19897 @item -mabi=@var{abi-type}
19898 @opindex mabi
19899 Extend the current ABI with a particular extension, or remove such extension.
19900 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
19901 @var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble},
19902 @var{elfv1}, @var{elfv2}@.
19904 @item -mabi=spe
19905 @opindex mabi=spe
19906 Extend the current ABI with SPE ABI extensions.  This does not change
19907 the default ABI, instead it adds the SPE ABI extensions to the current
19908 ABI@.
19910 @item -mabi=no-spe
19911 @opindex mabi=no-spe
19912 Disable Book-E SPE ABI extensions for the current ABI@.
19914 @item -mabi=ibmlongdouble
19915 @opindex mabi=ibmlongdouble
19916 Change the current ABI to use IBM extended-precision long double.
19917 This is a PowerPC 32-bit SYSV ABI option.
19919 @item -mabi=ieeelongdouble
19920 @opindex mabi=ieeelongdouble
19921 Change the current ABI to use IEEE extended-precision long double.
19922 This is a PowerPC 32-bit Linux ABI option.
19924 @item -mabi=elfv1
19925 @opindex mabi=elfv1
19926 Change the current ABI to use the ELFv1 ABI.
19927 This is the default ABI for big-endian PowerPC 64-bit Linux.
19928 Overriding the default ABI requires special system support and is
19929 likely to fail in spectacular ways.
19931 @item -mabi=elfv2
19932 @opindex mabi=elfv2
19933 Change the current ABI to use the ELFv2 ABI.
19934 This is the default ABI for little-endian PowerPC 64-bit Linux.
19935 Overriding the default ABI requires special system support and is
19936 likely to fail in spectacular ways.
19938 @item -mprototype
19939 @itemx -mno-prototype
19940 @opindex mprototype
19941 @opindex mno-prototype
19942 On System V.4 and embedded PowerPC systems assume that all calls to
19943 variable argument functions are properly prototyped.  Otherwise, the
19944 compiler must insert an instruction before every non-prototyped call to
19945 set or clear bit 6 of the condition code register (@var{CR}) to
19946 indicate whether floating-point values are passed in the floating-point
19947 registers in case the function takes variable arguments.  With
19948 @option{-mprototype}, only calls to prototyped variable argument functions
19949 set or clear the bit.
19951 @item -msim
19952 @opindex msim
19953 On embedded PowerPC systems, assume that the startup module is called
19954 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
19955 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
19956 configurations.
19958 @item -mmvme
19959 @opindex mmvme
19960 On embedded PowerPC systems, assume that the startup module is called
19961 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
19962 @file{libc.a}.
19964 @item -mads
19965 @opindex mads
19966 On embedded PowerPC systems, assume that the startup module is called
19967 @file{crt0.o} and the standard C libraries are @file{libads.a} and
19968 @file{libc.a}.
19970 @item -myellowknife
19971 @opindex myellowknife
19972 On embedded PowerPC systems, assume that the startup module is called
19973 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
19974 @file{libc.a}.
19976 @item -mvxworks
19977 @opindex mvxworks
19978 On System V.4 and embedded PowerPC systems, specify that you are
19979 compiling for a VxWorks system.
19981 @item -memb
19982 @opindex memb
19983 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
19984 header to indicate that @samp{eabi} extended relocations are used.
19986 @item -meabi
19987 @itemx -mno-eabi
19988 @opindex meabi
19989 @opindex mno-eabi
19990 On System V.4 and embedded PowerPC systems do (do not) adhere to the
19991 Embedded Applications Binary Interface (EABI), which is a set of
19992 modifications to the System V.4 specifications.  Selecting @option{-meabi}
19993 means that the stack is aligned to an 8-byte boundary, a function
19994 @code{__eabi} is called from @code{main} to set up the EABI
19995 environment, and the @option{-msdata} option can use both @code{r2} and
19996 @code{r13} to point to two separate small data areas.  Selecting
19997 @option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
19998 no EABI initialization function is called from @code{main}, and the
19999 @option{-msdata} option only uses @code{r13} to point to a single
20000 small data area.  The @option{-meabi} option is on by default if you
20001 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
20003 @item -msdata=eabi
20004 @opindex msdata=eabi
20005 On System V.4 and embedded PowerPC systems, put small initialized
20006 @code{const} global and static data in the @samp{.sdata2} section, which
20007 is pointed to by register @code{r2}.  Put small initialized
20008 non-@code{const} global and static data in the @samp{.sdata} section,
20009 which is pointed to by register @code{r13}.  Put small uninitialized
20010 global and static data in the @samp{.sbss} section, which is adjacent to
20011 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
20012 incompatible with the @option{-mrelocatable} option.  The
20013 @option{-msdata=eabi} option also sets the @option{-memb} option.
20015 @item -msdata=sysv
20016 @opindex msdata=sysv
20017 On System V.4 and embedded PowerPC systems, put small global and static
20018 data in the @samp{.sdata} section, which is pointed to by register
20019 @code{r13}.  Put small uninitialized global and static data in the
20020 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
20021 The @option{-msdata=sysv} option is incompatible with the
20022 @option{-mrelocatable} option.
20024 @item -msdata=default
20025 @itemx -msdata
20026 @opindex msdata=default
20027 @opindex msdata
20028 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
20029 compile code the same as @option{-msdata=eabi}, otherwise compile code the
20030 same as @option{-msdata=sysv}.
20032 @item -msdata=data
20033 @opindex msdata=data
20034 On System V.4 and embedded PowerPC systems, put small global
20035 data in the @samp{.sdata} section.  Put small uninitialized global
20036 data in the @samp{.sbss} section.  Do not use register @code{r13}
20037 to address small data however.  This is the default behavior unless
20038 other @option{-msdata} options are used.
20040 @item -msdata=none
20041 @itemx -mno-sdata
20042 @opindex msdata=none
20043 @opindex mno-sdata
20044 On embedded PowerPC systems, put all initialized global and static data
20045 in the @samp{.data} section, and all uninitialized data in the
20046 @samp{.bss} section.
20048 @item -mblock-move-inline-limit=@var{num}
20049 @opindex mblock-move-inline-limit
20050 Inline all block moves (such as calls to @code{memcpy} or structure
20051 copies) less than or equal to @var{num} bytes.  The minimum value for
20052 @var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
20053 targets.  The default value is target-specific.
20055 @item -G @var{num}
20056 @opindex G
20057 @cindex smaller data references (PowerPC)
20058 @cindex .sdata/.sdata2 references (PowerPC)
20059 On embedded PowerPC systems, put global and static items less than or
20060 equal to @var{num} bytes into the small data or BSS sections instead of
20061 the normal data or BSS section.  By default, @var{num} is 8.  The
20062 @option{-G @var{num}} switch is also passed to the linker.
20063 All modules should be compiled with the same @option{-G @var{num}} value.
20065 @item -mregnames
20066 @itemx -mno-regnames
20067 @opindex mregnames
20068 @opindex mno-regnames
20069 On System V.4 and embedded PowerPC systems do (do not) emit register
20070 names in the assembly language output using symbolic forms.
20072 @item -mlongcall
20073 @itemx -mno-longcall
20074 @opindex mlongcall
20075 @opindex mno-longcall
20076 By default assume that all calls are far away so that a longer and more
20077 expensive calling sequence is required.  This is required for calls
20078 farther than 32 megabytes (33,554,432 bytes) from the current location.
20079 A short call is generated if the compiler knows
20080 the call cannot be that far away.  This setting can be overridden by
20081 the @code{shortcall} function attribute, or by @code{#pragma
20082 longcall(0)}.
20084 Some linkers are capable of detecting out-of-range calls and generating
20085 glue code on the fly.  On these systems, long calls are unnecessary and
20086 generate slower code.  As of this writing, the AIX linker can do this,
20087 as can the GNU linker for PowerPC/64.  It is planned to add this feature
20088 to the GNU linker for 32-bit PowerPC systems as well.
20090 On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
20091 callee, L42}, plus a @dfn{branch island} (glue code).  The two target
20092 addresses represent the callee and the branch island.  The
20093 Darwin/PPC linker prefers the first address and generates a @code{bl
20094 callee} if the PPC @code{bl} instruction reaches the callee directly;
20095 otherwise, the linker generates @code{bl L42} to call the branch
20096 island.  The branch island is appended to the body of the
20097 calling function; it computes the full 32-bit address of the callee
20098 and jumps to it.
20100 On Mach-O (Darwin) systems, this option directs the compiler emit to
20101 the glue for every direct call, and the Darwin linker decides whether
20102 to use or discard it.
20104 In the future, GCC may ignore all longcall specifications
20105 when the linker is known to generate glue.
20107 @item -mtls-markers
20108 @itemx -mno-tls-markers
20109 @opindex mtls-markers
20110 @opindex mno-tls-markers
20111 Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
20112 specifying the function argument.  The relocation allows the linker to
20113 reliably associate function call with argument setup instructions for
20114 TLS optimization, which in turn allows GCC to better schedule the
20115 sequence.
20117 @item -pthread
20118 @opindex pthread
20119 Adds support for multithreading with the @dfn{pthreads} library.
20120 This option sets flags for both the preprocessor and linker.
20122 @item -mrecip
20123 @itemx -mno-recip
20124 @opindex mrecip
20125 This option enables use of the reciprocal estimate and
20126 reciprocal square root estimate instructions with additional
20127 Newton-Raphson steps to increase precision instead of doing a divide or
20128 square root and divide for floating-point arguments.  You should use
20129 the @option{-ffast-math} option when using @option{-mrecip} (or at
20130 least @option{-funsafe-math-optimizations},
20131 @option{-finite-math-only}, @option{-freciprocal-math} and
20132 @option{-fno-trapping-math}).  Note that while the throughput of the
20133 sequence is generally higher than the throughput of the non-reciprocal
20134 instruction, the precision of the sequence can be decreased by up to 2
20135 ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
20136 roots.
20138 @item -mrecip=@var{opt}
20139 @opindex mrecip=opt
20140 This option controls which reciprocal estimate instructions
20141 may be used.  @var{opt} is a comma-separated list of options, which may
20142 be preceded by a @code{!} to invert the option:
20143 @code{all}: enable all estimate instructions,
20144 @code{default}: enable the default instructions, equivalent to @option{-mrecip},
20145 @code{none}: disable all estimate instructions, equivalent to @option{-mno-recip};
20146 @code{div}: enable the reciprocal approximation instructions for both single and double precision;
20147 @code{divf}: enable the single-precision reciprocal approximation instructions;
20148 @code{divd}: enable the double-precision reciprocal approximation instructions;
20149 @code{rsqrt}: enable the reciprocal square root approximation instructions for both single and double precision;
20150 @code{rsqrtf}: enable the single-precision reciprocal square root approximation instructions;
20151 @code{rsqrtd}: enable the double-precision reciprocal square root approximation instructions;
20153 So, for example, @option{-mrecip=all,!rsqrtd} enables
20154 all of the reciprocal estimate instructions, except for the
20155 @code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
20156 which handle the double-precision reciprocal square root calculations.
20158 @item -mrecip-precision
20159 @itemx -mno-recip-precision
20160 @opindex mrecip-precision
20161 Assume (do not assume) that the reciprocal estimate instructions
20162 provide higher-precision estimates than is mandated by the PowerPC
20163 ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
20164 @option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
20165 The double-precision square root estimate instructions are not generated by
20166 default on low-precision machines, since they do not provide an
20167 estimate that converges after three steps.
20169 @item -mveclibabi=@var{type}
20170 @opindex mveclibabi
20171 Specifies the ABI type to use for vectorizing intrinsics using an
20172 external library.  The only type supported at present is @code{mass},
20173 which specifies to use IBM's Mathematical Acceleration Subsystem
20174 (MASS) libraries for vectorizing intrinsics using external libraries.
20175 GCC currently emits calls to @code{acosd2}, @code{acosf4},
20176 @code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
20177 @code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
20178 @code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
20179 @code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
20180 @code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
20181 @code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
20182 @code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
20183 @code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
20184 @code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
20185 @code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
20186 @code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
20187 @code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
20188 @code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
20189 for power7.  Both @option{-ftree-vectorize} and
20190 @option{-funsafe-math-optimizations} must also be enabled.  The MASS
20191 libraries must be specified at link time.
20193 @item -mfriz
20194 @itemx -mno-friz
20195 @opindex mfriz
20196 Generate (do not generate) the @code{friz} instruction when the
20197 @option{-funsafe-math-optimizations} option is used to optimize
20198 rounding of floating-point values to 64-bit integer and back to floating
20199 point.  The @code{friz} instruction does not return the same value if
20200 the floating-point number is too large to fit in an integer.
20202 @item -mpointers-to-nested-functions
20203 @itemx -mno-pointers-to-nested-functions
20204 @opindex mpointers-to-nested-functions
20205 Generate (do not generate) code to load up the static chain register
20206 (@var{r11}) when calling through a pointer on AIX and 64-bit Linux
20207 systems where a function pointer points to a 3-word descriptor giving
20208 the function address, TOC value to be loaded in register @var{r2}, and
20209 static chain value to be loaded in register @var{r11}.  The
20210 @option{-mpointers-to-nested-functions} is on by default.  You cannot
20211 call through pointers to nested functions or pointers
20212 to functions compiled in other languages that use the static chain if
20213 you use the @option{-mno-pointers-to-nested-functions}.
20215 @item -msave-toc-indirect
20216 @itemx -mno-save-toc-indirect
20217 @opindex msave-toc-indirect
20218 Generate (do not generate) code to save the TOC value in the reserved
20219 stack location in the function prologue if the function calls through
20220 a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
20221 saved in the prologue, it is saved just before the call through the
20222 pointer.  The @option{-mno-save-toc-indirect} option is the default.
20224 @item -mcompat-align-parm
20225 @itemx -mno-compat-align-parm
20226 @opindex mcompat-align-parm
20227 Generate (do not generate) code to pass structure parameters with a
20228 maximum alignment of 64 bits, for compatibility with older versions
20229 of GCC.
20231 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
20232 structure parameter on a 128-bit boundary when that structure contained
20233 a member requiring 128-bit alignment.  This is corrected in more
20234 recent versions of GCC.  This option may be used to generate code
20235 that is compatible with functions compiled with older versions of
20236 GCC.
20238 The @option{-mno-compat-align-parm} option is the default.
20239 @end table
20241 @node RX Options
20242 @subsection RX Options
20243 @cindex RX Options
20245 These command-line options are defined for RX targets:
20247 @table @gcctabopt
20248 @item -m64bit-doubles
20249 @itemx -m32bit-doubles
20250 @opindex m64bit-doubles
20251 @opindex m32bit-doubles
20252 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
20253 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
20254 @option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
20255 works on 32-bit values, which is why the default is
20256 @option{-m32bit-doubles}.
20258 @item -fpu
20259 @itemx -nofpu
20260 @opindex fpu
20261 @opindex nofpu
20262 Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
20263 floating-point hardware.  The default is enabled for the @var{RX600}
20264 series and disabled for the @var{RX200} series.
20266 Floating-point instructions are only generated for 32-bit floating-point 
20267 values, however, so the FPU hardware is not used for doubles if the
20268 @option{-m64bit-doubles} option is used.
20270 @emph{Note} If the @option{-fpu} option is enabled then
20271 @option{-funsafe-math-optimizations} is also enabled automatically.
20272 This is because the RX FPU instructions are themselves unsafe.
20274 @item -mcpu=@var{name}
20275 @opindex -mcpu
20276 Selects the type of RX CPU to be targeted.  Currently three types are
20277 supported, the generic @var{RX600} and @var{RX200} series hardware and
20278 the specific @var{RX610} CPU.  The default is @var{RX600}.
20280 The only difference between @var{RX600} and @var{RX610} is that the
20281 @var{RX610} does not support the @code{MVTIPL} instruction.
20283 The @var{RX200} series does not have a hardware floating-point unit
20284 and so @option{-nofpu} is enabled by default when this type is
20285 selected.
20287 @item -mbig-endian-data
20288 @itemx -mlittle-endian-data
20289 @opindex mbig-endian-data
20290 @opindex mlittle-endian-data
20291 Store data (but not code) in the big-endian format.  The default is
20292 @option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
20293 format.
20295 @item -msmall-data-limit=@var{N}
20296 @opindex msmall-data-limit
20297 Specifies the maximum size in bytes of global and static variables
20298 which can be placed into the small data area.  Using the small data
20299 area can lead to smaller and faster code, but the size of area is
20300 limited and it is up to the programmer to ensure that the area does
20301 not overflow.  Also when the small data area is used one of the RX's
20302 registers (usually @code{r13}) is reserved for use pointing to this
20303 area, so it is no longer available for use by the compiler.  This
20304 could result in slower and/or larger code if variables are pushed onto
20305 the stack instead of being held in this register.
20307 Note, common variables (variables that have not been initialized) and
20308 constants are not placed into the small data area as they are assigned
20309 to other sections in the output executable.
20311 The default value is zero, which disables this feature.  Note, this
20312 feature is not enabled by default with higher optimization levels
20313 (@option{-O2} etc) because of the potentially detrimental effects of
20314 reserving a register.  It is up to the programmer to experiment and
20315 discover whether this feature is of benefit to their program.  See the
20316 description of the @option{-mpid} option for a description of how the
20317 actual register to hold the small data area pointer is chosen.
20319 @item -msim
20320 @itemx -mno-sim
20321 @opindex msim
20322 @opindex mno-sim
20323 Use the simulator runtime.  The default is to use the libgloss
20324 board-specific runtime.
20326 @item -mas100-syntax
20327 @itemx -mno-as100-syntax
20328 @opindex mas100-syntax
20329 @opindex mno-as100-syntax
20330 When generating assembler output use a syntax that is compatible with
20331 Renesas's AS100 assembler.  This syntax can also be handled by the GAS
20332 assembler, but it has some restrictions so it is not generated by default.
20334 @item -mmax-constant-size=@var{N}
20335 @opindex mmax-constant-size
20336 Specifies the maximum size, in bytes, of a constant that can be used as
20337 an operand in a RX instruction.  Although the RX instruction set does
20338 allow constants of up to 4 bytes in length to be used in instructions,
20339 a longer value equates to a longer instruction.  Thus in some
20340 circumstances it can be beneficial to restrict the size of constants
20341 that are used in instructions.  Constants that are too big are instead
20342 placed into a constant pool and referenced via register indirection.
20344 The value @var{N} can be between 0 and 4.  A value of 0 (the default)
20345 or 4 means that constants of any size are allowed.
20347 @item -mrelax
20348 @opindex mrelax
20349 Enable linker relaxation.  Linker relaxation is a process whereby the
20350 linker attempts to reduce the size of a program by finding shorter
20351 versions of various instructions.  Disabled by default.
20353 @item -mint-register=@var{N}
20354 @opindex mint-register
20355 Specify the number of registers to reserve for fast interrupt handler
20356 functions.  The value @var{N} can be between 0 and 4.  A value of 1
20357 means that register @code{r13} is reserved for the exclusive use
20358 of fast interrupt handlers.  A value of 2 reserves @code{r13} and
20359 @code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
20360 @code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
20361 A value of 0, the default, does not reserve any registers.
20363 @item -msave-acc-in-interrupts
20364 @opindex msave-acc-in-interrupts
20365 Specifies that interrupt handler functions should preserve the
20366 accumulator register.  This is only necessary if normal code might use
20367 the accumulator register, for example because it performs 64-bit
20368 multiplications.  The default is to ignore the accumulator as this
20369 makes the interrupt handlers faster.
20371 @item -mpid
20372 @itemx -mno-pid
20373 @opindex mpid
20374 @opindex mno-pid
20375 Enables the generation of position independent data.  When enabled any
20376 access to constant data is done via an offset from a base address
20377 held in a register.  This allows the location of constant data to be
20378 determined at run time without requiring the executable to be
20379 relocated, which is a benefit to embedded applications with tight
20380 memory constraints.  Data that can be modified is not affected by this
20381 option.
20383 Note, using this feature reserves a register, usually @code{r13}, for
20384 the constant data base address.  This can result in slower and/or
20385 larger code, especially in complicated functions.
20387 The actual register chosen to hold the constant data base address
20388 depends upon whether the @option{-msmall-data-limit} and/or the
20389 @option{-mint-register} command-line options are enabled.  Starting
20390 with register @code{r13} and proceeding downwards, registers are
20391 allocated first to satisfy the requirements of @option{-mint-register},
20392 then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
20393 is possible for the small data area register to be @code{r8} if both
20394 @option{-mint-register=4} and @option{-mpid} are specified on the
20395 command line.
20397 By default this feature is not enabled.  The default can be restored
20398 via the @option{-mno-pid} command-line option.
20400 @item -mno-warn-multiple-fast-interrupts
20401 @itemx -mwarn-multiple-fast-interrupts
20402 @opindex mno-warn-multiple-fast-interrupts
20403 @opindex mwarn-multiple-fast-interrupts
20404 Prevents GCC from issuing a warning message if it finds more than one
20405 fast interrupt handler when it is compiling a file.  The default is to
20406 issue a warning for each extra fast interrupt handler found, as the RX
20407 only supports one such interrupt.
20409 @end table
20411 @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
20412 has special significance to the RX port when used with the
20413 @code{interrupt} function attribute.  This attribute indicates a
20414 function intended to process fast interrupts.  GCC ensures
20415 that it only uses the registers @code{r10}, @code{r11}, @code{r12}
20416 and/or @code{r13} and only provided that the normal use of the
20417 corresponding registers have been restricted via the
20418 @option{-ffixed-@var{reg}} or @option{-mint-register} command-line
20419 options.
20421 @node S/390 and zSeries Options
20422 @subsection S/390 and zSeries Options
20423 @cindex S/390 and zSeries Options
20425 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
20427 @table @gcctabopt
20428 @item -mhard-float
20429 @itemx -msoft-float
20430 @opindex mhard-float
20431 @opindex msoft-float
20432 Use (do not use) the hardware floating-point instructions and registers
20433 for floating-point operations.  When @option{-msoft-float} is specified,
20434 functions in @file{libgcc.a} are used to perform floating-point
20435 operations.  When @option{-mhard-float} is specified, the compiler
20436 generates IEEE floating-point instructions.  This is the default.
20438 @item -mhard-dfp
20439 @itemx -mno-hard-dfp
20440 @opindex mhard-dfp
20441 @opindex mno-hard-dfp
20442 Use (do not use) the hardware decimal-floating-point instructions for
20443 decimal-floating-point operations.  When @option{-mno-hard-dfp} is
20444 specified, functions in @file{libgcc.a} are used to perform
20445 decimal-floating-point operations.  When @option{-mhard-dfp} is
20446 specified, the compiler generates decimal-floating-point hardware
20447 instructions.  This is the default for @option{-march=z9-ec} or higher.
20449 @item -mlong-double-64
20450 @itemx -mlong-double-128
20451 @opindex mlong-double-64
20452 @opindex mlong-double-128
20453 These switches control the size of @code{long double} type. A size
20454 of 64 bits makes the @code{long double} type equivalent to the @code{double}
20455 type. This is the default.
20457 @item -mbackchain
20458 @itemx -mno-backchain
20459 @opindex mbackchain
20460 @opindex mno-backchain
20461 Store (do not store) the address of the caller's frame as backchain pointer
20462 into the callee's stack frame.
20463 A backchain may be needed to allow debugging using tools that do not understand
20464 DWARF 2 call frame information.
20465 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
20466 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
20467 the backchain is placed into the topmost word of the 96/160 byte register
20468 save area.
20470 In general, code compiled with @option{-mbackchain} is call-compatible with
20471 code compiled with @option{-mmo-backchain}; however, use of the backchain
20472 for debugging purposes usually requires that the whole binary is built with
20473 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
20474 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
20475 to build a linux kernel use @option{-msoft-float}.
20477 The default is to not maintain the backchain.
20479 @item -mpacked-stack
20480 @itemx -mno-packed-stack
20481 @opindex mpacked-stack
20482 @opindex mno-packed-stack
20483 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
20484 specified, the compiler uses the all fields of the 96/160 byte register save
20485 area only for their default purpose; unused fields still take up stack space.
20486 When @option{-mpacked-stack} is specified, register save slots are densely
20487 packed at the top of the register save area; unused space is reused for other
20488 purposes, allowing for more efficient use of the available stack space.
20489 However, when @option{-mbackchain} is also in effect, the topmost word of
20490 the save area is always used to store the backchain, and the return address
20491 register is always saved two words below the backchain.
20493 As long as the stack frame backchain is not used, code generated with
20494 @option{-mpacked-stack} is call-compatible with code generated with
20495 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
20496 S/390 or zSeries generated code that uses the stack frame backchain at run
20497 time, not just for debugging purposes.  Such code is not call-compatible
20498 with code compiled with @option{-mpacked-stack}.  Also, note that the
20499 combination of @option{-mbackchain},
20500 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
20501 to build a linux kernel use @option{-msoft-float}.
20503 The default is to not use the packed stack layout.
20505 @item -msmall-exec
20506 @itemx -mno-small-exec
20507 @opindex msmall-exec
20508 @opindex mno-small-exec
20509 Generate (or do not generate) code using the @code{bras} instruction
20510 to do subroutine calls.
20511 This only works reliably if the total executable size does not
20512 exceed 64k.  The default is to use the @code{basr} instruction instead,
20513 which does not have this limitation.
20515 @item -m64
20516 @itemx -m31
20517 @opindex m64
20518 @opindex m31
20519 When @option{-m31} is specified, generate code compliant to the
20520 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
20521 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
20522 particular to generate 64-bit instructions.  For the @samp{s390}
20523 targets, the default is @option{-m31}, while the @samp{s390x}
20524 targets default to @option{-m64}.
20526 @item -mzarch
20527 @itemx -mesa
20528 @opindex mzarch
20529 @opindex mesa
20530 When @option{-mzarch} is specified, generate code using the
20531 instructions available on z/Architecture.
20532 When @option{-mesa} is specified, generate code using the
20533 instructions available on ESA/390.  Note that @option{-mesa} is
20534 not possible with @option{-m64}.
20535 When generating code compliant to the GNU/Linux for S/390 ABI,
20536 the default is @option{-mesa}.  When generating code compliant
20537 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
20539 @item -mmvcle
20540 @itemx -mno-mvcle
20541 @opindex mmvcle
20542 @opindex mno-mvcle
20543 Generate (or do not generate) code using the @code{mvcle} instruction
20544 to perform block moves.  When @option{-mno-mvcle} is specified,
20545 use a @code{mvc} loop instead.  This is the default unless optimizing for
20546 size.
20548 @item -mdebug
20549 @itemx -mno-debug
20550 @opindex mdebug
20551 @opindex mno-debug
20552 Print (or do not print) additional debug information when compiling.
20553 The default is to not print debug information.
20555 @item -march=@var{cpu-type}
20556 @opindex march
20557 Generate code that runs on @var{cpu-type}, which is the name of a system
20558 representing a certain processor type.  Possible values for
20559 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
20560 @samp{z9-109}, @samp{z9-ec} and @samp{z10}.
20561 When generating code using the instructions available on z/Architecture,
20562 the default is @option{-march=z900}.  Otherwise, the default is
20563 @option{-march=g5}.
20565 @item -mtune=@var{cpu-type}
20566 @opindex mtune
20567 Tune to @var{cpu-type} everything applicable about the generated code,
20568 except for the ABI and the set of available instructions.
20569 The list of @var{cpu-type} values is the same as for @option{-march}.
20570 The default is the value used for @option{-march}.
20572 @item -mtpf-trace
20573 @itemx -mno-tpf-trace
20574 @opindex mtpf-trace
20575 @opindex mno-tpf-trace
20576 Generate code that adds (does not add) in TPF OS specific branches to trace
20577 routines in the operating system.  This option is off by default, even
20578 when compiling for the TPF OS@.
20580 @item -mfused-madd
20581 @itemx -mno-fused-madd
20582 @opindex mfused-madd
20583 @opindex mno-fused-madd
20584 Generate code that uses (does not use) the floating-point multiply and
20585 accumulate instructions.  These instructions are generated by default if
20586 hardware floating point is used.
20588 @item -mwarn-framesize=@var{framesize}
20589 @opindex mwarn-framesize
20590 Emit a warning if the current function exceeds the given frame size.  Because
20591 this is a compile-time check it doesn't need to be a real problem when the program
20592 runs.  It is intended to identify functions that most probably cause
20593 a stack overflow.  It is useful to be used in an environment with limited stack
20594 size e.g.@: the linux kernel.
20596 @item -mwarn-dynamicstack
20597 @opindex mwarn-dynamicstack
20598 Emit a warning if the function calls @code{alloca} or uses dynamically-sized
20599 arrays.  This is generally a bad idea with a limited stack size.
20601 @item -mstack-guard=@var{stack-guard}
20602 @itemx -mstack-size=@var{stack-size}
20603 @opindex mstack-guard
20604 @opindex mstack-size
20605 If these options are provided the S/390 back end emits additional instructions in
20606 the function prologue that trigger a trap if the stack size is @var{stack-guard}
20607 bytes above the @var{stack-size} (remember that the stack on S/390 grows downward).
20608 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
20609 the frame size of the compiled function is chosen.
20610 These options are intended to be used to help debugging stack overflow problems.
20611 The additionally emitted code causes only little overhead and hence can also be
20612 used in production-like systems without greater performance degradation.  The given
20613 values have to be exact powers of 2 and @var{stack-size} has to be greater than
20614 @var{stack-guard} without exceeding 64k.
20615 In order to be efficient the extra code makes the assumption that the stack starts
20616 at an address aligned to the value given by @var{stack-size}.
20617 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
20619 @item -mhotpatch[=@var{halfwords}]
20620 @itemx -mno-hotpatch
20621 @opindex mhotpatch
20622 If the hotpatch option is enabled, a ``hot-patching'' function
20623 prologue is generated for all functions in the compilation unit.
20624 The funtion label is prepended with the given number of two-byte
20625 Nop instructions (@var{halfwords}, maximum 1000000) or 12 Nop
20626 instructions if no argument is present.  Functions with a
20627 hot-patching prologue are never inlined automatically, and a
20628 hot-patching prologue is never generated for functions functions
20629 that are explicitly inline.
20631 This option can be overridden for individual functions with the
20632 @code{hotpatch} attribute.
20633 @end table
20635 @node Score Options
20636 @subsection Score Options
20637 @cindex Score Options
20639 These options are defined for Score implementations:
20641 @table @gcctabopt
20642 @item -meb
20643 @opindex meb
20644 Compile code for big-endian mode.  This is the default.
20646 @item -mel
20647 @opindex mel
20648 Compile code for little-endian mode.
20650 @item -mnhwloop
20651 @opindex mnhwloop
20652 Disable generation of @code{bcnz} instructions.
20654 @item -muls
20655 @opindex muls
20656 Enable generation of unaligned load and store instructions.
20658 @item -mmac
20659 @opindex mmac
20660 Enable the use of multiply-accumulate instructions. Disabled by default.
20662 @item -mscore5
20663 @opindex mscore5
20664 Specify the SCORE5 as the target architecture.
20666 @item -mscore5u
20667 @opindex mscore5u
20668 Specify the SCORE5U of the target architecture.
20670 @item -mscore7
20671 @opindex mscore7
20672 Specify the SCORE7 as the target architecture. This is the default.
20674 @item -mscore7d
20675 @opindex mscore7d
20676 Specify the SCORE7D as the target architecture.
20677 @end table
20679 @node SH Options
20680 @subsection SH Options
20682 These @samp{-m} options are defined for the SH implementations:
20684 @table @gcctabopt
20685 @item -m1
20686 @opindex m1
20687 Generate code for the SH1.
20689 @item -m2
20690 @opindex m2
20691 Generate code for the SH2.
20693 @item -m2e
20694 Generate code for the SH2e.
20696 @item -m2a-nofpu
20697 @opindex m2a-nofpu
20698 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
20699 that the floating-point unit is not used.
20701 @item -m2a-single-only
20702 @opindex m2a-single-only
20703 Generate code for the SH2a-FPU, in such a way that no double-precision
20704 floating-point operations are used.
20706 @item -m2a-single
20707 @opindex m2a-single
20708 Generate code for the SH2a-FPU assuming the floating-point unit is in
20709 single-precision mode by default.
20711 @item -m2a
20712 @opindex m2a
20713 Generate code for the SH2a-FPU assuming the floating-point unit is in
20714 double-precision mode by default.
20716 @item -m3
20717 @opindex m3
20718 Generate code for the SH3.
20720 @item -m3e
20721 @opindex m3e
20722 Generate code for the SH3e.
20724 @item -m4-nofpu
20725 @opindex m4-nofpu
20726 Generate code for the SH4 without a floating-point unit.
20728 @item -m4-single-only
20729 @opindex m4-single-only
20730 Generate code for the SH4 with a floating-point unit that only
20731 supports single-precision arithmetic.
20733 @item -m4-single
20734 @opindex m4-single
20735 Generate code for the SH4 assuming the floating-point unit is in
20736 single-precision mode by default.
20738 @item -m4
20739 @opindex m4
20740 Generate code for the SH4.
20742 @item -m4-100
20743 @opindex m4-100
20744 Generate code for SH4-100.
20746 @item -m4-100-nofpu
20747 @opindex m4-100-nofpu
20748 Generate code for SH4-100 in such a way that the
20749 floating-point unit is not used.
20751 @item -m4-100-single
20752 @opindex m4-100-single
20753 Generate code for SH4-100 assuming the floating-point unit is in
20754 single-precision mode by default.
20756 @item -m4-100-single-only
20757 @opindex m4-100-single-only
20758 Generate code for SH4-100 in such a way that no double-precision
20759 floating-point operations are used.
20761 @item -m4-200
20762 @opindex m4-200
20763 Generate code for SH4-200.
20765 @item -m4-200-nofpu
20766 @opindex m4-200-nofpu
20767 Generate code for SH4-200 without in such a way that the
20768 floating-point unit is not used.
20770 @item -m4-200-single
20771 @opindex m4-200-single
20772 Generate code for SH4-200 assuming the floating-point unit is in
20773 single-precision mode by default.
20775 @item -m4-200-single-only
20776 @opindex m4-200-single-only
20777 Generate code for SH4-200 in such a way that no double-precision
20778 floating-point operations are used.
20780 @item -m4-300
20781 @opindex m4-300
20782 Generate code for SH4-300.
20784 @item -m4-300-nofpu
20785 @opindex m4-300-nofpu
20786 Generate code for SH4-300 without in such a way that the
20787 floating-point unit is not used.
20789 @item -m4-300-single
20790 @opindex m4-300-single
20791 Generate code for SH4-300 in such a way that no double-precision
20792 floating-point operations are used.
20794 @item -m4-300-single-only
20795 @opindex m4-300-single-only
20796 Generate code for SH4-300 in such a way that no double-precision
20797 floating-point operations are used.
20799 @item -m4-340
20800 @opindex m4-340
20801 Generate code for SH4-340 (no MMU, no FPU).
20803 @item -m4-500
20804 @opindex m4-500
20805 Generate code for SH4-500 (no FPU).  Passes @option{-isa=sh4-nofpu} to the
20806 assembler.
20808 @item -m4a-nofpu
20809 @opindex m4a-nofpu
20810 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
20811 floating-point unit is not used.
20813 @item -m4a-single-only
20814 @opindex m4a-single-only
20815 Generate code for the SH4a, in such a way that no double-precision
20816 floating-point operations are used.
20818 @item -m4a-single
20819 @opindex m4a-single
20820 Generate code for the SH4a assuming the floating-point unit is in
20821 single-precision mode by default.
20823 @item -m4a
20824 @opindex m4a
20825 Generate code for the SH4a.
20827 @item -m4al
20828 @opindex m4al
20829 Same as @option{-m4a-nofpu}, except that it implicitly passes
20830 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
20831 instructions at the moment.
20833 @item -m5-32media
20834 @opindex m5-32media
20835 Generate 32-bit code for SHmedia.
20837 @item -m5-32media-nofpu
20838 @opindex m5-32media-nofpu
20839 Generate 32-bit code for SHmedia in such a way that the
20840 floating-point unit is not used.
20842 @item -m5-64media
20843 @opindex m5-64media
20844 Generate 64-bit code for SHmedia.
20846 @item -m5-64media-nofpu
20847 @opindex m5-64media-nofpu
20848 Generate 64-bit code for SHmedia in such a way that the
20849 floating-point unit is not used.
20851 @item -m5-compact
20852 @opindex m5-compact
20853 Generate code for SHcompact.
20855 @item -m5-compact-nofpu
20856 @opindex m5-compact-nofpu
20857 Generate code for SHcompact in such a way that the
20858 floating-point unit is not used.
20860 @item -mb
20861 @opindex mb
20862 Compile code for the processor in big-endian mode.
20864 @item -ml
20865 @opindex ml
20866 Compile code for the processor in little-endian mode.
20868 @item -mdalign
20869 @opindex mdalign
20870 Align doubles at 64-bit boundaries.  Note that this changes the calling
20871 conventions, and thus some functions from the standard C library do
20872 not work unless you recompile it first with @option{-mdalign}.
20874 @item -mrelax
20875 @opindex mrelax
20876 Shorten some address references at link time, when possible; uses the
20877 linker option @option{-relax}.
20879 @item -mbigtable
20880 @opindex mbigtable
20881 Use 32-bit offsets in @code{switch} tables.  The default is to use
20882 16-bit offsets.
20884 @item -mbitops
20885 @opindex mbitops
20886 Enable the use of bit manipulation instructions on SH2A.
20888 @item -mfmovd
20889 @opindex mfmovd
20890 Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
20891 alignment constraints.
20893 @item -mrenesas
20894 @opindex mrenesas
20895 Comply with the calling conventions defined by Renesas.
20897 @item -mno-renesas
20898 @opindex mno-renesas
20899 Comply with the calling conventions defined for GCC before the Renesas
20900 conventions were available.  This option is the default for all
20901 targets of the SH toolchain.
20903 @item -mnomacsave
20904 @opindex mnomacsave
20905 Mark the @code{MAC} register as call-clobbered, even if
20906 @option{-mrenesas} is given.
20908 @item -mieee
20909 @itemx -mno-ieee
20910 @opindex mieee
20911 @opindex mno-ieee
20912 Control the IEEE compliance of floating-point comparisons, which affects the
20913 handling of cases where the result of a comparison is unordered.  By default
20914 @option{-mieee} is implicitly enabled.  If @option{-ffinite-math-only} is
20915 enabled @option{-mno-ieee} is implicitly set, which results in faster
20916 floating-point greater-equal and less-equal comparisons.  The implcit settings
20917 can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.
20919 @item -minline-ic_invalidate
20920 @opindex minline-ic_invalidate
20921 Inline code to invalidate instruction cache entries after setting up
20922 nested function trampolines.
20923 This option has no effect if @option{-musermode} is in effect and the selected
20924 code generation option (e.g. @option{-m4}) does not allow the use of the @code{icbi}
20925 instruction.
20926 If the selected code generation option does not allow the use of the @code{icbi}
20927 instruction, and @option{-musermode} is not in effect, the inlined code
20928 manipulates the instruction cache address array directly with an associative
20929 write.  This not only requires privileged mode at run time, but it also
20930 fails if the cache line had been mapped via the TLB and has become unmapped.
20932 @item -misize
20933 @opindex misize
20934 Dump instruction size and location in the assembly code.
20936 @item -mpadstruct
20937 @opindex mpadstruct
20938 This option is deprecated.  It pads structures to multiple of 4 bytes,
20939 which is incompatible with the SH ABI@.
20941 @item -matomic-model=@var{model}
20942 @opindex matomic-model=@var{model}
20943 Sets the model of atomic operations and additional parameters as a comma
20944 separated list.  For details on the atomic built-in functions see
20945 @ref{__atomic Builtins}.  The following models and parameters are supported:
20947 @table @samp
20949 @item none
20950 Disable compiler generated atomic sequences and emit library calls for atomic
20951 operations.  This is the default if the target is not @code{sh*-*-linux*}.
20953 @item soft-gusa
20954 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
20955 built-in functions.  The generated atomic sequences require additional support
20956 from the interrupt/exception handling code of the system and are only suitable
20957 for SH3* and SH4* single-core systems.  This option is enabled by default when
20958 the target is @code{sh*-*-linux*} and SH3* or SH4*.  When the target is SH4A,
20959 this option will also partially utilize the hardware atomic instructions
20960 @code{movli.l} and @code{movco.l} to create more efficient code, unless
20961 @samp{strict} is specified.  
20963 @item soft-tcb
20964 Generate software atomic sequences that use a variable in the thread control
20965 block.  This is a variation of the gUSA sequences which can also be used on
20966 SH1* and SH2* targets.  The generated atomic sequences require additional
20967 support from the interrupt/exception handling code of the system and are only
20968 suitable for single-core systems.  When using this model, the @samp{gbr-offset=}
20969 parameter has to be specified as well.
20971 @item soft-imask
20972 Generate software atomic sequences that temporarily disable interrupts by
20973 setting @code{SR.IMASK = 1111}.  This model works only when the program runs
20974 in privileged mode and is only suitable for single-core systems.  Additional
20975 support from the interrupt/exception handling code of the system is not
20976 required.  This model is enabled by default when the target is
20977 @code{sh*-*-linux*} and SH1* or SH2*.
20979 @item hard-llcs
20980 Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
20981 instructions only.  This is only available on SH4A and is suitable for
20982 multi-core systems.  Since the hardware instructions support only 32 bit atomic
20983 variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
20984 Code compiled with this option will also be compatible with other software
20985 atomic model interrupt/exception handling systems if executed on an SH4A
20986 system.  Additional support from the interrupt/exception handling code of the
20987 system is not required for this model.
20989 @item gbr-offset=
20990 This parameter specifies the offset in bytes of the variable in the thread
20991 control block structure that should be used by the generated atomic sequences
20992 when the @samp{soft-tcb} model has been selected.  For other models this
20993 parameter is ignored.  The specified value must be an integer multiple of four
20994 and in the range 0-1020.
20996 @item strict
20997 This parameter prevents mixed usage of multiple atomic models, even though they
20998 would be compatible, and will make the compiler generate atomic sequences of the
20999 specified model only.
21001 @end table
21003 @item -mtas
21004 @opindex mtas
21005 Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
21006 Notice that depending on the particular hardware and software configuration
21007 this can degrade overall performance due to the operand cache line flushes
21008 that are implied by the @code{tas.b} instruction.  On multi-core SH4A
21009 processors the @code{tas.b} instruction must be used with caution since it
21010 can result in data corruption for certain cache configurations.
21012 @item -mprefergot
21013 @opindex mprefergot
21014 When generating position-independent code, emit function calls using
21015 the Global Offset Table instead of the Procedure Linkage Table.
21017 @item -musermode
21018 @itemx -mno-usermode
21019 @opindex musermode
21020 @opindex mno-usermode
21021 Don't allow (allow) the compiler generating privileged mode code.  Specifying
21022 @option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
21023 inlined code would not work in user mode.  @option{-musermode} is the default
21024 when the target is @code{sh*-*-linux*}.  If the target is SH1* or SH2*
21025 @option{-musermode} has no effect, since there is no user mode.
21027 @item -multcost=@var{number}
21028 @opindex multcost=@var{number}
21029 Set the cost to assume for a multiply insn.
21031 @item -mdiv=@var{strategy}
21032 @opindex mdiv=@var{strategy}
21033 Set the division strategy to be used for integer division operations.
21034 For SHmedia @var{strategy} can be one of: 
21036 @table @samp
21038 @item fp 
21039 Performs the operation in floating point.  This has a very high latency,
21040 but needs only a few instructions, so it might be a good choice if
21041 your code has enough easily-exploitable ILP to allow the compiler to
21042 schedule the floating-point instructions together with other instructions.
21043 Division by zero causes a floating-point exception.
21045 @item inv
21046 Uses integer operations to calculate the inverse of the divisor,
21047 and then multiplies the dividend with the inverse.  This strategy allows
21048 CSE and hoisting of the inverse calculation.  Division by zero calculates
21049 an unspecified result, but does not trap.
21051 @item inv:minlat
21052 A variant of @samp{inv} where, if no CSE or hoisting opportunities
21053 have been found, or if the entire operation has been hoisted to the same
21054 place, the last stages of the inverse calculation are intertwined with the
21055 final multiply to reduce the overall latency, at the expense of using a few
21056 more instructions, and thus offering fewer scheduling opportunities with
21057 other code.
21059 @item call
21060 Calls a library function that usually implements the @samp{inv:minlat}
21061 strategy.
21062 This gives high code density for @code{m5-*media-nofpu} compilations.
21064 @item call2
21065 Uses a different entry point of the same library function, where it
21066 assumes that a pointer to a lookup table has already been set up, which
21067 exposes the pointer load to CSE and code hoisting optimizations.
21069 @item inv:call
21070 @itemx inv:call2
21071 @itemx inv:fp
21072 Use the @samp{inv} algorithm for initial
21073 code generation, but if the code stays unoptimized, revert to the @samp{call},
21074 @samp{call2}, or @samp{fp} strategies, respectively.  Note that the
21075 potentially-trapping side effect of division by zero is carried by a
21076 separate instruction, so it is possible that all the integer instructions
21077 are hoisted out, but the marker for the side effect stays where it is.
21078 A recombination to floating-point operations or a call is not possible
21079 in that case.
21081 @item inv20u
21082 @itemx inv20l
21083 Variants of the @samp{inv:minlat} strategy.  In the case
21084 that the inverse calculation is not separated from the multiply, they speed
21085 up division where the dividend fits into 20 bits (plus sign where applicable)
21086 by inserting a test to skip a number of operations in this case; this test
21087 slows down the case of larger dividends.  @samp{inv20u} assumes the case of a such
21088 a small dividend to be unlikely, and @samp{inv20l} assumes it to be likely.
21090 @end table
21092 For targets other than SHmedia @var{strategy} can be one of:
21094 @table @samp
21096 @item call-div1
21097 Calls a library function that uses the single-step division instruction
21098 @code{div1} to perform the operation.  Division by zero calculates an
21099 unspecified result and does not trap.  This is the default except for SH4,
21100 SH2A and SHcompact.
21102 @item call-fp
21103 Calls a library function that performs the operation in double precision
21104 floating point.  Division by zero causes a floating-point exception.  This is
21105 the default for SHcompact with FPU.  Specifying this for targets that do not
21106 have a double precision FPU will default to @code{call-div1}.
21108 @item call-table
21109 Calls a library function that uses a lookup table for small divisors and
21110 the @code{div1} instruction with case distinction for larger divisors.  Division
21111 by zero calculates an unspecified result and does not trap.  This is the default
21112 for SH4.  Specifying this for targets that do not have dynamic shift
21113 instructions will default to @code{call-div1}.
21115 @end table
21117 When a division strategy has not been specified the default strategy will be
21118 selected based on the current target.  For SH2A the default strategy is to
21119 use the @code{divs} and @code{divu} instructions instead of library function
21120 calls.
21122 @item -maccumulate-outgoing-args
21123 @opindex maccumulate-outgoing-args
21124 Reserve space once for outgoing arguments in the function prologue rather
21125 than around each call.  Generally beneficial for performance and size.  Also
21126 needed for unwinding to avoid changing the stack frame around conditional code.
21128 @item -mdivsi3_libfunc=@var{name}
21129 @opindex mdivsi3_libfunc=@var{name}
21130 Set the name of the library function used for 32-bit signed division to
21131 @var{name}.
21132 This only affects the name used in the @samp{call} and @samp{inv:call}
21133 division strategies, and the compiler still expects the same
21134 sets of input/output/clobbered registers as if this option were not present.
21136 @item -mfixed-range=@var{register-range}
21137 @opindex mfixed-range
21138 Generate code treating the given register range as fixed registers.
21139 A fixed register is one that the register allocator can not use.  This is
21140 useful when compiling kernel code.  A register range is specified as
21141 two registers separated by a dash.  Multiple register ranges can be
21142 specified separated by a comma.
21144 @item -mindexed-addressing
21145 @opindex mindexed-addressing
21146 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
21147 This is only safe if the hardware and/or OS implement 32-bit wrap-around
21148 semantics for the indexed addressing mode.  The architecture allows the
21149 implementation of processors with 64-bit MMU, which the OS could use to
21150 get 32-bit addressing, but since no current hardware implementation supports
21151 this or any other way to make the indexed addressing mode safe to use in
21152 the 32-bit ABI, the default is @option{-mno-indexed-addressing}.
21154 @item -mgettrcost=@var{number}
21155 @opindex mgettrcost=@var{number}
21156 Set the cost assumed for the @code{gettr} instruction to @var{number}.
21157 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
21159 @item -mpt-fixed
21160 @opindex mpt-fixed
21161 Assume @code{pt*} instructions won't trap.  This generally generates
21162 better-scheduled code, but is unsafe on current hardware.
21163 The current architecture
21164 definition says that @code{ptabs} and @code{ptrel} trap when the target 
21165 anded with 3 is 3.
21166 This has the unintentional effect of making it unsafe to schedule these
21167 instructions before a branch, or hoist them out of a loop.  For example,
21168 @code{__do_global_ctors}, a part of @file{libgcc}
21169 that runs constructors at program
21170 startup, calls functions in a list which is delimited by @minus{}1.  With the
21171 @option{-mpt-fixed} option, the @code{ptabs} is done before testing against @minus{}1.
21172 That means that all the constructors run a bit more quickly, but when
21173 the loop comes to the end of the list, the program crashes because @code{ptabs}
21174 loads @minus{}1 into a target register.  
21176 Since this option is unsafe for any
21177 hardware implementing the current architecture specification, the default
21178 is @option{-mno-pt-fixed}.  Unless specified explicitly with 
21179 @option{-mgettrcost}, @option{-mno-pt-fixed} also implies @option{-mgettrcost=100};
21180 this deters register allocation from using target registers for storing
21181 ordinary integers.
21183 @item -minvalid-symbols
21184 @opindex minvalid-symbols
21185 Assume symbols might be invalid.  Ordinary function symbols generated by
21186 the compiler are always valid to load with
21187 @code{movi}/@code{shori}/@code{ptabs} or
21188 @code{movi}/@code{shori}/@code{ptrel},
21189 but with assembler and/or linker tricks it is possible
21190 to generate symbols that cause @code{ptabs} or @code{ptrel} to trap.
21191 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
21192 It prevents cross-basic-block CSE, hoisting and most scheduling
21193 of symbol loads.  The default is @option{-mno-invalid-symbols}.
21195 @item -mbranch-cost=@var{num}
21196 @opindex mbranch-cost=@var{num}
21197 Assume @var{num} to be the cost for a branch instruction.  Higher numbers
21198 make the compiler try to generate more branch-free code if possible.  
21199 If not specified the value is selected depending on the processor type that
21200 is being compiled for.
21202 @item -mzdcbranch
21203 @itemx -mno-zdcbranch
21204 @opindex mzdcbranch
21205 @opindex mno-zdcbranch
21206 Assume (do not assume) that zero displacement conditional branch instructions
21207 @code{bt} and @code{bf} are fast.  If @option{-mzdcbranch} is specified, the
21208 compiler will try to prefer zero displacement branch code sequences.  This is
21209 enabled by default when generating code for SH4 and SH4A.  It can be explicitly
21210 disabled by specifying @option{-mno-zdcbranch}.
21212 @item -mfused-madd
21213 @itemx -mno-fused-madd
21214 @opindex mfused-madd
21215 @opindex mno-fused-madd
21216 Generate code that uses (does not use) the floating-point multiply and
21217 accumulate instructions.  These instructions are generated by default
21218 if hardware floating point is used.  The machine-dependent
21219 @option{-mfused-madd} option is now mapped to the machine-independent
21220 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
21221 mapped to @option{-ffp-contract=off}.
21223 @item -mfsca
21224 @itemx -mno-fsca
21225 @opindex mfsca
21226 @opindex mno-fsca
21227 Allow or disallow the compiler to emit the @code{fsca} instruction for sine
21228 and cosine approximations.  The option @code{-mfsca} must be used in
21229 combination with @code{-funsafe-math-optimizations}.  It is enabled by default
21230 when generating code for SH4A.  Using @code{-mno-fsca} disables sine and cosine
21231 approximations even if @code{-funsafe-math-optimizations} is in effect.
21233 @item -mfsrra
21234 @itemx -mno-fsrra
21235 @opindex mfsrra
21236 @opindex mno-fsrra
21237 Allow or disallow the compiler to emit the @code{fsrra} instruction for
21238 reciprocal square root approximations.  The option @code{-mfsrra} must be used
21239 in combination with @code{-funsafe-math-optimizations} and
21240 @code{-ffinite-math-only}.  It is enabled by default when generating code for
21241 SH4A.  Using @code{-mno-fsrra} disables reciprocal square root approximations
21242 even if @code{-funsafe-math-optimizations} and @code{-ffinite-math-only} are
21243 in effect.
21245 @item -mpretend-cmove
21246 @opindex mpretend-cmove
21247 Prefer zero-displacement conditional branches for conditional move instruction
21248 patterns.  This can result in faster code on the SH4 processor.
21250 @end table
21252 @node Solaris 2 Options
21253 @subsection Solaris 2 Options
21254 @cindex Solaris 2 options
21256 These @samp{-m} options are supported on Solaris 2:
21258 @table @gcctabopt
21259 @item -mclear-hwcap
21260 @opindex mclear-hwcap
21261 @option{-mclear-hwcap} tells the compiler to remove the hardware
21262 capabilities generated by the Solaris assembler.  This is only necessary
21263 when object files use ISA extensions not supported by the current
21264 machine, but check at runtime whether or not to use them.
21266 @item -mimpure-text
21267 @opindex mimpure-text
21268 @option{-mimpure-text}, used in addition to @option{-shared}, tells
21269 the compiler to not pass @option{-z text} to the linker when linking a
21270 shared object.  Using this option, you can link position-dependent
21271 code into a shared object.
21273 @option{-mimpure-text} suppresses the ``relocations remain against
21274 allocatable but non-writable sections'' linker error message.
21275 However, the necessary relocations trigger copy-on-write, and the
21276 shared object is not actually shared across processes.  Instead of
21277 using @option{-mimpure-text}, you should compile all source code with
21278 @option{-fpic} or @option{-fPIC}.
21280 @end table
21282 These switches are supported in addition to the above on Solaris 2:
21284 @table @gcctabopt
21285 @item -pthreads
21286 @opindex pthreads
21287 Add support for multithreading using the POSIX threads library.  This
21288 option sets flags for both the preprocessor and linker.  This option does
21289 not affect the thread safety of object code produced  by the compiler or
21290 that of libraries supplied with it.
21292 @item -pthread
21293 @opindex pthread
21294 This is a synonym for @option{-pthreads}.
21295 @end table
21297 @node SPARC Options
21298 @subsection SPARC Options
21299 @cindex SPARC options
21301 These @samp{-m} options are supported on the SPARC:
21303 @table @gcctabopt
21304 @item -mno-app-regs
21305 @itemx -mapp-regs
21306 @opindex mno-app-regs
21307 @opindex mapp-regs
21308 Specify @option{-mapp-regs} to generate output using the global registers
21309 2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
21310 global register 1, each global register 2 through 4 is then treated as an
21311 allocable register that is clobbered by function calls.  This is the default.
21313 To be fully SVR4 ABI-compliant at the cost of some performance loss,
21314 specify @option{-mno-app-regs}.  You should compile libraries and system
21315 software with this option.
21317 @item -mflat
21318 @itemx -mno-flat
21319 @opindex mflat
21320 @opindex mno-flat
21321 With @option{-mflat}, the compiler does not generate save/restore instructions
21322 and uses a ``flat'' or single register window model.  This model is compatible
21323 with the regular register window model.  The local registers and the input
21324 registers (0--5) are still treated as ``call-saved'' registers and are
21325 saved on the stack as needed.
21327 With @option{-mno-flat} (the default), the compiler generates save/restore
21328 instructions (except for leaf functions).  This is the normal operating mode.
21330 @item -mfpu
21331 @itemx -mhard-float
21332 @opindex mfpu
21333 @opindex mhard-float
21334 Generate output containing floating-point instructions.  This is the
21335 default.
21337 @item -mno-fpu
21338 @itemx -msoft-float
21339 @opindex mno-fpu
21340 @opindex msoft-float
21341 Generate output containing library calls for floating point.
21342 @strong{Warning:} the requisite libraries are not available for all SPARC
21343 targets.  Normally the facilities of the machine's usual C compiler are
21344 used, but this cannot be done directly in cross-compilation.  You must make
21345 your own arrangements to provide suitable library functions for
21346 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
21347 @samp{sparclite-*-*} do provide software floating-point support.
21349 @option{-msoft-float} changes the calling convention in the output file;
21350 therefore, it is only useful if you compile @emph{all} of a program with
21351 this option.  In particular, you need to compile @file{libgcc.a}, the
21352 library that comes with GCC, with @option{-msoft-float} in order for
21353 this to work.
21355 @item -mhard-quad-float
21356 @opindex mhard-quad-float
21357 Generate output containing quad-word (long double) floating-point
21358 instructions.
21360 @item -msoft-quad-float
21361 @opindex msoft-quad-float
21362 Generate output containing library calls for quad-word (long double)
21363 floating-point instructions.  The functions called are those specified
21364 in the SPARC ABI@.  This is the default.
21366 As of this writing, there are no SPARC implementations that have hardware
21367 support for the quad-word floating-point instructions.  They all invoke
21368 a trap handler for one of these instructions, and then the trap handler
21369 emulates the effect of the instruction.  Because of the trap handler overhead,
21370 this is much slower than calling the ABI library routines.  Thus the
21371 @option{-msoft-quad-float} option is the default.
21373 @item -mno-unaligned-doubles
21374 @itemx -munaligned-doubles
21375 @opindex mno-unaligned-doubles
21376 @opindex munaligned-doubles
21377 Assume that doubles have 8-byte alignment.  This is the default.
21379 With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
21380 alignment only if they are contained in another type, or if they have an
21381 absolute address.  Otherwise, it assumes they have 4-byte alignment.
21382 Specifying this option avoids some rare compatibility problems with code
21383 generated by other compilers.  It is not the default because it results
21384 in a performance loss, especially for floating-point code.
21386 @item -muser-mode
21387 @itemx -mno-user-mode
21388 @opindex muser-mode
21389 @opindex mno-user-mode
21390 Do not generate code that can only run in supervisor mode.  This is relevant
21391 only for the @code{casa} instruction emitted for the LEON3 processor.  The
21392 default is @option{-mno-user-mode}.
21394 @item -mno-faster-structs
21395 @itemx -mfaster-structs
21396 @opindex mno-faster-structs
21397 @opindex mfaster-structs
21398 With @option{-mfaster-structs}, the compiler assumes that structures
21399 should have 8-byte alignment.  This enables the use of pairs of
21400 @code{ldd} and @code{std} instructions for copies in structure
21401 assignment, in place of twice as many @code{ld} and @code{st} pairs.
21402 However, the use of this changed alignment directly violates the SPARC
21403 ABI@.  Thus, it's intended only for use on targets where the developer
21404 acknowledges that their resulting code is not directly in line with
21405 the rules of the ABI@.
21407 @item -mcpu=@var{cpu_type}
21408 @opindex mcpu
21409 Set the instruction set, register set, and instruction scheduling parameters
21410 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
21411 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
21412 @samp{leon}, @samp{leon3}, @samp{sparclite}, @samp{f930}, @samp{f934},
21413 @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
21414 @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
21415 @samp{niagara3} and @samp{niagara4}.
21417 Native Solaris and GNU/Linux toolchains also support the value @samp{native},
21418 which selects the best architecture option for the host processor.
21419 @option{-mcpu=native} has no effect if GCC does not recognize
21420 the processor.
21422 Default instruction scheduling parameters are used for values that select
21423 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
21424 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
21426 Here is a list of each supported architecture and their supported
21427 implementations.
21429 @table @asis
21430 @item v7
21431 cypress
21433 @item v8
21434 supersparc, hypersparc, leon, leon3
21436 @item sparclite
21437 f930, f934, sparclite86x
21439 @item sparclet
21440 tsc701
21442 @item v9
21443 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
21444 @end table
21446 By default (unless configured otherwise), GCC generates code for the V7
21447 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
21448 additionally optimizes it for the Cypress CY7C602 chip, as used in the
21449 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
21450 SPARCStation 1, 2, IPX etc.
21452 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
21453 architecture.  The only difference from V7 code is that the compiler emits
21454 the integer multiply and integer divide instructions which exist in SPARC-V8
21455 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
21456 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
21457 2000 series.
21459 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
21460 the SPARC architecture.  This adds the integer multiply, integer divide step
21461 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
21462 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
21463 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
21464 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
21465 MB86934 chip, which is the more recent SPARClite with FPU@.
21467 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
21468 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
21469 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
21470 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
21471 optimizes it for the TEMIC SPARClet chip.
21473 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
21474 architecture.  This adds 64-bit integer and floating-point move instructions,
21475 3 additional floating-point condition code registers and conditional move
21476 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
21477 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
21478 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
21479 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
21480 @option{-mcpu=niagara}, the compiler additionally optimizes it for
21481 Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
21482 additionally optimizes it for Sun UltraSPARC T2 chips. With
21483 @option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
21484 UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
21485 additionally optimizes it for Sun UltraSPARC T4 chips.
21487 @item -mtune=@var{cpu_type}
21488 @opindex mtune
21489 Set the instruction scheduling parameters for machine type
21490 @var{cpu_type}, but do not set the instruction set or register set that the
21491 option @option{-mcpu=@var{cpu_type}} does.
21493 The same values for @option{-mcpu=@var{cpu_type}} can be used for
21494 @option{-mtune=@var{cpu_type}}, but the only useful values are those
21495 that select a particular CPU implementation.  Those are @samp{cypress},
21496 @samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3}, @samp{f930},
21497 @samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
21498 @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3} and
21499 @samp{niagara4}.  With native Solaris and GNU/Linux toolchains, @samp{native}
21500 can also be used.
21502 @item -mv8plus
21503 @itemx -mno-v8plus
21504 @opindex mv8plus
21505 @opindex mno-v8plus
21506 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
21507 difference from the V8 ABI is that the global and out registers are
21508 considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
21509 mode for all SPARC-V9 processors.
21511 @item -mvis
21512 @itemx -mno-vis
21513 @opindex mvis
21514 @opindex mno-vis
21515 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
21516 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
21518 @item -mvis2
21519 @itemx -mno-vis2
21520 @opindex mvis2
21521 @opindex mno-vis2
21522 With @option{-mvis2}, GCC generates code that takes advantage of
21523 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
21524 default is @option{-mvis2} when targeting a cpu that supports such
21525 instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
21526 also sets @option{-mvis}.
21528 @item -mvis3
21529 @itemx -mno-vis3
21530 @opindex mvis3
21531 @opindex mno-vis3
21532 With @option{-mvis3}, GCC generates code that takes advantage of
21533 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
21534 default is @option{-mvis3} when targeting a cpu that supports such
21535 instructions, such as niagara-3 and later.  Setting @option{-mvis3}
21536 also sets @option{-mvis2} and @option{-mvis}.
21538 @item -mcbcond
21539 @itemx -mno-cbcond
21540 @opindex mcbcond
21541 @opindex mno-cbcond
21542 With @option{-mcbcond}, GCC generates code that takes advantage of
21543 compare-and-branch instructions, as defined in the Sparc Architecture 2011.
21544 The default is @option{-mcbcond} when targeting a cpu that supports such
21545 instructions, such as niagara-4 and later.
21547 @item -mpopc
21548 @itemx -mno-popc
21549 @opindex mpopc
21550 @opindex mno-popc
21551 With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
21552 population count instruction.  The default is @option{-mpopc}
21553 when targeting a cpu that supports such instructions, such as Niagara-2 and
21554 later.
21556 @item -mfmaf
21557 @itemx -mno-fmaf
21558 @opindex mfmaf
21559 @opindex mno-fmaf
21560 With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
21561 Fused Multiply-Add Floating-point extensions.  The default is @option{-mfmaf}
21562 when targeting a cpu that supports such instructions, such as Niagara-3 and
21563 later.
21565 @item -mfix-at697f
21566 @opindex mfix-at697f
21567 Enable the documented workaround for the single erratum of the Atmel AT697F
21568 processor (which corresponds to erratum #13 of the AT697E processor).
21570 @item -mfix-ut699
21571 @opindex mfix-ut699
21572 Enable the documented workarounds for the floating-point errata and the data
21573 cache nullify errata of the UT699 processor.
21574 @end table
21576 These @samp{-m} options are supported in addition to the above
21577 on SPARC-V9 processors in 64-bit environments:
21579 @table @gcctabopt
21580 @item -m32
21581 @itemx -m64
21582 @opindex m32
21583 @opindex m64
21584 Generate code for a 32-bit or 64-bit environment.
21585 The 32-bit environment sets int, long and pointer to 32 bits.
21586 The 64-bit environment sets int to 32 bits and long and pointer
21587 to 64 bits.
21589 @item -mcmodel=@var{which}
21590 @opindex mcmodel
21591 Set the code model to one of
21593 @table @samp
21594 @item medlow
21595 The Medium/Low code model: 64-bit addresses, programs
21596 must be linked in the low 32 bits of memory.  Programs can be statically
21597 or dynamically linked.
21599 @item medmid
21600 The Medium/Middle code model: 64-bit addresses, programs
21601 must be linked in the low 44 bits of memory, the text and data segments must
21602 be less than 2GB in size and the data segment must be located within 2GB of
21603 the text segment.
21605 @item medany
21606 The Medium/Anywhere code model: 64-bit addresses, programs
21607 may be linked anywhere in memory, the text and data segments must be less
21608 than 2GB in size and the data segment must be located within 2GB of the
21609 text segment.
21611 @item embmedany
21612 The Medium/Anywhere code model for embedded systems:
21613 64-bit addresses, the text and data segments must be less than 2GB in
21614 size, both starting anywhere in memory (determined at link time).  The
21615 global register %g4 points to the base of the data segment.  Programs
21616 are statically linked and PIC is not supported.
21617 @end table
21619 @item -mmemory-model=@var{mem-model}
21620 @opindex mmemory-model
21621 Set the memory model in force on the processor to one of
21623 @table @samp
21624 @item default
21625 The default memory model for the processor and operating system.
21627 @item rmo
21628 Relaxed Memory Order
21630 @item pso
21631 Partial Store Order
21633 @item tso
21634 Total Store Order
21636 @item sc
21637 Sequential Consistency
21638 @end table
21640 These memory models are formally defined in Appendix D of the Sparc V9
21641 architecture manual, as set in the processor's @code{PSTATE.MM} field.
21643 @item -mstack-bias
21644 @itemx -mno-stack-bias
21645 @opindex mstack-bias
21646 @opindex mno-stack-bias
21647 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
21648 frame pointer if present, are offset by @minus{}2047 which must be added back
21649 when making stack frame references.  This is the default in 64-bit mode.
21650 Otherwise, assume no such offset is present.
21651 @end table
21653 @node SPU Options
21654 @subsection SPU Options
21655 @cindex SPU options
21657 These @samp{-m} options are supported on the SPU:
21659 @table @gcctabopt
21660 @item -mwarn-reloc
21661 @itemx -merror-reloc
21662 @opindex mwarn-reloc
21663 @opindex merror-reloc
21665 The loader for SPU does not handle dynamic relocations.  By default, GCC
21666 gives an error when it generates code that requires a dynamic
21667 relocation.  @option{-mno-error-reloc} disables the error,
21668 @option{-mwarn-reloc} generates a warning instead.
21670 @item -msafe-dma
21671 @itemx -munsafe-dma
21672 @opindex msafe-dma
21673 @opindex munsafe-dma
21675 Instructions that initiate or test completion of DMA must not be
21676 reordered with respect to loads and stores of the memory that is being
21677 accessed.
21678 With @option{-munsafe-dma} you must use the @code{volatile} keyword to protect
21679 memory accesses, but that can lead to inefficient code in places where the
21680 memory is known to not change.  Rather than mark the memory as volatile,
21681 you can use @option{-msafe-dma} to tell the compiler to treat
21682 the DMA instructions as potentially affecting all memory.  
21684 @item -mbranch-hints
21685 @opindex mbranch-hints
21687 By default, GCC generates a branch hint instruction to avoid
21688 pipeline stalls for always-taken or probably-taken branches.  A hint
21689 is not generated closer than 8 instructions away from its branch.
21690 There is little reason to disable them, except for debugging purposes,
21691 or to make an object a little bit smaller.
21693 @item -msmall-mem
21694 @itemx -mlarge-mem
21695 @opindex msmall-mem
21696 @opindex mlarge-mem
21698 By default, GCC generates code assuming that addresses are never larger
21699 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
21700 a full 32-bit address.
21702 @item -mstdmain
21703 @opindex mstdmain
21705 By default, GCC links against startup code that assumes the SPU-style
21706 main function interface (which has an unconventional parameter list).
21707 With @option{-mstdmain}, GCC links your program against startup
21708 code that assumes a C99-style interface to @code{main}, including a
21709 local copy of @code{argv} strings.
21711 @item -mfixed-range=@var{register-range}
21712 @opindex mfixed-range
21713 Generate code treating the given register range as fixed registers.
21714 A fixed register is one that the register allocator cannot use.  This is
21715 useful when compiling kernel code.  A register range is specified as
21716 two registers separated by a dash.  Multiple register ranges can be
21717 specified separated by a comma.
21719 @item -mea32
21720 @itemx -mea64
21721 @opindex mea32
21722 @opindex mea64
21723 Compile code assuming that pointers to the PPU address space accessed
21724 via the @code{__ea} named address space qualifier are either 32 or 64
21725 bits wide.  The default is 32 bits.  As this is an ABI-changing option,
21726 all object code in an executable must be compiled with the same setting.
21728 @item -maddress-space-conversion
21729 @itemx -mno-address-space-conversion
21730 @opindex maddress-space-conversion
21731 @opindex mno-address-space-conversion
21732 Allow/disallow treating the @code{__ea} address space as superset
21733 of the generic address space.  This enables explicit type casts
21734 between @code{__ea} and generic pointer as well as implicit
21735 conversions of generic pointers to @code{__ea} pointers.  The
21736 default is to allow address space pointer conversions.
21738 @item -mcache-size=@var{cache-size}
21739 @opindex mcache-size
21740 This option controls the version of libgcc that the compiler links to an
21741 executable and selects a software-managed cache for accessing variables
21742 in the @code{__ea} address space with a particular cache size.  Possible
21743 options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
21744 and @samp{128}.  The default cache size is 64KB.
21746 @item -matomic-updates
21747 @itemx -mno-atomic-updates
21748 @opindex matomic-updates
21749 @opindex mno-atomic-updates
21750 This option controls the version of libgcc that the compiler links to an
21751 executable and selects whether atomic updates to the software-managed
21752 cache of PPU-side variables are used.  If you use atomic updates, changes
21753 to a PPU variable from SPU code using the @code{__ea} named address space
21754 qualifier do not interfere with changes to other PPU variables residing
21755 in the same cache line from PPU code.  If you do not use atomic updates,
21756 such interference may occur; however, writing back cache lines is
21757 more efficient.  The default behavior is to use atomic updates.
21759 @item -mdual-nops
21760 @itemx -mdual-nops=@var{n}
21761 @opindex mdual-nops
21762 By default, GCC inserts nops to increase dual issue when it expects
21763 it to increase performance.  @var{n} can be a value from 0 to 10.  A
21764 smaller @var{n} inserts fewer nops.  10 is the default, 0 is the
21765 same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
21767 @item -mhint-max-nops=@var{n}
21768 @opindex mhint-max-nops
21769 Maximum number of nops to insert for a branch hint.  A branch hint must
21770 be at least 8 instructions away from the branch it is affecting.  GCC
21771 inserts up to @var{n} nops to enforce this, otherwise it does not
21772 generate the branch hint.
21774 @item -mhint-max-distance=@var{n}
21775 @opindex mhint-max-distance
21776 The encoding of the branch hint instruction limits the hint to be within
21777 256 instructions of the branch it is affecting.  By default, GCC makes
21778 sure it is within 125.
21780 @item -msafe-hints
21781 @opindex msafe-hints
21782 Work around a hardware bug that causes the SPU to stall indefinitely.
21783 By default, GCC inserts the @code{hbrp} instruction to make sure
21784 this stall won't happen.
21786 @end table
21788 @node System V Options
21789 @subsection Options for System V
21791 These additional options are available on System V Release 4 for
21792 compatibility with other compilers on those systems:
21794 @table @gcctabopt
21795 @item -G
21796 @opindex G
21797 Create a shared object.
21798 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
21800 @item -Qy
21801 @opindex Qy
21802 Identify the versions of each tool used by the compiler, in a
21803 @code{.ident} assembler directive in the output.
21805 @item -Qn
21806 @opindex Qn
21807 Refrain from adding @code{.ident} directives to the output file (this is
21808 the default).
21810 @item -YP,@var{dirs}
21811 @opindex YP
21812 Search the directories @var{dirs}, and no others, for libraries
21813 specified with @option{-l}.
21815 @item -Ym,@var{dir}
21816 @opindex Ym
21817 Look in the directory @var{dir} to find the M4 preprocessor.
21818 The assembler uses this option.
21819 @c This is supposed to go with a -Yd for predefined M4 macro files, but
21820 @c the generic assembler that comes with Solaris takes just -Ym.
21821 @end table
21823 @node TILE-Gx Options
21824 @subsection TILE-Gx Options
21825 @cindex TILE-Gx options
21827 These @samp{-m} options are supported on the TILE-Gx:
21829 @table @gcctabopt
21830 @item -mcmodel=small
21831 @opindex mcmodel=small
21832 Generate code for the small model.  The distance for direct calls is
21833 limited to 500M in either direction.  PC-relative addresses are 32
21834 bits.  Absolute addresses support the full address range.
21836 @item -mcmodel=large
21837 @opindex mcmodel=large
21838 Generate code for the large model.  There is no limitation on call
21839 distance, pc-relative addresses, or absolute addresses.
21841 @item -mcpu=@var{name}
21842 @opindex mcpu
21843 Selects the type of CPU to be targeted.  Currently the only supported
21844 type is @samp{tilegx}.
21846 @item -m32
21847 @itemx -m64
21848 @opindex m32
21849 @opindex m64
21850 Generate code for a 32-bit or 64-bit environment.  The 32-bit
21851 environment sets int, long, and pointer to 32 bits.  The 64-bit
21852 environment sets int to 32 bits and long and pointer to 64 bits.
21854 @item -mbig-endian
21855 @itemx -mlittle-endian
21856 @opindex mbig-endian
21857 @opindex mlittle-endian
21858 Generate code in big/little endian mode, respectively.
21859 @end table
21861 @node TILEPro Options
21862 @subsection TILEPro Options
21863 @cindex TILEPro options
21865 These @samp{-m} options are supported on the TILEPro:
21867 @table @gcctabopt
21868 @item -mcpu=@var{name}
21869 @opindex mcpu
21870 Selects the type of CPU to be targeted.  Currently the only supported
21871 type is @samp{tilepro}.
21873 @item -m32
21874 @opindex m32
21875 Generate code for a 32-bit environment, which sets int, long, and
21876 pointer to 32 bits.  This is the only supported behavior so the flag
21877 is essentially ignored.
21878 @end table
21880 @node V850 Options
21881 @subsection V850 Options
21882 @cindex V850 Options
21884 These @samp{-m} options are defined for V850 implementations:
21886 @table @gcctabopt
21887 @item -mlong-calls
21888 @itemx -mno-long-calls
21889 @opindex mlong-calls
21890 @opindex mno-long-calls
21891 Treat all calls as being far away (near).  If calls are assumed to be
21892 far away, the compiler always loads the function's address into a
21893 register, and calls indirect through the pointer.
21895 @item -mno-ep
21896 @itemx -mep
21897 @opindex mno-ep
21898 @opindex mep
21899 Do not optimize (do optimize) basic blocks that use the same index
21900 pointer 4 or more times to copy pointer into the @code{ep} register, and
21901 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
21902 option is on by default if you optimize.
21904 @item -mno-prolog-function
21905 @itemx -mprolog-function
21906 @opindex mno-prolog-function
21907 @opindex mprolog-function
21908 Do not use (do use) external functions to save and restore registers
21909 at the prologue and epilogue of a function.  The external functions
21910 are slower, but use less code space if more than one function saves
21911 the same number of registers.  The @option{-mprolog-function} option
21912 is on by default if you optimize.
21914 @item -mspace
21915 @opindex mspace
21916 Try to make the code as small as possible.  At present, this just turns
21917 on the @option{-mep} and @option{-mprolog-function} options.
21919 @item -mtda=@var{n}
21920 @opindex mtda
21921 Put static or global variables whose size is @var{n} bytes or less into
21922 the tiny data area that register @code{ep} points to.  The tiny data
21923 area can hold up to 256 bytes in total (128 bytes for byte references).
21925 @item -msda=@var{n}
21926 @opindex msda
21927 Put static or global variables whose size is @var{n} bytes or less into
21928 the small data area that register @code{gp} points to.  The small data
21929 area can hold up to 64 kilobytes.
21931 @item -mzda=@var{n}
21932 @opindex mzda
21933 Put static or global variables whose size is @var{n} bytes or less into
21934 the first 32 kilobytes of memory.
21936 @item -mv850
21937 @opindex mv850
21938 Specify that the target processor is the V850.
21940 @item -mv850e3v5
21941 @opindex mv850e3v5
21942 Specify that the target processor is the V850E3V5.  The preprocessor
21943 constant @samp{__v850e3v5__} is defined if this option is used.
21945 @item -mv850e2v4
21946 @opindex mv850e2v4
21947 Specify that the target processor is the V850E3V5.  This is an alias for
21948 the @option{-mv850e3v5} option.
21950 @item -mv850e2v3
21951 @opindex mv850e2v3
21952 Specify that the target processor is the V850E2V3.  The preprocessor
21953 constant @samp{__v850e2v3__} is defined if this option is used.
21955 @item -mv850e2
21956 @opindex mv850e2
21957 Specify that the target processor is the V850E2.  The preprocessor
21958 constant @samp{__v850e2__} is defined if this option is used.
21960 @item -mv850e1
21961 @opindex mv850e1
21962 Specify that the target processor is the V850E1.  The preprocessor
21963 constants @samp{__v850e1__} and @samp{__v850e__} are defined if
21964 this option is used.
21966 @item -mv850es
21967 @opindex mv850es
21968 Specify that the target processor is the V850ES.  This is an alias for
21969 the @option{-mv850e1} option.
21971 @item -mv850e
21972 @opindex mv850e
21973 Specify that the target processor is the V850E@.  The preprocessor
21974 constant @samp{__v850e__} is defined if this option is used.
21976 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
21977 nor @option{-mv850e2} nor @option{-mv850e2v3} nor @option{-mv850e3v5}
21978 are defined then a default target processor is chosen and the
21979 relevant @samp{__v850*__} preprocessor constant is defined.
21981 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
21982 defined, regardless of which processor variant is the target.
21984 @item -mdisable-callt
21985 @itemx -mno-disable-callt
21986 @opindex mdisable-callt
21987 @opindex mno-disable-callt
21988 This option suppresses generation of the @code{CALLT} instruction for the
21989 v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
21990 architecture.
21992 This option is enabled by default when the RH850 ABI is
21993 in use (see @option{-mrh850-abi}), and disabled by default when the
21994 GCC ABI is in use.  If @code{CALLT} instructions are being generated
21995 then the C preprocessor symbol @code{__V850_CALLT__} will be defined.
21997 @item -mrelax
21998 @itemx -mno-relax
21999 @opindex mrelax
22000 @opindex mno-relax
22001 Pass on (or do not pass on) the @option{-mrelax} command line option
22002 to the assembler.
22004 @item -mlong-jumps
22005 @itemx -mno-long-jumps
22006 @opindex mlong-jumps
22007 @opindex mno-long-jumps
22008 Disable (or re-enable) the generation of PC-relative jump instructions.
22010 @item -msoft-float
22011 @itemx -mhard-float
22012 @opindex msoft-float
22013 @opindex mhard-float
22014 Disable (or re-enable) the generation of hardware floating point
22015 instructions.  This option is only significant when the target
22016 architecture is @samp{V850E2V3} or higher.  If hardware floating point
22017 instructions are being generated then the C preprocessor symbol
22018 @code{__FPU_OK__} will be defined, otherwise the symbol
22019 @code{__NO_FPU__} will be defined.
22021 @item -mloop
22022 @opindex mloop
22023 Enables the use of the e3v5 LOOP instruction.  The use of this
22024 instruction is not enabled by default when the e3v5 architecture is
22025 selected because its use is still experimental.
22027 @item -mrh850-abi
22028 @itemx -mghs
22029 @opindex mrh850-abi
22030 @opindex mghs
22031 Enables support for the RH850 version of the V850 ABI.  This is the
22032 default.  With this version of the ABI the following rules apply:
22034 @itemize
22035 @item
22036 Integer sized structures and unions are returned via a memory pointer
22037 rather than a register.
22039 @item
22040 Large structures and unions (more than 8 bytes in size) are passed by
22041 value.
22043 @item
22044 Functions are aligned to 16-bit boundaries.
22046 @item
22047 The @option{-m8byte-align} command line option is supported.
22049 @item
22050 The @option{-mdisable-callt} command line option is enabled by
22051 default.  The @option{-mno-disable-callt} command line option is not
22052 supported.
22053 @end itemize
22055 When this version of the ABI is enabled the C preprocessor symbol
22056 @code{__V850_RH850_ABI__} is defined.
22058 @item -mgcc-abi
22059 @opindex mgcc-abi
22060 Enables support for the old GCC version of the V850 ABI.  With this
22061 version of the ABI the following rules apply:
22063 @itemize
22064 @item
22065 Integer sized structures and unions are returned in register @code{r10}.
22067 @item
22068 Large structures and unions (more than 8 bytes in size) are passed by
22069 reference.
22071 @item
22072 Functions are aligned to 32-bit boundaries, unless optimizing for
22073 size.
22075 @item
22076 The @option{-m8byte-align} command line option is not supported.
22078 @item
22079 The @option{-mdisable-callt} command line option is supported but not
22080 enabled by default.
22081 @end itemize
22083 When this version of the ABI is enabled the C preprocessor symbol
22084 @code{__V850_GCC_ABI__} is defined.
22086 @item -m8byte-align
22087 @itemx -mno-8byte-align
22088 @opindex m8byte-align
22089 @opindex mno-8byte-align
22090 Enables support for @code{doubles} and @code{long long} types to be
22091 aligned on 8-byte boundaries.  The default is to restrict the
22092 alignment of all objects to at most 4-bytes.  When
22093 @option{-m8byte-align} is in effect the C preprocessor symbol
22094 @code{__V850_8BYTE_ALIGN__} will be defined.
22096 @item -mbig-switch
22097 @opindex mbig-switch
22098 Generate code suitable for big switch tables.  Use this option only if
22099 the assembler/linker complain about out of range branches within a switch
22100 table.
22102 @item -mapp-regs
22103 @opindex mapp-regs
22104 This option causes r2 and r5 to be used in the code generated by
22105 the compiler.  This setting is the default.
22107 @item -mno-app-regs
22108 @opindex mno-app-regs
22109 This option causes r2 and r5 to be treated as fixed registers.
22111 @end table
22113 @node VAX Options
22114 @subsection VAX Options
22115 @cindex VAX options
22117 These @samp{-m} options are defined for the VAX:
22119 @table @gcctabopt
22120 @item -munix
22121 @opindex munix
22122 Do not output certain jump instructions (@code{aobleq} and so on)
22123 that the Unix assembler for the VAX cannot handle across long
22124 ranges.
22126 @item -mgnu
22127 @opindex mgnu
22128 Do output those jump instructions, on the assumption that the
22129 GNU assembler is being used.
22131 @item -mg
22132 @opindex mg
22133 Output code for G-format floating-point numbers instead of D-format.
22134 @end table
22136 @node VMS Options
22137 @subsection VMS Options
22139 These @samp{-m} options are defined for the VMS implementations:
22141 @table @gcctabopt
22142 @item -mvms-return-codes
22143 @opindex mvms-return-codes
22144 Return VMS condition codes from @code{main}. The default is to return POSIX-style
22145 condition (e.g.@ error) codes.
22147 @item -mdebug-main=@var{prefix}
22148 @opindex mdebug-main=@var{prefix}
22149 Flag the first routine whose name starts with @var{prefix} as the main
22150 routine for the debugger.
22152 @item -mmalloc64
22153 @opindex mmalloc64
22154 Default to 64-bit memory allocation routines.
22156 @item -mpointer-size=@var{size}
22157 @opindex -mpointer-size=@var{size}
22158 Set the default size of pointers. Possible options for @var{size} are
22159 @samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
22160 for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
22161 The later option disables @code{pragma pointer_size}.
22162 @end table
22164 @node VxWorks Options
22165 @subsection VxWorks Options
22166 @cindex VxWorks Options
22168 The options in this section are defined for all VxWorks targets.
22169 Options specific to the target hardware are listed with the other
22170 options for that target.
22172 @table @gcctabopt
22173 @item -mrtp
22174 @opindex mrtp
22175 GCC can generate code for both VxWorks kernels and real time processes
22176 (RTPs).  This option switches from the former to the latter.  It also
22177 defines the preprocessor macro @code{__RTP__}.
22179 @item -non-static
22180 @opindex non-static
22181 Link an RTP executable against shared libraries rather than static
22182 libraries.  The options @option{-static} and @option{-shared} can
22183 also be used for RTPs (@pxref{Link Options}); @option{-static}
22184 is the default.
22186 @item -Bstatic
22187 @itemx -Bdynamic
22188 @opindex Bstatic
22189 @opindex Bdynamic
22190 These options are passed down to the linker.  They are defined for
22191 compatibility with Diab.
22193 @item -Xbind-lazy
22194 @opindex Xbind-lazy
22195 Enable lazy binding of function calls.  This option is equivalent to
22196 @option{-Wl,-z,now} and is defined for compatibility with Diab.
22198 @item -Xbind-now
22199 @opindex Xbind-now
22200 Disable lazy binding of function calls.  This option is the default and
22201 is defined for compatibility with Diab.
22202 @end table
22204 @node x86-64 Options
22205 @subsection x86-64 Options
22206 @cindex x86-64 options
22208 These are listed under @xref{i386 and x86-64 Options}.
22210 @node Xstormy16 Options
22211 @subsection Xstormy16 Options
22212 @cindex Xstormy16 Options
22214 These options are defined for Xstormy16:
22216 @table @gcctabopt
22217 @item -msim
22218 @opindex msim
22219 Choose startup files and linker script suitable for the simulator.
22220 @end table
22222 @node Xtensa Options
22223 @subsection Xtensa Options
22224 @cindex Xtensa Options
22226 These options are supported for Xtensa targets:
22228 @table @gcctabopt
22229 @item -mconst16
22230 @itemx -mno-const16
22231 @opindex mconst16
22232 @opindex mno-const16
22233 Enable or disable use of @code{CONST16} instructions for loading
22234 constant values.  The @code{CONST16} instruction is currently not a
22235 standard option from Tensilica.  When enabled, @code{CONST16}
22236 instructions are always used in place of the standard @code{L32R}
22237 instructions.  The use of @code{CONST16} is enabled by default only if
22238 the @code{L32R} instruction is not available.
22240 @item -mfused-madd
22241 @itemx -mno-fused-madd
22242 @opindex mfused-madd
22243 @opindex mno-fused-madd
22244 Enable or disable use of fused multiply/add and multiply/subtract
22245 instructions in the floating-point option.  This has no effect if the
22246 floating-point option is not also enabled.  Disabling fused multiply/add
22247 and multiply/subtract instructions forces the compiler to use separate
22248 instructions for the multiply and add/subtract operations.  This may be
22249 desirable in some cases where strict IEEE 754-compliant results are
22250 required: the fused multiply add/subtract instructions do not round the
22251 intermediate result, thereby producing results with @emph{more} bits of
22252 precision than specified by the IEEE standard.  Disabling fused multiply
22253 add/subtract instructions also ensures that the program output is not
22254 sensitive to the compiler's ability to combine multiply and add/subtract
22255 operations.
22257 @item -mserialize-volatile
22258 @itemx -mno-serialize-volatile
22259 @opindex mserialize-volatile
22260 @opindex mno-serialize-volatile
22261 When this option is enabled, GCC inserts @code{MEMW} instructions before
22262 @code{volatile} memory references to guarantee sequential consistency.
22263 The default is @option{-mserialize-volatile}.  Use
22264 @option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
22266 @item -mforce-no-pic
22267 @opindex mforce-no-pic
22268 For targets, like GNU/Linux, where all user-mode Xtensa code must be
22269 position-independent code (PIC), this option disables PIC for compiling
22270 kernel code.
22272 @item -mtext-section-literals
22273 @itemx -mno-text-section-literals
22274 @opindex mtext-section-literals
22275 @opindex mno-text-section-literals
22276 Control the treatment of literal pools.  The default is
22277 @option{-mno-text-section-literals}, which places literals in a separate
22278 section in the output file.  This allows the literal pool to be placed
22279 in a data RAM/ROM, and it also allows the linker to combine literal
22280 pools from separate object files to remove redundant literals and
22281 improve code size.  With @option{-mtext-section-literals}, the literals
22282 are interspersed in the text section in order to keep them as close as
22283 possible to their references.  This may be necessary for large assembly
22284 files.
22286 @item -mtarget-align
22287 @itemx -mno-target-align
22288 @opindex mtarget-align
22289 @opindex mno-target-align
22290 When this option is enabled, GCC instructs the assembler to
22291 automatically align instructions to reduce branch penalties at the
22292 expense of some code density.  The assembler attempts to widen density
22293 instructions to align branch targets and the instructions following call
22294 instructions.  If there are not enough preceding safe density
22295 instructions to align a target, no widening is performed.  The
22296 default is @option{-mtarget-align}.  These options do not affect the
22297 treatment of auto-aligned instructions like @code{LOOP}, which the
22298 assembler always aligns, either by widening density instructions or
22299 by inserting NOP instructions.
22301 @item -mlongcalls
22302 @itemx -mno-longcalls
22303 @opindex mlongcalls
22304 @opindex mno-longcalls
22305 When this option is enabled, GCC instructs the assembler to translate
22306 direct calls to indirect calls unless it can determine that the target
22307 of a direct call is in the range allowed by the call instruction.  This
22308 translation typically occurs for calls to functions in other source
22309 files.  Specifically, the assembler translates a direct @code{CALL}
22310 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
22311 The default is @option{-mno-longcalls}.  This option should be used in
22312 programs where the call target can potentially be out of range.  This
22313 option is implemented in the assembler, not the compiler, so the
22314 assembly code generated by GCC still shows direct call
22315 instructions---look at the disassembled object code to see the actual
22316 instructions.  Note that the assembler uses an indirect call for
22317 every cross-file call, not just those that really are out of range.
22318 @end table
22320 @node zSeries Options
22321 @subsection zSeries Options
22322 @cindex zSeries options
22324 These are listed under @xref{S/390 and zSeries Options}.
22326 @node Code Gen Options
22327 @section Options for Code Generation Conventions
22328 @cindex code generation conventions
22329 @cindex options, code generation
22330 @cindex run-time options
22332 These machine-independent options control the interface conventions
22333 used in code generation.
22335 Most of them have both positive and negative forms; the negative form
22336 of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
22337 one of the forms is listed---the one that is not the default.  You
22338 can figure out the other form by either removing @samp{no-} or adding
22341 @table @gcctabopt
22342 @item -fbounds-check
22343 @opindex fbounds-check
22344 For front ends that support it, generate additional code to check that
22345 indices used to access arrays are within the declared range.  This is
22346 currently only supported by the Java and Fortran front ends, where
22347 this option defaults to true and false respectively.
22349 @item -fstack-reuse=@var{reuse-level}
22350 @opindex fstack_reuse
22351 This option controls stack space reuse for user declared local/auto variables
22352 and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
22353 @samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
22354 local variables and temporaries, @samp{named_vars} enables the reuse only for
22355 user defined local variables with names, and @samp{none} disables stack reuse
22356 completely. The default value is @samp{all}. The option is needed when the
22357 program extends the lifetime of a scoped local variable or a compiler generated
22358 temporary beyond the end point defined by the language.  When a lifetime of
22359 a variable ends, and if the variable lives in memory, the optimizing compiler
22360 has the freedom to reuse its stack space with other temporaries or scoped
22361 local variables whose live range does not overlap with it. Legacy code extending
22362 local lifetime will likely to break with the stack reuse optimization.
22364 For example,
22366 @smallexample
22367    int *p;
22368    @{
22369      int local1;
22371      p = &local1;
22372      local1 = 10;
22373      ....
22374    @}
22375    @{
22376       int local2;
22377       local2 = 20;
22378       ...
22379    @}
22381    if (*p == 10)  // out of scope use of local1
22382      @{
22384      @}
22385 @end smallexample
22387 Another example:
22388 @smallexample
22390    struct A
22391    @{
22392        A(int k) : i(k), j(k) @{ @}
22393        int i;
22394        int j;
22395    @};
22397    A *ap;
22399    void foo(const A& ar)
22400    @{
22401       ap = &ar;
22402    @}
22404    void bar()
22405    @{
22406       foo(A(10)); // temp object's lifetime ends when foo returns
22408       @{
22409         A a(20);
22410         ....
22411       @}
22412       ap->i+= 10;  // ap references out of scope temp whose space
22413                    // is reused with a. What is the value of ap->i?
22414    @}
22416 @end smallexample
22418 The lifetime of a compiler generated temporary is well defined by the C++
22419 standard. When a lifetime of a temporary ends, and if the temporary lives
22420 in memory, the optimizing compiler has the freedom to reuse its stack
22421 space with other temporaries or scoped local variables whose live range
22422 does not overlap with it. However some of the legacy code relies on
22423 the behavior of older compilers in which temporaries' stack space is
22424 not reused, the aggressive stack reuse can lead to runtime errors. This
22425 option is used to control the temporary stack reuse optimization.
22427 @item -ftrapv
22428 @opindex ftrapv
22429 This option generates traps for signed overflow on addition, subtraction,
22430 multiplication operations.
22432 @item -fwrapv
22433 @opindex fwrapv
22434 This option instructs the compiler to assume that signed arithmetic
22435 overflow of addition, subtraction and multiplication wraps around
22436 using twos-complement representation.  This flag enables some optimizations
22437 and disables others.  This option is enabled by default for the Java
22438 front end, as required by the Java language specification.
22440 @item -fexceptions
22441 @opindex fexceptions
22442 Enable exception handling.  Generates extra code needed to propagate
22443 exceptions.  For some targets, this implies GCC generates frame
22444 unwind information for all functions, which can produce significant data
22445 size overhead, although it does not affect execution.  If you do not
22446 specify this option, GCC enables it by default for languages like
22447 C++ that normally require exception handling, and disables it for
22448 languages like C that do not normally require it.  However, you may need
22449 to enable this option when compiling C code that needs to interoperate
22450 properly with exception handlers written in C++.  You may also wish to
22451 disable this option if you are compiling older C++ programs that don't
22452 use exception handling.
22454 @item -fnon-call-exceptions
22455 @opindex fnon-call-exceptions
22456 Generate code that allows trapping instructions to throw exceptions.
22457 Note that this requires platform-specific runtime support that does
22458 not exist everywhere.  Moreover, it only allows @emph{trapping}
22459 instructions to throw exceptions, i.e.@: memory references or floating-point
22460 instructions.  It does not allow exceptions to be thrown from
22461 arbitrary signal handlers such as @code{SIGALRM}.
22463 @item -fdelete-dead-exceptions
22464 @opindex fdelete-dead-exceptions
22465 Consider that instructions that may throw exceptions but don't otherwise
22466 contribute to the execution of the program can be optimized away.
22467 This option is enabled by default for the Ada front end, as permitted by
22468 the Ada language specification.
22469 Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
22471 @item -funwind-tables
22472 @opindex funwind-tables
22473 Similar to @option{-fexceptions}, except that it just generates any needed
22474 static data, but does not affect the generated code in any other way.
22475 You normally do not need to enable this option; instead, a language processor
22476 that needs this handling enables it on your behalf.
22478 @item -fasynchronous-unwind-tables
22479 @opindex fasynchronous-unwind-tables
22480 Generate unwind table in DWARF 2 format, if supported by target machine.  The
22481 table is exact at each instruction boundary, so it can be used for stack
22482 unwinding from asynchronous events (such as debugger or garbage collector).
22484 @item -fno-gnu-unique
22485 @opindex fno-gnu-unique
22486 On systems with recent GNU assembler and C library, the C++ compiler
22487 uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions
22488 of template static data members and static local variables in inline
22489 functions are unique even in the presence of @code{RTLD_LOCAL}; this
22490 is necessary to avoid problems with a library used by two different
22491 @code{RTLD_LOCAL} plugins depending on a definition in one of them and
22492 therefore disagreeing with the other one about the binding of the
22493 symbol.  But this causes @code{dlclose} to be ignored for affected
22494 DSOs; if your program relies on reinitialization of a DSO via
22495 @code{dlclose} and @code{dlopen}, you can use
22496 @option{-fno-gnu-unique}.
22498 @item -fpcc-struct-return
22499 @opindex fpcc-struct-return
22500 Return ``short'' @code{struct} and @code{union} values in memory like
22501 longer ones, rather than in registers.  This convention is less
22502 efficient, but it has the advantage of allowing intercallability between
22503 GCC-compiled files and files compiled with other compilers, particularly
22504 the Portable C Compiler (pcc).
22506 The precise convention for returning structures in memory depends
22507 on the target configuration macros.
22509 Short structures and unions are those whose size and alignment match
22510 that of some integer type.
22512 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
22513 switch is not binary compatible with code compiled with the
22514 @option{-freg-struct-return} switch.
22515 Use it to conform to a non-default application binary interface.
22517 @item -freg-struct-return
22518 @opindex freg-struct-return
22519 Return @code{struct} and @code{union} values in registers when possible.
22520 This is more efficient for small structures than
22521 @option{-fpcc-struct-return}.
22523 If you specify neither @option{-fpcc-struct-return} nor
22524 @option{-freg-struct-return}, GCC defaults to whichever convention is
22525 standard for the target.  If there is no standard convention, GCC
22526 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
22527 the principal compiler.  In those cases, we can choose the standard, and
22528 we chose the more efficient register return alternative.
22530 @strong{Warning:} code compiled with the @option{-freg-struct-return}
22531 switch is not binary compatible with code compiled with the
22532 @option{-fpcc-struct-return} switch.
22533 Use it to conform to a non-default application binary interface.
22535 @item -fshort-enums
22536 @opindex fshort-enums
22537 Allocate to an @code{enum} type only as many bytes as it needs for the
22538 declared range of possible values.  Specifically, the @code{enum} type
22539 is equivalent to the smallest integer type that has enough room.
22541 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
22542 code that is not binary compatible with code generated without that switch.
22543 Use it to conform to a non-default application binary interface.
22545 @item -fshort-double
22546 @opindex fshort-double
22547 Use the same size for @code{double} as for @code{float}.
22549 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
22550 code that is not binary compatible with code generated without that switch.
22551 Use it to conform to a non-default application binary interface.
22553 @item -fshort-wchar
22554 @opindex fshort-wchar
22555 Override the underlying type for @samp{wchar_t} to be @samp{short
22556 unsigned int} instead of the default for the target.  This option is
22557 useful for building programs to run under WINE@.
22559 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
22560 code that is not binary compatible with code generated without that switch.
22561 Use it to conform to a non-default application binary interface.
22563 @item -fno-common
22564 @opindex fno-common
22565 In C code, controls the placement of uninitialized global variables.
22566 Unix C compilers have traditionally permitted multiple definitions of
22567 such variables in different compilation units by placing the variables
22568 in a common block.
22569 This is the behavior specified by @option{-fcommon}, and is the default
22570 for GCC on most targets.
22571 On the other hand, this behavior is not required by ISO C, and on some
22572 targets may carry a speed or code size penalty on variable references.
22573 The @option{-fno-common} option specifies that the compiler should place
22574 uninitialized global variables in the data section of the object file,
22575 rather than generating them as common blocks.
22576 This has the effect that if the same variable is declared
22577 (without @code{extern}) in two different compilations,
22578 you get a multiple-definition error when you link them.
22579 In this case, you must compile with @option{-fcommon} instead.
22580 Compiling with @option{-fno-common} is useful on targets for which
22581 it provides better performance, or if you wish to verify that the
22582 program will work on other systems that always treat uninitialized
22583 variable declarations this way.
22585 @item -fno-ident
22586 @opindex fno-ident
22587 Ignore the @samp{#ident} directive.
22589 @item -finhibit-size-directive
22590 @opindex finhibit-size-directive
22591 Don't output a @code{.size} assembler directive, or anything else that
22592 would cause trouble if the function is split in the middle, and the
22593 two halves are placed at locations far apart in memory.  This option is
22594 used when compiling @file{crtstuff.c}; you should not need to use it
22595 for anything else.
22597 @item -fverbose-asm
22598 @opindex fverbose-asm
22599 Put extra commentary information in the generated assembly code to
22600 make it more readable.  This option is generally only of use to those
22601 who actually need to read the generated assembly code (perhaps while
22602 debugging the compiler itself).
22604 @option{-fno-verbose-asm}, the default, causes the
22605 extra information to be omitted and is useful when comparing two assembler
22606 files.
22608 @item -frecord-gcc-switches
22609 @opindex frecord-gcc-switches
22610 This switch causes the command line used to invoke the
22611 compiler to be recorded into the object file that is being created.
22612 This switch is only implemented on some targets and the exact format
22613 of the recording is target and binary file format dependent, but it
22614 usually takes the form of a section containing ASCII text.  This
22615 switch is related to the @option{-fverbose-asm} switch, but that
22616 switch only records information in the assembler output file as
22617 comments, so it never reaches the object file.
22618 See also @option{-grecord-gcc-switches} for another
22619 way of storing compiler options into the object file.
22621 @item -fpic
22622 @opindex fpic
22623 @cindex global offset table
22624 @cindex PIC
22625 Generate position-independent code (PIC) suitable for use in a shared
22626 library, if supported for the target machine.  Such code accesses all
22627 constant addresses through a global offset table (GOT)@.  The dynamic
22628 loader resolves the GOT entries when the program starts (the dynamic
22629 loader is not part of GCC; it is part of the operating system).  If
22630 the GOT size for the linked executable exceeds a machine-specific
22631 maximum size, you get an error message from the linker indicating that
22632 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
22633 instead.  (These maximums are 8k on the SPARC and 32k
22634 on the m68k and RS/6000.  The 386 has no such limit.)
22636 Position-independent code requires special support, and therefore works
22637 only on certain machines.  For the 386, GCC supports PIC for System V
22638 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
22639 position-independent.
22641 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
22642 are defined to 1.
22644 @item -fPIC
22645 @opindex fPIC
22646 If supported for the target machine, emit position-independent code,
22647 suitable for dynamic linking and avoiding any limit on the size of the
22648 global offset table.  This option makes a difference on the m68k,
22649 PowerPC and SPARC@.
22651 Position-independent code requires special support, and therefore works
22652 only on certain machines.
22654 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
22655 are defined to 2.
22657 @item -fpie
22658 @itemx -fPIE
22659 @opindex fpie
22660 @opindex fPIE
22661 These options are similar to @option{-fpic} and @option{-fPIC}, but
22662 generated position independent code can be only linked into executables.
22663 Usually these options are used when @option{-pie} GCC option is
22664 used during linking.
22666 @option{-fpie} and @option{-fPIE} both define the macros
22667 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
22668 for @option{-fpie} and 2 for @option{-fPIE}.
22670 @item -fno-jump-tables
22671 @opindex fno-jump-tables
22672 Do not use jump tables for switch statements even where it would be
22673 more efficient than other code generation strategies.  This option is
22674 of use in conjunction with @option{-fpic} or @option{-fPIC} for
22675 building code that forms part of a dynamic linker and cannot
22676 reference the address of a jump table.  On some targets, jump tables
22677 do not require a GOT and this option is not needed.
22679 @item -ffixed-@var{reg}
22680 @opindex ffixed
22681 Treat the register named @var{reg} as a fixed register; generated code
22682 should never refer to it (except perhaps as a stack pointer, frame
22683 pointer or in some other fixed role).
22685 @var{reg} must be the name of a register.  The register names accepted
22686 are machine-specific and are defined in the @code{REGISTER_NAMES}
22687 macro in the machine description macro file.
22689 This flag does not have a negative form, because it specifies a
22690 three-way choice.
22692 @item -fcall-used-@var{reg}
22693 @opindex fcall-used
22694 Treat the register named @var{reg} as an allocable register that is
22695 clobbered by function calls.  It may be allocated for temporaries or
22696 variables that do not live across a call.  Functions compiled this way
22697 do not save and restore the register @var{reg}.
22699 It is an error to use this flag with the frame pointer or stack pointer.
22700 Use of this flag for other registers that have fixed pervasive roles in
22701 the machine's execution model produces disastrous results.
22703 This flag does not have a negative form, because it specifies a
22704 three-way choice.
22706 @item -fcall-saved-@var{reg}
22707 @opindex fcall-saved
22708 Treat the register named @var{reg} as an allocable register saved by
22709 functions.  It may be allocated even for temporaries or variables that
22710 live across a call.  Functions compiled this way save and restore
22711 the register @var{reg} if they use it.
22713 It is an error to use this flag with the frame pointer or stack pointer.
22714 Use of this flag for other registers that have fixed pervasive roles in
22715 the machine's execution model produces disastrous results.
22717 A different sort of disaster results from the use of this flag for
22718 a register in which function values may be returned.
22720 This flag does not have a negative form, because it specifies a
22721 three-way choice.
22723 @item -fpack-struct[=@var{n}]
22724 @opindex fpack-struct
22725 Without a value specified, pack all structure members together without
22726 holes.  When a value is specified (which must be a small power of two), pack
22727 structure members according to this value, representing the maximum
22728 alignment (that is, objects with default alignment requirements larger than
22729 this are output potentially unaligned at the next fitting location.
22731 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
22732 code that is not binary compatible with code generated without that switch.
22733 Additionally, it makes the code suboptimal.
22734 Use it to conform to a non-default application binary interface.
22736 @item -finstrument-functions
22737 @opindex finstrument-functions
22738 Generate instrumentation calls for entry and exit to functions.  Just
22739 after function entry and just before function exit, the following
22740 profiling functions are called with the address of the current
22741 function and its call site.  (On some platforms,
22742 @code{__builtin_return_address} does not work beyond the current
22743 function, so the call site information may not be available to the
22744 profiling functions otherwise.)
22746 @smallexample
22747 void __cyg_profile_func_enter (void *this_fn,
22748                                void *call_site);
22749 void __cyg_profile_func_exit  (void *this_fn,
22750                                void *call_site);
22751 @end smallexample
22753 The first argument is the address of the start of the current function,
22754 which may be looked up exactly in the symbol table.
22756 This instrumentation is also done for functions expanded inline in other
22757 functions.  The profiling calls indicate where, conceptually, the
22758 inline function is entered and exited.  This means that addressable
22759 versions of such functions must be available.  If all your uses of a
22760 function are expanded inline, this may mean an additional expansion of
22761 code size.  If you use @samp{extern inline} in your C code, an
22762 addressable version of such functions must be provided.  (This is
22763 normally the case anyway, but if you get lucky and the optimizer always
22764 expands the functions inline, you might have gotten away without
22765 providing static copies.)
22767 A function may be given the attribute @code{no_instrument_function}, in
22768 which case this instrumentation is not done.  This can be used, for
22769 example, for the profiling functions listed above, high-priority
22770 interrupt routines, and any functions from which the profiling functions
22771 cannot safely be called (perhaps signal handlers, if the profiling
22772 routines generate output or allocate memory).
22774 @item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
22775 @opindex finstrument-functions-exclude-file-list
22777 Set the list of functions that are excluded from instrumentation (see
22778 the description of @code{-finstrument-functions}).  If the file that
22779 contains a function definition matches with one of @var{file}, then
22780 that function is not instrumented.  The match is done on substrings:
22781 if the @var{file} parameter is a substring of the file name, it is
22782 considered to be a match.
22784 For example:
22786 @smallexample
22787 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
22788 @end smallexample
22790 @noindent
22791 excludes any inline function defined in files whose pathnames
22792 contain @code{/bits/stl} or @code{include/sys}.
22794 If, for some reason, you want to include letter @code{','} in one of
22795 @var{sym}, write @code{'\,'}. For example,
22796 @code{-finstrument-functions-exclude-file-list='\,\,tmp'}
22797 (note the single quote surrounding the option).
22799 @item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
22800 @opindex finstrument-functions-exclude-function-list
22802 This is similar to @code{-finstrument-functions-exclude-file-list},
22803 but this option sets the list of function names to be excluded from
22804 instrumentation.  The function name to be matched is its user-visible
22805 name, such as @code{vector<int> blah(const vector<int> &)}, not the
22806 internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
22807 match is done on substrings: if the @var{sym} parameter is a substring
22808 of the function name, it is considered to be a match.  For C99 and C++
22809 extended identifiers, the function name must be given in UTF-8, not
22810 using universal character names.
22812 @item -fstack-check
22813 @opindex fstack-check
22814 Generate code to verify that you do not go beyond the boundary of the
22815 stack.  You should specify this flag if you are running in an
22816 environment with multiple threads, but you only rarely need to specify it in
22817 a single-threaded environment since stack overflow is automatically
22818 detected on nearly all systems if there is only one stack.
22820 Note that this switch does not actually cause checking to be done; the
22821 operating system or the language runtime must do that.  The switch causes
22822 generation of code to ensure that they see the stack being extended.
22824 You can additionally specify a string parameter: @code{no} means no
22825 checking, @code{generic} means force the use of old-style checking,
22826 @code{specific} means use the best checking method and is equivalent
22827 to bare @option{-fstack-check}.
22829 Old-style checking is a generic mechanism that requires no specific
22830 target support in the compiler but comes with the following drawbacks:
22832 @enumerate
22833 @item
22834 Modified allocation strategy for large objects: they are always
22835 allocated dynamically if their size exceeds a fixed threshold.
22837 @item
22838 Fixed limit on the size of the static frame of functions: when it is
22839 topped by a particular function, stack checking is not reliable and
22840 a warning is issued by the compiler.
22842 @item
22843 Inefficiency: because of both the modified allocation strategy and the
22844 generic implementation, code performance is hampered.
22845 @end enumerate
22847 Note that old-style stack checking is also the fallback method for
22848 @code{specific} if no target support has been added in the compiler.
22850 @item -fstack-limit-register=@var{reg}
22851 @itemx -fstack-limit-symbol=@var{sym}
22852 @itemx -fno-stack-limit
22853 @opindex fstack-limit-register
22854 @opindex fstack-limit-symbol
22855 @opindex fno-stack-limit
22856 Generate code to ensure that the stack does not grow beyond a certain value,
22857 either the value of a register or the address of a symbol.  If a larger
22858 stack is required, a signal is raised at run time.  For most targets,
22859 the signal is raised before the stack overruns the boundary, so
22860 it is possible to catch the signal without taking special precautions.
22862 For instance, if the stack starts at absolute address @samp{0x80000000}
22863 and grows downwards, you can use the flags
22864 @option{-fstack-limit-symbol=__stack_limit} and
22865 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
22866 of 128KB@.  Note that this may only work with the GNU linker.
22868 @item -fsplit-stack
22869 @opindex fsplit-stack
22870 Generate code to automatically split the stack before it overflows.
22871 The resulting program has a discontiguous stack which can only
22872 overflow if the program is unable to allocate any more memory.  This
22873 is most useful when running threaded programs, as it is no longer
22874 necessary to calculate a good stack size to use for each thread.  This
22875 is currently only implemented for the i386 and x86_64 back ends running
22876 GNU/Linux.
22878 When code compiled with @option{-fsplit-stack} calls code compiled
22879 without @option{-fsplit-stack}, there may not be much stack space
22880 available for the latter code to run.  If compiling all code,
22881 including library code, with @option{-fsplit-stack} is not an option,
22882 then the linker can fix up these calls so that the code compiled
22883 without @option{-fsplit-stack} always has a large stack.  Support for
22884 this is implemented in the gold linker in GNU binutils release 2.21
22885 and later.
22887 @item -fleading-underscore
22888 @opindex fleading-underscore
22889 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
22890 change the way C symbols are represented in the object file.  One use
22891 is to help link with legacy assembly code.
22893 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
22894 generate code that is not binary compatible with code generated without that
22895 switch.  Use it to conform to a non-default application binary interface.
22896 Not all targets provide complete support for this switch.
22898 @item -ftls-model=@var{model}
22899 @opindex ftls-model
22900 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
22901 The @var{model} argument should be one of @code{global-dynamic},
22902 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
22903 Note that the choice is subject to optimization: the compiler may use
22904 a more efficient model for symbols not visible outside of the translation
22905 unit, or if @option{-fpic} is not given on the command line.
22907 The default without @option{-fpic} is @code{initial-exec}; with
22908 @option{-fpic} the default is @code{global-dynamic}.
22910 @item -fvisibility=@var{default|internal|hidden|protected}
22911 @opindex fvisibility
22912 Set the default ELF image symbol visibility to the specified option---all
22913 symbols are marked with this unless overridden within the code.
22914 Using this feature can very substantially improve linking and
22915 load times of shared object libraries, produce more optimized
22916 code, provide near-perfect API export and prevent symbol clashes.
22917 It is @strong{strongly} recommended that you use this in any shared objects
22918 you distribute.
22920 Despite the nomenclature, @code{default} always means public; i.e.,
22921 available to be linked against from outside the shared object.
22922 @code{protected} and @code{internal} are pretty useless in real-world
22923 usage so the only other commonly used option is @code{hidden}.
22924 The default if @option{-fvisibility} isn't specified is
22925 @code{default}, i.e., make every
22926 symbol public---this causes the same behavior as previous versions of
22927 GCC@.
22929 A good explanation of the benefits offered by ensuring ELF
22930 symbols have the correct visibility is given by ``How To Write
22931 Shared Libraries'' by Ulrich Drepper (which can be found at
22932 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
22933 solution made possible by this option to marking things hidden when
22934 the default is public is to make the default hidden and mark things
22935 public.  This is the norm with DLLs on Windows and with @option{-fvisibility=hidden}
22936 and @code{__attribute__ ((visibility("default")))} instead of
22937 @code{__declspec(dllexport)} you get almost identical semantics with
22938 identical syntax.  This is a great boon to those working with
22939 cross-platform projects.
22941 For those adding visibility support to existing code, you may find
22942 @samp{#pragma GCC visibility} of use.  This works by you enclosing
22943 the declarations you wish to set visibility for with (for example)
22944 @samp{#pragma GCC visibility push(hidden)} and
22945 @samp{#pragma GCC visibility pop}.
22946 Bear in mind that symbol visibility should be viewed @strong{as
22947 part of the API interface contract} and thus all new code should
22948 always specify visibility when it is not the default; i.e., declarations
22949 only for use within the local DSO should @strong{always} be marked explicitly
22950 as hidden as so to avoid PLT indirection overheads---making this
22951 abundantly clear also aids readability and self-documentation of the code.
22952 Note that due to ISO C++ specification requirements, @code{operator new} and
22953 @code{operator delete} must always be of default visibility.
22955 Be aware that headers from outside your project, in particular system
22956 headers and headers from any other library you use, may not be
22957 expecting to be compiled with visibility other than the default.  You
22958 may need to explicitly say @samp{#pragma GCC visibility push(default)}
22959 before including any such headers.
22961 @samp{extern} declarations are not affected by @option{-fvisibility}, so
22962 a lot of code can be recompiled with @option{-fvisibility=hidden} with
22963 no modifications.  However, this means that calls to @code{extern}
22964 functions with no explicit visibility use the PLT, so it is more
22965 effective to use @code{__attribute ((visibility))} and/or
22966 @code{#pragma GCC visibility} to tell the compiler which @code{extern}
22967 declarations should be treated as hidden.
22969 Note that @option{-fvisibility} does affect C++ vague linkage
22970 entities. This means that, for instance, an exception class that is
22971 be thrown between DSOs must be explicitly marked with default
22972 visibility so that the @samp{type_info} nodes are unified between
22973 the DSOs.
22975 An overview of these techniques, their benefits and how to use them
22976 is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.
22978 @item -fstrict-volatile-bitfields
22979 @opindex fstrict-volatile-bitfields
22980 This option should be used if accesses to volatile bit-fields (or other
22981 structure fields, although the compiler usually honors those types
22982 anyway) should use a single access of the width of the
22983 field's type, aligned to a natural alignment if possible.  For
22984 example, targets with memory-mapped peripheral registers might require
22985 all such accesses to be 16 bits wide; with this flag you can
22986 declare all peripheral bit-fields as @code{unsigned short} (assuming short
22987 is 16 bits on these targets) to force GCC to use 16-bit accesses
22988 instead of, perhaps, a more efficient 32-bit access.
22990 If this option is disabled, the compiler uses the most efficient
22991 instruction.  In the previous example, that might be a 32-bit load
22992 instruction, even though that accesses bytes that do not contain
22993 any portion of the bit-field, or memory-mapped registers unrelated to
22994 the one being updated.
22996 In some cases, such as when the @code{packed} attribute is applied to a 
22997 structure field, it may not be possible to access the field with a single
22998 read or write that is correctly aligned for the target machine.  In this
22999 case GCC falls back to generating multiple accesses rather than code that 
23000 will fault or truncate the result at run time.
23002 Note:  Due to restrictions of the C/C++11 memory model, write accesses are
23003 not allowed to touch non bit-field members.  It is therefore recommended
23004 to define all bits of the field's type as bit-field members.
23006 The default value of this option is determined by the application binary
23007 interface for the target processor.
23009 @item -fsync-libcalls
23010 @opindex fsync-libcalls
23011 This option controls whether any out-of-line instance of the @code{__sync}
23012 family of functions may be used to implement the C++11 @code{__atomic}
23013 family of functions.
23015 The default value of this option is enabled, thus the only useful form
23016 of the option is @option{-fno-sync-libcalls}.  This option is used in
23017 the implementation of the @file{libatomic} runtime library.
23019 @end table
23021 @c man end
23023 @node Environment Variables
23024 @section Environment Variables Affecting GCC
23025 @cindex environment variables
23027 @c man begin ENVIRONMENT
23028 This section describes several environment variables that affect how GCC
23029 operates.  Some of them work by specifying directories or prefixes to use
23030 when searching for various kinds of files.  Some are used to specify other
23031 aspects of the compilation environment.
23033 Note that you can also specify places to search using options such as
23034 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
23035 take precedence over places specified using environment variables, which
23036 in turn take precedence over those specified by the configuration of GCC@.
23037 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
23038 GNU Compiler Collection (GCC) Internals}.
23040 @table @env
23041 @item LANG
23042 @itemx LC_CTYPE
23043 @c @itemx LC_COLLATE
23044 @itemx LC_MESSAGES
23045 @c @itemx LC_MONETARY
23046 @c @itemx LC_NUMERIC
23047 @c @itemx LC_TIME
23048 @itemx LC_ALL
23049 @findex LANG
23050 @findex LC_CTYPE
23051 @c @findex LC_COLLATE
23052 @findex LC_MESSAGES
23053 @c @findex LC_MONETARY
23054 @c @findex LC_NUMERIC
23055 @c @findex LC_TIME
23056 @findex LC_ALL
23057 @cindex locale
23058 These environment variables control the way that GCC uses
23059 localization information which allows GCC to work with different
23060 national conventions.  GCC inspects the locale categories
23061 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
23062 so.  These locale categories can be set to any value supported by your
23063 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
23064 Kingdom encoded in UTF-8.
23066 The @env{LC_CTYPE} environment variable specifies character
23067 classification.  GCC uses it to determine the character boundaries in
23068 a string; this is needed for some multibyte encodings that contain quote
23069 and escape characters that are otherwise interpreted as a string
23070 end or escape.
23072 The @env{LC_MESSAGES} environment variable specifies the language to
23073 use in diagnostic messages.
23075 If the @env{LC_ALL} environment variable is set, it overrides the value
23076 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
23077 and @env{LC_MESSAGES} default to the value of the @env{LANG}
23078 environment variable.  If none of these variables are set, GCC
23079 defaults to traditional C English behavior.
23081 @item TMPDIR
23082 @findex TMPDIR
23083 If @env{TMPDIR} is set, it specifies the directory to use for temporary
23084 files.  GCC uses temporary files to hold the output of one stage of
23085 compilation which is to be used as input to the next stage: for example,
23086 the output of the preprocessor, which is the input to the compiler
23087 proper.
23089 @item GCC_COMPARE_DEBUG
23090 @findex GCC_COMPARE_DEBUG
23091 Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
23092 @option{-fcompare-debug} to the compiler driver.  See the documentation
23093 of this option for more details.
23095 @item GCC_EXEC_PREFIX
23096 @findex GCC_EXEC_PREFIX
23097 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
23098 names of the subprograms executed by the compiler.  No slash is added
23099 when this prefix is combined with the name of a subprogram, but you can
23100 specify a prefix that ends with a slash if you wish.
23102 If @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
23103 an appropriate prefix to use based on the pathname it is invoked with.
23105 If GCC cannot find the subprogram using the specified prefix, it
23106 tries looking in the usual places for the subprogram.
23108 The default value of @env{GCC_EXEC_PREFIX} is
23109 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
23110 the installed compiler. In many cases @var{prefix} is the value
23111 of @code{prefix} when you ran the @file{configure} script.
23113 Other prefixes specified with @option{-B} take precedence over this prefix.
23115 This prefix is also used for finding files such as @file{crt0.o} that are
23116 used for linking.
23118 In addition, the prefix is used in an unusual way in finding the
23119 directories to search for header files.  For each of the standard
23120 directories whose name normally begins with @samp{/usr/local/lib/gcc}
23121 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
23122 replacing that beginning with the specified prefix to produce an
23123 alternate directory name.  Thus, with @option{-Bfoo/}, GCC searches
23124 @file{foo/bar} just before it searches the standard directory 
23125 @file{/usr/local/lib/bar}.
23126 If a standard directory begins with the configured
23127 @var{prefix} then the value of @var{prefix} is replaced by
23128 @env{GCC_EXEC_PREFIX} when looking for header files.
23130 @item COMPILER_PATH
23131 @findex COMPILER_PATH
23132 The value of @env{COMPILER_PATH} is a colon-separated list of
23133 directories, much like @env{PATH}.  GCC tries the directories thus
23134 specified when searching for subprograms, if it can't find the
23135 subprograms using @env{GCC_EXEC_PREFIX}.
23137 @item LIBRARY_PATH
23138 @findex LIBRARY_PATH
23139 The value of @env{LIBRARY_PATH} is a colon-separated list of
23140 directories, much like @env{PATH}.  When configured as a native compiler,
23141 GCC tries the directories thus specified when searching for special
23142 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
23143 using GCC also uses these directories when searching for ordinary
23144 libraries for the @option{-l} option (but directories specified with
23145 @option{-L} come first).
23147 @item LANG
23148 @findex LANG
23149 @cindex locale definition
23150 This variable is used to pass locale information to the compiler.  One way in
23151 which this information is used is to determine the character set to be used
23152 when character literals, string literals and comments are parsed in C and C++.
23153 When the compiler is configured to allow multibyte characters,
23154 the following values for @env{LANG} are recognized:
23156 @table @samp
23157 @item C-JIS
23158 Recognize JIS characters.
23159 @item C-SJIS
23160 Recognize SJIS characters.
23161 @item C-EUCJP
23162 Recognize EUCJP characters.
23163 @end table
23165 If @env{LANG} is not defined, or if it has some other value, then the
23166 compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
23167 recognize and translate multibyte characters.
23168 @end table
23170 @noindent
23171 Some additional environment variables affect the behavior of the
23172 preprocessor.
23174 @include cppenv.texi
23176 @c man end
23178 @node Precompiled Headers
23179 @section Using Precompiled Headers
23180 @cindex precompiled headers
23181 @cindex speed of compilation
23183 Often large projects have many header files that are included in every
23184 source file.  The time the compiler takes to process these header files
23185 over and over again can account for nearly all of the time required to
23186 build the project.  To make builds faster, GCC allows you to
23187 @dfn{precompile} a header file.
23189 To create a precompiled header file, simply compile it as you would any
23190 other file, if necessary using the @option{-x} option to make the driver
23191 treat it as a C or C++ header file.  You may want to use a
23192 tool like @command{make} to keep the precompiled header up-to-date when
23193 the headers it contains change.
23195 A precompiled header file is searched for when @code{#include} is
23196 seen in the compilation.  As it searches for the included file
23197 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
23198 compiler looks for a precompiled header in each directory just before it
23199 looks for the include file in that directory.  The name searched for is
23200 the name specified in the @code{#include} with @samp{.gch} appended.  If
23201 the precompiled header file can't be used, it is ignored.
23203 For instance, if you have @code{#include "all.h"}, and you have
23204 @file{all.h.gch} in the same directory as @file{all.h}, then the
23205 precompiled header file is used if possible, and the original
23206 header is used otherwise.
23208 Alternatively, you might decide to put the precompiled header file in a
23209 directory and use @option{-I} to ensure that directory is searched
23210 before (or instead of) the directory containing the original header.
23211 Then, if you want to check that the precompiled header file is always
23212 used, you can put a file of the same name as the original header in this
23213 directory containing an @code{#error} command.
23215 This also works with @option{-include}.  So yet another way to use
23216 precompiled headers, good for projects not designed with precompiled
23217 header files in mind, is to simply take most of the header files used by
23218 a project, include them from another header file, precompile that header
23219 file, and @option{-include} the precompiled header.  If the header files
23220 have guards against multiple inclusion, they are skipped because
23221 they've already been included (in the precompiled header).
23223 If you need to precompile the same header file for different
23224 languages, targets, or compiler options, you can instead make a
23225 @emph{directory} named like @file{all.h.gch}, and put each precompiled
23226 header in the directory, perhaps using @option{-o}.  It doesn't matter
23227 what you call the files in the directory; every precompiled header in
23228 the directory is considered.  The first precompiled header
23229 encountered in the directory that is valid for this compilation is
23230 used; they're searched in no particular order.
23232 There are many other possibilities, limited only by your imagination,
23233 good sense, and the constraints of your build system.
23235 A precompiled header file can be used only when these conditions apply:
23237 @itemize
23238 @item
23239 Only one precompiled header can be used in a particular compilation.
23241 @item
23242 A precompiled header can't be used once the first C token is seen.  You
23243 can have preprocessor directives before a precompiled header; you cannot
23244 include a precompiled header from inside another header.
23246 @item
23247 The precompiled header file must be produced for the same language as
23248 the current compilation.  You can't use a C precompiled header for a C++
23249 compilation.
23251 @item
23252 The precompiled header file must have been produced by the same compiler
23253 binary as the current compilation is using.
23255 @item
23256 Any macros defined before the precompiled header is included must
23257 either be defined in the same way as when the precompiled header was
23258 generated, or must not affect the precompiled header, which usually
23259 means that they don't appear in the precompiled header at all.
23261 The @option{-D} option is one way to define a macro before a
23262 precompiled header is included; using a @code{#define} can also do it.
23263 There are also some options that define macros implicitly, like
23264 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
23265 defined this way.
23267 @item If debugging information is output when using the precompiled
23268 header, using @option{-g} or similar, the same kind of debugging information
23269 must have been output when building the precompiled header.  However,
23270 a precompiled header built using @option{-g} can be used in a compilation
23271 when no debugging information is being output.
23273 @item The same @option{-m} options must generally be used when building
23274 and using the precompiled header.  @xref{Submodel Options},
23275 for any cases where this rule is relaxed.
23277 @item Each of the following options must be the same when building and using
23278 the precompiled header:
23280 @gccoptlist{-fexceptions}
23282 @item
23283 Some other command-line options starting with @option{-f},
23284 @option{-p}, or @option{-O} must be defined in the same way as when
23285 the precompiled header was generated.  At present, it's not clear
23286 which options are safe to change and which are not; the safest choice
23287 is to use exactly the same options when generating and using the
23288 precompiled header.  The following are known to be safe:
23290 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
23291 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
23292 -fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
23293 -pedantic-errors}
23295 @end itemize
23297 For all of these except the last, the compiler automatically
23298 ignores the precompiled header if the conditions aren't met.  If you
23299 find an option combination that doesn't work and doesn't cause the
23300 precompiled header to be ignored, please consider filing a bug report,
23301 see @ref{Bugs}.
23303 If you do use differing options when generating and using the
23304 precompiled header, the actual behavior is a mixture of the
23305 behavior for the options.  For instance, if you use @option{-g} to
23306 generate the precompiled header but not when using it, you may or may
23307 not get debugging information for routines in the precompiled header.