[ARC] Add support for atomic memory built-in.
[platform/upstream/gcc.git] / gcc / doc / invoke.texi
1 @c Copyright (C) 1988-2015 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
4
5 @ignore
6 @c man begin INCLUDE
7 @include gcc-vers.texi
8 @c man end
9
10 @c man begin COPYRIGHT
11 Copyright @copyright{} 1988-2015 Free Software Foundation, Inc.
12
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.
20
21 (a) The FSF's Front-Cover Text is:
22
23      A GNU Manual
24
25 (b) The FSF's Back-Cover Text is:
26
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{}
42
43 Only the most useful options are listed here; see below for the
44 remainder.  @command{g++} accepts mostly the same options as @command{gcc}.
45 @c man end
46 @c man begin SEEALSO
47 gpl(7), gfdl(7), fsf-funding(7),
48 cpp(1), gcov(1), as(1), ld(1), gdb(1), 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
62
63 @node Invoking GCC
64 @chapter GCC Command Options
65 @cindex GCC command options
66 @cindex command options
67 @cindex options, GCC command
68
69 @c man begin DESCRIPTION
70 When you invoke GCC, it normally does preprocessing, compilation,
71 assembly and linking.  The ``overall options'' allow you to stop this
72 process at an intermediate stage.  For example, the @option{-c} option
73 says not to run the linker.  Then the output consists of object files
74 output by the assembler.
75
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.
80
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.
87
88 @cindex C++ compilation options
89 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
90 options for compiling C++ programs.
91
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}}.
98
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.
106
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.
113
114 @c man end
115
116 @xref{Option Index}, for an index to GCC's options.
117
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 * Diagnostic Message Formatting Options:: Controlling how diagnostics should
129                         be 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
148
149 @c man begin OPTIONS
150
151 @node Option Summary
152 @section Option Summary
153
154 Here is a summary of all the options, grouped by type.  Explanations are
155 in the following sections.
156
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}}
165
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 -fopenacc -fopenmp -fopenmp-simd @gol
172 -fms-extensions -fplan9-extensions -fsso-struct=@var{endianness}
173 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
174 -fsigned-bitfields  -fsigned-char @gol
175 -funsigned-bitfields  -funsigned-char @gol
176 -trigraphs -traditional -traditional-cpp}
177
178 @item C++ Language Options
179 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
180 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
181 -fconstexpr-depth=@var{n}  -ffriend-injection @gol
182 -fno-elide-constructors @gol
183 -fno-enforce-eh-specs @gol
184 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
185 -fno-implicit-templates @gol
186 -fno-implicit-inline-templates @gol
187 -fno-implement-inlines  -fms-extensions @gol
188 -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
189 -fno-optional-diags  -fpermissive @gol
190 -fno-pretty-templates @gol
191 -frepo  -fno-rtti -fsized-deallocation @gol
192 -fstats  -ftemplate-backtrace-limit=@var{n} @gol
193 -ftemplate-depth=@var{n} @gol
194 -fno-threadsafe-statics  -fuse-cxa-atexit @gol
195 -fno-weak  -nostdinc++ @gol
196 -fvisibility-inlines-hidden @gol
197 -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol
198 -fvtv-counts -fvtv-debug @gol
199 -fvisibility-ms-compat @gol
200 -fext-numeric-literals @gol
201 -Wabi=@var{n}  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy @gol
202 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wmultiple-inheritance @gol
203 -Wnamespaces -Wnarrowing @gol
204 -Wnoexcept -Wnon-virtual-dtor  -Wreorder @gol
205 -Weffc++  -Wstrict-null-sentinel -Wtemplates @gol
206 -Wno-non-template-friend  -Wold-style-cast @gol
207 -Woverloaded-virtual  -Wno-pmf-conversions @gol
208 -Wsign-promo -Wvirtual-inheritance}
209
210 @item Objective-C and Objective-C++ Language Options
211 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
212 Objective-C and Objective-C++ Dialects}.
213 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
214 -fgnu-runtime  -fnext-runtime @gol
215 -fno-nil-receivers @gol
216 -fobjc-abi-version=@var{n} @gol
217 -fobjc-call-cxx-cdtors @gol
218 -fobjc-direct-dispatch @gol
219 -fobjc-exceptions @gol
220 -fobjc-gc @gol
221 -fobjc-nilcheck @gol
222 -fobjc-std=objc1 @gol
223 -fno-local-ivars @gol
224 -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]} @gol
225 -freplace-objc-classes @gol
226 -fzero-link @gol
227 -gen-decls @gol
228 -Wassign-intercept @gol
229 -Wno-protocol  -Wselector @gol
230 -Wstrict-selector-match @gol
231 -Wundeclared-selector}
232
233 @item Diagnostic Message Formatting Options
234 @xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
235 @gccoptlist{-fmessage-length=@var{n}  @gol
236 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
237 -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
238 -fno-diagnostics-show-option -fno-diagnostics-show-caret}
239
240 @item Warning Options
241 @xref{Warning Options,,Options to Request or Suppress Warnings}.
242 @gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
243 -pedantic-errors @gol
244 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  @gol
245 -Wno-aggressive-loop-optimizations -Warray-bounds -Warray-bounds=@var{n} @gol
246 -Wno-attributes -Wbool-compare -Wno-builtin-macro-redefined @gol
247 -Wc90-c99-compat -Wc99-c11-compat @gol
248 -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align  -Wcast-qual  @gol
249 -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported  @gol
250 -Wconversion -Wcoverage-mismatch -Wno-cpp -Wdate-time -Wdelete-incomplete @gol
251 -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init @gol
252 -Wdisabled-optimization @gol
253 -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers @gol
254 -Wno-div-by-zero -Wdouble-promotion -Wduplicated-cond @gol
255 -Wempty-body  -Wenum-compare -Wno-endif-labels @gol
256 -Werror  -Werror=* -Wfatal-errors -Wfloat-equal  -Wformat  -Wformat=2 @gol
257 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
258 -Wformat-security  -Wformat-signedness  -Wformat-y2k -Wframe-address @gol
259 -Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
260 -Wignored-qualifiers  -Wincompatible-pointer-types @gol
261 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
262 -Winit-self  -Winline  -Wno-int-conversion @gol
263 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
264 -Winvalid-pch -Wlarger-than=@var{len} @gol
265 -Wlogical-op -Wlogical-not-parentheses -Wlong-long @gol
266 -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args @gol
267 -Wmisleading-indentation -Wmissing-braces @gol
268 -Wmissing-field-initializers -Wmissing-include-dirs @gol
269 -Wno-multichar  -Wnonnull  -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol
270 -Wnull-dereference -Wodr  -Wno-overflow  -Wopenmp-simd  @gol
271 -Woverride-init-side-effects -Woverlength-strings @gol
272 -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
273 -Wparentheses -Wno-pedantic-ms-format @gol
274 -Wplacement-new -Wpointer-arith  -Wno-pointer-to-int-cast @gol
275 -Wno-pragmas -Wredundant-decls  -Wno-return-local-addr @gol
276 -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar @gol
277 -Wshift-overflow -Wshift-overflow=@var{n} @gol
278 -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value @gol
279 -Wsign-compare  -Wsign-conversion -Wfloat-conversion @gol
280 -Wno-scalar-storage-order @gol
281 -Wsizeof-pointer-memaccess  -Wsizeof-array-argument @gol
282 -Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol
283 -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
284 -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
285 -Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol
286 -Wmissing-format-attribute -Wsubobject-linkage @gol
287 -Wswitch  -Wswitch-default  -Wswitch-enum -Wswitch-bool -Wsync-nand @gol
288 -Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs @gol
289 -Wtype-limits  -Wundef @gol
290 -Wuninitialized  -Wunknown-pragmas  -Wunsafe-loop-optimizations @gol
291 -Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
292 -Wunused-label  -Wunused-local-typedefs -Wunused-parameter @gol
293 -Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
294 -Wunused-const-variable @gol
295 -Wunused-but-set-parameter -Wunused-but-set-variable @gol
296 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
297 -Wvla -Wvolatile-register-var  -Wwrite-strings @gol
298 -Wzero-as-null-pointer-constant}
299
300 @item C and Objective-C-only Warning Options
301 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
302 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
303 -Wold-style-declaration  -Wold-style-definition @gol
304 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
305 -Wdeclaration-after-statement -Wpointer-sign}
306
307 @item Debugging Options
308 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
309 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
310 -fsanitize=@var{style} -fsanitize-recover -fsanitize-recover=@var{style} @gol
311 -fasan-shadow-offset=@var{number} -fsanitize-sections=@var{s1},@var{s2},... @gol
312 -fsanitize-undefined-trap-on-error @gol
313 -fcheck-pointer-bounds -fchecking -fchkp-check-incomplete-type @gol
314 -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds @gol
315 -fchkp-narrow-to-innermost-array -fchkp-optimize @gol
316 -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions @gol
317 -fchkp-use-static-bounds -fchkp-use-static-const-bounds @gol
318 -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read @gol
319 -fchkp-check-read -fchkp-check-write -fchkp-store-bounds @gol
320 -fchkp-instrument-calls -fchkp-instrument-marked-only @gol
321 -fchkp-use-wrappers @gol
322 -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
323 -fdisable-ipa-@var{pass_name} @gol
324 -fdisable-rtl-@var{pass_name} @gol
325 -fdisable-rtl-@var{pass-name}=@var{range-list} @gol
326 -fdisable-tree-@var{pass_name} @gol
327 -fdisable-tree-@var{pass-name}=@var{range-list} @gol
328 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol
329 -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
330 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
331 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
332 -fdump-passes @gol
333 -fdump-statistics @gol
334 -fdump-tree-all @gol
335 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
336 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
337 -fdump-tree-cfg -fdump-tree-alias @gol
338 -fdump-tree-ch @gol
339 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
340 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
341 -fdump-tree-gimple@r{[}-raw@r{]} @gol
342 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
343 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
344 -fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol
345 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
346 -fdump-tree-backprop@r{[}-@var{n}@r{]} @gol
347 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
348 -fdump-tree-nrv -fdump-tree-vect @gol
349 -fdump-tree-sink @gol
350 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
351 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
352 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
353 -fdump-tree-vtable-verify @gol
354 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
355 -fdump-tree-split-paths@r{[}-@var{n}@r{]} @gol
356 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
357 -fdump-final-insns=@var{file} @gol
358 -fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
359 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types @gol
360 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
361 -fenable-@var{kind}-@var{pass} @gol
362 -fenable-@var{kind}-@var{pass}=@var{range-list} @gol
363 -fdebug-types-section -fmem-report-wpa @gol
364 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
365 -fopt-info @gol
366 -fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol
367 -frandom-seed=@var{number} -fsched-verbose=@var{n} @gol
368 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
369 -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking @gol
370 -fvar-tracking-assignments  -fvar-tracking-assignments-toggle @gol
371 -g  -g@var{level}  -gtoggle  -gcoff  -gdwarf-@var{version} @gol
372 -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
373 -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
374 -gvms  -gxcoff  -gxcoff+ -gz@r{[}=@var{type}@r{]} @gol
375 -fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
376 -fdebug-prefix-map=@var{old}=@var{new} @gol
377 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
378 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
379 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
380 -print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
381 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
382 -print-sysroot -print-sysroot-headers-suffix @gol
383 -save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}}
384
385 @item Optimization Options
386 @xref{Optimize Options,,Options that Control Optimization}.
387 @gccoptlist{-faggressive-loop-optimizations -falign-functions[=@var{n}] @gol
388 -falign-jumps[=@var{n}] @gol
389 -falign-labels[=@var{n}] -falign-loops[=@var{n}] @gol
390 -fassociative-math -fauto-profile -fauto-profile[=@var{path}] @gol
391 -fauto-inc-dec -fbranch-probabilities @gol
392 -fbranch-target-load-optimize -fbranch-target-load-optimize2 @gol
393 -fbtr-bb-exclusive -fcaller-saves @gol
394 -fcombine-stack-adjustments -fconserve-stack @gol
395 -fcompare-elim -fcprop-registers -fcrossjumping @gol
396 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
397 -fcx-limited-range @gol
398 -fdata-sections -fdce -fdelayed-branch @gol
399 -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively @gol
400 -fdevirtualize-at-ltrans -fdse @gol
401 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol
402 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
403 -fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
404 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol
405 -fgcse-sm -fhoist-adjacent-loads -fif-conversion @gol
406 -fif-conversion2 -findirect-inlining @gol
407 -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
408 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment @gol
409 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-icf @gol
410 -fira-algorithm=@var{algorithm} @gol
411 -fira-region=@var{region} -fira-hoist-pressure @gol
412 -fira-loop-pressure -fno-ira-share-save-slots @gol
413 -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
414 -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute @gol
415 -fivopts -fkeep-inline-functions -fkeep-static-functions @gol
416 -fkeep-static-consts -flive-range-shrinkage @gol
417 -floop-block -floop-interchange -floop-strip-mine @gol
418 -floop-unroll-and-jam -floop-nest-optimize @gol
419 -floop-parallelize-all -flra-remat -flto -flto-compression-level @gol
420 -flto-partition=@var{alg} -flto-report -flto-report-wpa -fmerge-all-constants @gol
421 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol
422 -fmove-loop-invariants -fno-branch-count-reg @gol
423 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
424 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
425 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
426 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
427 -fomit-frame-pointer -foptimize-sibling-calls @gol
428 -fpartial-inlining -fpeel-loops -fpredictive-commoning @gol
429 -fprefetch-loop-arrays -fprofile-report @gol
430 -fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
431 -fprofile-generate=@var{path} @gol
432 -fprofile-use -fprofile-use=@var{path} -fprofile-values @gol
433 -fprofile-reorder-functions @gol
434 -freciprocal-math -free -frename-registers -freorder-blocks @gol
435 -freorder-blocks-algorithm=@var{algorithm} @gol
436 -freorder-blocks-and-partition -freorder-functions @gol
437 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
438 -frounding-math -fsched2-use-superblocks -fsched-pressure @gol
439 -fsched-spec-load -fsched-spec-load-dangerous @gol
440 -fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
441 -fsched-group-heuristic -fsched-critical-path-heuristic @gol
442 -fsched-spec-insn-heuristic -fsched-rank-heuristic @gol
443 -fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol
444 -fschedule-fusion @gol
445 -fschedule-insns -fschedule-insns2 -fsection-anchors @gol
446 -fselective-scheduling -fselective-scheduling2 @gol
447 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
448 -fsemantic-interposition -fshrink-wrap -fsignaling-nans @gol
449 -fsingle-precision-constant -fsplit-ivs-in-unroller @gol
450 -fsplit-paths @gol
451 -fsplit-wide-types -fssa-backprop -fssa-phiopt @gol
452 -fstack-protector -fstack-protector-all -fstack-protector-strong @gol
453 -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing @gol
454 -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp @gol
455 -ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
456 -ftree-coalesce-vars -ftree-copy-prop -ftree-dce -ftree-dominator-opts @gol
457 -ftree-dse -ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol
458 -ftree-loop-if-convert-stores -ftree-loop-im @gol
459 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol
460 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
461 -ftree-loop-vectorize @gol
462 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
463 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol
464 -ftree-switch-conversion -ftree-tail-merge -ftree-ter @gol
465 -ftree-vectorize -ftree-vrp @gol
466 -funit-at-a-time -funroll-all-loops -funroll-loops @gol
467 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
468 -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol
469 -fweb -fwhole-program -fwpa -fuse-linker-plugin @gol
470 --param @var{name}=@var{value}
471 -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og}
472
473 @item Preprocessor Options
474 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
475 @gccoptlist{-A@var{question}=@var{answer} @gol
476 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
477 -C  -dD  -dI  -dM  -dN @gol
478 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
479 -idirafter @var{dir} @gol
480 -include @var{file}  -imacros @var{file} @gol
481 -iprefix @var{file}  -iwithprefix @var{dir} @gol
482 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
483 -imultilib @var{dir} -isysroot @var{dir} @gol
484 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
485 -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory @gol
486 -remap -trigraphs  -undef  -U@var{macro}  @gol
487 -Wp,@var{option} -Xpreprocessor @var{option} -no-integrated-cpp}
488
489 @item Assembler Option
490 @xref{Assembler Options,,Passing Options to the Assembler}.
491 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
492
493 @item Linker Options
494 @xref{Link Options,,Options for Linking}.
495 @gccoptlist{@var{object-file-name}  -fuse-ld=@var{linker} -l@var{library} @gol
496 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
497 -s  -static -static-libgcc -static-libstdc++ @gol
498 -static-libasan -static-libtsan -static-liblsan -static-libubsan @gol
499 -static-libmpx -static-libmpxwrappers @gol
500 -shared -shared-libgcc  -symbolic @gol
501 -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
502 -u @var{symbol} -z @var{keyword}}
503
504 @item Directory Options
505 @xref{Directory Options,,Options for Directory Search}.
506 @gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir} @gol
507 -iquote@var{dir} -L@var{dir} -specs=@var{file} -I- @gol
508 --sysroot=@var{dir} --no-sysroot-suffix}
509
510 @item Machine Dependent Options
511 @xref{Submodel Options,,Hardware Models and Configurations}.
512 @c This list is ordered alphanumerically by subsection name.
513 @c Try and put the significant identifier (CPU or system) first,
514 @c so users have a clue at guessing where the ones they want will be.
515
516 @emph{AArch64 Options}
517 @gccoptlist{-mabi=@var{name}  -mbig-endian  -mlittle-endian @gol
518 -mgeneral-regs-only @gol
519 -mcmodel=tiny  -mcmodel=small  -mcmodel=large @gol
520 -mstrict-align @gol
521 -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
522 -mtls-dialect=desc  -mtls-dialect=traditional @gol
523 -mtls-size=@var{size} @gol
524 -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769 @gol
525 -mfix-cortex-a53-843419  -mno-fix-cortex-a53-843419 @gol
526 -mlow-precision-recip-sqrt -mno-low-precision-recip-sqrt@gol
527 -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}}
528
529 @emph{Adapteva Epiphany Options}
530 @gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol
531 -mbranch-cost=@var{num} -mcmove -mnops=@var{num} -msoft-cmpsf @gol
532 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=@var{num} @gol
533 -mround-nearest -mlong-calls -mshort-calls -msmall16 @gol
534 -mfp-mode=@var{mode} -mvect-double -max-vect-align=@var{num} @gol
535 -msplit-vecmove-early -m1reg-@var{reg}}
536
537 @emph{ARC Options}
538 @gccoptlist{-mbarrel-shifter @gol
539 -mcpu=@var{cpu} -mA6 -mARC600 -mA7 -mARC700 @gol
540 -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr @gol
541 -mea -mno-mpy -mmul32x16 -mmul64 -matomic @gol
542 -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap @gol
543 -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape @gol
544 -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof @gol
545 -mepilogue-cfi -mlong-calls -mmedium-calls -msdata @gol
546 -mucb-mcount -mvolatile-cache @gol
547 -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc @gol
548 -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi @gol
549 -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none @gol
550 -mlra-priority-compact mlra-priority-noncompact -mno-millicode @gol
551 -mmixed-code -mq-class -mRcq -mRcw -msize-level=@var{level} @gol
552 -mtune=@var{cpu} -mmultcost=@var{num} @gol
553 -munalign-prob-threshold=@var{probability} -mmpy-option=@var{multo} @gol
554 -mdiv-rem -mcode-density}
555
556 @emph{ARM Options}
557 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
558 -mabi=@var{name} @gol
559 -mapcs-stack-check  -mno-apcs-stack-check @gol
560 -mapcs-float  -mno-apcs-float @gol
561 -mapcs-reentrant  -mno-apcs-reentrant @gol
562 -msched-prolog  -mno-sched-prolog @gol
563 -mlittle-endian  -mbig-endian @gol
564 -mfloat-abi=@var{name} @gol
565 -mfp16-format=@var{name}
566 -mthumb-interwork  -mno-thumb-interwork @gol
567 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
568 -mtune=@var{name} -mprint-tune-info @gol
569 -mstructure-size-boundary=@var{n} @gol
570 -mabort-on-noreturn @gol
571 -mlong-calls  -mno-long-calls @gol
572 -msingle-pic-base  -mno-single-pic-base @gol
573 -mpic-register=@var{reg} @gol
574 -mnop-fun-dllimport @gol
575 -mpoke-function-name @gol
576 -mthumb  -marm @gol
577 -mtpcs-frame  -mtpcs-leaf-frame @gol
578 -mcaller-super-interworking  -mcallee-super-interworking @gol
579 -mtp=@var{name} -mtls-dialect=@var{dialect} @gol
580 -mword-relocations @gol
581 -mfix-cortex-m3-ldrd @gol
582 -munaligned-access @gol
583 -mneon-for-64bits @gol
584 -mslow-flash-data @gol
585 -masm-syntax-unified @gol
586 -mrestrict-it}
587
588 @emph{AVR Options}
589 @gccoptlist{-mmcu=@var{mcu} -maccumulate-args -mbranch-cost=@var{cost} @gol
590 -mcall-prologues -mint8 -mn_flash=@var{size} -mno-interrupts @gol
591 -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib -Waddr-space-convert}
592
593 @emph{Blackfin Options}
594 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
595 -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
596 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
597 -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
598 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
599 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
600 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
601 -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
602 -micplb}
603
604 @emph{C6X Options}
605 @gccoptlist{-mbig-endian  -mlittle-endian -march=@var{cpu} @gol
606 -msim -msdata=@var{sdata-type}}
607
608 @emph{CRIS Options}
609 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
610 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
611 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
612 -mstack-align  -mdata-align  -mconst-align @gol
613 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
614 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
615 -mmul-bug-workaround  -mno-mul-bug-workaround}
616
617 @emph{CR16 Options}
618 @gccoptlist{-mmac @gol
619 -mcr16cplus -mcr16c @gol
620 -msim -mint32 -mbit-ops
621 -mdata-model=@var{model}}
622
623 @emph{Darwin Options}
624 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
625 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
626 -client_name  -compatibility_version  -current_version @gol
627 -dead_strip @gol
628 -dependency-file  -dylib_file  -dylinker_install_name @gol
629 -dynamic  -dynamiclib  -exported_symbols_list @gol
630 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
631 -force_flat_namespace  -headerpad_max_install_names @gol
632 -iframework @gol
633 -image_base  -init  -install_name  -keep_private_externs @gol
634 -multi_module  -multiply_defined  -multiply_defined_unused @gol
635 -noall_load   -no_dead_strip_inits_and_terms @gol
636 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
637 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
638 -private_bundle  -read_only_relocs  -sectalign @gol
639 -sectobjectsymbols  -whyload  -seg1addr @gol
640 -sectcreate  -sectobjectsymbols  -sectorder @gol
641 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
642 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
643 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
644 -single_module  -static  -sub_library  -sub_umbrella @gol
645 -twolevel_namespace  -umbrella  -undefined @gol
646 -unexported_symbols_list  -weak_reference_mismatches @gol
647 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
648 -mkernel -mone-byte-bool}
649
650 @emph{DEC Alpha Options}
651 @gccoptlist{-mno-fp-regs  -msoft-float @gol
652 -mieee  -mieee-with-inexact  -mieee-conformant @gol
653 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
654 -mtrap-precision=@var{mode}  -mbuild-constants @gol
655 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
656 -mbwx  -mmax  -mfix  -mcix @gol
657 -mfloat-vax  -mfloat-ieee @gol
658 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
659 -msmall-text  -mlarge-text @gol
660 -mmemory-latency=@var{time}}
661
662 @emph{FR30 Options}
663 @gccoptlist{-msmall-model -mno-lsim}
664
665 @emph{FT32 Options}
666 @gccoptlist{-msim -mlra}
667
668 @emph{FRV Options}
669 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
670 -mhard-float  -msoft-float @gol
671 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
672 -mdouble  -mno-double @gol
673 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
674 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
675 -mlinked-fp  -mlong-calls  -malign-labels @gol
676 -mlibrary-pic  -macc-4  -macc-8 @gol
677 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
678 -moptimize-membar -mno-optimize-membar @gol
679 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
680 -mvliw-branch  -mno-vliw-branch @gol
681 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
682 -mno-nested-cond-exec  -mtomcat-stats @gol
683 -mTLS -mtls @gol
684 -mcpu=@var{cpu}}
685
686 @emph{GNU/Linux Options}
687 @gccoptlist{-mglibc -muclibc -mmusl -mbionic -mandroid @gol
688 -tno-android-cc -tno-android-ld}
689
690 @emph{H8/300 Options}
691 @gccoptlist{-mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300}
692
693 @emph{HPPA Options}
694 @gccoptlist{-march=@var{architecture-type} @gol
695 -mdisable-fpregs  -mdisable-indexing @gol
696 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
697 -mfixed-range=@var{register-range} @gol
698 -mjump-in-delay -mlinker-opt -mlong-calls @gol
699 -mlong-load-store  -mno-disable-fpregs @gol
700 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
701 -mno-jump-in-delay  -mno-long-load-store @gol
702 -mno-portable-runtime  -mno-soft-float @gol
703 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
704 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
705 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
706 -munix=@var{unix-std}  -nolibdld  -static  -threads}
707
708 @emph{IA-64 Options}
709 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
710 -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata @gol
711 -mconstant-gp  -mauto-pic  -mfused-madd @gol
712 -minline-float-divide-min-latency @gol
713 -minline-float-divide-max-throughput @gol
714 -mno-inline-float-divide @gol
715 -minline-int-divide-min-latency @gol
716 -minline-int-divide-max-throughput  @gol
717 -mno-inline-int-divide @gol
718 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
719 -mno-inline-sqrt @gol
720 -mdwarf2-asm -mearly-stop-bits @gol
721 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
722 -mtune=@var{cpu-type} -milp32 -mlp64 @gol
723 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol
724 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
725 -msched-spec-ldc -msched-spec-control-ldc @gol
726 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol
727 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol
728 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol
729 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}}
730
731 @emph{LM32 Options}
732 @gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
733 -msign-extend-enabled -muser-enabled}
734
735 @emph{M32R/D Options}
736 @gccoptlist{-m32r2 -m32rx -m32r @gol
737 -mdebug @gol
738 -malign-loops -mno-align-loops @gol
739 -missue-rate=@var{number} @gol
740 -mbranch-cost=@var{number} @gol
741 -mmodel=@var{code-size-model-type} @gol
742 -msdata=@var{sdata-type} @gol
743 -mno-flush-func -mflush-func=@var{name} @gol
744 -mno-flush-trap -mflush-trap=@var{number} @gol
745 -G @var{num}}
746
747 @emph{M32C Options}
748 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
749
750 @emph{M680x0 Options}
751 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune} @gol
752 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
753 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
754 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
755 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
756 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
757 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
758 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
759 -mxgot -mno-xgot}
760
761 @emph{MCore Options}
762 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
763 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
764 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
765 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
766 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
767
768 @emph{MeP Options}
769 @gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol
770 -mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol
771 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol
772 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol
773 -mtiny=@var{n}}
774
775 @emph{MicroBlaze Options}
776 @gccoptlist{-msoft-float -mhard-float -msmall-divides -mcpu=@var{cpu} @gol
777 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift @gol
778 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss @gol
779 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt @gol
780 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-@var{app-model}}
781
782 @emph{MIPS Options}
783 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
784 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 @gol
785 -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 @gol
786 -mips16  -mno-mips16  -mflip-mips16 @gol
787 -minterlink-compressed -mno-interlink-compressed @gol
788 -minterlink-mips16  -mno-interlink-mips16 @gol
789 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
790 -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
791 -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float @gol
792 -mno-float  -msingle-float  -mdouble-float @gol
793 -modd-spreg -mno-odd-spreg @gol
794 -mabs=@var{mode}  -mnan=@var{encoding} @gol
795 -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
796 -mmcu -mmno-mcu @gol
797 -meva -mno-eva @gol
798 -mvirt -mno-virt @gol
799 -mxpa -mno-xpa @gol
800 -mmicromips -mno-micromips @gol
801 -mfpu=@var{fpu-type} @gol
802 -msmartmips  -mno-smartmips @gol
803 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
804 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
805 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
806 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
807 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
808 -membedded-data  -mno-embedded-data @gol
809 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
810 -mcode-readable=@var{setting} @gol
811 -msplit-addresses  -mno-split-addresses @gol
812 -mexplicit-relocs  -mno-explicit-relocs @gol
813 -mcheck-zero-division  -mno-check-zero-division @gol
814 -mdivide-traps  -mdivide-breaks @gol
815 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
816 -mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp @gol
817 -mfix-24k -mno-fix-24k @gol
818 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
819 -mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000 @gol
820 -mfix-vr4120  -mno-fix-vr4120 @gol
821 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
822 -mflush-func=@var{func}  -mno-flush-func @gol
823 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
824 -mcompact-branches=@var{policy} @gol
825 -mfp-exceptions -mno-fp-exceptions @gol
826 -mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol
827 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address @gol
828 -mframe-header-opt -mno-frame-header-opt}
829
830 @emph{MMIX Options}
831 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
832 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
833 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
834 -mno-base-addresses  -msingle-exit  -mno-single-exit}
835
836 @emph{MN10300 Options}
837 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
838 -mno-am33 -mam33 -mam33-2 -mam34 @gol
839 -mtune=@var{cpu-type} @gol
840 -mreturn-pointer-on-d0 @gol
841 -mno-crt0  -mrelax -mliw -msetlb}
842
843 @emph{Moxie Options}
844 @gccoptlist{-meb -mel -mmul.x -mno-crt0}
845
846 @emph{MSP430 Options}
847 @gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
848 -mwarn-mcu @gol
849 -mcode-region= -mdata-region= @gol
850 -msilicon-errata= -msilicon-errata-warn= @gol
851 -mhwmult= -minrt}
852
853 @emph{NDS32 Options}
854 @gccoptlist{-mbig-endian -mlittle-endian @gol
855 -mreduced-regs -mfull-regs @gol
856 -mcmov -mno-cmov @gol
857 -mperf-ext -mno-perf-ext @gol
858 -mv3push -mno-v3push @gol
859 -m16bit -mno-16bit @gol
860 -misr-vector-size=@var{num} @gol
861 -mcache-block-size=@var{num} @gol
862 -march=@var{arch} @gol
863 -mcmodel=@var{code-model} @gol
864 -mctor-dtor -mrelax}
865
866 @emph{Nios II Options}
867 @gccoptlist{-G @var{num} -mgpopt=@var{option} -mgpopt -mno-gpopt @gol
868 -mel -meb @gol
869 -mno-bypass-cache -mbypass-cache @gol
870 -mno-cache-volatile -mcache-volatile @gol
871 -mno-fast-sw-div -mfast-sw-div @gol
872 -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div @gol
873 -mcustom-@var{insn}=@var{N} -mno-custom-@var{insn} @gol
874 -mcustom-fpu-cfg=@var{name} @gol
875 -mhal -msmallc -msys-crt0=@var{name} -msys-lib=@var{name} @gol
876 -march=@var{arch} -mbmx -mno-bmx -mcdx -mno-cdx}
877
878 @emph{Nvidia PTX Options}
879 @gccoptlist{-m32 -m64 -mmainkernel -moptimize}
880
881 @emph{PDP-11 Options}
882 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
883 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
884 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
885 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
886 -mbranch-expensive  -mbranch-cheap @gol
887 -munix-asm  -mdec-asm}
888
889 @emph{picoChip Options}
890 @gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} @gol
891 -msymbol-as-address -mno-inefficient-warnings}
892
893 @emph{PowerPC Options}
894 See RS/6000 and PowerPC Options.
895
896 @emph{RL78 Options}
897 @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs @gol
898 -mcpu=g10 -mcpu=g13 -mcpu=g14 -mg10 -mg13 -mg14 @gol
899 -m64bit-doubles -m32bit-doubles}
900
901 @emph{RS/6000 and PowerPC Options}
902 @gccoptlist{-mcpu=@var{cpu-type} @gol
903 -mtune=@var{cpu-type} @gol
904 -mcmodel=@var{code-model} @gol
905 -mpowerpc64 @gol
906 -maltivec  -mno-altivec @gol
907 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
908 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
909 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd @gol
910 -mfprnd  -mno-fprnd @gol
911 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
912 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
913 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
914 -malign-power  -malign-natural @gol
915 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
916 -msingle-float -mdouble-float -msimple-fpu @gol
917 -mstring  -mno-string  -mupdate  -mno-update @gol
918 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
919 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
920 -mstrict-align  -mno-strict-align  -mrelocatable @gol
921 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
922 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
923 -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base @gol
924 -mprioritize-restricted-insns=@var{priority} @gol
925 -msched-costly-dep=@var{dependence_type} @gol
926 -minsert-sched-nops=@var{scheme} @gol
927 -mcall-sysv  -mcall-netbsd @gol
928 -maix-struct-return  -msvr4-struct-return @gol
929 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
930 -mblock-move-inline-limit=@var{num} @gol
931 -misel -mno-isel @gol
932 -misel=yes  -misel=no @gol
933 -mspe -mno-spe @gol
934 -mspe=yes  -mspe=no @gol
935 -mpaired @gol
936 -mgen-cell-microcode -mwarn-cell-microcode @gol
937 -mvrsave -mno-vrsave @gol
938 -mmulhw -mno-mulhw @gol
939 -mdlmzb -mno-dlmzb @gol
940 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
941 -mprototype  -mno-prototype @gol
942 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
943 -msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread @gol
944 -mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision @gol
945 -mno-recip-precision @gol
946 -mveclibabi=@var{type} -mfriz -mno-friz @gol
947 -mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol
948 -msave-toc-indirect -mno-save-toc-indirect @gol
949 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol
950 -mcrypto -mno-crypto -mdirect-move -mno-direct-move @gol
951 -mquad-memory -mno-quad-memory @gol
952 -mquad-memory-atomic -mno-quad-memory-atomic @gol
953 -mcompat-align-parm -mno-compat-align-parm @gol
954 -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf @gol
955 -mupper-regs -mno-upper-regs -mmodulo -mno-modulo @gol
956 -mfloat128 -mno-float128 -mfloat128-hardware -mno-float128-hardware @gol
957 -mpower9-fusion -mno-mpower9-fusion -mpower9-vector -mno-power9-vector}
958
959 @emph{RX Options}
960 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
961 -mcpu=@gol
962 -mbig-endian-data -mlittle-endian-data @gol
963 -msmall-data @gol
964 -msim  -mno-sim@gol
965 -mas100-syntax -mno-as100-syntax@gol
966 -mrelax@gol
967 -mmax-constant-size=@gol
968 -mint-register=@gol
969 -mpid@gol
970 -mallow-string-insns -mno-allow-string-insns@gol
971 -mjsr@gol
972 -mno-warn-multiple-fast-interrupts@gol
973 -msave-acc-in-interrupts}
974
975 @emph{S/390 and zSeries Options}
976 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
977 -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
978 -mlong-double-64 -mlong-double-128 @gol
979 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
980 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
981 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
982 -mhtm -mvx -mzvector @gol
983 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
984 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard @gol
985 -mhotpatch=@var{halfwords},@var{halfwords}}
986
987 @emph{Score Options}
988 @gccoptlist{-meb -mel @gol
989 -mnhwloop @gol
990 -muls @gol
991 -mmac @gol
992 -mscore5 -mscore5u -mscore7 -mscore7d}
993
994 @emph{SH Options}
995 @gccoptlist{-m1  -m2  -m2e @gol
996 -m2a-nofpu -m2a-single-only -m2a-single -m2a @gol
997 -m3  -m3e @gol
998 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
999 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
1000 -mb  -ml  -mdalign  -mrelax @gol
1001 -mbigtable -mfmovd -mrenesas -mno-renesas -mnomacsave @gol
1002 -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct @gol
1003 -mspace -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
1004 -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
1005 -maccumulate-outgoing-args @gol
1006 -matomic-model=@var{atomic-model} @gol
1007 -mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch @gol
1008 -mcbranch-force-delay-slot @gol
1009 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra @gol
1010 -mpretend-cmove -mtas}
1011
1012 @emph{Solaris 2 Options}
1013 @gccoptlist{-mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text @gol
1014 -pthreads -pthread}
1015
1016 @emph{SPARC Options}
1017 @gccoptlist{-mcpu=@var{cpu-type} @gol
1018 -mtune=@var{cpu-type} @gol
1019 -mcmodel=@var{code-model} @gol
1020 -mmemory-model=@var{mem-model} @gol
1021 -m32  -m64  -mapp-regs  -mno-app-regs @gol
1022 -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
1023 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
1024 -mhard-quad-float  -msoft-quad-float @gol
1025 -mstack-bias  -mno-stack-bias @gol
1026 -mstd-struct-return  -mno-std-struct-return @gol
1027 -munaligned-doubles  -mno-unaligned-doubles @gol
1028 -muser-mode  -mno-user-mode @gol
1029 -mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
1030 -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
1031 -mcbcond -mno-cbcond @gol
1032 -mfmaf  -mno-fmaf  -mpopc  -mno-popc @gol
1033 -mfix-at697f -mfix-ut699}
1034
1035 @emph{SPU Options}
1036 @gccoptlist{-mwarn-reloc -merror-reloc @gol
1037 -msafe-dma -munsafe-dma @gol
1038 -mbranch-hints @gol
1039 -msmall-mem -mlarge-mem -mstdmain @gol
1040 -mfixed-range=@var{register-range} @gol
1041 -mea32 -mea64 @gol
1042 -maddress-space-conversion -mno-address-space-conversion @gol
1043 -mcache-size=@var{cache-size} @gol
1044 -matomic-updates -mno-atomic-updates}
1045
1046 @emph{System V Options}
1047 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
1048
1049 @emph{TILE-Gx Options}
1050 @gccoptlist{-mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian @gol
1051 -mcmodel=@var{code-model}}
1052
1053 @emph{TILEPro Options}
1054 @gccoptlist{-mcpu=@var{cpu} -m32}
1055
1056 @emph{V850 Options}
1057 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
1058 -mprolog-function  -mno-prolog-function  -mspace @gol
1059 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
1060 -mapp-regs  -mno-app-regs @gol
1061 -mdisable-callt  -mno-disable-callt @gol
1062 -mv850e2v3 -mv850e2 -mv850e1 -mv850es @gol
1063 -mv850e -mv850 -mv850e3v5 @gol
1064 -mloop @gol
1065 -mrelax @gol
1066 -mlong-jumps @gol
1067 -msoft-float @gol
1068 -mhard-float @gol
1069 -mgcc-abi @gol
1070 -mrh850-abi @gol
1071 -mbig-switch}
1072
1073 @emph{VAX Options}
1074 @gccoptlist{-mg  -mgnu  -munix}
1075
1076 @emph{Visium Options}
1077 @gccoptlist{-mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float @gol
1078 -mcpu=@var{cpu-type} -mtune=@var{cpu-type} -msv-mode -muser-mode}
1079
1080 @emph{VMS Options}
1081 @gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64 @gol
1082 -mpointer-size=@var{size}}
1083
1084 @emph{VxWorks Options}
1085 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
1086 -Xbind-lazy  -Xbind-now}
1087
1088 @emph{x86 Options}
1089 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
1090 -mtune-ctrl=@var{feature-list} -mdump-tune-features -mno-default @gol
1091 -mfpmath=@var{unit} @gol
1092 -masm=@var{dialect}  -mno-fancy-math-387 @gol
1093 -mno-fp-ret-in-387  -msoft-float @gol
1094 -mno-wide-multiply  -mrtd  -malign-double @gol
1095 -mpreferred-stack-boundary=@var{num} @gol
1096 -mincoming-stack-boundary=@var{num} @gol
1097 -mcld -mcx16 -msahf -mmovbe -mcrc32 @gol
1098 -mrecip -mrecip=@var{opt} @gol
1099 -mvzeroupper -mprefer-avx128 @gol
1100 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
1101 -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -mavx512vl @gol
1102 -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi -msha -maes @gol
1103 -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma @gol
1104 -mprefetchwt1 -mclflushopt -mxsavec -mxsaves @gol
1105 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt @gol
1106 -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mclzero -mthreads @gol
1107 -mms-bitfields -mno-align-stringops  -minline-all-stringops @gol
1108 -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
1109 -mmemcpy-strategy=@var{strategy} -mmemset-strategy=@var{strategy} @gol
1110 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
1111 -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 @gol
1112 -mregparm=@var{num}  -msseregparm @gol
1113 -mveclibabi=@var{type} -mvect8-ret-in-mem @gol
1114 -mpc32 -mpc64 -mpc80 -mstackrealign @gol
1115 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
1116 -mcmodel=@var{code-model} -mabi=@var{name} -maddress-mode=@var{mode} @gol
1117 -m32 -m64 -mx32 -m16 -miamcu -mlarge-data-threshold=@var{num} @gol
1118 -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol
1119 -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol
1120 -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol
1121 -mmitigate-rop}
1122
1123 @emph{x86 Windows Options}
1124 @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol
1125 -mnop-fun-dllimport -mthread @gol
1126 -municode -mwin32 -mwindows -fno-set-stack-executable}
1127
1128 @emph{Xstormy16 Options}
1129 @gccoptlist{-msim}
1130
1131 @emph{Xtensa Options}
1132 @gccoptlist{-mconst16 -mno-const16 @gol
1133 -mfused-madd  -mno-fused-madd @gol
1134 -mforce-no-pic @gol
1135 -mserialize-volatile  -mno-serialize-volatile @gol
1136 -mtext-section-literals  -mno-text-section-literals @gol
1137 -mauto-litpools  -mno-auto-litpools @gol
1138 -mtarget-align  -mno-target-align @gol
1139 -mlongcalls  -mno-longcalls}
1140
1141 @emph{zSeries Options}
1142 See S/390 and zSeries Options.
1143
1144 @item Code Generation Options
1145 @xref{Code Gen Options,,Options for Code Generation Conventions}.
1146 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
1147 -ffixed-@var{reg}  -fexceptions @gol
1148 -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
1149 -fasynchronous-unwind-tables @gol
1150 -fno-gnu-unique @gol
1151 -finhibit-size-directive  -finstrument-functions @gol
1152 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
1153 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
1154 -fno-common  -fno-ident @gol
1155 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE -fno-plt @gol
1156 -fno-jump-tables @gol
1157 -frecord-gcc-switches @gol
1158 -freg-struct-return  -fshort-enums @gol
1159 -fshort-double  -fshort-wchar @gol
1160 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
1161 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
1162 -fno-stack-limit -fsplit-stack @gol
1163 -fleading-underscore  -ftls-model=@var{model} @gol
1164 -fstack-reuse=@var{reuse_level} @gol
1165 -ftrapv  -fwrapv  -fbounds-check @gol
1166 -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @gol
1167 -fstrict-volatile-bitfields -fsync-libcalls}
1168 @end table
1169
1170
1171 @node Overall Options
1172 @section Options Controlling the Kind of Output
1173
1174 Compilation can involve up to four stages: preprocessing, compilation
1175 proper, assembly and linking, always in that order.  GCC is capable of
1176 preprocessing and compiling several files either into several
1177 assembler input files, or into one assembler input file; then each
1178 assembler input file produces an object file, and linking combines all
1179 the object files (those newly compiled, and those specified as input)
1180 into an executable file.
1181
1182 @cindex file name suffix
1183 For any given input file, the file name suffix determines what kind of
1184 compilation is done:
1185
1186 @table @gcctabopt
1187 @item @var{file}.c
1188 C source code that must be preprocessed.
1189
1190 @item @var{file}.i
1191 C source code that should not be preprocessed.
1192
1193 @item @var{file}.ii
1194 C++ source code that should not be preprocessed.
1195
1196 @item @var{file}.m
1197 Objective-C source code.  Note that you must link with the @file{libobjc}
1198 library to make an Objective-C program work.
1199
1200 @item @var{file}.mi
1201 Objective-C source code that should not be preprocessed.
1202
1203 @item @var{file}.mm
1204 @itemx @var{file}.M
1205 Objective-C++ source code.  Note that you must link with the @file{libobjc}
1206 library to make an Objective-C++ program work.  Note that @samp{.M} refers
1207 to a literal capital M@.
1208
1209 @item @var{file}.mii
1210 Objective-C++ source code that should not be preprocessed.
1211
1212 @item @var{file}.h
1213 C, C++, Objective-C or Objective-C++ header file to be turned into a
1214 precompiled header (default), or C, C++ header file to be turned into an
1215 Ada spec (via the @option{-fdump-ada-spec} switch).
1216
1217 @item @var{file}.cc
1218 @itemx @var{file}.cp
1219 @itemx @var{file}.cxx
1220 @itemx @var{file}.cpp
1221 @itemx @var{file}.CPP
1222 @itemx @var{file}.c++
1223 @itemx @var{file}.C
1224 C++ source code that must be preprocessed.  Note that in @samp{.cxx},
1225 the last two letters must both be literally @samp{x}.  Likewise,
1226 @samp{.C} refers to a literal capital C@.
1227
1228 @item @var{file}.mm
1229 @itemx @var{file}.M
1230 Objective-C++ source code that must be preprocessed.
1231
1232 @item @var{file}.mii
1233 Objective-C++ source code that should not be preprocessed.
1234
1235 @item @var{file}.hh
1236 @itemx @var{file}.H
1237 @itemx @var{file}.hp
1238 @itemx @var{file}.hxx
1239 @itemx @var{file}.hpp
1240 @itemx @var{file}.HPP
1241 @itemx @var{file}.h++
1242 @itemx @var{file}.tcc
1243 C++ header file to be turned into a precompiled header or Ada spec.
1244
1245 @item @var{file}.f
1246 @itemx @var{file}.for
1247 @itemx @var{file}.ftn
1248 Fixed form Fortran source code that should not be preprocessed.
1249
1250 @item @var{file}.F
1251 @itemx @var{file}.FOR
1252 @itemx @var{file}.fpp
1253 @itemx @var{file}.FPP
1254 @itemx @var{file}.FTN
1255 Fixed form Fortran source code that must be preprocessed (with the traditional
1256 preprocessor).
1257
1258 @item @var{file}.f90
1259 @itemx @var{file}.f95
1260 @itemx @var{file}.f03
1261 @itemx @var{file}.f08
1262 Free form Fortran source code that should not be preprocessed.
1263
1264 @item @var{file}.F90
1265 @itemx @var{file}.F95
1266 @itemx @var{file}.F03
1267 @itemx @var{file}.F08
1268 Free form Fortran source code that must be preprocessed (with the
1269 traditional preprocessor).
1270
1271 @item @var{file}.go
1272 Go source code.
1273
1274 @c FIXME: Descriptions of Java file types.
1275 @c @var{file}.java
1276 @c @var{file}.class
1277 @c @var{file}.zip
1278 @c @var{file}.jar
1279
1280 @item @var{file}.ads
1281 Ada source code file that contains a library unit declaration (a
1282 declaration of a package, subprogram, or generic, or a generic
1283 instantiation), or a library unit renaming declaration (a package,
1284 generic, or subprogram renaming declaration).  Such files are also
1285 called @dfn{specs}.
1286
1287 @item @var{file}.adb
1288 Ada source code file containing a library unit body (a subprogram or
1289 package body).  Such files are also called @dfn{bodies}.
1290
1291 @c GCC also knows about some suffixes for languages not yet included:
1292 @c Pascal:
1293 @c @var{file}.p
1294 @c @var{file}.pas
1295 @c Ratfor:
1296 @c @var{file}.r
1297
1298 @item @var{file}.s
1299 Assembler code.
1300
1301 @item @var{file}.S
1302 @itemx @var{file}.sx
1303 Assembler code that must be preprocessed.
1304
1305 @item @var{other}
1306 An object file to be fed straight into linking.
1307 Any file name with no recognized suffix is treated this way.
1308 @end table
1309
1310 @opindex x
1311 You can specify the input language explicitly with the @option{-x} option:
1312
1313 @table @gcctabopt
1314 @item -x @var{language}
1315 Specify explicitly the @var{language} for the following input files
1316 (rather than letting the compiler choose a default based on the file
1317 name suffix).  This option applies to all following input files until
1318 the next @option{-x} option.  Possible values for @var{language} are:
1319 @smallexample
1320 c  c-header  cpp-output
1321 c++  c++-header  c++-cpp-output
1322 objective-c  objective-c-header  objective-c-cpp-output
1323 objective-c++ objective-c++-header objective-c++-cpp-output
1324 assembler  assembler-with-cpp
1325 ada
1326 f77  f77-cpp-input f95  f95-cpp-input
1327 go
1328 java
1329 @end smallexample
1330
1331 @item -x none
1332 Turn off any specification of a language, so that subsequent files are
1333 handled according to their file name suffixes (as they are if @option{-x}
1334 has not been used at all).
1335
1336 @item -pass-exit-codes
1337 @opindex pass-exit-codes
1338 Normally the @command{gcc} program exits with the code of 1 if any
1339 phase of the compiler returns a non-success return code.  If you specify
1340 @option{-pass-exit-codes}, the @command{gcc} program instead returns with
1341 the numerically highest error produced by any phase returning an error
1342 indication.  The C, C++, and Fortran front ends return 4 if an internal
1343 compiler error is encountered.
1344 @end table
1345
1346 If you only want some of the stages of compilation, you can use
1347 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1348 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1349 @command{gcc} is to stop.  Note that some combinations (for example,
1350 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1351
1352 @table @gcctabopt
1353 @item -c
1354 @opindex c
1355 Compile or assemble the source files, but do not link.  The linking
1356 stage simply is not done.  The ultimate output is in the form of an
1357 object file for each source file.
1358
1359 By default, the object file name for a source file is made by replacing
1360 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1361
1362 Unrecognized input files, not requiring compilation or assembly, are
1363 ignored.
1364
1365 @item -S
1366 @opindex S
1367 Stop after the stage of compilation proper; do not assemble.  The output
1368 is in the form of an assembler code file for each non-assembler input
1369 file specified.
1370
1371 By default, the assembler file name for a source file is made by
1372 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1373
1374 Input files that don't require compilation are ignored.
1375
1376 @item -E
1377 @opindex E
1378 Stop after the preprocessing stage; do not run the compiler proper.  The
1379 output is in the form of preprocessed source code, which is sent to the
1380 standard output.
1381
1382 Input files that don't require preprocessing are ignored.
1383
1384 @cindex output file option
1385 @item -o @var{file}
1386 @opindex o
1387 Place output in file @var{file}.  This applies to whatever
1388 sort of output is being produced, whether it be an executable file,
1389 an object file, an assembler file or preprocessed C code.
1390
1391 If @option{-o} is not specified, the default is to put an executable
1392 file in @file{a.out}, the object file for
1393 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1394 assembler file in @file{@var{source}.s}, a precompiled header file in
1395 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1396 standard output.
1397
1398 @item -v
1399 @opindex v
1400 Print (on standard error output) the commands executed to run the stages
1401 of compilation.  Also print the version number of the compiler driver
1402 program and of the preprocessor and the compiler proper.
1403
1404 @item -###
1405 @opindex ###
1406 Like @option{-v} except the commands are not executed and arguments
1407 are quoted unless they contain only alphanumeric characters or @code{./-_}.
1408 This is useful for shell scripts to capture the driver-generated command lines.
1409
1410 @item -pipe
1411 @opindex pipe
1412 Use pipes rather than temporary files for communication between the
1413 various stages of compilation.  This fails to work on some systems where
1414 the assembler is unable to read from a pipe; but the GNU assembler has
1415 no trouble.
1416
1417 @item --help
1418 @opindex help
1419 Print (on the standard output) a description of the command-line options
1420 understood by @command{gcc}.  If the @option{-v} option is also specified
1421 then @option{--help} is also passed on to the various processes
1422 invoked by @command{gcc}, so that they can display the command-line options
1423 they accept.  If the @option{-Wextra} option has also been specified
1424 (prior to the @option{--help} option), then command-line options that
1425 have no documentation associated with them are also displayed.
1426
1427 @item --target-help
1428 @opindex target-help
1429 Print (on the standard output) a description of target-specific command-line
1430 options for each tool.  For some targets extra target-specific
1431 information may also be printed.
1432
1433 @item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1434 Print (on the standard output) a description of the command-line
1435 options understood by the compiler that fit into all specified classes
1436 and qualifiers.  These are the supported classes:
1437
1438 @table @asis
1439 @item @samp{optimizers}
1440 Display all of the optimization options supported by the
1441 compiler.
1442
1443 @item @samp{warnings}
1444 Display all of the options controlling warning messages
1445 produced by the compiler.
1446
1447 @item @samp{target}
1448 Display target-specific options.  Unlike the
1449 @option{--target-help} option however, target-specific options of the
1450 linker and assembler are not displayed.  This is because those
1451 tools do not currently support the extended @option{--help=} syntax.
1452
1453 @item @samp{params}
1454 Display the values recognized by the @option{--param}
1455 option.
1456
1457 @item @var{language}
1458 Display the options supported for @var{language}, where
1459 @var{language} is the name of one of the languages supported in this
1460 version of GCC@.
1461
1462 @item @samp{common}
1463 Display the options that are common to all languages.
1464 @end table
1465
1466 These are the supported qualifiers:
1467
1468 @table @asis
1469 @item @samp{undocumented}
1470 Display only those options that are undocumented.
1471
1472 @item @samp{joined}
1473 Display options taking an argument that appears after an equal
1474 sign in the same continuous piece of text, such as:
1475 @samp{--help=target}.
1476
1477 @item @samp{separate}
1478 Display options taking an argument that appears as a separate word
1479 following the original option, such as: @samp{-o output-file}.
1480 @end table
1481
1482 Thus for example to display all the undocumented target-specific
1483 switches supported by the compiler, use:
1484
1485 @smallexample
1486 --help=target,undocumented
1487 @end smallexample
1488
1489 The sense of a qualifier can be inverted by prefixing it with the
1490 @samp{^} character, so for example to display all binary warning
1491 options (i.e., ones that are either on or off and that do not take an
1492 argument) that have a description, use:
1493
1494 @smallexample
1495 --help=warnings,^joined,^undocumented
1496 @end smallexample
1497
1498 The argument to @option{--help=} should not consist solely of inverted
1499 qualifiers.
1500
1501 Combining several classes is possible, although this usually
1502 restricts the output so much that there is nothing to display.  One
1503 case where it does work, however, is when one of the classes is
1504 @var{target}.  For example, to display all the target-specific
1505 optimization options, use:
1506
1507 @smallexample
1508 --help=target,optimizers
1509 @end smallexample
1510
1511 The @option{--help=} option can be repeated on the command line.  Each
1512 successive use displays its requested class of options, skipping
1513 those that have already been displayed.
1514
1515 If the @option{-Q} option appears on the command line before the
1516 @option{--help=} option, then the descriptive text displayed by
1517 @option{--help=} is changed.  Instead of describing the displayed
1518 options, an indication is given as to whether the option is enabled,
1519 disabled or set to a specific value (assuming that the compiler
1520 knows this at the point where the @option{--help=} option is used).
1521
1522 Here is a truncated example from the ARM port of @command{gcc}:
1523
1524 @smallexample
1525   % gcc -Q -mabi=2 --help=target -c
1526   The following options are target specific:
1527   -mabi=                                2
1528   -mabort-on-noreturn                   [disabled]
1529   -mapcs                                [disabled]
1530 @end smallexample
1531
1532 The output is sensitive to the effects of previous command-line
1533 options, so for example it is possible to find out which optimizations
1534 are enabled at @option{-O2} by using:
1535
1536 @smallexample
1537 -Q -O2 --help=optimizers
1538 @end smallexample
1539
1540 Alternatively you can discover which binary optimizations are enabled
1541 by @option{-O3} by using:
1542
1543 @smallexample
1544 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1545 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1546 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1547 @end smallexample
1548
1549 @item -no-canonical-prefixes
1550 @opindex no-canonical-prefixes
1551 Do not expand any symbolic links, resolve references to @samp{/../}
1552 or @samp{/./}, or make the path absolute when generating a relative
1553 prefix.
1554
1555 @item --version
1556 @opindex version
1557 Display the version number and copyrights of the invoked GCC@.
1558
1559 @item -wrapper
1560 @opindex wrapper
1561 Invoke all subcommands under a wrapper program.  The name of the
1562 wrapper program and its parameters are passed as a comma separated
1563 list.
1564
1565 @smallexample
1566 gcc -c t.c -wrapper gdb,--args
1567 @end smallexample
1568
1569 @noindent
1570 This invokes all subprograms of @command{gcc} under
1571 @samp{gdb --args}, thus the invocation of @command{cc1} is
1572 @samp{gdb --args cc1 @dots{}}.
1573
1574 @item -fplugin=@var{name}.so
1575 @opindex fplugin
1576 Load the plugin code in file @var{name}.so, assumed to be a
1577 shared object to be dlopen'd by the compiler.  The base name of
1578 the shared object file is used to identify the plugin for the
1579 purposes of argument parsing (See
1580 @option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1581 Each plugin should define the callback functions specified in the
1582 Plugins API.
1583
1584 @item -fplugin-arg-@var{name}-@var{key}=@var{value}
1585 @opindex fplugin-arg
1586 Define an argument called @var{key} with a value of @var{value}
1587 for the plugin called @var{name}.
1588
1589 @item -fdump-ada-spec@r{[}-slim@r{]}
1590 @opindex fdump-ada-spec
1591 For C and C++ source and include files, generate corresponding Ada specs.
1592 @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
1593 GNAT User's Guide}, which provides detailed documentation on this feature.
1594
1595 @item -fada-spec-parent=@var{unit}
1596 @opindex fada-spec-parent
1597 In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
1598 Ada specs as child units of parent @var{unit}.
1599
1600 @item -fdump-go-spec=@var{file}
1601 @opindex fdump-go-spec
1602 For input files in any language, generate corresponding Go
1603 declarations in @var{file}.  This generates Go @code{const},
1604 @code{type}, @code{var}, and @code{func} declarations which may be a
1605 useful way to start writing a Go interface to code written in some
1606 other language.
1607
1608 @include @value{srcdir}/../libiberty/at-file.texi
1609 @end table
1610
1611 @node Invoking G++
1612 @section Compiling C++ Programs
1613
1614 @cindex suffixes for C++ source
1615 @cindex C++ source file suffixes
1616 C++ source files conventionally use one of the suffixes @samp{.C},
1617 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1618 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1619 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1620 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1621 files with these names and compiles them as C++ programs even if you
1622 call the compiler the same way as for compiling C programs (usually
1623 with the name @command{gcc}).
1624
1625 @findex g++
1626 @findex c++
1627 However, the use of @command{gcc} does not add the C++ library.
1628 @command{g++} is a program that calls GCC and automatically specifies linking
1629 against the C++ library.  It treats @samp{.c},
1630 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1631 files unless @option{-x} is used.  This program is also useful when
1632 precompiling a C header file with a @samp{.h} extension for use in C++
1633 compilations.  On many systems, @command{g++} is also installed with
1634 the name @command{c++}.
1635
1636 @cindex invoking @command{g++}
1637 When you compile C++ programs, you may specify many of the same
1638 command-line options that you use for compiling programs in any
1639 language; or command-line options meaningful for C and related
1640 languages; or options that are meaningful only for C++ programs.
1641 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1642 explanations of options for languages related to C@.
1643 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1644 explanations of options that are meaningful only for C++ programs.
1645
1646 @node C Dialect Options
1647 @section Options Controlling C Dialect
1648 @cindex dialect options
1649 @cindex language dialect options
1650 @cindex options, dialect
1651
1652 The following options control the dialect of C (or languages derived
1653 from C, such as C++, Objective-C and Objective-C++) that the compiler
1654 accepts:
1655
1656 @table @gcctabopt
1657 @cindex ANSI support
1658 @cindex ISO support
1659 @item -ansi
1660 @opindex ansi
1661 In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
1662 equivalent to @option{-std=c++98}.
1663
1664 This turns off certain features of GCC that are incompatible with ISO
1665 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1666 such as the @code{asm} and @code{typeof} keywords, and
1667 predefined macros such as @code{unix} and @code{vax} that identify the
1668 type of system you are using.  It also enables the undesirable and
1669 rarely used ISO trigraph feature.  For the C compiler,
1670 it disables recognition of C++ style @samp{//} comments as well as
1671 the @code{inline} keyword.
1672
1673 The alternate keywords @code{__asm__}, @code{__extension__},
1674 @code{__inline__} and @code{__typeof__} continue to work despite
1675 @option{-ansi}.  You would not want to use them in an ISO C program, of
1676 course, but it is useful to put them in header files that might be included
1677 in compilations done with @option{-ansi}.  Alternate predefined macros
1678 such as @code{__unix__} and @code{__vax__} are also available, with or
1679 without @option{-ansi}.
1680
1681 The @option{-ansi} option does not cause non-ISO programs to be
1682 rejected gratuitously.  For that, @option{-Wpedantic} is required in
1683 addition to @option{-ansi}.  @xref{Warning Options}.
1684
1685 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1686 option is used.  Some header files may notice this macro and refrain
1687 from declaring certain functions or defining certain macros that the
1688 ISO standard doesn't call for; this is to avoid interfering with any
1689 programs that might use these names for other things.
1690
1691 Functions that are normally built in but do not have semantics
1692 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1693 functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1694 built-in functions provided by GCC}, for details of the functions
1695 affected.
1696
1697 @item -std=
1698 @opindex std
1699 Determine the language standard. @xref{Standards,,Language Standards
1700 Supported by GCC}, for details of these standard versions.  This option
1701 is currently only supported when compiling C or C++.
1702
1703 The compiler can accept several base standards, such as @samp{c90} or
1704 @samp{c++98}, and GNU dialects of those standards, such as
1705 @samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
1706 compiler accepts all programs following that standard plus those
1707 using GNU extensions that do not contradict it.  For example,
1708 @option{-std=c90} turns off certain features of GCC that are
1709 incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1710 keywords, but not other GNU extensions that do not have a meaning in
1711 ISO C90, such as omitting the middle term of a @code{?:}
1712 expression. On the other hand, when a GNU dialect of a standard is
1713 specified, all features supported by the compiler are enabled, even when
1714 those features change the meaning of the base standard.  As a result, some
1715 strict-conforming programs may be rejected.  The particular standard
1716 is used by @option{-Wpedantic} to identify which features are GNU
1717 extensions given that version of the standard. For example
1718 @option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
1719 comments, while @option{-std=gnu99 -Wpedantic} does not.
1720
1721 A value for this option must be provided; possible values are
1722
1723 @table @samp
1724 @item c90
1725 @itemx c89
1726 @itemx iso9899:1990
1727 Support all ISO C90 programs (certain GNU extensions that conflict
1728 with ISO C90 are disabled). Same as @option{-ansi} for C code.
1729
1730 @item iso9899:199409
1731 ISO C90 as modified in amendment 1.
1732
1733 @item c99
1734 @itemx c9x
1735 @itemx iso9899:1999
1736 @itemx iso9899:199x
1737 ISO C99.  This standard is substantially completely supported, modulo
1738 bugs and floating-point issues
1739 (mainly but not entirely relating to optional C99 features from
1740 Annexes F and G).  See
1741 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1742 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1743
1744 @item c11
1745 @itemx c1x
1746 @itemx iso9899:2011
1747 ISO C11, the 2011 revision of the ISO C standard.  This standard is
1748 substantially completely supported, modulo bugs, floating-point issues
1749 (mainly but not entirely relating to optional C11 features from
1750 Annexes F and G) and the optional Annexes K (Bounds-checking
1751 interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.
1752
1753 @item gnu90
1754 @itemx gnu89
1755 GNU dialect of ISO C90 (including some C99 features).
1756
1757 @item gnu99
1758 @itemx gnu9x
1759 GNU dialect of ISO C99.  The name @samp{gnu9x} is deprecated.
1760
1761 @item gnu11
1762 @itemx gnu1x
1763 GNU dialect of ISO C11.  This is the default for C code.
1764 The name @samp{gnu1x} is deprecated.
1765
1766 @item c++98
1767 @itemx c++03
1768 The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
1769 additional defect reports. Same as @option{-ansi} for C++ code.
1770
1771 @item gnu++98
1772 @itemx gnu++03
1773 GNU dialect of @option{-std=c++98}.  This is the default for
1774 C++ code.
1775
1776 @item c++11
1777 @itemx c++0x
1778 The 2011 ISO C++ standard plus amendments.
1779 The name @samp{c++0x} is deprecated.
1780
1781 @item gnu++11
1782 @itemx gnu++0x
1783 GNU dialect of @option{-std=c++11}.
1784 The name @samp{gnu++0x} is deprecated.
1785
1786 @item c++14
1787 @itemx c++1y
1788 The 2014 ISO C++ standard plus amendments.
1789 The name @samp{c++1y} is deprecated.
1790
1791 @item gnu++14
1792 @itemx gnu++1y
1793 GNU dialect of @option{-std=c++14}.
1794 The name @samp{gnu++1y} is deprecated.
1795
1796 @item c++1z
1797 The next revision of the ISO C++ standard, tentatively planned for
1798 2017.  Support is highly experimental, and will almost certainly
1799 change in incompatible ways in future releases.
1800
1801 @item gnu++1z
1802 GNU dialect of @option{-std=c++1z}.  Support is highly experimental,
1803 and will almost certainly change in incompatible ways in future
1804 releases.
1805 @end table
1806
1807 @item -fgnu89-inline
1808 @opindex fgnu89-inline
1809 The option @option{-fgnu89-inline} tells GCC to use the traditional
1810 GNU semantics for @code{inline} functions when in C99 mode.
1811 @xref{Inline,,An Inline Function is As Fast As a Macro}.
1812 Using this option is roughly equivalent to adding the
1813 @code{gnu_inline} function attribute to all inline functions
1814 (@pxref{Function Attributes}).
1815
1816 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1817 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1818 specifies the default behavior).
1819 This option is not supported in @option{-std=c90} or
1820 @option{-std=gnu90} mode.
1821
1822 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1823 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1824 in effect for @code{inline} functions.  @xref{Common Predefined
1825 Macros,,,cpp,The C Preprocessor}.
1826
1827 @item -aux-info @var{filename}
1828 @opindex aux-info
1829 Output to the given filename prototyped declarations for all functions
1830 declared and/or defined in a translation unit, including those in header
1831 files.  This option is silently ignored in any language other than C@.
1832
1833 Besides declarations, the file indicates, in comments, the origin of
1834 each declaration (source file and line), whether the declaration was
1835 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1836 @samp{O} for old, respectively, in the first character after the line
1837 number and the colon), and whether it came from a declaration or a
1838 definition (@samp{C} or @samp{F}, respectively, in the following
1839 character).  In the case of function definitions, a K&R-style list of
1840 arguments followed by their declarations is also provided, inside
1841 comments, after the declaration.
1842
1843 @item -fallow-parameterless-variadic-functions
1844 @opindex fallow-parameterless-variadic-functions
1845 Accept variadic functions without named parameters.
1846
1847 Although it is possible to define such a function, this is not very
1848 useful as it is not possible to read the arguments.  This is only
1849 supported for C as this construct is allowed by C++.
1850
1851 @item -fno-asm
1852 @opindex fno-asm
1853 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1854 keyword, so that code can use these words as identifiers.  You can use
1855 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1856 instead.  @option{-ansi} implies @option{-fno-asm}.
1857
1858 In C++, this switch only affects the @code{typeof} keyword, since
1859 @code{asm} and @code{inline} are standard keywords.  You may want to
1860 use the @option{-fno-gnu-keywords} flag instead, which has the same
1861 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1862 switch only affects the @code{asm} and @code{typeof} keywords, since
1863 @code{inline} is a standard keyword in ISO C99.
1864
1865 @item -fno-builtin
1866 @itemx -fno-builtin-@var{function}
1867 @opindex fno-builtin
1868 @cindex built-in functions
1869 Don't recognize built-in functions that do not begin with
1870 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1871 functions provided by GCC}, for details of the functions affected,
1872 including those which are not built-in functions when @option{-ansi} or
1873 @option{-std} options for strict ISO C conformance are used because they
1874 do not have an ISO standard meaning.
1875
1876 GCC normally generates special code to handle certain built-in functions
1877 more efficiently; for instance, calls to @code{alloca} may become single
1878 instructions which adjust the stack directly, and calls to @code{memcpy}
1879 may become inline copy loops.  The resulting code is often both smaller
1880 and faster, but since the function calls no longer appear as such, you
1881 cannot set a breakpoint on those calls, nor can you change the behavior
1882 of the functions by linking with a different library.  In addition,
1883 when a function is recognized as a built-in function, GCC may use
1884 information about that function to warn about problems with calls to
1885 that function, or to generate more efficient code, even if the
1886 resulting code still contains calls to that function.  For example,
1887 warnings are given with @option{-Wformat} for bad calls to
1888 @code{printf} when @code{printf} is built in and @code{strlen} is
1889 known not to modify global memory.
1890
1891 With the @option{-fno-builtin-@var{function}} option
1892 only the built-in function @var{function} is
1893 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1894 function is named that is not built-in in this version of GCC, this
1895 option is ignored.  There is no corresponding
1896 @option{-fbuiltin-@var{function}} option; if you wish to enable
1897 built-in functions selectively when using @option{-fno-builtin} or
1898 @option{-ffreestanding}, you may define macros such as:
1899
1900 @smallexample
1901 #define abs(n)          __builtin_abs ((n))
1902 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1903 @end smallexample
1904
1905 @item -fhosted
1906 @opindex fhosted
1907 @cindex hosted environment
1908
1909 Assert that compilation targets a hosted environment.  This implies
1910 @option{-fbuiltin}.  A hosted environment is one in which the
1911 entire standard library is available, and in which @code{main} has a return
1912 type of @code{int}.  Examples are nearly everything except a kernel.
1913 This is equivalent to @option{-fno-freestanding}.
1914
1915 @item -ffreestanding
1916 @opindex ffreestanding
1917 @cindex hosted environment
1918
1919 Assert that compilation targets a freestanding environment.  This
1920 implies @option{-fno-builtin}.  A freestanding environment
1921 is one in which the standard library may not exist, and program startup may
1922 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1923 This is equivalent to @option{-fno-hosted}.
1924
1925 @xref{Standards,,Language Standards Supported by GCC}, for details of
1926 freestanding and hosted environments.
1927
1928 @item -fopenacc
1929 @opindex fopenacc
1930 @cindex OpenACC accelerator programming
1931 Enable handling of OpenACC directives @code{#pragma acc} in C/C++ and
1932 @code{!$acc} in Fortran.  When @option{-fopenacc} is specified, the
1933 compiler generates accelerated code according to the OpenACC Application
1934 Programming Interface v2.0 @w{@uref{http://www.openacc.org/}}.  This option
1935 implies @option{-pthread}, and thus is only supported on targets that
1936 have support for @option{-pthread}.
1937
1938 Note that this is an experimental feature, incomplete, and subject to
1939 change in future versions of GCC.  See
1940 @w{@uref{https://gcc.gnu.org/wiki/OpenACC}} for more information.
1941
1942 @item -fopenmp
1943 @opindex fopenmp
1944 @cindex OpenMP parallel
1945 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1946 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1947 compiler generates parallel code according to the OpenMP Application
1948 Program Interface v4.0 @w{@uref{http://www.openmp.org/}}.  This option
1949 implies @option{-pthread}, and thus is only supported on targets that
1950 have support for @option{-pthread}. @option{-fopenmp} implies
1951 @option{-fopenmp-simd}.
1952
1953 @item -fopenmp-simd
1954 @opindex fopenmp-simd
1955 @cindex OpenMP SIMD
1956 @cindex SIMD
1957 Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
1958 in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
1959 are ignored.
1960
1961 @item -fcilkplus
1962 @opindex fcilkplus
1963 @cindex Enable Cilk Plus
1964 Enable the usage of Cilk Plus language extension features for C/C++.
1965 When the option @option{-fcilkplus} is specified, enable the usage of
1966 the Cilk Plus Language extension features for C/C++.  The present
1967 implementation follows ABI version 1.2.  This is an experimental
1968 feature that is only partially complete, and whose interface may
1969 change in future versions of GCC as the official specification
1970 changes.  Currently, all features but @code{_Cilk_for} have been
1971 implemented.
1972
1973 @item -fgnu-tm
1974 @opindex fgnu-tm
1975 When the option @option{-fgnu-tm} is specified, the compiler
1976 generates code for the Linux variant of Intel's current Transactional
1977 Memory ABI specification document (Revision 1.1, May 6 2009).  This is
1978 an experimental feature whose interface may change in future versions
1979 of GCC, as the official specification changes.  Please note that not
1980 all architectures are supported for this feature.
1981
1982 For more information on GCC's support for transactional memory,
1983 @xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
1984 Transactional Memory Library}.
1985
1986 Note that the transactional memory feature is not supported with
1987 non-call exceptions (@option{-fnon-call-exceptions}).
1988
1989 @item -fms-extensions
1990 @opindex fms-extensions
1991 Accept some non-standard constructs used in Microsoft header files.
1992
1993 In C++ code, this allows member names in structures to be similar
1994 to previous types declarations.
1995
1996 @smallexample
1997 typedef int UOW;
1998 struct ABC @{
1999   UOW UOW;
2000 @};
2001 @end smallexample
2002
2003 Some cases of unnamed fields in structures and unions are only
2004 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
2005 fields within structs/unions}, for details.
2006
2007 Note that this option is off for all targets but x86 
2008 targets using ms-abi.
2009
2010 @item -fplan9-extensions
2011 @opindex fplan9-extensions
2012 Accept some non-standard constructs used in Plan 9 code.
2013
2014 This enables @option{-fms-extensions}, permits passing pointers to
2015 structures with anonymous fields to functions that expect pointers to
2016 elements of the type of the field, and permits referring to anonymous
2017 fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
2018 struct/union fields within structs/unions}, for details.  This is only
2019 supported for C, not C++.
2020
2021 @item -trigraphs
2022 @opindex trigraphs
2023 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
2024 options for strict ISO C conformance) implies @option{-trigraphs}.
2025
2026 @cindex traditional C language
2027 @cindex C language, traditional
2028 @item -traditional
2029 @itemx -traditional-cpp
2030 @opindex traditional-cpp
2031 @opindex traditional
2032 Formerly, these options caused GCC to attempt to emulate a pre-standard
2033 C compiler.  They are now only supported with the @option{-E} switch.
2034 The preprocessor continues to support a pre-standard mode.  See the GNU
2035 CPP manual for details.
2036
2037 @item -fcond-mismatch
2038 @opindex fcond-mismatch
2039 Allow conditional expressions with mismatched types in the second and
2040 third arguments.  The value of such an expression is void.  This option
2041 is not supported for C++.
2042
2043 @item -flax-vector-conversions
2044 @opindex flax-vector-conversions
2045 Allow implicit conversions between vectors with differing numbers of
2046 elements and/or incompatible element types.  This option should not be
2047 used for new code.
2048
2049 @item -funsigned-char
2050 @opindex funsigned-char
2051 Let the type @code{char} be unsigned, like @code{unsigned char}.
2052
2053 Each kind of machine has a default for what @code{char} should
2054 be.  It is either like @code{unsigned char} by default or like
2055 @code{signed char} by default.
2056
2057 Ideally, a portable program should always use @code{signed char} or
2058 @code{unsigned char} when it depends on the signedness of an object.
2059 But many programs have been written to use plain @code{char} and
2060 expect it to be signed, or expect it to be unsigned, depending on the
2061 machines they were written for.  This option, and its inverse, let you
2062 make such a program work with the opposite default.
2063
2064 The type @code{char} is always a distinct type from each of
2065 @code{signed char} or @code{unsigned char}, even though its behavior
2066 is always just like one of those two.
2067
2068 @item -fsigned-char
2069 @opindex fsigned-char
2070 Let the type @code{char} be signed, like @code{signed char}.
2071
2072 Note that this is equivalent to @option{-fno-unsigned-char}, which is
2073 the negative form of @option{-funsigned-char}.  Likewise, the option
2074 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
2075
2076 @item -fsigned-bitfields
2077 @itemx -funsigned-bitfields
2078 @itemx -fno-signed-bitfields
2079 @itemx -fno-unsigned-bitfields
2080 @opindex fsigned-bitfields
2081 @opindex funsigned-bitfields
2082 @opindex fno-signed-bitfields
2083 @opindex fno-unsigned-bitfields
2084 These options control whether a bit-field is signed or unsigned, when the
2085 declaration does not use either @code{signed} or @code{unsigned}.  By
2086 default, such a bit-field is signed, because this is consistent: the
2087 basic integer types such as @code{int} are signed types.
2088
2089 @item -fsso-struct=@var{endianness}
2090 @opindex fsso-struct
2091 Set the default scalar storage order of structures and unions to the
2092 specified endianness.  The accepted values are @samp{big-endian} and
2093 @samp{little-endian}.  If the option is not passed, the compiler uses
2094 the native endianness of the target.  This option is not supported for C++.
2095
2096 @strong{Warning:} the @option{-fsso-struct} switch causes GCC to generate
2097 code that is not binary compatible with code generated without it if the
2098 specified endianness is not the native endianness of the target.
2099 @end table
2100
2101 @node C++ Dialect Options
2102 @section Options Controlling C++ Dialect
2103
2104 @cindex compiler options, C++
2105 @cindex C++ options, command-line
2106 @cindex options, C++
2107 This section describes the command-line options that are only meaningful
2108 for C++ programs.  You can also use most of the GNU compiler options
2109 regardless of what language your program is in.  For example, you
2110 might compile a file @file{firstClass.C} like this:
2111
2112 @smallexample
2113 g++ -g -fstrict-enums -O -c firstClass.C
2114 @end smallexample
2115
2116 @noindent
2117 In this example, only @option{-fstrict-enums} is an option meant
2118 only for C++ programs; you can use the other options with any
2119 language supported by GCC@.
2120
2121 Here is a list of options that are @emph{only} for compiling C++ programs:
2122
2123 @table @gcctabopt
2124
2125 @item -fabi-version=@var{n}
2126 @opindex fabi-version
2127 Use version @var{n} of the C++ ABI@.  The default is version 0.
2128
2129 Version 0 refers to the version conforming most closely to
2130 the C++ ABI specification.  Therefore, the ABI obtained using version 0
2131 will change in different versions of G++ as ABI bugs are fixed.
2132
2133 Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.
2134
2135 Version 2 is the version of the C++ ABI that first appeared in G++
2136 3.4, and was the default through G++ 4.9.
2137
2138 Version 3 corrects an error in mangling a constant address as a
2139 template argument.
2140
2141 Version 4, which first appeared in G++ 4.5, implements a standard
2142 mangling for vector types.
2143
2144 Version 5, which first appeared in G++ 4.6, corrects the mangling of
2145 attribute const/volatile on function pointer types, decltype of a
2146 plain decl, and use of a function parameter in the declaration of
2147 another parameter.
2148
2149 Version 6, which first appeared in G++ 4.7, corrects the promotion
2150 behavior of C++11 scoped enums and the mangling of template argument
2151 packs, const/static_cast, prefix ++ and --, and a class scope function
2152 used as a template argument.
2153
2154 Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
2155 builtin type and corrects the mangling of lambdas in default argument
2156 scope.
2157
2158 Version 8, which first appeared in G++ 4.9, corrects the substitution
2159 behavior of function types with function-cv-qualifiers.
2160
2161 Version 9, which first appeared in G++ 5.2, corrects the alignment of
2162 @code{nullptr_t}.
2163
2164 Version 10, which first appeared in G++ 6.1, adds mangling of
2165 attributes that affect type identity, such as ia32 calling convention
2166 attributes (e.g. @samp{stdcall}).
2167
2168 See also @option{-Wabi}.
2169
2170 @item -fabi-compat-version=@var{n}
2171 @opindex fabi-compat-version
2172 On targets that support strong aliases, G++
2173 works around mangling changes by creating an alias with the correct
2174 mangled name when defining a symbol with an incorrect mangled name.
2175 This switch specifies which ABI version to use for the alias.
2176
2177 With @option{-fabi-version=0} (the default), this defaults to 8 (GCC 5
2178 compatibility).  If another ABI version is explicitly selected, this
2179 defaults to 0.  For compatibility with GCC versions 3.2 through 4.9,
2180 use @option{-fabi-compat-version=2}.
2181
2182 If this option is not provided but @option{-Wabi=@var{n}} is, that
2183 version is used for compatibility aliases.  If this option is provided
2184 along with @option{-Wabi} (without the version), the version from this
2185 option is used for the warning.
2186
2187 @item -fno-access-control
2188 @opindex fno-access-control
2189 Turn off all access checking.  This switch is mainly useful for working
2190 around bugs in the access control code.
2191
2192 @item -fcheck-new
2193 @opindex fcheck-new
2194 Check that the pointer returned by @code{operator new} is non-null
2195 before attempting to modify the storage allocated.  This check is
2196 normally unnecessary because the C++ standard specifies that
2197 @code{operator new} only returns @code{0} if it is declared
2198 @code{throw()}, in which case the compiler always checks the
2199 return value even without this option.  In all other cases, when
2200 @code{operator new} has a non-empty exception specification, memory
2201 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
2202 @samp{new (nothrow)}.
2203
2204 @item -fconstexpr-depth=@var{n}
2205 @opindex fconstexpr-depth
2206 Set the maximum nested evaluation depth for C++11 constexpr functions
2207 to @var{n}.  A limit is needed to detect endless recursion during
2208 constant expression evaluation.  The minimum specified by the standard
2209 is 512.
2210
2211 @item -fdeduce-init-list
2212 @opindex fdeduce-init-list
2213 Enable deduction of a template type parameter as
2214 @code{std::initializer_list} from a brace-enclosed initializer list, i.e.@:
2215
2216 @smallexample
2217 template <class T> auto forward(T t) -> decltype (realfn (t))
2218 @{
2219   return realfn (t);
2220 @}
2221
2222 void f()
2223 @{
2224   forward(@{1,2@}); // call forward<std::initializer_list<int>>
2225 @}
2226 @end smallexample
2227
2228 This deduction was implemented as a possible extension to the
2229 originally proposed semantics for the C++11 standard, but was not part
2230 of the final standard, so it is disabled by default.  This option is
2231 deprecated, and may be removed in a future version of G++.
2232
2233 @item -ffriend-injection
2234 @opindex ffriend-injection
2235 Inject friend functions into the enclosing namespace, so that they are
2236 visible outside the scope of the class in which they are declared.
2237 Friend functions were documented to work this way in the old Annotated
2238 C++ Reference Manual.  
2239 However, in ISO C++ a friend function that is not declared
2240 in an enclosing scope can only be found using argument dependent
2241 lookup.  GCC defaults to the standard behavior.
2242
2243 This option is for compatibility, and may be removed in a future
2244 release of G++.
2245
2246 @item -fno-elide-constructors
2247 @opindex fno-elide-constructors
2248 The C++ standard allows an implementation to omit creating a temporary
2249 that is only used to initialize another object of the same type.
2250 Specifying this option disables that optimization, and forces G++ to
2251 call the copy constructor in all cases.
2252
2253 @item -fno-enforce-eh-specs
2254 @opindex fno-enforce-eh-specs
2255 Don't generate code to check for violation of exception specifications
2256 at run time.  This option violates the C++ standard, but may be useful
2257 for reducing code size in production builds, much like defining
2258 @code{NDEBUG}.  This does not give user code permission to throw
2259 exceptions in violation of the exception specifications; the compiler
2260 still optimizes based on the specifications, so throwing an
2261 unexpected exception results in undefined behavior at run time.
2262
2263 @item -fextern-tls-init
2264 @itemx -fno-extern-tls-init
2265 @opindex fextern-tls-init
2266 @opindex fno-extern-tls-init
2267 The C++11 and OpenMP standards allow @code{thread_local} and
2268 @code{threadprivate} variables to have dynamic (runtime)
2269 initialization.  To support this, any use of such a variable goes
2270 through a wrapper function that performs any necessary initialization.
2271 When the use and definition of the variable are in the same
2272 translation unit, this overhead can be optimized away, but when the
2273 use is in a different translation unit there is significant overhead
2274 even if the variable doesn't actually need dynamic initialization.  If
2275 the programmer can be sure that no use of the variable in a
2276 non-defining TU needs to trigger dynamic initialization (either
2277 because the variable is statically initialized, or a use of the
2278 variable in the defining TU will be executed before any uses in
2279 another TU), they can avoid this overhead with the
2280 @option{-fno-extern-tls-init} option.
2281
2282 On targets that support symbol aliases, the default is
2283 @option{-fextern-tls-init}.  On targets that do not support symbol
2284 aliases, the default is @option{-fno-extern-tls-init}.
2285
2286 @item -ffor-scope
2287 @itemx -fno-for-scope
2288 @opindex ffor-scope
2289 @opindex fno-for-scope
2290 If @option{-ffor-scope} is specified, the scope of variables declared in
2291 a @i{for-init-statement} is limited to the @code{for} loop itself,
2292 as specified by the C++ standard.
2293 If @option{-fno-for-scope} is specified, the scope of variables declared in
2294 a @i{for-init-statement} extends to the end of the enclosing scope,
2295 as was the case in old versions of G++, and other (traditional)
2296 implementations of C++.
2297
2298 If neither flag is given, the default is to follow the standard,
2299 but to allow and give a warning for old-style code that would
2300 otherwise be invalid, or have different behavior.
2301
2302 @item -fno-gnu-keywords
2303 @opindex fno-gnu-keywords
2304 Do not recognize @code{typeof} as a keyword, so that code can use this
2305 word as an identifier.  You can use the keyword @code{__typeof__} instead.
2306 @option{-ansi} implies @option{-fno-gnu-keywords}.
2307
2308 @item -fno-implicit-templates
2309 @opindex fno-implicit-templates
2310 Never emit code for non-inline templates that are instantiated
2311 implicitly (i.e.@: by use); only emit code for explicit instantiations.
2312 @xref{Template Instantiation}, for more information.
2313
2314 @item -fno-implicit-inline-templates
2315 @opindex fno-implicit-inline-templates
2316 Don't emit code for implicit instantiations of inline templates, either.
2317 The default is to handle inlines differently so that compiles with and
2318 without optimization need the same set of explicit instantiations.
2319
2320 @item -fno-implement-inlines
2321 @opindex fno-implement-inlines
2322 To save space, do not emit out-of-line copies of inline functions
2323 controlled by @code{#pragma implementation}.  This causes linker
2324 errors if these functions are not inlined everywhere they are called.
2325
2326 @item -fms-extensions
2327 @opindex fms-extensions
2328 Disable Wpedantic warnings about constructs used in MFC, such as implicit
2329 int and getting a pointer to member function via non-standard syntax.
2330
2331 @item -fno-nonansi-builtins
2332 @opindex fno-nonansi-builtins
2333 Disable built-in declarations of functions that are not mandated by
2334 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
2335 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
2336
2337 @item -fnothrow-opt
2338 @opindex fnothrow-opt
2339 Treat a @code{throw()} exception specification as if it were a
2340 @code{noexcept} specification to reduce or eliminate the text size
2341 overhead relative to a function with no exception specification.  If
2342 the function has local variables of types with non-trivial
2343 destructors, the exception specification actually makes the
2344 function smaller because the EH cleanups for those variables can be
2345 optimized away.  The semantic effect is that an exception thrown out of
2346 a function with such an exception specification results in a call
2347 to @code{terminate} rather than @code{unexpected}.
2348
2349 @item -fno-operator-names
2350 @opindex fno-operator-names
2351 Do not treat the operator name keywords @code{and}, @code{bitand},
2352 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
2353 synonyms as keywords.
2354
2355 @item -fno-optional-diags
2356 @opindex fno-optional-diags
2357 Disable diagnostics that the standard says a compiler does not need to
2358 issue.  Currently, the only such diagnostic issued by G++ is the one for
2359 a name having multiple meanings within a class.
2360
2361 @item -fpermissive
2362 @opindex fpermissive
2363 Downgrade some diagnostics about nonconformant code from errors to
2364 warnings.  Thus, using @option{-fpermissive} allows some
2365 nonconforming code to compile.
2366
2367 @item -fno-pretty-templates
2368 @opindex fno-pretty-templates
2369 When an error message refers to a specialization of a function
2370 template, the compiler normally prints the signature of the
2371 template followed by the template arguments and any typedefs or
2372 typenames in the signature (e.g. @code{void f(T) [with T = int]}
2373 rather than @code{void f(int)}) so that it's clear which template is
2374 involved.  When an error message refers to a specialization of a class
2375 template, the compiler omits any template arguments that match
2376 the default template arguments for that template.  If either of these
2377 behaviors make it harder to understand the error message rather than
2378 easier, you can use @option{-fno-pretty-templates} to disable them.
2379
2380 @item -frepo
2381 @opindex frepo
2382 Enable automatic template instantiation at link time.  This option also
2383 implies @option{-fno-implicit-templates}.  @xref{Template
2384 Instantiation}, for more information.
2385
2386 @item -fno-rtti
2387 @opindex fno-rtti
2388 Disable generation of information about every class with virtual
2389 functions for use by the C++ run-time type identification features
2390 (@code{dynamic_cast} and @code{typeid}).  If you don't use those parts
2391 of the language, you can save some space by using this flag.  Note that
2392 exception handling uses the same information, but G++ generates it as
2393 needed. The @code{dynamic_cast} operator can still be used for casts that
2394 do not require run-time type information, i.e.@: casts to @code{void *} or to
2395 unambiguous base classes.
2396
2397 @item -fsized-deallocation
2398 @opindex fsized-deallocation
2399 Enable the built-in global declarations
2400 @smallexample
2401 void operator delete (void *, std::size_t) noexcept;
2402 void operator delete[] (void *, std::size_t) noexcept;
2403 @end smallexample
2404 as introduced in C++14.  This is useful for user-defined replacement
2405 deallocation functions that, for example, use the size of the object
2406 to make deallocation faster.  Enabled by default under
2407 @option{-std=c++14} and above.  The flag @option{-Wsized-deallocation}
2408 warns about places that might want to add a definition.
2409
2410 @item -fstats
2411 @opindex fstats
2412 Emit statistics about front-end processing at the end of the compilation.
2413 This information is generally only useful to the G++ development team.
2414
2415 @item -fstrict-enums
2416 @opindex fstrict-enums
2417 Allow the compiler to optimize using the assumption that a value of
2418 enumerated type can only be one of the values of the enumeration (as
2419 defined in the C++ standard; basically, a value that can be
2420 represented in the minimum number of bits needed to represent all the
2421 enumerators).  This assumption may not be valid if the program uses a
2422 cast to convert an arbitrary integer value to the enumerated type.
2423
2424 @item -ftemplate-backtrace-limit=@var{n}
2425 @opindex ftemplate-backtrace-limit
2426 Set the maximum number of template instantiation notes for a single
2427 warning or error to @var{n}.  The default value is 10.
2428
2429 @item -ftemplate-depth=@var{n}
2430 @opindex ftemplate-depth
2431 Set the maximum instantiation depth for template classes to @var{n}.
2432 A limit on the template instantiation depth is needed to detect
2433 endless recursions during template class instantiation.  ANSI/ISO C++
2434 conforming programs must not rely on a maximum depth greater than 17
2435 (changed to 1024 in C++11).  The default value is 900, as the compiler
2436 can run out of stack space before hitting 1024 in some situations.
2437
2438 @item -fno-threadsafe-statics
2439 @opindex fno-threadsafe-statics
2440 Do not emit the extra code to use the routines specified in the C++
2441 ABI for thread-safe initialization of local statics.  You can use this
2442 option to reduce code size slightly in code that doesn't need to be
2443 thread-safe.
2444
2445 @item -fuse-cxa-atexit
2446 @opindex fuse-cxa-atexit
2447 Register destructors for objects with static storage duration with the
2448 @code{__cxa_atexit} function rather than the @code{atexit} function.
2449 This option is required for fully standards-compliant handling of static
2450 destructors, but only works if your C library supports
2451 @code{__cxa_atexit}.
2452
2453 @item -fno-use-cxa-get-exception-ptr
2454 @opindex fno-use-cxa-get-exception-ptr
2455 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2456 causes @code{std::uncaught_exception} to be incorrect, but is necessary
2457 if the runtime routine is not available.
2458
2459 @item -fvisibility-inlines-hidden
2460 @opindex fvisibility-inlines-hidden
2461 This switch declares that the user does not attempt to compare
2462 pointers to inline functions or methods where the addresses of the two functions
2463 are taken in different shared objects.
2464
2465 The effect of this is that GCC may, effectively, mark inline methods with
2466 @code{__attribute__ ((visibility ("hidden")))} so that they do not
2467 appear in the export table of a DSO and do not require a PLT indirection
2468 when used within the DSO@.  Enabling this option can have a dramatic effect
2469 on load and link times of a DSO as it massively reduces the size of the
2470 dynamic export table when the library makes heavy use of templates.
2471
2472 The behavior of this switch is not quite the same as marking the
2473 methods as hidden directly, because it does not affect static variables
2474 local to the function or cause the compiler to deduce that
2475 the function is defined in only one shared object.
2476
2477 You may mark a method as having a visibility explicitly to negate the
2478 effect of the switch for that method.  For example, if you do want to
2479 compare pointers to a particular inline method, you might mark it as
2480 having default visibility.  Marking the enclosing class with explicit
2481 visibility has no effect.
2482
2483 Explicitly instantiated inline methods are unaffected by this option
2484 as their linkage might otherwise cross a shared library boundary.
2485 @xref{Template Instantiation}.
2486
2487 @item -fvisibility-ms-compat
2488 @opindex fvisibility-ms-compat
2489 This flag attempts to use visibility settings to make GCC's C++
2490 linkage model compatible with that of Microsoft Visual Studio.
2491
2492 The flag makes these changes to GCC's linkage model:
2493
2494 @enumerate
2495 @item
2496 It sets the default visibility to @code{hidden}, like
2497 @option{-fvisibility=hidden}.
2498
2499 @item
2500 Types, but not their members, are not hidden by default.
2501
2502 @item
2503 The One Definition Rule is relaxed for types without explicit
2504 visibility specifications that are defined in more than one
2505 shared object: those declarations are permitted if they are
2506 permitted when this option is not used.
2507 @end enumerate
2508
2509 In new code it is better to use @option{-fvisibility=hidden} and
2510 export those classes that are intended to be externally visible.
2511 Unfortunately it is possible for code to rely, perhaps accidentally,
2512 on the Visual Studio behavior.
2513
2514 Among the consequences of these changes are that static data members
2515 of the same type with the same name but defined in different shared
2516 objects are different, so changing one does not change the other;
2517 and that pointers to function members defined in different shared
2518 objects may not compare equal.  When this flag is given, it is a
2519 violation of the ODR to define types with the same name differently.
2520
2521 @item -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]}
2522 @opindex fvtable-verify
2523 Turn on (or off, if using @option{-fvtable-verify=none}) the security
2524 feature that verifies at run time, for every virtual call, that
2525 the vtable pointer through which the call is made is valid for the type of
2526 the object, and has not been corrupted or overwritten.  If an invalid vtable
2527 pointer is detected at run time, an error is reported and execution of the
2528 program is immediately halted.
2529
2530 This option causes run-time data structures to be built at program startup,
2531 which are used for verifying the vtable pointers.  
2532 The options @samp{std} and @samp{preinit}
2533 control the timing of when these data structures are built.  In both cases the
2534 data structures are built before execution reaches @code{main}.  Using
2535 @option{-fvtable-verify=std} causes the data structures to be built after
2536 shared libraries have been loaded and initialized.
2537 @option{-fvtable-verify=preinit} causes them to be built before shared
2538 libraries have been loaded and initialized.
2539
2540 If this option appears multiple times in the command line with different
2541 values specified, @samp{none} takes highest priority over both @samp{std} and
2542 @samp{preinit}; @samp{preinit} takes priority over @samp{std}.
2543
2544 @item -fvtv-debug
2545 @opindex fvtv-debug
2546 When used in conjunction with @option{-fvtable-verify=std} or 
2547 @option{-fvtable-verify=preinit}, causes debug versions of the 
2548 runtime functions for the vtable verification feature to be called.  
2549 This flag also causes the compiler to log information about which 
2550 vtable pointers it finds for each class.
2551 This information is written to a file named @file{vtv_set_ptr_data.log} 
2552 in the directory named by the environment variable @env{VTV_LOGS_DIR} 
2553 if that is defined or the current working directory otherwise.
2554
2555 Note:  This feature @emph{appends} data to the log file. If you want a fresh log
2556 file, be sure to delete any existing one.
2557
2558 @item -fvtv-counts
2559 @opindex fvtv-counts
2560 This is a debugging flag.  When used in conjunction with
2561 @option{-fvtable-verify=std} or @option{-fvtable-verify=preinit}, this
2562 causes the compiler to keep track of the total number of virtual calls
2563 it encounters and the number of verifications it inserts.  It also
2564 counts the number of calls to certain run-time library functions
2565 that it inserts and logs this information for each compilation unit.
2566 The compiler writes this information to a file named
2567 @file{vtv_count_data.log} in the directory named by the environment
2568 variable @env{VTV_LOGS_DIR} if that is defined or the current working
2569 directory otherwise.  It also counts the size of the vtable pointer sets
2570 for each class, and writes this information to @file{vtv_class_set_sizes.log}
2571 in the same directory.
2572
2573 Note:  This feature @emph{appends} data to the log files.  To get fresh log
2574 files, be sure to delete any existing ones.
2575
2576 @item -fno-weak
2577 @opindex fno-weak
2578 Do not use weak symbol support, even if it is provided by the linker.
2579 By default, G++ uses weak symbols if they are available.  This
2580 option exists only for testing, and should not be used by end-users;
2581 it results in inferior code and has no benefits.  This option may
2582 be removed in a future release of G++.
2583
2584 @item -nostdinc++
2585 @opindex nostdinc++
2586 Do not search for header files in the standard directories specific to
2587 C++, but do still search the other standard directories.  (This option
2588 is used when building the C++ library.)
2589 @end table
2590
2591 In addition, these optimization, warning, and code generation options
2592 have meanings only for C++ programs:
2593
2594 @table @gcctabopt
2595 @item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2596 @opindex Wabi
2597 @opindex Wno-abi
2598 Warn when G++ it generates code that is probably not compatible with
2599 the vendor-neutral C++ ABI@.  Since G++ now defaults to updating the
2600 ABI with each major release, normally @option{-Wabi} will warn only if
2601 there is a check added later in a release series for an ABI issue
2602 discovered since the initial release.  @option{-Wabi} will warn about
2603 more things if an older ABI version is selected (with
2604 @option{-fabi-version=@var{n}}).
2605
2606 @option{-Wabi} can also be used with an explicit version number to
2607 warn about compatibility with a particular @option{-fabi-version}
2608 level, e.g. @option{-Wabi=2} to warn about changes relative to
2609 @option{-fabi-version=2}.
2610
2611 If an explicit version number is provided and
2612 @option{-fabi-compat-version} is not specified, the version number
2613 from this option is used for compatibility aliases.  If no explicit
2614 version number is provided with this option, but
2615 @option{-fabi-compat-version} is specified, that version number is
2616 used for ABI warnings.
2617
2618 Although an effort has been made to warn about
2619 all such cases, there are probably some cases that are not warned about,
2620 even though G++ is generating incompatible code.  There may also be
2621 cases where warnings are emitted even though the code that is generated
2622 is compatible.
2623
2624 You should rewrite your code to avoid these warnings if you are
2625 concerned about the fact that code generated by G++ may not be binary
2626 compatible with code generated by other compilers.
2627
2628 Known incompatibilities in @option{-fabi-version=2} (which was the
2629 default from GCC 3.4 to 4.9) include:
2630
2631 @itemize @bullet
2632
2633 @item
2634 A template with a non-type template parameter of reference type was
2635 mangled incorrectly:
2636 @smallexample
2637 extern int N;
2638 template <int &> struct S @{@};
2639 void n (S<N>) @{2@}
2640 @end smallexample
2641
2642 This was fixed in @option{-fabi-version=3}.
2643
2644 @item
2645 SIMD vector types declared using @code{__attribute ((vector_size))} were
2646 mangled in a non-standard way that does not allow for overloading of
2647 functions taking vectors of different sizes.
2648
2649 The mangling was changed in @option{-fabi-version=4}.
2650
2651 @item
2652 @code{__attribute ((const))} and @code{noreturn} were mangled as type
2653 qualifiers, and @code{decltype} of a plain declaration was folded away.
2654
2655 These mangling issues were fixed in @option{-fabi-version=5}.
2656
2657 @item
2658 Scoped enumerators passed as arguments to a variadic function are
2659 promoted like unscoped enumerators, causing @code{va_arg} to complain.
2660 On most targets this does not actually affect the parameter passing
2661 ABI, as there is no way to pass an argument smaller than @code{int}.
2662
2663 Also, the ABI changed the mangling of template argument packs,
2664 @code{const_cast}, @code{static_cast}, prefix increment/decrement, and
2665 a class scope function used as a template argument.
2666
2667 These issues were corrected in @option{-fabi-version=6}.
2668
2669 @item
2670 Lambdas in default argument scope were mangled incorrectly, and the
2671 ABI changed the mangling of @code{nullptr_t}.
2672
2673 These issues were corrected in @option{-fabi-version=7}.
2674
2675 @item
2676 When mangling a function type with function-cv-qualifiers, the
2677 un-qualified function type was incorrectly treated as a substitution
2678 candidate.
2679
2680 This was fixed in @option{-fabi-version=8}, the default for GCC 5.1.
2681
2682 @item
2683 @code{decltype(nullptr)} incorrectly had an alignment of 1, leading to
2684 unaligned accesses.  Note that this did not affect the ABI of a
2685 function with a @code{nullptr_t} parameter, as parameters have a
2686 minimum alignment.
2687
2688 This was fixed in @option{-fabi-version=9}, the default for GCC 5.2.
2689
2690 @item
2691 Target-specific attributes that affect the identity of a type, such as
2692 ia32 calling conventions on a function type (stdcall, regparm, etc.),
2693 did not affect the mangled name, leading to name collisions when
2694 function pointers were used as template arguments.
2695
2696 This was fixed in @option{-fabi-version=10}, the default for GCC 6.1.
2697
2698 @end itemize
2699
2700 It also warns about psABI-related changes.  The known psABI changes at this
2701 point include:
2702
2703 @itemize @bullet
2704
2705 @item
2706 For SysV/x86-64, unions with @code{long double} members are 
2707 passed in memory as specified in psABI.  For example:
2708
2709 @smallexample
2710 union U @{
2711   long double ld;
2712   int i;
2713 @};
2714 @end smallexample
2715
2716 @noindent
2717 @code{union U} is always passed in memory.
2718
2719 @end itemize
2720
2721 @item -Wabi-tag @r{(C++ and Objective-C++ only)}
2722 @opindex Wabi-tag
2723 @opindex -Wabi-tag
2724 Warn when a type with an ABI tag is used in a context that does not
2725 have that ABI tag.  See @ref{C++ Attributes} for more information
2726 about ABI tags.
2727
2728 @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2729 @opindex Wctor-dtor-privacy
2730 @opindex Wno-ctor-dtor-privacy
2731 Warn when a class seems unusable because all the constructors or
2732 destructors in that class are private, and it has neither friends nor
2733 public static member functions.  Also warn if there are no non-private
2734 methods, and there's at least one private member function that isn't
2735 a constructor or destructor.
2736
2737 @item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
2738 @opindex Wdelete-non-virtual-dtor
2739 @opindex Wno-delete-non-virtual-dtor
2740 Warn when @code{delete} is used to destroy an instance of a class that
2741 has virtual functions and non-virtual destructor. It is unsafe to delete
2742 an instance of a derived class through a pointer to a base class if the
2743 base class does not have a virtual destructor.  This warning is enabled
2744 by @option{-Wall}.
2745
2746 @item -Wliteral-suffix @r{(C++ and Objective-C++ only)}
2747 @opindex Wliteral-suffix
2748 @opindex Wno-literal-suffix
2749 Warn when a string or character literal is followed by a ud-suffix which does
2750 not begin with an underscore.  As a conforming extension, GCC treats such
2751 suffixes as separate preprocessing tokens in order to maintain backwards
2752 compatibility with code that uses formatting macros from @code{<inttypes.h>}.
2753 For example:
2754
2755 @smallexample
2756 #define __STDC_FORMAT_MACROS
2757 #include <inttypes.h>
2758 #include <stdio.h>
2759
2760 int main() @{
2761   int64_t i64 = 123;
2762   printf("My int64: %" PRId64"\n", i64);
2763 @}
2764 @end smallexample
2765
2766 In this case, @code{PRId64} is treated as a separate preprocessing token.
2767
2768 This warning is enabled by default.
2769
2770 @item -Wlto-type-mismatch
2771 @opindex Wlto-type-mismatch
2772 @opindex Wno-lto-type-mistmach
2773
2774 During the link-time optimization warn about type mismatches in between
2775 global declarations from different compilation units.
2776 Requires @option{-flto} to be enabled.  Enabled by default.
2777
2778 @item -Wnarrowing @r{(C++ and Objective-C++ only)}
2779 @opindex Wnarrowing
2780 @opindex Wno-narrowing
2781 Warn when a narrowing conversion prohibited by C++11 occurs within
2782 @samp{@{ @}}, e.g.
2783
2784 @smallexample
2785 int i = @{ 2.2 @}; // error: narrowing from double to int
2786 @end smallexample
2787
2788 This flag is included in @option{-Wall} and @option{-Wc++11-compat}.
2789
2790 With @option{-std=c++11}, @option{-Wno-narrowing} suppresses the diagnostic
2791 required by the standard.  Note that this does not affect the meaning
2792 of well-formed code; narrowing conversions are still considered
2793 ill-formed in SFINAE context.
2794
2795 @item -Wnoexcept @r{(C++ and Objective-C++ only)}
2796 @opindex Wnoexcept
2797 @opindex Wno-noexcept
2798 Warn when a noexcept-expression evaluates to false because of a call
2799 to a function that does not have a non-throwing exception
2800 specification (i.e. @code{throw()} or @code{noexcept}) but is known by
2801 the compiler to never throw an exception.
2802
2803 @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2804 @opindex Wnon-virtual-dtor
2805 @opindex Wno-non-virtual-dtor
2806 Warn when a class has virtual functions and an accessible non-virtual
2807 destructor itself or in an accessible polymorphic base class, in which
2808 case it is possible but unsafe to delete an instance of a derived
2809 class through a pointer to the class itself or base class.  This
2810 warning is automatically enabled if @option{-Weffc++} is specified.
2811
2812 @item -Wreorder @r{(C++ and Objective-C++ only)}
2813 @opindex Wreorder
2814 @opindex Wno-reorder
2815 @cindex reordering, warning
2816 @cindex warning for reordering of member initializers
2817 Warn when the order of member initializers given in the code does not
2818 match the order in which they must be executed.  For instance:
2819
2820 @smallexample
2821 struct A @{
2822   int i;
2823   int j;
2824   A(): j (0), i (1) @{ @}
2825 @};
2826 @end smallexample
2827
2828 @noindent
2829 The compiler rearranges the member initializers for @code{i}
2830 and @code{j} to match the declaration order of the members, emitting
2831 a warning to that effect.  This warning is enabled by @option{-Wall}.
2832
2833 @item -fext-numeric-literals @r{(C++ and Objective-C++ only)}
2834 @opindex fext-numeric-literals
2835 @opindex fno-ext-numeric-literals
2836 Accept imaginary, fixed-point, or machine-defined
2837 literal number suffixes as GNU extensions.
2838 When this option is turned off these suffixes are treated
2839 as C++11 user-defined literal numeric suffixes.
2840 This is on by default for all pre-C++11 dialects and all GNU dialects:
2841 @option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11},
2842 @option{-std=gnu++14}.
2843 This option is off by default
2844 for ISO C++11 onwards (@option{-std=c++11}, ...).
2845 @end table
2846
2847 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2848
2849 @table @gcctabopt
2850 @item -Weffc++ @r{(C++ and Objective-C++ only)}
2851 @opindex Weffc++
2852 @opindex Wno-effc++
2853 Warn about violations of the following style guidelines from Scott Meyers'
2854 @cite{Effective C++} series of books:
2855
2856 @itemize @bullet
2857 @item
2858 Define a copy constructor and an assignment operator for classes
2859 with dynamically-allocated memory.
2860
2861 @item
2862 Prefer initialization to assignment in constructors.
2863
2864 @item
2865 Have @code{operator=} return a reference to @code{*this}.
2866
2867 @item
2868 Don't try to return a reference when you must return an object.
2869
2870 @item
2871 Distinguish between prefix and postfix forms of increment and
2872 decrement operators.
2873
2874 @item
2875 Never overload @code{&&}, @code{||}, or @code{,}.
2876
2877 @end itemize
2878
2879 This option also enables @option{-Wnon-virtual-dtor}, which is also
2880 one of the effective C++ recommendations.  However, the check is
2881 extended to warn about the lack of virtual destructor in accessible
2882 non-polymorphic bases classes too.
2883
2884 When selecting this option, be aware that the standard library
2885 headers do not obey all of these guidelines; use @samp{grep -v}
2886 to filter out those warnings.
2887
2888 @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2889 @opindex Wstrict-null-sentinel
2890 @opindex Wno-strict-null-sentinel
2891 Warn about the use of an uncasted @code{NULL} as sentinel.  When
2892 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2893 to @code{__null}.  Although it is a null pointer constant rather than a
2894 null pointer, it is guaranteed to be of the same size as a pointer.
2895 But this use is not portable across different compilers.
2896
2897 @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2898 @opindex Wno-non-template-friend
2899 @opindex Wnon-template-friend
2900 Disable warnings when non-templatized friend functions are declared
2901 within a template.  Since the advent of explicit template specification
2902 support in G++, if the name of the friend is an unqualified-id (i.e.,
2903 @samp{friend foo(int)}), the C++ language specification demands that the
2904 friend declare or define an ordinary, nontemplate function.  (Section
2905 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2906 could be interpreted as a particular specialization of a templatized
2907 function.  Because this non-conforming behavior is no longer the default
2908 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2909 check existing code for potential trouble spots and is on by default.
2910 This new compiler behavior can be turned off with
2911 @option{-Wno-non-template-friend}, which keeps the conformant compiler code
2912 but disables the helpful warning.
2913
2914 @item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2915 @opindex Wold-style-cast
2916 @opindex Wno-old-style-cast
2917 Warn if an old-style (C-style) cast to a non-void type is used within
2918 a C++ program.  The new-style casts (@code{dynamic_cast},
2919 @code{static_cast}, @code{reinterpret_cast}, and @code{const_cast}) are
2920 less vulnerable to unintended effects and much easier to search for.
2921
2922 @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2923 @opindex Woverloaded-virtual
2924 @opindex Wno-overloaded-virtual
2925 @cindex overloaded virtual function, warning
2926 @cindex warning for overloaded virtual function
2927 Warn when a function declaration hides virtual functions from a
2928 base class.  For example, in:
2929
2930 @smallexample
2931 struct A @{
2932   virtual void f();
2933 @};
2934
2935 struct B: public A @{
2936   void f(int);
2937 @};
2938 @end smallexample
2939
2940 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2941 like:
2942
2943 @smallexample
2944 B* b;
2945 b->f();
2946 @end smallexample
2947
2948 @noindent
2949 fails to compile.
2950
2951 @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2952 @opindex Wno-pmf-conversions
2953 @opindex Wpmf-conversions
2954 Disable the diagnostic for converting a bound pointer to member function
2955 to a plain pointer.
2956
2957 @item -Wsign-promo @r{(C++ and Objective-C++ only)}
2958 @opindex Wsign-promo
2959 @opindex Wno-sign-promo
2960 Warn when overload resolution chooses a promotion from unsigned or
2961 enumerated type to a signed type, over a conversion to an unsigned type of
2962 the same size.  Previous versions of G++ tried to preserve
2963 unsignedness, but the standard mandates the current behavior.
2964
2965 @item -Wtemplates @r{(C++ and Objective-C++ only)}
2966 @opindex Wtemplates
2967 Warn when a primary template declaration is encountered.  Some coding
2968 rules disallow templates, and this may be used to enforce that rule.
2969 The warning is inactive inside a system header file, such as the STL, so
2970 one can still use the STL.  One may also instantiate or specialize
2971 templates.
2972
2973 @item -Wmultiple-inheritance @r{(C++ and Objective-C++ only)}
2974 @opindex Wmultiple-inheritance
2975 Warn when a class is defined with multiple direct base classes.  Some
2976 coding rules disallow multiple inheritance, and this may be used to
2977 enforce that rule.  The warning is inactive inside a system header file,
2978 such as the STL, so one can still use the STL.  One may also define
2979 classes that indirectly use multiple inheritance.
2980
2981 @item -Wvirtual-inheritance
2982 @opindex Wvirtual-inheritance
2983 Warn when a class is defined with a virtual direct base classe.  Some
2984 coding rules disallow multiple inheritance, and this may be used to
2985 enforce that rule.  The warning is inactive inside a system header file,
2986 such as the STL, so one can still use the STL.  One may also define
2987 classes that indirectly use virtual inheritance.
2988
2989 @item -Wnamespaces
2990 @opindex Wnamespaces
2991 Warn when a namespace definition is opened.  Some coding rules disallow
2992 namespaces, and this may be used to enforce that rule.  The warning is
2993 inactive inside a system header file, such as the STL, so one can still
2994 use the STL.  One may also use using directives and qualified names.
2995
2996 @item -Wno-terminate @r{(C++ and Objective-C++ only)}
2997 @opindex Wterminate
2998 @opindex Wno-terminate
2999 Disable the warning about a throw-expression that will immediately
3000 result in a call to @code{terminate}.
3001 @end table
3002
3003 @node Objective-C and Objective-C++ Dialect Options
3004 @section Options Controlling Objective-C and Objective-C++ Dialects
3005
3006 @cindex compiler options, Objective-C and Objective-C++
3007 @cindex Objective-C and Objective-C++ options, command-line
3008 @cindex options, Objective-C and Objective-C++
3009 (NOTE: This manual does not describe the Objective-C and Objective-C++
3010 languages themselves.  @xref{Standards,,Language Standards
3011 Supported by GCC}, for references.)
3012
3013 This section describes the command-line options that are only meaningful
3014 for Objective-C and Objective-C++ programs.  You can also use most of
3015 the language-independent GNU compiler options.
3016 For example, you might compile a file @file{some_class.m} like this:
3017
3018 @smallexample
3019 gcc -g -fgnu-runtime -O -c some_class.m
3020 @end smallexample
3021
3022 @noindent
3023 In this example, @option{-fgnu-runtime} is an option meant only for
3024 Objective-C and Objective-C++ programs; you can use the other options with
3025 any language supported by GCC@.
3026
3027 Note that since Objective-C is an extension of the C language, Objective-C
3028 compilations may also use options specific to the C front-end (e.g.,
3029 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
3030 C++-specific options (e.g., @option{-Wabi}).
3031
3032 Here is a list of options that are @emph{only} for compiling Objective-C
3033 and Objective-C++ programs:
3034
3035 @table @gcctabopt
3036 @item -fconstant-string-class=@var{class-name}
3037 @opindex fconstant-string-class
3038 Use @var{class-name} as the name of the class to instantiate for each
3039 literal string specified with the syntax @code{@@"@dots{}"}.  The default
3040 class name is @code{NXConstantString} if the GNU runtime is being used, and
3041 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
3042 @option{-fconstant-cfstrings} option, if also present, overrides the
3043 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
3044 to be laid out as constant CoreFoundation strings.
3045
3046 @item -fgnu-runtime
3047 @opindex fgnu-runtime
3048 Generate object code compatible with the standard GNU Objective-C
3049 runtime.  This is the default for most types of systems.
3050
3051 @item -fnext-runtime
3052 @opindex fnext-runtime
3053 Generate output compatible with the NeXT runtime.  This is the default
3054 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
3055 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
3056 used.
3057
3058 @item -fno-nil-receivers
3059 @opindex fno-nil-receivers
3060 Assume that all Objective-C message dispatches (@code{[receiver
3061 message:arg]}) in this translation unit ensure that the receiver is
3062 not @code{nil}.  This allows for more efficient entry points in the
3063 runtime to be used.  This option is only available in conjunction with
3064 the NeXT runtime and ABI version 0 or 1.
3065
3066 @item -fobjc-abi-version=@var{n}
3067 @opindex fobjc-abi-version
3068 Use version @var{n} of the Objective-C ABI for the selected runtime.
3069 This option is currently supported only for the NeXT runtime.  In that
3070 case, Version 0 is the traditional (32-bit) ABI without support for
3071 properties and other Objective-C 2.0 additions.  Version 1 is the
3072 traditional (32-bit) ABI with support for properties and other
3073 Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
3074 nothing is specified, the default is Version 0 on 32-bit target
3075 machines, and Version 2 on 64-bit target machines.
3076
3077 @item -fobjc-call-cxx-cdtors
3078 @opindex fobjc-call-cxx-cdtors
3079 For each Objective-C class, check if any of its instance variables is a
3080 C++ object with a non-trivial default constructor.  If so, synthesize a
3081 special @code{- (id) .cxx_construct} instance method which runs
3082 non-trivial default constructors on any such instance variables, in order,
3083 and then return @code{self}.  Similarly, check if any instance variable
3084 is a C++ object with a non-trivial destructor, and if so, synthesize a
3085 special @code{- (void) .cxx_destruct} method which runs
3086 all such default destructors, in reverse order.
3087
3088 The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
3089 methods thusly generated only operate on instance variables
3090 declared in the current Objective-C class, and not those inherited
3091 from superclasses.  It is the responsibility of the Objective-C
3092 runtime to invoke all such methods in an object's inheritance
3093 hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
3094 by the runtime immediately after a new object instance is allocated;
3095 the @code{- (void) .cxx_destruct} methods are invoked immediately
3096 before the runtime deallocates an object instance.
3097
3098 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
3099 support for invoking the @code{- (id) .cxx_construct} and
3100 @code{- (void) .cxx_destruct} methods.
3101
3102 @item -fobjc-direct-dispatch
3103 @opindex fobjc-direct-dispatch
3104 Allow fast jumps to the message dispatcher.  On Darwin this is
3105 accomplished via the comm page.
3106
3107 @item -fobjc-exceptions
3108 @opindex fobjc-exceptions
3109 Enable syntactic support for structured exception handling in
3110 Objective-C, similar to what is offered by C++ and Java.  This option
3111 is required to use the Objective-C keywords @code{@@try},
3112 @code{@@throw}, @code{@@catch}, @code{@@finally} and
3113 @code{@@synchronized}.  This option is available with both the GNU
3114 runtime and the NeXT runtime (but not available in conjunction with
3115 the NeXT runtime on Mac OS X 10.2 and earlier).
3116
3117 @item -fobjc-gc
3118 @opindex fobjc-gc
3119 Enable garbage collection (GC) in Objective-C and Objective-C++
3120 programs.  This option is only available with the NeXT runtime; the
3121 GNU runtime has a different garbage collection implementation that
3122 does not require special compiler flags.
3123
3124 @item -fobjc-nilcheck
3125 @opindex fobjc-nilcheck
3126 For the NeXT runtime with version 2 of the ABI, check for a nil
3127 receiver in method invocations before doing the actual method call.
3128 This is the default and can be disabled using
3129 @option{-fno-objc-nilcheck}.  Class methods and super calls are never
3130 checked for nil in this way no matter what this flag is set to.
3131 Currently this flag does nothing when the GNU runtime, or an older
3132 version of the NeXT runtime ABI, is used.
3133
3134 @item -fobjc-std=objc1
3135 @opindex fobjc-std
3136 Conform to the language syntax of Objective-C 1.0, the language
3137 recognized by GCC 4.0.  This only affects the Objective-C additions to
3138 the C/C++ language; it does not affect conformance to C/C++ standards,
3139 which is controlled by the separate C/C++ dialect option flags.  When
3140 this option is used with the Objective-C or Objective-C++ compiler,
3141 any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
3142 This is useful if you need to make sure that your Objective-C code can
3143 be compiled with older versions of GCC@.
3144
3145 @item -freplace-objc-classes
3146 @opindex freplace-objc-classes
3147 Emit a special marker instructing @command{ld(1)} not to statically link in
3148 the resulting object file, and allow @command{dyld(1)} to load it in at
3149 run time instead.  This is used in conjunction with the Fix-and-Continue
3150 debugging mode, where the object file in question may be recompiled and
3151 dynamically reloaded in the course of program execution, without the need
3152 to restart the program itself.  Currently, Fix-and-Continue functionality
3153 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
3154 and later.
3155
3156 @item -fzero-link
3157 @opindex fzero-link
3158 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
3159 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
3160 compile time) with static class references that get initialized at load time,
3161 which improves run-time performance.  Specifying the @option{-fzero-link} flag
3162 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
3163 to be retained.  This is useful in Zero-Link debugging mode, since it allows
3164 for individual class implementations to be modified during program execution.
3165 The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
3166 regardless of command-line options.
3167
3168 @item -fno-local-ivars
3169 @opindex fno-local-ivars
3170 @opindex flocal-ivars
3171 By default instance variables in Objective-C can be accessed as if
3172 they were local variables from within the methods of the class they're
3173 declared in.  This can lead to shadowing between instance variables
3174 and other variables declared either locally inside a class method or
3175 globally with the same name.  Specifying the @option{-fno-local-ivars}
3176 flag disables this behavior thus avoiding variable shadowing issues.
3177
3178 @item -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]}
3179 @opindex fivar-visibility
3180 Set the default instance variable visibility to the specified option
3181 so that instance variables declared outside the scope of any access
3182 modifier directives default to the specified visibility.
3183
3184 @item -gen-decls
3185 @opindex gen-decls
3186 Dump interface declarations for all classes seen in the source file to a
3187 file named @file{@var{sourcename}.decl}.
3188
3189 @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
3190 @opindex Wassign-intercept
3191 @opindex Wno-assign-intercept
3192 Warn whenever an Objective-C assignment is being intercepted by the
3193 garbage collector.
3194
3195 @item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
3196 @opindex Wno-protocol
3197 @opindex Wprotocol
3198 If a class is declared to implement a protocol, a warning is issued for
3199 every method in the protocol that is not implemented by the class.  The
3200 default behavior is to issue a warning for every method not explicitly
3201 implemented in the class, even if a method implementation is inherited
3202 from the superclass.  If you use the @option{-Wno-protocol} option, then
3203 methods inherited from the superclass are considered to be implemented,
3204 and no warning is issued for them.
3205
3206 @item -Wselector @r{(Objective-C and Objective-C++ only)}
3207 @opindex Wselector
3208 @opindex Wno-selector
3209 Warn if multiple methods of different types for the same selector are
3210 found during compilation.  The check is performed on the list of methods
3211 in the final stage of compilation.  Additionally, a check is performed
3212 for each selector appearing in a @code{@@selector(@dots{})}
3213 expression, and a corresponding method for that selector has been found
3214 during compilation.  Because these checks scan the method table only at
3215 the end of compilation, these warnings are not produced if the final
3216 stage of compilation is not reached, for example because an error is
3217 found during compilation, or because the @option{-fsyntax-only} option is
3218 being used.
3219
3220 @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
3221 @opindex Wstrict-selector-match
3222 @opindex Wno-strict-selector-match
3223 Warn if multiple methods with differing argument and/or return types are
3224 found for a given selector when attempting to send a message using this
3225 selector to a receiver of type @code{id} or @code{Class}.  When this flag
3226 is off (which is the default behavior), the compiler omits such warnings
3227 if any differences found are confined to types that share the same size
3228 and alignment.
3229
3230 @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
3231 @opindex Wundeclared-selector
3232 @opindex Wno-undeclared-selector
3233 Warn if a @code{@@selector(@dots{})} expression referring to an
3234 undeclared selector is found.  A selector is considered undeclared if no
3235 method with that name has been declared before the
3236 @code{@@selector(@dots{})} expression, either explicitly in an
3237 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
3238 an @code{@@implementation} section.  This option always performs its
3239 checks as soon as a @code{@@selector(@dots{})} expression is found,
3240 while @option{-Wselector} only performs its checks in the final stage of
3241 compilation.  This also enforces the coding style convention
3242 that methods and selectors must be declared before being used.
3243
3244 @item -print-objc-runtime-info
3245 @opindex print-objc-runtime-info
3246 Generate C header describing the largest structure that is passed by
3247 value, if any.
3248
3249 @end table
3250
3251 @node Diagnostic Message Formatting Options
3252 @section Options to Control Diagnostic Messages Formatting
3253 @cindex options to control diagnostics formatting
3254 @cindex diagnostic messages
3255 @cindex message formatting
3256
3257 Traditionally, diagnostic messages have been formatted irrespective of
3258 the output device's aspect (e.g.@: its width, @dots{}).  You can use the
3259 options described below
3260 to control the formatting algorithm for diagnostic messages, 
3261 e.g.@: how many characters per line, how often source location
3262 information should be reported.  Note that some language front ends may not
3263 honor these options.
3264
3265 @table @gcctabopt
3266 @item -fmessage-length=@var{n}
3267 @opindex fmessage-length
3268 Try to format error messages so that they fit on lines of about
3269 @var{n} characters.  If @var{n} is zero, then no line-wrapping is
3270 done; each error message appears on a single line.  This is the
3271 default for all front ends.
3272
3273 @item -fdiagnostics-show-location=once
3274 @opindex fdiagnostics-show-location
3275 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
3276 reporter to emit source location information @emph{once}; that is, in
3277 case the message is too long to fit on a single physical line and has to
3278 be wrapped, the source location won't be emitted (as prefix) again,
3279 over and over, in subsequent continuation lines.  This is the default
3280 behavior.
3281
3282 @item -fdiagnostics-show-location=every-line
3283 Only meaningful in line-wrapping mode.  Instructs the diagnostic
3284 messages reporter to emit the same source location information (as
3285 prefix) for physical lines that result from the process of breaking
3286 a message which is too long to fit on a single line.
3287
3288 @item -fdiagnostics-color[=@var{WHEN}]
3289 @itemx -fno-diagnostics-color
3290 @opindex fdiagnostics-color
3291 @cindex highlight, color, colour
3292 @vindex GCC_COLORS @r{environment variable}
3293 Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
3294 or @samp{auto}.  The default depends on how the compiler has been configured,
3295 it can be any of the above @var{WHEN} options or also @samp{never}
3296 if @env{GCC_COLORS} environment variable isn't present in the environment,
3297 and @samp{auto} otherwise.
3298 @samp{auto} means to use color only when the standard error is a terminal.
3299 The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
3300 aliases for @option{-fdiagnostics-color=always} and
3301 @option{-fdiagnostics-color=never}, respectively.
3302
3303 The colors are defined by the environment variable @env{GCC_COLORS}.
3304 Its value is a colon-separated list of capabilities and Select Graphic
3305 Rendition (SGR) substrings. SGR commands are interpreted by the
3306 terminal or terminal emulator.  (See the section in the documentation
3307 of your text terminal for permitted values and their meanings as
3308 character attributes.)  These substring values are integers in decimal
3309 representation and can be concatenated with semicolons.
3310 Common values to concatenate include
3311 @samp{1} for bold,
3312 @samp{4} for underline,
3313 @samp{5} for blink,
3314 @samp{7} for inverse,
3315 @samp{39} for default foreground color,
3316 @samp{30} to @samp{37} for foreground colors,
3317 @samp{90} to @samp{97} for 16-color mode foreground colors,
3318 @samp{38;5;0} to @samp{38;5;255}
3319 for 88-color and 256-color modes foreground colors,
3320 @samp{49} for default background color,
3321 @samp{40} to @samp{47} for background colors,
3322 @samp{100} to @samp{107} for 16-color mode background colors,
3323 and @samp{48;5;0} to @samp{48;5;255}
3324 for 88-color and 256-color modes background colors.
3325
3326 The default @env{GCC_COLORS} is
3327 @smallexample
3328 error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
3329 @end smallexample
3330 @noindent
3331 where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
3332 @samp{01;36} is bold cyan, @samp{01;32} is bold green and
3333 @samp{01} is bold. Setting @env{GCC_COLORS} to the empty
3334 string disables colors.
3335 Supported capabilities are as follows.
3336
3337 @table @code
3338 @item error=
3339 @vindex error GCC_COLORS @r{capability}
3340 SGR substring for error: markers.
3341
3342 @item warning=
3343 @vindex warning GCC_COLORS @r{capability}
3344 SGR substring for warning: markers.
3345
3346 @item note=
3347 @vindex note GCC_COLORS @r{capability}
3348 SGR substring for note: markers.
3349
3350 @item caret=
3351 @vindex caret GCC_COLORS @r{capability}
3352 SGR substring for caret line.
3353
3354 @item locus=
3355 @vindex locus GCC_COLORS @r{capability}
3356 SGR substring for location information, @samp{file:line} or
3357 @samp{file:line:column} etc.
3358
3359 @item quote=
3360 @vindex quote GCC_COLORS @r{capability}
3361 SGR substring for information printed within quotes.
3362 @end table
3363
3364 @item -fno-diagnostics-show-option
3365 @opindex fno-diagnostics-show-option
3366 @opindex fdiagnostics-show-option
3367 By default, each diagnostic emitted includes text indicating the
3368 command-line option that directly controls the diagnostic (if such an
3369 option is known to the diagnostic machinery).  Specifying the
3370 @option{-fno-diagnostics-show-option} flag suppresses that behavior.
3371
3372 @item -fno-diagnostics-show-caret
3373 @opindex fno-diagnostics-show-caret
3374 @opindex fdiagnostics-show-caret
3375 By default, each diagnostic emitted includes the original source line
3376 and a caret '^' indicating the column.  This option suppresses this
3377 information.  The source line is truncated to @var{n} characters, if
3378 the @option{-fmessage-length=n} option is given.  When the output is done
3379 to the terminal, the width is limited to the width given by the
3380 @env{COLUMNS} environment variable or, if not set, to the terminal width.
3381
3382 @end table
3383
3384 @node Warning Options
3385 @section Options to Request or Suppress Warnings
3386 @cindex options to control warnings
3387 @cindex warning messages
3388 @cindex messages, warning
3389 @cindex suppressing warnings
3390
3391 Warnings are diagnostic messages that report constructions that
3392 are not inherently erroneous but that are risky or suggest there
3393 may have been an error.
3394
3395 The following language-independent options do not enable specific
3396 warnings but control the kinds of diagnostics produced by GCC@.
3397
3398 @table @gcctabopt
3399 @cindex syntax checking
3400 @item -fsyntax-only
3401 @opindex fsyntax-only
3402 Check the code for syntax errors, but don't do anything beyond that.
3403
3404 @item -fmax-errors=@var{n}
3405 @opindex fmax-errors
3406 Limits the maximum number of error messages to @var{n}, at which point
3407 GCC bails out rather than attempting to continue processing the source
3408 code.  If @var{n} is 0 (the default), there is no limit on the number
3409 of error messages produced.  If @option{-Wfatal-errors} is also
3410 specified, then @option{-Wfatal-errors} takes precedence over this
3411 option.
3412
3413 @item -w
3414 @opindex w
3415 Inhibit all warning messages.
3416
3417 @item -Werror
3418 @opindex Werror
3419 @opindex Wno-error
3420 Make all warnings into errors.
3421
3422 @item -Werror=
3423 @opindex Werror=
3424 @opindex Wno-error=
3425 Make the specified warning into an error.  The specifier for a warning
3426 is appended; for example @option{-Werror=switch} turns the warnings
3427 controlled by @option{-Wswitch} into errors.  This switch takes a
3428 negative form, to be used to negate @option{-Werror} for specific
3429 warnings; for example @option{-Wno-error=switch} makes
3430 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
3431 is in effect.
3432
3433 The warning message for each controllable warning includes the
3434 option that controls the warning.  That option can then be used with
3435 @option{-Werror=} and @option{-Wno-error=} as described above.
3436 (Printing of the option in the warning message can be disabled using the
3437 @option{-fno-diagnostics-show-option} flag.)
3438
3439 Note that specifying @option{-Werror=}@var{foo} automatically implies
3440 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
3441 imply anything.
3442
3443 @item -Wfatal-errors
3444 @opindex Wfatal-errors
3445 @opindex Wno-fatal-errors
3446 This option causes the compiler to abort compilation on the first error
3447 occurred rather than trying to keep going and printing further error
3448 messages.
3449
3450 @end table
3451
3452 You can request many specific warnings with options beginning with
3453 @samp{-W}, for example @option{-Wimplicit} to request warnings on
3454 implicit declarations.  Each of these specific warning options also
3455 has a negative form beginning @samp{-Wno-} to turn off warnings; for
3456 example, @option{-Wno-implicit}.  This manual lists only one of the
3457 two forms, whichever is not the default.  For further
3458 language-specific options also refer to @ref{C++ Dialect Options} and
3459 @ref{Objective-C and Objective-C++ Dialect Options}.
3460
3461 Some options, such as @option{-Wall} and @option{-Wextra}, turn on other
3462 options, such as @option{-Wunused}, which may turn on further options,
3463 such as @option{-Wunused-value}. The combined effect of positive and
3464 negative forms is that more specific options have priority over less
3465 specific ones, independently of their position in the command-line. For
3466 options of the same specificity, the last one takes effect. Options
3467 enabled or disabled via pragmas (@pxref{Diagnostic Pragmas}) take effect
3468 as if they appeared at the end of the command-line.
3469
3470 When an unrecognized warning option is requested (e.g.,
3471 @option{-Wunknown-warning}), GCC emits a diagnostic stating
3472 that the option is not recognized.  However, if the @option{-Wno-} form
3473 is used, the behavior is slightly different: no diagnostic is
3474 produced for @option{-Wno-unknown-warning} unless other diagnostics
3475 are being produced.  This allows the use of new @option{-Wno-} options
3476 with old compilers, but if something goes wrong, the compiler
3477 warns that an unrecognized option is present.
3478
3479 @table @gcctabopt
3480 @item -Wpedantic
3481 @itemx -pedantic
3482 @opindex pedantic
3483 @opindex Wpedantic
3484 Issue all the warnings demanded by strict ISO C and ISO C++;
3485 reject all programs that use forbidden extensions, and some other
3486 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
3487 version of the ISO C standard specified by any @option{-std} option used.
3488
3489 Valid ISO C and ISO C++ programs should compile properly with or without
3490 this option (though a rare few require @option{-ansi} or a
3491 @option{-std} option specifying the required version of ISO C)@.  However,
3492 without this option, certain GNU extensions and traditional C and C++
3493 features are supported as well.  With this option, they are rejected.
3494
3495 @option{-Wpedantic} does not cause warning messages for use of the
3496 alternate keywords whose names begin and end with @samp{__}.  Pedantic
3497 warnings are also disabled in the expression that follows
3498 @code{__extension__}.  However, only system header files should use
3499 these escape routes; application programs should avoid them.
3500 @xref{Alternate Keywords}.
3501
3502 Some users try to use @option{-Wpedantic} to check programs for strict ISO
3503 C conformance.  They soon find that it does not do quite what they want:
3504 it finds some non-ISO practices, but not all---only those for which
3505 ISO C @emph{requires} a diagnostic, and some others for which
3506 diagnostics have been added.
3507
3508 A feature to report any failure to conform to ISO C might be useful in
3509 some instances, but would require considerable additional work and would
3510 be quite different from @option{-Wpedantic}.  We don't have plans to
3511 support such a feature in the near future.
3512
3513 Where the standard specified with @option{-std} represents a GNU
3514 extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
3515 corresponding @dfn{base standard}, the version of ISO C on which the GNU
3516 extended dialect is based.  Warnings from @option{-Wpedantic} are given
3517 where they are required by the base standard.  (It does not make sense
3518 for such warnings to be given only for features not in the specified GNU
3519 C dialect, since by definition the GNU dialects of C include all
3520 features the compiler supports with the given option, and there would be
3521 nothing to warn about.)
3522
3523 @item -pedantic-errors
3524 @opindex pedantic-errors
3525 Give an error whenever the @dfn{base standard} (see @option{-Wpedantic})
3526 requires a diagnostic, in some cases where there is undefined behavior
3527 at compile-time and in some other cases that do not prevent compilation
3528 of programs that are valid according to the standard. This is not
3529 equivalent to @option{-Werror=pedantic}, since there are errors enabled
3530 by this option and not enabled by the latter and vice versa.
3531
3532 @item -Wall
3533 @opindex Wall
3534 @opindex Wno-all
3535 This enables all the warnings about constructions that some users
3536 consider questionable, and that are easy to avoid (or modify to
3537 prevent the warning), even in conjunction with macros.  This also
3538 enables some language-specific warnings described in @ref{C++ Dialect
3539 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
3540
3541 @option{-Wall} turns on the following warning flags:
3542
3543 @gccoptlist{-Waddress   @gol
3544 -Warray-bounds=1 @r{(only with} @option{-O2}@r{)}  @gol
3545 -Wc++11-compat  -Wc++14-compat@gol
3546 -Wchar-subscripts  @gol
3547 -Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol
3548 -Wimplicit-int @r{(C and Objective-C only)} @gol
3549 -Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
3550 -Wbool-compare  @gol
3551 -Wduplicated-cond  @gol
3552 -Wcomment  @gol
3553 -Wformat   @gol
3554 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
3555 -Wmaybe-uninitialized @gol
3556 -Wmissing-braces @r{(only for C/ObjC)} @gol
3557 -Wnonnull  @gol
3558 -Wopenmp-simd @gol
3559 -Wparentheses  @gol
3560 -Wpointer-sign  @gol
3561 -Wreorder   @gol
3562 -Wreturn-type  @gol
3563 -Wsequence-point  @gol
3564 -Wsign-compare @r{(only in C++)}  @gol
3565 -Wstrict-aliasing  @gol
3566 -Wstrict-overflow=1  @gol
3567 -Wswitch  @gol
3568 -Wtautological-compare  @gol
3569 -Wtrigraphs  @gol
3570 -Wuninitialized  @gol
3571 -Wunknown-pragmas  @gol
3572 -Wunused-function  @gol
3573 -Wunused-label     @gol
3574 -Wunused-value     @gol
3575 -Wunused-variable  @gol
3576 -Wvolatile-register-var @gol
3577 }
3578
3579 Note that some warning flags are not implied by @option{-Wall}.  Some of
3580 them warn about constructions that users generally do not consider
3581 questionable, but which occasionally you might wish to check for;
3582 others warn about constructions that are necessary or hard to avoid in
3583 some cases, and there is no simple way to modify the code to suppress
3584 the warning. Some of them are enabled by @option{-Wextra} but many of
3585 them must be enabled individually.
3586
3587 @item -Wextra
3588 @opindex W
3589 @opindex Wextra
3590 @opindex Wno-extra
3591 This enables some extra warning flags that are not enabled by
3592 @option{-Wall}. (This option used to be called @option{-W}.  The older
3593 name is still supported, but the newer name is more descriptive.)
3594
3595 @gccoptlist{-Wclobbered  @gol
3596 -Wempty-body  @gol
3597 -Wignored-qualifiers @gol
3598 -Wmissing-field-initializers  @gol
3599 -Wmissing-parameter-type @r{(C only)}  @gol
3600 -Wold-style-declaration @r{(C only)}  @gol
3601 -Woverride-init  @gol
3602 -Wsign-compare  @gol
3603 -Wtype-limits  @gol
3604 -Wuninitialized  @gol
3605 -Wshift-negative-value  @gol
3606 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
3607 -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
3608 }
3609
3610 The option @option{-Wextra} also prints warning messages for the
3611 following cases:
3612
3613 @itemize @bullet
3614
3615 @item
3616 A pointer is compared against integer zero with @code{<}, @code{<=},
3617 @code{>}, or @code{>=}.
3618
3619 @item
3620 (C++ only) An enumerator and a non-enumerator both appear in a
3621 conditional expression.
3622
3623 @item
3624 (C++ only) Ambiguous virtual bases.
3625
3626 @item
3627 (C++ only) Subscripting an array that has been declared @code{register}.
3628
3629 @item
3630 (C++ only) Taking the address of a variable that has been declared
3631 @code{register}.
3632
3633 @item
3634 (C++ only) A base class is not initialized in a derived class's copy
3635 constructor.
3636
3637 @end itemize
3638
3639 @item -Wchar-subscripts
3640 @opindex Wchar-subscripts
3641 @opindex Wno-char-subscripts
3642 Warn if an array subscript has type @code{char}.  This is a common cause
3643 of error, as programmers often forget that this type is signed on some
3644 machines.
3645 This warning is enabled by @option{-Wall}.
3646
3647 @item -Wcomment
3648 @opindex Wcomment
3649 @opindex Wno-comment
3650 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
3651 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
3652 This warning is enabled by @option{-Wall}.
3653
3654 @item -Wno-coverage-mismatch
3655 @opindex Wno-coverage-mismatch
3656 Warn if feedback profiles do not match when using the
3657 @option{-fprofile-use} option.
3658 If a source file is changed between compiling with @option{-fprofile-gen} and
3659 with @option{-fprofile-use}, the files with the profile feedback can fail
3660 to match the source file and GCC cannot use the profile feedback
3661 information.  By default, this warning is enabled and is treated as an
3662 error.  @option{-Wno-coverage-mismatch} can be used to disable the
3663 warning or @option{-Wno-error=coverage-mismatch} can be used to
3664 disable the error.  Disabling the error for this warning can result in
3665 poorly optimized code and is useful only in the
3666 case of very minor changes such as bug fixes to an existing code-base.
3667 Completely disabling the warning is not recommended.
3668
3669 @item -Wno-cpp
3670 @r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
3671
3672 Suppress warning messages emitted by @code{#warning} directives.
3673
3674 @item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
3675 @opindex Wdouble-promotion
3676 @opindex Wno-double-promotion
3677 Give a warning when a value of type @code{float} is implicitly
3678 promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
3679 floating-point unit implement @code{float} in hardware, but emulate
3680 @code{double} in software.  On such a machine, doing computations
3681 using @code{double} values is much more expensive because of the
3682 overhead required for software emulation.
3683
3684 It is easy to accidentally do computations with @code{double} because
3685 floating-point literals are implicitly of type @code{double}.  For
3686 example, in:
3687 @smallexample
3688 @group
3689 float area(float radius)
3690 @{
3691    return 3.14159 * radius * radius;
3692 @}
3693 @end group
3694 @end smallexample
3695 the compiler performs the entire computation with @code{double}
3696 because the floating-point literal is a @code{double}.
3697
3698 @item -Wformat
3699 @itemx -Wformat=@var{n}
3700 @opindex Wformat
3701 @opindex Wno-format
3702 @opindex ffreestanding
3703 @opindex fno-builtin
3704 @opindex Wformat=
3705 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
3706 the arguments supplied have types appropriate to the format string
3707 specified, and that the conversions specified in the format string make
3708 sense.  This includes standard functions, and others specified by format
3709 attributes (@pxref{Function Attributes}), in the @code{printf},
3710 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
3711 not in the C standard) families (or other target-specific families).
3712 Which functions are checked without format attributes having been
3713 specified depends on the standard version selected, and such checks of
3714 functions without the attribute specified are disabled by
3715 @option{-ffreestanding} or @option{-fno-builtin}.
3716
3717 The formats are checked against the format features supported by GNU
3718 libc version 2.2.  These include all ISO C90 and C99 features, as well
3719 as features from the Single Unix Specification and some BSD and GNU
3720 extensions.  Other library implementations may not support all these
3721 features; GCC does not support warning about features that go beyond a
3722 particular library's limitations.  However, if @option{-Wpedantic} is used
3723 with @option{-Wformat}, warnings are given about format features not
3724 in the selected standard version (but not for @code{strfmon} formats,
3725 since those are not in any version of the C standard).  @xref{C Dialect
3726 Options,,Options Controlling C Dialect}.
3727
3728 @table @gcctabopt
3729 @item -Wformat=1
3730 @itemx -Wformat
3731 @opindex Wformat
3732 @opindex Wformat=1
3733 Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and
3734 @option{-Wno-format} is equivalent to @option{-Wformat=0}.  Since
3735 @option{-Wformat} also checks for null format arguments for several
3736 functions, @option{-Wformat} also implies @option{-Wnonnull}.  Some
3737 aspects of this level of format checking can be disabled by the
3738 options: @option{-Wno-format-contains-nul},
3739 @option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}.
3740 @option{-Wformat} is enabled by @option{-Wall}.
3741
3742 @item -Wno-format-contains-nul
3743 @opindex Wno-format-contains-nul
3744 @opindex Wformat-contains-nul
3745 If @option{-Wformat} is specified, do not warn about format strings that
3746 contain NUL bytes.
3747
3748 @item -Wno-format-extra-args
3749 @opindex Wno-format-extra-args
3750 @opindex Wformat-extra-args
3751 If @option{-Wformat} is specified, do not warn about excess arguments to a
3752 @code{printf} or @code{scanf} format function.  The C standard specifies
3753 that such arguments are ignored.
3754
3755 Where the unused arguments lie between used arguments that are
3756 specified with @samp{$} operand number specifications, normally
3757 warnings are still given, since the implementation could not know what
3758 type to pass to @code{va_arg} to skip the unused arguments.  However,
3759 in the case of @code{scanf} formats, this option suppresses the
3760 warning if the unused arguments are all pointers, since the Single
3761 Unix Specification says that such unused arguments are allowed.
3762
3763 @item -Wno-format-zero-length
3764 @opindex Wno-format-zero-length
3765 @opindex Wformat-zero-length
3766 If @option{-Wformat} is specified, do not warn about zero-length formats.
3767 The C standard specifies that zero-length formats are allowed.
3768
3769
3770 @item -Wformat=2
3771 @opindex Wformat=2
3772 Enable @option{-Wformat} plus additional format checks.  Currently
3773 equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security
3774 -Wformat-y2k}.
3775
3776 @item -Wformat-nonliteral
3777 @opindex Wformat-nonliteral
3778 @opindex Wno-format-nonliteral
3779 If @option{-Wformat} is specified, also warn if the format string is not a
3780 string literal and so cannot be checked, unless the format function
3781 takes its format arguments as a @code{va_list}.
3782
3783 @item -Wformat-security
3784 @opindex Wformat-security
3785 @opindex Wno-format-security
3786 If @option{-Wformat} is specified, also warn about uses of format
3787 functions that represent possible security problems.  At present, this
3788 warns about calls to @code{printf} and @code{scanf} functions where the
3789 format string is not a string literal and there are no format arguments,
3790 as in @code{printf (foo);}.  This may be a security hole if the format
3791 string came from untrusted input and contains @samp{%n}.  (This is
3792 currently a subset of what @option{-Wformat-nonliteral} warns about, but
3793 in future warnings may be added to @option{-Wformat-security} that are not
3794 included in @option{-Wformat-nonliteral}.)
3795
3796 @item -Wformat-signedness
3797 @opindex Wformat-signedness
3798 @opindex Wno-format-signedness
3799 If @option{-Wformat} is specified, also warn if the format string
3800 requires an unsigned argument and the argument is signed and vice versa.
3801
3802 @item -Wformat-y2k
3803 @opindex Wformat-y2k
3804 @opindex Wno-format-y2k
3805 If @option{-Wformat} is specified, also warn about @code{strftime}
3806 formats that may yield only a two-digit year.
3807 @end table
3808
3809 @item -Wnonnull
3810 @opindex Wnonnull
3811 @opindex Wno-nonnull
3812 Warn about passing a null pointer for arguments marked as
3813 requiring a non-null value by the @code{nonnull} function attribute.
3814
3815 Also warns when comparing an argument marked with the @code{nonnull}
3816 function attribute against null inside the function.
3817
3818 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
3819 can be disabled with the @option{-Wno-nonnull} option.
3820
3821 @item -Wnull-dereference
3822 @opindex Wnull-dereference
3823 @opindex Wno-null-dereference
3824 Warn if the compiler detects paths that trigger erroneous or
3825 undefined behavior due to dereferencing a null pointer.  This option
3826 is only active when @option{-fdelete-null-pointer-checks} is active,
3827 which is enabled by optimizations in most targets.  The precision of
3828 the warnings depends on the optimization options used.
3829
3830 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
3831 @opindex Winit-self
3832 @opindex Wno-init-self
3833 Warn about uninitialized variables that are initialized with themselves.
3834 Note this option can only be used with the @option{-Wuninitialized} option.
3835
3836 For example, GCC warns about @code{i} being uninitialized in the
3837 following snippet only when @option{-Winit-self} has been specified:
3838 @smallexample
3839 @group
3840 int f()
3841 @{
3842   int i = i;
3843   return i;
3844 @}
3845 @end group
3846 @end smallexample
3847
3848 This warning is enabled by @option{-Wall} in C++.
3849
3850 @item -Wimplicit-int @r{(C and Objective-C only)}
3851 @opindex Wimplicit-int
3852 @opindex Wno-implicit-int
3853 Warn when a declaration does not specify a type.
3854 This warning is enabled by @option{-Wall}.
3855
3856 @item -Wimplicit-function-declaration @r{(C and Objective-C only)}
3857 @opindex Wimplicit-function-declaration
3858 @opindex Wno-implicit-function-declaration
3859 Give a warning whenever a function is used before being declared. In
3860 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
3861 enabled by default and it is made into an error by
3862 @option{-pedantic-errors}. This warning is also enabled by
3863 @option{-Wall}.
3864
3865 @item -Wimplicit @r{(C and Objective-C only)}
3866 @opindex Wimplicit
3867 @opindex Wno-implicit
3868 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
3869 This warning is enabled by @option{-Wall}.
3870
3871 @item -Wignored-qualifiers @r{(C and C++ only)}
3872 @opindex Wignored-qualifiers
3873 @opindex Wno-ignored-qualifiers
3874 Warn if the return type of a function has a type qualifier
3875 such as @code{const}.  For ISO C such a type qualifier has no effect,
3876 since the value returned by a function is not an lvalue.
3877 For C++, the warning is only emitted for scalar types or @code{void}.
3878 ISO C prohibits qualified @code{void} return types on function
3879 definitions, so such return types always receive a warning
3880 even without this option.
3881
3882 This warning is also enabled by @option{-Wextra}.
3883
3884 @item -Wmain
3885 @opindex Wmain
3886 @opindex Wno-main
3887 Warn if the type of @code{main} is suspicious.  @code{main} should be
3888 a function with external linkage, returning int, taking either zero
3889 arguments, two, or three arguments of appropriate types.  This warning
3890 is enabled by default in C++ and is enabled by either @option{-Wall}
3891 or @option{-Wpedantic}.
3892
3893 @item -Wmisleading-indentation @r{(C and C++ only)}
3894 @opindex Wmisleading-indentation
3895 @opindex Wno-misleading-indentation
3896 Warn when the indentation of the code does not reflect the block structure.
3897 Specifically, a warning is issued for @code{if}, @code{else}, @code{while}, and
3898 @code{for} clauses with a guarded statement that does not use braces,
3899 followed by an unguarded statement with the same indentation.
3900
3901 This warning is disabled by default.
3902
3903 In the following example, the call to ``bar'' is misleadingly indented as
3904 if it were guarded by the ``if'' conditional.
3905
3906 @smallexample
3907   if (some_condition ())
3908     foo ();
3909     bar ();  /* Gotcha: this is not guarded by the "if".  */
3910 @end smallexample
3911
3912 In the case of mixed tabs and spaces, the warning uses the
3913 @option{-ftabstop=} option to determine if the statements line up
3914 (defaulting to 8).
3915
3916 The warning is not issued for code involving multiline preprocessor logic
3917 such as the following example.
3918
3919 @smallexample
3920   if (flagA)
3921     foo (0);
3922 #if SOME_CONDITION_THAT_DOES_NOT_HOLD
3923   if (flagB)
3924 #endif
3925     foo (1);
3926 @end smallexample
3927
3928 The warning is not issued after a @code{#line} directive, since this
3929 typically indicates autogenerated code, and no assumptions can be made
3930 about the layout of the file that the directive references.
3931
3932 @item -Wmissing-braces
3933 @opindex Wmissing-braces
3934 @opindex Wno-missing-braces
3935 Warn if an aggregate or union initializer is not fully bracketed.  In
3936 the following example, the initializer for @code{a} is not fully
3937 bracketed, but that for @code{b} is fully bracketed.  This warning is
3938 enabled by @option{-Wall} in C.
3939
3940 @smallexample
3941 int a[2][2] = @{ 0, 1, 2, 3 @};
3942 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3943 @end smallexample
3944
3945 This warning is enabled by @option{-Wall}.
3946
3947 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3948 @opindex Wmissing-include-dirs
3949 @opindex Wno-missing-include-dirs
3950 Warn if a user-supplied include directory does not exist.
3951
3952 @item -Wparentheses
3953 @opindex Wparentheses
3954 @opindex Wno-parentheses
3955 Warn if parentheses are omitted in certain contexts, such
3956 as when there is an assignment in a context where a truth value
3957 is expected, or when operators are nested whose precedence people
3958 often get confused about.
3959
3960 Also warn if a comparison like @code{x<=y<=z} appears; this is
3961 equivalent to @code{(x<=y ? 1 : 0) <= z}, which is a different
3962 interpretation from that of ordinary mathematical notation.
3963
3964 Also warn about constructions where there may be confusion to which
3965 @code{if} statement an @code{else} branch belongs.  Here is an example of
3966 such a case:
3967
3968 @smallexample
3969 @group
3970 @{
3971   if (a)
3972     if (b)
3973       foo ();
3974   else
3975     bar ();
3976 @}
3977 @end group
3978 @end smallexample
3979
3980 In C/C++, every @code{else} branch belongs to the innermost possible
3981 @code{if} statement, which in this example is @code{if (b)}.  This is
3982 often not what the programmer expected, as illustrated in the above
3983 example by indentation the programmer chose.  When there is the
3984 potential for this confusion, GCC issues a warning when this flag
3985 is specified.  To eliminate the warning, add explicit braces around
3986 the innermost @code{if} statement so there is no way the @code{else}
3987 can belong to the enclosing @code{if}.  The resulting code
3988 looks like this:
3989
3990 @smallexample
3991 @group
3992 @{
3993   if (a)
3994     @{
3995       if (b)
3996         foo ();
3997       else
3998         bar ();
3999     @}
4000 @}
4001 @end group
4002 @end smallexample
4003
4004 Also warn for dangerous uses of the GNU extension to
4005 @code{?:} with omitted middle operand. When the condition
4006 in the @code{?}: operator is a boolean expression, the omitted value is
4007 always 1.  Often programmers expect it to be a value computed
4008 inside the conditional expression instead.
4009
4010 This warning is enabled by @option{-Wall}.
4011
4012 @item -Wsequence-point
4013 @opindex Wsequence-point
4014 @opindex Wno-sequence-point
4015 Warn about code that may have undefined semantics because of violations
4016 of sequence point rules in the C and C++ standards.
4017
4018 The C and C++ standards define the order in which expressions in a C/C++
4019 program are evaluated in terms of @dfn{sequence points}, which represent
4020 a partial ordering between the execution of parts of the program: those
4021 executed before the sequence point, and those executed after it.  These
4022 occur after the evaluation of a full expression (one which is not part
4023 of a larger expression), after the evaluation of the first operand of a
4024 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
4025 function is called (but after the evaluation of its arguments and the
4026 expression denoting the called function), and in certain other places.
4027 Other than as expressed by the sequence point rules, the order of
4028 evaluation of subexpressions of an expression is not specified.  All
4029 these rules describe only a partial order rather than a total order,
4030 since, for example, if two functions are called within one expression
4031 with no sequence point between them, the order in which the functions
4032 are called is not specified.  However, the standards committee have
4033 ruled that function calls do not overlap.
4034
4035 It is not specified when between sequence points modifications to the
4036 values of objects take effect.  Programs whose behavior depends on this
4037 have undefined behavior; the C and C++ standards specify that ``Between
4038 the previous and next sequence point an object shall have its stored
4039 value modified at most once by the evaluation of an expression.
4040 Furthermore, the prior value shall be read only to determine the value
4041 to be stored.''.  If a program breaks these rules, the results on any
4042 particular implementation are entirely unpredictable.
4043
4044 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
4045 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
4046 diagnosed by this option, and it may give an occasional false positive
4047 result, but in general it has been found fairly effective at detecting
4048 this sort of problem in programs.
4049
4050 The standard is worded confusingly, therefore there is some debate
4051 over the precise meaning of the sequence point rules in subtle cases.
4052 Links to discussions of the problem, including proposed formal
4053 definitions, may be found on the GCC readings page, at
4054 @uref{http://gcc.gnu.org/@/readings.html}.
4055
4056 This warning is enabled by @option{-Wall} for C and C++.
4057
4058 @item -Wno-return-local-addr
4059 @opindex Wno-return-local-addr
4060 @opindex Wreturn-local-addr
4061 Do not warn about returning a pointer (or in C++, a reference) to a
4062 variable that goes out of scope after the function returns.
4063
4064 @item -Wreturn-type
4065 @opindex Wreturn-type
4066 @opindex Wno-return-type
4067 Warn whenever a function is defined with a return type that defaults
4068 to @code{int}.  Also warn about any @code{return} statement with no
4069 return value in a function whose return type is not @code{void}
4070 (falling off the end of the function body is considered returning
4071 without a value), and about a @code{return} statement with an
4072 expression in a function whose return type is @code{void}.
4073
4074 For C++, a function without return type always produces a diagnostic
4075 message, even when @option{-Wno-return-type} is specified.  The only
4076 exceptions are @code{main} and functions defined in system headers.
4077
4078 This warning is enabled by @option{-Wall}.
4079
4080 @item -Wshift-count-negative
4081 @opindex Wshift-count-negative
4082 @opindex Wno-shift-count-negative
4083 Warn if shift count is negative. This warning is enabled by default.
4084
4085 @item -Wshift-count-overflow
4086 @opindex Wshift-count-overflow
4087 @opindex Wno-shift-count-overflow
4088 Warn if shift count >= width of type. This warning is enabled by default.
4089
4090 @item -Wshift-negative-value
4091 @opindex Wshift-negative-value
4092 @opindex Wno-shift-negative-value
4093 Warn if left shifting a negative value.  This warning is enabled by
4094 @option{-Wextra} in C99 and C++11 modes (and newer).
4095
4096 @item -Wshift-overflow
4097 @itemx -Wshift-overflow=@var{n}
4098 @opindex Wshift-overflow
4099 @opindex Wno-shift-overflow
4100 Warn about left shift overflows.  This warning is enabled by
4101 default in C99 and C++11 modes (and newer).
4102
4103 @table @gcctabopt
4104 @item -Wshift-overflow=1
4105 This is the warning level of @option{-Wshift-overflow} and is enabled
4106 by default in C99 and C++11 modes (and newer).  This warning level does
4107 not warn about left-shifting 1 into the sign bit.  (However, in C, such
4108 an overflow is still rejected in contexts where an integer constant expression
4109 is required.)
4110
4111 @item -Wshift-overflow=2
4112 This warning level also warns about left-shifting 1 into the sign bit,
4113 unless C++14 mode is active.
4114 @end table
4115
4116 @item -Wswitch
4117 @opindex Wswitch
4118 @opindex Wno-switch
4119 Warn whenever a @code{switch} statement has an index of enumerated type
4120 and lacks a @code{case} for one or more of the named codes of that
4121 enumeration.  (The presence of a @code{default} label prevents this
4122 warning.)  @code{case} labels outside the enumeration range also
4123 provoke warnings when this option is used (even if there is a
4124 @code{default} label).
4125 This warning is enabled by @option{-Wall}.
4126
4127 @item -Wswitch-default
4128 @opindex Wswitch-default
4129 @opindex Wno-switch-default
4130 Warn whenever a @code{switch} statement does not have a @code{default}
4131 case.
4132
4133 @item -Wswitch-enum
4134 @opindex Wswitch-enum
4135 @opindex Wno-switch-enum
4136 Warn whenever a @code{switch} statement has an index of enumerated type
4137 and lacks a @code{case} for one or more of the named codes of that
4138 enumeration.  @code{case} labels outside the enumeration range also
4139 provoke warnings when this option is used.  The only difference
4140 between @option{-Wswitch} and this option is that this option gives a
4141 warning about an omitted enumeration code even if there is a
4142 @code{default} label.
4143
4144 @item -Wswitch-bool
4145 @opindex Wswitch-bool
4146 @opindex Wno-switch-bool
4147 Warn whenever a @code{switch} statement has an index of boolean type
4148 and the case values are outside the range of a boolean type.
4149 It is possible to suppress this warning by casting the controlling
4150 expression to a type other than @code{bool}.  For example:
4151 @smallexample
4152 @group
4153 switch ((int) (a == 4))
4154   @{
4155   @dots{}
4156   @}
4157 @end group
4158 @end smallexample
4159 This warning is enabled by default for C and C++ programs.
4160
4161 @item -Wsync-nand @r{(C and C++ only)}
4162 @opindex Wsync-nand
4163 @opindex Wno-sync-nand
4164 Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
4165 built-in functions are used.  These functions changed semantics in GCC 4.4.
4166
4167 @item -Wtrigraphs
4168 @opindex Wtrigraphs
4169 @opindex Wno-trigraphs
4170 Warn if any trigraphs are encountered that might change the meaning of
4171 the program (trigraphs within comments are not warned about).
4172 This warning is enabled by @option{-Wall}.
4173
4174 @item -Wunused-but-set-parameter
4175 @opindex Wunused-but-set-parameter
4176 @opindex Wno-unused-but-set-parameter
4177 Warn whenever a function parameter is assigned to, but otherwise unused
4178 (aside from its declaration).
4179
4180 To suppress this warning use the @code{unused} attribute
4181 (@pxref{Variable Attributes}).
4182
4183 This warning is also enabled by @option{-Wunused} together with
4184 @option{-Wextra}.
4185
4186 @item -Wunused-but-set-variable
4187 @opindex Wunused-but-set-variable
4188 @opindex Wno-unused-but-set-variable
4189 Warn whenever a local variable is assigned to, but otherwise unused
4190 (aside from its declaration).
4191 This warning is enabled by @option{-Wall}.
4192
4193 To suppress this warning use the @code{unused} attribute
4194 (@pxref{Variable Attributes}).
4195
4196 This warning is also enabled by @option{-Wunused}, which is enabled
4197 by @option{-Wall}.
4198
4199 @item -Wunused-function
4200 @opindex Wunused-function
4201 @opindex Wno-unused-function
4202 Warn whenever a static function is declared but not defined or a
4203 non-inline static function is unused.
4204 This warning is enabled by @option{-Wall}.
4205
4206 @item -Wunused-label
4207 @opindex Wunused-label
4208 @opindex Wno-unused-label
4209 Warn whenever a label is declared but not used.
4210 This warning is enabled by @option{-Wall}.
4211
4212 To suppress this warning use the @code{unused} attribute
4213 (@pxref{Variable Attributes}).
4214
4215 @item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
4216 @opindex Wunused-local-typedefs
4217 Warn when a typedef locally defined in a function is not used.
4218 This warning is enabled by @option{-Wall}.
4219
4220 @item -Wunused-parameter
4221 @opindex Wunused-parameter
4222 @opindex Wno-unused-parameter
4223 Warn whenever a function parameter is unused aside from its declaration.
4224
4225 To suppress this warning use the @code{unused} attribute
4226 (@pxref{Variable Attributes}).
4227
4228 @item -Wno-unused-result
4229 @opindex Wunused-result
4230 @opindex Wno-unused-result
4231 Do not warn if a caller of a function marked with attribute
4232 @code{warn_unused_result} (@pxref{Function Attributes}) does not use
4233 its return value. The default is @option{-Wunused-result}.
4234
4235 @item -Wunused-variable
4236 @opindex Wunused-variable
4237 @opindex Wno-unused-variable
4238 Warn whenever a local or static variable is unused aside from its
4239 declaration. This option implies @option{-Wunused-const-variable} for C,
4240 but not for C++. This warning is enabled by @option{-Wall}.
4241
4242 To suppress this warning use the @code{unused} attribute
4243 (@pxref{Variable Attributes}).
4244
4245 @item -Wunused-const-variable
4246 @opindex Wunused-const-variable
4247 @opindex Wno-unused-const-variable
4248 Warn whenever a constant static variable is unused aside from its declaration.
4249 This warning is enabled by @option{-Wunused-variable} for C, but not for C++.
4250 In C++ this is normally not an error since const variables take the place of
4251 @code{#define}s in C++.
4252
4253 To suppress this warning use the @code{unused} attribute
4254 (@pxref{Variable Attributes}).
4255
4256 @item -Wunused-value
4257 @opindex Wunused-value
4258 @opindex Wno-unused-value
4259 Warn whenever a statement computes a result that is explicitly not
4260 used. To suppress this warning cast the unused expression to
4261 @code{void}. This includes an expression-statement or the left-hand
4262 side of a comma expression that contains no side effects. For example,
4263 an expression such as @code{x[i,j]} causes a warning, while
4264 @code{x[(void)i,j]} does not.
4265
4266 This warning is enabled by @option{-Wall}.
4267
4268 @item -Wunused
4269 @opindex Wunused
4270 @opindex Wno-unused
4271 All the above @option{-Wunused} options combined.
4272
4273 In order to get a warning about an unused function parameter, you must
4274 either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
4275 @option{-Wunused}), or separately specify @option{-Wunused-parameter}.
4276
4277 @item -Wuninitialized
4278 @opindex Wuninitialized
4279 @opindex Wno-uninitialized
4280 Warn if an automatic variable is used without first being initialized
4281 or if a variable may be clobbered by a @code{setjmp} call. In C++,
4282 warn if a non-static reference or non-static @code{const} member
4283 appears in a class without constructors.
4284
4285 If you want to warn about code that uses the uninitialized value of the
4286 variable in its own initializer, use the @option{-Winit-self} option.
4287
4288 These warnings occur for individual uninitialized or clobbered
4289 elements of structure, union or array variables as well as for
4290 variables that are uninitialized or clobbered as a whole.  They do
4291 not occur for variables or elements declared @code{volatile}.  Because
4292 these warnings depend on optimization, the exact variables or elements
4293 for which there are warnings depends on the precise optimization
4294 options and version of GCC used.
4295
4296 Note that there may be no warning about a variable that is used only
4297 to compute a value that itself is never used, because such
4298 computations may be deleted by data flow analysis before the warnings
4299 are printed.
4300
4301 @item -Wmaybe-uninitialized
4302 @opindex Wmaybe-uninitialized
4303 @opindex Wno-maybe-uninitialized
4304 For an automatic variable, if there exists a path from the function
4305 entry to a use of the variable that is initialized, but there exist
4306 some other paths for which the variable is not initialized, the compiler
4307 emits a warning if it cannot prove the uninitialized paths are not
4308 executed at run time. These warnings are made optional because GCC is
4309 not smart enough to see all the reasons why the code might be correct
4310 in spite of appearing to have an error.  Here is one example of how
4311 this can happen:
4312
4313 @smallexample
4314 @group
4315 @{
4316   int x;
4317   switch (y)
4318     @{
4319     case 1: x = 1;
4320       break;
4321     case 2: x = 4;
4322       break;
4323     case 3: x = 5;
4324     @}
4325   foo (x);
4326 @}
4327 @end group
4328 @end smallexample
4329
4330 @noindent
4331 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
4332 always initialized, but GCC doesn't know this. To suppress the
4333 warning, you need to provide a default case with assert(0) or
4334 similar code.
4335
4336 @cindex @code{longjmp} warnings
4337 This option also warns when a non-volatile automatic variable might be
4338 changed by a call to @code{longjmp}.  These warnings as well are possible
4339 only in optimizing compilation.
4340
4341 The compiler sees only the calls to @code{setjmp}.  It cannot know
4342 where @code{longjmp} will be called; in fact, a signal handler could
4343 call it at any point in the code.  As a result, you may get a warning
4344 even when there is in fact no problem because @code{longjmp} cannot
4345 in fact be called at the place that would cause a problem.
4346
4347 Some spurious warnings can be avoided if you declare all the functions
4348 you use that never return as @code{noreturn}.  @xref{Function
4349 Attributes}.
4350
4351 This warning is enabled by @option{-Wall} or @option{-Wextra}.
4352
4353 @item -Wunknown-pragmas
4354 @opindex Wunknown-pragmas
4355 @opindex Wno-unknown-pragmas
4356 @cindex warning for unknown pragmas
4357 @cindex unknown pragmas, warning
4358 @cindex pragmas, warning of unknown
4359 Warn when a @code{#pragma} directive is encountered that is not understood by 
4360 GCC@.  If this command-line option is used, warnings are even issued
4361 for unknown pragmas in system header files.  This is not the case if
4362 the warnings are only enabled by the @option{-Wall} command-line option.
4363
4364 @item -Wno-pragmas
4365 @opindex Wno-pragmas
4366 @opindex Wpragmas
4367 Do not warn about misuses of pragmas, such as incorrect parameters,
4368 invalid syntax, or conflicts between pragmas.  See also
4369 @option{-Wunknown-pragmas}.
4370
4371 @item -Wstrict-aliasing
4372 @opindex Wstrict-aliasing
4373 @opindex Wno-strict-aliasing
4374 This option is only active when @option{-fstrict-aliasing} is active.
4375 It warns about code that might break the strict aliasing rules that the
4376 compiler is using for optimization.  The warning does not catch all
4377 cases, but does attempt to catch the more common pitfalls.  It is
4378 included in @option{-Wall}.
4379 It is equivalent to @option{-Wstrict-aliasing=3}
4380
4381 @item -Wstrict-aliasing=n
4382 @opindex Wstrict-aliasing=n
4383 This option is only active when @option{-fstrict-aliasing} is active.
4384 It warns about code that might break the strict aliasing rules that the
4385 compiler is using for optimization.
4386 Higher levels correspond to higher accuracy (fewer false positives).
4387 Higher levels also correspond to more effort, similar to the way @option{-O} 
4388 works.
4389 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.
4390
4391 Level 1: Most aggressive, quick, least accurate.
4392 Possibly useful when higher levels
4393 do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
4394 false negatives.  However, it has many false positives.
4395 Warns for all pointer conversions between possibly incompatible types,
4396 even if never dereferenced.  Runs in the front end only.
4397
4398 Level 2: Aggressive, quick, not too precise.
4399 May still have many false positives (not as many as level 1 though),
4400 and few false negatives (but possibly more than level 1).
4401 Unlike level 1, it only warns when an address is taken.  Warns about
4402 incomplete types.  Runs in the front end only.
4403
4404 Level 3 (default for @option{-Wstrict-aliasing}):
4405 Should have very few false positives and few false
4406 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
4407 Takes care of the common pun+dereference pattern in the front end:
4408 @code{*(int*)&some_float}.
4409 If optimization is enabled, it also runs in the back end, where it deals
4410 with multiple statement cases using flow-sensitive points-to information.
4411 Only warns when the converted pointer is dereferenced.
4412 Does not warn about incomplete types.
4413
4414 @item -Wstrict-overflow
4415 @itemx -Wstrict-overflow=@var{n}
4416 @opindex Wstrict-overflow
4417 @opindex Wno-strict-overflow
4418 This option is only active when @option{-fstrict-overflow} is active.
4419 It warns about cases where the compiler optimizes based on the
4420 assumption that signed overflow does not occur.  Note that it does not
4421 warn about all cases where the code might overflow: it only warns
4422 about cases where the compiler implements some optimization.  Thus
4423 this warning depends on the optimization level.
4424
4425 An optimization that assumes that signed overflow does not occur is
4426 perfectly safe if the values of the variables involved are such that
4427 overflow never does, in fact, occur.  Therefore this warning can
4428 easily give a false positive: a warning about code that is not
4429 actually a problem.  To help focus on important issues, several
4430 warning levels are defined.  No warnings are issued for the use of
4431 undefined signed overflow when estimating how many iterations a loop
4432 requires, in particular when determining whether a loop will be
4433 executed at all.
4434
4435 @table @gcctabopt
4436 @item -Wstrict-overflow=1
4437 Warn about cases that are both questionable and easy to avoid.  For
4438 example,  with @option{-fstrict-overflow}, the compiler simplifies
4439 @code{x + 1 > x} to @code{1}.  This level of
4440 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
4441 are not, and must be explicitly requested.
4442
4443 @item -Wstrict-overflow=2
4444 Also warn about other cases where a comparison is simplified to a
4445 constant.  For example: @code{abs (x) >= 0}.  This can only be
4446 simplified when @option{-fstrict-overflow} is in effect, because
4447 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
4448 zero.  @option{-Wstrict-overflow} (with no level) is the same as
4449 @option{-Wstrict-overflow=2}.
4450
4451 @item -Wstrict-overflow=3
4452 Also warn about other cases where a comparison is simplified.  For
4453 example: @code{x + 1 > 1} is simplified to @code{x > 0}.
4454
4455 @item -Wstrict-overflow=4
4456 Also warn about other simplifications not covered by the above cases.
4457 For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.
4458
4459 @item -Wstrict-overflow=5
4460 Also warn about cases where the compiler reduces the magnitude of a
4461 constant involved in a comparison.  For example: @code{x + 2 > y} is
4462 simplified to @code{x + 1 >= y}.  This is reported only at the
4463 highest warning level because this simplification applies to many
4464 comparisons, so this warning level gives a very large number of
4465 false positives.
4466 @end table
4467
4468 @item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]}
4469 @opindex Wsuggest-attribute=
4470 @opindex Wno-suggest-attribute=
4471 Warn for cases where adding an attribute may be beneficial. The
4472 attributes currently supported are listed below.
4473
4474 @table @gcctabopt
4475 @item -Wsuggest-attribute=pure
4476 @itemx -Wsuggest-attribute=const
4477 @itemx -Wsuggest-attribute=noreturn
4478 @opindex Wsuggest-attribute=pure
4479 @opindex Wno-suggest-attribute=pure
4480 @opindex Wsuggest-attribute=const
4481 @opindex Wno-suggest-attribute=const
4482 @opindex Wsuggest-attribute=noreturn
4483 @opindex Wno-suggest-attribute=noreturn
4484
4485 Warn about functions that might be candidates for attributes
4486 @code{pure}, @code{const} or @code{noreturn}.  The compiler only warns for
4487 functions visible in other compilation units or (in the case of @code{pure} and
4488 @code{const}) if it cannot prove that the function returns normally. A function
4489 returns normally if it doesn't contain an infinite loop or return abnormally
4490 by throwing, calling @code{abort} or trapping.  This analysis requires option
4491 @option{-fipa-pure-const}, which is enabled by default at @option{-O} and
4492 higher.  Higher optimization levels improve the accuracy of the analysis.
4493
4494 @item -Wsuggest-attribute=format
4495 @itemx -Wmissing-format-attribute
4496 @opindex Wsuggest-attribute=format
4497 @opindex Wmissing-format-attribute
4498 @opindex Wno-suggest-attribute=format
4499 @opindex Wno-missing-format-attribute
4500 @opindex Wformat
4501 @opindex Wno-format
4502
4503 Warn about function pointers that might be candidates for @code{format}
4504 attributes.  Note these are only possible candidates, not absolute ones.
4505 GCC guesses that function pointers with @code{format} attributes that
4506 are used in assignment, initialization, parameter passing or return
4507 statements should have a corresponding @code{format} attribute in the
4508 resulting type.  I.e.@: the left-hand side of the assignment or
4509 initialization, the type of the parameter variable, or the return type
4510 of the containing function respectively should also have a @code{format}
4511 attribute to avoid the warning.
4512
4513 GCC also warns about function definitions that might be
4514 candidates for @code{format} attributes.  Again, these are only
4515 possible candidates.  GCC guesses that @code{format} attributes
4516 might be appropriate for any function that calls a function like
4517 @code{vprintf} or @code{vscanf}, but this might not always be the
4518 case, and some functions for which @code{format} attributes are
4519 appropriate may not be detected.
4520 @end table
4521
4522 @item -Wsuggest-final-types
4523 @opindex Wno-suggest-final-types
4524 @opindex Wsuggest-final-types
4525 Warn about types with virtual methods where code quality would be improved
4526 if the type were declared with the C++11 @code{final} specifier, 
4527 or, if possible,
4528 declared in an anonymous namespace. This allows GCC to more aggressively
4529 devirtualize the polymorphic calls. This warning is more effective with link
4530 time optimization, where the information about the class hierarchy graph is
4531 more complete.
4532
4533 @item -Wsuggest-final-methods
4534 @opindex Wno-suggest-final-methods
4535 @opindex Wsuggest-final-methods
4536 Warn about virtual methods where code quality would be improved if the method
4537 were declared with the C++11 @code{final} specifier, 
4538 or, if possible, its type were
4539 declared in an anonymous namespace or with the @code{final} specifier.
4540 This warning is
4541 more effective with link time optimization, where the information about the
4542 class hierarchy graph is more complete. It is recommended to first consider
4543 suggestions of @option{-Wsuggest-final-types} and then rebuild with new
4544 annotations.
4545
4546 @item -Wsuggest-override
4547 Warn about overriding virtual functions that are not marked with the override
4548 keyword.
4549
4550 @item -Warray-bounds
4551 @itemx -Warray-bounds=@var{n}
4552 @opindex Wno-array-bounds
4553 @opindex Warray-bounds
4554 This option is only active when @option{-ftree-vrp} is active
4555 (default for @option{-O2} and above). It warns about subscripts to arrays
4556 that are always out of bounds. This warning is enabled by @option{-Wall}.
4557
4558 @table @gcctabopt
4559 @item -Warray-bounds=1
4560 This is the warning level of @option{-Warray-bounds} and is enabled
4561 by @option{-Wall}; higher levels are not, and must be explicitly requested.
4562
4563 @item -Warray-bounds=2
4564 This warning level also warns about out of bounds access for
4565 arrays at the end of a struct and for arrays accessed through
4566 pointers. This warning level may give a larger number of
4567 false positives and is deactivated by default.
4568 @end table
4569
4570 @item -Wbool-compare
4571 @opindex Wno-bool-compare
4572 @opindex Wbool-compare
4573 Warn about boolean expression compared with an integer value different from
4574 @code{true}/@code{false}.  For instance, the following comparison is
4575 always false:
4576 @smallexample
4577 int n = 5;
4578 @dots{}
4579 if ((n > 1) == 2) @{ @dots{} @}
4580 @end smallexample
4581 This warning is enabled by @option{-Wall}.
4582
4583 @item -Wduplicated-cond
4584 @opindex Wno-duplicated-cond
4585 @opindex Wduplicated-cond
4586 Warn about duplicated conditions in an if-else-if chain.  For instance,
4587 warn for the following code:
4588 @smallexample
4589 if (p->q != NULL) @{ @dots{} @}
4590 else if (p->q != NULL) @{ @dots{} @}
4591 @end smallexample
4592 This warning is enabled by @option{-Wall}.
4593
4594 @item -Wframe-address
4595 @opindex Wno-frame-address
4596 @opindex Wframe-address
4597 Warn when the @samp{__builtin_frame_address} or @samp{__builtin_return_address}
4598 is called with an argument greater than 0.  Such calls may return indeterminate
4599 values or crash the program.  The warning is included in @option{-Wall}.
4600
4601 @item -Wno-discarded-qualifiers @r{(C and Objective-C only)}
4602 @opindex Wno-discarded-qualifiers
4603 @opindex Wdiscarded-qualifiers
4604 Do not warn if type qualifiers on pointers are being discarded.
4605 Typically, the compiler warns if a @code{const char *} variable is
4606 passed to a function that takes a @code{char *} parameter.  This option
4607 can be used to suppress such a warning.
4608
4609 @item -Wno-discarded-array-qualifiers @r{(C and Objective-C only)}
4610 @opindex Wno-discarded-array-qualifiers
4611 @opindex Wdiscarded-array-qualifiers
4612 Do not warn if type qualifiers on arrays which are pointer targets
4613 are being discarded. Typically, the compiler warns if a
4614 @code{const int (*)[]} variable is passed to a function that
4615 takes a @code{int (*)[]} parameter.  This option can be used to
4616 suppress such a warning.
4617
4618 @item -Wno-incompatible-pointer-types @r{(C and Objective-C only)}
4619 @opindex Wno-incompatible-pointer-types
4620 @opindex Wincompatible-pointer-types
4621 Do not warn when there is a conversion between pointers that have incompatible
4622 types.  This warning is for cases not covered by @option{-Wno-pointer-sign},
4623 which warns for pointer argument passing or assignment with different
4624 signedness.
4625
4626 @item -Wno-int-conversion @r{(C and Objective-C only)}
4627 @opindex Wno-int-conversion
4628 @opindex Wint-conversion
4629 Do not warn about incompatible integer to pointer and pointer to integer
4630 conversions.  This warning is about implicit conversions; for explicit
4631 conversions the warnings @option{-Wno-int-to-pointer-cast} and
4632 @option{-Wno-pointer-to-int-cast} may be used.
4633
4634 @item -Wno-div-by-zero
4635 @opindex Wno-div-by-zero
4636 @opindex Wdiv-by-zero
4637 Do not warn about compile-time integer division by zero.  Floating-point
4638 division by zero is not warned about, as it can be a legitimate way of
4639 obtaining infinities and NaNs.
4640
4641 @item -Wsystem-headers
4642 @opindex Wsystem-headers
4643 @opindex Wno-system-headers
4644 @cindex warnings from system headers
4645 @cindex system headers, warnings from
4646 Print warning messages for constructs found in system header files.
4647 Warnings from system headers are normally suppressed, on the assumption
4648 that they usually do not indicate real problems and would only make the
4649 compiler output harder to read.  Using this command-line option tells
4650 GCC to emit warnings from system headers as if they occurred in user
4651 code.  However, note that using @option{-Wall} in conjunction with this
4652 option does @emph{not} warn about unknown pragmas in system
4653 headers---for that, @option{-Wunknown-pragmas} must also be used.
4654
4655 @item -Wtautological-compare
4656 @opindex Wtautological-compare
4657 @opindex Wno-tautological-compare
4658 Warn if a self-comparison always evaluates to true or false.  This
4659 warning detects various mistakes such as:
4660 @smallexample
4661 int i = 1;
4662 @dots{}
4663 if (i > i) @{ @dots{} @}
4664 @end smallexample
4665 This warning is enabled by @option{-Wall}.
4666
4667 @item -Wtrampolines
4668 @opindex Wtrampolines
4669 @opindex Wno-trampolines
4670 Warn about trampolines generated for pointers to nested functions.
4671 A trampoline is a small piece of data or code that is created at run
4672 time on the stack when the address of a nested function is taken, and is
4673 used to call the nested function indirectly.  For some targets, it is
4674 made up of data only and thus requires no special treatment.  But, for
4675 most targets, it is made up of code and thus requires the stack to be
4676 made executable in order for the program to work properly.
4677
4678 @item -Wfloat-equal
4679 @opindex Wfloat-equal
4680 @opindex Wno-float-equal
4681 Warn if floating-point values are used in equality comparisons.
4682
4683 The idea behind this is that sometimes it is convenient (for the
4684 programmer) to consider floating-point values as approximations to
4685 infinitely precise real numbers.  If you are doing this, then you need
4686 to compute (by analyzing the code, or in some other way) the maximum or
4687 likely maximum error that the computation introduces, and allow for it
4688 when performing comparisons (and when producing output, but that's a
4689 different problem).  In particular, instead of testing for equality, you
4690 should check to see whether the two values have ranges that overlap; and
4691 this is done with the relational operators, so equality comparisons are
4692 probably mistaken.
4693
4694 @item -Wtraditional @r{(C and Objective-C only)}
4695 @opindex Wtraditional
4696 @opindex Wno-traditional
4697 Warn about certain constructs that behave differently in traditional and
4698 ISO C@.  Also warn about ISO C constructs that have no traditional C
4699 equivalent, and/or problematic constructs that should be avoided.
4700
4701 @itemize @bullet
4702 @item
4703 Macro parameters that appear within string literals in the macro body.
4704 In traditional C macro replacement takes place within string literals,
4705 but in ISO C it does not.
4706
4707 @item
4708 In traditional C, some preprocessor directives did not exist.
4709 Traditional preprocessors only considered a line to be a directive
4710 if the @samp{#} appeared in column 1 on the line.  Therefore
4711 @option{-Wtraditional} warns about directives that traditional C
4712 understands but ignores because the @samp{#} does not appear as the
4713 first character on the line.  It also suggests you hide directives like
4714 @code{#pragma} not understood by traditional C by indenting them.  Some
4715 traditional implementations do not recognize @code{#elif}, so this option
4716 suggests avoiding it altogether.
4717
4718 @item
4719 A function-like macro that appears without arguments.
4720
4721 @item
4722 The unary plus operator.
4723
4724 @item
4725 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
4726 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
4727 constants.)  Note, these suffixes appear in macros defined in the system
4728 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
4729 Use of these macros in user code might normally lead to spurious
4730 warnings, however GCC's integrated preprocessor has enough context to
4731 avoid warning in these cases.
4732
4733 @item
4734 A function declared external in one block and then used after the end of
4735 the block.
4736
4737 @item
4738 A @code{switch} statement has an operand of type @code{long}.
4739
4740 @item
4741 A non-@code{static} function declaration follows a @code{static} one.
4742 This construct is not accepted by some traditional C compilers.
4743
4744 @item
4745 The ISO type of an integer constant has a different width or
4746 signedness from its traditional type.  This warning is only issued if
4747 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
4748 typically represent bit patterns, are not warned about.
4749
4750 @item
4751 Usage of ISO string concatenation is detected.
4752
4753 @item
4754 Initialization of automatic aggregates.
4755
4756 @item
4757 Identifier conflicts with labels.  Traditional C lacks a separate
4758 namespace for labels.
4759
4760 @item
4761 Initialization of unions.  If the initializer is zero, the warning is
4762 omitted.  This is done under the assumption that the zero initializer in
4763 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
4764 initializer warnings and relies on default initialization to zero in the
4765 traditional C case.
4766
4767 @item
4768 Conversions by prototypes between fixed/floating-point values and vice
4769 versa.  The absence of these prototypes when compiling with traditional
4770 C causes serious problems.  This is a subset of the possible
4771 conversion warnings; for the full set use @option{-Wtraditional-conversion}.
4772
4773 @item
4774 Use of ISO C style function definitions.  This warning intentionally is
4775 @emph{not} issued for prototype declarations or variadic functions
4776 because these ISO C features appear in your code when using
4777 libiberty's traditional C compatibility macros, @code{PARAMS} and
4778 @code{VPARAMS}.  This warning is also bypassed for nested functions
4779 because that feature is already a GCC extension and thus not relevant to
4780 traditional C compatibility.
4781 @end itemize
4782
4783 @item -Wtraditional-conversion @r{(C and Objective-C only)}
4784 @opindex Wtraditional-conversion
4785 @opindex Wno-traditional-conversion
4786 Warn if a prototype causes a type conversion that is different from what
4787 would happen to the same argument in the absence of a prototype.  This
4788 includes conversions of fixed point to floating and vice versa, and
4789 conversions changing the width or signedness of a fixed-point argument
4790 except when the same as the default promotion.
4791
4792 @item -Wdeclaration-after-statement @r{(C and Objective-C only)}
4793 @opindex Wdeclaration-after-statement
4794 @opindex Wno-declaration-after-statement
4795 Warn when a declaration is found after a statement in a block.  This
4796 construct, known from C++, was introduced with ISO C99 and is by default
4797 allowed in GCC@.  It is not supported by ISO C90.  @xref{Mixed Declarations}.
4798
4799 @item -Wundef
4800 @opindex Wundef
4801 @opindex Wno-undef
4802 Warn if an undefined identifier is evaluated in an @code{#if} directive.
4803
4804 @item -Wno-endif-labels
4805 @opindex Wno-endif-labels
4806 @opindex Wendif-labels
4807 Do not warn whenever an @code{#else} or an @code{#endif} are followed by text.
4808
4809 @item -Wshadow
4810 @opindex Wshadow
4811 @opindex Wno-shadow
4812 Warn whenever a local variable or type declaration shadows another
4813 variable, parameter, type, class member (in C++), or instance variable
4814 (in Objective-C) or whenever a built-in function is shadowed. Note
4815 that in C++, the compiler warns if a local variable shadows an
4816 explicit typedef, but not if it shadows a struct/class/enum.
4817
4818 @item -Wno-shadow-ivar @r{(Objective-C only)}
4819 @opindex Wno-shadow-ivar
4820 @opindex Wshadow-ivar
4821 Do not warn whenever a local variable shadows an instance variable in an
4822 Objective-C method.
4823
4824 @item -Wlarger-than=@var{len}
4825 @opindex Wlarger-than=@var{len}
4826 @opindex Wlarger-than-@var{len}
4827 Warn whenever an object of larger than @var{len} bytes is defined.
4828
4829 @item -Wframe-larger-than=@var{len}
4830 @opindex Wframe-larger-than
4831 Warn if the size of a function frame is larger than @var{len} bytes.
4832 The computation done to determine the stack frame size is approximate
4833 and not conservative.
4834 The actual requirements may be somewhat greater than @var{len}
4835 even if you do not get a warning.  In addition, any space allocated
4836 via @code{alloca}, variable-length arrays, or related constructs
4837 is not included by the compiler when determining
4838 whether or not to issue a warning.
4839
4840 @item -Wno-free-nonheap-object
4841 @opindex Wno-free-nonheap-object
4842 @opindex Wfree-nonheap-object
4843 Do not warn when attempting to free an object that was not allocated
4844 on the heap.
4845
4846 @item -Wstack-usage=@var{len}
4847 @opindex Wstack-usage
4848 Warn if the stack usage of a function might be larger than @var{len} bytes.
4849 The computation done to determine the stack usage is conservative.
4850 Any space allocated via @code{alloca}, variable-length arrays, or related
4851 constructs is included by the compiler when determining whether or not to
4852 issue a warning.
4853
4854 The message is in keeping with the output of @option{-fstack-usage}.
4855
4856 @itemize
4857 @item
4858 If the stack usage is fully static but exceeds the specified amount, it's:
4859
4860 @smallexample
4861   warning: stack usage is 1120 bytes
4862 @end smallexample
4863 @item
4864 If the stack usage is (partly) dynamic but bounded, it's:
4865
4866 @smallexample
4867   warning: stack usage might be 1648 bytes
4868 @end smallexample
4869 @item
4870 If the stack usage is (partly) dynamic and not bounded, it's:
4871
4872 @smallexample
4873   warning: stack usage might be unbounded
4874 @end smallexample
4875 @end itemize
4876
4877 @item -Wunsafe-loop-optimizations
4878 @opindex Wunsafe-loop-optimizations
4879 @opindex Wno-unsafe-loop-optimizations
4880 Warn if the loop cannot be optimized because the compiler cannot
4881 assume anything on the bounds of the loop indices.  With
4882 @option{-funsafe-loop-optimizations} warn if the compiler makes
4883 such assumptions.
4884
4885 @item -Wno-pedantic-ms-format @r{(MinGW targets only)}
4886 @opindex Wno-pedantic-ms-format
4887 @opindex Wpedantic-ms-format
4888 When used in combination with @option{-Wformat}
4889 and @option{-pedantic} without GNU extensions, this option
4890 disables the warnings about non-ISO @code{printf} / @code{scanf} format
4891 width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets,
4892 which depend on the MS runtime.
4893
4894 @item -Wplacement-new
4895 @opindex Wplacement-new
4896 @opindex Wno-placement-new
4897 Warn about placement new expressions with undefined behavior, such as
4898 constructing an object in a buffer that is smaller than the type of
4899 the object.
4900
4901 @item -Wpointer-arith
4902 @opindex Wpointer-arith
4903 @opindex Wno-pointer-arith
4904 Warn about anything that depends on the ``size of'' a function type or
4905 of @code{void}.  GNU C assigns these types a size of 1, for
4906 convenience in calculations with @code{void *} pointers and pointers
4907 to functions.  In C++, warn also when an arithmetic operation involves
4908 @code{NULL}.  This warning is also enabled by @option{-Wpedantic}.
4909
4910 @item -Wtype-limits
4911 @opindex Wtype-limits
4912 @opindex Wno-type-limits
4913 Warn if a comparison is always true or always false due to the limited
4914 range of the data type, but do not warn for constant expressions.  For
4915 example, warn if an unsigned variable is compared against zero with
4916 @code{<} or @code{>=}.  This warning is also enabled by
4917 @option{-Wextra}.
4918
4919 @item -Wbad-function-cast @r{(C and Objective-C only)}
4920 @opindex Wbad-function-cast
4921 @opindex Wno-bad-function-cast
4922 Warn when a function call is cast to a non-matching type.
4923 For example, warn if a call to a function returning an integer type 
4924 is cast to a pointer type.
4925
4926 @item -Wc90-c99-compat @r{(C and Objective-C only)}
4927 @opindex Wc90-c99-compat
4928 @opindex Wno-c90-c99-compat
4929 Warn about features not present in ISO C90, but present in ISO C99.
4930 For instance, warn about use of variable length arrays, @code{long long}
4931 type, @code{bool} type, compound literals, designated initializers, and so
4932 on.  This option is independent of the standards mode.  Warnings are disabled
4933 in the expression that follows @code{__extension__}.
4934
4935 @item -Wc99-c11-compat @r{(C and Objective-C only)}
4936 @opindex Wc99-c11-compat
4937 @opindex Wno-c99-c11-compat
4938 Warn about features not present in ISO C99, but present in ISO C11.
4939 For instance, warn about use of anonymous structures and unions,
4940 @code{_Atomic} type qualifier, @code{_Thread_local} storage-class specifier,
4941 @code{_Alignas} specifier, @code{Alignof} operator, @code{_Generic} keyword,
4942 and so on.  This option is independent of the standards mode.  Warnings are
4943 disabled in the expression that follows @code{__extension__}.
4944
4945 @item -Wc++-compat @r{(C and Objective-C only)}
4946 @opindex Wc++-compat
4947 Warn about ISO C constructs that are outside of the common subset of
4948 ISO C and ISO C++, e.g.@: request for implicit conversion from
4949 @code{void *} to a pointer to non-@code{void} type.
4950
4951 @item -Wc++11-compat @r{(C++ and Objective-C++ only)}
4952 @opindex Wc++11-compat
4953 Warn about C++ constructs whose meaning differs between ISO C++ 1998
4954 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
4955 in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
4956 enabled by @option{-Wall}.
4957
4958 @item -Wc++14-compat @r{(C++ and Objective-C++ only)}
4959 @opindex Wc++14-compat
4960 Warn about C++ constructs whose meaning differs between ISO C++ 2011
4961 and ISO C++ 2014.  This warning is enabled by @option{-Wall}.
4962
4963 @item -Wcast-qual
4964 @opindex Wcast-qual
4965 @opindex Wno-cast-qual
4966 Warn whenever a pointer is cast so as to remove a type qualifier from
4967 the target type.  For example, warn if a @code{const char *} is cast
4968 to an ordinary @code{char *}.
4969
4970 Also warn when making a cast that introduces a type qualifier in an
4971 unsafe way.  For example, casting @code{char **} to @code{const char **}
4972 is unsafe, as in this example:
4973
4974 @smallexample
4975   /* p is char ** value.  */
4976   const char **q = (const char **) p;
4977   /* Assignment of readonly string to const char * is OK.  */
4978   *q = "string";
4979   /* Now char** pointer points to read-only memory.  */
4980   **p = 'b';
4981 @end smallexample
4982
4983 @item -Wcast-align
4984 @opindex Wcast-align
4985 @opindex Wno-cast-align
4986 Warn whenever a pointer is cast such that the required alignment of the
4987 target is increased.  For example, warn if a @code{char *} is cast to
4988 an @code{int *} on machines where integers can only be accessed at
4989 two- or four-byte boundaries.
4990
4991 @item -Wwrite-strings
4992 @opindex Wwrite-strings
4993 @opindex Wno-write-strings
4994 When compiling C, give string constants the type @code{const
4995 char[@var{length}]} so that copying the address of one into a
4996 non-@code{const} @code{char *} pointer produces a warning.  These
4997 warnings help you find at compile time code that can try to write
4998 into a string constant, but only if you have been very careful about
4999 using @code{const} in declarations and prototypes.  Otherwise, it is
5000 just a nuisance. This is why we did not make @option{-Wall} request
5001 these warnings.
5002
5003 When compiling C++, warn about the deprecated conversion from string
5004 literals to @code{char *}.  This warning is enabled by default for C++
5005 programs.
5006
5007 @item -Wclobbered
5008 @opindex Wclobbered
5009 @opindex Wno-clobbered
5010 Warn for variables that might be changed by @code{longjmp} or
5011 @code{vfork}.  This warning is also enabled by @option{-Wextra}.
5012
5013 @item -Wconditionally-supported @r{(C++ and Objective-C++ only)}
5014 @opindex Wconditionally-supported
5015 @opindex Wno-conditionally-supported
5016 Warn for conditionally-supported (C++11 [intro.defs]) constructs.
5017
5018 @item -Wconversion
5019 @opindex Wconversion
5020 @opindex Wno-conversion
5021 Warn for implicit conversions that may alter a value. This includes
5022 conversions between real and integer, like @code{abs (x)} when
5023 @code{x} is @code{double}; conversions between signed and unsigned,
5024 like @code{unsigned ui = -1}; and conversions to smaller types, like
5025 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
5026 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
5027 changed by the conversion like in @code{abs (2.0)}.  Warnings about
5028 conversions between signed and unsigned integers can be disabled by
5029 using @option{-Wno-sign-conversion}.
5030
5031 For C++, also warn for confusing overload resolution for user-defined
5032 conversions; and conversions that never use a type conversion
5033 operator: conversions to @code{void}, the same type, a base class or a
5034 reference to them. Warnings about conversions between signed and
5035 unsigned integers are disabled by default in C++ unless
5036 @option{-Wsign-conversion} is explicitly enabled.
5037
5038 @item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
5039 @opindex Wconversion-null
5040 @opindex Wno-conversion-null
5041 Do not warn for conversions between @code{NULL} and non-pointer
5042 types. @option{-Wconversion-null} is enabled by default.
5043
5044 @item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
5045 @opindex Wzero-as-null-pointer-constant
5046 @opindex Wno-zero-as-null-pointer-constant
5047 Warn when a literal '0' is used as null pointer constant.  This can
5048 be useful to facilitate the conversion to @code{nullptr} in C++11.
5049
5050 @item -Wsubobject-linkage @r{(C++ and Objective-C++ only)}
5051 @opindex Wsubobject-linkage
5052 @opindex Wno-subobject-linkage
5053 Warn if a class type has a base or a field whose type uses the anonymous
5054 namespace or depends on a type with no linkage.  If a type A depends on
5055 a type B with no or internal linkage, defining it in multiple
5056 translation units would be an ODR violation because the meaning of B
5057 is different in each translation unit.  If A only appears in a single
5058 translation unit, the best way to silence the warning is to give it
5059 internal linkage by putting it in an anonymous namespace as well.  The
5060 compiler doesn't give this warning for types defined in the main .C
5061 file, as those are unlikely to have multiple definitions.
5062 @option{-Wsubobject-linkage} is enabled by default.
5063
5064 @item -Wdate-time
5065 @opindex Wdate-time
5066 @opindex Wno-date-time
5067 Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
5068 are encountered as they might prevent bit-wise-identical reproducible
5069 compilations.
5070
5071 @item -Wdelete-incomplete @r{(C++ and Objective-C++ only)}
5072 @opindex Wdelete-incomplete
5073 @opindex Wno-delete-incomplete
5074 Warn when deleting a pointer to incomplete type, which may cause
5075 undefined behavior at runtime.  This warning is enabled by default.
5076
5077 @item -Wuseless-cast @r{(C++ and Objective-C++ only)}
5078 @opindex Wuseless-cast
5079 @opindex Wno-useless-cast
5080 Warn when an expression is casted to its own type.
5081
5082 @item -Wempty-body
5083 @opindex Wempty-body
5084 @opindex Wno-empty-body
5085 Warn if an empty body occurs in an @code{if}, @code{else} or @code{do
5086 while} statement.  This warning is also enabled by @option{-Wextra}.
5087
5088 @item -Wenum-compare
5089 @opindex Wenum-compare
5090 @opindex Wno-enum-compare
5091 Warn about a comparison between values of different enumerated types.
5092 In C++ enumeral mismatches in conditional expressions are also
5093 diagnosed and the warning is enabled by default.  In C this warning is 
5094 enabled by @option{-Wall}.
5095
5096 @item -Wjump-misses-init @r{(C, Objective-C only)}
5097 @opindex Wjump-misses-init
5098 @opindex Wno-jump-misses-init
5099 Warn if a @code{goto} statement or a @code{switch} statement jumps
5100 forward across the initialization of a variable, or jumps backward to a
5101 label after the variable has been initialized.  This only warns about
5102 variables that are initialized when they are declared.  This warning is
5103 only supported for C and Objective-C; in C++ this sort of branch is an
5104 error in any case.
5105
5106 @option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
5107 can be disabled with the @option{-Wno-jump-misses-init} option.
5108
5109 @item -Wsign-compare
5110 @opindex Wsign-compare
5111 @opindex Wno-sign-compare
5112 @cindex warning for comparison of signed and unsigned values
5113 @cindex comparison of signed and unsigned values, warning
5114 @cindex signed and unsigned values, comparison warning
5115 Warn when a comparison between signed and unsigned values could produce
5116 an incorrect result when the signed value is converted to unsigned.
5117 This warning is also enabled by @option{-Wextra}; to get the other warnings
5118 of @option{-Wextra} without this warning, use @option{-Wextra -Wno-sign-compare}.
5119
5120 @item -Wsign-conversion
5121 @opindex Wsign-conversion
5122 @opindex Wno-sign-conversion
5123 Warn for implicit conversions that may change the sign of an integer
5124 value, like assigning a signed integer expression to an unsigned
5125 integer variable. An explicit cast silences the warning. In C, this
5126 option is enabled also by @option{-Wconversion}.
5127
5128 @item -Wfloat-conversion
5129 @opindex Wfloat-conversion
5130 @opindex Wno-float-conversion
5131 Warn for implicit conversions that reduce the precision of a real value.
5132 This includes conversions from real to integer, and from higher precision
5133 real to lower precision real values.  This option is also enabled by
5134 @option{-Wconversion}.
5135
5136 @item -Wno-scalar-storage-order
5137 @opindex -Wno-scalar-storage-order
5138 @opindex -Wscalar-storage-order
5139 Do not warn on suspicious constructs involving reverse scalar storage order.
5140
5141 @item -Wsized-deallocation @r{(C++ and Objective-C++ only)}
5142 @opindex Wsized-deallocation
5143 @opindex Wno-sized-deallocation
5144 Warn about a definition of an unsized deallocation function
5145 @smallexample
5146 void operator delete (void *) noexcept;
5147 void operator delete[] (void *) noexcept;
5148 @end smallexample
5149 without a definition of the corresponding sized deallocation function
5150 @smallexample
5151 void operator delete (void *, std::size_t) noexcept;
5152 void operator delete[] (void *, std::size_t) noexcept;
5153 @end smallexample
5154 or vice versa.  Enabled by @option{-Wextra} along with
5155 @option{-fsized-deallocation}.
5156
5157 @item -Wsizeof-pointer-memaccess
5158 @opindex Wsizeof-pointer-memaccess
5159 @opindex Wno-sizeof-pointer-memaccess
5160 Warn for suspicious length parameters to certain string and memory built-in
5161 functions if the argument uses @code{sizeof}.  This warning warns e.g.@:
5162 about @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not an array,
5163 but a pointer, and suggests a possible fix, or about
5164 @code{memcpy (&foo, ptr, sizeof (&foo));}.  This warning is enabled by
5165 @option{-Wall}.
5166
5167 @item -Wsizeof-array-argument
5168 @opindex Wsizeof-array-argument
5169 @opindex Wno-sizeof-array-argument
5170 Warn when the @code{sizeof} operator is applied to a parameter that is
5171 declared as an array in a function definition.  This warning is enabled by
5172 default for C and C++ programs.
5173
5174 @item -Wmemset-transposed-args
5175 @opindex Wmemset-transposed-args
5176 @opindex Wno-memset-transposed-args
5177 Warn for suspicious calls to the @code{memset} built-in function, if the
5178 second argument is not zero and the third argument is zero.  This warns e.g.@
5179 about @code{memset (buf, sizeof buf, 0)} where most probably
5180 @code{memset (buf, 0, sizeof buf)} was meant instead.  The diagnostics
5181 is only emitted if the third argument is literal zero.  If it is some
5182 expression that is folded to zero, a cast of zero to some type, etc., 
5183 it is far less likely that the user has mistakenly exchanged the arguments 
5184 and no warning is emitted.  This warning is enabled by @option{-Wall}.
5185
5186 @item -Waddress
5187 @opindex Waddress
5188 @opindex Wno-address
5189 Warn about suspicious uses of memory addresses. These include using
5190 the address of a function in a conditional expression, such as
5191 @code{void func(void); if (func)}, and comparisons against the memory
5192 address of a string literal, such as @code{if (x == "abc")}.  Such
5193 uses typically indicate a programmer error: the address of a function
5194 always evaluates to true, so their use in a conditional usually
5195 indicate that the programmer forgot the parentheses in a function
5196 call; and comparisons against string literals result in unspecified
5197 behavior and are not portable in C, so they usually indicate that the
5198 programmer intended to use @code{strcmp}.  This warning is enabled by
5199 @option{-Wall}.
5200
5201 @item -Wlogical-op
5202 @opindex Wlogical-op
5203 @opindex Wno-logical-op
5204 Warn about suspicious uses of logical operators in expressions.
5205 This includes using logical operators in contexts where a
5206 bit-wise operator is likely to be expected.  Also warns when
5207 the operands of a logical operator are the same:
5208 @smallexample
5209 extern int a;
5210 if (a < 0 && a < 0) @{ @dots{} @}
5211 @end smallexample
5212
5213 @item -Wlogical-not-parentheses
5214 @opindex Wlogical-not-parentheses
5215 @opindex Wno-logical-not-parentheses
5216 Warn about logical not used on the left hand side operand of a comparison.
5217 This option does not warn if the RHS operand is of a boolean type.  Its
5218 purpose is to detect suspicious code like the following:
5219 @smallexample
5220 int a;
5221 @dots{}
5222 if (!a > 1) @{ @dots{} @}
5223 @end smallexample
5224
5225 It is possible to suppress the warning by wrapping the LHS into
5226 parentheses:
5227 @smallexample
5228 if ((!a) > 1) @{ @dots{} @}
5229 @end smallexample
5230
5231 This warning is enabled by @option{-Wall}.
5232
5233 @item -Waggregate-return
5234 @opindex Waggregate-return
5235 @opindex Wno-aggregate-return
5236 Warn if any functions that return structures or unions are defined or
5237 called.  (In languages where you can return an array, this also elicits
5238 a warning.)
5239
5240 @item -Wno-aggressive-loop-optimizations
5241 @opindex Wno-aggressive-loop-optimizations
5242 @opindex Waggressive-loop-optimizations
5243 Warn if in a loop with constant number of iterations the compiler detects
5244 undefined behavior in some statement during one or more of the iterations.
5245
5246 @item -Wno-attributes
5247 @opindex Wno-attributes
5248 @opindex Wattributes
5249 Do not warn if an unexpected @code{__attribute__} is used, such as
5250 unrecognized attributes, function attributes applied to variables,
5251 etc.  This does not stop errors for incorrect use of supported
5252 attributes.
5253
5254 @item -Wno-builtin-macro-redefined
5255 @opindex Wno-builtin-macro-redefined
5256 @opindex Wbuiltin-macro-redefined
5257 Do not warn if certain built-in macros are redefined.  This suppresses
5258 warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
5259 @code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
5260
5261 @item -Wstrict-prototypes @r{(C and Objective-C only)}
5262 @opindex Wstrict-prototypes
5263 @opindex Wno-strict-prototypes
5264 Warn if a function is declared or defined without specifying the
5265 argument types.  (An old-style function definition is permitted without
5266 a warning if preceded by a declaration that specifies the argument
5267 types.)
5268
5269 @item -Wold-style-declaration @r{(C and Objective-C only)}
5270 @opindex Wold-style-declaration
5271 @opindex Wno-old-style-declaration
5272 Warn for obsolescent usages, according to the C Standard, in a
5273 declaration. For example, warn if storage-class specifiers like
5274 @code{static} are not the first things in a declaration.  This warning
5275 is also enabled by @option{-Wextra}.
5276
5277 @item -Wold-style-definition @r{(C and Objective-C only)}
5278 @opindex Wold-style-definition
5279 @opindex Wno-old-style-definition
5280 Warn if an old-style function definition is used.  A warning is given
5281 even if there is a previous prototype.
5282
5283 @item -Wmissing-parameter-type @r{(C and Objective-C only)}
5284 @opindex Wmissing-parameter-type
5285 @opindex Wno-missing-parameter-type
5286 A function parameter is declared without a type specifier in K&R-style
5287 functions:
5288
5289 @smallexample
5290 void foo(bar) @{ @}
5291 @end smallexample
5292
5293 This warning is also enabled by @option{-Wextra}.
5294
5295 @item -Wmissing-prototypes @r{(C and Objective-C only)}
5296 @opindex Wmissing-prototypes
5297 @opindex Wno-missing-prototypes
5298 Warn if a global function is defined without a previous prototype
5299 declaration.  This warning is issued even if the definition itself
5300 provides a prototype.  Use this option to detect global functions
5301 that do not have a matching prototype declaration in a header file.
5302 This option is not valid for C++ because all function declarations
5303 provide prototypes and a non-matching declaration declares an
5304 overload rather than conflict with an earlier declaration.
5305 Use @option{-Wmissing-declarations} to detect missing declarations in C++.
5306
5307 @item -Wmissing-declarations
5308 @opindex Wmissing-declarations
5309 @opindex Wno-missing-declarations
5310 Warn if a global function is defined without a previous declaration.
5311 Do so even if the definition itself provides a prototype.
5312 Use this option to detect global functions that are not declared in
5313 header files.  In C, no warnings are issued for functions with previous
5314 non-prototype declarations; use @option{-Wmissing-prototypes} to detect
5315 missing prototypes.  In C++, no warnings are issued for function templates,
5316 or for inline functions, or for functions in anonymous namespaces.
5317
5318 @item -Wmissing-field-initializers
5319 @opindex Wmissing-field-initializers
5320 @opindex Wno-missing-field-initializers
5321 @opindex W
5322 @opindex Wextra
5323 @opindex Wno-extra
5324 Warn if a structure's initializer has some fields missing.  For
5325 example, the following code causes such a warning, because
5326 @code{x.h} is implicitly zero:
5327
5328 @smallexample
5329 struct s @{ int f, g, h; @};
5330 struct s x = @{ 3, 4 @};
5331 @end smallexample
5332
5333 This option does not warn about designated initializers, so the following
5334 modification does not trigger a warning:
5335
5336 @smallexample
5337 struct s @{ int f, g, h; @};
5338 struct s x = @{ .f = 3, .g = 4 @};
5339 @end smallexample
5340
5341 In C++ this option does not warn either about the empty @{ @}
5342 initializer, for example:
5343
5344 @smallexample
5345 struct s @{ int f, g, h; @};
5346 s x = @{ @};
5347 @end smallexample
5348
5349 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
5350 warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.
5351
5352 @item -Wno-multichar
5353 @opindex Wno-multichar
5354 @opindex Wmultichar
5355 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
5356 Usually they indicate a typo in the user's code, as they have
5357 implementation-defined values, and should not be used in portable code.
5358
5359 @item -Wnormalized@r{[}=@r{<}none@r{|}id@r{|}nfc@r{|}nfkc@r{>]}
5360 @opindex Wnormalized=
5361 @opindex Wnormalized
5362 @opindex Wno-normalized
5363 @cindex NFC
5364 @cindex NFKC
5365 @cindex character set, input normalization
5366 In ISO C and ISO C++, two identifiers are different if they are
5367 different sequences of characters.  However, sometimes when characters
5368 outside the basic ASCII character set are used, you can have two
5369 different character sequences that look the same.  To avoid confusion,
5370 the ISO 10646 standard sets out some @dfn{normalization rules} which
5371 when applied ensure that two sequences that look the same are turned into
5372 the same sequence.  GCC can warn you if you are using identifiers that
5373 have not been normalized; this option controls that warning.
5374
5375 There are four levels of warning supported by GCC@.  The default is
5376 @option{-Wnormalized=nfc}, which warns about any identifier that is
5377 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
5378 recommended form for most uses.  It is equivalent to
5379 @option{-Wnormalized}.
5380
5381 Unfortunately, there are some characters allowed in identifiers by
5382 ISO C and ISO C++ that, when turned into NFC, are not allowed in 
5383 identifiers.  That is, there's no way to use these symbols in portable
5384 ISO C or C++ and have all your identifiers in NFC@.
5385 @option{-Wnormalized=id} suppresses the warning for these characters.
5386 It is hoped that future versions of the standards involved will correct
5387 this, which is why this option is not the default.
5388
5389 You can switch the warning off for all characters by writing
5390 @option{-Wnormalized=none} or @option{-Wno-normalized}.  You should
5391 only do this if you are using some other normalization scheme (like
5392 ``D''), because otherwise you can easily create bugs that are
5393 literally impossible to see.
5394
5395 Some characters in ISO 10646 have distinct meanings but look identical
5396 in some fonts or display methodologies, especially once formatting has
5397 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
5398 LETTER N'', displays just like a regular @code{n} that has been
5399 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
5400 normalization scheme to convert all these into a standard form as
5401 well, and GCC warns if your code is not in NFKC if you use
5402 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
5403 about every identifier that contains the letter O because it might be
5404 confused with the digit 0, and so is not the default, but may be
5405 useful as a local coding convention if the programming environment 
5406 cannot be fixed to display these characters distinctly.
5407
5408 @item -Wno-deprecated
5409 @opindex Wno-deprecated
5410 @opindex Wdeprecated
5411 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
5412
5413 @item -Wno-deprecated-declarations
5414 @opindex Wno-deprecated-declarations
5415 @opindex Wdeprecated-declarations
5416 Do not warn about uses of functions (@pxref{Function Attributes}),
5417 variables (@pxref{Variable Attributes}), and types (@pxref{Type
5418 Attributes}) marked as deprecated by using the @code{deprecated}
5419 attribute.
5420
5421 @item -Wno-overflow
5422 @opindex Wno-overflow
5423 @opindex Woverflow
5424 Do not warn about compile-time overflow in constant expressions.
5425
5426 @item -Wno-odr
5427 @opindex Wno-odr
5428 @opindex Wodr
5429 Warn about One Definition Rule violations during link-time optimization.
5430 Requires @option{-flto-odr-type-merging} to be enabled.  Enabled by default.
5431
5432 @item -Wopenmp-simd
5433 @opindex Wopenm-simd
5434 Warn if the vectorizer cost model overrides the OpenMP or the Cilk Plus
5435 simd directive set by user.  The @option{-fsimd-cost-model=unlimited}
5436 option can be used to relax the cost model.
5437
5438 @item -Woverride-init @r{(C and Objective-C only)}
5439 @opindex Woverride-init
5440 @opindex Wno-override-init
5441 @opindex W
5442 @opindex Wextra
5443 @opindex Wno-extra
5444 Warn if an initialized field without side effects is overridden when
5445 using designated initializers (@pxref{Designated Inits, , Designated
5446 Initializers}).
5447
5448 This warning is included in @option{-Wextra}.  To get other
5449 @option{-Wextra} warnings without this one, use @option{-Wextra
5450 -Wno-override-init}.
5451
5452 @item -Woverride-init-side-effects @r{(C and Objective-C only)}
5453 @opindex Woverride-init-side-effects
5454 @opindex Wno-override-init-side-effects
5455 Warn if an initialized field with side effects is overridden when
5456 using designated initializers (@pxref{Designated Inits, , Designated
5457 Initializers}).  This warning is enabled by default.
5458
5459 @item -Wpacked
5460 @opindex Wpacked
5461 @opindex Wno-packed
5462 Warn if a structure is given the packed attribute, but the packed
5463 attribute has no effect on the layout or size of the structure.
5464 Such structures may be mis-aligned for little benefit.  For
5465 instance, in this code, the variable @code{f.x} in @code{struct bar}
5466 is misaligned even though @code{struct bar} does not itself
5467 have the packed attribute:
5468
5469 @smallexample
5470 @group
5471 struct foo @{
5472   int x;
5473   char a, b, c, d;
5474 @} __attribute__((packed));
5475 struct bar @{
5476   char z;
5477   struct foo f;
5478 @};
5479 @end group
5480 @end smallexample
5481
5482 @item -Wpacked-bitfield-compat
5483 @opindex Wpacked-bitfield-compat
5484 @opindex Wno-packed-bitfield-compat
5485 The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
5486 on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
5487 the change can lead to differences in the structure layout.  GCC
5488 informs you when the offset of such a field has changed in GCC 4.4.
5489 For example there is no longer a 4-bit padding between field @code{a}
5490 and @code{b} in this structure:
5491
5492 @smallexample
5493 struct foo
5494 @{
5495   char a:4;
5496   char b:8;
5497 @} __attribute__ ((packed));
5498 @end smallexample
5499
5500 This warning is enabled by default.  Use
5501 @option{-Wno-packed-bitfield-compat} to disable this warning.
5502
5503 @item -Wpadded
5504 @opindex Wpadded
5505 @opindex Wno-padded
5506 Warn if padding is included in a structure, either to align an element
5507 of the structure or to align the whole structure.  Sometimes when this
5508 happens it is possible to rearrange the fields of the structure to
5509 reduce the padding and so make the structure smaller.
5510
5511 @item -Wredundant-decls
5512 @opindex Wredundant-decls
5513 @opindex Wno-redundant-decls
5514 Warn if anything is declared more than once in the same scope, even in
5515 cases where multiple declaration is valid and changes nothing.
5516
5517 @item -Wnested-externs @r{(C and Objective-C only)}
5518 @opindex Wnested-externs
5519 @opindex Wno-nested-externs
5520 Warn if an @code{extern} declaration is encountered within a function.
5521
5522 @item -Wno-inherited-variadic-ctor
5523 @opindex Winherited-variadic-ctor
5524 @opindex Wno-inherited-variadic-ctor
5525 Suppress warnings about use of C++11 inheriting constructors when the
5526 base class inherited from has a C variadic constructor; the warning is
5527 on by default because the ellipsis is not inherited.
5528
5529 @item -Winline
5530 @opindex Winline
5531 @opindex Wno-inline
5532 Warn if a function that is declared as inline cannot be inlined.
5533 Even with this option, the compiler does not warn about failures to
5534 inline functions declared in system headers.
5535
5536 The compiler uses a variety of heuristics to determine whether or not
5537 to inline a function.  For example, the compiler takes into account
5538 the size of the function being inlined and the amount of inlining
5539 that has already been done in the current function.  Therefore,
5540 seemingly insignificant changes in the source program can cause the
5541 warnings produced by @option{-Winline} to appear or disappear.
5542
5543 @item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
5544 @opindex Wno-invalid-offsetof
5545 @opindex Winvalid-offsetof
5546 Suppress warnings from applying the @code{offsetof} macro to a non-POD
5547 type.  According to the 2014 ISO C++ standard, applying @code{offsetof}
5548 to a non-standard-layout type is undefined.  In existing C++ implementations,
5549 however, @code{offsetof} typically gives meaningful results.
5550 This flag is for users who are aware that they are
5551 writing nonportable code and who have deliberately chosen to ignore the
5552 warning about it.
5553
5554 The restrictions on @code{offsetof} may be relaxed in a future version
5555 of the C++ standard.
5556
5557 @item -Wno-int-to-pointer-cast
5558 @opindex Wno-int-to-pointer-cast
5559 @opindex Wint-to-pointer-cast
5560 Suppress warnings from casts to pointer type of an integer of a
5561 different size. In C++, casting to a pointer type of smaller size is
5562 an error. @option{Wint-to-pointer-cast} is enabled by default.
5563
5564
5565 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
5566 @opindex Wno-pointer-to-int-cast
5567 @opindex Wpointer-to-int-cast
5568 Suppress warnings from casts from a pointer to an integer type of a
5569 different size.
5570
5571 @item -Winvalid-pch
5572 @opindex Winvalid-pch
5573 @opindex Wno-invalid-pch
5574 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
5575 the search path but can't be used.
5576
5577 @item -Wlong-long
5578 @opindex Wlong-long
5579 @opindex Wno-long-long
5580 Warn if @code{long long} type is used.  This is enabled by either
5581 @option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
5582 modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
5583
5584 @item -Wvariadic-macros
5585 @opindex Wvariadic-macros
5586 @opindex Wno-variadic-macros
5587 Warn if variadic macros are used in ISO C90 mode, or if the GNU
5588 alternate syntax is used in ISO C99 mode.  This is enabled by either
5589 @option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
5590 messages, use @option{-Wno-variadic-macros}.
5591
5592 @item -Wvarargs
5593 @opindex Wvarargs
5594 @opindex Wno-varargs
5595 Warn upon questionable usage of the macros used to handle variable
5596 arguments like @code{va_start}.  This is default.  To inhibit the
5597 warning messages, use @option{-Wno-varargs}.
5598
5599 @item -Wvector-operation-performance
5600 @opindex Wvector-operation-performance
5601 @opindex Wno-vector-operation-performance
5602 Warn if vector operation is not implemented via SIMD capabilities of the
5603 architecture.  Mainly useful for the performance tuning.
5604 Vector operation can be implemented @code{piecewise}, which means that the
5605 scalar operation is performed on every vector element; 
5606 @code{in parallel}, which means that the vector operation is implemented
5607 using scalars of wider type, which normally is more performance efficient;
5608 and @code{as a single scalar}, which means that vector fits into a
5609 scalar type.
5610
5611 @item -Wno-virtual-move-assign
5612 @opindex Wvirtual-move-assign
5613 @opindex Wno-virtual-move-assign
5614 Suppress warnings about inheriting from a virtual base with a
5615 non-trivial C++11 move assignment operator.  This is dangerous because
5616 if the virtual base is reachable along more than one path, it is
5617 moved multiple times, which can mean both objects end up in the
5618 moved-from state.  If the move assignment operator is written to avoid
5619 moving from a moved-from object, this warning can be disabled.
5620
5621 @item -Wvla
5622 @opindex Wvla
5623 @opindex Wno-vla
5624 Warn if variable length array is used in the code.
5625 @option{-Wno-vla} prevents the @option{-Wpedantic} warning of
5626 the variable length array.
5627
5628 @item -Wvolatile-register-var
5629 @opindex Wvolatile-register-var
5630 @opindex Wno-volatile-register-var
5631 Warn if a register variable is declared volatile.  The volatile
5632 modifier does not inhibit all optimizations that may eliminate reads
5633 and/or writes to register variables.  This warning is enabled by
5634 @option{-Wall}.
5635
5636 @item -Wdisabled-optimization
5637 @opindex Wdisabled-optimization
5638 @opindex Wno-disabled-optimization
5639 Warn if a requested optimization pass is disabled.  This warning does
5640 not generally indicate that there is anything wrong with your code; it
5641 merely indicates that GCC's optimizers are unable to handle the code
5642 effectively.  Often, the problem is that your code is too big or too
5643 complex; GCC refuses to optimize programs when the optimization
5644 itself is likely to take inordinate amounts of time.
5645
5646 @item -Wpointer-sign @r{(C and Objective-C only)}
5647 @opindex Wpointer-sign
5648 @opindex Wno-pointer-sign
5649 Warn for pointer argument passing or assignment with different signedness.
5650 This option is only supported for C and Objective-C@.  It is implied by
5651 @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
5652 @option{-Wno-pointer-sign}.
5653
5654 @item -Wstack-protector
5655 @opindex Wstack-protector
5656 @opindex Wno-stack-protector
5657 This option is only active when @option{-fstack-protector} is active.  It
5658 warns about functions that are not protected against stack smashing.
5659
5660 @item -Woverlength-strings
5661 @opindex Woverlength-strings
5662 @opindex Wno-overlength-strings
5663 Warn about string constants that are longer than the ``minimum
5664 maximum'' length specified in the C standard.  Modern compilers
5665 generally allow string constants that are much longer than the
5666 standard's minimum limit, but very portable programs should avoid
5667 using longer strings.
5668
5669 The limit applies @emph{after} string constant concatenation, and does
5670 not count the trailing NUL@.  In C90, the limit was 509 characters; in
5671 C99, it was raised to 4095.  C++98 does not specify a normative
5672 minimum maximum, so we do not diagnose overlength strings in C++@.
5673
5674 This option is implied by @option{-Wpedantic}, and can be disabled with
5675 @option{-Wno-overlength-strings}.
5676
5677 @item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
5678 @opindex Wunsuffixed-float-constants
5679
5680 Issue a warning for any floating constant that does not have
5681 a suffix.  When used together with @option{-Wsystem-headers} it
5682 warns about such constants in system header files.  This can be useful
5683 when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
5684 from the decimal floating-point extension to C99.
5685
5686 @item -Wno-designated-init @r{(C and Objective-C only)}
5687 Suppress warnings when a positional initializer is used to initialize
5688 a structure that has been marked with the @code{designated_init}
5689 attribute.
5690
5691 @end table
5692
5693 @node Debugging Options
5694 @section Options for Debugging Your Program or GCC
5695 @cindex options, debugging
5696 @cindex debugging information options
5697
5698 GCC has various special options that are used for debugging
5699 either your program or GCC:
5700
5701 @table @gcctabopt
5702 @item -g
5703 @opindex g
5704 Produce debugging information in the operating system's native format
5705 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
5706 information.
5707
5708 On most systems that use stabs format, @option{-g} enables use of extra
5709 debugging information that only GDB can use; this extra information
5710 makes debugging work better in GDB but probably makes other debuggers
5711 crash or
5712 refuse to read the program.  If you want to control for certain whether
5713 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
5714 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
5715
5716 GCC allows you to use @option{-g} with
5717 @option{-O}.  The shortcuts taken by optimized code may occasionally
5718 produce surprising results: some variables you declared may not exist
5719 at all; flow of control may briefly move where you did not expect it;
5720 some statements may not be executed because they compute constant
5721 results or their values are already at hand; some statements may
5722 execute in different places because they have been moved out of loops.
5723
5724 Nevertheless it proves possible to debug optimized output.  This makes
5725 it reasonable to use the optimizer for programs that might have bugs.
5726
5727 The following options are useful when GCC is generated with the
5728 capability for more than one debugging format.
5729
5730 @item -gsplit-dwarf
5731 @opindex gsplit-dwarf
5732 Separate as much dwarf debugging information as possible into a
5733 separate output file with the extension .dwo.  This option allows
5734 the build system to avoid linking files with debug information.  To
5735 be useful, this option requires a debugger capable of reading .dwo
5736 files.
5737
5738 @item -ggdb
5739 @opindex ggdb
5740 Produce debugging information for use by GDB@.  This means to use the
5741 most expressive format available (DWARF 2, stabs, or the native format
5742 if neither of those are supported), including GDB extensions if at all
5743 possible.
5744
5745 @item -gpubnames
5746 @opindex gpubnames
5747 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
5748
5749 @item -ggnu-pubnames
5750 @opindex ggnu-pubnames
5751 Generate .debug_pubnames and .debug_pubtypes sections in a format
5752 suitable for conversion into a GDB@ index.  This option is only useful
5753 with a linker that can produce GDB@ index version 7.
5754
5755 @item -gstabs
5756 @opindex gstabs
5757 Produce debugging information in stabs format (if that is supported),
5758 without GDB extensions.  This is the format used by DBX on most BSD
5759 systems.  On MIPS, Alpha and System V Release 4 systems this option
5760 produces stabs debugging output that is not understood by DBX or SDB@.
5761 On System V Release 4 systems this option requires the GNU assembler.
5762
5763 @item -feliminate-unused-debug-symbols
5764 @opindex feliminate-unused-debug-symbols
5765 Produce debugging information in stabs format (if that is supported),
5766 for only symbols that are actually used.
5767
5768 @item -femit-class-debug-always
5769 @opindex femit-class-debug-always
5770 Instead of emitting debugging information for a C++ class in only one
5771 object file, emit it in all object files using the class.  This option
5772 should be used only with debuggers that are unable to handle the way GCC
5773 normally emits debugging information for classes because using this
5774 option increases the size of debugging information by as much as a
5775 factor of two.
5776
5777 @item -fdebug-types-section
5778 @opindex fdebug-types-section
5779 @opindex fno-debug-types-section
5780 When using DWARF Version 4 or higher, type DIEs can be put into
5781 their own @code{.debug_types} section instead of making them part of the
5782 @code{.debug_info} section.  It is more efficient to put them in a separate
5783 comdat sections since the linker can then remove duplicates.
5784 But not all DWARF consumers support @code{.debug_types} sections yet
5785 and on some objects @code{.debug_types} produces larger instead of smaller
5786 debugging information.
5787
5788 @item -gstabs+
5789 @opindex gstabs+
5790 Produce debugging information in stabs format (if that is supported),
5791 using GNU extensions understood only by the GNU debugger (GDB)@.  The
5792 use of these extensions is likely to make other debuggers crash or
5793 refuse to read the program.
5794
5795 @item -gcoff
5796 @opindex gcoff
5797 Produce debugging information in COFF format (if that is supported).
5798 This is the format used by SDB on most System V systems prior to
5799 System V Release 4.
5800
5801 @item -gxcoff
5802 @opindex gxcoff
5803 Produce debugging information in XCOFF format (if that is supported).
5804 This is the format used by the DBX debugger on IBM RS/6000 systems.
5805
5806 @item -gxcoff+
5807 @opindex gxcoff+
5808 Produce debugging information in XCOFF format (if that is supported),
5809 using GNU extensions understood only by the GNU debugger (GDB)@.  The
5810 use of these extensions is likely to make other debuggers crash or
5811 refuse to read the program, and may cause assemblers other than the GNU
5812 assembler (GAS) to fail with an error.
5813
5814 @item -gdwarf-@var{version}
5815 @opindex gdwarf-@var{version}
5816 Produce debugging information in DWARF format (if that is supported).
5817 The value of @var{version} may be either 2, 3, 4 or 5; the default version
5818 for most targets is 4.  DWARF Version 5 is only experimental.
5819
5820 Note that with DWARF Version 2, some ports require and always
5821 use some non-conflicting DWARF 3 extensions in the unwind tables.
5822
5823 Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
5824 for maximum benefit.
5825
5826 @item -grecord-gcc-switches
5827 @opindex grecord-gcc-switches
5828 This switch causes the command-line options used to invoke the
5829 compiler that may affect code generation to be appended to the
5830 DW_AT_producer attribute in DWARF debugging information.  The options
5831 are concatenated with spaces separating them from each other and from
5832 the compiler version.  See also @option{-frecord-gcc-switches} for another
5833 way of storing compiler options into the object file.  This is the default.
5834
5835 @item -gno-record-gcc-switches
5836 @opindex gno-record-gcc-switches
5837 Disallow appending command-line options to the DW_AT_producer attribute
5838 in DWARF debugging information.
5839
5840 @item -gstrict-dwarf
5841 @opindex gstrict-dwarf
5842 Disallow using extensions of later DWARF standard version than selected
5843 with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
5844 DWARF extensions from later standard versions is allowed.
5845
5846 @item -gno-strict-dwarf
5847 @opindex gno-strict-dwarf
5848 Allow using extensions of later DWARF standard version than selected with
5849 @option{-gdwarf-@var{version}}.
5850
5851 @item -gz@r{[}=@var{type}@r{]}
5852 @opindex gz
5853 Produce compressed debug sections in DWARF format, if that is supported.
5854 If @var{type} is not given, the default type depends on the capabilities
5855 of the assembler and linker used.  @var{type} may be one of
5856 @samp{none} (don't compress debug sections), @samp{zlib} (use zlib
5857 compression in ELF gABI format), or @samp{zlib-gnu} (use zlib
5858 compression in traditional GNU format).  If the linker doesn't support
5859 writing compressed debug sections, the option is rejected.  Otherwise,
5860 if the assembler does not support them, @option{-gz} is silently ignored
5861 when producing object files.
5862
5863 @item -gvms
5864 @opindex gvms
5865 Produce debugging information in Alpha/VMS debug format (if that is
5866 supported).  This is the format used by DEBUG on Alpha/VMS systems.
5867
5868 @item -g@var{level}
5869 @itemx -ggdb@var{level}
5870 @itemx -gstabs@var{level}
5871 @itemx -gcoff@var{level}
5872 @itemx -gxcoff@var{level}
5873 @itemx -gvms@var{level}
5874 Request debugging information and also use @var{level} to specify how
5875 much information.  The default level is 2.
5876
5877 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
5878 @option{-g}.
5879
5880 Level 1 produces minimal information, enough for making backtraces in
5881 parts of the program that you don't plan to debug.  This includes
5882 descriptions of functions and external variables, and line number
5883 tables, but no information about local variables.
5884
5885 Level 3 includes extra information, such as all the macro definitions
5886 present in the program.  Some debuggers support macro expansion when
5887 you use @option{-g3}.
5888
5889 @option{-gdwarf-2} does not accept a concatenated debug level, because
5890 GCC used to support an option @option{-gdwarf} that meant to generate
5891 debug information in version 1 of the DWARF format (which is very
5892 different from version 2), and it would have been too confusing.  That
5893 debug format is long obsolete, but the option cannot be changed now.
5894 Instead use an additional @option{-g@var{level}} option to change the
5895 debug level for DWARF.
5896
5897 @item -gtoggle
5898 @opindex gtoggle
5899 Turn off generation of debug info, if leaving out this option
5900 generates it, or turn it on at level 2 otherwise.  The position of this
5901 argument in the command line does not matter; it takes effect after all
5902 other options are processed, and it does so only once, no matter how
5903 many times it is given.  This is mainly intended to be used with
5904 @option{-fcompare-debug}.
5905
5906 @item -fsanitize=address
5907 @opindex fsanitize=address
5908 Enable AddressSanitizer, a fast memory error detector.
5909 Memory access instructions are instrumented to detect
5910 out-of-bounds and use-after-free bugs.
5911 See @uref{https://github.com/google/sanitizers/wiki/AddressSanitizer} for
5912 more details.  The run-time behavior can be influenced using the
5913 @env{ASAN_OPTIONS} environment variable.  When set to @code{help=1},
5914 the available options are shown at startup of the instrumended program.  See
5915 @url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
5916 for a list of supported options.
5917
5918 @item -fsanitize=kernel-address
5919 @opindex fsanitize=kernel-address
5920 Enable AddressSanitizer for Linux kernel.
5921 See @uref{https://github.com/google/kasan/wiki} for more details.
5922
5923 @item -fsanitize=thread
5924 @opindex fsanitize=thread
5925 Enable ThreadSanitizer, a fast data race detector.
5926 Memory access instructions are instrumented to detect
5927 data race bugs.  See @uref{https://github.com/google/sanitizers/wiki#threadsanitizer} for more
5928 details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
5929 environment variable; see
5930 @url{https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags} for a list of
5931 supported options.
5932
5933 @item -fsanitize=leak
5934 @opindex fsanitize=leak
5935 Enable LeakSanitizer, a memory leak detector.
5936 This option only matters for linking of executables and if neither
5937 @option{-fsanitize=address} nor @option{-fsanitize=thread} is used.  In that
5938 case the executable is linked against a library that overrides @code{malloc}
5939 and other allocator functions.  See
5940 @uref{https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer} for more
5941 details.  The run-time behavior can be influenced using the
5942 @env{LSAN_OPTIONS} environment variable.
5943
5944 @item -fsanitize=undefined
5945 @opindex fsanitize=undefined
5946 Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
5947 Various computations are instrumented to detect undefined behavior
5948 at runtime.  Current suboptions are:
5949
5950 @table @gcctabopt
5951
5952 @item -fsanitize=shift
5953 @opindex fsanitize=shift
5954 This option enables checking that the result of a shift operation is
5955 not undefined.  Note that what exactly is considered undefined differs
5956 slightly between C and C++, as well as between ISO C90 and C99, etc.
5957
5958 @item -fsanitize=integer-divide-by-zero
5959 @opindex fsanitize=integer-divide-by-zero
5960 Detect integer division by zero as well as @code{INT_MIN / -1} division.
5961
5962 @item -fsanitize=unreachable
5963 @opindex fsanitize=unreachable
5964 With this option, the compiler turns the @code{__builtin_unreachable}
5965 call into a diagnostics message call instead.  When reaching the
5966 @code{__builtin_unreachable} call, the behavior is undefined.
5967
5968 @item -fsanitize=vla-bound
5969 @opindex fsanitize=vla-bound
5970 This option instructs the compiler to check that the size of a variable
5971 length array is positive.
5972
5973 @item -fsanitize=null
5974 @opindex fsanitize=null
5975 This option enables pointer checking.  Particularly, the application
5976 built with this option turned on will issue an error message when it
5977 tries to dereference a NULL pointer, or if a reference (possibly an
5978 rvalue reference) is bound to a NULL pointer, or if a method is invoked
5979 on an object pointed by a NULL pointer.
5980
5981 @item -fsanitize=return
5982 @opindex fsanitize=return
5983 This option enables return statement checking.  Programs
5984 built with this option turned on will issue an error message
5985 when the end of a non-void function is reached without actually
5986 returning a value.  This option works in C++ only.
5987
5988 @item -fsanitize=signed-integer-overflow
5989 @opindex fsanitize=signed-integer-overflow
5990 This option enables signed integer overflow checking.  We check that
5991 the result of @code{+}, @code{*}, and both unary and binary @code{-}
5992 does not overflow in the signed arithmetics.  Note, integer promotion
5993 rules must be taken into account.  That is, the following is not an
5994 overflow:
5995 @smallexample
5996 signed char a = SCHAR_MAX;
5997 a++;
5998 @end smallexample
5999
6000 @item -fsanitize=bounds
6001 @opindex fsanitize=bounds
6002 This option enables instrumentation of array bounds.  Various out of bounds
6003 accesses are detected.  Flexible array members, flexible array member-like
6004 arrays, and initializers of variables with static storage are not instrumented.
6005
6006 @item -fsanitize=bounds-strict
6007 @opindex fsanitize=bounds-strict
6008 This option enables strict instrumentation of array bounds.  Most out of bounds
6009 accesses are detected, including flexible array members and flexible array
6010 member-like arrays.  Initializers of variables with static storage are not
6011 instrumented.
6012
6013 @item -fsanitize=alignment
6014 @opindex fsanitize=alignment
6015
6016 This option enables checking of alignment of pointers when they are
6017 dereferenced, or when a reference is bound to insufficiently aligned target,
6018 or when a method or constructor is invoked on insufficiently aligned object.
6019
6020 @item -fsanitize=object-size
6021 @opindex fsanitize=object-size
6022 This option enables instrumentation of memory references using the
6023 @code{__builtin_object_size} function.  Various out of bounds pointer
6024 accesses are detected.
6025
6026 @item -fsanitize=float-divide-by-zero
6027 @opindex fsanitize=float-divide-by-zero
6028 Detect floating-point division by zero.  Unlike other similar options,
6029 @option{-fsanitize=float-divide-by-zero} is not enabled by
6030 @option{-fsanitize=undefined}, since floating-point division by zero can
6031 be a legitimate way of obtaining infinities and NaNs.
6032
6033 @item -fsanitize=float-cast-overflow
6034 @opindex fsanitize=float-cast-overflow
6035 This option enables floating-point type to integer conversion checking.
6036 We check that the result of the conversion does not overflow.
6037 Unlike other similar options, @option{-fsanitize=float-cast-overflow} is
6038 not enabled by @option{-fsanitize=undefined}.
6039 This option does not work well with @code{FE_INVALID} exceptions enabled.
6040
6041 @item -fsanitize=nonnull-attribute
6042 @opindex fsanitize=nonnull-attribute
6043
6044 This option enables instrumentation of calls, checking whether null values
6045 are not passed to arguments marked as requiring a non-null value by the
6046 @code{nonnull} function attribute.
6047
6048 @item -fsanitize=returns-nonnull-attribute
6049 @opindex fsanitize=returns-nonnull-attribute
6050
6051 This option enables instrumentation of return statements in functions
6052 marked with @code{returns_nonnull} function attribute, to detect returning
6053 of null values from such functions.
6054
6055 @item -fsanitize=bool
6056 @opindex fsanitize=bool
6057
6058 This option enables instrumentation of loads from bool.  If a value other
6059 than 0/1 is loaded, a run-time error is issued.
6060
6061 @item -fsanitize=enum
6062 @opindex fsanitize=enum
6063
6064 This option enables instrumentation of loads from an enum type.  If
6065 a value outside the range of values for the enum type is loaded,
6066 a run-time error is issued.
6067
6068 @item -fsanitize=vptr
6069 @opindex fsanitize=vptr
6070
6071 This option enables instrumentation of C++ member function calls, member
6072 accesses and some conversions between pointers to base and derived classes,
6073 to verify the referenced object has the correct dynamic type.
6074
6075 @end table
6076
6077 While @option{-ftrapv} causes traps for signed overflows to be emitted,
6078 @option{-fsanitize=undefined} gives a diagnostic message.
6079 This currently works only for the C family of languages.
6080
6081 @item -fno-sanitize=all
6082 @opindex fno-sanitize=all
6083
6084 This option disables all previously enabled sanitizers.
6085 @option{-fsanitize=all} is not allowed, as some sanitizers cannot be used
6086 together.
6087
6088 @item -fasan-shadow-offset=@var{number}
6089 @opindex fasan-shadow-offset
6090 This option forces GCC to use custom shadow offset in AddressSanitizer checks.
6091 It is useful for experimenting with different shadow memory layouts in
6092 Kernel AddressSanitizer.
6093
6094 @item -fsanitize-sections=@var{s1},@var{s2},...
6095 @opindex fsanitize-sections
6096 Sanitize global variables in selected user-defined sections.  @var{si} may
6097 contain wildcards.
6098
6099 @item -fsanitize-recover@r{[}=@var{opts}@r{]}
6100 @opindex fsanitize-recover
6101 @opindex fno-sanitize-recover
6102 @option{-fsanitize-recover=} controls error recovery mode for sanitizers
6103 mentioned in comma-separated list of @var{opts}.  Enabling this option
6104 for a sanitizer component causes it to attempt to continue
6105 running the program as if no error happened.  This means multiple
6106 runtime errors can be reported in a single program run, and the exit
6107 code of the program may indicate success even when errors
6108 have been reported.  The @option{-fno-sanitize-recover=} option
6109 can be used to alter
6110 this behavior: only the first detected error is reported
6111 and program then exits with a non-zero exit code.
6112
6113 Currently this feature only works for @option{-fsanitize=undefined} (and its suboptions
6114 except for @option{-fsanitize=unreachable} and @option{-fsanitize=return}),
6115 @option{-fsanitize=float-cast-overflow}, @option{-fsanitize=float-divide-by-zero},
6116 @option{-fsanitize=kernel-address} and @option{-fsanitize=address}.
6117 For these sanitizers error recovery is turned on by default, except @option{-fsanitize=address},
6118 for which this feature is experimental.
6119 @option{-fsanitize-recover=all} and @option{-fno-sanitize-recover=all} is also
6120 accepted, the former enables recovery for all sanitizers that support it,
6121 the latter disables recovery for all sanitizers that support it.
6122
6123 Syntax without explicit @var{opts} parameter is deprecated.  It is equivalent to
6124 @smallexample
6125 -fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
6126 @end smallexample
6127 @noindent
6128 Similarly @option{-fno-sanitize-recover} is equivalent to
6129 @smallexample
6130 -fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
6131 @end smallexample
6132
6133 @item -fsanitize-undefined-trap-on-error
6134 @opindex fsanitize-undefined-trap-on-error
6135 The @option{-fsanitize-undefined-trap-on-error} option instructs the compiler to
6136 report undefined behavior using @code{__builtin_trap} rather than
6137 a @code{libubsan} library routine.  The advantage of this is that the
6138 @code{libubsan} library is not needed and is not linked in, so this
6139 is usable even in freestanding environments.
6140
6141 @item -fsanitize-coverage=trace-pc
6142 @opindex fsanitize-coverage=trace-pc
6143 Enable coverage-guided fuzzing code instrumentation.
6144 Inserts call to __sanitizer_cov_trace_pc into every basic block.
6145
6146 @item -fcheck-pointer-bounds
6147 @opindex fcheck-pointer-bounds
6148 @opindex fno-check-pointer-bounds
6149 @cindex Pointer Bounds Checker options
6150 Enable Pointer Bounds Checker instrumentation.  Each memory reference
6151 is instrumented with checks of the pointer used for memory access against
6152 bounds associated with that pointer.  
6153
6154 Currently there
6155 is only an implementation for Intel MPX available, thus x86 target
6156 and @option{-mmpx} are required to enable this feature.  
6157 MPX-based instrumentation requires
6158 a runtime library to enable MPX in hardware and handle bounds
6159 violation signals.  By default when @option{-fcheck-pointer-bounds}
6160 and @option{-mmpx} options are used to link a program, the GCC driver
6161 links against the @file{libmpx} runtime library and @file{libmpxwrappers}
6162 library.  It also passes '-z bndplt' to a linker in case it supports this
6163 option (which is checked on libmpx configuration).  Note that old versions
6164 of linker may ignore option.  Gold linker doesn't support '-z bndplt'
6165 option.  With no '-z bndplt' support in linker all calls to dynamic libraries
6166 lose passed bounds reducing overall protection level.  It's highly
6167 recommended to use linker with '-z bndplt' support.  In case such linker
6168 is not available it is adviced to always use @option{-static-libmpxwrappers}
6169 for better protection level or use @option{-static} to completely avoid
6170 external calls to dynamic libraries.  MPX-based instrumentation
6171 may be used for debugging and also may be included in production code
6172 to increase program security.  Depending on usage, you may
6173 have different requirements for the runtime library.  The current version
6174 of the MPX runtime library is more oriented for use as a debugging
6175 tool.  MPX runtime library usage implies @option{-lpthread}.  See
6176 also @option{-static-libmpx}.  The runtime library  behavior can be
6177 influenced using various @env{CHKP_RT_*} environment variables.  See
6178 @uref{https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler}
6179 for more details.
6180
6181 Generated instrumentation may be controlled by various
6182 @option{-fchkp-*} options and by the @code{bnd_variable_size}
6183 structure field attribute (@pxref{Type Attributes}) and
6184 @code{bnd_legacy}, and @code{bnd_instrument} function attributes
6185 (@pxref{Function Attributes}).  GCC also provides a number of built-in
6186 functions for controlling the Pointer Bounds Checker.  @xref{Pointer
6187 Bounds Checker builtins}, for more information.
6188
6189 @item -fchecking
6190 @opindex fchecking
6191 @opindex fno-checking
6192 Enable internal consistency checking.  The default depends on
6193 the compiler configuration.
6194
6195 @item -fchkp-check-incomplete-type
6196 @opindex fchkp-check-incomplete-type
6197 @opindex fno-chkp-check-incomplete-type
6198 Generate pointer bounds checks for variables with incomplete type.
6199 Enabled by default.
6200
6201 @item -fchkp-narrow-bounds
6202 @opindex fchkp-narrow-bounds
6203 @opindex fno-chkp-narrow-bounds
6204 Controls bounds used by Pointer Bounds Checker for pointers to object
6205 fields.  If narrowing is enabled then field bounds are used.  Otherwise
6206 object bounds are used.  See also @option{-fchkp-narrow-to-innermost-array}
6207 and @option{-fchkp-first-field-has-own-bounds}.  Enabled by default.
6208
6209 @item -fchkp-first-field-has-own-bounds
6210 @opindex fchkp-first-field-has-own-bounds
6211 @opindex fno-chkp-first-field-has-own-bounds
6212 Forces Pointer Bounds Checker to use narrowed bounds for the address of the
6213 first field in the structure.  By default a pointer to the first field has
6214 the same bounds as a pointer to the whole structure.
6215
6216 @item -fchkp-narrow-to-innermost-array
6217 @opindex fchkp-narrow-to-innermost-array
6218 @opindex fno-chkp-narrow-to-innermost-array
6219 Forces Pointer Bounds Checker to use bounds of the innermost arrays in
6220 case of nested static array access.  By default this option is disabled and
6221 bounds of the outermost array are used.
6222
6223 @item -fchkp-optimize
6224 @opindex fchkp-optimize
6225 @opindex fno-chkp-optimize
6226 Enables Pointer Bounds Checker optimizations.  Enabled by default at
6227 optimization levels @option{-O}, @option{-O2}, @option{-O3}.
6228
6229 @item -fchkp-use-fast-string-functions
6230 @opindex fchkp-use-fast-string-functions
6231 @opindex fno-chkp-use-fast-string-functions
6232 Enables use of @code{*_nobnd} versions of string functions (not copying bounds)
6233 by Pointer Bounds Checker.  Disabled by default.
6234
6235 @item -fchkp-use-nochk-string-functions
6236 @opindex fchkp-use-nochk-string-functions
6237 @opindex fno-chkp-use-nochk-string-functions
6238 Enables use of @code{*_nochk} versions of string functions (not checking bounds)
6239 by Pointer Bounds Checker.  Disabled by default.
6240
6241 @item -fchkp-use-static-bounds
6242 @opindex fchkp-use-static-bounds
6243 @opindex fno-chkp-use-static-bounds
6244 Allow Pointer Bounds Checker to generate static bounds holding
6245 bounds of static variables.  Enabled by default.
6246
6247 @item -fchkp-use-static-const-bounds
6248 @opindex fchkp-use-static-const-bounds
6249 @opindex fno-chkp-use-static-const-bounds
6250 Use statically-initialized bounds for constant bounds instead of
6251 generating them each time they are required.  By default enabled when
6252 @option{-fchkp-use-static-bounds} is enabled.
6253
6254 @item -fchkp-treat-zero-dynamic-size-as-infinite
6255 @opindex fchkp-treat-zero-dynamic-size-as-infinite
6256 @opindex fno-chkp-treat-zero-dynamic-size-as-infinite
6257 With this option, objects with incomplete type whose
6258 dynamically-obtained size is zero are treated as having infinite size
6259 instead by Pointer Bounds
6260 Checker.  This option may be helpful if a program is linked with a library
6261 missing size information for some symbols.  Disabled by default.
6262
6263 @item -fchkp-check-read
6264 @opindex fchkp-check-read
6265 @opindex fno-chkp-check-read
6266 Instructs Pointer Bounds Checker to generate checks for all read
6267 accesses to memory.  Enabled by default.
6268
6269 @item -fchkp-check-write
6270 @opindex fchkp-check-write
6271 @opindex fno-chkp-check-write
6272 Instructs Pointer Bounds Checker to generate checks for all write
6273 accesses to memory.  Enabled by default.
6274
6275 @item -fchkp-store-bounds
6276 @opindex fchkp-store-bounds
6277 @opindex fno-chkp-store-bounds
6278 Instructs Pointer Bounds Checker to generate bounds stores for
6279 pointer writes.  Enabled by default.
6280
6281 @item -fchkp-instrument-calls
6282 @opindex fchkp-instrument-calls
6283 @opindex fno-chkp-instrument-calls
6284 Instructs Pointer Bounds Checker to pass pointer bounds to calls.
6285 Enabled by default.
6286
6287 @item -fchkp-instrument-marked-only
6288 @opindex fchkp-instrument-marked-only
6289 @opindex fno-chkp-instrument-marked-only
6290 Instructs Pointer Bounds Checker to instrument only functions
6291 marked with the @code{bnd_instrument} attribute
6292 (@pxref{Function Attributes}).  Disabled by default.
6293
6294 @item -fchkp-use-wrappers
6295 @opindex fchkp-use-wrappers
6296 @opindex fno-chkp-use-wrappers
6297 Allows Pointer Bounds Checker to replace calls to built-in functions
6298 with calls to wrapper functions.  When @option{-fchkp-use-wrappers}
6299 is used to link a program, the GCC driver automatically links
6300 against @file{libmpxwrappers}.  See also @option{-static-libmpxwrappers}.
6301 Enabled by default.
6302
6303 @item -fdump-final-insns@r{[}=@var{file}@r{]}
6304 @opindex fdump-final-insns
6305 Dump the final internal representation (RTL) to @var{file}.  If the
6306 optional argument is omitted (or if @var{file} is @code{.}), the name
6307 of the dump file is determined by appending @code{.gkd} to the
6308 compilation output file name.
6309
6310 @item -fcompare-debug@r{[}=@var{opts}@r{]}
6311 @opindex fcompare-debug
6312 @opindex fno-compare-debug
6313 If no error occurs during compilation, run the compiler a second time,
6314 adding @var{opts} and @option{-fcompare-debug-second} to the arguments
6315 passed to the second compilation.  Dump the final internal
6316 representation in both compilations, and print an error if they differ.
6317
6318 If the equal sign is omitted, the default @option{-gtoggle} is used.
6319
6320 The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
6321 and nonzero, implicitly enables @option{-fcompare-debug}.  If
6322 @env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
6323 then it is used for @var{opts}, otherwise the default @option{-gtoggle}
6324 is used.
6325
6326 @option{-fcompare-debug=}, with the equal sign but without @var{opts},
6327 is equivalent to @option{-fno-compare-debug}, which disables the dumping
6328 of the final representation and the second compilation, preventing even
6329 @env{GCC_COMPARE_DEBUG} from taking effect.
6330
6331 To verify full coverage during @option{-fcompare-debug} testing, set
6332 @env{GCC_COMPARE_DEBUG} to say @option{-fcompare-debug-not-overridden},
6333 which GCC rejects as an invalid option in any actual compilation
6334 (rather than preprocessing, assembly or linking).  To get just a
6335 warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
6336 not overridden} will do.
6337
6338 @item -fcompare-debug-second
6339 @opindex fcompare-debug-second
6340 This option is implicitly passed to the compiler for the second
6341 compilation requested by @option{-fcompare-debug}, along with options to
6342 silence warnings, and omitting other options that would cause
6343 side-effect compiler outputs to files or to the standard output.  Dump
6344 files and preserved temporary files are renamed so as to contain the
6345 @code{.gk} additional extension during the second compilation, to avoid
6346 overwriting those generated by the first.
6347
6348 When this option is passed to the compiler driver, it causes the
6349 @emph{first} compilation to be skipped, which makes it useful for little
6350 other than debugging the compiler proper.
6351
6352 @item -feliminate-dwarf2-dups
6353 @opindex feliminate-dwarf2-dups
6354 Compress DWARF 2 debugging information by eliminating duplicated
6355 information about each symbol.  This option only makes sense when
6356 generating DWARF 2 debugging information with @option{-gdwarf-2}.
6357
6358 @item -femit-struct-debug-baseonly
6359 @opindex femit-struct-debug-baseonly
6360 Emit debug information for struct-like types
6361 only when the base name of the compilation source file
6362 matches the base name of file in which the struct is defined.
6363
6364 This option substantially reduces the size of debugging information,
6365 but at significant potential loss in type information to the debugger.
6366 See @option{-femit-struct-debug-reduced} for a less aggressive option.
6367 See @option{-femit-struct-debug-detailed} for more detailed control.
6368
6369 This option works only with DWARF 2.
6370
6371 @item -femit-struct-debug-reduced
6372 @opindex femit-struct-debug-reduced
6373 Emit debug information for struct-like types
6374 only when the base name of the compilation source file
6375 matches the base name of file in which the type is defined,
6376 unless the struct is a template or defined in a system header.
6377
6378 This option significantly reduces the size of debugging information,
6379 with some potential loss in type information to the debugger.
6380 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
6381 See @option{-femit-struct-debug-detailed} for more detailed control.
6382
6383 This option works only with DWARF 2.
6384
6385 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
6386 @opindex femit-struct-debug-detailed
6387 Specify the struct-like types
6388 for which the compiler generates debug information.
6389 The intent is to reduce duplicate struct debug information
6390 between different object files within the same program.
6391
6392 This option is a detailed version of
6393 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
6394 which serves for most needs.
6395
6396 A specification has the syntax@*
6397 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
6398
6399 The optional first word limits the specification to
6400 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
6401 A struct type is used directly when it is the type of a variable, member.
6402 Indirect uses arise through pointers to structs.
6403 That is, when use of an incomplete struct is valid, the use is indirect.
6404 An example is
6405 @samp{struct one direct; struct two * indirect;}.
6406
6407 The optional second word limits the specification to
6408 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
6409 Generic structs are a bit complicated to explain.
6410 For C++, these are non-explicit specializations of template classes,
6411 or non-template classes within the above.
6412 Other programming languages have generics,
6413 but @option{-femit-struct-debug-detailed} does not yet implement them.
6414
6415 The third word specifies the source files for those
6416 structs for which the compiler should emit debug information.
6417 The values @samp{none} and @samp{any} have the normal meaning.
6418 The value @samp{base} means that
6419 the base of name of the file in which the type declaration appears
6420 must match the base of the name of the main compilation file.
6421 In practice, this means that when compiling @file{foo.c}, debug information
6422 is generated for types declared in that file and @file{foo.h},
6423 but not other header files.
6424 The value @samp{sys} means those types satisfying @samp{base}
6425 or declared in system or compiler headers.
6426
6427 You may need to experiment to determine the best settings for your application.
6428
6429 The default is @option{-femit-struct-debug-detailed=all}.
6430
6431 This option works only with DWARF 2.
6432
6433 @item -fno-merge-debug-strings
6434 @opindex fmerge-debug-strings
6435 @opindex fno-merge-debug-strings
6436 Direct the linker to not merge together strings in the debugging
6437 information that are identical in different object files.  Merging is
6438 not supported by all assemblers or linkers.  Merging decreases the size
6439 of the debug information in the output file at the cost of increasing
6440 link processing time.  Merging is enabled by default.
6441
6442 @item -fdebug-prefix-map=@var{old}=@var{new}
6443 @opindex fdebug-prefix-map
6444 When compiling files in directory @file{@var{old}}, record debugging
6445 information describing them as in @file{@var{new}} instead.
6446
6447 @item -fno-dwarf2-cfi-asm
6448 @opindex fdwarf2-cfi-asm
6449 @opindex fno-dwarf2-cfi-asm
6450 Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
6451 instead of using GAS @code{.cfi_*} directives.
6452
6453 @cindex @command{prof}
6454 @item -p
6455 @opindex p
6456 Generate extra code to write profile information suitable for the
6457 analysis program @command{prof}.  You must use this option when compiling
6458 the source files you want data about, and you must also use it when
6459 linking.
6460
6461 @cindex @command{gprof}
6462 @item -pg
6463 @opindex pg
6464 Generate extra code to write profile information suitable for the
6465 analysis program @command{gprof}.  You must use this option when compiling
6466 the source files you want data about, and you must also use it when
6467 linking.
6468
6469 @item -Q
6470 @opindex Q
6471 Makes the compiler print out each function name as it is compiled, and
6472 print some statistics about each pass when it finishes.
6473
6474 @item -ftime-report
6475 @opindex ftime-report
6476 Makes the compiler print some statistics about the time consumed by each
6477 pass when it finishes.
6478
6479 @item -fmem-report
6480 @opindex fmem-report
6481 Makes the compiler print some statistics about permanent memory
6482 allocation when it finishes.
6483
6484 @item -fmem-report-wpa
6485 @opindex fmem-report-wpa
6486 Makes the compiler print some statistics about permanent memory
6487 allocation for the WPA phase only.
6488
6489 @item -fpre-ipa-mem-report
6490 @opindex fpre-ipa-mem-report
6491 @item -fpost-ipa-mem-report
6492 @opindex fpost-ipa-mem-report
6493 Makes the compiler print some statistics about permanent memory
6494 allocation before or after interprocedural optimization.
6495
6496 @item -fprofile-report
6497 @opindex fprofile-report
6498 Makes the compiler print some statistics about consistency of the
6499 (estimated) profile and effect of individual passes.
6500
6501 @item -fstack-usage
6502 @opindex fstack-usage
6503 Makes the compiler output stack usage information for the program, on a
6504 per-function basis.  The filename for the dump is made by appending
6505 @file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
6506 the output file, if explicitly specified and it is not an executable,
6507 otherwise it is the basename of the source file.  An entry is made up
6508 of three fields:
6509
6510 @itemize
6511 @item
6512 The name of the function.
6513 @item
6514 A number of bytes.
6515 @item
6516 One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
6517 @end itemize
6518
6519 The qualifier @code{static} means that the function manipulates the stack
6520 statically: a fixed number of bytes are allocated for the frame on function
6521 entry and released on function exit; no stack adjustments are otherwise made
6522 in the function.  The second field is this fixed number of bytes.
6523
6524 The qualifier @code{dynamic} means that the function manipulates the stack
6525 dynamically: in addition to the static allocation described above, stack
6526 adjustments are made in the body of the function, for example to push/pop
6527 arguments around function calls.  If the qualifier @code{bounded} is also
6528 present, the amount of these adjustments is bounded at compile time and
6529 the second field is an upper bound of the total amount of stack used by
6530 the function.  If it is not present, the amount of these adjustments is
6531 not bounded at compile time and the second field only represents the
6532 bounded part.
6533
6534 @item -fprofile-arcs
6535 @opindex fprofile-arcs
6536 Add code so that program flow @dfn{arcs} are instrumented.  During
6537 execution the program records how many times each branch and call is
6538 executed and how many times it is taken or returns.  When the compiled
6539 program exits it saves this data to a file called
6540 @file{@var{auxname}.gcda} for each source file.  The data may be used for
6541 profile-directed optimizations (@option{-fbranch-probabilities}), or for
6542 test coverage analysis (@option{-ftest-coverage}).  Each object file's
6543 @var{auxname} is generated from the name of the output file, if
6544 explicitly specified and it is not the final executable, otherwise it is
6545 the basename of the source file.  In both cases any suffix is removed
6546 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
6547 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
6548 @xref{Cross-profiling}.
6549
6550 @cindex @command{gcov}
6551 @item --coverage
6552 @opindex coverage
6553
6554 This option is used to compile and link code instrumented for coverage
6555 analysis.  The option is a synonym for @option{-fprofile-arcs}
6556 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
6557 linking).  See the documentation for those options for more details.
6558
6559 @itemize
6560
6561 @item
6562 Compile the source files with @option{-fprofile-arcs} plus optimization
6563 and code generation options.  For test coverage analysis, use the
6564 additional @option{-ftest-coverage} option.  You do not need to profile
6565 every source file in a program.
6566
6567 @item
6568 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
6569 (the latter implies the former).
6570
6571 @item
6572 Run the program on a representative workload to generate the arc profile
6573 information.  This may be repeated any number of times.  You can run
6574 concurrent instances of your program, and provided that the file system
6575 supports locking, the data files will be correctly updated.  Also
6576 @code{fork} calls are detected and correctly handled (double counting
6577 will not happen).
6578
6579 @item
6580 For profile-directed optimizations, compile the source files again with
6581 the same optimization and code generation options plus
6582 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
6583 Control Optimization}).
6584
6585 @item
6586 For test coverage analysis, use @command{gcov} to produce human readable
6587 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
6588 @command{gcov} documentation for further information.
6589
6590 @end itemize
6591
6592 With @option{-fprofile-arcs}, for each function of your program GCC
6593 creates a program flow graph, then finds a spanning tree for the graph.
6594 Only arcs that are not on the spanning tree have to be instrumented: the
6595 compiler adds code to count the number of times that these arcs are
6596 executed.  When an arc is the only exit or only entrance to a block, the
6597 instrumentation code can be added to the block; otherwise, a new basic
6598 block must be created to hold the instrumentation code.
6599
6600 @need 2000
6601 @item -ftest-coverage
6602 @opindex ftest-coverage
6603 Produce a notes file that the @command{gcov} code-coverage utility
6604 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
6605 show program coverage.  Each source file's note file is called
6606 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
6607 above for a description of @var{auxname} and instructions on how to
6608 generate test coverage data.  Coverage data matches the source files
6609 more closely if you do not optimize.
6610
6611 @item -fdbg-cnt-list
6612 @opindex fdbg-cnt-list
6613 Print the name and the counter upper bound for all debug counters.
6614
6615
6616 @item -fdbg-cnt=@var{counter-value-list}
6617 @opindex fdbg-cnt
6618 Set the internal debug counter upper bound.  @var{counter-value-list}
6619 is a comma-separated list of @var{name}:@var{value} pairs
6620 which sets the upper bound of each debug counter @var{name} to @var{value}.
6621 All debug counters have the initial upper bound of @code{UINT_MAX};
6622 thus @code{dbg_cnt} returns true always unless the upper bound
6623 is set by this option.
6624 For example, with @option{-fdbg-cnt=dce:10,tail_call:0},
6625 @code{dbg_cnt(dce)} returns true only for first 10 invocations.
6626
6627 @item -fenable-@var{kind}-@var{pass}
6628 @itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
6629 @opindex fdisable-
6630 @opindex fenable-
6631
6632 This is a set of options that are used to explicitly disable/enable
6633 optimization passes.  These options are intended for use for debugging GCC.
6634 Compiler users should use regular options for enabling/disabling
6635 passes instead.
6636
6637 @table @gcctabopt
6638
6639 @item -fdisable-ipa-@var{pass}
6640 Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
6641 statically invoked in the compiler multiple times, the pass name should be
6642 appended with a sequential number starting from 1.
6643
6644 @item -fdisable-rtl-@var{pass}
6645 @itemx -fdisable-rtl-@var{pass}=@var{range-list}
6646 Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
6647 statically invoked in the compiler multiple times, the pass name should be
6648 appended with a sequential number starting from 1.  @var{range-list} is a 
6649 comma-separated list of function ranges or assembler names.  Each range is a number
6650 pair separated by a colon.  The range is inclusive in both ends.  If the range
6651 is trivial, the number pair can be simplified as a single number.  If the
6652 function's call graph node's @var{uid} falls within one of the specified ranges,
6653 the @var{pass} is disabled for that function.  The @var{uid} is shown in the
6654 function header of a dump file, and the pass names can be dumped by using
6655 option @option{-fdump-passes}.
6656
6657 @item -fdisable-tree-@var{pass}
6658 @itemx -fdisable-tree-@var{pass}=@var{range-list}
6659 Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
6660 option arguments.
6661
6662 @item -fenable-ipa-@var{pass}
6663 Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
6664 statically invoked in the compiler multiple times, the pass name should be
6665 appended with a sequential number starting from 1.
6666
6667 @item -fenable-rtl-@var{pass}
6668 @itemx -fenable-rtl-@var{pass}=@var{range-list}
6669 Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
6670 description and examples.
6671
6672 @item -fenable-tree-@var{pass}
6673 @itemx -fenable-tree-@var{pass}=@var{range-list}
6674 Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
6675 of option arguments.
6676
6677 @end table
6678
6679 Here are some examples showing uses of these options.
6680
6681 @smallexample
6682
6683 # disable ccp1 for all functions
6684    -fdisable-tree-ccp1
6685 # disable complete unroll for function whose cgraph node uid is 1
6686    -fenable-tree-cunroll=1
6687 # disable gcse2 for functions at the following ranges [1,1],
6688 # [300,400], and [400,1000]
6689 # disable gcse2 for functions foo and foo2
6690    -fdisable-rtl-gcse2=foo,foo2
6691 # disable early inlining
6692    -fdisable-tree-einline
6693 # disable ipa inlining
6694    -fdisable-ipa-inline
6695 # enable tree full unroll
6696    -fenable-tree-unroll
6697
6698 @end smallexample
6699
6700 @item -d@var{letters}
6701 @itemx -fdump-rtl-@var{pass}
6702 @itemx -fdump-rtl-@var{pass}=@var{filename}
6703 @opindex d
6704 @opindex fdump-rtl-@var{pass}
6705 Says to make debugging dumps during compilation at times specified by
6706 @var{letters}.  This is used for debugging the RTL-based passes of the
6707 compiler.  The file names for most of the dumps are made by appending
6708 a pass number and a word to the @var{dumpname}, and the files are
6709 created in the directory of the output file.  In case of
6710 @option{=@var{filename}} option, the dump is output on the given file
6711 instead of the pass numbered dump files.  Note that the pass number is
6712 assigned as passes are registered into the pass manager.  Most passes
6713 are registered in the order that they will execute and for these passes
6714 the number corresponds to the pass execution order.  However, passes
6715 registered by plugins, passes specific to compilation targets, or
6716 passes that are otherwise registered after all the other passes are
6717 numbered higher than a pass named "final", even if they are executed
6718 earlier.  @var{dumpname} is generated from the name of the output
6719 file if explicitly specified and not an executable, otherwise it is
6720 the basename of the source file.  These switches may have different
6721 effects when @option{-E} is used for preprocessing.
6722
6723 Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
6724 @option{-d} option @var{letters}.  Here are the possible
6725 letters for use in @var{pass} and @var{letters}, and their meanings:
6726
6727 @table @gcctabopt
6728
6729 @item -fdump-rtl-alignments
6730 @opindex fdump-rtl-alignments
6731 Dump after branch alignments have been computed.
6732
6733 @item -fdump-rtl-asmcons
6734 @opindex fdump-rtl-asmcons
6735 Dump after fixing rtl statements that have unsatisfied in/out constraints.
6736
6737 @item -fdump-rtl-auto_inc_dec
6738 @opindex fdump-rtl-auto_inc_dec
6739 Dump after auto-inc-dec discovery.  This pass is only run on
6740 architectures that have auto inc or auto dec instructions.
6741
6742 @item -fdump-rtl-barriers
6743 @opindex fdump-rtl-barriers
6744 Dump after cleaning up the barrier instructions.
6745
6746 @item -fdump-rtl-bbpart
6747 @opindex fdump-rtl-bbpart
6748 Dump after partitioning hot and cold basic blocks.
6749
6750 @item -fdump-rtl-bbro
6751 @opindex fdump-rtl-bbro
6752 Dump after block reordering.
6753
6754 @item -fdump-rtl-btl1
6755 @itemx -fdump-rtl-btl2
6756 @opindex fdump-rtl-btl2
6757 @opindex fdump-rtl-btl2
6758 @option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
6759 after the two branch
6760 target load optimization passes.
6761
6762 @item -fdump-rtl-bypass
6763 @opindex fdump-rtl-bypass
6764 Dump after jump bypassing and control flow optimizations.
6765
6766 @item -fdump-rtl-combine
6767 @opindex fdump-rtl-combine
6768 Dump after the RTL instruction combination pass.
6769
6770 @item -fdump-rtl-compgotos
6771 @opindex fdump-rtl-compgotos
6772 Dump after duplicating the computed gotos.
6773
6774 @item -fdump-rtl-ce1
6775 @itemx -fdump-rtl-ce2
6776 @itemx -fdump-rtl-ce3
6777 @opindex fdump-rtl-ce1
6778 @opindex fdump-rtl-ce2
6779 @opindex fdump-rtl-ce3
6780 @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
6781 @option{-fdump-rtl-ce3} enable dumping after the three
6782 if conversion passes.
6783
6784 @item -fdump-rtl-cprop_hardreg
6785 @opindex fdump-rtl-cprop_hardreg
6786 Dump after hard register copy propagation.
6787
6788 @item -fdump-rtl-csa
6789 @opindex fdump-rtl-csa
6790 Dump after combining stack adjustments.
6791
6792 @item -fdump-rtl-cse1
6793 @itemx -fdump-rtl-cse2
6794 @opindex fdump-rtl-cse1
6795 @opindex fdump-rtl-cse2
6796 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
6797 the two common subexpression elimination passes.
6798
6799 @item -fdump-rtl-dce
6800 @opindex fdump-rtl-dce
6801 Dump after the standalone dead code elimination passes.
6802
6803 @item -fdump-rtl-dbr
6804 @opindex fdump-rtl-dbr
6805 Dump after delayed branch scheduling.
6806
6807 @item -fdump-rtl-dce1
6808 @itemx -fdump-rtl-dce2
6809 @opindex fdump-rtl-dce1
6810 @opindex fdump-rtl-dce2
6811 @option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
6812 the two dead store elimination passes.
6813
6814 @item -fdump-rtl-eh
6815 @opindex fdump-rtl-eh
6816 Dump after finalization of EH handling code.
6817
6818 @item -fdump-rtl-eh_ranges
6819 @opindex fdump-rtl-eh_ranges
6820 Dump after conversion of EH handling range regions.
6821
6822 @item -fdump-rtl-expand
6823 @opindex fdump-rtl-expand
6824 Dump after RTL generation.
6825
6826 @item -fdump-rtl-fwprop1
6827 @itemx -fdump-rtl-fwprop2
6828 @opindex fdump-rtl-fwprop1
6829 @opindex fdump-rtl-fwprop2
6830 @option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
6831 dumping after the two forward propagation passes.
6832
6833 @item -fdump-rtl-gcse1
6834 @itemx -fdump-rtl-gcse2
6835 @opindex fdump-rtl-gcse1
6836 @opindex fdump-rtl-gcse2
6837 @option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
6838 after global common subexpression elimination.
6839
6840 @item -fdump-rtl-init-regs
6841 @opindex fdump-rtl-init-regs
6842 Dump after the initialization of the registers.
6843
6844 @item -fdump-rtl-initvals
6845 @opindex fdump-rtl-initvals
6846 Dump after the computation of the initial value sets.
6847
6848 @item -fdump-rtl-into_cfglayout
6849 @opindex fdump-rtl-into_cfglayout
6850 Dump after converting to cfglayout mode.
6851
6852 @item -fdump-rtl-ira
6853 @opindex fdump-rtl-ira
6854 Dump after iterated register allocation.
6855
6856 @item -fdump-rtl-jump
6857 @opindex fdump-rtl-jump
6858 Dump after the second jump optimization.
6859
6860 @item -fdump-rtl-loop2
6861 @opindex fdump-rtl-loop2
6862 @option{-fdump-rtl-loop2} enables dumping after the rtl
6863 loop optimization passes.
6864
6865 @item -fdump-rtl-mach
6866 @opindex fdump-rtl-mach
6867 Dump after performing the machine dependent reorganization pass, if that
6868 pass exists.
6869
6870 @item -fdump-rtl-mode_sw
6871 @opindex fdump-rtl-mode_sw
6872 Dump after removing redundant mode switches.
6873
6874 @item -fdump-rtl-rnreg
6875 @opindex fdump-rtl-rnreg
6876 Dump after register renumbering.
6877
6878 @item -fdump-rtl-outof_cfglayout
6879 @opindex fdump-rtl-outof_cfglayout
6880 Dump after converting from cfglayout mode.
6881
6882 @item -fdump-rtl-peephole2
6883 @opindex fdump-rtl-peephole2
6884 Dump after the peephole pass.
6885
6886 @item -fdump-rtl-postreload
6887 @opindex fdump-rtl-postreload
6888 Dump after post-reload optimizations.
6889
6890 @item -fdump-rtl-pro_and_epilogue
6891 @opindex fdump-rtl-pro_and_epilogue
6892 Dump after generating the function prologues and epilogues.
6893
6894 @item -fdump-rtl-sched1
6895 @itemx -fdump-rtl-sched2
6896 @opindex fdump-rtl-sched1
6897 @opindex fdump-rtl-sched2
6898 @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
6899 after the basic block scheduling passes.
6900
6901 @item -fdump-rtl-ree
6902 @opindex fdump-rtl-ree
6903 Dump after sign/zero extension elimination.
6904
6905 @item -fdump-rtl-seqabstr
6906 @opindex fdump-rtl-seqabstr
6907 Dump after common sequence discovery.
6908
6909 @item -fdump-rtl-shorten
6910 @opindex fdump-rtl-shorten
6911 Dump after shortening branches.
6912
6913 @item -fdump-rtl-sibling
6914 @opindex fdump-rtl-sibling
6915 Dump after sibling call optimizations.
6916
6917 @item -fdump-rtl-split1
6918 @itemx -fdump-rtl-split2
6919 @itemx -fdump-rtl-split3
6920 @itemx -fdump-rtl-split4
6921 @itemx -fdump-rtl-split5
6922 @opindex fdump-rtl-split1
6923 @opindex fdump-rtl-split2
6924 @opindex fdump-rtl-split3
6925 @opindex fdump-rtl-split4
6926 @opindex fdump-rtl-split5
6927 These options enable dumping after five rounds of
6928 instruction splitting.
6929
6930 @item -fdump-rtl-sms
6931 @opindex fdump-rtl-sms
6932 Dump after modulo scheduling.  This pass is only run on some
6933 architectures.
6934
6935 @item -fdump-rtl-stack
6936 @opindex fdump-rtl-stack
6937 Dump after conversion from GCC's ``flat register file'' registers to the
6938 x87's stack-like registers.  This pass is only run on x86 variants.
6939
6940 @item -fdump-rtl-subreg1
6941 @itemx -fdump-rtl-subreg2
6942 @opindex fdump-rtl-subreg1
6943 @opindex fdump-rtl-subreg2
6944 @option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
6945 the two subreg expansion passes.
6946
6947 @item -fdump-rtl-unshare
6948 @opindex fdump-rtl-unshare
6949 Dump after all rtl has been unshared.
6950
6951 @item -fdump-rtl-vartrack
6952 @opindex fdump-rtl-vartrack
6953 Dump after variable tracking.
6954
6955 @item -fdump-rtl-vregs
6956 @opindex fdump-rtl-vregs
6957 Dump after converting virtual registers to hard registers.
6958
6959 @item -fdump-rtl-web
6960 @opindex fdump-rtl-web
6961 Dump after live range splitting.
6962
6963 @item -fdump-rtl-regclass
6964 @itemx -fdump-rtl-subregs_of_mode_init
6965 @itemx -fdump-rtl-subregs_of_mode_finish
6966 @itemx -fdump-rtl-dfinit
6967 @itemx -fdump-rtl-dfinish
6968 @opindex fdump-rtl-regclass
6969 @opindex fdump-rtl-subregs_of_mode_init
6970 @opindex fdump-rtl-subregs_of_mode_finish
6971 @opindex fdump-rtl-dfinit
6972 @opindex fdump-rtl-dfinish
6973 These dumps are defined but always produce empty files.
6974
6975 @item -da
6976 @itemx -fdump-rtl-all
6977 @opindex da
6978 @opindex fdump-rtl-all
6979 Produce all the dumps listed above.
6980
6981 @item -dA
6982 @opindex dA
6983 Annotate the assembler output with miscellaneous debugging information.
6984
6985 @item -dD
6986 @opindex dD
6987 Dump all macro definitions, at the end of preprocessing, in addition to
6988 normal output.
6989
6990 @item -dH
6991 @opindex dH
6992 Produce a core dump whenever an error occurs.
6993
6994 @item -dp
6995 @opindex dp
6996 Annotate the assembler output with a comment indicating which
6997 pattern and alternative is used.  The length of each instruction is
6998 also printed.
6999
7000 @item -dP
7001 @opindex dP
7002 Dump the RTL in the assembler output as a comment before each instruction.
7003 Also turns on @option{-dp} annotation.
7004
7005 @item -dx
7006 @opindex dx
7007 Just generate RTL for a function instead of compiling it.  Usually used
7008 with @option{-fdump-rtl-expand}.
7009 @end table
7010
7011 @item -fdump-noaddr
7012 @opindex fdump-noaddr
7013 When doing debugging dumps, suppress address output.  This makes it more
7014 feasible to use diff on debugging dumps for compiler invocations with
7015 different compiler binaries and/or different
7016 text / bss / data / heap / stack / dso start locations.
7017
7018 @item -freport-bug
7019 @opindex freport-bug
7020 Collect and dump debug information into temporary file if ICE in C/C++
7021 compiler occured.
7022
7023 @item -fdump-unnumbered
7024 @opindex fdump-unnumbered
7025 When doing debugging dumps, suppress instruction numbers and address output.
7026 This makes it more feasible to use diff on debugging dumps for compiler
7027 invocations with different options, in particular with and without
7028 @option{-g}.
7029
7030 @item -fdump-unnumbered-links
7031 @opindex fdump-unnumbered-links
7032 When doing debugging dumps (see @option{-d} option above), suppress
7033 instruction numbers for the links to the previous and next instructions
7034 in a sequence.
7035
7036 @item -fdump-translation-unit @r{(C++ only)}
7037 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
7038 @opindex fdump-translation-unit
7039 Dump a representation of the tree structure for the entire translation
7040 unit to a file.  The file name is made by appending @file{.tu} to the
7041 source file name, and the file is created in the same directory as the
7042 output file.  If the @samp{-@var{options}} form is used, @var{options}
7043 controls the details of the dump as described for the
7044 @option{-fdump-tree} options.
7045
7046 @item -fdump-class-hierarchy @r{(C++ only)}
7047 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
7048 @opindex fdump-class-hierarchy
7049 Dump a representation of each class's hierarchy and virtual function
7050 table layout to a file.  The file name is made by appending
7051 @file{.class} to the source file name, and the file is created in the
7052 same directory as the output file.  If the @samp{-@var{options}} form
7053 is used, @var{options} controls the details of the dump as described
7054 for the @option{-fdump-tree} options.
7055
7056 @item -fdump-ipa-@var{switch}
7057 @opindex fdump-ipa
7058 Control the dumping at various stages of inter-procedural analysis
7059 language tree to a file.  The file name is generated by appending a
7060 switch specific suffix to the source file name, and the file is created
7061 in the same directory as the output file.  The following dumps are
7062 possible:
7063
7064 @table @samp
7065 @item all
7066 Enables all inter-procedural analysis dumps.
7067
7068 @item cgraph
7069 Dumps information about call-graph optimization, unused function removal,
7070 and inlining decisions.
7071
7072 @item inline
7073 Dump after function inlining.
7074
7075 @end table
7076
7077 @item -fdump-passes
7078 @opindex fdump-passes
7079 Dump the list of optimization passes that are turned on and off by
7080 the current command-line options.
7081
7082 @item -fdump-statistics-@var{option}
7083 @opindex fdump-statistics
7084 Enable and control dumping of pass statistics in a separate file.  The
7085 file name is generated by appending a suffix ending in
7086 @samp{.statistics} to the source file name, and the file is created in
7087 the same directory as the output file.  If the @samp{-@var{option}}
7088 form is used, @samp{-stats} causes counters to be summed over the
7089 whole compilation unit while @samp{-details} dumps every event as
7090 the passes generate them.  The default with no option is to sum
7091 counters for each function compiled.
7092
7093 @item -fdump-tree-@var{switch}
7094 @itemx -fdump-tree-@var{switch}-@var{options}
7095 @itemx -fdump-tree-@var{switch}-@var{options}=@var{filename}
7096 @opindex fdump-tree
7097 Control the dumping at various stages of processing the intermediate
7098 language tree to a file.  The file name is generated by appending a
7099 switch-specific suffix to the source file name, and the file is
7100 created in the same directory as the output file. In case of
7101 @option{=@var{filename}} option, the dump is output on the given file
7102 instead of the auto named dump files.  If the @samp{-@var{options}}
7103 form is used, @var{options} is a list of @samp{-} separated options
7104 which control the details of the dump.  Not all options are applicable
7105 to all dumps; those that are not meaningful are ignored.  The
7106 following options are available
7107
7108 @table @samp
7109 @item address
7110 Print the address of each node.  Usually this is not meaningful as it
7111 changes according to the environment and source file.  Its primary use
7112 is for tying up a dump file with a debug environment.
7113 @item asmname
7114 If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
7115 in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
7116 use working backward from mangled names in the assembly file.
7117 @item slim
7118 When dumping front-end intermediate representations, inhibit dumping
7119 of members of a scope or body of a function merely because that scope
7120 has been reached.  Only dump such items when they are directly reachable
7121 by some other path.
7122
7123 When dumping pretty-printed trees, this option inhibits dumping the
7124 bodies of control structures.
7125
7126 When dumping RTL, print the RTL in slim (condensed) form instead of
7127 the default LISP-like representation.
7128 @item raw
7129 Print a raw representation of the tree.  By default, trees are
7130 pretty-printed into a C-like representation.
7131 @item details
7132 Enable more detailed dumps (not honored by every dump option). Also
7133 include information from the optimization passes.
7134 @item stats
7135 Enable dumping various statistics about the pass (not honored by every dump
7136 option).
7137 @item blocks
7138 Enable showing basic block boundaries (disabled in raw dumps).
7139 @item graph
7140 For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
7141 dump a representation of the control flow graph suitable for viewing with
7142 GraphViz to @file{@var{file}.@var{passid}.@var{pass}.dot}.  Each function in
7143 the file is pretty-printed as a subgraph, so that GraphViz can render them
7144 all in a single plot.
7145
7146 This option currently only works for RTL dumps, and the RTL is always
7147 dumped in slim form.
7148 @item vops
7149 Enable showing virtual operands for every statement.
7150 @item lineno
7151 Enable showing line numbers for statements.
7152 @item uid
7153 Enable showing the unique ID (@code{DECL_UID}) for each variable.
7154 @item verbose
7155 Enable showing the tree dump for each statement.
7156 @item eh
7157 Enable showing the EH region number holding each statement.
7158 @item scev
7159 Enable showing scalar evolution analysis details.
7160 @item optimized
7161 Enable showing optimization information (only available in certain
7162 passes).
7163 @item missed
7164 Enable showing missed optimization information (only available in certain
7165 passes).
7166 @item note
7167 Enable other detailed optimization information (only available in
7168 certain passes).
7169 @item =@var{filename}
7170 Instead of an auto named dump file, output into the given file
7171 name. The file names @file{stdout} and @file{stderr} are treated
7172 specially and are considered already open standard streams. For
7173 example,
7174
7175 @smallexample
7176 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
7177      -fdump-tree-pre=stderr file.c
7178 @end smallexample
7179
7180 outputs vectorizer dump into @file{foo.dump}, while the PRE dump is
7181 output on to @file{stderr}. If two conflicting dump filenames are
7182 given for the same pass, then the latter option overrides the earlier
7183 one.
7184
7185 @item split-paths
7186 @opindex fdump-tree-split-paths
7187 Dump each function after splitting paths to loop backedges.  The file
7188 name is made by appending @file{.split-paths} to the source file name.
7189
7190 @item all
7191 Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
7192 and @option{lineno}.
7193
7194 @item optall
7195 Turn on all optimization options, i.e., @option{optimized},
7196 @option{missed}, and @option{note}.
7197 @end table
7198
7199 The following tree dumps are possible:
7200 @table @samp
7201
7202 @item original
7203 @opindex fdump-tree-original
7204 Dump before any tree based optimization, to @file{@var{file}.original}.
7205
7206 @item optimized
7207 @opindex fdump-tree-optimized
7208 Dump after all tree based optimization, to @file{@var{file}.optimized}.
7209
7210 @item gimple
7211 @opindex fdump-tree-gimple
7212 Dump each function before and after the gimplification pass to a file.  The
7213 file name is made by appending @file{.gimple} to the source file name.
7214
7215 @item cfg
7216 @opindex fdump-tree-cfg
7217 Dump the control flow graph of each function to a file.  The file name is
7218 made by appending @file{.cfg} to the source file name.
7219
7220 @item ch
7221 @opindex fdump-tree-ch
7222 Dump each function after copying loop headers.  The file name is made by
7223 appending @file{.ch} to the source file name.
7224
7225 @item ssa
7226 @opindex fdump-tree-ssa
7227 Dump SSA related information to a file.  The file name is made by appending
7228 @file{.ssa} to the source file name.
7229
7230 @item alias
7231 @opindex fdump-tree-alias
7232 Dump aliasing information for each function.  The file name is made by
7233 appending @file{.alias} to the source file name.
7234
7235 @item ccp
7236 @opindex fdump-tree-ccp
7237 Dump each function after CCP@.  The file name is made by appending
7238 @file{.ccp} to the source file name.
7239
7240 @item storeccp
7241 @opindex fdump-tree-storeccp
7242 Dump each function after STORE-CCP@.  The file name is made by appending
7243 @file{.storeccp} to the source file name.
7244
7245 @item pre
7246 @opindex fdump-tree-pre
7247 Dump trees after partial redundancy elimination.  The file name is made
7248 by appending @file{.pre} to the source file name.
7249
7250 @item fre
7251 @opindex fdump-tree-fre
7252 Dump trees after full redundancy elimination.  The file name is made
7253 by appending @file{.fre} to the source file name.
7254
7255 @item copyprop
7256 @opindex fdump-tree-copyprop
7257 Dump trees after copy propagation.  The file name is made
7258 by appending @file{.copyprop} to the source file name.
7259
7260 @item store_copyprop
7261 @opindex fdump-tree-store_copyprop
7262 Dump trees after store copy-propagation.  The file name is made
7263 by appending @file{.store_copyprop} to the source file name.
7264
7265 @item dce
7266 @opindex fdump-tree-dce
7267 Dump each function after dead code elimination.  The file name is made by
7268 appending @file{.dce} to the source file name.
7269
7270 @item sra
7271 @opindex fdump-tree-sra
7272 Dump each function after performing scalar replacement of aggregates.  The
7273 file name is made by appending @file{.sra} to the source file name.
7274
7275 @item sink
7276 @opindex fdump-tree-sink
7277 Dump each function after performing code sinking.  The file name is made
7278 by appending @file{.sink} to the source file name.
7279
7280 @item dom
7281 @opindex fdump-tree-dom
7282 Dump each function after applying dominator tree optimizations.  The file
7283 name is made by appending @file{.dom} to the source file name.
7284
7285 @item dse
7286 @opindex fdump-tree-dse
7287 Dump each function after applying dead store elimination.  The file
7288 name is made by appending @file{.dse} to the source file name.
7289
7290 @item phiopt
7291 @opindex fdump-tree-phiopt
7292 Dump each function after optimizing PHI nodes into straightline code.  The file
7293 name is made by appending @file{.phiopt} to the source file name.
7294
7295 @item backprop
7296 @opindex fdump-tree-backprop
7297 Dump each function after back-propagating use information up the definition
7298 chain.  The file name is made by appending @file{.backprop} to the
7299 source file name.
7300
7301 @item forwprop
7302 @opindex fdump-tree-forwprop
7303 Dump each function after forward propagating single use variables.  The file
7304 name is made by appending @file{.forwprop} to the source file name.
7305
7306 @item nrv
7307 @opindex fdump-tree-nrv
7308 Dump each function after applying the named return value optimization on
7309 generic trees.  The file name is made by appending @file{.nrv} to the source
7310 file name.
7311
7312 @item vect
7313 @opindex fdump-tree-vect
7314 Dump each function after applying vectorization of loops.  The file name is
7315 made by appending @file{.vect} to the source file name.
7316
7317 @item slp
7318 @opindex fdump-tree-slp
7319 Dump each function after applying vectorization of basic blocks.  The file name
7320 is made by appending @file{.slp} to the source file name.
7321
7322 @item vrp
7323 @opindex fdump-tree-vrp
7324 Dump each function after Value Range Propagation (VRP).  The file name
7325 is made by appending @file{.vrp} to the source file name.
7326
7327 @item oaccdevlow
7328 @opindex fdump-tree-oaccdevlow
7329 Dump each function after applying device-specific OpenACC transformations.
7330 The file name is made by appending @file{.oaccdevlow} to the source file name.
7331
7332 @item all
7333 @opindex fdump-tree-all
7334 Enable all the available tree dumps with the flags provided in this option.
7335 @end table
7336
7337 @item -fopt-info
7338 @itemx -fopt-info-@var{options}
7339 @itemx -fopt-info-@var{options}=@var{filename}
7340 @opindex fopt-info
7341 Controls optimization dumps from various optimization passes. If the
7342 @samp{-@var{options}} form is used, @var{options} is a list of
7343 @samp{-} separated option keywords to select the dump details and
7344 optimizations.  
7345
7346 The @var{options} can be divided into two groups: options describing the
7347 verbosity of the dump, and options describing which optimizations
7348 should be included. The options from both the groups can be freely
7349 mixed as they are non-overlapping. However, in case of any conflicts,
7350 the later options override the earlier options on the command
7351 line. 
7352
7353 The following options control the dump verbosity:
7354
7355 @table @samp
7356 @item optimized
7357 Print information when an optimization is successfully applied. It is
7358 up to a pass to decide which information is relevant. For example, the
7359 vectorizer passes print the source location of loops which are
7360 successfully vectorized.
7361 @item missed
7362 Print information about missed optimizations. Individual passes
7363 control which information to include in the output. 
7364 @item note
7365 Print verbose information about optimizations, such as certain
7366 transformations, more detailed messages about decisions etc.
7367 @item all
7368 Print detailed optimization information. This includes
7369 @samp{optimized}, @samp{missed}, and @samp{note}.
7370 @end table
7371
7372 One or more of the following option keywords can be used to describe a
7373 group of optimizations:
7374
7375 @table @samp
7376 @item ipa
7377 Enable dumps from all interprocedural optimizations.
7378 @item loop
7379 Enable dumps from all loop optimizations.
7380 @item inline
7381 Enable dumps from all inlining optimizations.
7382 @item vec
7383 Enable dumps from all vectorization optimizations.
7384 @item optall
7385 Enable dumps from all optimizations. This is a superset of
7386 the optimization groups listed above.
7387 @end table
7388
7389 If @var{options} is
7390 omitted, it defaults to @samp{optimized-optall}, which means to dump all
7391 info about successful optimizations from all the passes.  
7392
7393 If the @var{filename} is provided, then the dumps from all the
7394 applicable optimizations are concatenated into the @var{filename}.
7395 Otherwise the dump is output onto @file{stderr}. Though multiple
7396 @option{-fopt-info} options are accepted, only one of them can include
7397 a @var{filename}. If other filenames are provided then all but the
7398 first such option are ignored.
7399
7400 Note that the output @var{filename} is overwritten
7401 in case of multiple translation units. If a combined output from
7402 multiple translation units is desired, @file{stderr} should be used
7403 instead.
7404
7405 In the following example, the optimization info is output to
7406 @file{stderr}:
7407
7408 @smallexample
7409 gcc -O3 -fopt-info
7410 @end smallexample
7411
7412 This example:
7413 @smallexample
7414 gcc -O3 -fopt-info-missed=missed.all
7415 @end smallexample
7416
7417 @noindent
7418 outputs missed optimization report from all the passes into
7419 @file{missed.all}, and this one:
7420
7421 @smallexample
7422 gcc -O2 -ftree-vectorize -fopt-info-vec-missed
7423 @end smallexample
7424
7425 @noindent
7426 prints information about missed optimization opportunities from
7427 vectorization passes on @file{stderr}.  
7428 Note that @option{-fopt-info-vec-missed} is equivalent to 
7429 @option{-fopt-info-missed-vec}.
7430
7431 As another example,
7432 @smallexample
7433 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
7434 @end smallexample
7435
7436 @noindent
7437 outputs information about missed optimizations as well as
7438 optimized locations from all the inlining passes into
7439 @file{inline.txt}.
7440
7441 Finally, consider:
7442
7443 @smallexample
7444 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
7445 @end smallexample
7446
7447 @noindent
7448 Here the two output filenames @file{vec.miss} and @file{loop.opt} are
7449 in conflict since only one output file is allowed. In this case, only
7450 the first option takes effect and the subsequent options are
7451 ignored. Thus only @file{vec.miss} is produced which contains
7452 dumps from the vectorizer about missed opportunities.
7453
7454 @item -frandom-seed=@var{number}
7455 @opindex frandom-seed
7456 This option provides a seed that GCC uses in place of
7457 random numbers in generating certain symbol names
7458 that have to be different in every compiled file.  It is also used to
7459 place unique stamps in coverage data files and the object files that
7460 produce them.  You can use the @option{-frandom-seed} option to produce
7461 reproducibly identical object files.
7462
7463 The @var{number} should be different for every file you compile.
7464
7465 @item -fsched-verbose=@var{n}
7466 @opindex fsched-verbose
7467 On targets that use instruction scheduling, this option controls the
7468 amount of debugging output the scheduler prints to the dump files.
7469
7470 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
7471 same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
7472 For @var{n} greater than one, it also output basic block probabilities,
7473 detailed ready list information and unit/insn info.  For @var{n} greater
7474 than two, it includes RTL at abort point, control-flow and regions info.
7475 And for @var{n} over four, @option{-fsched-verbose} also includes
7476 dependence info.
7477
7478 @item -save-temps
7479 @itemx -save-temps=cwd
7480 @opindex save-temps
7481 Store the usual ``temporary'' intermediate files permanently; place them
7482 in the current directory and name them based on the source file.  Thus,
7483 compiling @file{foo.c} with @option{-c -save-temps} produces files
7484 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
7485 preprocessed @file{foo.i} output file even though the compiler now
7486 normally uses an integrated preprocessor.
7487
7488 When used in combination with the @option{-x} command-line option,
7489 @option{-save-temps} is sensible enough to avoid over writing an
7490 input source file with the same extension as an intermediate file.
7491 The corresponding intermediate file may be obtained by renaming the
7492 source file before using @option{-save-temps}.
7493
7494 If you invoke GCC in parallel, compiling several different source
7495 files that share a common base name in different subdirectories or the
7496 same source file compiled for multiple output destinations, it is
7497 likely that the different parallel compilers will interfere with each
7498 other, and overwrite the temporary files.  For instance:
7499
7500 @smallexample
7501 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
7502 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
7503 @end smallexample
7504
7505 may result in @file{foo.i} and @file{foo.o} being written to
7506 simultaneously by both compilers.
7507
7508 @item -save-temps=obj
7509 @opindex save-temps=obj
7510 Store the usual ``temporary'' intermediate files permanently.  If the
7511 @option{-o} option is used, the temporary files are based on the
7512 object file.  If the @option{-o} option is not used, the
7513 @option{-save-temps=obj} switch behaves like @option{-save-temps}.
7514
7515 For example:
7516
7517 @smallexample
7518 gcc -save-temps=obj -c foo.c
7519 gcc -save-temps=obj -c bar.c -o dir/xbar.o
7520 gcc -save-temps=obj foobar.c -o dir2/yfoobar
7521 @end smallexample
7522
7523 @noindent
7524 creates @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
7525 @file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
7526 @file{dir2/yfoobar.o}.
7527
7528 @item -time@r{[}=@var{file}@r{]}
7529 @opindex time
7530 Report the CPU time taken by each subprocess in the compilation
7531 sequence.  For C source files, this is the compiler proper and assembler
7532 (plus the linker if linking is done).
7533
7534 Without the specification of an output file, the output looks like this:
7535
7536 @smallexample
7537 # cc1 0.12 0.01
7538 # as 0.00 0.01
7539 @end smallexample
7540
7541 The first number on each line is the ``user time'', that is time spent
7542 executing the program itself.  The second number is ``system time'',
7543 time spent executing operating system routines on behalf of the program.
7544 Both numbers are in seconds.
7545
7546 With the specification of an output file, the output is appended to the
7547 named file, and it looks like this:
7548
7549 @smallexample
7550 0.12 0.01 cc1 @var{options}
7551 0.00 0.01 as @var{options}
7552 @end smallexample
7553
7554 The ``user time'' and the ``system time'' are moved before the program
7555 name, and the options passed to the program are displayed, so that one
7556 can later tell what file was being compiled, and with which options.
7557
7558 @item -fvar-tracking
7559 @opindex fvar-tracking
7560 Run variable tracking pass.  It computes where variables are stored at each
7561 position in code.  Better debugging information is then generated
7562 (if the debugging information format supports this information).
7563
7564 It is enabled by default when compiling with optimization (@option{-Os},
7565 @option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
7566 the debug info format supports it.
7567
7568 @item -fvar-tracking-assignments
7569 @opindex fvar-tracking-assignments
7570 @opindex fno-var-tracking-assignments
7571 Annotate assignments to user variables early in the compilation and
7572 attempt to carry the annotations over throughout the compilation all the
7573 way to the end, in an attempt to improve debug information while
7574 optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
7575
7576 It can be enabled even if var-tracking is disabled, in which case
7577 annotations are created and maintained, but discarded at the end.
7578 By default, this flag is enabled together with @option{-fvar-tracking},
7579 except when selective scheduling is enabled.
7580
7581 @item -fvar-tracking-assignments-toggle
7582 @opindex fvar-tracking-assignments-toggle
7583 @opindex fno-var-tracking-assignments-toggle
7584 Toggle @option{-fvar-tracking-assignments}, in the same way that
7585 @option{-gtoggle} toggles @option{-g}.
7586
7587 @item -print-file-name=@var{library}
7588 @opindex print-file-name
7589 Print the full absolute name of the library file @var{library} that
7590 would be used when linking---and don't do anything else.  With this
7591 option, GCC does not compile or link anything; it just prints the
7592 file name.
7593
7594 @item -print-multi-directory
7595 @opindex print-multi-directory
7596 Print the directory name corresponding to the multilib selected by any
7597 other switches present in the command line.  This directory is supposed
7598 to exist in @env{GCC_EXEC_PREFIX}.
7599
7600 @item -print-multi-lib
7601 @opindex print-multi-lib
7602 Print the mapping from multilib directory names to compiler switches
7603 that enable them.  The directory name is separated from the switches by
7604 @samp{;}, and each switch starts with an @samp{@@} instead of the
7605 @samp{-}, without spaces between multiple switches.  This is supposed to
7606 ease shell processing.
7607
7608 @item -print-multi-os-directory
7609 @opindex print-multi-os-directory
7610 Print the path to OS libraries for the selected
7611 multilib, relative to some @file{lib} subdirectory.  If OS libraries are
7612 present in the @file{lib} subdirectory and no multilibs are used, this is
7613 usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
7614 sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
7615 @file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
7616 subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
7617
7618 @item -print-multiarch
7619 @opindex print-multiarch
7620 Print the path to OS libraries for the selected multiarch,
7621 relative to some @file{lib} subdirectory.
7622
7623 @item -print-prog-name=@var{program}
7624 @opindex print-prog-name
7625 Like @option{-print-file-name}, but searches for a program such as @command{cpp}.
7626
7627 @item -print-libgcc-file-name
7628 @opindex print-libgcc-file-name
7629 Same as @option{-print-file-name=libgcc.a}.
7630
7631 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
7632 but you do want to link with @file{libgcc.a}.  You can do:
7633
7634 @smallexample
7635 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
7636 @end smallexample
7637
7638 @item -print-search-dirs
7639 @opindex print-search-dirs
7640 Print the name of the configured installation directory and a list of
7641 program and library directories @command{gcc} searches---and don't do anything else.
7642
7643 This is useful when @command{gcc} prints the error message
7644 @samp{installation problem, cannot exec cpp0: No such file or directory}.
7645 To resolve this you either need to put @file{cpp0} and the other compiler
7646 components where @command{gcc} expects to find them, or you can set the environment
7647 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
7648 Don't forget the trailing @samp{/}.
7649 @xref{Environment Variables}.
7650
7651 @item -print-sysroot
7652 @opindex print-sysroot
7653 Print the target sysroot directory that is used during
7654 compilation.  This is the target sysroot specified either at configure
7655 time or using the @option{--sysroot} option, possibly with an extra
7656 suffix that depends on compilation options.  If no target sysroot is
7657 specified, the option prints nothing.
7658
7659 @item -print-sysroot-headers-suffix
7660 @opindex print-sysroot-headers-suffix
7661 Print the suffix added to the target sysroot when searching for
7662 headers, or give an error if the compiler is not configured with such
7663 a suffix---and don't do anything else.
7664
7665 @item -dumpmachine
7666 @opindex dumpmachine
7667 Print the compiler's target machine (for example,
7668 @samp{i686-pc-linux-gnu})---and don't do anything else.
7669
7670 @item -dumpversion
7671 @opindex dumpversion
7672 Print the compiler version (for example, @code{3.0})---and don't do
7673 anything else.
7674
7675 @item -dumpspecs
7676 @opindex dumpspecs
7677 Print the compiler's built-in specs---and don't do anything else.  (This
7678 is used when GCC itself is being built.)  @xref{Spec Files}.
7679
7680 @item -fno-eliminate-unused-debug-types
7681 @opindex feliminate-unused-debug-types
7682 @opindex fno-eliminate-unused-debug-types
7683 Normally, when producing DWARF 2 output, GCC avoids producing debug symbol 
7684 output for types that are nowhere used in the source file being compiled.
7685 Sometimes it is useful to have GCC emit debugging
7686 information for all types declared in a compilation
7687 unit, regardless of whether or not they are actually used
7688 in that compilation unit, for example 
7689 if, in the debugger, you want to cast a value to a type that is
7690 not actually used in your program (but is declared).  More often,
7691 however, this results in a significant amount of wasted space.
7692 @end table
7693
7694 @node Optimize Options
7695 @section Options That Control Optimization
7696 @cindex optimize options
7697 @cindex options, optimization
7698
7699 These options control various sorts of optimizations.
7700
7701 Without any optimization option, the compiler's goal is to reduce the
7702 cost of compilation and to make debugging produce the expected
7703 results.  Statements are independent: if you stop the program with a
7704 breakpoint between statements, you can then assign a new value to any
7705 variable or change the program counter to any other statement in the
7706 function and get exactly the results you expect from the source
7707 code.
7708
7709 Turning on optimization flags makes the compiler attempt to improve
7710 the performance and/or code size at the expense of compilation time
7711 and possibly the ability to debug the program.
7712
7713 The compiler performs optimization based on the knowledge it has of the
7714 program.  Compiling multiple files at once to a single output file mode allows
7715 the compiler to use information gained from all of the files when compiling
7716 each of them.
7717
7718 Not all optimizations are controlled directly by a flag.  Only
7719 optimizations that have a flag are listed in this section.
7720
7721 Most optimizations are only enabled if an @option{-O} level is set on
7722 the command line.  Otherwise they are disabled, even if individual
7723 optimization flags are specified.
7724
7725 Depending on the target and how GCC was configured, a slightly different
7726 set of optimizations may be enabled at each @option{-O} level than
7727 those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
7728 to find out the exact set of optimizations that are enabled at each level.
7729 @xref{Overall Options}, for examples.
7730
7731 @table @gcctabopt
7732 @item -O
7733 @itemx -O1
7734 @opindex O
7735 @opindex O1
7736 Optimize.  Optimizing compilation takes somewhat more time, and a lot
7737 more memory for a large function.
7738
7739 With @option{-O}, the compiler tries to reduce code size and execution
7740 time, without performing any optimizations that take a great deal of
7741 compilation time.
7742
7743 @option{-O} turns on the following optimization flags:
7744 @gccoptlist{
7745 -fauto-inc-dec @gol
7746 -fbranch-count-reg @gol
7747 -fcombine-stack-adjustments @gol
7748 -fcompare-elim @gol
7749 -fcprop-registers @gol
7750 -fdce @gol
7751 -fdefer-pop @gol
7752 -fdelayed-branch @gol
7753 -fdse @gol
7754 -fforward-propagate @gol
7755 -fguess-branch-probability @gol
7756 -fif-conversion2 @gol
7757 -fif-conversion @gol
7758 -finline-functions-called-once @gol
7759 -fipa-pure-const @gol
7760 -fipa-profile @gol
7761 -fipa-reference @gol
7762 -fmerge-constants @gol
7763 -fmove-loop-invariants @gol
7764 -freorder-blocks @gol
7765 -fshrink-wrap @gol
7766 -fsplit-wide-types @gol
7767 -fssa-backprop @gol
7768 -fssa-phiopt @gol
7769 -ftree-bit-ccp @gol
7770 -ftree-ccp @gol
7771 -ftree-ch @gol
7772 -ftree-coalesce-vars @gol
7773 -ftree-copy-prop @gol
7774 -ftree-dce @gol
7775 -ftree-dominator-opts @gol
7776 -ftree-dse @gol
7777 -ftree-forwprop @gol
7778 -ftree-fre @gol
7779 -ftree-phiprop @gol
7780 -ftree-sink @gol
7781 -ftree-slsr @gol
7782 -ftree-sra @gol
7783 -ftree-pta @gol
7784 -ftree-ter @gol
7785 -funit-at-a-time}
7786
7787 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
7788 where doing so does not interfere with debugging.
7789
7790 @item -O2
7791 @opindex O2
7792 Optimize even more.  GCC performs nearly all supported optimizations
7793 that do not involve a space-speed tradeoff.
7794 As compared to @option{-O}, this option increases both compilation time
7795 and the performance of the generated code.
7796
7797 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
7798 also turns on the following optimization flags:
7799 @gccoptlist{-fthread-jumps @gol
7800 -falign-functions  -falign-jumps @gol
7801 -falign-loops  -falign-labels @gol
7802 -fcaller-saves @gol
7803 -fcrossjumping @gol
7804 -fcse-follow-jumps  -fcse-skip-blocks @gol
7805 -fdelete-null-pointer-checks @gol
7806 -fdevirtualize -fdevirtualize-speculatively @gol
7807 -fexpensive-optimizations @gol
7808 -fgcse  -fgcse-lm  @gol
7809 -fhoist-adjacent-loads @gol
7810 -finline-small-functions @gol
7811 -findirect-inlining @gol
7812 -fipa-cp @gol
7813 -fipa-cp-alignment @gol
7814 -fipa-sra @gol
7815 -fipa-icf @gol
7816 -fisolate-erroneous-paths-dereference @gol
7817 -flra-remat @gol
7818 -foptimize-sibling-calls @gol
7819 -foptimize-strlen @gol
7820 -fpartial-inlining @gol
7821 -fpeephole2 @gol
7822 -freorder-blocks-algorithm=stc @gol
7823 -freorder-blocks-and-partition -freorder-functions @gol
7824 -frerun-cse-after-loop  @gol
7825 -fsched-interblock  -fsched-spec @gol
7826 -fschedule-insns  -fschedule-insns2 @gol
7827 -fsplit-paths @gol
7828 -fstrict-aliasing -fstrict-overflow @gol
7829 -ftree-builtin-call-dce @gol
7830 -ftree-switch-conversion -ftree-tail-merge @gol
7831 -ftree-pre @gol
7832 -ftree-vrp @gol
7833 -fipa-ra}
7834
7835 Please note the warning under @option{-fgcse} about
7836 invoking @option{-O2} on programs that use computed gotos.
7837
7838 @item -O3
7839 @opindex O3
7840 Optimize yet more.  @option{-O3} turns on all optimizations specified
7841 by @option{-O2} and also turns on the @option{-finline-functions},
7842 @option{-funswitch-loops}, @option{-fpredictive-commoning},
7843 @option{-fgcse-after-reload}, @option{-ftree-loop-vectorize},
7844 @option{-ftree-loop-distribute-patterns},
7845 @option{-ftree-slp-vectorize}, @option{-fvect-cost-model},
7846 @option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
7847
7848 @item -O0
7849 @opindex O0
7850 Reduce compilation time and make debugging produce the expected
7851 results.  This is the default.
7852
7853 @item -Os
7854 @opindex Os
7855 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
7856 do not typically increase code size.  It also performs further
7857 optimizations designed to reduce code size.
7858
7859 @option{-Os} disables the following optimization flags:
7860 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
7861 -falign-labels  -freorder-blocks  -freorder-blocks-algorithm=stc @gol
7862 -freorder-blocks-and-partition  -fprefetch-loop-arrays}
7863
7864 @item -Ofast
7865 @opindex Ofast
7866 Disregard strict standards compliance.  @option{-Ofast} enables all
7867 @option{-O3} optimizations.  It also enables optimizations that are not
7868 valid for all standard-compliant programs.
7869 It turns on @option{-ffast-math} and the Fortran-specific
7870 @option{-fno-protect-parens} and @option{-fstack-arrays}.
7871
7872 @item -Og
7873 @opindex Og
7874 Optimize debugging experience.  @option{-Og} enables optimizations
7875 that do not interfere with debugging. It should be the optimization
7876 level of choice for the standard edit-compile-debug cycle, offering
7877 a reasonable level of optimization while maintaining fast compilation
7878 and a good debugging experience.
7879 @end table
7880
7881 If you use multiple @option{-O} options, with or without level numbers,
7882 the last such option is the one that is effective.
7883
7884 Options of the form @option{-f@var{flag}} specify machine-independent
7885 flags.  Most flags have both positive and negative forms; the negative
7886 form of @option{-ffoo} is @option{-fno-foo}.  In the table
7887 below, only one of the forms is listed---the one you typically 
7888 use.  You can figure out the other form by either removing @samp{no-}
7889 or adding it.
7890
7891 The following options control specific optimizations.  They are either
7892 activated by @option{-O} options or are related to ones that are.  You
7893 can use the following flags in the rare cases when ``fine-tuning'' of
7894 optimizations to be performed is desired.
7895
7896 @table @gcctabopt
7897 @item -fno-defer-pop
7898 @opindex fno-defer-pop
7899 Always pop the arguments to each function call as soon as that function
7900 returns.  For machines that must pop arguments after a function call,
7901 the compiler normally lets arguments accumulate on the stack for several
7902 function calls and pops them all at once.
7903
7904 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7905
7906 @item -fforward-propagate
7907 @opindex fforward-propagate
7908 Perform a forward propagation pass on RTL@.  The pass tries to combine two
7909 instructions and checks if the result can be simplified.  If loop unrolling
7910 is active, two passes are performed and the second is scheduled after
7911 loop unrolling.
7912
7913 This option is enabled by default at optimization levels @option{-O},
7914 @option{-O2}, @option{-O3}, @option{-Os}.
7915
7916 @item -ffp-contract=@var{style}
7917 @opindex ffp-contract
7918 @option{-ffp-contract=off} disables floating-point expression contraction.
7919 @option{-ffp-contract=fast} enables floating-point expression contraction
7920 such as forming of fused multiply-add operations if the target has
7921 native support for them.
7922 @option{-ffp-contract=on} enables floating-point expression contraction
7923 if allowed by the language standard.  This is currently not implemented
7924 and treated equal to @option{-ffp-contract=off}.
7925
7926 The default is @option{-ffp-contract=fast}.
7927
7928 @item -fomit-frame-pointer
7929 @opindex fomit-frame-pointer
7930 Don't keep the frame pointer in a register for functions that
7931 don't need one.  This avoids the instructions to save, set up and
7932 restore frame pointers; it also makes an extra register available
7933 in many functions.  @strong{It also makes debugging impossible on
7934 some machines.}
7935
7936 On some machines, such as the VAX, this flag has no effect, because
7937 the standard calling sequence automatically handles the frame pointer
7938 and nothing is saved by pretending it doesn't exist.  The
7939 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
7940 whether a target machine supports this flag.  @xref{Registers,,Register
7941 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
7942
7943 The default setting (when not optimizing for
7944 size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets is
7945 @option{-fomit-frame-pointer}.  You can configure GCC with the
7946 @option{--enable-frame-pointer} configure option to change the default.
7947
7948 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7949
7950 @item -foptimize-sibling-calls
7951 @opindex foptimize-sibling-calls
7952 Optimize sibling and tail recursive calls.
7953
7954 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7955
7956 @item -foptimize-strlen
7957 @opindex foptimize-strlen
7958 Optimize various standard C string functions (e.g. @code{strlen},
7959 @code{strchr} or @code{strcpy}) and
7960 their @code{_FORTIFY_SOURCE} counterparts into faster alternatives.
7961
7962 Enabled at levels @option{-O2}, @option{-O3}.
7963
7964 @item -fno-inline
7965 @opindex fno-inline
7966 Do not expand any functions inline apart from those marked with
7967 the @code{always_inline} attribute.  This is the default when not
7968 optimizing.
7969
7970 Single functions can be exempted from inlining by marking them
7971 with the @code{noinline} attribute.
7972
7973 @item -finline-small-functions
7974 @opindex finline-small-functions
7975 Integrate functions into their callers when their body is smaller than expected
7976 function call code (so overall size of program gets smaller).  The compiler
7977 heuristically decides which functions are simple enough to be worth integrating
7978 in this way.  This inlining applies to all functions, even those not declared
7979 inline.
7980
7981 Enabled at level @option{-O2}.
7982
7983 @item -findirect-inlining
7984 @opindex findirect-inlining
7985 Inline also indirect calls that are discovered to be known at compile
7986 time thanks to previous inlining.  This option has any effect only
7987 when inlining itself is turned on by the @option{-finline-functions}
7988 or @option{-finline-small-functions} options.
7989
7990 Enabled at level @option{-O2}.
7991
7992 @item -finline-functions
7993 @opindex finline-functions
7994 Consider all functions for inlining, even if they are not declared inline.
7995 The compiler heuristically decides which functions are worth integrating
7996 in this way.
7997
7998 If all calls to a given function are integrated, and the function is
7999 declared @code{static}, then the function is normally not output as
8000 assembler code in its own right.
8001
8002 Enabled at level @option{-O3}.
8003
8004 @item -finline-functions-called-once
8005 @opindex finline-functions-called-once
8006 Consider all @code{static} functions called once for inlining into their
8007 caller even if they are not marked @code{inline}.  If a call to a given
8008 function is integrated, then the function is not output as assembler code
8009 in its own right.
8010
8011 Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
8012
8013 @item -fearly-inlining
8014 @opindex fearly-inlining
8015 Inline functions marked by @code{always_inline} and functions whose body seems
8016 smaller than the function call overhead early before doing
8017 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
8018 makes profiling significantly cheaper and usually inlining faster on programs
8019 having large chains of nested wrapper functions.
8020
8021 Enabled by default.
8022
8023 @item -fipa-sra
8024 @opindex fipa-sra
8025 Perform interprocedural scalar replacement of aggregates, removal of
8026 unused parameters and replacement of parameters passed by reference
8027 by parameters passed by value.
8028
8029 Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
8030
8031 @item -finline-limit=@var{n}
8032 @opindex finline-limit
8033 By default, GCC limits the size of functions that can be inlined.  This flag
8034 allows coarse control of this limit.  @var{n} is the size of functions that
8035 can be inlined in number of pseudo instructions.
8036
8037 Inlining is actually controlled by a number of parameters, which may be
8038 specified individually by using @option{--param @var{name}=@var{value}}.
8039 The @option{-finline-limit=@var{n}} option sets some of these parameters
8040 as follows:
8041
8042 @table @gcctabopt
8043 @item max-inline-insns-single
8044 is set to @var{n}/2.
8045 @item max-inline-insns-auto
8046 is set to @var{n}/2.
8047 @end table
8048
8049 See below for a documentation of the individual
8050 parameters controlling inlining and for the defaults of these parameters.
8051
8052 @emph{Note:} there may be no value to @option{-finline-limit} that results
8053 in default behavior.
8054
8055 @emph{Note:} pseudo instruction represents, in this particular context, an
8056 abstract measurement of function's size.  In no way does it represent a count
8057 of assembly instructions and as such its exact meaning might change from one
8058 release to an another.
8059
8060 @item -fno-keep-inline-dllexport
8061 @opindex fno-keep-inline-dllexport
8062 This is a more fine-grained version of @option{-fkeep-inline-functions},
8063 which applies only to functions that are declared using the @code{dllexport}
8064 attribute or declspec (@xref{Function Attributes,,Declaring Attributes of
8065 Functions}.)
8066
8067 @item -fkeep-inline-functions
8068 @opindex fkeep-inline-functions
8069 In C, emit @code{static} functions that are declared @code{inline}
8070 into the object file, even if the function has been inlined into all
8071 of its callers.  This switch does not affect functions using the
8072 @code{extern inline} extension in GNU C90@.  In C++, emit any and all
8073 inline functions into the object file.
8074
8075 @item -fkeep-static-functions
8076 @opindex fkeep-static-functions
8077 Emit @code{static} functions into the object file, even if the function
8078 is never used.
8079
8080 @item -fkeep-static-consts
8081 @opindex fkeep-static-consts
8082 Emit variables declared @code{static const} when optimization isn't turned
8083 on, even if the variables aren't referenced.
8084
8085 GCC enables this option by default.  If you want to force the compiler to
8086 check if a variable is referenced, regardless of whether or not
8087 optimization is turned on, use the @option{-fno-keep-static-consts} option.
8088
8089 @item -fmerge-constants
8090 @opindex fmerge-constants
8091 Attempt to merge identical constants (string constants and floating-point
8092 constants) across compilation units.
8093
8094 This option is the default for optimized compilation if the assembler and
8095 linker support it.  Use @option{-fno-merge-constants} to inhibit this
8096 behavior.
8097
8098 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8099
8100 @item -fmerge-all-constants
8101 @opindex fmerge-all-constants
8102 Attempt to merge identical constants and identical variables.
8103
8104 This option implies @option{-fmerge-constants}.  In addition to
8105 @option{-fmerge-constants} this considers e.g.@: even constant initialized
8106 arrays or initialized constant variables with integral or floating-point
8107 types.  Languages like C or C++ require each variable, including multiple
8108 instances of the same variable in recursive calls, to have distinct locations,
8109 so using this option results in non-conforming
8110 behavior.
8111
8112 @item -fmodulo-sched
8113 @opindex fmodulo-sched
8114 Perform swing modulo scheduling immediately before the first scheduling
8115 pass.  This pass looks at innermost loops and reorders their
8116 instructions by overlapping different iterations.
8117
8118 @item -fmodulo-sched-allow-regmoves
8119 @opindex fmodulo-sched-allow-regmoves
8120 Perform more aggressive SMS-based modulo scheduling with register moves
8121 allowed.  By setting this flag certain anti-dependences edges are
8122 deleted, which triggers the generation of reg-moves based on the
8123 life-range analysis.  This option is effective only with
8124 @option{-fmodulo-sched} enabled.
8125
8126 @item -fno-branch-count-reg
8127 @opindex fno-branch-count-reg
8128 Do not use ``decrement and branch'' instructions on a count register,
8129 but instead generate a sequence of instructions that decrement a
8130 register, compare it against zero, then branch based upon the result.
8131 This option is only meaningful on architectures that support such
8132 instructions, which include x86, PowerPC, IA-64 and S/390.
8133
8134 Enabled by default at @option{-O1} and higher.
8135
8136 The default is @option{-fbranch-count-reg}.
8137
8138 @item -fno-function-cse
8139 @opindex fno-function-cse
8140 Do not put function addresses in registers; make each instruction that
8141 calls a constant function contain the function's address explicitly.
8142
8143 This option results in less efficient code, but some strange hacks
8144 that alter the assembler output may be confused by the optimizations
8145 performed when this option is not used.
8146
8147 The default is @option{-ffunction-cse}
8148
8149 @item -fno-zero-initialized-in-bss
8150 @opindex fno-zero-initialized-in-bss
8151 If the target supports a BSS section, GCC by default puts variables that
8152 are initialized to zero into BSS@.  This can save space in the resulting
8153 code.
8154
8155 This option turns off this behavior because some programs explicitly
8156 rely on variables going to the data section---e.g., so that the
8157 resulting executable can find the beginning of that section and/or make
8158 assumptions based on that.
8159
8160 The default is @option{-fzero-initialized-in-bss}.
8161
8162 @item -fthread-jumps
8163 @opindex fthread-jumps
8164 Perform optimizations that check to see if a jump branches to a
8165 location where another comparison subsumed by the first is found.  If
8166 so, the first branch is redirected to either the destination of the
8167 second branch or a point immediately following it, depending on whether
8168 the condition is known to be true or false.
8169
8170 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8171
8172 @item -fsplit-wide-types
8173 @opindex fsplit-wide-types
8174 When using a type that occupies multiple registers, such as @code{long
8175 long} on a 32-bit system, split the registers apart and allocate them
8176 independently.  This normally generates better code for those types,
8177 but may make debugging more difficult.
8178
8179 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
8180 @option{-Os}.
8181
8182 @item -fcse-follow-jumps
8183 @opindex fcse-follow-jumps
8184 In common subexpression elimination (CSE), scan through jump instructions
8185 when the target of the jump is not reached by any other path.  For
8186 example, when CSE encounters an @code{if} statement with an
8187 @code{else} clause, CSE follows the jump when the condition
8188 tested is false.
8189
8190 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8191
8192 @item -fcse-skip-blocks
8193 @opindex fcse-skip-blocks
8194 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
8195 follow jumps that conditionally skip over blocks.  When CSE
8196 encounters a simple @code{if} statement with no else clause,
8197 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
8198 body of the @code{if}.
8199
8200 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8201
8202 @item -frerun-cse-after-loop
8203 @opindex frerun-cse-after-loop
8204 Re-run common subexpression elimination after loop optimizations are
8205 performed.
8206
8207 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8208
8209 @item -fgcse
8210 @opindex fgcse
8211 Perform a global common subexpression elimination pass.
8212 This pass also performs global constant and copy propagation.
8213
8214 @emph{Note:} When compiling a program using computed gotos, a GCC
8215 extension, you may get better run-time performance if you disable
8216 the global common subexpression elimination pass by adding
8217 @option{-fno-gcse} to the command line.
8218
8219 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8220
8221 @item -fgcse-lm
8222 @opindex fgcse-lm
8223 When @option{-fgcse-lm} is enabled, global common subexpression elimination
8224 attempts to move loads that are only killed by stores into themselves.  This
8225 allows a loop containing a load/store sequence to be changed to a load outside
8226 the loop, and a copy/store within the loop.
8227
8228 Enabled by default when @option{-fgcse} is enabled.
8229
8230 @item -fgcse-sm
8231 @opindex fgcse-sm
8232 When @option{-fgcse-sm} is enabled, a store motion pass is run after
8233 global common subexpression elimination.  This pass attempts to move
8234 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
8235 loops containing a load/store sequence can be changed to a load before
8236 the loop and a store after the loop.
8237
8238 Not enabled at any optimization level.
8239
8240 @item -fgcse-las
8241 @opindex fgcse-las
8242 When @option{-fgcse-las} is enabled, the global common subexpression
8243 elimination pass eliminates redundant loads that come after stores to the
8244 same memory location (both partial and full redundancies).
8245
8246 Not enabled at any optimization level.
8247
8248 @item -fgcse-after-reload
8249 @opindex fgcse-after-reload
8250 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
8251 pass is performed after reload.  The purpose of this pass is to clean up
8252 redundant spilling.
8253
8254 @item -faggressive-loop-optimizations
8255 @opindex faggressive-loop-optimizations
8256 This option tells the loop optimizer to use language constraints to
8257 derive bounds for the number of iterations of a loop.  This assumes that
8258 loop code does not invoke undefined behavior by for example causing signed
8259 integer overflows or out-of-bound array accesses.  The bounds for the
8260 number of iterations of a loop are used to guide loop unrolling and peeling
8261 and loop exit test optimizations.
8262 This option is enabled by default.
8263
8264 @item -funsafe-loop-optimizations
8265 @opindex funsafe-loop-optimizations
8266 This option tells the loop optimizer to assume that loop indices do not
8267 overflow, and that loops with nontrivial exit condition are not
8268 infinite.  This enables a wider range of loop optimizations even if
8269 the loop optimizer itself cannot prove that these assumptions are valid.
8270 If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
8271 if it finds this kind of loop.
8272
8273 @item -fcrossjumping
8274 @opindex fcrossjumping
8275 Perform cross-jumping transformation.
8276 This transformation unifies equivalent code and saves code size.  The
8277 resulting code may or may not perform better than without cross-jumping.
8278
8279 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8280
8281 @item -fauto-inc-dec
8282 @opindex fauto-inc-dec
8283 Combine increments or decrements of addresses with memory accesses.
8284 This pass is always skipped on architectures that do not have
8285 instructions to support this.  Enabled by default at @option{-O} and
8286 higher on architectures that support this.
8287
8288 @item -fdce
8289 @opindex fdce
8290 Perform dead code elimination (DCE) on RTL@.
8291 Enabled by default at @option{-O} and higher.
8292
8293 @item -fdse
8294 @opindex fdse
8295 Perform dead store elimination (DSE) on RTL@.
8296 Enabled by default at @option{-O} and higher.
8297
8298 @item -fif-conversion
8299 @opindex fif-conversion
8300 Attempt to transform conditional jumps into branch-less equivalents.  This
8301 includes use of conditional moves, min, max, set flags and abs instructions, and
8302 some tricks doable by standard arithmetics.  The use of conditional execution
8303 on chips where it is available is controlled by @option{-fif-conversion2}.
8304
8305 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8306
8307 @item -fif-conversion2
8308 @opindex fif-conversion2
8309 Use conditional execution (where available) to transform conditional jumps into
8310 branch-less equivalents.
8311
8312 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8313
8314 @item -fdeclone-ctor-dtor
8315 @opindex fdeclone-ctor-dtor
8316 The C++ ABI requires multiple entry points for constructors and
8317 destructors: one for a base subobject, one for a complete object, and
8318 one for a virtual destructor that calls operator delete afterwards.
8319 For a hierarchy with virtual bases, the base and complete variants are
8320 clones, which means two copies of the function.  With this option, the
8321 base and complete variants are changed to be thunks that call a common
8322 implementation.
8323
8324 Enabled by @option{-Os}.
8325
8326 @item -fdelete-null-pointer-checks
8327 @opindex fdelete-null-pointer-checks
8328 Assume that programs cannot safely dereference null pointers, and that
8329 no code or data element resides at address zero.
8330 This option enables simple constant
8331 folding optimizations at all optimization levels.  In addition, other
8332 optimization passes in GCC use this flag to control global dataflow
8333 analyses that eliminate useless checks for null pointers; these assume
8334 that a memory access to address zero always results in a trap, so
8335 that if a pointer is checked after it has already been dereferenced,
8336 it cannot be null.
8337
8338 Note however that in some environments this assumption is not true.
8339 Use @option{-fno-delete-null-pointer-checks} to disable this optimization
8340 for programs that depend on that behavior.
8341
8342 This option is enabled by default on most targets.  On Nios II ELF, it
8343 defaults to off.  On AVR and CR16, this option is completely disabled.  
8344
8345 Passes that use the dataflow information
8346 are enabled independently at different optimization levels.
8347
8348 @item -fdevirtualize
8349 @opindex fdevirtualize
8350 Attempt to convert calls to virtual functions to direct calls.  This
8351 is done both within a procedure and interprocedurally as part of
8352 indirect inlining (@option{-findirect-inlining}) and interprocedural constant
8353 propagation (@option{-fipa-cp}).
8354 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8355
8356 @item -fdevirtualize-speculatively
8357 @opindex fdevirtualize-speculatively
8358 Attempt to convert calls to virtual functions to speculative direct calls.
8359 Based on the analysis of the type inheritance graph, determine for a given call
8360 the set of likely targets. If the set is small, preferably of size 1, change
8361 the call into a conditional deciding between direct and indirect calls.  The
8362 speculative calls enable more optimizations, such as inlining.  When they seem
8363 useless after further optimization, they are converted back into original form.
8364
8365 @item -fdevirtualize-at-ltrans
8366 @opindex fdevirtualize-at-ltrans
8367 Stream extra information needed for aggressive devirtualization when running
8368 the link-time optimizer in local transformation mode.  
8369 This option enables more devirtualization but
8370 significantly increases the size of streamed data. For this reason it is
8371 disabled by default.
8372
8373 @item -fexpensive-optimizations
8374 @opindex fexpensive-optimizations
8375 Perform a number of minor optimizations that are relatively expensive.
8376
8377 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8378
8379 @item -free
8380 @opindex free
8381 Attempt to remove redundant extension instructions.  This is especially
8382 helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
8383 registers after writing to their lower 32-bit half.
8384
8385 Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
8386 @option{-O3}, @option{-Os}.
8387
8388 @item -fno-lifetime-dse
8389 @opindex fno-lifetime-dse
8390 In C++ the value of an object is only affected by changes within its
8391 lifetime: when the constructor begins, the object has an indeterminate
8392 value, and any changes during the lifetime of the object are dead when
8393 the object is destroyed.  Normally dead store elimination will take
8394 advantage of this; if your code relies on the value of the object
8395 storage persisting beyond the lifetime of the object, you can use this
8396 flag to disable this optimization.
8397
8398 @item -flive-range-shrinkage
8399 @opindex flive-range-shrinkage
8400 Attempt to decrease register pressure through register live range
8401 shrinkage.  This is helpful for fast processors with small or moderate
8402 size register sets.
8403
8404 @item -fira-algorithm=@var{algorithm}
8405 @opindex fira-algorithm
8406 Use the specified coloring algorithm for the integrated register
8407 allocator.  The @var{algorithm} argument can be @samp{priority}, which
8408 specifies Chow's priority coloring, or @samp{CB}, which specifies
8409 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
8410 for all architectures, but for those targets that do support it, it is
8411 the default because it generates better code.
8412
8413 @item -fira-region=@var{region}
8414 @opindex fira-region
8415 Use specified regions for the integrated register allocator.  The
8416 @var{region} argument should be one of the following:
8417
8418 @table @samp
8419
8420 @item all
8421 Use all loops as register allocation regions.
8422 This can give the best results for machines with a small and/or
8423 irregular register set.
8424
8425 @item mixed
8426 Use all loops except for loops with small register pressure 
8427 as the regions.  This value usually gives
8428 the best results in most cases and for most architectures,
8429 and is enabled by default when compiling with optimization for speed
8430 (@option{-O}, @option{-O2}, @dots{}).
8431
8432 @item one
8433 Use all functions as a single region.  
8434 This typically results in the smallest code size, and is enabled by default for
8435 @option{-Os} or @option{-O0}.
8436
8437 @end table
8438
8439 @item -fira-hoist-pressure
8440 @opindex fira-hoist-pressure
8441 Use IRA to evaluate register pressure in the code hoisting pass for
8442 decisions to hoist expressions.  This option usually results in smaller
8443 code, but it can slow the compiler down.
8444
8445 This option is enabled at level @option{-Os} for all targets.
8446
8447 @item -fira-loop-pressure
8448 @opindex fira-loop-pressure
8449 Use IRA to evaluate register pressure in loops for decisions to move
8450 loop invariants.  This option usually results in generation
8451 of faster and smaller code on machines with large register files (>= 32
8452 registers), but it can slow the compiler down.
8453
8454 This option is enabled at level @option{-O3} for some targets.
8455
8456 @item -fno-ira-share-save-slots
8457 @opindex fno-ira-share-save-slots
8458 Disable sharing of stack slots used for saving call-used hard
8459 registers living through a call.  Each hard register gets a
8460 separate stack slot, and as a result function stack frames are
8461 larger.
8462
8463 @item -fno-ira-share-spill-slots
8464 @opindex fno-ira-share-spill-slots
8465 Disable sharing of stack slots allocated for pseudo-registers.  Each
8466 pseudo-register that does not get a hard register gets a separate
8467 stack slot, and as a result function stack frames are larger.
8468
8469 @item -fira-verbose=@var{n}
8470 @opindex fira-verbose
8471 Control the verbosity of the dump file for the integrated register allocator.
8472 The default value is 5.  If the value @var{n} is greater or equal to 10,
8473 the dump output is sent to stderr using the same format as @var{n} minus 10.
8474
8475 @item -flra-remat
8476 @opindex flra-remat
8477 Enable CFG-sensitive rematerialization in LRA.  Instead of loading
8478 values of spilled pseudos, LRA tries to rematerialize (recalculate)
8479 values if it is profitable.
8480
8481 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8482
8483 @item -fdelayed-branch
8484 @opindex fdelayed-branch
8485 If supported for the target machine, attempt to reorder instructions
8486 to exploit instruction slots available after delayed branch
8487 instructions.
8488
8489 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8490
8491 @item -fschedule-insns
8492 @opindex fschedule-insns
8493 If supported for the target machine, attempt to reorder instructions to
8494 eliminate execution stalls due to required data being unavailable.  This
8495 helps machines that have slow floating point or memory load instructions
8496 by allowing other instructions to be issued until the result of the load
8497 or floating-point instruction is required.
8498
8499 Enabled at levels @option{-O2}, @option{-O3}.
8500
8501 @item -fschedule-insns2
8502 @opindex fschedule-insns2
8503 Similar to @option{-fschedule-insns}, but requests an additional pass of
8504 instruction scheduling after register allocation has been done.  This is
8505 especially useful on machines with a relatively small number of
8506 registers and where memory load instructions take more than one cycle.
8507
8508 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8509
8510 @item -fno-sched-interblock
8511 @opindex fno-sched-interblock
8512 Don't schedule instructions across basic blocks.  This is normally
8513 enabled by default when scheduling before register allocation, i.e.@:
8514 with @option{-fschedule-insns} or at @option{-O2} or higher.
8515
8516 @item -fno-sched-spec
8517 @opindex fno-sched-spec
8518 Don't allow speculative motion of non-load instructions.  This is normally
8519 enabled by default when scheduling before register allocation, i.e.@:
8520 with @option{-fschedule-insns} or at @option{-O2} or higher.
8521
8522 @item -fsched-pressure
8523 @opindex fsched-pressure
8524 Enable register pressure sensitive insn scheduling before register
8525 allocation.  This only makes sense when scheduling before register
8526 allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
8527 @option{-O2} or higher.  Usage of this option can improve the
8528 generated code and decrease its size by preventing register pressure
8529 increase above the number of available hard registers and subsequent
8530 spills in register allocation.
8531
8532 @item -fsched-spec-load
8533 @opindex fsched-spec-load
8534 Allow speculative motion of some load instructions.  This only makes
8535 sense when scheduling before register allocation, i.e.@: with
8536 @option{-fschedule-insns} or at @option{-O2} or higher.
8537
8538 @item -fsched-spec-load-dangerous
8539 @opindex fsched-spec-load-dangerous
8540 Allow speculative motion of more load instructions.  This only makes
8541 sense when scheduling before register allocation, i.e.@: with
8542 @option{-fschedule-insns} or at @option{-O2} or higher.
8543
8544 @item -fsched-stalled-insns
8545 @itemx -fsched-stalled-insns=@var{n}
8546 @opindex fsched-stalled-insns
8547 Define how many insns (if any) can be moved prematurely from the queue
8548 of stalled insns into the ready list during the second scheduling pass.
8549 @option{-fno-sched-stalled-insns} means that no insns are moved
8550 prematurely, @option{-fsched-stalled-insns=0} means there is no limit
8551 on how many queued insns can be moved prematurely.
8552 @option{-fsched-stalled-insns} without a value is equivalent to
8553 @option{-fsched-stalled-insns=1}.
8554
8555 @item -fsched-stalled-insns-dep
8556 @itemx -fsched-stalled-insns-dep=@var{n}
8557 @opindex fsched-stalled-insns-dep
8558 Define how many insn groups (cycles) are examined for a dependency
8559 on a stalled insn that is a candidate for premature removal from the queue
8560 of stalled insns.  This has an effect only during the second scheduling pass,
8561 and only if @option{-fsched-stalled-insns} is used.
8562 @option{-fno-sched-stalled-insns-dep} is equivalent to
8563 @option{-fsched-stalled-insns-dep=0}.
8564 @option{-fsched-stalled-insns-dep} without a value is equivalent to
8565 @option{-fsched-stalled-insns-dep=1}.
8566
8567 @item -fsched2-use-superblocks
8568 @opindex fsched2-use-superblocks
8569 When scheduling after register allocation, use superblock scheduling.
8570 This allows motion across basic block boundaries,
8571 resulting in faster schedules.  This option is experimental, as not all machine
8572 descriptions used by GCC model the CPU closely enough to avoid unreliable
8573 results from the algorithm.
8574
8575 This only makes sense when scheduling after register allocation, i.e.@: with
8576 @option{-fschedule-insns2} or at @option{-O2} or higher.
8577
8578 @item -fsched-group-heuristic
8579 @opindex fsched-group-heuristic
8580 Enable the group heuristic in the scheduler.  This heuristic favors
8581 the instruction that belongs to a schedule group.  This is enabled
8582 by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
8583 or @option{-fschedule-insns2} or at @option{-O2} or higher.
8584
8585 @item -fsched-critical-path-heuristic
8586 @opindex fsched-critical-path-heuristic
8587 Enable the critical-path heuristic in the scheduler.  This heuristic favors
8588 instructions on the critical path.  This is enabled by default when
8589 scheduling is enabled, i.e.@: with @option{-fschedule-insns}
8590 or @option{-fschedule-insns2} or at @option{-O2} or higher.
8591
8592 @item -fsched-spec-insn-heuristic
8593 @opindex fsched-spec-insn-heuristic
8594 Enable the speculative instruction heuristic in the scheduler.  This
8595 heuristic favors speculative instructions with greater dependency weakness.
8596 This is enabled by default when scheduling is enabled, i.e.@:
8597 with @option{-fschedule-insns} or @option{-fschedule-insns2}
8598 or at @option{-O2} or higher.
8599
8600 @item -fsched-rank-heuristic
8601 @opindex fsched-rank-heuristic
8602 Enable the rank heuristic in the scheduler.  This heuristic favors
8603 the instruction belonging to a basic block with greater size or frequency.
8604 This is enabled by default when scheduling is enabled, i.e.@:
8605 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
8606 at @option{-O2} or higher.
8607
8608 @item -fsched-last-insn-heuristic
8609 @opindex fsched-last-insn-heuristic
8610 Enable the last-instruction heuristic in the scheduler.  This heuristic
8611 favors the instruction that is less dependent on the last instruction
8612 scheduled.  This is enabled by default when scheduling is enabled,
8613 i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
8614 at @option{-O2} or higher.
8615
8616 @item -fsched-dep-count-heuristic
8617 @opindex fsched-dep-count-heuristic
8618 Enable the dependent-count heuristic in the scheduler.  This heuristic
8619 favors the instruction that has more instructions depending on it.
8620 This is enabled by default when scheduling is enabled, i.e.@:
8621 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
8622 at @option{-O2} or higher.
8623
8624 @item -freschedule-modulo-scheduled-loops
8625 @opindex freschedule-modulo-scheduled-loops
8626 Modulo scheduling is performed before traditional scheduling.  If a loop
8627 is modulo scheduled, later scheduling passes may change its schedule.  
8628 Use this option to control that behavior.
8629
8630 @item -fselective-scheduling
8631 @opindex fselective-scheduling
8632 Schedule instructions using selective scheduling algorithm.  Selective
8633 scheduling runs instead of the first scheduler pass.
8634
8635 @item -fselective-scheduling2
8636 @opindex fselective-scheduling2
8637 Schedule instructions using selective scheduling algorithm.  Selective
8638 scheduling runs instead of the second scheduler pass.
8639
8640 @item -fsel-sched-pipelining
8641 @opindex fsel-sched-pipelining
8642 Enable software pipelining of innermost loops during selective scheduling.
8643 This option has no effect unless one of @option{-fselective-scheduling} or
8644 @option{-fselective-scheduling2} is turned on.
8645
8646 @item -fsel-sched-pipelining-outer-loops
8647 @opindex fsel-sched-pipelining-outer-loops
8648 When pipelining loops during selective scheduling, also pipeline outer loops.
8649 This option has no effect unless @option{-fsel-sched-pipelining} is turned on.
8650
8651 @item -fsemantic-interposition
8652 @opindex fsemantic-interposition
8653 Some object formats, like ELF, allow interposing of symbols by the 
8654 dynamic linker.
8655 This means that for symbols exported from the DSO, the compiler cannot perform
8656 interprocedural propagation, inlining and other optimizations in anticipation
8657 that the function or variable in question may change. While this feature is
8658 useful, for example, to rewrite memory allocation functions by a debugging
8659 implementation, it is expensive in the terms of code quality.
8660 With @option{-fno-semantic-interposition} the compiler assumes that 
8661 if interposition happens for functions the overwriting function will have 
8662 precisely the same semantics (and side effects). 
8663 Similarly if interposition happens
8664 for variables, the constructor of the variable will be the same. The flag
8665 has no effect for functions explicitly declared inline 
8666 (where it is never allowed for interposition to change semantics) 
8667 and for symbols explicitly declared weak.
8668
8669 @item -fshrink-wrap
8670 @opindex fshrink-wrap
8671 Emit function prologues only before parts of the function that need it,
8672 rather than at the top of the function.  This flag is enabled by default at
8673 @option{-O} and higher.
8674
8675 @item -fcaller-saves
8676 @opindex fcaller-saves
8677 Enable allocation of values to registers that are clobbered by
8678 function calls, by emitting extra instructions to save and restore the
8679 registers around such calls.  Such allocation is done only when it
8680 seems to result in better code.
8681
8682 This option is always enabled by default on certain machines, usually
8683 those which have no call-preserved registers to use instead.
8684
8685 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8686
8687 @item -fcombine-stack-adjustments
8688 @opindex fcombine-stack-adjustments
8689 Tracks stack adjustments (pushes and pops) and stack memory references
8690 and then tries to find ways to combine them.
8691
8692 Enabled by default at @option{-O1} and higher.
8693
8694 @item -fipa-ra
8695 @opindex fipa-ra
8696 Use caller save registers for allocation if those registers are not used by
8697 any called function.  In that case it is not necessary to save and restore
8698 them around calls.  This is only possible if called functions are part of
8699 same compilation unit as current function and they are compiled before it.
8700
8701 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8702
8703 @item -fconserve-stack
8704 @opindex fconserve-stack
8705 Attempt to minimize stack usage.  The compiler attempts to use less
8706 stack space, even if that makes the program slower.  This option
8707 implies setting the @option{large-stack-frame} parameter to 100
8708 and the @option{large-stack-frame-growth} parameter to 400.
8709
8710 @item -ftree-reassoc
8711 @opindex ftree-reassoc
8712 Perform reassociation on trees.  This flag is enabled by default
8713 at @option{-O} and higher.
8714
8715 @item -ftree-pre
8716 @opindex ftree-pre
8717 Perform partial redundancy elimination (PRE) on trees.  This flag is
8718 enabled by default at @option{-O2} and @option{-O3}.
8719
8720 @item -ftree-partial-pre
8721 @opindex ftree-partial-pre
8722 Make partial redundancy elimination (PRE) more aggressive.  This flag is
8723 enabled by default at @option{-O3}.
8724
8725 @item -ftree-forwprop
8726 @opindex ftree-forwprop
8727 Perform forward propagation on trees.  This flag is enabled by default
8728 at @option{-O} and higher.
8729
8730 @item -ftree-fre
8731 @opindex ftree-fre
8732 Perform full redundancy elimination (FRE) on trees.  The difference
8733 between FRE and PRE is that FRE only considers expressions
8734 that are computed on all paths leading to the redundant computation.
8735 This analysis is faster than PRE, though it exposes fewer redundancies.
8736 This flag is enabled by default at @option{-O} and higher.
8737
8738 @item -ftree-phiprop
8739 @opindex ftree-phiprop
8740 Perform hoisting of loads from conditional pointers on trees.  This
8741 pass is enabled by default at @option{-O} and higher.
8742
8743 @item -fhoist-adjacent-loads
8744 @opindex fhoist-adjacent-loads
8745 Speculatively hoist loads from both branches of an if-then-else if the
8746 loads are from adjacent locations in the same structure and the target
8747 architecture has a conditional move instruction.  This flag is enabled
8748 by default at @option{-O2} and higher.
8749
8750 @item -ftree-copy-prop
8751 @opindex ftree-copy-prop
8752 Perform copy propagation on trees.  This pass eliminates unnecessary
8753 copy operations.  This flag is enabled by default at @option{-O} and
8754 higher.
8755
8756 @item -fipa-pure-const
8757 @opindex fipa-pure-const
8758 Discover which functions are pure or constant.
8759 Enabled by default at @option{-O} and higher.
8760
8761 @item -fipa-reference
8762 @opindex fipa-reference
8763 Discover which static variables do not escape the
8764 compilation unit.
8765 Enabled by default at @option{-O} and higher.
8766
8767 @item -fipa-pta
8768 @opindex fipa-pta
8769 Perform interprocedural pointer analysis and interprocedural modification
8770 and reference analysis.  This option can cause excessive memory and
8771 compile-time usage on large compilation units.  It is not enabled by
8772 default at any optimization level.
8773
8774 @item -fipa-profile
8775 @opindex fipa-profile
8776 Perform interprocedural profile propagation.  The functions called only from
8777 cold functions are marked as cold. Also functions executed once (such as
8778 @code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold
8779 functions and loop less parts of functions executed once are then optimized for
8780 size.
8781 Enabled by default at @option{-O} and higher.
8782
8783 @item -fipa-cp
8784 @opindex fipa-cp
8785 Perform interprocedural constant propagation.
8786 This optimization analyzes the program to determine when values passed
8787 to functions are constants and then optimizes accordingly.
8788 This optimization can substantially increase performance
8789 if the application has constants passed to functions.
8790 This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
8791
8792 @item -fipa-cp-clone
8793 @opindex fipa-cp-clone
8794 Perform function cloning to make interprocedural constant propagation stronger.
8795 When enabled, interprocedural constant propagation performs function cloning
8796 when externally visible function can be called with constant arguments.
8797 Because this optimization can create multiple copies of functions,
8798 it may significantly increase code size
8799 (see @option{--param ipcp-unit-growth=@var{value}}).
8800 This flag is enabled by default at @option{-O3}.
8801
8802 @item -fipa-cp-alignment
8803 @opindex -fipa-cp-alignment
8804 When enabled, this optimization propagates alignment of function
8805 parameters to support better vectorization and string operations.
8806
8807 This flag is enabled by default at @option{-O2} and @option{-Os}.  It
8808 requires that @option{-fipa-cp} is enabled.
8809
8810 @item -fipa-icf
8811 @opindex fipa-icf
8812 Perform Identical Code Folding for functions and read-only variables.
8813 The optimization reduces code size and may disturb unwind stacks by replacing
8814 a function by equivalent one with a different name. The optimization works
8815 more effectively with link time optimization enabled.
8816
8817 Nevertheless the behavior is similar to Gold Linker ICF optimization, GCC ICF
8818 works on different levels and thus the optimizations are not same - there are
8819 equivalences that are found only by GCC and equivalences found only by Gold.
8820
8821 This flag is enabled by default at @option{-O2} and @option{-Os}.
8822
8823 @item -fisolate-erroneous-paths-dereference
8824 @opindex fisolate-erroneous-paths-dereference
8825 Detect paths that trigger erroneous or undefined behavior due to
8826 dereferencing a null pointer.  Isolate those paths from the main control
8827 flow and turn the statement with erroneous or undefined behavior into a trap.
8828 This flag is enabled by default at @option{-O2} and higher and depends on
8829 @option{-fdelete-null-pointer-checks} also being enabled.
8830
8831 @item -fisolate-erroneous-paths-attribute
8832 @opindex fisolate-erroneous-paths-attribute
8833 Detect paths that trigger erroneous or undefined behavior due a null value
8834 being used in a way forbidden by a @code{returns_nonnull} or @code{nonnull}
8835 attribute.  Isolate those paths from the main control flow and turn the
8836 statement with erroneous or undefined behavior into a trap.  This is not
8837 currently enabled, but may be enabled by @option{-O2} in the future.
8838
8839 @item -ftree-sink
8840 @opindex ftree-sink
8841 Perform forward store motion on trees.  This flag is
8842 enabled by default at @option{-O} and higher.
8843
8844 @item -ftree-bit-ccp
8845 @opindex ftree-bit-ccp
8846 Perform sparse conditional bit constant propagation on trees and propagate
8847 pointer alignment information.
8848 This pass only operates on local scalar variables and is enabled by default
8849 at @option{-O} and higher.  It requires that @option{-ftree-ccp} is enabled.
8850
8851 @item -ftree-ccp
8852 @opindex ftree-ccp
8853 Perform sparse conditional constant propagation (CCP) on trees.  This
8854 pass only operates on local scalar variables and is enabled by default
8855 at @option{-O} and higher.
8856
8857 @item -fssa-backprop
8858 @opindex fssa-backprop
8859 Propagate information about uses of a value up the definition chain
8860 in order to simplify the definitions.  For example, this pass strips
8861 sign operations if the sign of a value never matters.  The flag is
8862 enabled by default at @option{-O} and higher.
8863
8864 @item -fssa-phiopt
8865 @opindex fssa-phiopt
8866 Perform pattern matching on SSA PHI nodes to optimize conditional
8867 code.  This pass is enabled by default at @option{-O} and higher.
8868
8869 @item -ftree-switch-conversion
8870 @opindex ftree-switch-conversion
8871 Perform conversion of simple initializations in a switch to
8872 initializations from a scalar array.  This flag is enabled by default
8873 at @option{-O2} and higher.
8874
8875 @item -ftree-tail-merge
8876 @opindex ftree-tail-merge
8877 Look for identical code sequences.  When found, replace one with a jump to the
8878 other.  This optimization is known as tail merging or cross jumping.  This flag
8879 is enabled by default at @option{-O2} and higher.  The compilation time
8880 in this pass can
8881 be limited using @option{max-tail-merge-comparisons} parameter and
8882 @option{max-tail-merge-iterations} parameter.
8883
8884 @item -ftree-dce
8885 @opindex ftree-dce
8886 Perform dead code elimination (DCE) on trees.  This flag is enabled by
8887 default at @option{-O} and higher.
8888
8889 @item -ftree-builtin-call-dce
8890 @opindex ftree-builtin-call-dce
8891 Perform conditional dead code elimination (DCE) for calls to built-in functions
8892 that may set @code{errno} but are otherwise side-effect free.  This flag is
8893 enabled by default at @option{-O2} and higher if @option{-Os} is not also
8894 specified.
8895
8896 @item -ftree-dominator-opts
8897 @opindex ftree-dominator-opts
8898 Perform a variety of simple scalar cleanups (constant/copy
8899 propagation, redundancy elimination, range propagation and expression
8900 simplification) based on a dominator tree traversal.  This also
8901 performs jump threading (to reduce jumps to jumps). This flag is
8902 enabled by default at @option{-O} and higher.
8903
8904 @item -ftree-dse
8905 @opindex ftree-dse
8906 Perform dead store elimination (DSE) on trees.  A dead store is a store into
8907 a memory location that is later overwritten by another store without
8908 any intervening loads.  In this case the earlier store can be deleted.  This
8909 flag is enabled by default at @option{-O} and higher.
8910
8911 @item -ftree-ch
8912 @opindex ftree-ch
8913 Perform loop header copying on trees.  This is beneficial since it increases
8914 effectiveness of code motion optimizations.  It also saves one jump.  This flag
8915 is enabled by default at @option{-O} and higher.  It is not enabled
8916 for @option{-Os}, since it usually increases code size.
8917
8918 @item -ftree-loop-optimize
8919 @opindex ftree-loop-optimize
8920 Perform loop optimizations on trees.  This flag is enabled by default
8921 at @option{-O} and higher.
8922
8923 @item -ftree-loop-linear
8924 @itemx -floop-interchange
8925 @itemx -floop-strip-mine
8926 @itemx -floop-block
8927 @itemx -floop-unroll-and-jam
8928 @opindex ftree-loop-linear
8929 @opindex floop-interchange
8930 @opindex floop-strip-mine
8931 @opindex floop-block
8932 @opindex floop-unroll-and-jam
8933 Perform loop nest optimizations.  Same as
8934 @option{-floop-nest-optimize}.  To use this code transformation, GCC has
8935 to be configured with @option{--with-isl} to enable the Graphite loop
8936 transformation infrastructure.
8937
8938 @item -fgraphite-identity
8939 @opindex fgraphite-identity
8940 Enable the identity transformation for graphite.  For every SCoP we generate
8941 the polyhedral representation and transform it back to gimple.  Using
8942 @option{-fgraphite-identity} we can check the costs or benefits of the
8943 GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
8944 are also performed by the code generator ISL, like index splitting and
8945 dead code elimination in loops.
8946
8947 @item -floop-nest-optimize
8948 @opindex floop-nest-optimize
8949 Enable the ISL based loop nest optimizer.  This is a generic loop nest
8950 optimizer based on the Pluto optimization algorithms.  It calculates a loop
8951 structure optimized for data-locality and parallelism.  This option
8952 is experimental.
8953
8954 @item -floop-parallelize-all
8955 @opindex floop-parallelize-all
8956 Use the Graphite data dependence analysis to identify loops that can
8957 be parallelized.  Parallelize all the loops that can be analyzed to
8958 not contain loop carried dependences without checking that it is
8959 profitable to parallelize the loops.
8960
8961 @item -ftree-coalesce-vars
8962 @opindex ftree-coalesce-vars
8963 While transforming the program out of the SSA representation, attempt to
8964 reduce copying by coalescing versions of different user-defined
8965 variables, instead of just compiler temporaries.  This may severely
8966 limit the ability to debug an optimized program compiled with
8967 @option{-fno-var-tracking-assignments}.  In the negated form, this flag
8968 prevents SSA coalescing of user variables.  This option is enabled by
8969 default if optimization is enabled, and it does very little otherwise.
8970
8971 @item -ftree-loop-if-convert
8972 @opindex ftree-loop-if-convert
8973 Attempt to transform conditional jumps in the innermost loops to
8974 branch-less equivalents.  The intent is to remove control-flow from
8975 the innermost loops in order to improve the ability of the
8976 vectorization pass to handle these loops.  This is enabled by default
8977 if vectorization is enabled.
8978
8979 @item -ftree-loop-if-convert-stores
8980 @opindex ftree-loop-if-convert-stores
8981 Attempt to also if-convert conditional jumps containing memory writes.
8982 This transformation can be unsafe for multi-threaded programs as it
8983 transforms conditional memory writes into unconditional memory writes.
8984 For example,
8985 @smallexample
8986 for (i = 0; i < N; i++)
8987   if (cond)
8988     A[i] = expr;
8989 @end smallexample
8990 is transformed to
8991 @smallexample
8992 for (i = 0; i < N; i++)
8993   A[i] = cond ? expr : A[i];
8994 @end smallexample
8995 potentially producing data races.
8996
8997 @item -ftree-loop-distribution
8998 @opindex ftree-loop-distribution
8999 Perform loop distribution.  This flag can improve cache performance on
9000 big loop bodies and allow further loop optimizations, like
9001 parallelization or vectorization, to take place.  For example, the loop
9002 @smallexample
9003 DO I = 1, N
9004   A(I) = B(I) + C
9005   D(I) = E(I) * F
9006 ENDDO
9007 @end smallexample
9008 is transformed to
9009 @smallexample
9010 DO I = 1, N
9011    A(I) = B(I) + C
9012 ENDDO
9013 DO I = 1, N
9014    D(I) = E(I) * F
9015 ENDDO
9016 @end smallexample
9017
9018 @item -ftree-loop-distribute-patterns
9019 @opindex ftree-loop-distribute-patterns
9020 Perform loop distribution of patterns that can be code generated with
9021 calls to a library.  This flag is enabled by default at @option{-O3}.
9022
9023 This pass distributes the initialization loops and generates a call to
9024 memset zero.  For example, the loop
9025 @smallexample
9026 DO I = 1, N
9027   A(I) = 0
9028   B(I) = A(I) + I
9029 ENDDO
9030 @end smallexample
9031 is transformed to
9032 @smallexample
9033 DO I = 1, N
9034    A(I) = 0
9035 ENDDO
9036 DO I = 1, N
9037    B(I) = A(I) + I
9038 ENDDO
9039 @end smallexample
9040 and the initialization loop is transformed into a call to memset zero.
9041
9042 @item -ftree-loop-im
9043 @opindex ftree-loop-im
9044 Perform loop invariant motion on trees.  This pass moves only invariants that
9045 are hard to handle at RTL level (function calls, operations that expand to
9046 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
9047 operands of conditions that are invariant out of the loop, so that we can use
9048 just trivial invariantness analysis in loop unswitching.  The pass also includes
9049 store motion.
9050
9051 @item -ftree-loop-ivcanon
9052 @opindex ftree-loop-ivcanon
9053 Create a canonical counter for number of iterations in loops for which
9054 determining number of iterations requires complicated analysis.  Later
9055 optimizations then may determine the number easily.  Useful especially
9056 in connection with unrolling.
9057
9058 @item -fivopts
9059 @opindex fivopts
9060 Perform induction variable optimizations (strength reduction, induction
9061 variable merging and induction variable elimination) on trees.
9062
9063 @item -ftree-parallelize-loops=n
9064 @opindex ftree-parallelize-loops
9065 Parallelize loops, i.e., split their iteration space to run in n threads.
9066 This is only possible for loops whose iterations are independent
9067 and can be arbitrarily reordered.  The optimization is only
9068 profitable on multiprocessor machines, for loops that are CPU-intensive,
9069 rather than constrained e.g.@: by memory bandwidth.  This option
9070 implies @option{-pthread}, and thus is only supported on targets
9071 that have support for @option{-pthread}.
9072
9073 @item -ftree-pta
9074 @opindex ftree-pta
9075 Perform function-local points-to analysis on trees.  This flag is
9076 enabled by default at @option{-O} and higher.
9077
9078 @item -ftree-sra
9079 @opindex ftree-sra
9080 Perform scalar replacement of aggregates.  This pass replaces structure
9081 references with scalars to prevent committing structures to memory too
9082 early.  This flag is enabled by default at @option{-O} and higher.
9083
9084 @item -ftree-ter
9085 @opindex ftree-ter
9086 Perform temporary expression replacement during the SSA->normal phase.  Single
9087 use/single def temporaries are replaced at their use location with their
9088 defining expression.  This results in non-GIMPLE code, but gives the expanders
9089 much more complex trees to work on resulting in better RTL generation.  This is
9090 enabled by default at @option{-O} and higher.
9091
9092 @item -ftree-slsr
9093 @opindex ftree-slsr
9094 Perform straight-line strength reduction on trees.  This recognizes related
9095 expressions involving multiplications and replaces them by less expensive
9096 calculations when possible.  This is enabled by default at @option{-O} and
9097 higher.
9098
9099 @item -ftree-vectorize
9100 @opindex ftree-vectorize
9101 Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
9102 and @option{-ftree-slp-vectorize} if not explicitly specified.
9103
9104 @item -ftree-loop-vectorize
9105 @opindex ftree-loop-vectorize
9106 Perform loop vectorization on trees. This flag is enabled by default at
9107 @option{-O3} and when @option{-ftree-vectorize} is enabled.
9108
9109 @item -ftree-slp-vectorize
9110 @opindex ftree-slp-vectorize
9111 Perform basic block vectorization on trees. This flag is enabled by default at
9112 @option{-O3} and when @option{-ftree-vectorize} is enabled.
9113
9114 @item -fvect-cost-model=@var{model}
9115 @opindex fvect-cost-model
9116 Alter the cost model used for vectorization.  The @var{model} argument
9117 should be one of @samp{unlimited}, @samp{dynamic} or @samp{cheap}.
9118 With the @samp{unlimited} model the vectorized code-path is assumed
9119 to be profitable while with the @samp{dynamic} model a runtime check
9120 guards the vectorized code-path to enable it only for iteration
9121 counts that will likely execute faster than when executing the original
9122 scalar loop.  The @samp{cheap} model disables vectorization of
9123 loops where doing so would be cost prohibitive for example due to
9124 required runtime checks for data dependence or alignment but otherwise
9125 is equal to the @samp{dynamic} model.
9126 The default cost model depends on other optimization flags and is
9127 either @samp{dynamic} or @samp{cheap}.
9128
9129 @item -fsimd-cost-model=@var{model}
9130 @opindex fsimd-cost-model
9131 Alter the cost model used for vectorization of loops marked with the OpenMP
9132 or Cilk Plus simd directive.  The @var{model} argument should be one of
9133 @samp{unlimited}, @samp{dynamic}, @samp{cheap}.  All values of @var{model}
9134 have the same meaning as described in @option{-fvect-cost-model} and by
9135 default a cost model defined with @option{-fvect-cost-model} is used.
9136
9137 @item -ftree-vrp
9138 @opindex ftree-vrp
9139 Perform Value Range Propagation on trees.  This is similar to the
9140 constant propagation pass, but instead of values, ranges of values are
9141 propagated.  This allows the optimizers to remove unnecessary range
9142 checks like array bound checks and null pointer checks.  This is
9143 enabled by default at @option{-O2} and higher.  Null pointer check
9144 elimination is only done if @option{-fdelete-null-pointer-checks} is
9145 enabled.
9146
9147 @item -fsplit-paths
9148 @opindex fsplit-paths
9149 Split paths leading to loop backedges.  This can improve dead code
9150 elimination and common subexpression elimination.  This is enabled by
9151 default at @option{-O2} and above.
9152
9153 @item -fsplit-ivs-in-unroller
9154 @opindex fsplit-ivs-in-unroller
9155 Enables expression of values of induction variables in later iterations
9156 of the unrolled loop using the value in the first iteration.  This breaks
9157 long dependency chains, thus improving efficiency of the scheduling passes.
9158
9159 A combination of @option{-fweb} and CSE is often sufficient to obtain the
9160 same effect.  However, that is not reliable in cases where the loop body
9161 is more complicated than a single basic block.  It also does not work at all
9162 on some architectures due to restrictions in the CSE pass.
9163
9164 This optimization is enabled by default.
9165
9166 @item -fvariable-expansion-in-unroller
9167 @opindex fvariable-expansion-in-unroller
9168 With this option, the compiler creates multiple copies of some
9169 local variables when unrolling a loop, which can result in superior code.
9170
9171 @item -fpartial-inlining
9172 @opindex fpartial-inlining
9173 Inline parts of functions.  This option has any effect only
9174 when inlining itself is turned on by the @option{-finline-functions}
9175 or @option{-finline-small-functions} options.
9176
9177 Enabled at level @option{-O2}.
9178
9179 @item -fpredictive-commoning
9180 @opindex fpredictive-commoning
9181 Perform predictive commoning optimization, i.e., reusing computations
9182 (especially memory loads and stores) performed in previous
9183 iterations of loops.
9184
9185 This option is enabled at level @option{-O3}.
9186
9187 @item -fprefetch-loop-arrays
9188 @opindex fprefetch-loop-arrays
9189 If supported by the target machine, generate instructions to prefetch
9190 memory to improve the performance of loops that access large arrays.
9191
9192 This option may generate better or worse code; results are highly
9193 dependent on the structure of loops within the source code.
9194
9195 Disabled at level @option{-Os}.
9196
9197 @item -fno-peephole
9198 @itemx -fno-peephole2
9199 @opindex fno-peephole
9200 @opindex fno-peephole2
9201 Disable any machine-specific peephole optimizations.  The difference
9202 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
9203 are implemented in the compiler; some targets use one, some use the
9204 other, a few use both.
9205
9206 @option{-fpeephole} is enabled by default.
9207 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
9208
9209 @item -fno-guess-branch-probability
9210 @opindex fno-guess-branch-probability
9211 Do not guess branch probabilities using heuristics.
9212
9213 GCC uses heuristics to guess branch probabilities if they are
9214 not provided by profiling feedback (@option{-fprofile-arcs}).  These
9215 heuristics are based on the control flow graph.  If some branch probabilities
9216 are specified by @code{__builtin_expect}, then the heuristics are
9217 used to guess branch probabilities for the rest of the control flow graph,
9218 taking the @code{__builtin_expect} info into account.  The interactions
9219 between the heuristics and @code{__builtin_expect} can be complex, and in
9220 some cases, it may be useful to disable the heuristics so that the effects
9221 of @code{__builtin_expect} are easier to understand.
9222
9223 The default is @option{-fguess-branch-probability} at levels
9224 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9225
9226 @item -freorder-blocks
9227 @opindex freorder-blocks
9228 Reorder basic blocks in the compiled function in order to reduce number of
9229 taken branches and improve code locality.
9230
9231 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9232
9233 @item -freorder-blocks-algorithm=@var{algorithm}
9234 @opindex freorder-blocks-algorithm
9235 Use the specified algorithm for basic block reordering.  The
9236 @var{algorithm} argument can be @samp{simple}, which does not increase
9237 code size (except sometimes due to secondary effects like alignment),
9238 or @samp{stc}, the ``software trace cache'' algorithm, which tries to
9239 put all often executed code together, minimizing the number of branches
9240 executed by making extra copies of code.
9241
9242 The default is @samp{simple} at levels @option{-O}, @option{-Os}, and
9243 @samp{stc} at levels @option{-O2}, @option{-O3}.
9244
9245 @item -freorder-blocks-and-partition
9246 @opindex freorder-blocks-and-partition
9247 In addition to reordering basic blocks in the compiled function, in order
9248 to reduce number of taken branches, partitions hot and cold basic blocks
9249 into separate sections of the assembly and .o files, to improve
9250 paging and cache locality performance.
9251
9252 This optimization is automatically turned off in the presence of
9253 exception handling, for linkonce sections, for functions with a user-defined
9254 section attribute and on any architecture that does not support named
9255 sections.
9256
9257 Enabled for x86 at levels @option{-O2}, @option{-O3}.
9258
9259 @item -freorder-functions
9260 @opindex freorder-functions
9261 Reorder functions in the object file in order to
9262 improve code locality.  This is implemented by using special
9263 subsections @code{.text.hot} for most frequently executed functions and
9264 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
9265 the linker so object file format must support named sections and linker must
9266 place them in a reasonable way.
9267
9268 Also profile feedback must be available to make this option effective.  See
9269 @option{-fprofile-arcs} for details.
9270
9271 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
9272
9273 @item -fstrict-aliasing
9274 @opindex fstrict-aliasing
9275 Allow the compiler to assume the strictest aliasing rules applicable to
9276 the language being compiled.  For C (and C++), this activates
9277 optimizations based on the type of expressions.  In particular, an
9278 object of one type is assumed never to reside at the same address as an
9279 object of a different type, unless the types are almost the same.  For
9280 example, an @code{unsigned int} can alias an @code{int}, but not a
9281 @code{void*} or a @code{double}.  A character type may alias any other
9282 type.
9283
9284 @anchor{Type-punning}Pay special attention to code like this:
9285 @smallexample
9286 union a_union @{
9287   int i;
9288   double d;
9289 @};
9290
9291 int f() @{
9292   union a_union t;
9293   t.d = 3.0;
9294   return t.i;
9295 @}
9296 @end smallexample
9297 The practice of reading from a different union member than the one most
9298 recently written to (called ``type-punning'') is common.  Even with
9299 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
9300 is accessed through the union type.  So, the code above works as
9301 expected.  @xref{Structures unions enumerations and bit-fields
9302 implementation}.  However, this code might not:
9303 @smallexample
9304 int f() @{
9305   union a_union t;
9306   int* ip;
9307   t.d = 3.0;
9308   ip = &t.i;
9309   return *ip;
9310 @}
9311 @end smallexample
9312
9313 Similarly, access by taking the address, casting the resulting pointer
9314 and dereferencing the result has undefined behavior, even if the cast
9315 uses a union type, e.g.:
9316 @smallexample
9317 int f() @{
9318   double d = 3.0;
9319   return ((union a_union *) &d)->i;
9320 @}
9321 @end smallexample
9322
9323 The @option{-fstrict-aliasing} option is enabled at levels
9324 @option{-O2}, @option{-O3}, @option{-Os}.
9325
9326 @item -fstrict-overflow
9327 @opindex fstrict-overflow
9328 Allow the compiler to assume strict signed overflow rules, depending
9329 on the language being compiled.  For C (and C++) this means that
9330 overflow when doing arithmetic with signed numbers is undefined, which
9331 means that the compiler may assume that it does not happen.  This
9332 permits various optimizations.  For example, the compiler assumes
9333 that an expression like @code{i + 10 > i} is always true for
9334 signed @code{i}.  This assumption is only valid if signed overflow is
9335 undefined, as the expression is false if @code{i + 10} overflows when
9336 using twos complement arithmetic.  When this option is in effect any
9337 attempt to determine whether an operation on signed numbers 
9338 overflows must be written carefully to not actually involve overflow.
9339
9340 This option also allows the compiler to assume strict pointer
9341 semantics: given a pointer to an object, if adding an offset to that
9342 pointer does not produce a pointer to the same object, the addition is
9343 undefined.  This permits the compiler to conclude that @code{p + u >
9344 p} is always true for a pointer @code{p} and unsigned integer
9345 @code{u}.  This assumption is only valid because pointer wraparound is
9346 undefined, as the expression is false if @code{p + u} overflows using
9347 twos complement arithmetic.
9348
9349 See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
9350 that integer signed overflow is fully defined: it wraps.  When
9351 @option{-fwrapv} is used, there is no difference between
9352 @option{-fstrict-overflow} and @option{-fno-strict-overflow} for
9353 integers.  With @option{-fwrapv} certain types of overflow are
9354 permitted.  For example, if the compiler gets an overflow when doing
9355 arithmetic on constants, the overflowed value can still be used with
9356 @option{-fwrapv}, but not otherwise.
9357
9358 The @option{-fstrict-overflow} option is enabled at levels
9359 @option{-O2}, @option{-O3}, @option{-Os}.
9360
9361 @item -falign-functions
9362 @itemx -falign-functions=@var{n}
9363 @opindex falign-functions
9364 Align the start of functions to the next power-of-two greater than
9365 @var{n}, skipping up to @var{n} bytes.  For instance,
9366 @option{-falign-functions=32} aligns functions to the next 32-byte
9367 boundary, but @option{-falign-functions=24} aligns to the next
9368 32-byte boundary only if this can be done by skipping 23 bytes or less.
9369
9370 @option{-fno-align-functions} and @option{-falign-functions=1} are
9371 equivalent and mean that functions are not aligned.
9372
9373 Some assemblers only support this flag when @var{n} is a power of two;
9374 in that case, it is rounded up.
9375
9376 If @var{n} is not specified or is zero, use a machine-dependent default.
9377
9378 Enabled at levels @option{-O2}, @option{-O3}.
9379
9380 @item -falign-labels
9381 @itemx -falign-labels=@var{n}
9382 @opindex falign-labels
9383 Align all branch targets to a power-of-two boundary, skipping up to
9384 @var{n} bytes like @option{-falign-functions}.  This option can easily
9385 make code slower, because it must insert dummy operations for when the
9386 branch target is reached in the usual flow of the code.
9387
9388 @option{-fno-align-labels} and @option{-falign-labels=1} are
9389 equivalent and mean that labels are not aligned.
9390
9391 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
9392 are greater than this value, then their values are used instead.
9393
9394 If @var{n} is not specified or is zero, use a machine-dependent default
9395 which is very likely to be @samp{1}, meaning no alignment.
9396
9397 Enabled at levels @option{-O2}, @option{-O3}.
9398
9399 @item -falign-loops
9400 @itemx -falign-loops=@var{n}
9401 @opindex falign-loops
9402 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
9403 like @option{-falign-functions}.  If the loops are
9404 executed many times, this makes up for any execution of the dummy
9405 operations.
9406
9407 @option{-fno-align-loops} and @option{-falign-loops=1} are
9408 equivalent and mean that loops are not aligned.
9409
9410 If @var{n} is not specified or is zero, use a machine-dependent default.
9411
9412 Enabled at levels @option{-O2}, @option{-O3}.
9413
9414 @item -falign-jumps
9415 @itemx -falign-jumps=@var{n}
9416 @opindex falign-jumps
9417 Align branch targets to a power-of-two boundary, for branch targets
9418 where the targets can only be reached by jumping, skipping up to @var{n}
9419 bytes like @option{-falign-functions}.  In this case, no dummy operations
9420 need be executed.
9421
9422 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
9423 equivalent and mean that loops are not aligned.
9424
9425 If @var{n} is not specified or is zero, use a machine-dependent default.
9426
9427 Enabled at levels @option{-O2}, @option{-O3}.
9428
9429 @item -funit-at-a-time
9430 @opindex funit-at-a-time
9431 This option is left for compatibility reasons. @option{-funit-at-a-time}
9432 has no effect, while @option{-fno-unit-at-a-time} implies
9433 @option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
9434
9435 Enabled by default.
9436
9437 @item -fno-toplevel-reorder
9438 @opindex fno-toplevel-reorder
9439 Do not reorder top-level functions, variables, and @code{asm}
9440 statements.  Output them in the same order that they appear in the
9441 input file.  When this option is used, unreferenced static variables
9442 are not removed.  This option is intended to support existing code
9443 that relies on a particular ordering.  For new code, it is better to
9444 use attributes when possible.
9445
9446 Enabled at level @option{-O0}.  When disabled explicitly, it also implies
9447 @option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some
9448 targets.
9449
9450 @item -fweb
9451 @opindex fweb
9452 Constructs webs as commonly used for register allocation purposes and assign
9453 each web individual pseudo register.  This allows the register allocation pass
9454 to operate on pseudos directly, but also strengthens several other optimization
9455 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
9456 however, make debugging impossible, since variables no longer stay in a
9457 ``home register''.
9458
9459 Enabled by default with @option{-funroll-loops}.
9460
9461 @item -fwhole-program
9462 @opindex fwhole-program
9463 Assume that the current compilation unit represents the whole program being
9464 compiled.  All public functions and variables with the exception of @code{main}
9465 and those merged by attribute @code{externally_visible} become static functions
9466 and in effect are optimized more aggressively by interprocedural optimizers.
9467
9468 This option should not be used in combination with @option{-flto}.
9469 Instead relying on a linker plugin should provide safer and more precise
9470 information.
9471
9472 @item -flto[=@var{n}]
9473 @opindex flto
9474 This option runs the standard link-time optimizer.  When invoked
9475 with source code, it generates GIMPLE (one of GCC's internal
9476 representations) and writes it to special ELF sections in the object
9477 file.  When the object files are linked together, all the function
9478 bodies are read from these ELF sections and instantiated as if they
9479 had been part of the same translation unit.
9480
9481 To use the link-time optimizer, @option{-flto} and optimization
9482 options should be specified at compile time and during the final link.
9483 For example:
9484
9485 @smallexample
9486 gcc -c -O2 -flto foo.c
9487 gcc -c -O2 -flto bar.c
9488 gcc -o myprog -flto -O2 foo.o bar.o
9489 @end smallexample
9490
9491 The first two invocations to GCC save a bytecode representation
9492 of GIMPLE into special ELF sections inside @file{foo.o} and
9493 @file{bar.o}.  The final invocation reads the GIMPLE bytecode from
9494 @file{foo.o} and @file{bar.o}, merges the two files into a single
9495 internal image, and compiles the result as usual.  Since both
9496 @file{foo.o} and @file{bar.o} are merged into a single image, this
9497 causes all the interprocedural analyses and optimizations in GCC to
9498 work across the two files as if they were a single one.  This means,
9499 for example, that the inliner is able to inline functions in
9500 @file{bar.o} into functions in @file{foo.o} and vice-versa.
9501
9502 Another (simpler) way to enable link-time optimization is:
9503
9504 @smallexample
9505 gcc -o myprog -flto -O2 foo.c bar.c
9506 @end smallexample
9507
9508 The above generates bytecode for @file{foo.c} and @file{bar.c},
9509 merges them together into a single GIMPLE representation and optimizes
9510 them as usual to produce @file{myprog}.
9511
9512 The only important thing to keep in mind is that to enable link-time
9513 optimizations you need to use the GCC driver to perform the link-step.
9514 GCC then automatically performs link-time optimization if any of the
9515 objects involved were compiled with the @option{-flto} command-line option.  
9516 You generally
9517 should specify the optimization options to be used for link-time
9518 optimization though GCC tries to be clever at guessing an
9519 optimization level to use from the options used at compile-time
9520 if you fail to specify one at link-time.  You can always override
9521 the automatic decision to do link-time optimization at link-time
9522 by passing @option{-fno-lto} to the link command.
9523
9524 To make whole program optimization effective, it is necessary to make
9525 certain whole program assumptions.  The compiler needs to know
9526 what functions and variables can be accessed by libraries and runtime
9527 outside of the link-time optimized unit.  When supported by the linker,
9528 the linker plugin (see @option{-fuse-linker-plugin}) passes information
9529 to the compiler about used and externally visible symbols.  When
9530 the linker plugin is not available, @option{-fwhole-program} should be
9531 used to allow the compiler to make these assumptions, which leads
9532 to more aggressive optimization decisions.
9533
9534 When @option{-fuse-linker-plugin} is not enabled then, when a file is
9535 compiled with @option{-flto}, the generated object file is larger than
9536 a regular object file because it contains GIMPLE bytecodes and the usual
9537 final code (see @option{-ffat-lto-objects}.  This means that
9538 object files with LTO information can be linked as normal object
9539 files; if @option{-fno-lto} is passed to the linker, no
9540 interprocedural optimizations are applied.  Note that when
9541 @option{-fno-fat-lto-objects} is enabled the compile-stage is faster
9542 but you cannot perform a regular, non-LTO link on them.
9543
9544 Additionally, the optimization flags used to compile individual files
9545 are not necessarily related to those used at link time.  For instance,
9546
9547 @smallexample
9548 gcc -c -O0 -ffat-lto-objects -flto foo.c
9549 gcc -c -O0 -ffat-lto-objects -flto bar.c
9550 gcc -o myprog -O3 foo.o bar.o
9551 @end smallexample
9552
9553 This produces individual object files with unoptimized assembler
9554 code, but the resulting binary @file{myprog} is optimized at
9555 @option{-O3}.  If, instead, the final binary is generated with
9556 @option{-fno-lto}, then @file{myprog} is not optimized.
9557
9558 When producing the final binary, GCC only
9559 applies link-time optimizations to those files that contain bytecode.
9560 Therefore, you can mix and match object files and libraries with
9561 GIMPLE bytecodes and final object code.  GCC automatically selects
9562 which files to optimize in LTO mode and which files to link without
9563 further processing.
9564
9565 There are some code generation flags preserved by GCC when
9566 generating bytecodes, as they need to be used during the final link
9567 stage.  Generally options specified at link-time override those
9568 specified at compile-time.
9569
9570 If you do not specify an optimization level option @option{-O} at
9571 link-time then GCC computes one based on the optimization levels
9572 used when compiling the object files.  The highest optimization
9573 level wins here.
9574
9575 Currently, the following options and their setting are take from
9576 the first object file that explicitely specified it: 
9577 @option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon},
9578 @option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm}
9579 and all the @option{-m} target flags.
9580
9581 Certain ABI changing flags are required to match in all compilation-units
9582 and trying to override this at link-time with a conflicting value
9583 is ignored.  This includes options such as @option{-freg-struct-return}
9584 and @option{-fpcc-struct-return}. 
9585
9586 Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
9587 @option{-fwrapv}, @option{-fno-trapv} or @option{-fno-strict-aliasing}
9588 are passed through to the link stage and merged conservatively for
9589 conflicting translation units.  Specifically
9590 @option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
9591 precedence and for example @option{-ffp-contract=off} takes precedence
9592 over @option{-ffp-contract=fast}.  You can override them at linke-time.
9593
9594 It is recommended that you compile all the files participating in the
9595 same link with the same options and also specify those options at
9596 link time.
9597
9598 If LTO encounters objects with C linkage declared with incompatible
9599 types in separate translation units to be linked together (undefined
9600 behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
9601 issued.  The behavior is still undefined at run time.  Similar
9602 diagnostics may be raised for other languages.
9603
9604 Another feature of LTO is that it is possible to apply interprocedural
9605 optimizations on files written in different languages:
9606
9607 @smallexample
9608 gcc -c -flto foo.c
9609 g++ -c -flto bar.cc
9610 gfortran -c -flto baz.f90
9611 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
9612 @end smallexample
9613
9614 Notice that the final link is done with @command{g++} to get the C++
9615 runtime libraries and @option{-lgfortran} is added to get the Fortran
9616 runtime libraries.  In general, when mixing languages in LTO mode, you
9617 should use the same link command options as when mixing languages in a
9618 regular (non-LTO) compilation.
9619
9620 If object files containing GIMPLE bytecode are stored in a library archive, say
9621 @file{libfoo.a}, it is possible to extract and use them in an LTO link if you
9622 are using a linker with plugin support.  To create static libraries suitable
9623 for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar}
9624 and @command{ranlib}; 
9625 to show the symbols of object files with GIMPLE bytecode, use
9626 @command{gcc-nm}.  Those commands require that @command{ar}, @command{ranlib}
9627 and @command{nm} have been compiled with plugin support.  At link time, use the the
9628 flag @option{-fuse-linker-plugin} to ensure that the library participates in
9629 the LTO optimization process:
9630
9631 @smallexample
9632 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
9633 @end smallexample
9634
9635 With the linker plugin enabled, the linker extracts the needed
9636 GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
9637 to make them part of the aggregated GIMPLE image to be optimized.
9638
9639 If you are not using a linker with plugin support and/or do not
9640 enable the linker plugin, then the objects inside @file{libfoo.a}
9641 are extracted and linked as usual, but they do not participate
9642 in the LTO optimization process.  In order to make a static library suitable
9643 for both LTO optimization and usual linkage, compile its object files with
9644 @option{-flto} @option{-ffat-lto-objects}.
9645
9646 Link-time optimizations do not require the presence of the whole program to
9647 operate.  If the program does not require any symbols to be exported, it is
9648 possible to combine @option{-flto} and @option{-fwhole-program} to allow
9649 the interprocedural optimizers to use more aggressive assumptions which may
9650 lead to improved optimization opportunities.
9651 Use of @option{-fwhole-program} is not needed when linker plugin is
9652 active (see @option{-fuse-linker-plugin}).
9653
9654 The current implementation of LTO makes no
9655 attempt to generate bytecode that is portable between different
9656 types of hosts.  The bytecode files are versioned and there is a
9657 strict version check, so bytecode files generated in one version of
9658 GCC do not work with an older or newer version of GCC.
9659
9660 Link-time optimization does not work well with generation of debugging
9661 information.  Combining @option{-flto} with
9662 @option{-g} is currently experimental and expected to produce unexpected
9663 results.
9664
9665 If you specify the optional @var{n}, the optimization and code
9666 generation done at link time is executed in parallel using @var{n}
9667 parallel jobs by utilizing an installed @command{make} program.  The
9668 environment variable @env{MAKE} may be used to override the program
9669 used.  The default value for @var{n} is 1.
9670
9671 You can also specify @option{-flto=jobserver} to use GNU make's
9672 job server mode to determine the number of parallel jobs. This
9673 is useful when the Makefile calling GCC is already executing in parallel.
9674 You must prepend a @samp{+} to the command recipe in the parent Makefile
9675 for this to work.  This option likely only works if @env{MAKE} is
9676 GNU make.
9677
9678 @item -flto-partition=@var{alg}
9679 @opindex flto-partition
9680 Specify the partitioning algorithm used by the link-time optimizer.
9681 The value is either @samp{1to1} to specify a partitioning mirroring
9682 the original source files or @samp{balanced} to specify partitioning
9683 into equally sized chunks (whenever possible) or @samp{max} to create
9684 new partition for every symbol where possible.  Specifying @samp{none}
9685 as an algorithm disables partitioning and streaming completely. 
9686 The default value is @samp{balanced}. While @samp{1to1} can be used
9687 as an workaround for various code ordering issues, the @samp{max}
9688 partitioning is intended for internal testing only.
9689 The value @samp{one} specifies that exactly one partition should be
9690 used while the value @samp{none} bypasses partitioning and executes
9691 the link-time optimization step directly from the WPA phase.
9692
9693 @item -flto-odr-type-merging
9694 @opindex flto-odr-type-merging
9695 Enable streaming of mangled types names of C++ types and their unification
9696 at linktime.  This increases size of LTO object files, but enable
9697 diagnostics about One Definition Rule violations.
9698
9699 @item -flto-compression-level=@var{n}
9700 @opindex flto-compression-level
9701 This option specifies the level of compression used for intermediate
9702 language written to LTO object files, and is only meaningful in
9703 conjunction with LTO mode (@option{-flto}).  Valid
9704 values are 0 (no compression) to 9 (maximum compression).  Values
9705 outside this range are clamped to either 0 or 9.  If the option is not
9706 given, a default balanced compression setting is used.
9707
9708 @item -flto-report
9709 @opindex flto-report
9710 Prints a report with internal details on the workings of the link-time
9711 optimizer.  The contents of this report vary from version to version.
9712 It is meant to be useful to GCC developers when processing object
9713 files in LTO mode (via @option{-flto}).
9714
9715 Disabled by default.
9716
9717 @item -flto-report-wpa
9718 @opindex flto-report-wpa
9719 Like @option{-flto-report}, but only print for the WPA phase of Link
9720 Time Optimization.
9721
9722 @item -fuse-linker-plugin
9723 @opindex fuse-linker-plugin
9724 Enables the use of a linker plugin during link-time optimization.  This
9725 option relies on plugin support in the linker, which is available in gold
9726 or in GNU ld 2.21 or newer.
9727
9728 This option enables the extraction of object files with GIMPLE bytecode out
9729 of library archives. This improves the quality of optimization by exposing
9730 more code to the link-time optimizer.  This information specifies what
9731 symbols can be accessed externally (by non-LTO object or during dynamic
9732 linking).  Resulting code quality improvements on binaries (and shared
9733 libraries that use hidden visibility) are similar to @option{-fwhole-program}.
9734 See @option{-flto} for a description of the effect of this flag and how to
9735 use it.
9736
9737 This option is enabled by default when LTO support in GCC is enabled
9738 and GCC was configured for use with
9739 a linker supporting plugins (GNU ld 2.21 or newer or gold).
9740
9741 @item -ffat-lto-objects
9742 @opindex ffat-lto-objects
9743 Fat LTO objects are object files that contain both the intermediate language
9744 and the object code. This makes them usable for both LTO linking and normal
9745 linking. This option is effective only when compiling with @option{-flto}
9746 and is ignored at link time.
9747
9748 @option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
9749 requires the complete toolchain to be aware of LTO. It requires a linker with
9750 linker plugin support for basic functionality.  Additionally,
9751 @command{nm}, @command{ar} and @command{ranlib}
9752 need to support linker plugins to allow a full-featured build environment
9753 (capable of building static libraries etc).  GCC provides the @command{gcc-ar},
9754 @command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options
9755 to these tools. With non fat LTO makefiles need to be modified to use them.
9756
9757 The default is @option{-fno-fat-lto-objects} on targets with linker plugin
9758 support.
9759
9760 @item -fcompare-elim
9761 @opindex fcompare-elim
9762 After register allocation and post-register allocation instruction splitting,
9763 identify arithmetic instructions that compute processor flags similar to a
9764 comparison operation based on that arithmetic.  If possible, eliminate the
9765 explicit comparison operation.
9766
9767 This pass only applies to certain targets that cannot explicitly represent
9768 the comparison operation before register allocation is complete.
9769
9770 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9771
9772 @item -fcprop-registers
9773 @opindex fcprop-registers
9774 After register allocation and post-register allocation instruction splitting,
9775 perform a copy-propagation pass to try to reduce scheduling dependencies
9776 and occasionally eliminate the copy.
9777
9778 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
9779
9780 @item -fprofile-correction
9781 @opindex fprofile-correction
9782 Profiles collected using an instrumented binary for multi-threaded programs may
9783 be inconsistent due to missed counter updates. When this option is specified,
9784 GCC uses heuristics to correct or smooth out such inconsistencies. By
9785 default, GCC emits an error message when an inconsistent profile is detected.
9786
9787 @item -fprofile-dir=@var{path}
9788 @opindex fprofile-dir
9789
9790 Set the directory to search for the profile data files in to @var{path}.
9791 This option affects only the profile data generated by
9792 @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
9793 and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
9794 and its related options.  Both absolute and relative paths can be used.
9795 By default, GCC uses the current directory as @var{path}, thus the
9796 profile data file appears in the same directory as the object file.
9797
9798 @item -fprofile-generate
9799 @itemx -fprofile-generate=@var{path}
9800 @opindex fprofile-generate
9801
9802 Enable options usually used for instrumenting application to produce
9803 profile useful for later recompilation with profile feedback based
9804 optimization.  You must use @option{-fprofile-generate} both when
9805 compiling and when linking your program.
9806
9807 The following options are enabled: @option{-fprofile-arcs}, @option{-fprofile-values}, @option{-fvpt}.
9808
9809 If @var{path} is specified, GCC looks at the @var{path} to find
9810 the profile feedback data files. See @option{-fprofile-dir}.
9811
9812 @item -fprofile-use
9813 @itemx -fprofile-use=@var{path}
9814 @opindex fprofile-use
9815 Enable profile feedback-directed optimizations, 
9816 and the following optimizations
9817 which are generally profitable only with profile feedback available:
9818 @option{-fbranch-probabilities}, @option{-fvpt},
9819 @option{-funroll-loops}, @option{-fpeel-loops}, @option{-ftracer}, 
9820 @option{-ftree-vectorize}, and @option{ftree-loop-distribute-patterns}.
9821
9822 By default, GCC emits an error message if the feedback profiles do not
9823 match the source code.  This error can be turned into a warning by using
9824 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
9825 code.
9826
9827 If @var{path} is specified, GCC looks at the @var{path} to find
9828 the profile feedback data files. See @option{-fprofile-dir}.
9829
9830 @item -fauto-profile
9831 @itemx -fauto-profile=@var{path}
9832 @opindex fauto-profile
9833 Enable sampling-based feedback-directed optimizations, 
9834 and the following optimizations
9835 which are generally profitable only with profile feedback available:
9836 @option{-fbranch-probabilities}, @option{-fvpt},
9837 @option{-funroll-loops}, @option{-fpeel-loops}, @option{-ftracer}, 
9838 @option{-ftree-vectorize},
9839 @option{-finline-functions}, @option{-fipa-cp}, @option{-fipa-cp-clone},
9840 @option{-fpredictive-commoning}, @option{-funswitch-loops},
9841 @option{-fgcse-after-reload}, and @option{-ftree-loop-distribute-patterns}.
9842
9843 @var{path} is the name of a file containing AutoFDO profile information.
9844 If omitted, it defaults to @file{fbdata.afdo} in the current directory.
9845
9846 Producing an AutoFDO profile data file requires running your program
9847 with the @command{perf} utility on a supported GNU/Linux target system.
9848 For more information, see @uref{https://perf.wiki.kernel.org/}.
9849
9850 E.g.
9851 @smallexample
9852 perf record -e br_inst_retired:near_taken -b -o perf.data \
9853     -- your_program
9854 @end smallexample
9855
9856 Then use the @command{create_gcov} tool to convert the raw profile data
9857 to a format that can be used by GCC.@  You must also supply the 
9858 unstripped binary for your program to this tool.  
9859 See @uref{https://github.com/google/autofdo}.
9860
9861 E.g.
9862 @smallexample
9863 create_gcov --binary=your_program.unstripped --profile=perf.data \
9864     --gcov=profile.afdo
9865 @end smallexample
9866 @end table
9867
9868 The following options control compiler behavior regarding floating-point 
9869 arithmetic.  These options trade off between speed and
9870 correctness.  All must be specifically enabled.
9871
9872 @table @gcctabopt
9873 @item -ffloat-store
9874 @opindex ffloat-store
9875 Do not store floating-point variables in registers, and inhibit other
9876 options that might change whether a floating-point value is taken from a
9877 register or memory.
9878
9879 @cindex floating-point precision
9880 This option prevents undesirable excess precision on machines such as
9881 the 68000 where the floating registers (of the 68881) keep more
9882 precision than a @code{double} is supposed to have.  Similarly for the
9883 x86 architecture.  For most programs, the excess precision does only
9884 good, but a few programs rely on the precise definition of IEEE floating
9885 point.  Use @option{-ffloat-store} for such programs, after modifying
9886 them to store all pertinent intermediate computations into variables.
9887
9888 @item -fexcess-precision=@var{style}
9889 @opindex fexcess-precision
9890 This option allows further control over excess precision on machines
9891 where floating-point registers have more precision than the IEEE
9892 @code{float} and @code{double} types and the processor does not
9893 support operations rounding to those types.  By default,
9894 @option{-fexcess-precision=fast} is in effect; this means that
9895 operations are carried out in the precision of the registers and that
9896 it is unpredictable when rounding to the types specified in the source
9897 code takes place.  When compiling C, if
9898 @option{-fexcess-precision=standard} is specified then excess
9899 precision follows the rules specified in ISO C99; in particular,
9900 both casts and assignments cause values to be rounded to their
9901 semantic types (whereas @option{-ffloat-store} only affects
9902 assignments).  This option is enabled by default for C if a strict
9903 conformance option such as @option{-std=c99} is used.
9904
9905 @opindex mfpmath
9906 @option{-fexcess-precision=standard} is not implemented for languages
9907 other than C, and has no effect if
9908 @option{-funsafe-math-optimizations} or @option{-ffast-math} is
9909 specified.  On the x86, it also has no effect if @option{-mfpmath=sse}
9910 or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
9911 semantics apply without excess precision, and in the latter, rounding
9912 is unpredictable.
9913
9914 @item -ffast-math
9915 @opindex ffast-math
9916 Sets the options @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
9917 @option{-ffinite-math-only}, @option{-fno-rounding-math},
9918 @option{-fno-signaling-nans} and @option{-fcx-limited-range}.
9919
9920 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
9921
9922 This option is not turned on by any @option{-O} option besides
9923 @option{-Ofast} since it can result in incorrect output for programs
9924 that depend on an exact implementation of IEEE or ISO rules/specifications
9925 for math functions. It may, however, yield faster code for programs
9926 that do not require the guarantees of these specifications.
9927
9928 @item -fno-math-errno
9929 @opindex fno-math-errno
9930 Do not set @code{errno} after calling math functions that are executed
9931 with a single instruction, e.g., @code{sqrt}.  A program that relies on
9932 IEEE exceptions for math error handling may want to use this flag
9933 for speed while maintaining IEEE arithmetic compatibility.
9934
9935 This option is not turned on by any @option{-O} option since
9936 it can result in incorrect output for programs that depend on
9937 an exact implementation of IEEE or ISO rules/specifications for
9938 math functions. It may, however, yield faster code for programs
9939 that do not require the guarantees of these specifications.
9940
9941 The default is @option{-fmath-errno}.
9942
9943 On Darwin systems, the math library never sets @code{errno}.  There is
9944 therefore no reason for the compiler to consider the possibility that
9945 it might, and @option{-fno-math-errno} is the default.
9946
9947 @item -funsafe-math-optimizations
9948 @opindex funsafe-math-optimizations
9949
9950 Allow optimizations for floating-point arithmetic that (a) assume
9951 that arguments and results are valid and (b) may violate IEEE or
9952 ANSI standards.  When used at link-time, it may include libraries
9953 or startup files that change the default FPU control word or other
9954 similar optimizations.
9955
9956 This option is not turned on by any @option{-O} option since
9957 it can result in incorrect output for programs that depend on
9958 an exact implementation of IEEE or ISO rules/specifications for
9959 math functions. It may, however, yield faster code for programs
9960 that do not require the guarantees of these specifications.
9961 Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
9962 @option{-fassociative-math} and @option{-freciprocal-math}.
9963
9964 The default is @option{-fno-unsafe-math-optimizations}.
9965
9966 @item -fassociative-math
9967 @opindex fassociative-math
9968
9969 Allow re-association of operands in series of floating-point operations.
9970 This violates the ISO C and C++ language standard by possibly changing
9971 computation result.  NOTE: re-ordering may change the sign of zero as
9972 well as ignore NaNs and inhibit or create underflow or overflow (and
9973 thus cannot be used on code that relies on rounding behavior like
9974 @code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
9975 and thus may not be used when ordered comparisons are required.
9976 This option requires that both @option{-fno-signed-zeros} and
9977 @option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
9978 much sense with @option{-frounding-math}. For Fortran the option
9979 is automatically enabled when both @option{-fno-signed-zeros} and
9980 @option{-fno-trapping-math} are in effect.
9981
9982 The default is @option{-fno-associative-math}.
9983
9984 @item -freciprocal-math
9985 @opindex freciprocal-math
9986
9987 Allow the reciprocal of a value to be used instead of dividing by
9988 the value if this enables optimizations.  For example @code{x / y}
9989 can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
9990 is subject to common subexpression elimination.  Note that this loses
9991 precision and increases the number of flops operating on the value.
9992
9993 The default is @option{-fno-reciprocal-math}.
9994
9995 @item -ffinite-math-only
9996 @opindex ffinite-math-only
9997 Allow optimizations for floating-point arithmetic that assume
9998 that arguments and results are not NaNs or +-Infs.
9999
10000 This option is not turned on by any @option{-O} option since
10001 it can result in incorrect output for programs that depend on
10002 an exact implementation of IEEE or ISO rules/specifications for
10003 math functions. It may, however, yield faster code for programs
10004 that do not require the guarantees of these specifications.
10005
10006 The default is @option{-fno-finite-math-only}.
10007
10008 @item -fno-signed-zeros
10009 @opindex fno-signed-zeros
10010 Allow optimizations for floating-point arithmetic that ignore the
10011 signedness of zero.  IEEE arithmetic specifies the behavior of
10012 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
10013 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
10014 This option implies that the sign of a zero result isn't significant.
10015
10016 The default is @option{-fsigned-zeros}.
10017
10018 @item -fno-trapping-math
10019 @opindex fno-trapping-math
10020 Compile code assuming that floating-point operations cannot generate
10021 user-visible traps.  These traps include division by zero, overflow,
10022 underflow, inexact result and invalid operation.  This option requires
10023 that @option{-fno-signaling-nans} be in effect.  Setting this option may
10024 allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
10025
10026 This option should never be turned on by any @option{-O} option since
10027 it can result in incorrect output for programs that depend on
10028 an exact implementation of IEEE or ISO rules/specifications for
10029 math functions.
10030
10031 The default is @option{-ftrapping-math}.
10032
10033 @item -frounding-math
10034 @opindex frounding-math
10035 Disable transformations and optimizations that assume default floating-point
10036 rounding behavior.  This is round-to-zero for all floating point
10037 to integer conversions, and round-to-nearest for all other arithmetic
10038 truncations.  This option should be specified for programs that change
10039 the FP rounding mode dynamically, or that may be executed with a
10040 non-default rounding mode.  This option disables constant folding of
10041 floating-point expressions at compile time (which may be affected by
10042 rounding mode) and arithmetic transformations that are unsafe in the
10043 presence of sign-dependent rounding modes.
10044
10045 The default is @option{-fno-rounding-math}.
10046
10047 This option is experimental and does not currently guarantee to
10048 disable all GCC optimizations that are affected by rounding mode.
10049 Future versions of GCC may provide finer control of this setting
10050 using C99's @code{FENV_ACCESS} pragma.  This command-line option
10051 will be used to specify the default state for @code{FENV_ACCESS}.
10052
10053 @item -fsignaling-nans
10054 @opindex fsignaling-nans
10055 Compile code assuming that IEEE signaling NaNs may generate user-visible
10056 traps during floating-point operations.  Setting this option disables
10057 optimizations that may change the number of exceptions visible with
10058 signaling NaNs.  This option implies @option{-ftrapping-math}.
10059
10060 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
10061 be defined.
10062
10063 The default is @option{-fno-signaling-nans}.
10064
10065 This option is experimental and does not currently guarantee to
10066 disable all GCC optimizations that affect signaling NaN behavior.
10067
10068 @item -fsingle-precision-constant
10069 @opindex fsingle-precision-constant
10070 Treat floating-point constants as single precision instead of
10071 implicitly converting them to double-precision constants.
10072
10073 @item -fcx-limited-range
10074 @opindex fcx-limited-range
10075 When enabled, this option states that a range reduction step is not
10076 needed when performing complex division.  Also, there is no checking
10077 whether the result of a complex multiplication or division is @code{NaN
10078 + I*NaN}, with an attempt to rescue the situation in that case.  The
10079 default is @option{-fno-cx-limited-range}, but is enabled by
10080 @option{-ffast-math}.
10081
10082 This option controls the default setting of the ISO C99
10083 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
10084 all languages.
10085
10086 @item -fcx-fortran-rules
10087 @opindex fcx-fortran-rules
10088 Complex multiplication and division follow Fortran rules.  Range
10089 reduction is done as part of complex division, but there is no checking
10090 whether the result of a complex multiplication or division is @code{NaN
10091 + I*NaN}, with an attempt to rescue the situation in that case.
10092
10093 The default is @option{-fno-cx-fortran-rules}.
10094
10095 @end table
10096
10097 The following options control optimizations that may improve
10098 performance, but are not enabled by any @option{-O} options.  This
10099 section includes experimental options that may produce broken code.
10100
10101 @table @gcctabopt
10102 @item -fbranch-probabilities
10103 @opindex fbranch-probabilities
10104 After running a program compiled with @option{-fprofile-arcs}
10105 (@pxref{Debugging Options,, Options for Debugging Your Program or
10106 @command{gcc}}), you can compile it a second time using
10107 @option{-fbranch-probabilities}, to improve optimizations based on
10108 the number of times each branch was taken.  When a program
10109 compiled with @option{-fprofile-arcs} exits, it saves arc execution
10110 counts to a file called @file{@var{sourcename}.gcda} for each source
10111 file.  The information in this data file is very dependent on the
10112 structure of the generated code, so you must use the same source code
10113 and the same optimization options for both compilations.
10114
10115 With @option{-fbranch-probabilities}, GCC puts a
10116 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
10117 These can be used to improve optimization.  Currently, they are only
10118 used in one place: in @file{reorg.c}, instead of guessing which path a
10119 branch is most likely to take, the @samp{REG_BR_PROB} values are used to
10120 exactly determine which path is taken more often.
10121
10122 @item -fprofile-values
10123 @opindex fprofile-values
10124 If combined with @option{-fprofile-arcs}, it adds code so that some
10125 data about values of expressions in the program is gathered.
10126
10127 With @option{-fbranch-probabilities}, it reads back the data gathered
10128 from profiling values of expressions for usage in optimizations.
10129
10130 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
10131
10132 @item -fprofile-reorder-functions
10133 @opindex fprofile-reorder-functions
10134 Function reordering based on profile instrumentation collects
10135 first time of execution of a function and orders these functions
10136 in ascending order.
10137
10138 Enabled with @option{-fprofile-use}.
10139
10140 @item -fvpt
10141 @opindex fvpt
10142 If combined with @option{-fprofile-arcs}, this option instructs the compiler
10143 to add code to gather information about values of expressions.
10144
10145 With @option{-fbranch-probabilities}, it reads back the data gathered
10146 and actually performs the optimizations based on them.
10147 Currently the optimizations include specialization of division operations
10148 using the knowledge about the value of the denominator.
10149
10150 @item -frename-registers
10151 @opindex frename-registers
10152 Attempt to avoid false dependencies in scheduled code by making use
10153 of registers left over after register allocation.  This optimization
10154 most benefits processors with lots of registers.  Depending on the
10155 debug information format adopted by the target, however, it can
10156 make debugging impossible, since variables no longer stay in
10157 a ``home register''.
10158
10159 Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}.
10160
10161 @item -fschedule-fusion
10162 @opindex fschedule-fusion
10163 Performs a target dependent pass over the instruction stream to schedule
10164 instructions of same type together because target machine can execute them
10165 more efficiently if they are adjacent to each other in the instruction flow.
10166
10167 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
10168
10169 @item -ftracer
10170 @opindex ftracer
10171 Perform tail duplication to enlarge superblock size.  This transformation
10172 simplifies the control flow of the function allowing other optimizations to do
10173 a better job.
10174
10175 Enabled with @option{-fprofile-use}.
10176
10177 @item -funroll-loops
10178 @opindex funroll-loops
10179 Unroll loops whose number of iterations can be determined at compile time or
10180 upon entry to the loop.  @option{-funroll-loops} implies
10181 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
10182 It also turns on complete loop peeling (i.e.@: complete removal of loops with
10183 a small constant number of iterations).  This option makes code larger, and may
10184 or may not make it run faster.
10185
10186 Enabled with @option{-fprofile-use}.
10187
10188 @item -funroll-all-loops
10189 @opindex funroll-all-loops
10190 Unroll all loops, even if their number of iterations is uncertain when
10191 the loop is entered.  This usually makes programs run more slowly.
10192 @option{-funroll-all-loops} implies the same options as
10193 @option{-funroll-loops}.
10194
10195 @item -fpeel-loops
10196 @opindex fpeel-loops
10197 Peels loops for which there is enough information that they do not
10198 roll much (from profile feedback).  It also turns on complete loop peeling
10199 (i.e.@: complete removal of loops with small constant number of iterations).
10200
10201 Enabled with @option{-fprofile-use}.
10202
10203 @item -fmove-loop-invariants
10204 @opindex fmove-loop-invariants
10205 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
10206 at level @option{-O1}
10207
10208 @item -funswitch-loops
10209 @opindex funswitch-loops
10210 Move branches with loop invariant conditions out of the loop, with duplicates
10211 of the loop on both branches (modified according to result of the condition).
10212
10213 @item -ffunction-sections
10214 @itemx -fdata-sections
10215 @opindex ffunction-sections
10216 @opindex fdata-sections
10217 Place each function or data item into its own section in the output
10218 file if the target supports arbitrary sections.  The name of the
10219 function or the name of the data item determines the section's name
10220 in the output file.
10221
10222 Use these options on systems where the linker can perform optimizations
10223 to improve locality of reference in the instruction space.  Most systems
10224 using the ELF object format and SPARC processors running Solaris 2 have
10225 linkers with such optimizations.  AIX may have these optimizations in
10226 the future.
10227
10228 Only use these options when there are significant benefits from doing
10229 so.  When you specify these options, the assembler and linker
10230 create larger object and executable files and are also slower.
10231 You cannot use @command{gprof} on all systems if you
10232 specify this option, and you may have problems with debugging if
10233 you specify both this option and @option{-g}.
10234
10235 @item -fbranch-target-load-optimize
10236 @opindex fbranch-target-load-optimize
10237 Perform branch target register load optimization before prologue / epilogue
10238 threading.
10239 The use of target registers can typically be exposed only during reload,
10240 thus hoisting loads out of loops and doing inter-block scheduling needs
10241 a separate optimization pass.
10242
10243 @item -fbranch-target-load-optimize2
10244 @opindex fbranch-target-load-optimize2
10245 Perform branch target register load optimization after prologue / epilogue
10246 threading.
10247
10248 @item -fbtr-bb-exclusive
10249 @opindex fbtr-bb-exclusive
10250 When performing branch target register load optimization, don't reuse
10251 branch target registers within any basic block.
10252
10253 @item -fstack-protector
10254 @opindex fstack-protector
10255 Emit extra code to check for buffer overflows, such as stack smashing
10256 attacks.  This is done by adding a guard variable to functions with
10257 vulnerable objects.  This includes functions that call @code{alloca}, and
10258 functions with buffers larger than 8 bytes.  The guards are initialized
10259 when a function is entered and then checked when the function exits.
10260 If a guard check fails, an error message is printed and the program exits.
10261
10262 @item -fstack-protector-all
10263 @opindex fstack-protector-all
10264 Like @option{-fstack-protector} except that all functions are protected.
10265
10266 @item -fstack-protector-strong
10267 @opindex fstack-protector-strong
10268 Like @option{-fstack-protector} but includes additional functions to
10269 be protected --- those that have local array definitions, or have
10270 references to local frame addresses.
10271
10272 @item -fstack-protector-explicit
10273 @opindex fstack-protector-explicit
10274 Like @option{-fstack-protector} but only protects those functions which
10275 have the @code{stack_protect} attribute
10276
10277 @item -fstdarg-opt
10278 @opindex fstdarg-opt
10279 Optimize the prologue of variadic argument functions with respect to usage of
10280 those arguments.
10281
10282 @item -fsection-anchors
10283 @opindex fsection-anchors
10284 Try to reduce the number of symbolic address calculations by using
10285 shared ``anchor'' symbols to address nearby objects.  This transformation
10286 can help to reduce the number of GOT entries and GOT accesses on some
10287 targets.
10288
10289 For example, the implementation of the following function @code{foo}:
10290
10291 @smallexample
10292 static int a, b, c;
10293 int foo (void) @{ return a + b + c; @}
10294 @end smallexample
10295
10296 @noindent
10297 usually calculates the addresses of all three variables, but if you
10298 compile it with @option{-fsection-anchors}, it accesses the variables
10299 from a common anchor point instead.  The effect is similar to the
10300 following pseudocode (which isn't valid C):
10301
10302 @smallexample
10303 int foo (void)
10304 @{
10305   register int *xr = &x;
10306   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
10307 @}
10308 @end smallexample
10309
10310 Not all targets support this option.
10311
10312 @item --param @var{name}=@var{value}
10313 @opindex param
10314 In some places, GCC uses various constants to control the amount of
10315 optimization that is done.  For example, GCC does not inline functions
10316 that contain more than a certain number of instructions.  You can
10317 control some of these constants on the command line using the
10318 @option{--param} option.
10319
10320 The names of specific parameters, and the meaning of the values, are
10321 tied to the internals of the compiler, and are subject to change
10322 without notice in future releases.
10323
10324 In each case, the @var{value} is an integer.  The allowable choices for
10325 @var{name} are:
10326
10327 @table @gcctabopt
10328 @item predictable-branch-outcome
10329 When branch is predicted to be taken with probability lower than this threshold
10330 (in percent), then it is considered well predictable. The default is 10.
10331
10332 @item max-crossjump-edges
10333 The maximum number of incoming edges to consider for cross-jumping.
10334 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
10335 the number of edges incoming to each block.  Increasing values mean
10336 more aggressive optimization, making the compilation time increase with
10337 probably small improvement in executable size.
10338
10339 @item min-crossjump-insns
10340 The minimum number of instructions that must be matched at the end
10341 of two blocks before cross-jumping is performed on them.  This
10342 value is ignored in the case where all instructions in the block being
10343 cross-jumped from are matched.  The default value is 5.
10344
10345 @item max-grow-copy-bb-insns
10346 The maximum code size expansion factor when copying basic blocks
10347 instead of jumping.  The expansion is relative to a jump instruction.
10348 The default value is 8.
10349
10350 @item max-goto-duplication-insns
10351 The maximum number of instructions to duplicate to a block that jumps
10352 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
10353 passes, GCC factors computed gotos early in the compilation process,
10354 and unfactors them as late as possible.  Only computed jumps at the
10355 end of a basic blocks with no more than max-goto-duplication-insns are
10356 unfactored.  The default value is 8.
10357
10358 @item max-delay-slot-insn-search
10359 The maximum number of instructions to consider when looking for an
10360 instruction to fill a delay slot.  If more than this arbitrary number of
10361 instructions are searched, the time savings from filling the delay slot
10362 are minimal, so stop searching.  Increasing values mean more
10363 aggressive optimization, making the compilation time increase with probably
10364 small improvement in execution time.
10365
10366 @item max-delay-slot-live-search
10367 When trying to fill delay slots, the maximum number of instructions to
10368 consider when searching for a block with valid live register
10369 information.  Increasing this arbitrarily chosen value means more
10370 aggressive optimization, increasing the compilation time.  This parameter
10371 should be removed when the delay slot code is rewritten to maintain the
10372 control-flow graph.
10373
10374 @item max-gcse-memory
10375 The approximate maximum amount of memory that can be allocated in
10376 order to perform the global common subexpression elimination
10377 optimization.  If more memory than specified is required, the
10378 optimization is not done.
10379
10380 @item max-gcse-insertion-ratio
10381 If the ratio of expression insertions to deletions is larger than this value
10382 for any expression, then RTL PRE inserts or removes the expression and thus
10383 leaves partially redundant computations in the instruction stream.  The default value is 20.
10384
10385 @item max-pending-list-length
10386 The maximum number of pending dependencies scheduling allows
10387 before flushing the current state and starting over.  Large functions
10388 with few branches or calls can create excessively large lists which
10389 needlessly consume memory and resources.
10390
10391 @item max-modulo-backtrack-attempts
10392 The maximum number of backtrack attempts the scheduler should make
10393 when modulo scheduling a loop.  Larger values can exponentially increase
10394 compilation time.
10395
10396 @item max-inline-insns-single
10397 Several parameters control the tree inliner used in GCC@.
10398 This number sets the maximum number of instructions (counted in GCC's
10399 internal representation) in a single function that the tree inliner
10400 considers for inlining.  This only affects functions declared
10401 inline and methods implemented in a class declaration (C++).
10402 The default value is 400.
10403
10404 @item max-inline-insns-auto
10405 When you use @option{-finline-functions} (included in @option{-O3}),
10406 a lot of functions that would otherwise not be considered for inlining
10407 by the compiler are investigated.  To those functions, a different
10408 (more restrictive) limit compared to functions declared inline can
10409 be applied.
10410 The default value is 40.
10411
10412 @item inline-min-speedup
10413 When estimated performance improvement of caller + callee runtime exceeds this
10414 threshold (in precent), the function can be inlined regardless the limit on
10415 @option{--param max-inline-insns-single} and @option{--param
10416 max-inline-insns-auto}.
10417
10418 @item large-function-insns
10419 The limit specifying really large functions.  For functions larger than this
10420 limit after inlining, inlining is constrained by
10421 @option{--param large-function-growth}.  This parameter is useful primarily
10422 to avoid extreme compilation time caused by non-linear algorithms used by the
10423 back end.
10424 The default value is 2700.
10425
10426 @item large-function-growth
10427 Specifies maximal growth of large function caused by inlining in percents.
10428 The default value is 100 which limits large function growth to 2.0 times
10429 the original size.
10430
10431 @item large-unit-insns
10432 The limit specifying large translation unit.  Growth caused by inlining of
10433 units larger than this limit is limited by @option{--param inline-unit-growth}.
10434 For small units this might be too tight.
10435 For example, consider a unit consisting of function A
10436 that is inline and B that just calls A three times.  If B is small relative to
10437 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
10438 large units consisting of small inlineable functions, however, the overall unit
10439 growth limit is needed to avoid exponential explosion of code size.  Thus for
10440 smaller units, the size is increased to @option{--param large-unit-insns}
10441 before applying @option{--param inline-unit-growth}.  The default is 10000.
10442
10443 @item inline-unit-growth
10444 Specifies maximal overall growth of the compilation unit caused by inlining.
10445 The default value is 20 which limits unit growth to 1.2 times the original
10446 size. Cold functions (either marked cold via an attribute or by profile
10447 feedback) are not accounted into the unit size.
10448
10449 @item ipcp-unit-growth
10450 Specifies maximal overall growth of the compilation unit caused by
10451 interprocedural constant propagation.  The default value is 10 which limits
10452 unit growth to 1.1 times the original size.
10453
10454 @item large-stack-frame
10455 The limit specifying large stack frames.  While inlining the algorithm is trying
10456 to not grow past this limit too much.  The default value is 256 bytes.
10457
10458 @item large-stack-frame-growth
10459 Specifies maximal growth of large stack frames caused by inlining in percents.
10460 The default value is 1000 which limits large stack frame growth to 11 times
10461 the original size.
10462
10463 @item max-inline-insns-recursive
10464 @itemx max-inline-insns-recursive-auto
10465 Specifies the maximum number of instructions an out-of-line copy of a
10466 self-recursive inline
10467 function can grow into by performing recursive inlining.
10468
10469 @option{--param max-inline-insns-recursive} applies to functions
10470 declared inline.
10471 For functions not declared inline, recursive inlining
10472 happens only when @option{-finline-functions} (included in @option{-O3}) is
10473 enabled; @option{--param max-inline-insns-recursive-auto} applies instead.  The
10474 default value is 450.
10475
10476 @item max-inline-recursive-depth
10477 @itemx max-inline-recursive-depth-auto
10478 Specifies the maximum recursion depth used for recursive inlining.
10479
10480 @option{--param max-inline-recursive-depth} applies to functions
10481 declared inline.  For functions not declared inline, recursive inlining
10482 happens only when @option{-finline-functions} (included in @option{-O3}) is
10483 enabled; @option{--param max-inline-recursive-depth-auto} applies instead.  The
10484 default value is 8.
10485
10486 @item min-inline-recursive-probability
10487 Recursive inlining is profitable only for function having deep recursion
10488 in average and can hurt for function having little recursion depth by
10489 increasing the prologue size or complexity of function body to other
10490 optimizers.
10491
10492 When profile feedback is available (see @option{-fprofile-generate}) the actual
10493 recursion depth can be guessed from probability that function recurses via a
10494 given call expression.  This parameter limits inlining only to call expressions
10495 whose probability exceeds the given threshold (in percents).
10496 The default value is 10.
10497
10498 @item early-inlining-insns
10499 Specify growth that the early inliner can make.  In effect it increases
10500 the amount of inlining for code having a large abstraction penalty.
10501 The default value is 14.
10502
10503 @item max-early-inliner-iterations
10504 Limit of iterations of the early inliner.  This basically bounds
10505 the number of nested indirect calls the early inliner can resolve.
10506 Deeper chains are still handled by late inlining.
10507
10508 @item comdat-sharing-probability
10509 Probability (in percent) that C++ inline function with comdat visibility
10510 are shared across multiple compilation units.  The default value is 20.
10511
10512 @item profile-func-internal-id
10513 A parameter to control whether to use function internal id in profile
10514 database lookup. If the value is 0, the compiler uses an id that
10515 is based on function assembler name and filename, which makes old profile
10516 data more tolerant to source changes such as function reordering etc.
10517 The default value is 0.
10518
10519 @item min-vect-loop-bound
10520 The minimum number of iterations under which loops are not vectorized
10521 when @option{-ftree-vectorize} is used.  The number of iterations after
10522 vectorization needs to be greater than the value specified by this option
10523 to allow vectorization.  The default value is 0.
10524
10525 @item gcse-cost-distance-ratio
10526 Scaling factor in calculation of maximum distance an expression
10527 can be moved by GCSE optimizations.  This is currently supported only in the
10528 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
10529 is with simple expressions, i.e., the expressions that have cost
10530 less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
10531 hoisting of simple expressions.  The default value is 10.
10532
10533 @item gcse-unrestricted-cost
10534 Cost, roughly measured as the cost of a single typical machine
10535 instruction, at which GCSE optimizations do not constrain
10536 the distance an expression can travel.  This is currently
10537 supported only in the code hoisting pass.  The lesser the cost,
10538 the more aggressive code hoisting is.  Specifying 0 
10539 allows all expressions to travel unrestricted distances.
10540 The default value is 3.
10541
10542 @item max-hoist-depth
10543 The depth of search in the dominator tree for expressions to hoist.
10544 This is used to avoid quadratic behavior in hoisting algorithm.
10545 The value of 0 does not limit on the search, but may slow down compilation
10546 of huge functions.  The default value is 30.
10547
10548 @item max-tail-merge-comparisons
10549 The maximum amount of similar bbs to compare a bb with.  This is used to
10550 avoid quadratic behavior in tree tail merging.  The default value is 10.
10551
10552 @item max-tail-merge-iterations
10553 The maximum amount of iterations of the pass over the function.  This is used to
10554 limit compilation time in tree tail merging.  The default value is 2.
10555
10556 @item max-unrolled-insns
10557 The maximum number of instructions that a loop may have to be unrolled.
10558 If a loop is unrolled, this parameter also determines how many times
10559 the loop code is unrolled.
10560
10561 @item max-average-unrolled-insns
10562 The maximum number of instructions biased by probabilities of their execution
10563 that a loop may have to be unrolled.  If a loop is unrolled,
10564 this parameter also determines how many times the loop code is unrolled.
10565
10566 @item max-unroll-times
10567 The maximum number of unrollings of a single loop.
10568
10569 @item max-peeled-insns
10570 The maximum number of instructions that a loop may have to be peeled.
10571 If a loop is peeled, this parameter also determines how many times
10572 the loop code is peeled.
10573
10574 @item max-peel-times
10575 The maximum number of peelings of a single loop.
10576
10577 @item max-peel-branches
10578 The maximum number of branches on the hot path through the peeled sequence.
10579
10580 @item max-completely-peeled-insns
10581 The maximum number of insns of a completely peeled loop.
10582
10583 @item max-completely-peel-times
10584 The maximum number of iterations of a loop to be suitable for complete peeling.
10585
10586 @item max-completely-peel-loop-nest-depth
10587 The maximum depth of a loop nest suitable for complete peeling.
10588
10589 @item max-unswitch-insns
10590 The maximum number of insns of an unswitched loop.
10591
10592 @item max-unswitch-level
10593 The maximum number of branches unswitched in a single loop.
10594
10595 @item lim-expensive
10596 The minimum cost of an expensive expression in the loop invariant motion.
10597
10598 @item iv-consider-all-candidates-bound
10599 Bound on number of candidates for induction variables, below which
10600 all candidates are considered for each use in induction variable
10601 optimizations.  If there are more candidates than this,
10602 only the most relevant ones are considered to avoid quadratic time complexity.
10603
10604 @item iv-max-considered-uses
10605 The induction variable optimizations give up on loops that contain more
10606 induction variable uses.
10607
10608 @item iv-always-prune-cand-set-bound
10609 If the number of candidates in the set is smaller than this value,
10610 always try to remove unnecessary ivs from the set
10611 when adding a new one.
10612
10613 @item scev-max-expr-size
10614 Bound on size of expressions used in the scalar evolutions analyzer.
10615 Large expressions slow the analyzer.
10616
10617 @item scev-max-expr-complexity
10618 Bound on the complexity of the expressions in the scalar evolutions analyzer.
10619 Complex expressions slow the analyzer.
10620
10621 @item vect-max-version-for-alignment-checks
10622 The maximum number of run-time checks that can be performed when
10623 doing loop versioning for alignment in the vectorizer.
10624
10625 @item vect-max-version-for-alias-checks
10626 The maximum number of run-time checks that can be performed when
10627 doing loop versioning for alias in the vectorizer.
10628
10629 @item vect-max-peeling-for-alignment
10630 The maximum number of loop peels to enhance access alignment
10631 for vectorizer. Value -1 means 'no limit'.
10632
10633 @item max-iterations-to-track
10634 The maximum number of iterations of a loop the brute-force algorithm
10635 for analysis of the number of iterations of the loop tries to evaluate.
10636
10637 @item hot-bb-count-ws-permille
10638 A basic block profile count is considered hot if it contributes to 
10639 the given permillage (i.e. 0...1000) of the entire profiled execution.
10640
10641 @item hot-bb-frequency-fraction
10642 Select fraction of the entry block frequency of executions of basic block in
10643 function given basic block needs to have to be considered hot.
10644
10645 @item max-predicted-iterations
10646 The maximum number of loop iterations we predict statically.  This is useful
10647 in cases where a function contains a single loop with known bound and
10648 another loop with unknown bound.
10649 The known number of iterations is predicted correctly, while
10650 the unknown number of iterations average to roughly 10.  This means that the
10651 loop without bounds appears artificially cold relative to the other one.
10652
10653 @item builtin-expect-probability
10654 Control the probability of the expression having the specified value. This
10655 parameter takes a percentage (i.e. 0 ... 100) as input.
10656 The default probability of 90 is obtained empirically.
10657
10658 @item align-threshold
10659
10660 Select fraction of the maximal frequency of executions of a basic block in
10661 a function to align the basic block.
10662
10663 @item align-loop-iterations
10664
10665 A loop expected to iterate at least the selected number of iterations is
10666 aligned.
10667
10668 @item tracer-dynamic-coverage
10669 @itemx tracer-dynamic-coverage-feedback
10670
10671 This value is used to limit superblock formation once the given percentage of
10672 executed instructions is covered.  This limits unnecessary code size
10673 expansion.
10674
10675 The @option{tracer-dynamic-coverage-feedback} parameter
10676 is used only when profile
10677 feedback is available.  The real profiles (as opposed to statically estimated
10678 ones) are much less balanced allowing the threshold to be larger value.
10679
10680 @item tracer-max-code-growth
10681 Stop tail duplication once code growth has reached given percentage.  This is
10682 a rather artificial limit, as most of the duplicates are eliminated later in
10683 cross jumping, so it may be set to much higher values than is the desired code
10684 growth.
10685
10686 @item tracer-min-branch-ratio
10687
10688 Stop reverse growth when the reverse probability of best edge is less than this
10689 threshold (in percent).
10690
10691 @item tracer-min-branch-ratio
10692 @itemx tracer-min-branch-ratio-feedback
10693
10694 Stop forward growth if the best edge has probability lower than this
10695 threshold.
10696
10697 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
10698 compilation for profile feedback and one for compilation without.  The value
10699 for compilation with profile feedback needs to be more conservative (higher) in
10700 order to make tracer effective.
10701
10702 @item max-cse-path-length
10703
10704 The maximum number of basic blocks on path that CSE considers.
10705 The default is 10.
10706
10707 @item max-cse-insns
10708 The maximum number of instructions CSE processes before flushing.
10709 The default is 1000.
10710
10711 @item ggc-min-expand
10712
10713 GCC uses a garbage collector to manage its own memory allocation.  This
10714 parameter specifies the minimum percentage by which the garbage
10715 collector's heap should be allowed to expand between collections.
10716 Tuning this may improve compilation speed; it has no effect on code
10717 generation.
10718
10719 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
10720 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
10721 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
10722 GCC is not able to calculate RAM on a particular platform, the lower
10723 bound of 30% is used.  Setting this parameter and
10724 @option{ggc-min-heapsize} to zero causes a full collection to occur at
10725 every opportunity.  This is extremely slow, but can be useful for
10726 debugging.
10727
10728 @item ggc-min-heapsize
10729
10730 Minimum size of the garbage collector's heap before it begins bothering
10731 to collect garbage.  The first collection occurs after the heap expands
10732 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
10733 tuning this may improve compilation speed, and has no effect on code
10734 generation.
10735
10736 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
10737 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
10738 with a lower bound of 4096 (four megabytes) and an upper bound of
10739 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
10740 particular platform, the lower bound is used.  Setting this parameter
10741 very large effectively disables garbage collection.  Setting this
10742 parameter and @option{ggc-min-expand} to zero causes a full collection
10743 to occur at every opportunity.
10744
10745 @item max-reload-search-insns
10746 The maximum number of instruction reload should look backward for equivalent
10747 register.  Increasing values mean more aggressive optimization, making the
10748 compilation time increase with probably slightly better performance.
10749 The default value is 100.
10750
10751 @item max-cselib-memory-locations
10752 The maximum number of memory locations cselib should take into account.
10753 Increasing values mean more aggressive optimization, making the compilation time
10754 increase with probably slightly better performance.  The default value is 500.
10755
10756 @item reorder-blocks-duplicate
10757 @itemx reorder-blocks-duplicate-feedback
10758
10759 Used by the basic block reordering pass to decide whether to use unconditional
10760 branch or duplicate the code on its destination.  Code is duplicated when its
10761 estimated size is smaller than this value multiplied by the estimated size of
10762 unconditional jump in the hot spots of the program.
10763
10764 The @option{reorder-block-duplicate-feedback} parameter
10765 is used only when profile
10766 feedback is available.  It may be set to higher values than
10767 @option{reorder-block-duplicate} since information about the hot spots is more
10768 accurate.
10769
10770 @item max-sched-ready-insns
10771 The maximum number of instructions ready to be issued the scheduler should
10772 consider at any given time during the first scheduling pass.  Increasing
10773 values mean more thorough searches, making the compilation time increase
10774 with probably little benefit.  The default value is 100.
10775
10776 @item max-sched-region-blocks
10777 The maximum number of blocks in a region to be considered for
10778 interblock scheduling.  The default value is 10.
10779
10780 @item max-pipeline-region-blocks
10781 The maximum number of blocks in a region to be considered for
10782 pipelining in the selective scheduler.  The default value is 15.
10783
10784 @item max-sched-region-insns
10785 The maximum number of insns in a region to be considered for
10786 interblock scheduling.  The default value is 100.
10787
10788 @item max-pipeline-region-insns
10789 The maximum number of insns in a region to be considered for
10790 pipelining in the selective scheduler.  The default value is 200.
10791
10792 @item min-spec-prob
10793 The minimum probability (in percents) of reaching a source block
10794 for interblock speculative scheduling.  The default value is 40.
10795
10796 @item max-sched-extend-regions-iters
10797 The maximum number of iterations through CFG to extend regions.
10798 A value of 0 (the default) disables region extensions.
10799
10800 @item max-sched-insn-conflict-delay
10801 The maximum conflict delay for an insn to be considered for speculative motion.
10802 The default value is 3.
10803
10804 @item sched-spec-prob-cutoff
10805 The minimal probability of speculation success (in percents), so that
10806 speculative insns are scheduled.
10807 The default value is 40.
10808
10809 @item sched-spec-state-edge-prob-cutoff
10810 The minimum probability an edge must have for the scheduler to save its
10811 state across it.
10812 The default value is 10.
10813
10814 @item sched-mem-true-dep-cost
10815 Minimal distance (in CPU cycles) between store and load targeting same
10816 memory locations.  The default value is 1.
10817
10818 @item selsched-max-lookahead
10819 The maximum size of the lookahead window of selective scheduling.  It is a
10820 depth of search for available instructions.
10821 The default value is 50.
10822
10823 @item selsched-max-sched-times
10824 The maximum number of times that an instruction is scheduled during
10825 selective scheduling.  This is the limit on the number of iterations
10826 through which the instruction may be pipelined.  The default value is 2.
10827
10828 @item selsched-max-insns-to-rename
10829 The maximum number of best instructions in the ready list that are considered
10830 for renaming in the selective scheduler.  The default value is 2.
10831
10832 @item sms-min-sc
10833 The minimum value of stage count that swing modulo scheduler
10834 generates.  The default value is 2.
10835
10836 @item max-last-value-rtl
10837 The maximum size measured as number of RTLs that can be recorded in an expression
10838 in combiner for a pseudo register as last known value of that register.  The default
10839 is 10000.
10840
10841 @item max-combine-insns
10842 The maximum number of instructions the RTL combiner tries to combine.
10843 The default value is 2 at @option{-Og} and 4 otherwise.
10844
10845 @item integer-share-limit
10846 Small integer constants can use a shared data structure, reducing the
10847 compiler's memory usage and increasing its speed.  This sets the maximum
10848 value of a shared integer constant.  The default value is 256.
10849
10850 @item ssp-buffer-size
10851 The minimum size of buffers (i.e.@: arrays) that receive stack smashing
10852 protection when @option{-fstack-protection} is used.
10853
10854 @item min-size-for-stack-sharing
10855 The minimum size of variables taking part in stack slot sharing when not
10856 optimizing. The default value is 32.
10857
10858 @item max-jump-thread-duplication-stmts
10859 Maximum number of statements allowed in a block that needs to be
10860 duplicated when threading jumps.
10861
10862 @item max-fields-for-field-sensitive
10863 Maximum number of fields in a structure treated in
10864 a field sensitive manner during pointer analysis.  The default is zero
10865 for @option{-O0} and @option{-O1},
10866 and 100 for @option{-Os}, @option{-O2}, and @option{-O3}.
10867
10868 @item prefetch-latency
10869 Estimate on average number of instructions that are executed before
10870 prefetch finishes.  The distance prefetched ahead is proportional
10871 to this constant.  Increasing this number may also lead to less
10872 streams being prefetched (see @option{simultaneous-prefetches}).
10873
10874 @item simultaneous-prefetches
10875 Maximum number of prefetches that can run at the same time.
10876
10877 @item l1-cache-line-size
10878 The size of cache line in L1 cache, in bytes.
10879
10880 @item l1-cache-size
10881 The size of L1 cache, in kilobytes.
10882
10883 @item l2-cache-size
10884 The size of L2 cache, in kilobytes.
10885
10886 @item min-insn-to-prefetch-ratio
10887 The minimum ratio between the number of instructions and the
10888 number of prefetches to enable prefetching in a loop.
10889
10890 @item prefetch-min-insn-to-mem-ratio
10891 The minimum ratio between the number of instructions and the
10892 number of memory references to enable prefetching in a loop.
10893
10894 @item use-canonical-types
10895 Whether the compiler should use the ``canonical'' type system.  By
10896 default, this should always be 1, which uses a more efficient internal
10897 mechanism for comparing types in C++ and Objective-C++.  However, if
10898 bugs in the canonical type system are causing compilation failures,
10899 set this value to 0 to disable canonical types.
10900
10901 @item switch-conversion-max-branch-ratio
10902 Switch initialization conversion refuses to create arrays that are
10903 bigger than @option{switch-conversion-max-branch-ratio} times the number of
10904 branches in the switch.
10905
10906 @item max-partial-antic-length
10907 Maximum length of the partial antic set computed during the tree
10908 partial redundancy elimination optimization (@option{-ftree-pre}) when
10909 optimizing at @option{-O3} and above.  For some sorts of source code
10910 the enhanced partial redundancy elimination optimization can run away,
10911 consuming all of the memory available on the host machine.  This
10912 parameter sets a limit on the length of the sets that are computed,
10913 which prevents the runaway behavior.  Setting a value of 0 for
10914 this parameter allows an unlimited set length.
10915
10916 @item sccvn-max-scc-size
10917 Maximum size of a strongly connected component (SCC) during SCCVN
10918 processing.  If this limit is hit, SCCVN processing for the whole
10919 function is not done and optimizations depending on it are
10920 disabled.  The default maximum SCC size is 10000.
10921
10922 @item sccvn-max-alias-queries-per-access
10923 Maximum number of alias-oracle queries we perform when looking for
10924 redundancies for loads and stores.  If this limit is hit the search
10925 is aborted and the load or store is not considered redundant.  The
10926 number of queries is algorithmically limited to the number of
10927 stores on all paths from the load to the function entry.
10928 The default maxmimum number of queries is 1000.
10929
10930 @item ira-max-loops-num
10931 IRA uses regional register allocation by default.  If a function
10932 contains more loops than the number given by this parameter, only at most
10933 the given number of the most frequently-executed loops form regions
10934 for regional register allocation.  The default value of the
10935 parameter is 100.
10936
10937 @item ira-max-conflict-table-size 
10938 Although IRA uses a sophisticated algorithm to compress the conflict
10939 table, the table can still require excessive amounts of memory for
10940 huge functions.  If the conflict table for a function could be more
10941 than the size in MB given by this parameter, the register allocator
10942 instead uses a faster, simpler, and lower-quality
10943 algorithm that does not require building a pseudo-register conflict table.  
10944 The default value of the parameter is 2000.
10945
10946 @item ira-loop-reserved-regs
10947 IRA can be used to evaluate more accurate register pressure in loops
10948 for decisions to move loop invariants (see @option{-O3}).  The number
10949 of available registers reserved for some other purposes is given
10950 by this parameter.  The default value of the parameter is 2, which is
10951 the minimal number of registers needed by typical instructions.
10952 This value is the best found from numerous experiments.
10953
10954 @item lra-inheritance-ebb-probability-cutoff
10955 LRA tries to reuse values reloaded in registers in subsequent insns.
10956 This optimization is called inheritance.  EBB is used as a region to
10957 do this optimization.  The parameter defines a minimal fall-through
10958 edge probability in percentage used to add BB to inheritance EBB in
10959 LRA.  The default value of the parameter is 40.  The value was chosen
10960 from numerous runs of SPEC2000 on x86-64.
10961
10962 @item loop-invariant-max-bbs-in-loop
10963 Loop invariant motion can be very expensive, both in compilation time and
10964 in amount of needed compile-time memory, with very large loops.  Loops
10965 with more basic blocks than this parameter won't have loop invariant
10966 motion optimization performed on them.  The default value of the
10967 parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.
10968
10969 @item loop-max-datarefs-for-datadeps
10970 Building data dapendencies is expensive for very large loops.  This
10971 parameter limits the number of data references in loops that are
10972 considered for data dependence analysis.  These large loops are no
10973 handled by the optimizations using loop data dependencies.
10974 The default value is 1000.
10975
10976 @item max-vartrack-size
10977 Sets a maximum number of hash table slots to use during variable
10978 tracking dataflow analysis of any function.  If this limit is exceeded
10979 with variable tracking at assignments enabled, analysis for that
10980 function is retried without it, after removing all debug insns from
10981 the function.  If the limit is exceeded even without debug insns, var
10982 tracking analysis is completely disabled for the function.  Setting
10983 the parameter to zero makes it unlimited.
10984
10985 @item max-vartrack-expr-depth
10986 Sets a maximum number of recursion levels when attempting to map
10987 variable names or debug temporaries to value expressions.  This trades
10988 compilation time for more complete debug information.  If this is set too
10989 low, value expressions that are available and could be represented in
10990 debug information may end up not being used; setting this higher may
10991 enable the compiler to find more complex debug expressions, but compile
10992 time and memory use may grow.  The default is 12.
10993
10994 @item min-nondebug-insn-uid
10995 Use uids starting at this parameter for nondebug insns.  The range below
10996 the parameter is reserved exclusively for debug insns created by
10997 @option{-fvar-tracking-assignments}, but debug insns may get
10998 (non-overlapping) uids above it if the reserved range is exhausted.
10999
11000 @item ipa-sra-ptr-growth-factor
11001 IPA-SRA replaces a pointer to an aggregate with one or more new
11002 parameters only when their cumulative size is less or equal to
11003 @option{ipa-sra-ptr-growth-factor} times the size of the original
11004 pointer parameter.
11005
11006 @item sra-max-scalarization-size-Ospeed
11007 @item sra-max-scalarization-size-Osize
11008 The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA) aim to
11009 replace scalar parts of aggregates with uses of independent scalar
11010 variables.  These parameters control the maximum size, in storage units,
11011 of aggregate which is considered for replacement when compiling for
11012 speed
11013 (@option{sra-max-scalarization-size-Ospeed}) or size
11014 (@option{sra-max-scalarization-size-Osize}) respectively.
11015
11016 @item tm-max-aggregate-size
11017 When making copies of thread-local variables in a transaction, this
11018 parameter specifies the size in bytes after which variables are
11019 saved with the logging functions as opposed to save/restore code
11020 sequence pairs.  This option only applies when using
11021 @option{-fgnu-tm}.
11022
11023 @item graphite-max-nb-scop-params
11024 To avoid exponential effects in the Graphite loop transforms, the
11025 number of parameters in a Static Control Part (SCoP) is bounded.  The
11026 default value is 10 parameters.  A variable whose value is unknown at
11027 compilation time and defined outside a SCoP is a parameter of the SCoP.
11028
11029 @item graphite-max-bbs-per-function
11030 To avoid exponential effects in the detection of SCoPs, the size of
11031 the functions analyzed by Graphite is bounded.  The default value is
11032 100 basic blocks.
11033
11034 @item loop-block-tile-size
11035 Loop blocking or strip mining transforms, enabled with
11036 @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
11037 loop in the loop nest by a given number of iterations.  The strip
11038 length can be changed using the @option{loop-block-tile-size}
11039 parameter.  The default value is 51 iterations.
11040
11041 @item loop-unroll-jam-size
11042 Specify the unroll factor for the @option{-floop-unroll-and-jam} option.  The 
11043 default value is 4.
11044
11045 @item loop-unroll-jam-depth
11046 Specify the dimension to be unrolled (counting from the most inner loop)
11047 for the  @option{-floop-unroll-and-jam}.  The default value is 2.
11048
11049 @item ipa-cp-value-list-size
11050 IPA-CP attempts to track all possible values and types passed to a function's
11051 parameter in order to propagate them and perform devirtualization.
11052 @option{ipa-cp-value-list-size} is the maximum number of values and types it
11053 stores per one formal parameter of a function.
11054
11055 @item ipa-cp-eval-threshold
11056 IPA-CP calculates its own score of cloning profitability heuristics
11057 and performs those cloning opportunities with scores that exceed
11058 @option{ipa-cp-eval-threshold}.
11059
11060 @item ipa-cp-recursion-penalty
11061 Percentage penalty the recursive functions will receive when they
11062 are evaluated for cloning.
11063
11064 @item ipa-cp-single-call-penalty
11065 Percentage penalty functions containg a single call to another
11066 function will receive when they are evaluated for cloning.
11067
11068
11069 @item ipa-max-agg-items
11070 IPA-CP is also capable to propagate a number of scalar values passed
11071 in an aggregate. @option{ipa-max-agg-items} controls the maximum
11072 number of such values per one parameter.
11073
11074 @item ipa-cp-loop-hint-bonus
11075 When IPA-CP determines that a cloning candidate would make the number
11076 of iterations of a loop known, it adds a bonus of
11077 @option{ipa-cp-loop-hint-bonus} to the profitability score of
11078 the candidate.
11079
11080 @item ipa-cp-array-index-hint-bonus
11081 When IPA-CP determines that a cloning candidate would make the index of
11082 an array access known, it adds a bonus of
11083 @option{ipa-cp-array-index-hint-bonus} to the profitability
11084 score of the candidate.
11085
11086 @item ipa-max-aa-steps
11087 During its analysis of function bodies, IPA-CP employs alias analysis
11088 in order to track values pointed to by function parameters.  In order
11089 not spend too much time analyzing huge functions, it gives up and
11090 consider all memory clobbered after examining
11091 @option{ipa-max-aa-steps} statements modifying memory.
11092
11093 @item lto-partitions
11094 Specify desired number of partitions produced during WHOPR compilation.
11095 The number of partitions should exceed the number of CPUs used for compilation.
11096 The default value is 32.
11097
11098 @item lto-minpartition
11099 Size of minimal partition for WHOPR (in estimated instructions).
11100 This prevents expenses of splitting very small programs into too many
11101 partitions.
11102
11103 @item cxx-max-namespaces-for-diagnostic-help
11104 The maximum number of namespaces to consult for suggestions when C++
11105 name lookup fails for an identifier.  The default is 1000.
11106
11107 @item sink-frequency-threshold
11108 The maximum relative execution frequency (in percents) of the target block
11109 relative to a statement's original block to allow statement sinking of a
11110 statement.  Larger numbers result in more aggressive statement sinking.
11111 The default value is 75.  A small positive adjustment is applied for
11112 statements with memory operands as those are even more profitable so sink.
11113
11114 @item max-stores-to-sink
11115 The maximum number of conditional stores paires that can be sunk.  Set to 0
11116 if either vectorization (@option{-ftree-vectorize}) or if-conversion
11117 (@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
11118
11119 @item allow-store-data-races
11120 Allow optimizers to introduce new data races on stores.
11121 Set to 1 to allow, otherwise to 0.  This option is enabled by default
11122 at optimization level @option{-Ofast}.
11123
11124 @item case-values-threshold
11125 The smallest number of different values for which it is best to use a
11126 jump-table instead of a tree of conditional branches.  If the value is
11127 0, use the default for the machine.  The default is 0.
11128
11129 @item tree-reassoc-width
11130 Set the maximum number of instructions executed in parallel in
11131 reassociated tree. This parameter overrides target dependent
11132 heuristics used by default if has non zero value.
11133
11134 @item sched-pressure-algorithm
11135 Choose between the two available implementations of
11136 @option{-fsched-pressure}.  Algorithm 1 is the original implementation
11137 and is the more likely to prevent instructions from being reordered.
11138 Algorithm 2 was designed to be a compromise between the relatively
11139 conservative approach taken by algorithm 1 and the rather aggressive
11140 approach taken by the default scheduler.  It relies more heavily on
11141 having a regular register file and accurate register pressure classes.
11142 See @file{haifa-sched.c} in the GCC sources for more details.
11143
11144 The default choice depends on the target.
11145
11146 @item max-slsr-cand-scan
11147 Set the maximum number of existing candidates that are considered when
11148 seeking a basis for a new straight-line strength reduction candidate.
11149
11150 @item asan-globals
11151 Enable buffer overflow detection for global objects.  This kind
11152 of protection is enabled by default if you are using
11153 @option{-fsanitize=address} option.
11154 To disable global objects protection use @option{--param asan-globals=0}.
11155
11156 @item asan-stack
11157 Enable buffer overflow detection for stack objects.  This kind of
11158 protection is enabled by default when using @option{-fsanitize=address}.
11159 To disable stack protection use @option{--param asan-stack=0} option.
11160
11161 @item asan-instrument-reads
11162 Enable buffer overflow detection for memory reads.  This kind of
11163 protection is enabled by default when using @option{-fsanitize=address}.
11164 To disable memory reads protection use
11165 @option{--param asan-instrument-reads=0}.
11166
11167 @item asan-instrument-writes
11168 Enable buffer overflow detection for memory writes.  This kind of
11169 protection is enabled by default when using @option{-fsanitize=address}.
11170 To disable memory writes protection use
11171 @option{--param asan-instrument-writes=0} option.
11172
11173 @item asan-memintrin
11174 Enable detection for built-in functions.  This kind of protection
11175 is enabled by default when using @option{-fsanitize=address}.
11176 To disable built-in functions protection use
11177 @option{--param asan-memintrin=0}.
11178
11179 @item asan-use-after-return
11180 Enable detection of use-after-return.  This kind of protection
11181 is enabled by default when using @option{-fsanitize=address} option.
11182 To disable use-after-return detection use 
11183 @option{--param asan-use-after-return=0}.
11184
11185 @item asan-instrumentation-with-call-threshold
11186 If number of memory accesses in function being instrumented
11187 is greater or equal to this number, use callbacks instead of inline checks.
11188 E.g. to disable inline code use
11189 @option{--param asan-instrumentation-with-call-threshold=0}.
11190
11191 @item chkp-max-ctor-size
11192 Static constructors generated by Pointer Bounds Checker may become very
11193 large and significantly increase compile time at optimization level
11194 @option{-O1} and higher.  This parameter is a maximum nubmer of statements
11195 in a single generated constructor.  Default value is 5000.
11196
11197 @item max-fsm-thread-path-insns
11198 Maximum number of instructions to copy when duplicating blocks on a
11199 finite state automaton jump thread path.  The default is 100.
11200
11201 @item max-fsm-thread-length
11202 Maximum number of basic blocks on a finite state automaton jump thread
11203 path.  The default is 10.
11204
11205 @item max-fsm-thread-paths
11206 Maximum number of new jump thread paths to create for a finite state
11207 automaton.  The default is 50.
11208
11209 @item parloops-chunk-size
11210 Chunk size of omp schedule for loops parallelized by parloops.  The default
11211 is 0.
11212
11213 @item parloops-schedule
11214 Schedule type of omp schedule for loops parallelized by parloops (static,
11215 dynamic, guided, auto, runtime).  The default is static.
11216
11217 @item max-ssa-name-query-depth
11218 Maximum depth of recursion when querying properties of SSA names in things
11219 like fold routines.  One level of recursion corresponds to following a
11220 use-def chain.
11221 @end table
11222 @end table
11223
11224 @node Preprocessor Options
11225 @section Options Controlling the Preprocessor
11226 @cindex preprocessor options
11227 @cindex options, preprocessor
11228
11229 These options control the C preprocessor, which is run on each C source
11230 file before actual compilation.
11231
11232 If you use the @option{-E} option, nothing is done except preprocessing.
11233 Some of these options make sense only together with @option{-E} because
11234 they cause the preprocessor output to be unsuitable for actual
11235 compilation.
11236
11237 @table @gcctabopt
11238 @item -Wp,@var{option}
11239 @opindex Wp
11240 You can use @option{-Wp,@var{option}} to bypass the compiler driver
11241 and pass @var{option} directly through to the preprocessor.  If
11242 @var{option} contains commas, it is split into multiple options at the
11243 commas.  However, many options are modified, translated or interpreted
11244 by the compiler driver before being passed to the preprocessor, and
11245 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
11246 interface is undocumented and subject to change, so whenever possible
11247 you should avoid using @option{-Wp} and let the driver handle the
11248 options instead.
11249
11250 @item -Xpreprocessor @var{option}
11251 @opindex Xpreprocessor
11252 Pass @var{option} as an option to the preprocessor.  You can use this to
11253 supply system-specific preprocessor options that GCC does not 
11254 recognize.
11255
11256 If you want to pass an option that takes an argument, you must use
11257 @option{-Xpreprocessor} twice, once for the option and once for the argument.
11258
11259 @item -no-integrated-cpp
11260 @opindex no-integrated-cpp
11261 Perform preprocessing as a separate pass before compilation.
11262 By default, GCC performs preprocessing as an integrated part of
11263 input tokenization and parsing.
11264 If this option is provided, the appropriate language front end
11265 (@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
11266 and Objective-C, respectively) is instead invoked twice,
11267 once for preprocessing only and once for actual compilation
11268 of the preprocessed input.
11269 This option may be useful in conjunction with the @option{-B} or
11270 @option{-wrapper} options to specify an alternate preprocessor or
11271 perform additional processing of the program source between
11272 normal preprocessing and compilation.
11273 @end table
11274
11275 @include cppopts.texi
11276
11277 @node Assembler Options
11278 @section Passing Options to the Assembler
11279
11280 @c prevent bad page break with this line
11281 You can pass options to the assembler.
11282
11283 @table @gcctabopt
11284 @item -Wa,@var{option}
11285 @opindex Wa
11286 Pass @var{option} as an option to the assembler.  If @var{option}
11287 contains commas, it is split into multiple options at the commas.
11288
11289 @item -Xassembler @var{option}
11290 @opindex Xassembler
11291 Pass @var{option} as an option to the assembler.  You can use this to
11292 supply system-specific assembler options that GCC does not
11293 recognize.
11294
11295 If you want to pass an option that takes an argument, you must use
11296 @option{-Xassembler} twice, once for the option and once for the argument.
11297
11298 @end table
11299
11300 @node Link Options
11301 @section Options for Linking
11302 @cindex link options
11303 @cindex options, linking
11304
11305 These options come into play when the compiler links object files into
11306 an executable output file.  They are meaningless if the compiler is
11307 not doing a link step.
11308
11309 @table @gcctabopt
11310 @cindex file names
11311 @item @var{object-file-name}
11312 A file name that does not end in a special recognized suffix is
11313 considered to name an object file or library.  (Object files are
11314 distinguished from libraries by the linker according to the file
11315 contents.)  If linking is done, these object files are used as input
11316 to the linker.
11317
11318 @item -c
11319 @itemx -S
11320 @itemx -E
11321 @opindex c
11322 @opindex S
11323 @opindex E
11324 If any of these options is used, then the linker is not run, and
11325 object file names should not be used as arguments.  @xref{Overall
11326 Options}.
11327
11328 @item -fuse-ld=bfd
11329 @opindex fuse-ld=bfd
11330 Use the @command{bfd} linker instead of the default linker.
11331
11332 @item -fuse-ld=gold
11333 @opindex fuse-ld=gold
11334 Use the @command{gold} linker instead of the default linker.
11335
11336 @cindex Libraries
11337 @item -l@var{library}
11338 @itemx -l @var{library}
11339 @opindex l
11340 Search the library named @var{library} when linking.  (The second
11341 alternative with the library as a separate argument is only for
11342 POSIX compliance and is not recommended.)
11343
11344 It makes a difference where in the command you write this option; the
11345 linker searches and processes libraries and object files in the order they
11346 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
11347 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
11348 to functions in @samp{z}, those functions may not be loaded.
11349
11350 The linker searches a standard list of directories for the library,
11351 which is actually a file named @file{lib@var{library}.a}.  The linker
11352 then uses this file as if it had been specified precisely by name.
11353
11354 The directories searched include several standard system directories
11355 plus any that you specify with @option{-L}.
11356
11357 Normally the files found this way are library files---archive files
11358 whose members are object files.  The linker handles an archive file by
11359 scanning through it for members which define symbols that have so far
11360 been referenced but not defined.  But if the file that is found is an
11361 ordinary object file, it is linked in the usual fashion.  The only
11362 difference between using an @option{-l} option and specifying a file name
11363 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
11364 and searches several directories.
11365
11366 @item -lobjc
11367 @opindex lobjc
11368 You need this special case of the @option{-l} option in order to
11369 link an Objective-C or Objective-C++ program.
11370
11371 @item -nostartfiles
11372 @opindex nostartfiles
11373 Do not use the standard system startup files when linking.
11374 The standard system libraries are used normally, unless @option{-nostdlib}
11375 or @option{-nodefaultlibs} is used.
11376
11377 @item -nodefaultlibs
11378 @opindex nodefaultlibs
11379 Do not use the standard system libraries when linking.
11380 Only the libraries you specify are passed to the linker, and options
11381 specifying linkage of the system libraries, such as @option{-static-libgcc}
11382 or @option{-shared-libgcc}, are ignored.  
11383 The standard startup files are used normally, unless @option{-nostartfiles}
11384 is used.  
11385
11386 The compiler may generate calls to @code{memcmp},
11387 @code{memset}, @code{memcpy} and @code{memmove}.
11388 These entries are usually resolved by entries in
11389 libc.  These entry points should be supplied through some other
11390 mechanism when this option is specified.
11391
11392 @item -nostdlib
11393 @opindex nostdlib
11394 Do not use the standard system startup files or libraries when linking.
11395 No startup files and only the libraries you specify are passed to
11396 the linker, and options specifying linkage of the system libraries, such as
11397 @option{-static-libgcc} or @option{-shared-libgcc}, are ignored.
11398
11399 The compiler may generate calls to @code{memcmp}, @code{memset},
11400 @code{memcpy} and @code{memmove}.
11401 These entries are usually resolved by entries in
11402 libc.  These entry points should be supplied through some other
11403 mechanism when this option is specified.
11404
11405 @cindex @option{-lgcc}, use with @option{-nostdlib}
11406 @cindex @option{-nostdlib} and unresolved references
11407 @cindex unresolved references and @option{-nostdlib}
11408 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
11409 @cindex @option{-nodefaultlibs} and unresolved references
11410 @cindex unresolved references and @option{-nodefaultlibs}
11411 One of the standard libraries bypassed by @option{-nostdlib} and
11412 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
11413 which GCC uses to overcome shortcomings of particular machines, or special
11414 needs for some languages.
11415 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
11416 Collection (GCC) Internals},
11417 for more discussion of @file{libgcc.a}.)
11418 In most cases, you need @file{libgcc.a} even when you want to avoid
11419 other standard libraries.  In other words, when you specify @option{-nostdlib}
11420 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
11421 This ensures that you have no unresolved references to internal GCC
11422 library subroutines.
11423 (An example of such an internal subroutine is @code{__main}, used to ensure C++
11424 constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
11425 GNU Compiler Collection (GCC) Internals}.)
11426
11427 @item -pie
11428 @opindex pie
11429 Produce a position independent executable on targets that support it.
11430 For predictable results, you must also specify the same set of options
11431 used for compilation (@option{-fpie}, @option{-fPIE},
11432 or model suboptions) when you specify this linker option.
11433
11434 @item -no-pie
11435 @opindex no-pie
11436 Don't produce a position independent executable.
11437
11438 @item -rdynamic
11439 @opindex rdynamic
11440 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
11441 that support it. This instructs the linker to add all symbols, not
11442 only used ones, to the dynamic symbol table. This option is needed
11443 for some uses of @code{dlopen} or to allow obtaining backtraces
11444 from within a program.
11445
11446 @item -s
11447 @opindex s
11448 Remove all symbol table and relocation information from the executable.
11449
11450 @item -static
11451 @opindex static
11452 On systems that support dynamic linking, this prevents linking with the shared
11453 libraries.  On other systems, this option has no effect.
11454
11455 @item -shared
11456 @opindex shared
11457 Produce a shared object which can then be linked with other objects to
11458 form an executable.  Not all systems support this option.  For predictable
11459 results, you must also specify the same set of options used for compilation
11460 (@option{-fpic}, @option{-fPIC}, or model suboptions) when
11461 you specify this linker option.@footnote{On some systems, @samp{gcc -shared}
11462 needs to build supplementary stub code for constructors to work.  On
11463 multi-libbed systems, @samp{gcc -shared} must select the correct support
11464 libraries to link against.  Failing to supply the correct flags may lead
11465 to subtle defects.  Supplying them in cases where they are not necessary
11466 is innocuous.}
11467
11468 @item -shared-libgcc
11469 @itemx -static-libgcc
11470 @opindex shared-libgcc
11471 @opindex static-libgcc
11472 On systems that provide @file{libgcc} as a shared library, these options
11473 force the use of either the shared or static version, respectively.
11474 If no shared version of @file{libgcc} was built when the compiler was
11475 configured, these options have no effect.
11476
11477 There are several situations in which an application should use the
11478 shared @file{libgcc} instead of the static version.  The most common
11479 of these is when the application wishes to throw and catch exceptions
11480 across different shared libraries.  In that case, each of the libraries
11481 as well as the application itself should use the shared @file{libgcc}.
11482
11483 Therefore, the G++ and GCJ drivers automatically add
11484 @option{-shared-libgcc} whenever you build a shared library or a main
11485 executable, because C++ and Java programs typically use exceptions, so
11486 this is the right thing to do.
11487
11488 If, instead, you use the GCC driver to create shared libraries, you may
11489 find that they are not always linked with the shared @file{libgcc}.
11490 If GCC finds, at its configuration time, that you have a non-GNU linker
11491 or a GNU linker that does not support option @option{--eh-frame-hdr},
11492 it links the shared version of @file{libgcc} into shared libraries
11493 by default.  Otherwise, it takes advantage of the linker and optimizes
11494 away the linking with the shared version of @file{libgcc}, linking with
11495 the static version of libgcc by default.  This allows exceptions to
11496 propagate through such shared libraries, without incurring relocation
11497 costs at library load time.
11498
11499 However, if a library or main executable is supposed to throw or catch
11500 exceptions, you must link it using the G++ or GCJ driver, as appropriate
11501 for the languages used in the program, or using the option
11502 @option{-shared-libgcc}, such that it is linked with the shared
11503 @file{libgcc}.
11504
11505 @item -static-libasan
11506 @opindex static-libasan
11507 When the @option{-fsanitize=address} option is used to link a program,
11508 the GCC driver automatically links against @option{libasan}.  If
11509 @file{libasan} is available as a shared library, and the @option{-static}
11510 option is not used, then this links against the shared version of
11511 @file{libasan}.  The @option{-static-libasan} option directs the GCC
11512 driver to link @file{libasan} statically, without necessarily linking
11513 other libraries statically.
11514
11515 @item -static-libtsan
11516 @opindex static-libtsan
11517 When the @option{-fsanitize=thread} option is used to link a program,
11518 the GCC driver automatically links against @option{libtsan}.  If
11519 @file{libtsan} is available as a shared library, and the @option{-static}
11520 option is not used, then this links against the shared version of
11521 @file{libtsan}.  The @option{-static-libtsan} option directs the GCC
11522 driver to link @file{libtsan} statically, without necessarily linking
11523 other libraries statically.
11524
11525 @item -static-liblsan
11526 @opindex static-liblsan
11527 When the @option{-fsanitize=leak} option is used to link a program,
11528 the GCC driver automatically links against @option{liblsan}.  If
11529 @file{liblsan} is available as a shared library, and the @option{-static}
11530 option is not used, then this links against the shared version of
11531 @file{liblsan}.  The @option{-static-liblsan} option directs the GCC
11532 driver to link @file{liblsan} statically, without necessarily linking
11533 other libraries statically.
11534
11535 @item -static-libubsan
11536 @opindex static-libubsan
11537 When the @option{-fsanitize=undefined} option is used to link a program,
11538 the GCC driver automatically links against @option{libubsan}.  If
11539 @file{libubsan} is available as a shared library, and the @option{-static}
11540 option is not used, then this links against the shared version of
11541 @file{libubsan}.  The @option{-static-libubsan} option directs the GCC
11542 driver to link @file{libubsan} statically, without necessarily linking
11543 other libraries statically.
11544
11545 @item -static-libmpx
11546 @opindex static-libmpx
11547 When the @option{-fcheck-pointer bounds} and @option{-mmpx} options are
11548 used to link a program, the GCC driver automatically links against
11549 @file{libmpx}.  If @file{libmpx} is available as a shared library,
11550 and the @option{-static} option is not used, then this links against
11551 the shared version of @file{libmpx}.  The @option{-static-libmpx}
11552 option directs the GCC driver to link @file{libmpx} statically,
11553 without necessarily linking other libraries statically.
11554
11555 @item -static-libmpxwrappers
11556 @opindex static-libmpxwrappers
11557 When the @option{-fcheck-pointer bounds} and @option{-mmpx} options are used
11558 to link a program without also using @option{-fno-chkp-use-wrappers}, the
11559 GCC driver automatically links against @file{libmpxwrappers}.  If
11560 @file{libmpxwrappers} is available as a shared library, and the
11561 @option{-static} option is not used, then this links against the shared
11562 version of @file{libmpxwrappers}.  The @option{-static-libmpxwrappers}
11563 option directs the GCC driver to link @file{libmpxwrappers} statically,
11564 without necessarily linking other libraries statically.
11565
11566 @item -static-libstdc++
11567 @opindex static-libstdc++
11568 When the @command{g++} program is used to link a C++ program, it
11569 normally automatically links against @option{libstdc++}.  If
11570 @file{libstdc++} is available as a shared library, and the
11571 @option{-static} option is not used, then this links against the
11572 shared version of @file{libstdc++}.  That is normally fine.  However, it
11573 is sometimes useful to freeze the version of @file{libstdc++} used by
11574 the program without going all the way to a fully static link.  The
11575 @option{-static-libstdc++} option directs the @command{g++} driver to
11576 link @file{libstdc++} statically, without necessarily linking other
11577 libraries statically.
11578
11579 @item -symbolic
11580 @opindex symbolic
11581 Bind references to global symbols when building a shared object.  Warn
11582 about any unresolved references (unless overridden by the link editor
11583 option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
11584 this option.
11585
11586 @item -T @var{script}
11587 @opindex T
11588 @cindex linker script
11589 Use @var{script} as the linker script.  This option is supported by most
11590 systems using the GNU linker.  On some targets, such as bare-board
11591 targets without an operating system, the @option{-T} option may be required
11592 when linking to avoid references to undefined symbols.
11593
11594 @item -Xlinker @var{option}
11595 @opindex Xlinker
11596 Pass @var{option} as an option to the linker.  You can use this to
11597 supply system-specific linker options that GCC does not recognize.
11598
11599 If you want to pass an option that takes a separate argument, you must use
11600 @option{-Xlinker} twice, once for the option and once for the argument.
11601 For example, to pass @option{-assert definitions}, you must write
11602 @option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
11603 @option{-Xlinker "-assert definitions"}, because this passes the entire
11604 string as a single argument, which is not what the linker expects.
11605
11606 When using the GNU linker, it is usually more convenient to pass
11607 arguments to linker options using the @option{@var{option}=@var{value}}
11608 syntax than as separate arguments.  For example, you can specify
11609 @option{-Xlinker -Map=output.map} rather than
11610 @option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
11611 this syntax for command-line options.
11612
11613 @item -Wl,@var{option}
11614 @opindex Wl
11615 Pass @var{option} as an option to the linker.  If @var{option} contains
11616 commas, it is split into multiple options at the commas.  You can use this
11617 syntax to pass an argument to the option.
11618 For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
11619 linker.  When using the GNU linker, you can also get the same effect with
11620 @option{-Wl,-Map=output.map}.
11621
11622 @item -u @var{symbol}
11623 @opindex u
11624 Pretend the symbol @var{symbol} is undefined, to force linking of
11625 library modules to define it.  You can use @option{-u} multiple times with
11626 different symbols to force loading of additional library modules.
11627
11628 @item -z @var{keyword}
11629 @opindex z
11630 @option{-z} is passed directly on to the linker along with the keyword
11631 @var{keyword}. See the section in the documentation of your linker for
11632 permitted values and their meanings.
11633 @end table
11634
11635 @node Directory Options
11636 @section Options for Directory Search
11637 @cindex directory options
11638 @cindex options, directory search
11639 @cindex search path
11640
11641 These options specify directories to search for header files, for
11642 libraries and for parts of the compiler:
11643
11644 @table @gcctabopt
11645 @item -I@var{dir}
11646 @opindex I
11647 Add the directory @var{dir} to the head of the list of directories to be
11648 searched for header files.  This can be used to override a system header
11649 file, substituting your own version, since these directories are
11650 searched before the system header file directories.  However, you should
11651 not use this option to add directories that contain vendor-supplied
11652 system header files (use @option{-isystem} for that).  If you use more than
11653 one @option{-I} option, the directories are scanned in left-to-right
11654 order; the standard system directories come after.
11655
11656 If a standard system include directory, or a directory specified with
11657 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
11658 option is ignored.  The directory is still searched but as a
11659 system directory at its normal position in the system include chain.
11660 This is to ensure that GCC's procedure to fix buggy system headers and
11661 the ordering for the @code{include_next} directive are not inadvertently changed.
11662 If you really need to change the search order for system directories,
11663 use the @option{-nostdinc} and/or @option{-isystem} options.
11664
11665 @item -iplugindir=@var{dir}
11666 @opindex iplugindir=
11667 Set the directory to search for plugins that are passed
11668 by @option{-fplugin=@var{name}} instead of
11669 @option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
11670 to be used by the user, but only passed by the driver.
11671
11672 @item -iquote@var{dir}
11673 @opindex iquote
11674 Add the directory @var{dir} to the head of the list of directories to
11675 be searched for header files only for the case of @code{#include
11676 "@var{file}"}; they are not searched for @code{#include <@var{file}>},
11677 otherwise just like @option{-I}.
11678
11679 @item -L@var{dir}
11680 @opindex L
11681 Add directory @var{dir} to the list of directories to be searched
11682 for @option{-l}.
11683
11684 @item -B@var{prefix}
11685 @opindex B
11686 This option specifies where to find the executables, libraries,
11687 include files, and data files of the compiler itself.
11688
11689 The compiler driver program runs one or more of the subprograms
11690 @command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
11691 @var{prefix} as a prefix for each program it tries to run, both with and
11692 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
11693
11694 For each subprogram to be run, the compiler driver first tries the
11695 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
11696 is not specified, the driver tries two standard prefixes, 
11697 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
11698 those results in a file name that is found, the unmodified program
11699 name is searched for using the directories specified in your
11700 @env{PATH} environment variable.
11701
11702 The compiler checks to see if the path provided by @option{-B}
11703 refers to a directory, and if necessary it adds a directory
11704 separator character at the end of the path.
11705
11706 @option{-B} prefixes that effectively specify directory names also apply
11707 to libraries in the linker, because the compiler translates these
11708 options into @option{-L} options for the linker.  They also apply to
11709 include files in the preprocessor, because the compiler translates these
11710 options into @option{-isystem} options for the preprocessor.  In this case,
11711 the compiler appends @samp{include} to the prefix.
11712
11713 The runtime support file @file{libgcc.a} can also be searched for using
11714 the @option{-B} prefix, if needed.  If it is not found there, the two
11715 standard prefixes above are tried, and that is all.  The file is left
11716 out of the link if it is not found by those means.
11717
11718 Another way to specify a prefix much like the @option{-B} prefix is to use
11719 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
11720 Variables}.
11721
11722 As a special kludge, if the path provided by @option{-B} is
11723 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
11724 9, then it is replaced by @file{[dir/]include}.  This is to help
11725 with boot-strapping the compiler.
11726
11727 @item -specs=@var{file}
11728 @opindex specs
11729 Process @var{file} after the compiler reads in the standard @file{specs}
11730 file, in order to override the defaults which the @command{gcc} driver
11731 program uses when determining what switches to pass to @command{cc1},
11732 @command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
11733 @option{-specs=@var{file}} can be specified on the command line, and they
11734 are processed in order, from left to right.
11735
11736 @item --sysroot=@var{dir}
11737 @opindex sysroot
11738 Use @var{dir} as the logical root directory for headers and libraries.
11739 For example, if the compiler normally searches for headers in
11740 @file{/usr/include} and libraries in @file{/usr/lib}, it instead
11741 searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
11742
11743 If you use both this option and the @option{-isysroot} option, then
11744 the @option{--sysroot} option applies to libraries, but the
11745 @option{-isysroot} option applies to header files.
11746
11747 The GNU linker (beginning with version 2.16) has the necessary support
11748 for this option.  If your linker does not support this option, the
11749 header file aspect of @option{--sysroot} still works, but the
11750 library aspect does not.
11751
11752 @item --no-sysroot-suffix
11753 @opindex no-sysroot-suffix
11754 For some targets, a suffix is added to the root directory specified
11755 with @option{--sysroot}, depending on the other options used, so that
11756 headers may for example be found in
11757 @file{@var{dir}/@var{suffix}/usr/include} instead of
11758 @file{@var{dir}/usr/include}.  This option disables the addition of
11759 such a suffix.
11760
11761 @item -I-
11762 @opindex I-
11763 This option has been deprecated.  Please use @option{-iquote} instead for
11764 @option{-I} directories before the @option{-I-} and remove the @option{-I-}
11765 option.
11766 Any directories you specify with @option{-I} options before the @option{-I-}
11767 option are searched only for the case of @code{#include "@var{file}"};
11768 they are not searched for @code{#include <@var{file}>}.
11769
11770 If additional directories are specified with @option{-I} options after
11771 the @option{-I-} option, these directories are searched for all @code{#include}
11772 directives.  (Ordinarily @emph{all} @option{-I} directories are used
11773 this way.)
11774
11775 In addition, the @option{-I-} option inhibits the use of the current
11776 directory (where the current input file came from) as the first search
11777 directory for @code{#include "@var{file}"}.  There is no way to
11778 override this effect of @option{-I-}.  With @option{-I.} you can specify
11779 searching the directory that is current when the compiler is
11780 invoked.  That is not exactly the same as what the preprocessor does
11781 by default, but it is often satisfactory.
11782
11783 @option{-I-} does not inhibit the use of the standard system directories
11784 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
11785 independent.
11786 @end table
11787
11788 @c man end
11789
11790 @node Spec Files
11791 @section Specifying Subprocesses and the Switches to Pass to Them
11792 @cindex Spec Files
11793
11794 @command{gcc} is a driver program.  It performs its job by invoking a
11795 sequence of other programs to do the work of compiling, assembling and
11796 linking.  GCC interprets its command-line parameters and uses these to
11797 deduce which programs it should invoke, and which command-line options
11798 it ought to place on their command lines.  This behavior is controlled
11799 by @dfn{spec strings}.  In most cases there is one spec string for each
11800 program that GCC can invoke, but a few programs have multiple spec
11801 strings to control their behavior.  The spec strings built into GCC can
11802 be overridden by using the @option{-specs=} command-line switch to specify
11803 a spec file.
11804
11805 @dfn{Spec files} are plaintext files that are used to construct spec
11806 strings.  They consist of a sequence of directives separated by blank
11807 lines.  The type of directive is determined by the first non-whitespace
11808 character on the line, which can be one of the following:
11809
11810 @table @code
11811 @item %@var{command}
11812 Issues a @var{command} to the spec file processor.  The commands that can
11813 appear here are:
11814
11815 @table @code
11816 @item %include <@var{file}>
11817 @cindex @code{%include}
11818 Search for @var{file} and insert its text at the current point in the
11819 specs file.
11820
11821 @item %include_noerr <@var{file}>
11822 @cindex @code{%include_noerr}
11823 Just like @samp{%include}, but do not generate an error message if the include
11824 file cannot be found.
11825
11826 @item %rename @var{old_name} @var{new_name}
11827 @cindex @code{%rename}
11828 Rename the spec string @var{old_name} to @var{new_name}.
11829
11830 @end table
11831
11832 @item *[@var{spec_name}]:
11833 This tells the compiler to create, override or delete the named spec
11834 string.  All lines after this directive up to the next directive or
11835 blank line are considered to be the text for the spec string.  If this
11836 results in an empty string then the spec is deleted.  (Or, if the
11837 spec did not exist, then nothing happens.)  Otherwise, if the spec
11838 does not currently exist a new spec is created.  If the spec does
11839 exist then its contents are overridden by the text of this
11840 directive, unless the first character of that text is the @samp{+}
11841 character, in which case the text is appended to the spec.
11842
11843 @item [@var{suffix}]:
11844 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
11845 and up to the next directive or blank line are considered to make up the
11846 spec string for the indicated suffix.  When the compiler encounters an
11847 input file with the named suffix, it processes the spec string in
11848 order to work out how to compile that file.  For example:
11849
11850 @smallexample
11851 .ZZ:
11852 z-compile -input %i
11853 @end smallexample
11854
11855 This says that any input file whose name ends in @samp{.ZZ} should be
11856 passed to the program @samp{z-compile}, which should be invoked with the
11857 command-line switch @option{-input} and with the result of performing the
11858 @samp{%i} substitution.  (See below.)
11859
11860 As an alternative to providing a spec string, the text following a
11861 suffix directive can be one of the following:
11862
11863 @table @code
11864 @item @@@var{language}
11865 This says that the suffix is an alias for a known @var{language}.  This is
11866 similar to using the @option{-x} command-line switch to GCC to specify a
11867 language explicitly.  For example:
11868
11869 @smallexample
11870 .ZZ:
11871 @@c++
11872 @end smallexample
11873
11874 Says that .ZZ files are, in fact, C++ source files.
11875
11876 @item #@var{name}
11877 This causes an error messages saying:
11878
11879 @smallexample
11880 @var{name} compiler not installed on this system.
11881 @end smallexample
11882 @end table
11883
11884 GCC already has an extensive list of suffixes built into it.
11885 This directive adds an entry to the end of the list of suffixes, but
11886 since the list is searched from the end backwards, it is effectively
11887 possible to override earlier entries using this technique.
11888
11889 @end table
11890
11891 GCC has the following spec strings built into it.  Spec files can
11892 override these strings or create their own.  Note that individual
11893 targets can also add their own spec strings to this list.
11894
11895 @smallexample
11896 asm          Options to pass to the assembler
11897 asm_final    Options to pass to the assembler post-processor
11898 cpp          Options to pass to the C preprocessor
11899 cc1          Options to pass to the C compiler
11900 cc1plus      Options to pass to the C++ compiler
11901 endfile      Object files to include at the end of the link
11902 link         Options to pass to the linker
11903 lib          Libraries to include on the command line to the linker
11904 libgcc       Decides which GCC support library to pass to the linker
11905 linker       Sets the name of the linker
11906 predefines   Defines to be passed to the C preprocessor
11907 signed_char  Defines to pass to CPP to say whether @code{char} is signed
11908              by default
11909 startfile    Object files to include at the start of the link
11910 @end smallexample
11911
11912 Here is a small example of a spec file:
11913
11914 @smallexample
11915 %rename lib                 old_lib
11916
11917 *lib:
11918 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
11919 @end smallexample
11920
11921 This example renames the spec called @samp{lib} to @samp{old_lib} and
11922 then overrides the previous definition of @samp{lib} with a new one.
11923 The new definition adds in some extra command-line options before
11924 including the text of the old definition.
11925
11926 @dfn{Spec strings} are a list of command-line options to be passed to their
11927 corresponding program.  In addition, the spec strings can contain
11928 @samp{%}-prefixed sequences to substitute variable text or to
11929 conditionally insert text into the command line.  Using these constructs
11930 it is possible to generate quite complex command lines.
11931
11932 Here is a table of all defined @samp{%}-sequences for spec
11933 strings.  Note that spaces are not generated automatically around the
11934 results of expanding these sequences.  Therefore you can concatenate them
11935 together or combine them with constant text in a single argument.
11936
11937 @table @code
11938 @item %%
11939 Substitute one @samp{%} into the program name or argument.
11940
11941 @item %i
11942 Substitute the name of the input file being processed.
11943
11944 @item %b
11945 Substitute the basename of the input file being processed.
11946 This is the substring up to (and not including) the last period
11947 and not including the directory.
11948
11949 @item %B
11950 This is the same as @samp{%b}, but include the file suffix (text after
11951 the last period).
11952
11953 @item %d
11954 Marks the argument containing or following the @samp{%d} as a
11955 temporary file name, so that that file is deleted if GCC exits
11956 successfully.  Unlike @samp{%g}, this contributes no text to the
11957 argument.
11958
11959 @item %g@var{suffix}
11960 Substitute a file name that has suffix @var{suffix} and is chosen
11961 once per compilation, and mark the argument in the same way as
11962 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
11963 name is now chosen in a way that is hard to predict even when previously
11964 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
11965 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
11966 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
11967 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
11968 was simply substituted with a file name chosen once per compilation,
11969 without regard to any appended suffix (which was therefore treated
11970 just like ordinary text), making such attacks more likely to succeed.
11971
11972 @item %u@var{suffix}
11973 Like @samp{%g}, but generates a new temporary file name
11974 each time it appears instead of once per compilation.
11975
11976 @item %U@var{suffix}
11977 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
11978 new one if there is no such last file name.  In the absence of any
11979 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
11980 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
11981 involves the generation of two distinct file names, one
11982 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
11983 simply substituted with a file name chosen for the previous @samp{%u},
11984 without regard to any appended suffix.
11985
11986 @item %j@var{suffix}
11987 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
11988 writable, and if @option{-save-temps} is not used; 
11989 otherwise, substitute the name
11990 of a temporary file, just like @samp{%u}.  This temporary file is not
11991 meant for communication between processes, but rather as a junk
11992 disposal mechanism.
11993
11994 @item %|@var{suffix}
11995 @itemx %m@var{suffix}
11996 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
11997 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
11998 all.  These are the two most common ways to instruct a program that it
11999 should read from standard input or write to standard output.  If you
12000 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
12001 construct: see for example @file{f/lang-specs.h}.
12002
12003 @item %.@var{SUFFIX}
12004 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
12005 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
12006 terminated by the next space or %.
12007
12008 @item %w
12009 Marks the argument containing or following the @samp{%w} as the
12010 designated output file of this compilation.  This puts the argument
12011 into the sequence of arguments that @samp{%o} substitutes.
12012
12013 @item %o
12014 Substitutes the names of all the output files, with spaces
12015 automatically placed around them.  You should write spaces
12016 around the @samp{%o} as well or the results are undefined.
12017 @samp{%o} is for use in the specs for running the linker.
12018 Input files whose names have no recognized suffix are not compiled
12019 at all, but they are included among the output files, so they are
12020 linked.
12021
12022 @item %O
12023 Substitutes the suffix for object files.  Note that this is
12024 handled specially when it immediately follows @samp{%g, %u, or %U},
12025 because of the need for those to form complete file names.  The
12026 handling is such that @samp{%O} is treated exactly as if it had already
12027 been substituted, except that @samp{%g, %u, and %U} do not currently
12028 support additional @var{suffix} characters following @samp{%O} as they do
12029 following, for example, @samp{.o}.
12030
12031 @item %p
12032 Substitutes the standard macro predefinitions for the
12033 current target machine.  Use this when running @command{cpp}.
12034
12035 @item %P
12036 Like @samp{%p}, but puts @samp{__} before and after the name of each
12037 predefined macro, except for macros that start with @samp{__} or with
12038 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
12039 C@.
12040
12041 @item %I
12042 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
12043 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
12044 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
12045 and @option{-imultilib} as necessary.
12046
12047 @item %s
12048 Current argument is the name of a library or startup file of some sort.
12049 Search for that file in a standard list of directories and substitute
12050 the full name found.  The current working directory is included in the
12051 list of directories scanned.
12052
12053 @item %T
12054 Current argument is the name of a linker script.  Search for that file
12055 in the current list of directories to scan for libraries. If the file
12056 is located insert a @option{--script} option into the command line
12057 followed by the full path name found.  If the file is not found then
12058 generate an error message.  Note: the current working directory is not
12059 searched.
12060
12061 @item %e@var{str}
12062 Print @var{str} as an error message.  @var{str} is terminated by a newline.
12063 Use this when inconsistent options are detected.
12064
12065 @item %(@var{name})
12066 Substitute the contents of spec string @var{name} at this point.
12067
12068 @item %x@{@var{option}@}
12069 Accumulate an option for @samp{%X}.
12070
12071 @item %X
12072 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
12073 spec string.
12074
12075 @item %Y
12076 Output the accumulated assembler options specified by @option{-Wa}.
12077
12078 @item %Z
12079 Output the accumulated preprocessor options specified by @option{-Wp}.
12080
12081 @item %a
12082 Process the @code{asm} spec.  This is used to compute the
12083 switches to be passed to the assembler.
12084
12085 @item %A
12086 Process the @code{asm_final} spec.  This is a spec string for
12087 passing switches to an assembler post-processor, if such a program is
12088 needed.
12089
12090 @item %l
12091 Process the @code{link} spec.  This is the spec for computing the
12092 command line passed to the linker.  Typically it makes use of the
12093 @samp{%L %G %S %D and %E} sequences.
12094
12095 @item %D
12096 Dump out a @option{-L} option for each directory that GCC believes might
12097 contain startup files.  If the target supports multilibs then the
12098 current multilib directory is prepended to each of these paths.
12099
12100 @item %L
12101 Process the @code{lib} spec.  This is a spec string for deciding which
12102 libraries are included on the command line to the linker.
12103
12104 @item %G
12105 Process the @code{libgcc} spec.  This is a spec string for deciding
12106 which GCC support library is included on the command line to the linker.
12107
12108 @item %S
12109 Process the @code{startfile} spec.  This is a spec for deciding which
12110 object files are the first ones passed to the linker.  Typically
12111 this might be a file named @file{crt0.o}.
12112
12113 @item %E
12114 Process the @code{endfile} spec.  This is a spec string that specifies
12115 the last object files that are passed to the linker.
12116
12117 @item %C
12118 Process the @code{cpp} spec.  This is used to construct the arguments
12119 to be passed to the C preprocessor.
12120
12121 @item %1
12122 Process the @code{cc1} spec.  This is used to construct the options to be
12123 passed to the actual C compiler (@command{cc1}).
12124
12125 @item %2
12126 Process the @code{cc1plus} spec.  This is used to construct the options to be
12127 passed to the actual C++ compiler (@command{cc1plus}).
12128
12129 @item %*
12130 Substitute the variable part of a matched option.  See below.
12131 Note that each comma in the substituted string is replaced by
12132 a single space.
12133
12134 @item %<@code{S}
12135 Remove all occurrences of @code{-S} from the command line.  Note---this
12136 command is position dependent.  @samp{%} commands in the spec string
12137 before this one see @code{-S}, @samp{%} commands in the spec string
12138 after this one do not.
12139
12140 @item %:@var{function}(@var{args})
12141 Call the named function @var{function}, passing it @var{args}.
12142 @var{args} is first processed as a nested spec string, then split
12143 into an argument vector in the usual fashion.  The function returns
12144 a string which is processed as if it had appeared literally as part
12145 of the current spec.
12146
12147 The following built-in spec functions are provided:
12148
12149 @table @code
12150 @item @code{getenv}
12151 The @code{getenv} spec function takes two arguments: an environment
12152 variable name and a string.  If the environment variable is not
12153 defined, a fatal error is issued.  Otherwise, the return value is the
12154 value of the environment variable concatenated with the string.  For
12155 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
12156
12157 @smallexample
12158 %:getenv(TOPDIR /include)
12159 @end smallexample
12160
12161 expands to @file{/path/to/top/include}.
12162
12163 @item @code{if-exists}
12164 The @code{if-exists} spec function takes one argument, an absolute
12165 pathname to a file.  If the file exists, @code{if-exists} returns the
12166 pathname.  Here is a small example of its usage:
12167
12168 @smallexample
12169 *startfile:
12170 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
12171 @end smallexample
12172
12173 @item @code{if-exists-else}
12174 The @code{if-exists-else} spec function is similar to the @code{if-exists}
12175 spec function, except that it takes two arguments.  The first argument is
12176 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
12177 returns the pathname.  If it does not exist, it returns the second argument.
12178 This way, @code{if-exists-else} can be used to select one file or another,
12179 based on the existence of the first.  Here is a small example of its usage:
12180
12181 @smallexample
12182 *startfile:
12183 crt0%O%s %:if-exists(crti%O%s) \
12184 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
12185 @end smallexample
12186
12187 @item @code{replace-outfile}
12188 The @code{replace-outfile} spec function takes two arguments.  It looks for the
12189 first argument in the outfiles array and replaces it with the second argument.  Here
12190 is a small example of its usage:
12191
12192 @smallexample
12193 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
12194 @end smallexample
12195
12196 @item @code{remove-outfile}
12197 The @code{remove-outfile} spec function takes one argument.  It looks for the
12198 first argument in the outfiles array and removes it.  Here is a small example
12199 its usage:
12200
12201 @smallexample
12202 %:remove-outfile(-lm)
12203 @end smallexample
12204
12205 @item @code{pass-through-libs}
12206 The @code{pass-through-libs} spec function takes any number of arguments.  It
12207 finds any @option{-l} options and any non-options ending in @file{.a} (which it
12208 assumes are the names of linker input library archive files) and returns a
12209 result containing all the found arguments each prepended by
12210 @option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
12211 intended to be passed to the LTO linker plugin.
12212
12213 @smallexample
12214 %:pass-through-libs(%G %L %G)
12215 @end smallexample
12216
12217 @item @code{print-asm-header}
12218 The @code{print-asm-header} function takes no arguments and simply
12219 prints a banner like:
12220
12221 @smallexample
12222 Assembler options
12223 =================
12224
12225 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
12226 @end smallexample
12227
12228 It is used to separate compiler options from assembler options
12229 in the @option{--target-help} output.
12230 @end table
12231
12232 @item %@{@code{S}@}
12233 Substitutes the @code{-S} switch, if that switch is given to GCC@.
12234 If that switch is not specified, this substitutes nothing.  Note that
12235 the leading dash is omitted when specifying this option, and it is
12236 automatically inserted if the substitution is performed.  Thus the spec
12237 string @samp{%@{foo@}} matches the command-line option @option{-foo}
12238 and outputs the command-line option @option{-foo}.
12239
12240 @item %W@{@code{S}@}
12241 Like %@{@code{S}@} but mark last argument supplied within as a file to be
12242 deleted on failure.
12243
12244 @item %@{@code{S}*@}
12245 Substitutes all the switches specified to GCC whose names start
12246 with @code{-S}, but which also take an argument.  This is used for
12247 switches like @option{-o}, @option{-D}, @option{-I}, etc.
12248 GCC considers @option{-o foo} as being
12249 one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
12250 text, including the space.  Thus two arguments are generated.
12251
12252 @item %@{@code{S}*&@code{T}*@}
12253 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
12254 (the order of @code{S} and @code{T} in the spec is not significant).
12255 There can be any number of ampersand-separated variables; for each the
12256 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
12257
12258 @item %@{@code{S}:@code{X}@}
12259 Substitutes @code{X}, if the @option{-S} switch is given to GCC@.
12260
12261 @item %@{!@code{S}:@code{X}@}
12262 Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.
12263
12264 @item %@{@code{S}*:@code{X}@}
12265 Substitutes @code{X} if one or more switches whose names start with
12266 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
12267 once, no matter how many such switches appeared.  However, if @code{%*}
12268 appears somewhere in @code{X}, then @code{X} is substituted once
12269 for each matching switch, with the @code{%*} replaced by the part of
12270 that switch matching the @code{*}.
12271
12272 If @code{%*} appears as the last part of a spec sequence then a space
12273 is added after the end of the last substitution.  If there is more
12274 text in the sequence, however, then a space is not generated.  This
12275 allows the @code{%*} substitution to be used as part of a larger
12276 string.  For example, a spec string like this:
12277
12278 @smallexample
12279 %@{mcu=*:--script=%*/memory.ld@}
12280 @end smallexample
12281
12282 @noindent
12283 when matching an option like @option{-mcu=newchip} produces:
12284
12285 @smallexample
12286 --script=newchip/memory.ld
12287 @end smallexample
12288
12289 @item %@{.@code{S}:@code{X}@}
12290 Substitutes @code{X}, if processing a file with suffix @code{S}.
12291
12292 @item %@{!.@code{S}:@code{X}@}
12293 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
12294
12295 @item %@{,@code{S}:@code{X}@}
12296 Substitutes @code{X}, if processing a file for language @code{S}.
12297
12298 @item %@{!,@code{S}:@code{X}@}
12299 Substitutes @code{X}, if not processing a file for language @code{S}.
12300
12301 @item %@{@code{S}|@code{P}:@code{X}@}
12302 Substitutes @code{X} if either @code{-S} or @code{-P} is given to
12303 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
12304 @code{*} sequences as well, although they have a stronger binding than
12305 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
12306 alternatives must be starred, and only the first matching alternative
12307 is substituted.
12308
12309 For example, a spec string like this:
12310
12311 @smallexample
12312 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
12313 @end smallexample
12314
12315 @noindent
12316 outputs the following command-line options from the following input
12317 command-line options:
12318
12319 @smallexample
12320 fred.c        -foo -baz
12321 jim.d         -bar -boggle
12322 -d fred.c     -foo -baz -boggle
12323 -d jim.d      -bar -baz -boggle
12324 @end smallexample
12325
12326 @item %@{S:X; T:Y; :D@}
12327
12328 If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
12329 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
12330 be as many clauses as you need.  This may be combined with @code{.},
12331 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
12332
12333
12334 @end table
12335
12336 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
12337 construct may contain other nested @samp{%} constructs or spaces, or
12338 even newlines.  They are processed as usual, as described above.
12339 Trailing white space in @code{X} is ignored.  White space may also
12340 appear anywhere on the left side of the colon in these constructs,
12341 except between @code{.} or @code{*} and the corresponding word.
12342
12343 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
12344 handled specifically in these constructs.  If another value of
12345 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
12346 @option{-W} switch is found later in the command line, the earlier
12347 switch value is ignored, except with @{@code{S}*@} where @code{S} is
12348 just one letter, which passes all matching options.
12349
12350 The character @samp{|} at the beginning of the predicate text is used to
12351 indicate that a command should be piped to the following command, but
12352 only if @option{-pipe} is specified.
12353
12354 It is built into GCC which switches take arguments and which do not.
12355 (You might think it would be useful to generalize this to allow each
12356 compiler's spec to say which switches take arguments.  But this cannot
12357 be done in a consistent fashion.  GCC cannot even decide which input
12358 files have been specified without knowing which switches take arguments,
12359 and it must know which input files to compile in order to tell which
12360 compilers to run).
12361
12362 GCC also knows implicitly that arguments starting in @option{-l} are to be
12363 treated as compiler output files, and passed to the linker in their
12364 proper position among the other output files.
12365
12366 @c man begin OPTIONS
12367
12368 @node Target Options
12369 @section Specifying Target Machine and Compiler Version
12370 @cindex target options
12371 @cindex cross compiling
12372 @cindex specifying machine version
12373 @cindex specifying compiler version and target machine
12374 @cindex compiler version, specifying
12375 @cindex target machine, specifying
12376
12377 The usual way to run GCC is to run the executable called @command{gcc}, or
12378 @command{@var{machine}-gcc} when cross-compiling, or
12379 @command{@var{machine}-gcc-@var{version}} to run a version other than the
12380 one that was installed last.
12381
12382 @node Submodel Options
12383 @section Hardware Models and Configurations
12384 @cindex submodel options
12385 @cindex specifying hardware config
12386 @cindex hardware models and configurations, specifying
12387 @cindex machine dependent options
12388
12389 Each target machine types can have its own
12390 special options, starting with @samp{-m}, to choose among various
12391 hardware models or configurations---for example, 68010 vs 68020,
12392 floating coprocessor or none.  A single installed version of the
12393 compiler can compile for any model or configuration, according to the
12394 options specified.
12395
12396 Some configurations of the compiler also support additional special
12397 options, usually for compatibility with other compilers on the same
12398 platform.
12399
12400 @c This list is ordered alphanumerically by subsection name.
12401 @c It should be the same order and spelling as these options are listed
12402 @c in Machine Dependent Options
12403
12404 @menu
12405 * AArch64 Options::
12406 * Adapteva Epiphany Options::
12407 * ARC Options::
12408 * ARM Options::
12409 * AVR Options::
12410 * Blackfin Options::
12411 * C6X Options::
12412 * CRIS Options::
12413 * CR16 Options::
12414 * Darwin Options::
12415 * DEC Alpha Options::
12416 * FR30 Options::
12417 * FT32 Options::
12418 * FRV Options::
12419 * GNU/Linux Options::
12420 * H8/300 Options::
12421 * HPPA Options::
12422 * IA-64 Options::
12423 * LM32 Options::
12424 * M32C Options::
12425 * M32R/D Options::
12426 * M680x0 Options::
12427 * MCore Options::
12428 * MeP Options::
12429 * MicroBlaze Options::
12430 * MIPS Options::
12431 * MMIX Options::
12432 * MN10300 Options::
12433 * Moxie Options::
12434 * MSP430 Options::
12435 * NDS32 Options::
12436 * Nios II Options::
12437 * Nvidia PTX Options::
12438 * PDP-11 Options::
12439 * picoChip Options::
12440 * PowerPC Options::
12441 * RL78 Options::
12442 * RS/6000 and PowerPC Options::
12443 * RX Options::
12444 * S/390 and zSeries Options::
12445 * Score Options::
12446 * SH Options::
12447 * Solaris 2 Options::
12448 * SPARC Options::
12449 * SPU Options::
12450 * System V Options::
12451 * TILE-Gx Options::
12452 * TILEPro Options::
12453 * V850 Options::
12454 * VAX Options::
12455 * Visium Options::
12456 * VMS Options::
12457 * VxWorks Options::
12458 * x86 Options::
12459 * x86 Windows Options::
12460 * Xstormy16 Options::
12461 * Xtensa Options::
12462 * zSeries Options::
12463 @end menu
12464
12465 @node AArch64 Options
12466 @subsection AArch64 Options
12467 @cindex AArch64 Options
12468
12469 These options are defined for AArch64 implementations:
12470
12471 @table @gcctabopt
12472
12473 @item -mabi=@var{name}
12474 @opindex mabi
12475 Generate code for the specified data model.  Permissible values
12476 are @samp{ilp32} for SysV-like data model where int, long int and pointer
12477 are 32-bit, and @samp{lp64} for SysV-like data model where int is 32-bit,
12478 but long int and pointer are 64-bit.
12479
12480 The default depends on the specific target configuration.  Note that
12481 the LP64 and ILP32 ABIs are not link-compatible; you must compile your
12482 entire program with the same ABI, and link with a compatible set of libraries.
12483
12484 @item -mbig-endian
12485 @opindex mbig-endian
12486 Generate big-endian code.  This is the default when GCC is configured for an
12487 @samp{aarch64_be-*-*} target.
12488
12489 @item -mgeneral-regs-only
12490 @opindex mgeneral-regs-only
12491 Generate code which uses only the general-purpose registers.  This will prevent
12492 the compiler from using floating-point and Advanced SIMD registers but will not
12493 impose any restrictions on the assembler.
12494
12495 @item -mlittle-endian
12496 @opindex mlittle-endian
12497 Generate little-endian code.  This is the default when GCC is configured for an
12498 @samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.
12499
12500 @item -mcmodel=tiny
12501 @opindex mcmodel=tiny
12502 Generate code for the tiny code model.  The program and its statically defined
12503 symbols must be within 1GB of each other.  Pointers are 64 bits.  Programs can
12504 be statically or dynamically linked.  This model is not fully implemented and
12505 mostly treated as @samp{small}.
12506
12507 @item -mcmodel=small
12508 @opindex mcmodel=small
12509 Generate code for the small code model.  The program and its statically defined
12510 symbols must be within 4GB of each other.  Pointers are 64 bits.  Programs can
12511 be statically or dynamically linked.  This is the default code model.
12512
12513 @item -mcmodel=large
12514 @opindex mcmodel=large
12515 Generate code for the large code model.  This makes no assumptions about
12516 addresses and sizes of sections.  Pointers are 64 bits.  Programs can be
12517 statically linked only.
12518
12519 @item -mstrict-align
12520 @opindex mstrict-align
12521 Do not assume that unaligned memory references are handled by the system.
12522
12523 @item -momit-leaf-frame-pointer
12524 @itemx -mno-omit-leaf-frame-pointer
12525 @opindex momit-leaf-frame-pointer
12526 @opindex mno-omit-leaf-frame-pointer
12527 Omit or keep the frame pointer in leaf functions.  The former behaviour is the
12528 default.
12529
12530 @item -mtls-dialect=desc
12531 @opindex mtls-dialect=desc
12532 Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
12533 of TLS variables.  This is the default.
12534
12535 @item -mtls-dialect=traditional
12536 @opindex mtls-dialect=traditional
12537 Use traditional TLS as the thread-local storage mechanism for dynamic accesses
12538 of TLS variables.
12539
12540 @item -mtls-size=@var{size}
12541 @opindex mtls-size
12542 Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
12543 This option depends on binutils higher than 2.25.
12544
12545 @item -mfix-cortex-a53-835769
12546 @itemx -mno-fix-cortex-a53-835769
12547 @opindex mfix-cortex-a53-835769
12548 @opindex mno-fix-cortex-a53-835769
12549 Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
12550 This involves inserting a NOP instruction between memory instructions and
12551 64-bit integer multiply-accumulate instructions.
12552
12553 @item -mfix-cortex-a53-843419
12554 @itemx -mno-fix-cortex-a53-843419
12555 @opindex mfix-cortex-a53-843419
12556 @opindex mno-fix-cortex-a53-843419
12557 Enable or disable the workaround for the ARM Cortex-A53 erratum number 843419.
12558 This erratum workaround is made at link time and this will only pass the
12559 corresponding flag to the linker.
12560
12561 @item -mlow-precision-recip-sqrt
12562 @item -mno-low-precision-recip-sqrt
12563 @opindex -mlow-precision-recip-sqrt
12564 @opindex -mno-low-precision-recip-sqrt
12565 The square root estimate uses two steps instead of three for double-precision,
12566 and one step instead of two for single-precision.
12567 Thus reducing latency and precision.
12568 This is only relevant if @option{-ffast-math} activates
12569 reciprocal square root estimate instructions.
12570 Which in turn depends on the target processor.
12571
12572 @item -march=@var{name}
12573 @opindex march
12574 Specify the name of the target architecture and, optionally, one or
12575 more feature modifiers.  This option has the form
12576 @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}.
12577
12578 The permissible values for @var{arch} are @samp{armv8-a},
12579 @samp{armv8.1-a} or @var{native}.
12580
12581 The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler
12582 support for the ARMv8.1 architecture extension.  In particular, it
12583 enables the @samp{+crc} and @samp{+lse} features.
12584
12585 The value @samp{native} is available on native AArch64 GNU/Linux and
12586 causes the compiler to pick the architecture of the host system.  This
12587 option has no effect if the compiler is unable to recognize the
12588 architecture of the host system,
12589
12590 The permissible values for @var{feature} are listed in the sub-section
12591 on @ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
12592 Feature Modifiers}.  Where conflicting feature modifiers are
12593 specified, the right-most feature is used.
12594
12595 GCC uses @var{name} to determine what kind of instructions it can emit
12596 when generating assembly code.  If @option{-march} is specified
12597 without either of @option{-mtune} or @option{-mcpu} also being
12598 specified, the code is tuned to perform well across a range of target
12599 processors implementing the target architecture.
12600
12601 @item -mtune=@var{name}
12602 @opindex mtune
12603 Specify the name of the target processor for which GCC should tune the
12604 performance of the code.  Permissible values for this option are:
12605 @samp{generic}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57},
12606 @samp{cortex-a72}, @samp{exynos-m1}, @samp{qdf24xx}, @samp{thunderx},
12607 @samp{xgene1}.
12608
12609 Additionally, this option can specify that GCC should tune the performance
12610 of the code for a big.LITTLE system.  Permissible values for this
12611 option are: @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53}.
12612
12613 Additionally on native AArch64 GNU/Linux systems the value
12614 @samp{native} is available.  This option causes the compiler to pick
12615 the architecture of and tune the performance of the code for the
12616 processor of the host system.  This option has no effect if the
12617 compiler is unable to recognize the architecture of the host system.
12618
12619 Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
12620 are specified, the code is tuned to perform well across a range
12621 of target processors.
12622
12623 This option cannot be suffixed by feature modifiers.
12624
12625 @item -mcpu=@var{name}
12626 @opindex mcpu
12627 Specify the name of the target processor, optionally suffixed by one
12628 or more feature modifiers.  This option has the form
12629 @option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where
12630 the permissible values for @var{cpu} are the same as those available
12631 for @option{-mtune}.  The permissible values for @var{feature} are
12632 documented in the sub-section on
12633 @ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
12634 Feature Modifiers}.  Where conflicting feature modifiers are
12635 specified, the right-most feature is used.
12636
12637 Additionally on native AArch64 GNU/Linux systems the value
12638 @samp{native} is available.  This option causes the compiler to tune
12639 the performance of the code for the processor of the host system.
12640 This option has no effect if the compiler is unable to recognize the
12641 architecture of the host system.
12642
12643 GCC uses @var{name} to determine what kind of instructions it can emit when
12644 generating assembly code (as if by @option{-march}) and to determine
12645 the target processor for which to tune for performance (as if
12646 by @option{-mtune}).  Where this option is used in conjunction
12647 with @option{-march} or @option{-mtune}, those options take precedence
12648 over the appropriate part of this option.
12649
12650 @item -moverride=@var{string}
12651 @opindex moverride
12652 Override tuning decisions made by the back-end in response to a
12653 @option{-mtune=} switch.  The syntax, semantics, and accepted values
12654 for @var{string} in this option are not guaranteed to be consistent
12655 across releases.
12656
12657 This option is only intended to be useful when developing GCC.
12658
12659 @item -mpc-relative-literal-loads
12660 @opindex mpcrelativeliteralloads
12661 Enable PC relative literal loads. If this option is used, literal
12662 pools are assumed to have a range of up to 1MiB and an appropriate
12663 instruction sequence is used. This option has no impact when used
12664 with @option{-mcmodel=tiny}.
12665
12666 @end table
12667
12668 @subsubsection @option{-march} and @option{-mcpu} Feature Modifiers
12669 @anchor{aarch64-feature-modifiers}
12670 @cindex @option{-march} feature modifiers
12671 @cindex @option{-mcpu} feature modifiers
12672 Feature modifiers used with @option{-march} and @option{-mcpu} can be any of
12673 the following and their inverses @option{no@var{feature}}:
12674
12675 @table @samp
12676 @item crc
12677 Enable CRC extension.  This is on by default for
12678 @option{-march=armv8.1-a}.
12679 @item crypto
12680 Enable Crypto extension.  This also enables Advanced SIMD and floating-point
12681 instructions.
12682 @item fp
12683 Enable floating-point instructions.  This is on by default for all possible
12684 values for options @option{-march} and @option{-mcpu}.
12685 @item simd
12686 Enable Advanced SIMD instructions.  This also enables floating-point
12687 instructions.  This is on by default for all possible values for options
12688 @option{-march} and @option{-mcpu}.
12689 @item lse
12690 Enable Large System Extension instructions.  This is on by default for
12691 @option{-march=armv8.1-a}.
12692
12693 @end table
12694
12695 That is, @option{crypto} implies @option{simd} implies @option{fp}.
12696 Conversely, @option{nofp} (or equivalently, @option{-mgeneral-regs-only})
12697 implies @option{nosimd} implies @option{nocrypto}.
12698
12699 @node Adapteva Epiphany Options
12700 @subsection Adapteva Epiphany Options
12701
12702 These @samp{-m} options are defined for Adapteva Epiphany:
12703
12704 @table @gcctabopt
12705 @item -mhalf-reg-file
12706 @opindex mhalf-reg-file
12707 Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
12708 That allows code to run on hardware variants that lack these registers.
12709
12710 @item -mprefer-short-insn-regs
12711 @opindex mprefer-short-insn-regs
12712 Preferrentially allocate registers that allow short instruction generation.
12713 This can result in increased instruction count, so this may either reduce or
12714 increase overall code size.
12715
12716 @item -mbranch-cost=@var{num}
12717 @opindex mbranch-cost
12718 Set the cost of branches to roughly @var{num} ``simple'' instructions.
12719 This cost is only a heuristic and is not guaranteed to produce
12720 consistent results across releases.
12721
12722 @item -mcmove
12723 @opindex mcmove
12724 Enable the generation of conditional moves.
12725
12726 @item -mnops=@var{num}
12727 @opindex mnops
12728 Emit @var{num} NOPs before every other generated instruction.
12729
12730 @item -mno-soft-cmpsf
12731 @opindex mno-soft-cmpsf
12732 For single-precision floating-point comparisons, emit an @code{fsub} instruction
12733 and test the flags.  This is faster than a software comparison, but can
12734 get incorrect results in the presence of NaNs, or when two different small
12735 numbers are compared such that their difference is calculated as zero.
12736 The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
12737 software comparisons.
12738
12739 @item -mstack-offset=@var{num}
12740 @opindex mstack-offset
12741 Set the offset between the top of the stack and the stack pointer.
12742 E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
12743 can be used by leaf functions without stack allocation.
12744 Values other than @samp{8} or @samp{16} are untested and unlikely to work.
12745 Note also that this option changes the ABI; compiling a program with a
12746 different stack offset than the libraries have been compiled with
12747 generally does not work.
12748 This option can be useful if you want to evaluate if a different stack
12749 offset would give you better code, but to actually use a different stack
12750 offset to build working programs, it is recommended to configure the
12751 toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.
12752
12753 @item -mno-round-nearest
12754 @opindex mno-round-nearest
12755 Make the scheduler assume that the rounding mode has been set to
12756 truncating.  The default is @option{-mround-nearest}.
12757
12758 @item -mlong-calls
12759 @opindex mlong-calls
12760 If not otherwise specified by an attribute, assume all calls might be beyond
12761 the offset range of the @code{b} / @code{bl} instructions, and therefore load the
12762 function address into a register before performing a (otherwise direct) call.
12763 This is the default.
12764
12765 @item -mshort-calls
12766 @opindex short-calls
12767 If not otherwise specified by an attribute, assume all direct calls are
12768 in the range of the @code{b} / @code{bl} instructions, so use these instructions
12769 for direct calls.  The default is @option{-mlong-calls}.
12770
12771 @item -msmall16
12772 @opindex msmall16
12773 Assume addresses can be loaded as 16-bit unsigned values.  This does not
12774 apply to function addresses for which @option{-mlong-calls} semantics
12775 are in effect.
12776
12777 @item -mfp-mode=@var{mode}
12778 @opindex mfp-mode
12779 Set the prevailing mode of the floating-point unit.
12780 This determines the floating-point mode that is provided and expected
12781 at function call and return time.  Making this mode match the mode you
12782 predominantly need at function start can make your programs smaller and
12783 faster by avoiding unnecessary mode switches.
12784
12785 @var{mode} can be set to one the following values:
12786
12787 @table @samp
12788 @item caller
12789 Any mode at function entry is valid, and retained or restored when
12790 the function returns, and when it calls other functions.
12791 This mode is useful for compiling libraries or other compilation units
12792 you might want to incorporate into different programs with different
12793 prevailing FPU modes, and the convenience of being able to use a single
12794 object file outweighs the size and speed overhead for any extra
12795 mode switching that might be needed, compared with what would be needed
12796 with a more specific choice of prevailing FPU mode.
12797
12798 @item truncate
12799 This is the mode used for floating-point calculations with
12800 truncating (i.e.@: round towards zero) rounding mode.  That includes
12801 conversion from floating point to integer.
12802
12803 @item round-nearest
12804 This is the mode used for floating-point calculations with
12805 round-to-nearest-or-even rounding mode.
12806
12807 @item int
12808 This is the mode used to perform integer calculations in the FPU, e.g.@:
12809 integer multiply, or integer multiply-and-accumulate.
12810 @end table
12811
12812 The default is @option{-mfp-mode=caller}
12813
12814 @item -mnosplit-lohi
12815 @itemx -mno-postinc
12816 @itemx -mno-postmodify
12817 @opindex mnosplit-lohi
12818 @opindex mno-postinc
12819 @opindex mno-postmodify
12820 Code generation tweaks that disable, respectively, splitting of 32-bit
12821 loads, generation of post-increment addresses, and generation of
12822 post-modify addresses.  The defaults are @option{msplit-lohi},
12823 @option{-mpost-inc}, and @option{-mpost-modify}.
12824
12825 @item -mnovect-double
12826 @opindex mno-vect-double
12827 Change the preferred SIMD mode to SImode.  The default is
12828 @option{-mvect-double}, which uses DImode as preferred SIMD mode.
12829
12830 @item -max-vect-align=@var{num}
12831 @opindex max-vect-align
12832 The maximum alignment for SIMD vector mode types.
12833 @var{num} may be 4 or 8.  The default is 8.
12834 Note that this is an ABI change, even though many library function
12835 interfaces are unaffected if they don't use SIMD vector modes
12836 in places that affect size and/or alignment of relevant types.
12837
12838 @item -msplit-vecmove-early
12839 @opindex msplit-vecmove-early
12840 Split vector moves into single word moves before reload.  In theory this
12841 can give better register allocation, but so far the reverse seems to be
12842 generally the case.
12843
12844 @item -m1reg-@var{reg}
12845 @opindex m1reg-
12846 Specify a register to hold the constant @minus{}1, which makes loading small negative
12847 constants and certain bitmasks faster.
12848 Allowable values for @var{reg} are @samp{r43} and @samp{r63},
12849 which specify use of that register as a fixed register,
12850 and @samp{none}, which means that no register is used for this
12851 purpose.  The default is @option{-m1reg-none}.
12852
12853 @end table
12854
12855 @node ARC Options
12856 @subsection ARC Options
12857 @cindex ARC options
12858
12859 The following options control the architecture variant for which code
12860 is being compiled:
12861
12862 @c architecture variants
12863 @table @gcctabopt
12864
12865 @item -mbarrel-shifter
12866 @opindex mbarrel-shifter
12867 Generate instructions supported by barrel shifter.  This is the default
12868 unless @option{-mcpu=ARC601} or @samp{-mcpu=ARCEM} is in effect.
12869
12870 @item -mcpu=@var{cpu}
12871 @opindex mcpu
12872 Set architecture type, register usage, and instruction scheduling
12873 parameters for @var{cpu}.  There are also shortcut alias options
12874 available for backward compatibility and convenience.  Supported
12875 values for @var{cpu} are
12876
12877 @table @samp
12878 @opindex mA6
12879 @opindex mARC600
12880 @item ARC600
12881 @item arc600
12882 Compile for ARC600.  Aliases: @option{-mA6}, @option{-mARC600}.
12883
12884 @item ARC601
12885 @item arc601
12886 @opindex mARC601
12887 Compile for ARC601.  Alias: @option{-mARC601}.
12888
12889 @item ARC700
12890 @item arc700
12891 @opindex mA7
12892 @opindex mARC700
12893 Compile for ARC700.  Aliases: @option{-mA7}, @option{-mARC700}.
12894 This is the default when configured with @option{--with-cpu=arc700}@.
12895
12896 @item ARCEM
12897 @item arcem
12898 Compile for ARC EM.
12899
12900 @item ARCHS
12901 @item archs
12902 Compile for ARC HS.
12903 @end table
12904
12905 @item -mdpfp
12906 @opindex mdpfp
12907 @itemx -mdpfp-compact
12908 @opindex mdpfp-compact
12909 FPX: Generate Double Precision FPX instructions, tuned for the compact
12910 implementation.
12911
12912 @item -mdpfp-fast
12913 @opindex mdpfp-fast
12914 FPX: Generate Double Precision FPX instructions, tuned for the fast
12915 implementation.
12916
12917 @item -mno-dpfp-lrsr
12918 @opindex mno-dpfp-lrsr
12919 Disable LR and SR instructions from using FPX extension aux registers.
12920
12921 @item -mea
12922 @opindex mea
12923 Generate Extended arithmetic instructions.  Currently only
12924 @code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
12925 supported.  This is always enabled for @option{-mcpu=ARC700}.
12926
12927 @item -mno-mpy
12928 @opindex mno-mpy
12929 Do not generate mpy instructions for ARC700.
12930
12931 @item -mmul32x16
12932 @opindex mmul32x16
12933 Generate 32x16 bit multiply and mac instructions.
12934
12935 @item -mmul64
12936 @opindex mmul64
12937 Generate mul64 and mulu64 instructions.  Only valid for @option{-mcpu=ARC600}.
12938
12939 @item -mnorm
12940 @opindex mnorm
12941 Generate norm instruction.  This is the default if @option{-mcpu=ARC700}
12942 is in effect.
12943
12944 @item -mspfp
12945 @opindex mspfp
12946 @itemx -mspfp-compact
12947 @opindex mspfp-compact
12948 FPX: Generate Single Precision FPX instructions, tuned for the compact
12949 implementation.
12950
12951 @item -mspfp-fast
12952 @opindex mspfp-fast
12953 FPX: Generate Single Precision FPX instructions, tuned for the fast
12954 implementation.
12955
12956 @item -msimd
12957 @opindex msimd
12958 Enable generation of ARC SIMD instructions via target-specific
12959 builtins.  Only valid for @option{-mcpu=ARC700}.
12960
12961 @item -msoft-float
12962 @opindex msoft-float
12963 This option ignored; it is provided for compatibility purposes only.
12964 Software floating point code is emitted by default, and this default
12965 can overridden by FPX options; @samp{mspfp}, @samp{mspfp-compact}, or
12966 @samp{mspfp-fast} for single precision, and @samp{mdpfp},
12967 @samp{mdpfp-compact}, or @samp{mdpfp-fast} for double precision.
12968
12969 @item -mswap
12970 @opindex mswap
12971 Generate swap instructions.
12972
12973 @item -matomic
12974 @opindex matomic
12975 This enables Locked Load/Store Conditional extension to implement
12976 atomic memopry built-in functions.  Not available for ARC 6xx or ARC
12977 EM cores.
12978
12979 @item -mdiv-rem
12980 @opindex mdiv-rem
12981 Enable DIV/REM instructions for ARCv2 cores.
12982
12983 @item -mcode-density
12984 @opindex mcode-density
12985 Enable code density instructions for ARC EM, default on for ARC HS.
12986
12987 @item -mmpy-option=@var{multo}
12988 @opindex mmpy-option
12989 Compile ARCv2 code with a multiplier design option.  @samp{wlh1} is
12990 the default value.  The recognized values for @var{multo} are:
12991
12992 @table @samp
12993 @item 0
12994 No multiplier available.
12995
12996 @item 1
12997 @opindex w
12998 The multiply option is set to w: 16x16 multiplier, fully pipelined.
12999 The following instructions are enabled: MPYW, and MPYUW.
13000
13001 @item 2
13002 @opindex wlh1
13003 The multiply option is set to wlh1: 32x32 multiplier, fully
13004 pipelined (1 stage).  The following instructions are additionaly
13005 enabled: MPY, MPYU, MPYM, MPYMU, and MPY_S.
13006
13007 @item 3
13008 @opindex wlh2
13009 The multiply option is set to wlh2: 32x32 multiplier, fully pipelined
13010 (2 stages).  The following instructions are additionaly enabled: MPY,
13011 MPYU, MPYM, MPYMU, and MPY_S.
13012
13013 @item 4
13014 @opindex wlh3
13015 The multiply option is set to wlh3: Two 16x16 multiplier, blocking,
13016 sequential.  The following instructions are additionaly enabled: MPY,
13017 MPYU, MPYM, MPYMU, and MPY_S.
13018
13019 @item 5
13020 @opindex wlh4
13021 The multiply option is set to wlh4: One 16x16 multiplier, blocking,
13022 sequential.  The following instructions are additionaly enabled: MPY,
13023 MPYU, MPYM, MPYMU, and MPY_S.
13024
13025 @item 6
13026 @opindex wlh5
13027 The multiply option is set to wlh5: One 32x4 multiplier, blocking,
13028 sequential.  The following instructions are additionaly enabled: MPY,
13029 MPYU, MPYM, MPYMU, and MPY_S.
13030
13031 @end table
13032
13033 This option is only available for ARCv2 cores@.
13034
13035 @end table
13036
13037 The following options are passed through to the assembler, and also
13038 define preprocessor macro symbols.
13039
13040 @c Flags used by the assembler, but for which we define preprocessor
13041 @c macro symbols as well.
13042 @table @gcctabopt
13043 @item -mdsp-packa
13044 @opindex mdsp-packa
13045 Passed down to the assembler to enable the DSP Pack A extensions.
13046 Also sets the preprocessor symbol @code{__Xdsp_packa}.
13047
13048 @item -mdvbf
13049 @opindex mdvbf
13050 Passed down to the assembler to enable the dual viterbi butterfly
13051 extension.  Also sets the preprocessor symbol @code{__Xdvbf}.
13052
13053 @c ARC700 4.10 extension instruction
13054 @item -mlock
13055 @opindex mlock
13056 Passed down to the assembler to enable the Locked Load/Store
13057 Conditional extension.  Also sets the preprocessor symbol
13058 @code{__Xlock}.
13059
13060 @item -mmac-d16
13061 @opindex mmac-d16
13062 Passed down to the assembler.  Also sets the preprocessor symbol
13063 @code{__Xxmac_d16}.
13064
13065 @item -mmac-24
13066 @opindex mmac-24
13067 Passed down to the assembler.  Also sets the preprocessor symbol
13068 @code{__Xxmac_24}.
13069
13070 @c ARC700 4.10 extension instruction
13071 @item -mrtsc
13072 @opindex mrtsc
13073 Passed down to the assembler to enable the 64-bit Time-Stamp Counter
13074 extension instruction.  Also sets the preprocessor symbol
13075 @code{__Xrtsc}.
13076
13077 @c ARC700 4.10 extension instruction
13078 @item -mswape
13079 @opindex mswape
13080 Passed down to the assembler to enable the swap byte ordering
13081 extension instruction.  Also sets the preprocessor symbol
13082 @code{__Xswape}.
13083
13084 @item -mtelephony
13085 @opindex mtelephony
13086 Passed down to the assembler to enable dual and single operand
13087 instructions for telephony.  Also sets the preprocessor symbol
13088 @code{__Xtelephony}.
13089
13090 @item -mxy
13091 @opindex mxy
13092 Passed down to the assembler to enable the XY Memory extension.  Also
13093 sets the preprocessor symbol @code{__Xxy}.
13094
13095 @end table
13096
13097 The following options control how the assembly code is annotated:
13098
13099 @c Assembly annotation options
13100 @table @gcctabopt
13101 @item -misize
13102 @opindex misize
13103 Annotate assembler instructions with estimated addresses.
13104
13105 @item -mannotate-align
13106 @opindex mannotate-align
13107 Explain what alignment considerations lead to the decision to make an
13108 instruction short or long.
13109
13110 @end table
13111
13112 The following options are passed through to the linker:
13113
13114 @c options passed through to the linker
13115 @table @gcctabopt
13116 @item -marclinux
13117 @opindex marclinux
13118 Passed through to the linker, to specify use of the @code{arclinux} emulation.
13119 This option is enabled by default in tool chains built for
13120 @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
13121 when profiling is not requested.
13122
13123 @item -marclinux_prof
13124 @opindex marclinux_prof
13125 Passed through to the linker, to specify use of the
13126 @code{arclinux_prof} emulation.  This option is enabled by default in
13127 tool chains built for @w{@code{arc-linux-uclibc}} and
13128 @w{@code{arceb-linux-uclibc}} targets when profiling is requested.
13129
13130 @end table
13131
13132 The following options control the semantics of generated code:
13133
13134 @c semantically relevant code generation options
13135 @table @gcctabopt
13136 @item -mepilogue-cfi
13137 @opindex mepilogue-cfi
13138 Enable generation of call frame information for epilogues.
13139
13140 @item -mno-epilogue-cfi
13141 @opindex mno-epilogue-cfi
13142 Disable generation of call frame information for epilogues.
13143
13144 @item -mlong-calls
13145 @opindex mlong-calls
13146 Generate call insns as register indirect calls, thus providing access
13147 to the full 32-bit address range.
13148
13149 @item -mmedium-calls
13150 @opindex mmedium-calls
13151 Don't use less than 25 bit addressing range for calls, which is the
13152 offset available for an unconditional branch-and-link
13153 instruction.  Conditional execution of function calls is suppressed, to
13154 allow use of the 25-bit range, rather than the 21-bit range with
13155 conditional branch-and-link.  This is the default for tool chains built
13156 for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets.
13157
13158 @item -mno-sdata
13159 @opindex mno-sdata
13160 Do not generate sdata references.  This is the default for tool chains
13161 built for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}}
13162 targets.
13163
13164 @item -mucb-mcount
13165 @opindex mucb-mcount
13166 Instrument with mcount calls as used in UCB code.  I.e. do the
13167 counting in the callee, not the caller.  By default ARC instrumentation
13168 counts in the caller.
13169
13170 @item -mvolatile-cache
13171 @opindex mvolatile-cache
13172 Use ordinarily cached memory accesses for volatile references.  This is the
13173 default.
13174
13175 @item -mno-volatile-cache
13176 @opindex mno-volatile-cache
13177 Enable cache bypass for volatile references.
13178
13179 @end table
13180
13181 The following options fine tune code generation:
13182 @c code generation tuning options
13183 @table @gcctabopt
13184 @item -malign-call
13185 @opindex malign-call
13186 Do alignment optimizations for call instructions.
13187
13188 @item -mauto-modify-reg
13189 @opindex mauto-modify-reg
13190 Enable the use of pre/post modify with register displacement.
13191
13192 @item -mbbit-peephole
13193 @opindex mbbit-peephole
13194 Enable bbit peephole2.
13195
13196 @item -mno-brcc
13197 @opindex mno-brcc
13198 This option disables a target-specific pass in @file{arc_reorg} to
13199 generate @code{BRcc} instructions.  It has no effect on @code{BRcc}
13200 generation driven by the combiner pass.
13201
13202 @item -mcase-vector-pcrel
13203 @opindex mcase-vector-pcrel
13204 Use pc-relative switch case tables - this enables case table shortening.
13205 This is the default for @option{-Os}.
13206
13207 @item -mcompact-casesi
13208 @opindex mcompact-casesi
13209 Enable compact casesi pattern.
13210 This is the default for @option{-Os}.
13211
13212 @item -mno-cond-exec
13213 @opindex mno-cond-exec
13214 Disable ARCompact specific pass to generate conditional execution instructions.
13215 Due to delay slot scheduling and interactions between operand numbers,
13216 literal sizes, instruction lengths, and the support for conditional execution,
13217 the target-independent pass to generate conditional execution is often lacking,
13218 so the ARC port has kept a special pass around that tries to find more
13219 conditional execution generating opportunities after register allocation,
13220 branch shortening, and delay slot scheduling have been done.  This pass
13221 generally, but not always, improves performance and code size, at the cost of
13222 extra compilation time, which is why there is an option to switch it off.
13223 If you have a problem with call instructions exceeding their allowable
13224 offset range because they are conditionalized, you should consider using
13225 @option{-mmedium-calls} instead.
13226
13227 @item -mearly-cbranchsi
13228 @opindex mearly-cbranchsi
13229 Enable pre-reload use of the cbranchsi pattern.
13230
13231 @item -mexpand-adddi
13232 @opindex mexpand-adddi
13233 Expand @code{adddi3} and @code{subdi3} at rtl generation time into
13234 @code{add.f}, @code{adc} etc.
13235
13236 @item -mindexed-loads
13237 @opindex mindexed-loads
13238 Enable the use of indexed loads.  This can be problematic because some
13239 optimizers then assume that indexed stores exist, which is not
13240 the case.
13241
13242 @item -mlra
13243 @opindex mlra
13244 Enable Local Register Allocation.  This is still experimental for ARC,
13245 so by default the compiler uses standard reload
13246 (i.e. @option{-mno-lra}).
13247
13248 @item -mlra-priority-none
13249 @opindex mlra-priority-none
13250 Don't indicate any priority for target registers.
13251
13252 @item -mlra-priority-compact
13253 @opindex mlra-priority-compact
13254 Indicate target register priority for r0..r3 / r12..r15.
13255
13256 @item -mlra-priority-noncompact
13257 @opindex mlra-priority-noncompact
13258 Reduce target regsiter priority for r0..r3 / r12..r15.
13259
13260 @item -mno-millicode
13261 @opindex mno-millicode
13262 When optimizing for size (using @option{-Os}), prologues and epilogues
13263 that have to save or restore a large number of registers are often
13264 shortened by using call to a special function in libgcc; this is
13265 referred to as a @emph{millicode} call.  As these calls can pose
13266 performance issues, and/or cause linking issues when linking in a
13267 nonstandard way, this option is provided to turn off millicode call
13268 generation.
13269
13270 @item -mmixed-code
13271 @opindex mmixed-code
13272 Tweak register allocation to help 16-bit instruction generation.
13273 This generally has the effect of decreasing the average instruction size
13274 while increasing the instruction count.
13275
13276 @item -mq-class
13277 @opindex mq-class
13278 Enable 'q' instruction alternatives.
13279 This is the default for @option{-Os}.
13280
13281 @item -mRcq
13282 @opindex mRcq
13283 Enable Rcq constraint handling - most short code generation depends on this.
13284 This is the default.
13285
13286 @item -mRcw
13287 @opindex mRcw
13288 Enable Rcw constraint handling - ccfsm condexec mostly depends on this.
13289 This is the default.
13290
13291 @item -msize-level=@var{level}
13292 @opindex msize-level
13293 Fine-tune size optimization with regards to instruction lengths and alignment.
13294 The recognized values for @var{level} are:
13295 @table @samp
13296 @item 0
13297 No size optimization.  This level is deprecated and treated like @samp{1}.
13298
13299 @item 1
13300 Short instructions are used opportunistically.
13301
13302 @item 2
13303 In addition, alignment of loops and of code after barriers are dropped.
13304
13305 @item 3
13306 In addition, optional data alignment is dropped, and the option @option{Os} is enabled.
13307
13308 @end table
13309
13310 This defaults to @samp{3} when @option{-Os} is in effect.  Otherwise,
13311 the behavior when this is not set is equivalent to level @samp{1}.
13312
13313 @item -mtune=@var{cpu}
13314 @opindex mtune
13315 Set instruction scheduling parameters for @var{cpu}, overriding any implied
13316 by @option{-mcpu=}.
13317
13318 Supported values for @var{cpu} are
13319
13320 @table @samp
13321 @item ARC600
13322 Tune for ARC600 cpu.
13323
13324 @item ARC601
13325 Tune for ARC601 cpu.
13326
13327 @item ARC700
13328 Tune for ARC700 cpu with standard multiplier block.
13329
13330 @item ARC700-xmac
13331 Tune for ARC700 cpu with XMAC block.
13332
13333 @item ARC725D
13334 Tune for ARC725D cpu.
13335
13336 @item ARC750D
13337 Tune for ARC750D cpu.
13338
13339 @end table
13340
13341 @item -mmultcost=@var{num}
13342 @opindex mmultcost
13343 Cost to assume for a multiply instruction, with @samp{4} being equal to a
13344 normal instruction.
13345
13346 @item -munalign-prob-threshold=@var{probability}
13347 @opindex munalign-prob-threshold
13348 Set probability threshold for unaligning branches.
13349 When tuning for @samp{ARC700} and optimizing for speed, branches without
13350 filled delay slot are preferably emitted unaligned and long, unless
13351 profiling indicates that the probability for the branch to be taken
13352 is below @var{probability}.  @xref{Cross-profiling}.
13353 The default is (REG_BR_PROB_BASE/2), i.e.@: 5000.
13354
13355 @end table
13356
13357 The following options are maintained for backward compatibility, but
13358 are now deprecated and will be removed in a future release:
13359
13360 @c Deprecated options
13361 @table @gcctabopt
13362
13363 @item -margonaut
13364 @opindex margonaut
13365 Obsolete FPX.
13366
13367 @item -mbig-endian
13368 @opindex mbig-endian
13369 @itemx -EB
13370 @opindex EB
13371 Compile code for big endian targets.  Use of these options is now
13372 deprecated.  Users wanting big-endian code, should use the
13373 @w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets when
13374 building the tool chain, for which big-endian is the default.
13375
13376 @item -mlittle-endian
13377 @opindex mlittle-endian
13378 @itemx -EL
13379 @opindex EL
13380 Compile code for little endian targets.  Use of these options is now
13381 deprecated.  Users wanting little-endian code should use the
13382 @w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets when
13383 building the tool chain, for which little-endian is the default.
13384
13385 @item -mbarrel_shifter
13386 @opindex mbarrel_shifter
13387 Replaced by @option{-mbarrel-shifter}.
13388
13389 @item -mdpfp_compact
13390 @opindex mdpfp_compact
13391 Replaced by @option{-mdpfp-compact}.
13392
13393 @item -mdpfp_fast
13394 @opindex mdpfp_fast
13395 Replaced by @option{-mdpfp-fast}.
13396
13397 @item -mdsp_packa
13398 @opindex mdsp_packa
13399 Replaced by @option{-mdsp-packa}.
13400
13401 @item -mEA
13402 @opindex mEA
13403 Replaced by @option{-mea}.
13404
13405 @item -mmac_24
13406 @opindex mmac_24
13407 Replaced by @option{-mmac-24}.
13408
13409 @item -mmac_d16
13410 @opindex mmac_d16
13411 Replaced by @option{-mmac-d16}.
13412
13413 @item -mspfp_compact
13414 @opindex mspfp_compact
13415 Replaced by @option{-mspfp-compact}.
13416
13417 @item -mspfp_fast
13418 @opindex mspfp_fast
13419 Replaced by @option{-mspfp-fast}.
13420
13421 @item -mtune=@var{cpu}
13422 @opindex mtune
13423 Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
13424 @samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
13425 @samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively
13426
13427 @item -multcost=@var{num}
13428 @opindex multcost
13429 Replaced by @option{-mmultcost}.
13430
13431 @end table
13432
13433 @node ARM Options
13434 @subsection ARM Options
13435 @cindex ARM options
13436
13437 These @samp{-m} options are defined for the ARM port:
13438
13439 @table @gcctabopt
13440 @item -mabi=@var{name}
13441 @opindex mabi
13442 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
13443 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
13444
13445 @item -mapcs-frame
13446 @opindex mapcs-frame
13447 Generate a stack frame that is compliant with the ARM Procedure Call
13448 Standard for all functions, even if this is not strictly necessary for
13449 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
13450 with this option causes the stack frames not to be generated for
13451 leaf functions.  The default is @option{-mno-apcs-frame}.
13452 This option is deprecated.
13453
13454 @item -mapcs
13455 @opindex mapcs
13456 This is a synonym for @option{-mapcs-frame} and is deprecated.
13457
13458 @ignore
13459 @c not currently implemented
13460 @item -mapcs-stack-check
13461 @opindex mapcs-stack-check
13462 Generate code to check the amount of stack space available upon entry to
13463 every function (that actually uses some stack space).  If there is
13464 insufficient space available then either the function
13465 @code{__rt_stkovf_split_small} or @code{__rt_stkovf_split_big} is
13466 called, depending upon the amount of stack space required.  The runtime
13467 system is required to provide these functions.  The default is
13468 @option{-mno-apcs-stack-check}, since this produces smaller code.
13469
13470 @c not currently implemented
13471 @item -mapcs-float
13472 @opindex mapcs-float
13473 Pass floating-point arguments using the floating-point registers.  This is
13474 one of the variants of the APCS@.  This option is recommended if the
13475 target hardware has a floating-point unit or if a lot of floating-point
13476 arithmetic is going to be performed by the code.  The default is
13477 @option{-mno-apcs-float}, since the size of integer-only code is 
13478 slightly increased if @option{-mapcs-float} is used.
13479
13480 @c not currently implemented
13481 @item -mapcs-reentrant
13482 @opindex mapcs-reentrant
13483 Generate reentrant, position-independent code.  The default is
13484 @option{-mno-apcs-reentrant}.
13485 @end ignore
13486
13487 @item -mthumb-interwork
13488 @opindex mthumb-interwork
13489 Generate code that supports calling between the ARM and Thumb
13490 instruction sets.  Without this option, on pre-v5 architectures, the
13491 two instruction sets cannot be reliably used inside one program.  The
13492 default is @option{-mno-thumb-interwork}, since slightly larger code
13493 is generated when @option{-mthumb-interwork} is specified.  In AAPCS
13494 configurations this option is meaningless.
13495
13496 @item -mno-sched-prolog
13497 @opindex mno-sched-prolog
13498 Prevent the reordering of instructions in the function prologue, or the
13499 merging of those instruction with the instructions in the function's
13500 body.  This means that all functions start with a recognizable set
13501 of instructions (or in fact one of a choice from a small set of
13502 different function prologues), and this information can be used to
13503 locate the start of functions inside an executable piece of code.  The
13504 default is @option{-msched-prolog}.
13505
13506 @item -mfloat-abi=@var{name}
13507 @opindex mfloat-abi
13508 Specifies which floating-point ABI to use.  Permissible values
13509 are: @samp{soft}, @samp{softfp} and @samp{hard}.
13510
13511 Specifying @samp{soft} causes GCC to generate output containing
13512 library calls for floating-point operations.
13513 @samp{softfp} allows the generation of code using hardware floating-point
13514 instructions, but still uses the soft-float calling conventions.
13515 @samp{hard} allows generation of floating-point instructions
13516 and uses FPU-specific calling conventions.
13517
13518 The default depends on the specific target configuration.  Note that
13519 the hard-float and soft-float ABIs are not link-compatible; you must
13520 compile your entire program with the same ABI, and link with a
13521 compatible set of libraries.
13522
13523 @item -mlittle-endian
13524 @opindex mlittle-endian
13525 Generate code for a processor running in little-endian mode.  This is
13526 the default for all standard configurations.
13527
13528 @item -mbig-endian
13529 @opindex mbig-endian
13530 Generate code for a processor running in big-endian mode; the default is
13531 to compile code for a little-endian processor.
13532
13533 @item -march=@var{name}
13534 @opindex march
13535 This specifies the name of the target ARM architecture.  GCC uses this
13536 name to determine what kind of instructions it can emit when generating
13537 assembly code.  This option can be used in conjunction with or instead
13538 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
13539 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
13540 @samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
13541 @samp{armv6}, @samp{armv6j},
13542 @samp{armv6t2}, @samp{armv6z}, @samp{armv6kz}, @samp{armv6-m},
13543 @samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m}, @samp{armv7e-m},
13544 @samp{armv7ve}, @samp{armv8-a}, @samp{armv8-a+crc},
13545 @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
13546
13547 @option{-march=armv7ve} is the armv7-a architecture with virtualization
13548 extensions.
13549
13550 @option{-march=armv8-a+crc} enables code generation for the ARMv8-A
13551 architecture together with the optional CRC32 extensions.
13552
13553 @option{-march=native} causes the compiler to auto-detect the architecture
13554 of the build computer.  At present, this feature is only supported on
13555 GNU/Linux, and not all architectures are recognized.  If the auto-detect
13556 is unsuccessful the option has no effect.
13557
13558 @item -mtune=@var{name}
13559 @opindex mtune
13560 This option specifies the name of the target ARM processor for
13561 which GCC should tune the performance of the code.
13562 For some ARM implementations better performance can be obtained by using
13563 this option.
13564 Permissible names are: @samp{arm2}, @samp{arm250},
13565 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
13566 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
13567 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
13568 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
13569 @samp{arm720},
13570 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
13571 @samp{arm710t}, @samp{arm720t}, @samp{arm740t},
13572 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
13573 @samp{strongarm1110},
13574 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
13575 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
13576 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
13577 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
13578 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
13579 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
13580 @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
13581 @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8},
13582 @samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17},
13583 @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57}, @samp{cortex-a72},
13584 @samp{cortex-r4},
13585 @samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-m7},
13586 @samp{cortex-m4},
13587 @samp{cortex-m3},
13588 @samp{cortex-m1},
13589 @samp{cortex-m0},
13590 @samp{cortex-m0plus},
13591 @samp{cortex-m1.small-multiply},
13592 @samp{cortex-m0.small-multiply},
13593 @samp{cortex-m0plus.small-multiply},
13594 @samp{exynos-m1},
13595 @samp{qdf24xx},
13596 @samp{marvell-pj4},
13597 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312},
13598 @samp{fa526}, @samp{fa626},
13599 @samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te},
13600 @samp{xgene1}.
13601
13602 Additionally, this option can specify that GCC should tune the performance
13603 of the code for a big.LITTLE system.  Permissible names are:
13604 @samp{cortex-a15.cortex-a7}, @samp{cortex-a17.cortex-a7},
13605 @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53}.
13606
13607 @option{-mtune=generic-@var{arch}} specifies that GCC should tune the
13608 performance for a blend of processors within architecture @var{arch}.
13609 The aim is to generate code that run well on the current most popular
13610 processors, balancing between optimizations that benefit some CPUs in the
13611 range, and avoiding performance pitfalls of other CPUs.  The effects of
13612 this option may change in future GCC versions as CPU models come and go.
13613
13614 @option{-mtune=native} causes the compiler to auto-detect the CPU
13615 of the build computer.  At present, this feature is only supported on
13616 GNU/Linux, and not all architectures are recognized.  If the auto-detect is
13617 unsuccessful the option has no effect.
13618
13619 @item -mcpu=@var{name}
13620 @opindex mcpu
13621 This specifies the name of the target ARM processor.  GCC uses this name
13622 to derive the name of the target ARM architecture (as if specified
13623 by @option{-march}) and the ARM processor type for which to tune for
13624 performance (as if specified by @option{-mtune}).  Where this option
13625 is used in conjunction with @option{-march} or @option{-mtune},
13626 those options take precedence over the appropriate part of this option.
13627
13628 Permissible names for this option are the same as those for
13629 @option{-mtune}.
13630
13631 @option{-mcpu=generic-@var{arch}} is also permissible, and is
13632 equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
13633 See @option{-mtune} for more information.
13634
13635 @option{-mcpu=native} causes the compiler to auto-detect the CPU
13636 of the build computer.  At present, this feature is only supported on
13637 GNU/Linux, and not all architectures are recognized.  If the auto-detect
13638 is unsuccessful the option has no effect.
13639
13640 @item -mfpu=@var{name}
13641 @opindex mfpu
13642 This specifies what floating-point hardware (or hardware emulation) is
13643 available on the target.  Permissible names are: @samp{vfp}, @samp{vfpv3},
13644 @samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
13645 @samp{vfpv3xd-fp16}, @samp{neon}, @samp{neon-fp16}, @samp{vfpv4},
13646 @samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
13647 @samp{fpv5-d16}, @samp{fpv5-sp-d16},
13648 @samp{fp-armv8}, @samp{neon-fp-armv8}, and @samp{crypto-neon-fp-armv8}.
13649
13650 If @option{-msoft-float} is specified this specifies the format of
13651 floating-point values.
13652
13653 If the selected floating-point hardware includes the NEON extension
13654 (e.g. @option{-mfpu}=@samp{neon}), note that floating-point
13655 operations are not generated by GCC's auto-vectorization pass unless
13656 @option{-funsafe-math-optimizations} is also specified.  This is
13657 because NEON hardware does not fully implement the IEEE 754 standard for
13658 floating-point arithmetic (in particular denormal values are treated as
13659 zero), so the use of NEON instructions may lead to a loss of precision.
13660
13661 You can also set the fpu name at function level by using the @code{target("fpu=")} function attributes (@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).
13662
13663 @item -mfp16-format=@var{name}
13664 @opindex mfp16-format
13665 Specify the format of the @code{__fp16} half-precision floating-point type.
13666 Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
13667 the default is @samp{none}, in which case the @code{__fp16} type is not
13668 defined.  @xref{Half-Precision}, for more information.
13669
13670 @item -mstructure-size-boundary=@var{n}
13671 @opindex mstructure-size-boundary
13672 The sizes of all structures and unions are rounded up to a multiple
13673 of the number of bits set by this option.  Permissible values are 8, 32
13674 and 64.  The default value varies for different toolchains.  For the COFF
13675 targeted toolchain the default value is 8.  A value of 64 is only allowed
13676 if the underlying ABI supports it.
13677
13678 Specifying a larger number can produce faster, more efficient code, but
13679 can also increase the size of the program.  Different values are potentially
13680 incompatible.  Code compiled with one value cannot necessarily expect to
13681 work with code or libraries compiled with another value, if they exchange
13682 information using structures or unions.
13683
13684 @item -mabort-on-noreturn
13685 @opindex mabort-on-noreturn
13686 Generate a call to the function @code{abort} at the end of a
13687 @code{noreturn} function.  It is executed if the function tries to
13688 return.
13689
13690 @item -mlong-calls
13691 @itemx -mno-long-calls
13692 @opindex mlong-calls
13693 @opindex mno-long-calls
13694 Tells the compiler to perform function calls by first loading the
13695 address of the function into a register and then performing a subroutine
13696 call on this register.  This switch is needed if the target function
13697 lies outside of the 64-megabyte addressing range of the offset-based
13698 version of subroutine call instruction.
13699
13700 Even if this switch is enabled, not all function calls are turned
13701 into long calls.  The heuristic is that static functions, functions
13702 that have the @code{short_call} attribute, functions that are inside
13703 the scope of a @code{#pragma no_long_calls} directive, and functions whose
13704 definitions have already been compiled within the current compilation
13705 unit are not turned into long calls.  The exceptions to this rule are
13706 that weak function definitions, functions with the @code{long_call}
13707 attribute or the @code{section} attribute, and functions that are within
13708 the scope of a @code{#pragma long_calls} directive are always
13709 turned into long calls.
13710
13711 This feature is not enabled by default.  Specifying
13712 @option{-mno-long-calls} restores the default behavior, as does
13713 placing the function calls within the scope of a @code{#pragma
13714 long_calls_off} directive.  Note these switches have no effect on how
13715 the compiler generates code to handle function calls via function
13716 pointers.
13717
13718 @item -msingle-pic-base
13719 @opindex msingle-pic-base
13720 Treat the register used for PIC addressing as read-only, rather than
13721 loading it in the prologue for each function.  The runtime system is
13722 responsible for initializing this register with an appropriate value
13723 before execution begins.
13724
13725 @item -mpic-register=@var{reg}
13726 @opindex mpic-register
13727 Specify the register to be used for PIC addressing.
13728 For standard PIC base case, the default is any suitable register
13729 determined by compiler.  For single PIC base case, the default is
13730 @samp{R9} if target is EABI based or stack-checking is enabled,
13731 otherwise the default is @samp{R10}.
13732
13733 @item -mpic-data-is-text-relative
13734 @opindex mpic-data-is-text-relative
13735 Assume that each data segments are relative to text segment at load time.
13736 Therefore, it permits addressing data using PC-relative operations.
13737 This option is on by default for targets other than VxWorks RTP.
13738
13739 @item -mpoke-function-name
13740 @opindex mpoke-function-name
13741 Write the name of each function into the text section, directly
13742 preceding the function prologue.  The generated code is similar to this:
13743
13744 @smallexample
13745      t0
13746          .ascii "arm_poke_function_name", 0
13747          .align
13748      t1
13749          .word 0xff000000 + (t1 - t0)
13750      arm_poke_function_name
13751          mov     ip, sp
13752          stmfd   sp!, @{fp, ip, lr, pc@}
13753          sub     fp, ip, #4
13754 @end smallexample
13755
13756 When performing a stack backtrace, code can inspect the value of
13757 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
13758 location @code{pc - 12} and the top 8 bits are set, then we know that
13759 there is a function name embedded immediately preceding this location
13760 and has length @code{((pc[-3]) & 0xff000000)}.
13761
13762 @item -mthumb
13763 @itemx -marm
13764 @opindex marm
13765 @opindex mthumb
13766
13767 Select between generating code that executes in ARM and Thumb
13768 states.  The default for most configurations is to generate code
13769 that executes in ARM state, but the default can be changed by
13770 configuring GCC with the @option{--with-mode=}@var{state}
13771 configure option.
13772
13773 You can also override the ARM and Thumb mode for each function
13774 by using the @code{target("thumb")} and @code{target("arm")} function attributes
13775 (@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).
13776
13777 @item -mtpcs-frame
13778 @opindex mtpcs-frame
13779 Generate a stack frame that is compliant with the Thumb Procedure Call
13780 Standard for all non-leaf functions.  (A leaf function is one that does
13781 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
13782
13783 @item -mtpcs-leaf-frame
13784 @opindex mtpcs-leaf-frame
13785 Generate a stack frame that is compliant with the Thumb Procedure Call
13786 Standard for all leaf functions.  (A leaf function is one that does
13787 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
13788
13789 @item -mcallee-super-interworking
13790 @opindex mcallee-super-interworking
13791 Gives all externally visible functions in the file being compiled an ARM
13792 instruction set header which switches to Thumb mode before executing the
13793 rest of the function.  This allows these functions to be called from
13794 non-interworking code.  This option is not valid in AAPCS configurations
13795 because interworking is enabled by default.
13796
13797 @item -mcaller-super-interworking
13798 @opindex mcaller-super-interworking
13799 Allows calls via function pointers (including virtual functions) to
13800 execute correctly regardless of whether the target code has been
13801 compiled for interworking or not.  There is a small overhead in the cost
13802 of executing a function pointer if this option is enabled.  This option
13803 is not valid in AAPCS configurations because interworking is enabled
13804 by default.
13805
13806 @item -mtp=@var{name}
13807 @opindex mtp
13808 Specify the access model for the thread local storage pointer.  The valid
13809 models are @samp{soft}, which generates calls to @code{__aeabi_read_tp},
13810 @samp{cp15}, which fetches the thread pointer from @code{cp15} directly
13811 (supported in the arm6k architecture), and @samp{auto}, which uses the
13812 best available method for the selected processor.  The default setting is
13813 @samp{auto}.
13814
13815 @item -mtls-dialect=@var{dialect}
13816 @opindex mtls-dialect
13817 Specify the dialect to use for accessing thread local storage.  Two
13818 @var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
13819 @samp{gnu} dialect selects the original GNU scheme for supporting
13820 local and global dynamic TLS models.  The @samp{gnu2} dialect
13821 selects the GNU descriptor scheme, which provides better performance
13822 for shared libraries.  The GNU descriptor scheme is compatible with
13823 the original scheme, but does require new assembler, linker and
13824 library support.  Initial and local exec TLS models are unaffected by
13825 this option and always use the original scheme.
13826
13827 @item -mword-relocations
13828 @opindex mword-relocations
13829 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
13830 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
13831 loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
13832 is specified.
13833
13834 @item -mfix-cortex-m3-ldrd
13835 @opindex mfix-cortex-m3-ldrd
13836 Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
13837 with overlapping destination and base registers are used.  This option avoids
13838 generating these instructions.  This option is enabled by default when
13839 @option{-mcpu=cortex-m3} is specified.
13840
13841 @item -munaligned-access
13842 @itemx -mno-unaligned-access
13843 @opindex munaligned-access
13844 @opindex mno-unaligned-access
13845 Enables (or disables) reading and writing of 16- and 32- bit values
13846 from addresses that are not 16- or 32- bit aligned.  By default
13847 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
13848 architectures, and enabled for all other architectures.  If unaligned
13849 access is not enabled then words in packed data structures are
13850 accessed a byte at a time.
13851
13852 The ARM attribute @code{Tag_CPU_unaligned_access} is set in the
13853 generated object file to either true or false, depending upon the
13854 setting of this option.  If unaligned access is enabled then the
13855 preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} is also
13856 defined.
13857
13858 @item -mneon-for-64bits
13859 @opindex mneon-for-64bits
13860 Enables using Neon to handle scalar 64-bits operations. This is
13861 disabled by default since the cost of moving data from core registers
13862 to Neon is high.
13863
13864 @item -mslow-flash-data
13865 @opindex mslow-flash-data
13866 Assume loading data from flash is slower than fetching instruction.
13867 Therefore literal load is minimized for better performance.
13868 This option is only supported when compiling for ARMv7 M-profile and
13869 off by default.
13870
13871 @item -masm-syntax-unified
13872 @opindex masm-syntax-unified
13873 Assume inline assembler is using unified asm syntax.  The default is
13874 currently off which implies divided syntax.  This option has no impact
13875 on Thumb2. However, this may change in future releases of GCC.
13876 Divided syntax should be considered deprecated.
13877
13878 @item -mrestrict-it
13879 @opindex mrestrict-it
13880 Restricts generation of IT blocks to conform to the rules of ARMv8.
13881 IT blocks can only contain a single 16-bit instruction from a select
13882 set of instructions. This option is on by default for ARMv8 Thumb mode.
13883
13884 @item -mprint-tune-info
13885 @opindex mprint-tune-info
13886 Print CPU tuning information as comment in assembler file.  This is
13887 an option used only for regression testing of the compiler and not
13888 intended for ordinary use in compiling code.  This option is disabled
13889 by default.
13890 @end table
13891
13892 @node AVR Options
13893 @subsection AVR Options
13894 @cindex AVR Options
13895
13896 These options are defined for AVR implementations:
13897
13898 @table @gcctabopt
13899 @item -mmcu=@var{mcu}
13900 @opindex mmcu
13901 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
13902
13903 The default for this option is@tie{}@samp{avr2}.
13904
13905 GCC supports the following AVR devices and ISAs:
13906
13907 @include avr-mmcu.texi
13908
13909 @item -maccumulate-args
13910 @opindex maccumulate-args
13911 Accumulate outgoing function arguments and acquire/release the needed
13912 stack space for outgoing function arguments once in function
13913 prologue/epilogue.  Without this option, outgoing arguments are pushed
13914 before calling a function and popped afterwards.
13915
13916 Popping the arguments after the function call can be expensive on
13917 AVR so that accumulating the stack space might lead to smaller
13918 executables because arguments need not to be removed from the
13919 stack after such a function call.
13920
13921 This option can lead to reduced code size for functions that perform
13922 several calls to functions that get their arguments on the stack like
13923 calls to printf-like functions.
13924
13925 @item -mbranch-cost=@var{cost}
13926 @opindex mbranch-cost
13927 Set the branch costs for conditional branch instructions to
13928 @var{cost}.  Reasonable values for @var{cost} are small, non-negative
13929 integers. The default branch cost is 0.
13930
13931 @item -mcall-prologues
13932 @opindex mcall-prologues
13933 Functions prologues/epilogues are expanded as calls to appropriate
13934 subroutines.  Code size is smaller.
13935
13936 @item -mint8
13937 @opindex mint8
13938 Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
13939 @code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
13940 and @code{long long} is 4 bytes.  Please note that this option does not
13941 conform to the C standards, but it results in smaller code
13942 size.
13943
13944 @item -mn-flash=@var{num}
13945 @opindex mn-flash
13946 Assume that the flash memory has a size of 
13947 @var{num} times 64@tie{}KiB.
13948
13949 @item -mno-interrupts
13950 @opindex mno-interrupts
13951 Generated code is not compatible with hardware interrupts.
13952 Code size is smaller.
13953
13954 @item -mrelax
13955 @opindex mrelax
13956 Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
13957 @code{RCALL} resp.@: @code{RJMP} instruction if applicable.
13958 Setting @option{-mrelax} just adds the @option{--mlink-relax} option to
13959 the assembler's command line and the @option{--relax} option to the
13960 linker's command line.
13961
13962 Jump relaxing is performed by the linker because jump offsets are not
13963 known before code is located. Therefore, the assembler code generated by the
13964 compiler is the same, but the instructions in the executable may
13965 differ from instructions in the assembler code.
13966
13967 Relaxing must be turned on if linker stubs are needed, see the
13968 section on @code{EIND} and linker stubs below.
13969
13970 @item -mrmw
13971 @opindex mrmw
13972 Assume that the device supports the Read-Modify-Write
13973 instructions @code{XCH}, @code{LAC}, @code{LAS} and @code{LAT}.
13974
13975 @item -msp8
13976 @opindex msp8
13977 Treat the stack pointer register as an 8-bit register,
13978 i.e.@: assume the high byte of the stack pointer is zero.
13979 In general, you don't need to set this option by hand.
13980
13981 This option is used internally by the compiler to select and
13982 build multilibs for architectures @code{avr2} and @code{avr25}.
13983 These architectures mix devices with and without @code{SPH}.
13984 For any setting other than @option{-mmcu=avr2} or @option{-mmcu=avr25}
13985 the compiler driver adds or removes this option from the compiler
13986 proper's command line, because the compiler then knows if the device
13987 or architecture has an 8-bit stack pointer and thus no @code{SPH}
13988 register or not.
13989
13990 @item -mstrict-X
13991 @opindex mstrict-X
13992 Use address register @code{X} in a way proposed by the hardware.  This means
13993 that @code{X} is only used in indirect, post-increment or
13994 pre-decrement addressing.
13995
13996 Without this option, the @code{X} register may be used in the same way
13997 as @code{Y} or @code{Z} which then is emulated by additional
13998 instructions.  
13999 For example, loading a value with @code{X+const} addressing with a
14000 small non-negative @code{const < 64} to a register @var{Rn} is
14001 performed as
14002
14003 @example
14004 adiw r26, const   ; X += const
14005 ld   @var{Rn}, X        ; @var{Rn} = *X
14006 sbiw r26, const   ; X -= const
14007 @end example
14008
14009 @item -mtiny-stack
14010 @opindex mtiny-stack
14011 Only change the lower 8@tie{}bits of the stack pointer.
14012
14013 @item -nodevicelib
14014 @opindex nodevicelib
14015 Don't link against AVR-LibC's device specific library @code{libdev.a}.
14016
14017 @item -Waddr-space-convert
14018 @opindex Waddr-space-convert
14019 Warn about conversions between address spaces in the case where the
14020 resulting address space is not contained in the incoming address space.
14021 @end table
14022
14023 @subsubsection @code{EIND} and Devices with More Than 128 Ki Bytes of Flash
14024 @cindex @code{EIND}
14025 Pointers in the implementation are 16@tie{}bits wide.
14026 The address of a function or label is represented as word address so
14027 that indirect jumps and calls can target any code address in the
14028 range of 64@tie{}Ki words.
14029
14030 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
14031 bytes of program memory space, there is a special function register called
14032 @code{EIND} that serves as most significant part of the target address
14033 when @code{EICALL} or @code{EIJMP} instructions are used.
14034
14035 Indirect jumps and calls on these devices are handled as follows by
14036 the compiler and are subject to some limitations:
14037
14038 @itemize @bullet
14039
14040 @item
14041 The compiler never sets @code{EIND}.
14042
14043 @item
14044 The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP}
14045 instructions or might read @code{EIND} directly in order to emulate an
14046 indirect call/jump by means of a @code{RET} instruction.
14047
14048 @item
14049 The compiler assumes that @code{EIND} never changes during the startup
14050 code or during the application. In particular, @code{EIND} is not
14051 saved/restored in function or interrupt service routine
14052 prologue/epilogue.
14053
14054 @item
14055 For indirect calls to functions and computed goto, the linker
14056 generates @emph{stubs}. Stubs are jump pads sometimes also called
14057 @emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
14058 The stub contains a direct jump to the desired address.
14059
14060 @item
14061 Linker relaxation must be turned on so that the linker generates
14062 the stubs correctly in all situations. See the compiler option
14063 @option{-mrelax} and the linker option @option{--relax}.
14064 There are corner cases where the linker is supposed to generate stubs
14065 but aborts without relaxation and without a helpful error message.
14066
14067 @item
14068 The default linker script is arranged for code with @code{EIND = 0}.
14069 If code is supposed to work for a setup with @code{EIND != 0}, a custom
14070 linker script has to be used in order to place the sections whose
14071 name start with @code{.trampolines} into the segment where @code{EIND}
14072 points to.
14073
14074 @item
14075 The startup code from libgcc never sets @code{EIND}.
14076 Notice that startup code is a blend of code from libgcc and AVR-LibC.
14077 For the impact of AVR-LibC on @code{EIND}, see the
14078 @w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}.
14079
14080 @item
14081 It is legitimate for user-specific startup code to set up @code{EIND}
14082 early, for example by means of initialization code located in
14083 section @code{.init3}. Such code runs prior to general startup code
14084 that initializes RAM and calls constructors, but after the bit
14085 of startup code from AVR-LibC that sets @code{EIND} to the segment
14086 where the vector table is located.
14087 @example
14088 #include <avr/io.h>
14089
14090 static void
14091 __attribute__((section(".init3"),naked,used,no_instrument_function))
14092 init3_set_eind (void)
14093 @{
14094   __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
14095                   "out %i0,r24" :: "n" (&EIND) : "r24","memory");
14096 @}
14097 @end example
14098
14099 @noindent
14100 The @code{__trampolines_start} symbol is defined in the linker script.
14101
14102 @item
14103 Stubs are generated automatically by the linker if
14104 the following two conditions are met:
14105 @itemize @minus
14106
14107 @item The address of a label is taken by means of the @code{gs} modifier
14108 (short for @emph{generate stubs}) like so:
14109 @example
14110 LDI r24, lo8(gs(@var{func}))
14111 LDI r25, hi8(gs(@var{func}))
14112 @end example
14113 @item The final location of that label is in a code segment
14114 @emph{outside} the segment where the stubs are located.
14115 @end itemize
14116
14117 @item
14118 The compiler emits such @code{gs} modifiers for code labels in the
14119 following situations:
14120 @itemize @minus
14121 @item Taking address of a function or code label.
14122 @item Computed goto.
14123 @item If prologue-save function is used, see @option{-mcall-prologues}
14124 command-line option.
14125 @item Switch/case dispatch tables. If you do not want such dispatch
14126 tables you can specify the @option{-fno-jump-tables} command-line option.
14127 @item C and C++ constructors/destructors called during startup/shutdown.
14128 @item If the tools hit a @code{gs()} modifier explained above.
14129 @end itemize
14130
14131 @item
14132 Jumping to non-symbolic addresses like so is @emph{not} supported:
14133
14134 @example
14135 int main (void)
14136 @{
14137     /* Call function at word address 0x2 */
14138     return ((int(*)(void)) 0x2)();
14139 @}
14140 @end example
14141
14142 Instead, a stub has to be set up, i.e.@: the function has to be called
14143 through a symbol (@code{func_4} in the example):
14144
14145 @example
14146 int main (void)
14147 @{
14148     extern int func_4 (void);
14149
14150     /* Call function at byte address 0x4 */
14151     return func_4();
14152 @}
14153 @end example
14154
14155 and the application be linked with @option{-Wl,--defsym,func_4=0x4}.
14156 Alternatively, @code{func_4} can be defined in the linker script.
14157 @end itemize
14158
14159 @subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
14160 @cindex @code{RAMPD}
14161 @cindex @code{RAMPX}
14162 @cindex @code{RAMPY}
14163 @cindex @code{RAMPZ}
14164 Some AVR devices support memories larger than the 64@tie{}KiB range
14165 that can be accessed with 16-bit pointers.  To access memory locations
14166 outside this 64@tie{}KiB range, the contentent of a @code{RAMP}
14167 register is used as high part of the address:
14168 The @code{X}, @code{Y}, @code{Z} address register is concatenated
14169 with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
14170 register, respectively, to get a wide address. Similarly,
14171 @code{RAMPD} is used together with direct addressing.
14172
14173 @itemize
14174 @item
14175 The startup code initializes the @code{RAMP} special function
14176 registers with zero.
14177
14178 @item
14179 If a @ref{AVR Named Address Spaces,named address space} other than
14180 generic or @code{__flash} is used, then @code{RAMPZ} is set
14181 as needed before the operation.
14182
14183 @item
14184 If the device supports RAM larger than 64@tie{}KiB and the compiler
14185 needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
14186 is reset to zero after the operation.
14187
14188 @item
14189 If the device comes with a specific @code{RAMP} register, the ISR
14190 prologue/epilogue saves/restores that SFR and initializes it with
14191 zero in case the ISR code might (implicitly) use it.
14192
14193 @item
14194 RAM larger than 64@tie{}KiB is not supported by GCC for AVR targets.
14195 If you use inline assembler to read from locations outside the
14196 16-bit address range and change one of the @code{RAMP} registers,
14197 you must reset it to zero after the access.
14198
14199 @end itemize
14200
14201 @subsubsection AVR Built-in Macros
14202
14203 GCC defines several built-in macros so that the user code can test
14204 for the presence or absence of features.  Almost any of the following
14205 built-in macros are deduced from device capabilities and thus
14206 triggered by the @option{-mmcu=} command-line option.
14207
14208 For even more AVR-specific built-in macros see
14209 @ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.
14210
14211 @table @code
14212
14213 @item __AVR_ARCH__
14214 Build-in macro that resolves to a decimal number that identifies the
14215 architecture and depends on the @option{-mmcu=@var{mcu}} option.
14216 Possible values are:
14217
14218 @code{2}, @code{25}, @code{3}, @code{31}, @code{35},
14219 @code{4}, @code{5}, @code{51}, @code{6}
14220
14221 for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3}, @code{avr31},
14222 @code{avr35}, @code{avr4}, @code{avr5}, @code{avr51}, @code{avr6},
14223
14224 respectively and
14225
14226 @code{100}, @code{102}, @code{104},
14227 @code{105}, @code{106}, @code{107}
14228
14229 for @var{mcu}=@code{avrtiny}, @code{avrxmega2}, @code{avrxmega4},
14230 @code{avrxmega5}, @code{avrxmega6}, @code{avrxmega7}, respectively.
14231 If @var{mcu} specifies a device, this built-in macro is set
14232 accordingly. For example, with @option{-mmcu=atmega8} the macro is
14233 defined to @code{4}.
14234
14235 @item __AVR_@var{Device}__
14236 Setting @option{-mmcu=@var{device}} defines this built-in macro which reflects
14237 the device's name. For example, @option{-mmcu=atmega8} defines the
14238 built-in macro @code{__AVR_ATmega8__}, @option{-mmcu=attiny261a} defines
14239 @code{__AVR_ATtiny261A__}, etc.
14240
14241 The built-in macros' names follow
14242 the scheme @code{__AVR_@var{Device}__} where @var{Device} is
14243 the device name as from the AVR user manual. The difference between
14244 @var{Device} in the built-in macro and @var{device} in
14245 @option{-mmcu=@var{device}} is that the latter is always lowercase.
14246
14247 If @var{device} is not a device but only a core architecture like
14248 @samp{avr51}, this macro is not defined.
14249
14250 @item __AVR_DEVICE_NAME__
14251 Setting @option{-mmcu=@var{device}} defines this built-in macro to
14252 the device's name. For example, with @option{-mmcu=atmega8} the macro
14253 is defined to @code{atmega8}.
14254
14255 If @var{device} is not a device but only a core architecture like
14256 @samp{avr51}, this macro is not defined.
14257
14258 @item __AVR_XMEGA__
14259 The device / architecture belongs to the XMEGA family of devices.
14260
14261 @item __AVR_HAVE_ELPM__
14262 The device has the @code{ELPM} instruction.
14263
14264 @item __AVR_HAVE_ELPMX__
14265 The device has the @code{ELPM R@var{n},Z} and @code{ELPM
14266 R@var{n},Z+} instructions.
14267
14268 @item __AVR_HAVE_MOVW__
14269 The device has the @code{MOVW} instruction to perform 16-bit
14270 register-register moves.
14271
14272 @item __AVR_HAVE_LPMX__
14273 The device has the @code{LPM R@var{n},Z} and
14274 @code{LPM R@var{n},Z+} instructions.
14275
14276 @item __AVR_HAVE_MUL__
14277 The device has a hardware multiplier. 
14278
14279 @item __AVR_HAVE_JMP_CALL__
14280 The device has the @code{JMP} and @code{CALL} instructions.
14281 This is the case for devices with at least 16@tie{}KiB of program
14282 memory.
14283
14284 @item __AVR_HAVE_EIJMP_EICALL__
14285 @itemx __AVR_3_BYTE_PC__
14286 The device has the @code{EIJMP} and @code{EICALL} instructions.
14287 This is the case for devices with more than 128@tie{}KiB of program memory.
14288 This also means that the program counter
14289 (PC) is 3@tie{}bytes wide.
14290
14291 @item __AVR_2_BYTE_PC__
14292 The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
14293 with up to 128@tie{}KiB of program memory.
14294
14295 @item __AVR_HAVE_8BIT_SP__
14296 @itemx __AVR_HAVE_16BIT_SP__
14297 The stack pointer (SP) register is treated as 8-bit respectively
14298 16-bit register by the compiler.
14299 The definition of these macros is affected by @option{-mtiny-stack}.
14300
14301 @item __AVR_HAVE_SPH__
14302 @itemx __AVR_SP8__
14303 The device has the SPH (high part of stack pointer) special function
14304 register or has an 8-bit stack pointer, respectively.
14305 The definition of these macros is affected by @option{-mmcu=} and
14306 in the cases of @option{-mmcu=avr2} and @option{-mmcu=avr25} also
14307 by @option{-msp8}.
14308
14309 @item __AVR_HAVE_RAMPD__
14310 @itemx __AVR_HAVE_RAMPX__
14311 @itemx __AVR_HAVE_RAMPY__
14312 @itemx __AVR_HAVE_RAMPZ__
14313 The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
14314 @code{RAMPZ} special function register, respectively.
14315
14316 @item __NO_INTERRUPTS__
14317 This macro reflects the @option{-mno-interrupts} command-line option.
14318
14319 @item __AVR_ERRATA_SKIP__
14320 @itemx __AVR_ERRATA_SKIP_JMP_CALL__
14321 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
14322 instructions because of a hardware erratum.  Skip instructions are
14323 @code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
14324 The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
14325 set.
14326
14327 @item __AVR_ISA_RMW__
14328 The device has Read-Modify-Write instructions (XCH, LAC, LAS and LAT).
14329
14330 @item __AVR_SFR_OFFSET__=@var{offset}
14331 Instructions that can address I/O special function registers directly
14332 like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
14333 address as if addressed by an instruction to access RAM like @code{LD}
14334 or @code{STS}. This offset depends on the device architecture and has
14335 to be subtracted from the RAM address in order to get the
14336 respective I/O@tie{}address.
14337
14338 @item __WITH_AVRLIBC__
14339 The compiler is configured to be used together with AVR-Libc.
14340 See the @option{--with-avrlibc} configure option.
14341
14342 @end table
14343
14344 @node Blackfin Options
14345 @subsection Blackfin Options
14346 @cindex Blackfin Options
14347
14348 @table @gcctabopt
14349 @item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
14350 @opindex mcpu=
14351 Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
14352 can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
14353 @samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
14354 @samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
14355 @samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
14356 @samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
14357 @samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
14358 @samp{bf561}, @samp{bf592}.
14359
14360 The optional @var{sirevision} specifies the silicon revision of the target
14361 Blackfin processor.  Any workarounds available for the targeted silicon revision
14362 are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
14363 If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
14364 are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
14365 hexadecimal digits representing the major and minor numbers in the silicon
14366 revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
14367 is not defined.  If @var{sirevision} is @samp{any}, the
14368 @code{__SILICON_REVISION__} is defined to be @code{0xffff}.
14369 If this optional @var{sirevision} is not used, GCC assumes the latest known
14370 silicon revision of the targeted Blackfin processor.
14371
14372 GCC defines a preprocessor macro for the specified @var{cpu}.
14373 For the @samp{bfin-elf} toolchain, this option causes the hardware BSP
14374 provided by libgloss to be linked in if @option{-msim} is not given.
14375
14376 Without this option, @samp{bf532} is used as the processor by default.
14377
14378 Note that support for @samp{bf561} is incomplete.  For @samp{bf561},
14379 only the preprocessor macro is defined.
14380
14381 @item -msim
14382 @opindex msim
14383 Specifies that the program will be run on the simulator.  This causes
14384 the simulator BSP provided by libgloss to be linked in.  This option
14385 has effect only for @samp{bfin-elf} toolchain.
14386 Certain other options, such as @option{-mid-shared-library} and
14387 @option{-mfdpic}, imply @option{-msim}.
14388
14389 @item -momit-leaf-frame-pointer
14390 @opindex momit-leaf-frame-pointer
14391 Don't keep the frame pointer in a register for leaf functions.  This
14392 avoids the instructions to save, set up and restore frame pointers and
14393 makes an extra register available in leaf functions.  The option
14394 @option{-fomit-frame-pointer} removes the frame pointer for all functions,
14395 which might make debugging harder.
14396
14397 @item -mspecld-anomaly
14398 @opindex mspecld-anomaly
14399 When enabled, the compiler ensures that the generated code does not
14400 contain speculative loads after jump instructions. If this option is used,
14401 @code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
14402
14403 @item -mno-specld-anomaly
14404 @opindex mno-specld-anomaly
14405 Don't generate extra code to prevent speculative loads from occurring.
14406
14407 @item -mcsync-anomaly
14408 @opindex mcsync-anomaly
14409 When enabled, the compiler ensures that the generated code does not
14410 contain CSYNC or SSYNC instructions too soon after conditional branches.
14411 If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
14412
14413 @item -mno-csync-anomaly
14414 @opindex mno-csync-anomaly
14415 Don't generate extra code to prevent CSYNC or SSYNC instructions from
14416 occurring too soon after a conditional branch.
14417
14418 @item -mlow-64k
14419 @opindex mlow-64k
14420 When enabled, the compiler is free to take advantage of the knowledge that
14421 the entire program fits into the low 64k of memory.
14422
14423 @item -mno-low-64k
14424 @opindex mno-low-64k
14425 Assume that the program is arbitrarily large.  This is the default.
14426
14427 @item -mstack-check-l1
14428 @opindex mstack-check-l1
14429 Do stack checking using information placed into L1 scratchpad memory by the
14430 uClinux kernel.
14431
14432 @item -mid-shared-library
14433 @opindex mid-shared-library
14434 Generate code that supports shared libraries via the library ID method.
14435 This allows for execute in place and shared libraries in an environment
14436 without virtual memory management.  This option implies @option{-fPIC}.
14437 With a @samp{bfin-elf} target, this option implies @option{-msim}.
14438
14439 @item -mno-id-shared-library
14440 @opindex mno-id-shared-library
14441 Generate code that doesn't assume ID-based shared libraries are being used.
14442 This is the default.
14443
14444 @item -mleaf-id-shared-library
14445 @opindex mleaf-id-shared-library
14446 Generate code that supports shared libraries via the library ID method,
14447 but assumes that this library or executable won't link against any other
14448 ID shared libraries.  That allows the compiler to use faster code for jumps
14449 and calls.
14450
14451 @item -mno-leaf-id-shared-library
14452 @opindex mno-leaf-id-shared-library
14453 Do not assume that the code being compiled won't link against any ID shared
14454 libraries.  Slower code is generated for jump and call insns.
14455
14456 @item -mshared-library-id=n
14457 @opindex mshared-library-id
14458 Specifies the identification number of the ID-based shared library being
14459 compiled.  Specifying a value of 0 generates more compact code; specifying
14460 other values forces the allocation of that number to the current
14461 library but is no more space- or time-efficient than omitting this option.
14462
14463 @item -msep-data
14464 @opindex msep-data
14465 Generate code that allows the data segment to be located in a different
14466 area of memory from the text segment.  This allows for execute in place in
14467 an environment without virtual memory management by eliminating relocations
14468 against the text section.
14469
14470 @item -mno-sep-data
14471 @opindex mno-sep-data
14472 Generate code that assumes that the data segment follows the text segment.
14473 This is the default.
14474
14475 @item -mlong-calls
14476 @itemx -mno-long-calls
14477 @opindex mlong-calls
14478 @opindex mno-long-calls
14479 Tells the compiler to perform function calls by first loading the
14480 address of the function into a register and then performing a subroutine
14481 call on this register.  This switch is needed if the target function
14482 lies outside of the 24-bit addressing range of the offset-based
14483 version of subroutine call instruction.
14484
14485 This feature is not enabled by default.  Specifying
14486 @option{-mno-long-calls} restores the default behavior.  Note these
14487 switches have no effect on how the compiler generates code to handle
14488 function calls via function pointers.
14489
14490 @item -mfast-fp
14491 @opindex mfast-fp
14492 Link with the fast floating-point library. This library relaxes some of
14493 the IEEE floating-point standard's rules for checking inputs against
14494 Not-a-Number (NAN), in the interest of performance.
14495
14496 @item -minline-plt
14497 @opindex minline-plt
14498 Enable inlining of PLT entries in function calls to functions that are
14499 not known to bind locally.  It has no effect without @option{-mfdpic}.
14500
14501 @item -mmulticore
14502 @opindex mmulticore
14503 Build a standalone application for multicore Blackfin processors. 
14504 This option causes proper start files and link scripts supporting 
14505 multicore to be used, and defines the macro @code{__BFIN_MULTICORE}. 
14506 It can only be used with @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. 
14507
14508 This option can be used with @option{-mcorea} or @option{-mcoreb}, which
14509 selects the one-application-per-core programming model.  Without
14510 @option{-mcorea} or @option{-mcoreb}, the single-application/dual-core
14511 programming model is used. In this model, the main function of Core B
14512 should be named as @code{coreb_main}.
14513
14514 If this option is not used, the single-core application programming
14515 model is used.
14516
14517 @item -mcorea
14518 @opindex mcorea
14519 Build a standalone application for Core A of BF561 when using
14520 the one-application-per-core programming model. Proper start files
14521 and link scripts are used to support Core A, and the macro
14522 @code{__BFIN_COREA} is defined.
14523 This option can only be used in conjunction with @option{-mmulticore}.
14524
14525 @item -mcoreb
14526 @opindex mcoreb
14527 Build a standalone application for Core B of BF561 when using
14528 the one-application-per-core programming model. Proper start files
14529 and link scripts are used to support Core B, and the macro
14530 @code{__BFIN_COREB} is defined. When this option is used, @code{coreb_main}
14531 should be used instead of @code{main}. 
14532 This option can only be used in conjunction with @option{-mmulticore}.
14533
14534 @item -msdram
14535 @opindex msdram
14536 Build a standalone application for SDRAM. Proper start files and
14537 link scripts are used to put the application into SDRAM, and the macro
14538 @code{__BFIN_SDRAM} is defined.
14539 The loader should initialize SDRAM before loading the application.
14540
14541 @item -micplb
14542 @opindex micplb
14543 Assume that ICPLBs are enabled at run time.  This has an effect on certain
14544 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
14545 are enabled; for standalone applications the default is off.
14546 @end table
14547
14548 @node C6X Options
14549 @subsection C6X Options
14550 @cindex C6X Options
14551
14552 @table @gcctabopt
14553 @item -march=@var{name}
14554 @opindex march
14555 This specifies the name of the target architecture.  GCC uses this
14556 name to determine what kind of instructions it can emit when generating
14557 assembly code.  Permissible names are: @samp{c62x},
14558 @samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.
14559
14560 @item -mbig-endian
14561 @opindex mbig-endian
14562 Generate code for a big-endian target.
14563
14564 @item -mlittle-endian
14565 @opindex mlittle-endian
14566 Generate code for a little-endian target.  This is the default.
14567
14568 @item -msim
14569 @opindex msim
14570 Choose startup files and linker script suitable for the simulator.
14571
14572 @item -msdata=default
14573 @opindex msdata=default
14574 Put small global and static data in the @code{.neardata} section,
14575 which is pointed to by register @code{B14}.  Put small uninitialized
14576 global and static data in the @code{.bss} section, which is adjacent
14577 to the @code{.neardata} section.  Put small read-only data into the
14578 @code{.rodata} section.  The corresponding sections used for large
14579 pieces of data are @code{.fardata}, @code{.far} and @code{.const}.
14580
14581 @item -msdata=all
14582 @opindex msdata=all
14583 Put all data, not just small objects, into the sections reserved for
14584 small data, and use addressing relative to the @code{B14} register to
14585 access them.
14586
14587 @item -msdata=none
14588 @opindex msdata=none
14589 Make no use of the sections reserved for small data, and use absolute
14590 addresses to access all data.  Put all initialized global and static
14591 data in the @code{.fardata} section, and all uninitialized data in the
14592 @code{.far} section.  Put all constant data into the @code{.const}
14593 section.
14594 @end table
14595
14596 @node CRIS Options
14597 @subsection CRIS Options
14598 @cindex CRIS Options
14599
14600 These options are defined specifically for the CRIS ports.
14601
14602 @table @gcctabopt
14603 @item -march=@var{architecture-type}
14604 @itemx -mcpu=@var{architecture-type}
14605 @opindex march
14606 @opindex mcpu
14607 Generate code for the specified architecture.  The choices for
14608 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
14609 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
14610 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
14611 @samp{v10}.
14612
14613 @item -mtune=@var{architecture-type}
14614 @opindex mtune
14615 Tune to @var{architecture-type} everything applicable about the generated
14616 code, except for the ABI and the set of available instructions.  The
14617 choices for @var{architecture-type} are the same as for
14618 @option{-march=@var{architecture-type}}.
14619
14620 @item -mmax-stack-frame=@var{n}
14621 @opindex mmax-stack-frame
14622 Warn when the stack frame of a function exceeds @var{n} bytes.
14623
14624 @item -metrax4
14625 @itemx -metrax100
14626 @opindex metrax4
14627 @opindex metrax100
14628 The options @option{-metrax4} and @option{-metrax100} are synonyms for
14629 @option{-march=v3} and @option{-march=v8} respectively.
14630
14631 @item -mmul-bug-workaround
14632 @itemx -mno-mul-bug-workaround
14633 @opindex mmul-bug-workaround
14634 @opindex mno-mul-bug-workaround
14635 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
14636 models where it applies.  This option is active by default.
14637
14638 @item -mpdebug
14639 @opindex mpdebug
14640 Enable CRIS-specific verbose debug-related information in the assembly
14641 code.  This option also has the effect of turning off the @samp{#NO_APP}
14642 formatted-code indicator to the assembler at the beginning of the
14643 assembly file.
14644
14645 @item -mcc-init
14646 @opindex mcc-init
14647 Do not use condition-code results from previous instruction; always emit
14648 compare and test instructions before use of condition codes.
14649
14650 @item -mno-side-effects
14651 @opindex mno-side-effects
14652 Do not emit instructions with side effects in addressing modes other than
14653 post-increment.
14654
14655 @item -mstack-align
14656 @itemx -mno-stack-align
14657 @itemx -mdata-align
14658 @itemx -mno-data-align
14659 @itemx -mconst-align
14660 @itemx -mno-const-align
14661 @opindex mstack-align
14662 @opindex mno-stack-align
14663 @opindex mdata-align
14664 @opindex mno-data-align
14665 @opindex mconst-align
14666 @opindex mno-const-align
14667 These options (@samp{no-} options) arrange (eliminate arrangements) for the
14668 stack frame, individual data and constants to be aligned for the maximum
14669 single data access size for the chosen CPU model.  The default is to
14670 arrange for 32-bit alignment.  ABI details such as structure layout are
14671 not affected by these options.
14672
14673 @item -m32-bit
14674 @itemx -m16-bit
14675 @itemx -m8-bit
14676 @opindex m32-bit
14677 @opindex m16-bit
14678 @opindex m8-bit
14679 Similar to the stack- data- and const-align options above, these options
14680 arrange for stack frame, writable data and constants to all be 32-bit,
14681 16-bit or 8-bit aligned.  The default is 32-bit alignment.
14682
14683 @item -mno-prologue-epilogue
14684 @itemx -mprologue-epilogue
14685 @opindex mno-prologue-epilogue
14686 @opindex mprologue-epilogue
14687 With @option{-mno-prologue-epilogue}, the normal function prologue and
14688 epilogue which set up the stack frame are omitted and no return
14689 instructions or return sequences are generated in the code.  Use this
14690 option only together with visual inspection of the compiled code: no
14691 warnings or errors are generated when call-saved registers must be saved,
14692 or storage for local variables needs to be allocated.
14693
14694 @item -mno-gotplt
14695 @itemx -mgotplt
14696 @opindex mno-gotplt
14697 @opindex mgotplt
14698 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
14699 instruction sequences that load addresses for functions from the PLT part
14700 of the GOT rather than (traditional on other architectures) calls to the
14701 PLT@.  The default is @option{-mgotplt}.
14702
14703 @item -melf
14704 @opindex melf
14705 Legacy no-op option only recognized with the cris-axis-elf and
14706 cris-axis-linux-gnu targets.
14707
14708 @item -mlinux
14709 @opindex mlinux
14710 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
14711
14712 @item -sim
14713 @opindex sim
14714 This option, recognized for the cris-axis-elf, arranges
14715 to link with input-output functions from a simulator library.  Code,
14716 initialized data and zero-initialized data are allocated consecutively.
14717
14718 @item -sim2
14719 @opindex sim2
14720 Like @option{-sim}, but pass linker options to locate initialized data at
14721 0x40000000 and zero-initialized data at 0x80000000.
14722 @end table
14723
14724 @node CR16 Options
14725 @subsection CR16 Options
14726 @cindex CR16 Options
14727
14728 These options are defined specifically for the CR16 ports.
14729
14730 @table @gcctabopt
14731
14732 @item -mmac
14733 @opindex mmac
14734 Enable the use of multiply-accumulate instructions. Disabled by default.
14735
14736 @item -mcr16cplus
14737 @itemx -mcr16c
14738 @opindex mcr16cplus
14739 @opindex mcr16c
14740 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 
14741 is default.
14742
14743 @item -msim
14744 @opindex msim
14745 Links the library libsim.a which is in compatible with simulator. Applicable
14746 to ELF compiler only.
14747
14748 @item -mint32
14749 @opindex mint32
14750 Choose integer type as 32-bit wide.
14751
14752 @item -mbit-ops
14753 @opindex mbit-ops
14754 Generates @code{sbit}/@code{cbit} instructions for bit manipulations.
14755
14756 @item -mdata-model=@var{model}
14757 @opindex mdata-model
14758 Choose a data model. The choices for @var{model} are @samp{near},
14759 @samp{far} or @samp{medium}. @samp{medium} is default.
14760 However, @samp{far} is not valid with @option{-mcr16c}, as the
14761 CR16C architecture does not support the far data model.
14762 @end table
14763
14764 @node Darwin Options
14765 @subsection Darwin Options
14766 @cindex Darwin options
14767
14768 These options are defined for all architectures running the Darwin operating
14769 system.
14770
14771 FSF GCC on Darwin does not create ``fat'' object files; it creates
14772 an object file for the single architecture that GCC was built to
14773 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
14774 @option{-arch} options are used; it does so by running the compiler or
14775 linker multiple times and joining the results together with
14776 @file{lipo}.
14777
14778 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
14779 @samp{i686}) is determined by the flags that specify the ISA
14780 that GCC is targeting, like @option{-mcpu} or @option{-march}.  The
14781 @option{-force_cpusubtype_ALL} option can be used to override this.
14782
14783 The Darwin tools vary in their behavior when presented with an ISA
14784 mismatch.  The assembler, @file{as}, only permits instructions to
14785 be used that are valid for the subtype of the file it is generating,
14786 so you cannot put 64-bit instructions in a @samp{ppc750} object file.
14787 The linker for shared libraries, @file{/usr/bin/libtool}, fails
14788 and prints an error if asked to create a shared library with a less
14789 restrictive subtype than its input files (for instance, trying to put
14790 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
14791 for executables, @command{ld}, quietly gives the executable the most
14792 restrictive subtype of any of its input files.
14793
14794 @table @gcctabopt
14795 @item -F@var{dir}
14796 @opindex F
14797 Add the framework directory @var{dir} to the head of the list of
14798 directories to be searched for header files.  These directories are
14799 interleaved with those specified by @option{-I} options and are
14800 scanned in a left-to-right order.
14801
14802 A framework directory is a directory with frameworks in it.  A
14803 framework is a directory with a @file{Headers} and/or
14804 @file{PrivateHeaders} directory contained directly in it that ends
14805 in @file{.framework}.  The name of a framework is the name of this
14806 directory excluding the @file{.framework}.  Headers associated with
14807 the framework are found in one of those two directories, with
14808 @file{Headers} being searched first.  A subframework is a framework
14809 directory that is in a framework's @file{Frameworks} directory.
14810 Includes of subframework headers can only appear in a header of a
14811 framework that contains the subframework, or in a sibling subframework
14812 header.  Two subframeworks are siblings if they occur in the same
14813 framework.  A subframework should not have the same name as a
14814 framework; a warning is issued if this is violated.  Currently a
14815 subframework cannot have subframeworks; in the future, the mechanism
14816 may be extended to support this.  The standard frameworks can be found
14817 in @file{/System/Library/Frameworks} and
14818 @file{/Library/Frameworks}.  An example include looks like
14819 @code{#include <Framework/header.h>}, where @file{Framework} denotes
14820 the name of the framework and @file{header.h} is found in the
14821 @file{PrivateHeaders} or @file{Headers} directory.
14822
14823 @item -iframework@var{dir}
14824 @opindex iframework
14825 Like @option{-F} except the directory is a treated as a system
14826 directory.  The main difference between this @option{-iframework} and
14827 @option{-F} is that with @option{-iframework} the compiler does not
14828 warn about constructs contained within header files found via
14829 @var{dir}.  This option is valid only for the C family of languages.
14830
14831 @item -gused
14832 @opindex gused
14833 Emit debugging information for symbols that are used.  For stabs
14834 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
14835 This is by default ON@.
14836
14837 @item -gfull
14838 @opindex gfull
14839 Emit debugging information for all symbols and types.
14840
14841 @item -mmacosx-version-min=@var{version}
14842 The earliest version of MacOS X that this executable will run on
14843 is @var{version}.  Typical values of @var{version} include @code{10.1},
14844 @code{10.2}, and @code{10.3.9}.
14845
14846 If the compiler was built to use the system's headers by default,
14847 then the default for this option is the system version on which the
14848 compiler is running, otherwise the default is to make choices that
14849 are compatible with as many systems and code bases as possible.
14850
14851 @item -mkernel
14852 @opindex mkernel
14853 Enable kernel development mode.  The @option{-mkernel} option sets
14854 @option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
14855 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
14856 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
14857 applicable.  This mode also sets @option{-mno-altivec},
14858 @option{-msoft-float}, @option{-fno-builtin} and
14859 @option{-mlong-branch} for PowerPC targets.
14860
14861 @item -mone-byte-bool
14862 @opindex mone-byte-bool
14863 Override the defaults for @code{bool} so that @code{sizeof(bool)==1}.
14864 By default @code{sizeof(bool)} is @code{4} when compiling for
14865 Darwin/PowerPC and @code{1} when compiling for Darwin/x86, so this
14866 option has no effect on x86.
14867
14868 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
14869 to generate code that is not binary compatible with code generated
14870 without that switch.  Using this switch may require recompiling all
14871 other modules in a program, including system libraries.  Use this
14872 switch to conform to a non-default data model.
14873
14874 @item -mfix-and-continue
14875 @itemx -ffix-and-continue
14876 @itemx -findirect-data
14877 @opindex mfix-and-continue
14878 @opindex ffix-and-continue
14879 @opindex findirect-data
14880 Generate code suitable for fast turnaround development, such as to
14881 allow GDB to dynamically load @file{.o} files into already-running
14882 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
14883 are provided for backwards compatibility.
14884
14885 @item -all_load
14886 @opindex all_load
14887 Loads all members of static archive libraries.
14888 See man ld(1) for more information.
14889
14890 @item -arch_errors_fatal
14891 @opindex arch_errors_fatal
14892 Cause the errors having to do with files that have the wrong architecture
14893 to be fatal.
14894
14895 @item -bind_at_load
14896 @opindex bind_at_load
14897 Causes the output file to be marked such that the dynamic linker will
14898 bind all undefined references when the file is loaded or launched.
14899
14900 @item -bundle
14901 @opindex bundle
14902 Produce a Mach-o bundle format file.
14903 See man ld(1) for more information.
14904
14905 @item -bundle_loader @var{executable}
14906 @opindex bundle_loader
14907 This option specifies the @var{executable} that will load the build
14908 output file being linked.  See man ld(1) for more information.
14909
14910 @item -dynamiclib
14911 @opindex dynamiclib
14912 When passed this option, GCC produces a dynamic library instead of
14913 an executable when linking, using the Darwin @file{libtool} command.
14914
14915 @item -force_cpusubtype_ALL
14916 @opindex force_cpusubtype_ALL
14917 This causes GCC's output file to have the @samp{ALL} subtype, instead of
14918 one controlled by the @option{-mcpu} or @option{-march} option.
14919
14920 @item -allowable_client  @var{client_name}
14921 @itemx -client_name
14922 @itemx -compatibility_version
14923 @itemx -current_version
14924 @itemx -dead_strip
14925 @itemx -dependency-file
14926 @itemx -dylib_file
14927 @itemx -dylinker_install_name
14928 @itemx -dynamic
14929 @itemx -exported_symbols_list
14930 @itemx -filelist
14931 @need 800
14932 @itemx -flat_namespace
14933 @itemx -force_flat_namespace
14934 @itemx -headerpad_max_install_names
14935 @itemx -image_base
14936 @itemx -init
14937 @itemx -install_name
14938 @itemx -keep_private_externs
14939 @itemx -multi_module
14940 @itemx -multiply_defined
14941 @itemx -multiply_defined_unused
14942 @need 800
14943 @itemx -noall_load
14944 @itemx -no_dead_strip_inits_and_terms
14945 @itemx -nofixprebinding
14946 @itemx -nomultidefs
14947 @itemx -noprebind
14948 @itemx -noseglinkedit
14949 @itemx -pagezero_size
14950 @itemx -prebind
14951 @itemx -prebind_all_twolevel_modules
14952 @itemx -private_bundle
14953 @need 800
14954 @itemx -read_only_relocs
14955 @itemx -sectalign
14956 @itemx -sectobjectsymbols
14957 @itemx -whyload
14958 @itemx -seg1addr
14959 @itemx -sectcreate
14960 @itemx -sectobjectsymbols
14961 @itemx -sectorder
14962 @itemx -segaddr
14963 @itemx -segs_read_only_addr
14964 @need 800
14965 @itemx -segs_read_write_addr
14966 @itemx -seg_addr_table
14967 @itemx -seg_addr_table_filename
14968 @itemx -seglinkedit
14969 @itemx -segprot
14970 @itemx -segs_read_only_addr
14971 @itemx -segs_read_write_addr
14972 @itemx -single_module
14973 @itemx -static
14974 @itemx -sub_library
14975 @need 800
14976 @itemx -sub_umbrella
14977 @itemx -twolevel_namespace
14978 @itemx -umbrella
14979 @itemx -undefined
14980 @itemx -unexported_symbols_list
14981 @itemx -weak_reference_mismatches
14982 @itemx -whatsloaded
14983 @opindex allowable_client
14984 @opindex client_name
14985 @opindex compatibility_version
14986 @opindex current_version
14987 @opindex dead_strip
14988 @opindex dependency-file
14989 @opindex dylib_file
14990 @opindex dylinker_install_name
14991 @opindex dynamic
14992 @opindex exported_symbols_list
14993 @opindex filelist
14994 @opindex flat_namespace
14995 @opindex force_flat_namespace
14996 @opindex headerpad_max_install_names
14997 @opindex image_base
14998 @opindex init
14999 @opindex install_name
15000 @opindex keep_private_externs
15001 @opindex multi_module
15002 @opindex multiply_defined
15003 @opindex multiply_defined_unused
15004 @opindex noall_load
15005 @opindex no_dead_strip_inits_and_terms
15006 @opindex nofixprebinding
15007 @opindex nomultidefs
15008 @opindex noprebind
15009 @opindex noseglinkedit
15010 @opindex pagezero_size
15011 @opindex prebind
15012 @opindex prebind_all_twolevel_modules
15013 @opindex private_bundle
15014 @opindex read_only_relocs
15015 @opindex sectalign
15016 @opindex sectobjectsymbols
15017 @opindex whyload
15018 @opindex seg1addr
15019 @opindex sectcreate
15020 @opindex sectobjectsymbols
15021 @opindex sectorder
15022 @opindex segaddr
15023 @opindex segs_read_only_addr
15024 @opindex segs_read_write_addr
15025 @opindex seg_addr_table
15026 @opindex seg_addr_table_filename
15027 @opindex seglinkedit
15028 @opindex segprot
15029 @opindex segs_read_only_addr
15030 @opindex segs_read_write_addr
15031 @opindex single_module
15032 @opindex static
15033 @opindex sub_library
15034 @opindex sub_umbrella
15035 @opindex twolevel_namespace
15036 @opindex umbrella
15037 @opindex undefined
15038 @opindex unexported_symbols_list
15039 @opindex weak_reference_mismatches
15040 @opindex whatsloaded
15041 These options are passed to the Darwin linker.  The Darwin linker man page
15042 describes them in detail.
15043 @end table
15044
15045 @node DEC Alpha Options
15046 @subsection DEC Alpha Options
15047
15048 These @samp{-m} options are defined for the DEC Alpha implementations:
15049
15050 @table @gcctabopt
15051 @item -mno-soft-float
15052 @itemx -msoft-float
15053 @opindex mno-soft-float
15054 @opindex msoft-float
15055 Use (do not use) the hardware floating-point instructions for
15056 floating-point operations.  When @option{-msoft-float} is specified,
15057 functions in @file{libgcc.a} are used to perform floating-point
15058 operations.  Unless they are replaced by routines that emulate the
15059 floating-point operations, or compiled in such a way as to call such
15060 emulations routines, these routines issue floating-point
15061 operations.   If you are compiling for an Alpha without floating-point
15062 operations, you must ensure that the library is built so as not to call
15063 them.
15064
15065 Note that Alpha implementations without floating-point operations are
15066 required to have floating-point registers.
15067
15068 @item -mfp-reg
15069 @itemx -mno-fp-regs
15070 @opindex mfp-reg
15071 @opindex mno-fp-regs
15072 Generate code that uses (does not use) the floating-point register set.
15073 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
15074 register set is not used, floating-point operands are passed in integer
15075 registers as if they were integers and floating-point results are passed
15076 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
15077 so any function with a floating-point argument or return value called by code
15078 compiled with @option{-mno-fp-regs} must also be compiled with that
15079 option.
15080
15081 A typical use of this option is building a kernel that does not use,
15082 and hence need not save and restore, any floating-point registers.
15083
15084 @item -mieee
15085 @opindex mieee
15086 The Alpha architecture implements floating-point hardware optimized for
15087 maximum performance.  It is mostly compliant with the IEEE floating-point
15088 standard.  However, for full compliance, software assistance is
15089 required.  This option generates code fully IEEE-compliant code
15090 @emph{except} that the @var{inexact-flag} is not maintained (see below).
15091 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
15092 defined during compilation.  The resulting code is less efficient but is
15093 able to correctly support denormalized numbers and exceptional IEEE
15094 values such as not-a-number and plus/minus infinity.  Other Alpha
15095 compilers call this option @option{-ieee_with_no_inexact}.
15096
15097 @item -mieee-with-inexact
15098 @opindex mieee-with-inexact
15099 This is like @option{-mieee} except the generated code also maintains
15100 the IEEE @var{inexact-flag}.  Turning on this option causes the
15101 generated code to implement fully-compliant IEEE math.  In addition to
15102 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
15103 macro.  On some Alpha implementations the resulting code may execute
15104 significantly slower than the code generated by default.  Since there is
15105 very little code that depends on the @var{inexact-flag}, you should
15106 normally not specify this option.  Other Alpha compilers call this
15107 option @option{-ieee_with_inexact}.
15108
15109 @item -mfp-trap-mode=@var{trap-mode}
15110 @opindex mfp-trap-mode
15111 This option controls what floating-point related traps are enabled.
15112 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
15113 The trap mode can be set to one of four values:
15114
15115 @table @samp
15116 @item n
15117 This is the default (normal) setting.  The only traps that are enabled
15118 are the ones that cannot be disabled in software (e.g., division by zero
15119 trap).
15120
15121 @item u
15122 In addition to the traps enabled by @samp{n}, underflow traps are enabled
15123 as well.
15124
15125 @item su
15126 Like @samp{u}, but the instructions are marked to be safe for software
15127 completion (see Alpha architecture manual for details).
15128
15129 @item sui
15130 Like @samp{su}, but inexact traps are enabled as well.
15131 @end table
15132
15133 @item -mfp-rounding-mode=@var{rounding-mode}
15134 @opindex mfp-rounding-mode
15135 Selects the IEEE rounding mode.  Other Alpha compilers call this option
15136 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
15137 of:
15138
15139 @table @samp
15140 @item n
15141 Normal IEEE rounding mode.  Floating-point numbers are rounded towards
15142 the nearest machine number or towards the even machine number in case
15143 of a tie.
15144
15145 @item m
15146 Round towards minus infinity.
15147
15148 @item c
15149 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
15150
15151 @item d
15152 Dynamic rounding mode.  A field in the floating-point control register
15153 (@var{fpcr}, see Alpha architecture reference manual) controls the
15154 rounding mode in effect.  The C library initializes this register for
15155 rounding towards plus infinity.  Thus, unless your program modifies the
15156 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
15157 @end table
15158
15159 @item -mtrap-precision=@var{trap-precision}
15160 @opindex mtrap-precision
15161 In the Alpha architecture, floating-point traps are imprecise.  This
15162 means without software assistance it is impossible to recover from a
15163 floating trap and program execution normally needs to be terminated.
15164 GCC can generate code that can assist operating system trap handlers
15165 in determining the exact location that caused a floating-point trap.
15166 Depending on the requirements of an application, different levels of
15167 precisions can be selected:
15168
15169 @table @samp
15170 @item p
15171 Program precision.  This option is the default and means a trap handler
15172 can only identify which program caused a floating-point exception.
15173
15174 @item f
15175 Function precision.  The trap handler can determine the function that
15176 caused a floating-point exception.
15177
15178 @item i
15179 Instruction precision.  The trap handler can determine the exact
15180 instruction that caused a floating-point exception.
15181 @end table
15182
15183 Other Alpha compilers provide the equivalent options called
15184 @option{-scope_safe} and @option{-resumption_safe}.
15185
15186 @item -mieee-conformant
15187 @opindex mieee-conformant
15188 This option marks the generated code as IEEE conformant.  You must not
15189 use this option unless you also specify @option{-mtrap-precision=i} and either
15190 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
15191 is to emit the line @samp{.eflag 48} in the function prologue of the
15192 generated assembly file.
15193
15194 @item -mbuild-constants
15195 @opindex mbuild-constants
15196 Normally GCC examines a 32- or 64-bit integer constant to
15197 see if it can construct it from smaller constants in two or three
15198 instructions.  If it cannot, it outputs the constant as a literal and
15199 generates code to load it from the data segment at run time.
15200
15201 Use this option to require GCC to construct @emph{all} integer constants
15202 using code, even if it takes more instructions (the maximum is six).
15203
15204 You typically use this option to build a shared library dynamic
15205 loader.  Itself a shared library, it must relocate itself in memory
15206 before it can find the variables and constants in its own data segment.
15207
15208 @item -mbwx
15209 @itemx -mno-bwx
15210 @itemx -mcix
15211 @itemx -mno-cix
15212 @itemx -mfix
15213 @itemx -mno-fix
15214 @itemx -mmax
15215 @itemx -mno-max
15216 @opindex mbwx
15217 @opindex mno-bwx
15218 @opindex mcix
15219 @opindex mno-cix
15220 @opindex mfix
15221 @opindex mno-fix
15222 @opindex mmax
15223 @opindex mno-max
15224 Indicate whether GCC should generate code to use the optional BWX,
15225 CIX, FIX and MAX instruction sets.  The default is to use the instruction
15226 sets supported by the CPU type specified via @option{-mcpu=} option or that
15227 of the CPU on which GCC was built if none is specified.
15228
15229 @item -mfloat-vax
15230 @itemx -mfloat-ieee
15231 @opindex mfloat-vax
15232 @opindex mfloat-ieee
15233 Generate code that uses (does not use) VAX F and G floating-point
15234 arithmetic instead of IEEE single and double precision.
15235
15236 @item -mexplicit-relocs
15237 @itemx -mno-explicit-relocs
15238 @opindex mexplicit-relocs
15239 @opindex mno-explicit-relocs
15240 Older Alpha assemblers provided no way to generate symbol relocations
15241 except via assembler macros.  Use of these macros does not allow
15242 optimal instruction scheduling.  GNU binutils as of version 2.12
15243 supports a new syntax that allows the compiler to explicitly mark
15244 which relocations should apply to which instructions.  This option
15245 is mostly useful for debugging, as GCC detects the capabilities of
15246 the assembler when it is built and sets the default accordingly.
15247
15248 @item -msmall-data
15249 @itemx -mlarge-data
15250 @opindex msmall-data
15251 @opindex mlarge-data
15252 When @option{-mexplicit-relocs} is in effect, static data is
15253 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
15254 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
15255 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
15256 16-bit relocations off of the @code{$gp} register.  This limits the
15257 size of the small data area to 64KB, but allows the variables to be
15258 directly accessed via a single instruction.
15259
15260 The default is @option{-mlarge-data}.  With this option the data area
15261 is limited to just below 2GB@.  Programs that require more than 2GB of
15262 data must use @code{malloc} or @code{mmap} to allocate the data in the
15263 heap instead of in the program's data segment.
15264
15265 When generating code for shared libraries, @option{-fpic} implies
15266 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
15267
15268 @item -msmall-text
15269 @itemx -mlarge-text
15270 @opindex msmall-text
15271 @opindex mlarge-text
15272 When @option{-msmall-text} is used, the compiler assumes that the
15273 code of the entire program (or shared library) fits in 4MB, and is
15274 thus reachable with a branch instruction.  When @option{-msmall-data}
15275 is used, the compiler can assume that all local symbols share the
15276 same @code{$gp} value, and thus reduce the number of instructions
15277 required for a function call from 4 to 1.
15278
15279 The default is @option{-mlarge-text}.
15280
15281 @item -mcpu=@var{cpu_type}
15282 @opindex mcpu
15283 Set the instruction set and instruction scheduling parameters for
15284 machine type @var{cpu_type}.  You can specify either the @samp{EV}
15285 style name or the corresponding chip number.  GCC supports scheduling
15286 parameters for the EV4, EV5 and EV6 family of processors and
15287 chooses the default values for the instruction set from the processor
15288 you specify.  If you do not specify a processor type, GCC defaults
15289 to the processor on which the compiler was built.
15290
15291 Supported values for @var{cpu_type} are
15292
15293 @table @samp
15294 @item ev4
15295 @itemx ev45
15296 @itemx 21064
15297 Schedules as an EV4 and has no instruction set extensions.
15298
15299 @item ev5
15300 @itemx 21164
15301 Schedules as an EV5 and has no instruction set extensions.
15302
15303 @item ev56
15304 @itemx 21164a
15305 Schedules as an EV5 and supports the BWX extension.
15306
15307 @item pca56
15308 @itemx 21164pc
15309 @itemx 21164PC
15310 Schedules as an EV5 and supports the BWX and MAX extensions.
15311
15312 @item ev6
15313 @itemx 21264
15314 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
15315
15316 @item ev67
15317 @itemx 21264a
15318 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
15319 @end table
15320
15321 Native toolchains also support the value @samp{native},
15322 which selects the best architecture option for the host processor.
15323 @option{-mcpu=native} has no effect if GCC does not recognize
15324 the processor.
15325
15326 @item -mtune=@var{cpu_type}
15327 @opindex mtune
15328 Set only the instruction scheduling parameters for machine type
15329 @var{cpu_type}.  The instruction set is not changed.
15330
15331 Native toolchains also support the value @samp{native},
15332 which selects the best architecture option for the host processor.
15333 @option{-mtune=native} has no effect if GCC does not recognize
15334 the processor.
15335
15336 @item -mmemory-latency=@var{time}
15337 @opindex mmemory-latency
15338 Sets the latency the scheduler should assume for typical memory
15339 references as seen by the application.  This number is highly
15340 dependent on the memory access patterns used by the application
15341 and the size of the external cache on the machine.
15342
15343 Valid options for @var{time} are
15344
15345 @table @samp
15346 @item @var{number}
15347 A decimal number representing clock cycles.
15348
15349 @item L1
15350 @itemx L2
15351 @itemx L3
15352 @itemx main
15353 The compiler contains estimates of the number of clock cycles for
15354 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
15355 (also called Dcache, Scache, and Bcache), as well as to main memory.
15356 Note that L3 is only valid for EV5.
15357
15358 @end table
15359 @end table
15360
15361 @node FR30 Options
15362 @subsection FR30 Options
15363 @cindex FR30 Options
15364
15365 These options are defined specifically for the FR30 port.
15366
15367 @table @gcctabopt
15368
15369 @item -msmall-model
15370 @opindex msmall-model
15371 Use the small address space model.  This can produce smaller code, but
15372 it does assume that all symbolic values and addresses fit into a
15373 20-bit range.
15374
15375 @item -mno-lsim
15376 @opindex mno-lsim
15377 Assume that runtime support has been provided and so there is no need
15378 to include the simulator library (@file{libsim.a}) on the linker
15379 command line.
15380
15381 @end table
15382
15383 @node FT32 Options
15384 @subsection FT32 Options
15385 @cindex FT32 Options
15386
15387 These options are defined specifically for the FT32 port.
15388
15389 @table @gcctabopt
15390
15391 @item -msim
15392 @opindex msim
15393 Specifies that the program will be run on the simulator.  This causes
15394 an alternate runtime startup and library to be linked.
15395 You must not use this option when generating programs that will run on
15396 real hardware; you must provide your own runtime library for whatever
15397 I/O functions are needed.
15398
15399 @item -mlra
15400 @opindex mlra
15401 Enable Local Register Allocation.  This is still experimental for FT32,
15402 so by default the compiler uses standard reload.
15403
15404 @end table
15405
15406 @node FRV Options
15407 @subsection FRV Options
15408 @cindex FRV Options
15409
15410 @table @gcctabopt
15411 @item -mgpr-32
15412 @opindex mgpr-32
15413
15414 Only use the first 32 general-purpose registers.
15415
15416 @item -mgpr-64
15417 @opindex mgpr-64
15418
15419 Use all 64 general-purpose registers.
15420
15421 @item -mfpr-32
15422 @opindex mfpr-32
15423
15424 Use only the first 32 floating-point registers.
15425
15426 @item -mfpr-64
15427 @opindex mfpr-64
15428
15429 Use all 64 floating-point registers.
15430
15431 @item -mhard-float
15432 @opindex mhard-float
15433
15434 Use hardware instructions for floating-point operations.
15435
15436 @item -msoft-float
15437 @opindex msoft-float
15438
15439 Use library routines for floating-point operations.
15440
15441 @item -malloc-cc
15442 @opindex malloc-cc
15443
15444 Dynamically allocate condition code registers.
15445
15446 @item -mfixed-cc
15447 @opindex mfixed-cc
15448
15449 Do not try to dynamically allocate condition code registers, only
15450 use @code{icc0} and @code{fcc0}.
15451
15452 @item -mdword
15453 @opindex mdword
15454
15455 Change ABI to use double word insns.
15456
15457 @item -mno-dword
15458 @opindex mno-dword
15459
15460 Do not use double word instructions.
15461
15462 @item -mdouble
15463 @opindex mdouble
15464
15465 Use floating-point double instructions.
15466
15467 @item -mno-double
15468 @opindex mno-double
15469
15470 Do not use floating-point double instructions.
15471
15472 @item -mmedia
15473 @opindex mmedia
15474
15475 Use media instructions.
15476
15477 @item -mno-media
15478 @opindex mno-media
15479
15480 Do not use media instructions.
15481
15482 @item -mmuladd
15483 @opindex mmuladd
15484
15485 Use multiply and add/subtract instructions.
15486
15487 @item -mno-muladd
15488 @opindex mno-muladd
15489
15490 Do not use multiply and add/subtract instructions.
15491
15492 @item -mfdpic
15493 @opindex mfdpic
15494
15495 Select the FDPIC ABI, which uses function descriptors to represent
15496 pointers to functions.  Without any PIC/PIE-related options, it
15497 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
15498 assumes GOT entries and small data are within a 12-bit range from the
15499 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
15500 are computed with 32 bits.
15501 With a @samp{bfin-elf} target, this option implies @option{-msim}.
15502
15503 @item -minline-plt
15504 @opindex minline-plt
15505
15506 Enable inlining of PLT entries in function calls to functions that are
15507 not known to bind locally.  It has no effect without @option{-mfdpic}.
15508 It's enabled by default if optimizing for speed and compiling for
15509 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
15510 optimization option such as @option{-O3} or above is present in the
15511 command line.
15512
15513 @item -mTLS
15514 @opindex mTLS
15515
15516 Assume a large TLS segment when generating thread-local code.
15517
15518 @item -mtls
15519 @opindex mtls
15520
15521 Do not assume a large TLS segment when generating thread-local code.
15522
15523 @item -mgprel-ro
15524 @opindex mgprel-ro
15525
15526 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
15527 that is known to be in read-only sections.  It's enabled by default,
15528 except for @option{-fpic} or @option{-fpie}: even though it may help
15529 make the global offset table smaller, it trades 1 instruction for 4.
15530 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
15531 one of which may be shared by multiple symbols, and it avoids the need
15532 for a GOT entry for the referenced symbol, so it's more likely to be a
15533 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
15534
15535 @item -multilib-library-pic
15536 @opindex multilib-library-pic
15537
15538 Link with the (library, not FD) pic libraries.  It's implied by
15539 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
15540 @option{-fpic} without @option{-mfdpic}.  You should never have to use
15541 it explicitly.
15542
15543 @item -mlinked-fp
15544 @opindex mlinked-fp
15545
15546 Follow the EABI requirement of always creating a frame pointer whenever
15547 a stack frame is allocated.  This option is enabled by default and can
15548 be disabled with @option{-mno-linked-fp}.
15549
15550 @item -mlong-calls
15551 @opindex mlong-calls
15552
15553 Use indirect addressing to call functions outside the current
15554 compilation unit.  This allows the functions to be placed anywhere
15555 within the 32-bit address space.
15556
15557 @item -malign-labels
15558 @opindex malign-labels
15559
15560 Try to align labels to an 8-byte boundary by inserting NOPs into the
15561 previous packet.  This option only has an effect when VLIW packing
15562 is enabled.  It doesn't create new packets; it merely adds NOPs to
15563 existing ones.
15564
15565 @item -mlibrary-pic
15566 @opindex mlibrary-pic
15567
15568 Generate position-independent EABI code.
15569
15570 @item -macc-4
15571 @opindex macc-4
15572
15573 Use only the first four media accumulator registers.
15574
15575 @item -macc-8
15576 @opindex macc-8
15577
15578 Use all eight media accumulator registers.
15579
15580 @item -mpack
15581 @opindex mpack
15582
15583 Pack VLIW instructions.
15584
15585 @item -mno-pack
15586 @opindex mno-pack
15587
15588 Do not pack VLIW instructions.
15589
15590 @item -mno-eflags
15591 @opindex mno-eflags
15592
15593 Do not mark ABI switches in e_flags.
15594
15595 @item -mcond-move
15596 @opindex mcond-move
15597
15598 Enable the use of conditional-move instructions (default).
15599
15600 This switch is mainly for debugging the compiler and will likely be removed
15601 in a future version.
15602
15603 @item -mno-cond-move
15604 @opindex mno-cond-move
15605
15606 Disable the use of conditional-move instructions.
15607
15608 This switch is mainly for debugging the compiler and will likely be removed
15609 in a future version.
15610
15611 @item -mscc
15612 @opindex mscc
15613
15614 Enable the use of conditional set instructions (default).
15615
15616 This switch is mainly for debugging the compiler and will likely be removed
15617 in a future version.
15618
15619 @item -mno-scc
15620 @opindex mno-scc
15621
15622 Disable the use of conditional set instructions.
15623
15624 This switch is mainly for debugging the compiler and will likely be removed
15625 in a future version.
15626
15627 @item -mcond-exec
15628 @opindex mcond-exec
15629
15630 Enable the use of conditional execution (default).
15631
15632 This switch is mainly for debugging the compiler and will likely be removed
15633 in a future version.
15634
15635 @item -mno-cond-exec
15636 @opindex mno-cond-exec
15637
15638 Disable the use of conditional execution.
15639
15640 This switch is mainly for debugging the compiler and will likely be removed
15641 in a future version.
15642
15643 @item -mvliw-branch
15644 @opindex mvliw-branch
15645
15646 Run a pass to pack branches into VLIW instructions (default).
15647
15648 This switch is mainly for debugging the compiler and will likely be removed
15649 in a future version.
15650
15651 @item -mno-vliw-branch
15652 @opindex mno-vliw-branch
15653
15654 Do not run a pass to pack branches into VLIW instructions.
15655
15656 This switch is mainly for debugging the compiler and will likely be removed
15657 in a future version.
15658
15659 @item -mmulti-cond-exec
15660 @opindex mmulti-cond-exec
15661
15662 Enable optimization of @code{&&} and @code{||} in conditional execution
15663 (default).
15664
15665 This switch is mainly for debugging the compiler and will likely be removed
15666 in a future version.
15667
15668 @item -mno-multi-cond-exec
15669 @opindex mno-multi-cond-exec
15670
15671 Disable optimization of @code{&&} and @code{||} in conditional execution.
15672
15673 This switch is mainly for debugging the compiler and will likely be removed
15674 in a future version.
15675
15676 @item -mnested-cond-exec
15677 @opindex mnested-cond-exec
15678
15679 Enable nested conditional execution optimizations (default).
15680
15681 This switch is mainly for debugging the compiler and will likely be removed
15682 in a future version.
15683
15684 @item -mno-nested-cond-exec
15685 @opindex mno-nested-cond-exec
15686
15687 Disable nested conditional execution optimizations.
15688
15689 This switch is mainly for debugging the compiler and will likely be removed
15690 in a future version.
15691
15692 @item -moptimize-membar
15693 @opindex moptimize-membar
15694
15695 This switch removes redundant @code{membar} instructions from the
15696 compiler-generated code.  It is enabled by default.
15697
15698 @item -mno-optimize-membar
15699 @opindex mno-optimize-membar
15700
15701 This switch disables the automatic removal of redundant @code{membar}
15702 instructions from the generated code.
15703
15704 @item -mtomcat-stats
15705 @opindex mtomcat-stats
15706
15707 Cause gas to print out tomcat statistics.
15708
15709 @item -mcpu=@var{cpu}
15710 @opindex mcpu
15711
15712 Select the processor type for which to generate code.  Possible values are
15713 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
15714 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
15715
15716 @end table
15717
15718 @node GNU/Linux Options
15719 @subsection GNU/Linux Options
15720
15721 These @samp{-m} options are defined for GNU/Linux targets:
15722
15723 @table @gcctabopt
15724 @item -mglibc
15725 @opindex mglibc
15726 Use the GNU C library.  This is the default except
15727 on @samp{*-*-linux-*uclibc*}, @samp{*-*-linux-*musl*} and
15728 @samp{*-*-linux-*android*} targets.
15729
15730 @item -muclibc
15731 @opindex muclibc
15732 Use uClibc C library.  This is the default on
15733 @samp{*-*-linux-*uclibc*} targets.
15734
15735 @item -mmusl
15736 @opindex mmusl
15737 Use the musl C library.  This is the default on
15738 @samp{*-*-linux-*musl*} targets.
15739
15740 @item -mbionic
15741 @opindex mbionic
15742 Use Bionic C library.  This is the default on
15743 @samp{*-*-linux-*android*} targets.
15744
15745 @item -mandroid
15746 @opindex mandroid
15747 Compile code compatible with Android platform.  This is the default on
15748 @samp{*-*-linux-*android*} targets.
15749
15750 When compiling, this option enables @option{-mbionic}, @option{-fPIC},
15751 @option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
15752 this option makes the GCC driver pass Android-specific options to the linker.
15753 Finally, this option causes the preprocessor macro @code{__ANDROID__}
15754 to be defined.
15755
15756 @item -tno-android-cc
15757 @opindex tno-android-cc
15758 Disable compilation effects of @option{-mandroid}, i.e., do not enable
15759 @option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
15760 @option{-fno-rtti} by default.
15761
15762 @item -tno-android-ld
15763 @opindex tno-android-ld
15764 Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
15765 linking options to the linker.
15766
15767 @end table
15768
15769 @node H8/300 Options
15770 @subsection H8/300 Options
15771
15772 These @samp{-m} options are defined for the H8/300 implementations:
15773
15774 @table @gcctabopt
15775 @item -mrelax
15776 @opindex mrelax
15777 Shorten some address references at link time, when possible; uses the
15778 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
15779 ld, Using ld}, for a fuller description.
15780
15781 @item -mh
15782 @opindex mh
15783 Generate code for the H8/300H@.
15784
15785 @item -ms
15786 @opindex ms
15787 Generate code for the H8S@.
15788
15789 @item -mn
15790 @opindex mn
15791 Generate code for the H8S and H8/300H in the normal mode.  This switch
15792 must be used either with @option{-mh} or @option{-ms}.
15793
15794 @item -ms2600
15795 @opindex ms2600
15796 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
15797
15798 @item -mexr
15799 @opindex mexr
15800 Extended registers are stored on stack before execution of function
15801 with monitor attribute. Default option is @option{-mexr}.
15802 This option is valid only for H8S targets.
15803
15804 @item -mno-exr
15805 @opindex mno-exr
15806 Extended registers are not stored on stack before execution of function 
15807 with monitor attribute. Default option is @option{-mno-exr}. 
15808 This option is valid only for H8S targets.
15809
15810 @item -mint32
15811 @opindex mint32
15812 Make @code{int} data 32 bits by default.
15813
15814 @item -malign-300
15815 @opindex malign-300
15816 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
15817 The default for the H8/300H and H8S is to align longs and floats on
15818 4-byte boundaries.
15819 @option{-malign-300} causes them to be aligned on 2-byte boundaries.
15820 This option has no effect on the H8/300.
15821 @end table
15822
15823 @node HPPA Options
15824 @subsection HPPA Options
15825 @cindex HPPA Options
15826
15827 These @samp{-m} options are defined for the HPPA family of computers:
15828
15829 @table @gcctabopt
15830 @item -march=@var{architecture-type}
15831 @opindex march
15832 Generate code for the specified architecture.  The choices for
15833 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
15834 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
15835 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
15836 architecture option for your machine.  Code compiled for lower numbered
15837 architectures runs on higher numbered architectures, but not the
15838 other way around.
15839
15840 @item -mpa-risc-1-0
15841 @itemx -mpa-risc-1-1
15842 @itemx -mpa-risc-2-0
15843 @opindex mpa-risc-1-0
15844 @opindex mpa-risc-1-1
15845 @opindex mpa-risc-2-0
15846 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
15847
15848 @item -mjump-in-delay
15849 @opindex mjump-in-delay
15850 This option is ignored and provided for compatibility purposes only.
15851
15852 @item -mdisable-fpregs
15853 @opindex mdisable-fpregs
15854 Prevent floating-point registers from being used in any manner.  This is
15855 necessary for compiling kernels that perform lazy context switching of
15856 floating-point registers.  If you use this option and attempt to perform
15857 floating-point operations, the compiler aborts.
15858
15859 @item -mdisable-indexing
15860 @opindex mdisable-indexing
15861 Prevent the compiler from using indexing address modes.  This avoids some
15862 rather obscure problems when compiling MIG generated code under MACH@.
15863
15864 @item -mno-space-regs
15865 @opindex mno-space-regs
15866 Generate code that assumes the target has no space registers.  This allows
15867 GCC to generate faster indirect calls and use unscaled index address modes.
15868
15869 Such code is suitable for level 0 PA systems and kernels.
15870
15871 @item -mfast-indirect-calls
15872 @opindex mfast-indirect-calls
15873 Generate code that assumes calls never cross space boundaries.  This
15874 allows GCC to emit code that performs faster indirect calls.
15875
15876 This option does not work in the presence of shared libraries or nested
15877 functions.
15878
15879 @item -mfixed-range=@var{register-range}
15880 @opindex mfixed-range
15881 Generate code treating the given register range as fixed registers.
15882 A fixed register is one that the register allocator cannot use.  This is
15883 useful when compiling kernel code.  A register range is specified as
15884 two registers separated by a dash.  Multiple register ranges can be
15885 specified separated by a comma.
15886
15887 @item -mlong-load-store
15888 @opindex mlong-load-store
15889 Generate 3-instruction load and store sequences as sometimes required by
15890 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
15891 the HP compilers.
15892
15893 @item -mportable-runtime
15894 @opindex mportable-runtime
15895 Use the portable calling conventions proposed by HP for ELF systems.
15896
15897 @item -mgas
15898 @opindex mgas
15899 Enable the use of assembler directives only GAS understands.
15900
15901 @item -mschedule=@var{cpu-type}
15902 @opindex mschedule
15903 Schedule code according to the constraints for the machine type
15904 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
15905 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
15906 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
15907 proper scheduling option for your machine.  The default scheduling is
15908 @samp{8000}.
15909
15910 @item -mlinker-opt
15911 @opindex mlinker-opt
15912 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
15913 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
15914 linkers in which they give bogus error messages when linking some programs.
15915
15916 @item -msoft-float
15917 @opindex msoft-float
15918 Generate output containing library calls for floating point.
15919 @strong{Warning:} the requisite libraries are not available for all HPPA
15920 targets.  Normally the facilities of the machine's usual C compiler are
15921 used, but this cannot be done directly in cross-compilation.  You must make
15922 your own arrangements to provide suitable library functions for
15923 cross-compilation.
15924
15925 @option{-msoft-float} changes the calling convention in the output file;
15926 therefore, it is only useful if you compile @emph{all} of a program with
15927 this option.  In particular, you need to compile @file{libgcc.a}, the
15928 library that comes with GCC, with @option{-msoft-float} in order for
15929 this to work.
15930
15931 @item -msio
15932 @opindex msio
15933 Generate the predefine, @code{_SIO}, for server IO@.  The default is
15934 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
15935 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
15936 options are available under HP-UX and HI-UX@.
15937
15938 @item -mgnu-ld
15939 @opindex mgnu-ld
15940 Use options specific to GNU @command{ld}.
15941 This passes @option{-shared} to @command{ld} when
15942 building a shared library.  It is the default when GCC is configured,
15943 explicitly or implicitly, with the GNU linker.  This option does not
15944 affect which @command{ld} is called; it only changes what parameters
15945 are passed to that @command{ld}.
15946 The @command{ld} that is called is determined by the
15947 @option{--with-ld} configure option, GCC's program search path, and
15948 finally by the user's @env{PATH}.  The linker used by GCC can be printed
15949 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
15950 on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
15951
15952 @item -mhp-ld
15953 @opindex mhp-ld
15954 Use options specific to HP @command{ld}.
15955 This passes @option{-b} to @command{ld} when building
15956 a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
15957 links.  It is the default when GCC is configured, explicitly or
15958 implicitly, with the HP linker.  This option does not affect
15959 which @command{ld} is called; it only changes what parameters are passed to that
15960 @command{ld}.
15961 The @command{ld} that is called is determined by the @option{--with-ld}
15962 configure option, GCC's program search path, and finally by the user's
15963 @env{PATH}.  The linker used by GCC can be printed using @samp{which
15964 `gcc -print-prog-name=ld`}.  This option is only available on the 64-bit
15965 HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
15966
15967 @item -mlong-calls
15968 @opindex mno-long-calls
15969 Generate code that uses long call sequences.  This ensures that a call
15970 is always able to reach linker generated stubs.  The default is to generate
15971 long calls only when the distance from the call site to the beginning
15972 of the function or translation unit, as the case may be, exceeds a
15973 predefined limit set by the branch type being used.  The limits for
15974 normal calls are 7,600,000 and 240,000 bytes, respectively for the
15975 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
15976 240,000 bytes.
15977
15978 Distances are measured from the beginning of functions when using the
15979 @option{-ffunction-sections} option, or when using the @option{-mgas}
15980 and @option{-mno-portable-runtime} options together under HP-UX with
15981 the SOM linker.
15982
15983 It is normally not desirable to use this option as it degrades
15984 performance.  However, it may be useful in large applications,
15985 particularly when partial linking is used to build the application.
15986
15987 The types of long calls used depends on the capabilities of the
15988 assembler and linker, and the type of code being generated.  The
15989 impact on systems that support long absolute calls, and long pic
15990 symbol-difference or pc-relative calls should be relatively small.
15991 However, an indirect call is used on 32-bit ELF systems in pic code
15992 and it is quite long.
15993
15994 @item -munix=@var{unix-std}
15995 @opindex march
15996 Generate compiler predefines and select a startfile for the specified
15997 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
15998 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
15999 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
16000 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
16001 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
16002 and later.
16003
16004 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
16005 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
16006 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
16007 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
16008 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
16009 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
16010
16011 It is @emph{important} to note that this option changes the interfaces
16012 for various library routines.  It also affects the operational behavior
16013 of the C library.  Thus, @emph{extreme} care is needed in using this
16014 option.
16015
16016 Library code that is intended to operate with more than one UNIX
16017 standard must test, set and restore the variable @code{__xpg4_extended_mask}
16018 as appropriate.  Most GNU software doesn't provide this capability.
16019
16020 @item -nolibdld
16021 @opindex nolibdld
16022 Suppress the generation of link options to search libdld.sl when the
16023 @option{-static} option is specified on HP-UX 10 and later.
16024
16025 @item -static
16026 @opindex static
16027 The HP-UX implementation of setlocale in libc has a dependency on
16028 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
16029 when the @option{-static} option is specified, special link options
16030 are needed to resolve this dependency.
16031
16032 On HP-UX 10 and later, the GCC driver adds the necessary options to
16033 link with libdld.sl when the @option{-static} option is specified.
16034 This causes the resulting binary to be dynamic.  On the 64-bit port,
16035 the linkers generate dynamic binaries by default in any case.  The
16036 @option{-nolibdld} option can be used to prevent the GCC driver from
16037 adding these link options.
16038
16039 @item -threads
16040 @opindex threads
16041 Add support for multithreading with the @dfn{dce thread} library
16042 under HP-UX@.  This option sets flags for both the preprocessor and
16043 linker.
16044 @end table
16045
16046 @node IA-64 Options
16047 @subsection IA-64 Options
16048 @cindex IA-64 Options
16049
16050 These are the @samp{-m} options defined for the Intel IA-64 architecture.
16051
16052 @table @gcctabopt
16053 @item -mbig-endian
16054 @opindex mbig-endian
16055 Generate code for a big-endian target.  This is the default for HP-UX@.
16056
16057 @item -mlittle-endian
16058 @opindex mlittle-endian
16059 Generate code for a little-endian target.  This is the default for AIX5
16060 and GNU/Linux.
16061
16062 @item -mgnu-as
16063 @itemx -mno-gnu-as
16064 @opindex mgnu-as
16065 @opindex mno-gnu-as
16066 Generate (or don't) code for the GNU assembler.  This is the default.
16067 @c Also, this is the default if the configure option @option{--with-gnu-as}
16068 @c is used.
16069
16070 @item -mgnu-ld
16071 @itemx -mno-gnu-ld
16072 @opindex mgnu-ld
16073 @opindex mno-gnu-ld
16074 Generate (or don't) code for the GNU linker.  This is the default.
16075 @c Also, this is the default if the configure option @option{--with-gnu-ld}
16076 @c is used.
16077
16078 @item -mno-pic
16079 @opindex mno-pic
16080 Generate code that does not use a global pointer register.  The result
16081 is not position independent code, and violates the IA-64 ABI@.
16082
16083 @item -mvolatile-asm-stop
16084 @itemx -mno-volatile-asm-stop
16085 @opindex mvolatile-asm-stop
16086 @opindex mno-volatile-asm-stop
16087 Generate (or don't) a stop bit immediately before and after volatile asm
16088 statements.
16089
16090 @item -mregister-names
16091 @itemx -mno-register-names
16092 @opindex mregister-names
16093 @opindex mno-register-names
16094 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
16095 the stacked registers.  This may make assembler output more readable.
16096
16097 @item -mno-sdata
16098 @itemx -msdata
16099 @opindex mno-sdata
16100 @opindex msdata
16101 Disable (or enable) optimizations that use the small data section.  This may
16102 be useful for working around optimizer bugs.
16103
16104 @item -mconstant-gp
16105 @opindex mconstant-gp
16106 Generate code that uses a single constant global pointer value.  This is
16107 useful when compiling kernel code.
16108
16109 @item -mauto-pic
16110 @opindex mauto-pic
16111 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
16112 This is useful when compiling firmware code.
16113
16114 @item -minline-float-divide-min-latency
16115 @opindex minline-float-divide-min-latency
16116 Generate code for inline divides of floating-point values
16117 using the minimum latency algorithm.
16118
16119 @item -minline-float-divide-max-throughput
16120 @opindex minline-float-divide-max-throughput
16121 Generate code for inline divides of floating-point values
16122 using the maximum throughput algorithm.
16123
16124 @item -mno-inline-float-divide
16125 @opindex mno-inline-float-divide
16126 Do not generate inline code for divides of floating-point values.
16127
16128 @item -minline-int-divide-min-latency
16129 @opindex minline-int-divide-min-latency
16130 Generate code for inline divides of integer values
16131 using the minimum latency algorithm.
16132
16133 @item -minline-int-divide-max-throughput
16134 @opindex minline-int-divide-max-throughput
16135 Generate code for inline divides of integer values
16136 using the maximum throughput algorithm.
16137
16138 @item -mno-inline-int-divide
16139 @opindex mno-inline-int-divide
16140 Do not generate inline code for divides of integer values.
16141
16142 @item -minline-sqrt-min-latency
16143 @opindex minline-sqrt-min-latency
16144 Generate code for inline square roots
16145 using the minimum latency algorithm.
16146
16147 @item -minline-sqrt-max-throughput
16148 @opindex minline-sqrt-max-throughput
16149 Generate code for inline square roots
16150 using the maximum throughput algorithm.
16151
16152 @item -mno-inline-sqrt
16153 @opindex mno-inline-sqrt
16154 Do not generate inline code for @code{sqrt}.
16155
16156 @item -mfused-madd
16157 @itemx -mno-fused-madd
16158 @opindex mfused-madd
16159 @opindex mno-fused-madd
16160 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
16161 instructions.  The default is to use these instructions.
16162
16163 @item -mno-dwarf2-asm
16164 @itemx -mdwarf2-asm
16165 @opindex mno-dwarf2-asm
16166 @opindex mdwarf2-asm
16167 Don't (or do) generate assembler code for the DWARF 2 line number debugging
16168 info.  This may be useful when not using the GNU assembler.
16169
16170 @item -mearly-stop-bits
16171 @itemx -mno-early-stop-bits
16172 @opindex mearly-stop-bits
16173 @opindex mno-early-stop-bits
16174 Allow stop bits to be placed earlier than immediately preceding the
16175 instruction that triggered the stop bit.  This can improve instruction
16176 scheduling, but does not always do so.
16177
16178 @item -mfixed-range=@var{register-range}
16179 @opindex mfixed-range
16180 Generate code treating the given register range as fixed registers.
16181 A fixed register is one that the register allocator cannot use.  This is
16182 useful when compiling kernel code.  A register range is specified as
16183 two registers separated by a dash.  Multiple register ranges can be
16184 specified separated by a comma.
16185
16186 @item -mtls-size=@var{tls-size}
16187 @opindex mtls-size
16188 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
16189 64.
16190
16191 @item -mtune=@var{cpu-type}
16192 @opindex mtune
16193 Tune the instruction scheduling for a particular CPU, Valid values are
16194 @samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
16195 and @samp{mckinley}.
16196
16197 @item -milp32
16198 @itemx -mlp64
16199 @opindex milp32
16200 @opindex mlp64
16201 Generate code for a 32-bit or 64-bit environment.
16202 The 32-bit environment sets int, long and pointer to 32 bits.
16203 The 64-bit environment sets int to 32 bits and long and pointer
16204 to 64 bits.  These are HP-UX specific flags.
16205
16206 @item -mno-sched-br-data-spec
16207 @itemx -msched-br-data-spec
16208 @opindex mno-sched-br-data-spec
16209 @opindex msched-br-data-spec
16210 (Dis/En)able data speculative scheduling before reload.
16211 This results in generation of @code{ld.a} instructions and
16212 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
16213 The default is 'disable'.
16214
16215 @item -msched-ar-data-spec
16216 @itemx -mno-sched-ar-data-spec
16217 @opindex msched-ar-data-spec
16218 @opindex mno-sched-ar-data-spec
16219 (En/Dis)able data speculative scheduling after reload.
16220 This results in generation of @code{ld.a} instructions and
16221 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
16222 The default is 'enable'.
16223
16224 @item -mno-sched-control-spec
16225 @itemx -msched-control-spec
16226 @opindex mno-sched-control-spec
16227 @opindex msched-control-spec
16228 (Dis/En)able control speculative scheduling.  This feature is
16229 available only during region scheduling (i.e.@: before reload).
16230 This results in generation of the @code{ld.s} instructions and
16231 the corresponding check instructions @code{chk.s}.
16232 The default is 'disable'.
16233
16234 @item -msched-br-in-data-spec
16235 @itemx -mno-sched-br-in-data-spec
16236 @opindex msched-br-in-data-spec
16237 @opindex mno-sched-br-in-data-spec
16238 (En/Dis)able speculative scheduling of the instructions that
16239 are dependent on the data speculative loads before reload.
16240 This is effective only with @option{-msched-br-data-spec} enabled.
16241 The default is 'enable'.
16242
16243 @item -msched-ar-in-data-spec
16244 @itemx -mno-sched-ar-in-data-spec
16245 @opindex msched-ar-in-data-spec
16246 @opindex mno-sched-ar-in-data-spec
16247 (En/Dis)able speculative scheduling of the instructions that
16248 are dependent on the data speculative loads after reload.
16249 This is effective only with @option{-msched-ar-data-spec} enabled.
16250 The default is 'enable'.
16251
16252 @item -msched-in-control-spec
16253 @itemx -mno-sched-in-control-spec
16254 @opindex msched-in-control-spec
16255 @opindex mno-sched-in-control-spec
16256 (En/Dis)able speculative scheduling of the instructions that
16257 are dependent on the control speculative loads.
16258 This is effective only with @option{-msched-control-spec} enabled.
16259 The default is 'enable'.
16260
16261 @item -mno-sched-prefer-non-data-spec-insns
16262 @itemx -msched-prefer-non-data-spec-insns
16263 @opindex mno-sched-prefer-non-data-spec-insns
16264 @opindex msched-prefer-non-data-spec-insns
16265 If enabled, data-speculative instructions are chosen for schedule
16266 only if there are no other choices at the moment.  This makes
16267 the use of the data speculation much more conservative.
16268 The default is 'disable'.
16269
16270 @item -mno-sched-prefer-non-control-spec-insns
16271 @itemx -msched-prefer-non-control-spec-insns
16272 @opindex mno-sched-prefer-non-control-spec-insns
16273 @opindex msched-prefer-non-control-spec-insns
16274 If enabled, control-speculative instructions are chosen for schedule
16275 only if there are no other choices at the moment.  This makes
16276 the use of the control speculation much more conservative.
16277 The default is 'disable'.
16278
16279 @item -mno-sched-count-spec-in-critical-path
16280 @itemx -msched-count-spec-in-critical-path
16281 @opindex mno-sched-count-spec-in-critical-path
16282 @opindex msched-count-spec-in-critical-path
16283 If enabled, speculative dependencies are considered during
16284 computation of the instructions priorities.  This makes the use of the
16285 speculation a bit more conservative.
16286 The default is 'disable'.
16287
16288 @item -msched-spec-ldc
16289 @opindex msched-spec-ldc
16290 Use a simple data speculation check.  This option is on by default.
16291
16292 @item -msched-control-spec-ldc
16293 @opindex msched-spec-ldc
16294 Use a simple check for control speculation.  This option is on by default.
16295
16296 @item -msched-stop-bits-after-every-cycle
16297 @opindex msched-stop-bits-after-every-cycle
16298 Place a stop bit after every cycle when scheduling.  This option is on
16299 by default.
16300
16301 @item -msched-fp-mem-deps-zero-cost
16302 @opindex msched-fp-mem-deps-zero-cost
16303 Assume that floating-point stores and loads are not likely to cause a conflict
16304 when placed into the same instruction group.  This option is disabled by
16305 default.
16306
16307 @item -msel-sched-dont-check-control-spec
16308 @opindex msel-sched-dont-check-control-spec
16309 Generate checks for control speculation in selective scheduling.
16310 This flag is disabled by default.
16311
16312 @item -msched-max-memory-insns=@var{max-insns}
16313 @opindex msched-max-memory-insns
16314 Limit on the number of memory insns per instruction group, giving lower
16315 priority to subsequent memory insns attempting to schedule in the same
16316 instruction group. Frequently useful to prevent cache bank conflicts.
16317 The default value is 1.
16318
16319 @item -msched-max-memory-insns-hard-limit
16320 @opindex msched-max-memory-insns-hard-limit
16321 Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
16322 disallowing more than that number in an instruction group.
16323 Otherwise, the limit is ``soft'', meaning that non-memory operations
16324 are preferred when the limit is reached, but memory operations may still
16325 be scheduled.
16326
16327 @end table
16328
16329 @node LM32 Options
16330 @subsection LM32 Options
16331 @cindex LM32 options
16332
16333 These @option{-m} options are defined for the LatticeMico32 architecture:
16334
16335 @table @gcctabopt
16336 @item -mbarrel-shift-enabled
16337 @opindex mbarrel-shift-enabled
16338 Enable barrel-shift instructions.
16339
16340 @item -mdivide-enabled
16341 @opindex mdivide-enabled
16342 Enable divide and modulus instructions.
16343
16344 @item -mmultiply-enabled
16345 @opindex multiply-enabled
16346 Enable multiply instructions.
16347
16348 @item -msign-extend-enabled
16349 @opindex msign-extend-enabled
16350 Enable sign extend instructions.
16351
16352 @item -muser-enabled
16353 @opindex muser-enabled
16354 Enable user-defined instructions.
16355
16356 @end table
16357
16358 @node M32C Options
16359 @subsection M32C Options
16360 @cindex M32C options
16361
16362 @table @gcctabopt
16363 @item -mcpu=@var{name}
16364 @opindex mcpu=
16365 Select the CPU for which code is generated.  @var{name} may be one of
16366 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
16367 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
16368 the M32C/80 series.
16369
16370 @item -msim
16371 @opindex msim
16372 Specifies that the program will be run on the simulator.  This causes
16373 an alternate runtime library to be linked in which supports, for
16374 example, file I/O@.  You must not use this option when generating
16375 programs that will run on real hardware; you must provide your own
16376 runtime library for whatever I/O functions are needed.
16377
16378 @item -memregs=@var{number}
16379 @opindex memregs=
16380 Specifies the number of memory-based pseudo-registers GCC uses
16381 during code generation.  These pseudo-registers are used like real
16382 registers, so there is a tradeoff between GCC's ability to fit the
16383 code into available registers, and the performance penalty of using
16384 memory instead of registers.  Note that all modules in a program must
16385 be compiled with the same value for this option.  Because of that, you
16386 must not use this option with GCC's default runtime libraries.
16387
16388 @end table
16389
16390 @node M32R/D Options
16391 @subsection M32R/D Options
16392 @cindex M32R/D options
16393
16394 These @option{-m} options are defined for Renesas M32R/D architectures:
16395
16396 @table @gcctabopt
16397 @item -m32r2
16398 @opindex m32r2
16399 Generate code for the M32R/2@.
16400
16401 @item -m32rx
16402 @opindex m32rx
16403 Generate code for the M32R/X@.
16404
16405 @item -m32r
16406 @opindex m32r
16407 Generate code for the M32R@.  This is the default.
16408
16409 @item -mmodel=small
16410 @opindex mmodel=small
16411 Assume all objects live in the lower 16MB of memory (so that their addresses
16412 can be loaded with the @code{ld24} instruction), and assume all subroutines
16413 are reachable with the @code{bl} instruction.
16414 This is the default.
16415
16416 The addressability of a particular object can be set with the
16417 @code{model} attribute.
16418
16419 @item -mmodel=medium
16420 @opindex mmodel=medium
16421 Assume objects may be anywhere in the 32-bit address space (the compiler
16422 generates @code{seth/add3} instructions to load their addresses), and
16423 assume all subroutines are reachable with the @code{bl} instruction.
16424
16425 @item -mmodel=large
16426 @opindex mmodel=large
16427 Assume objects may be anywhere in the 32-bit address space (the compiler
16428 generates @code{seth/add3} instructions to load their addresses), and
16429 assume subroutines may not be reachable with the @code{bl} instruction
16430 (the compiler generates the much slower @code{seth/add3/jl}
16431 instruction sequence).
16432
16433 @item -msdata=none
16434 @opindex msdata=none
16435 Disable use of the small data area.  Variables are put into
16436 one of @code{.data}, @code{.bss}, or @code{.rodata} (unless the
16437 @code{section} attribute has been specified).
16438 This is the default.
16439
16440 The small data area consists of sections @code{.sdata} and @code{.sbss}.
16441 Objects may be explicitly put in the small data area with the
16442 @code{section} attribute using one of these sections.
16443
16444 @item -msdata=sdata
16445 @opindex msdata=sdata
16446 Put small global and static data in the small data area, but do not
16447 generate special code to reference them.
16448
16449 @item -msdata=use
16450 @opindex msdata=use
16451 Put small global and static data in the small data area, and generate
16452 special instructions to reference them.
16453
16454 @item -G @var{num}
16455 @opindex G
16456 @cindex smaller data references
16457 Put global and static objects less than or equal to @var{num} bytes
16458 into the small data or BSS sections instead of the normal data or BSS
16459 sections.  The default value of @var{num} is 8.
16460 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
16461 for this option to have any effect.
16462
16463 All modules should be compiled with the same @option{-G @var{num}} value.
16464 Compiling with different values of @var{num} may or may not work; if it
16465 doesn't the linker gives an error message---incorrect code is not
16466 generated.
16467
16468 @item -mdebug
16469 @opindex mdebug
16470 Makes the M32R-specific code in the compiler display some statistics
16471 that might help in debugging programs.
16472
16473 @item -malign-loops
16474 @opindex malign-loops
16475 Align all loops to a 32-byte boundary.
16476
16477 @item -mno-align-loops
16478 @opindex mno-align-loops
16479 Do not enforce a 32-byte alignment for loops.  This is the default.
16480
16481 @item -missue-rate=@var{number}
16482 @opindex missue-rate=@var{number}
16483 Issue @var{number} instructions per cycle.  @var{number} can only be 1
16484 or 2.
16485
16486 @item -mbranch-cost=@var{number}
16487 @opindex mbranch-cost=@var{number}
16488 @var{number} can only be 1 or 2.  If it is 1 then branches are
16489 preferred over conditional code, if it is 2, then the opposite applies.
16490
16491 @item -mflush-trap=@var{number}
16492 @opindex mflush-trap=@var{number}
16493 Specifies the trap number to use to flush the cache.  The default is
16494 12.  Valid numbers are between 0 and 15 inclusive.
16495
16496 @item -mno-flush-trap
16497 @opindex mno-flush-trap
16498 Specifies that the cache cannot be flushed by using a trap.
16499
16500 @item -mflush-func=@var{name}
16501 @opindex mflush-func=@var{name}
16502 Specifies the name of the operating system function to call to flush
16503 the cache.  The default is @samp{_flush_cache}, but a function call
16504 is only used if a trap is not available.
16505
16506 @item -mno-flush-func
16507 @opindex mno-flush-func
16508 Indicates that there is no OS function for flushing the cache.
16509
16510 @end table
16511
16512 @node M680x0 Options
16513 @subsection M680x0 Options
16514 @cindex M680x0 options
16515
16516 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
16517 The default settings depend on which architecture was selected when
16518 the compiler was configured; the defaults for the most common choices
16519 are given below.
16520
16521 @table @gcctabopt
16522 @item -march=@var{arch}
16523 @opindex march
16524 Generate code for a specific M680x0 or ColdFire instruction set
16525 architecture.  Permissible values of @var{arch} for M680x0
16526 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
16527 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
16528 architectures are selected according to Freescale's ISA classification
16529 and the permissible values are: @samp{isaa}, @samp{isaaplus},
16530 @samp{isab} and @samp{isac}.
16531
16532 GCC defines a macro @code{__mcf@var{arch}__} whenever it is generating
16533 code for a ColdFire target.  The @var{arch} in this macro is one of the
16534 @option{-march} arguments given above.
16535
16536 When used together, @option{-march} and @option{-mtune} select code
16537 that runs on a family of similar processors but that is optimized
16538 for a particular microarchitecture.
16539
16540 @item -mcpu=@var{cpu}
16541 @opindex mcpu
16542 Generate code for a specific M680x0 or ColdFire processor.
16543 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
16544 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
16545 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
16546 below, which also classifies the CPUs into families:
16547
16548 @multitable @columnfractions 0.20 0.80
16549 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
16550 @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}
16551 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
16552 @item @samp{5206e} @tab @samp{5206e}
16553 @item @samp{5208} @tab @samp{5207} @samp{5208}
16554 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
16555 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
16556 @item @samp{5216} @tab @samp{5214} @samp{5216}
16557 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
16558 @item @samp{5225} @tab @samp{5224} @samp{5225}
16559 @item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
16560 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
16561 @item @samp{5249} @tab @samp{5249}
16562 @item @samp{5250} @tab @samp{5250}
16563 @item @samp{5271} @tab @samp{5270} @samp{5271}
16564 @item @samp{5272} @tab @samp{5272}
16565 @item @samp{5275} @tab @samp{5274} @samp{5275}
16566 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
16567 @item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
16568 @item @samp{5307} @tab @samp{5307}
16569 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
16570 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
16571 @item @samp{5407} @tab @samp{5407}
16572 @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}
16573 @end multitable
16574
16575 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
16576 @var{arch} is compatible with @var{cpu}.  Other combinations of
16577 @option{-mcpu} and @option{-march} are rejected.
16578
16579 GCC defines the macro @code{__mcf_cpu_@var{cpu}} when ColdFire target
16580 @var{cpu} is selected.  It also defines @code{__mcf_family_@var{family}},
16581 where the value of @var{family} is given by the table above.
16582
16583 @item -mtune=@var{tune}
16584 @opindex mtune
16585 Tune the code for a particular microarchitecture within the
16586 constraints set by @option{-march} and @option{-mcpu}.
16587 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
16588 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
16589 and @samp{cpu32}.  The ColdFire microarchitectures
16590 are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
16591
16592 You can also use @option{-mtune=68020-40} for code that needs
16593 to run relatively well on 68020, 68030 and 68040 targets.
16594 @option{-mtune=68020-60} is similar but includes 68060 targets
16595 as well.  These two options select the same tuning decisions as
16596 @option{-m68020-40} and @option{-m68020-60} respectively.
16597
16598 GCC defines the macros @code{__mc@var{arch}} and @code{__mc@var{arch}__}
16599 when tuning for 680x0 architecture @var{arch}.  It also defines
16600 @code{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
16601 option is used.  If GCC is tuning for a range of architectures,
16602 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
16603 it defines the macros for every architecture in the range.
16604
16605 GCC also defines the macro @code{__m@var{uarch}__} when tuning for
16606 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
16607 of the arguments given above.
16608
16609 @item -m68000
16610 @itemx -mc68000
16611 @opindex m68000
16612 @opindex mc68000
16613 Generate output for a 68000.  This is the default
16614 when the compiler is configured for 68000-based systems.
16615 It is equivalent to @option{-march=68000}.
16616
16617 Use this option for microcontrollers with a 68000 or EC000 core,
16618 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16619
16620 @item -m68010
16621 @opindex m68010
16622 Generate output for a 68010.  This is the default
16623 when the compiler is configured for 68010-based systems.
16624 It is equivalent to @option{-march=68010}.
16625
16626 @item -m68020
16627 @itemx -mc68020
16628 @opindex m68020
16629 @opindex mc68020
16630 Generate output for a 68020.  This is the default
16631 when the compiler is configured for 68020-based systems.
16632 It is equivalent to @option{-march=68020}.
16633
16634 @item -m68030
16635 @opindex m68030
16636 Generate output for a 68030.  This is the default when the compiler is
16637 configured for 68030-based systems.  It is equivalent to
16638 @option{-march=68030}.
16639
16640 @item -m68040
16641 @opindex m68040
16642 Generate output for a 68040.  This is the default when the compiler is
16643 configured for 68040-based systems.  It is equivalent to
16644 @option{-march=68040}.
16645
16646 This option inhibits the use of 68881/68882 instructions that have to be
16647 emulated by software on the 68040.  Use this option if your 68040 does not
16648 have code to emulate those instructions.
16649
16650 @item -m68060
16651 @opindex m68060
16652 Generate output for a 68060.  This is the default when the compiler is
16653 configured for 68060-based systems.  It is equivalent to
16654 @option{-march=68060}.
16655
16656 This option inhibits the use of 68020 and 68881/68882 instructions that
16657 have to be emulated by software on the 68060.  Use this option if your 68060
16658 does not have code to emulate those instructions.
16659
16660 @item -mcpu32
16661 @opindex mcpu32
16662 Generate output for a CPU32.  This is the default
16663 when the compiler is configured for CPU32-based systems.
16664 It is equivalent to @option{-march=cpu32}.
16665
16666 Use this option for microcontrollers with a
16667 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
16668 68336, 68340, 68341, 68349 and 68360.
16669
16670 @item -m5200
16671 @opindex m5200
16672 Generate output for a 520X ColdFire CPU@.  This is the default
16673 when the compiler is configured for 520X-based systems.
16674 It is equivalent to @option{-mcpu=5206}, and is now deprecated
16675 in favor of that option.
16676
16677 Use this option for microcontroller with a 5200 core, including
16678 the MCF5202, MCF5203, MCF5204 and MCF5206.
16679
16680 @item -m5206e
16681 @opindex m5206e
16682 Generate output for a 5206e ColdFire CPU@.  The option is now
16683 deprecated in favor of the equivalent @option{-mcpu=5206e}.
16684
16685 @item -m528x
16686 @opindex m528x
16687 Generate output for a member of the ColdFire 528X family.
16688 The option is now deprecated in favor of the equivalent
16689 @option{-mcpu=528x}.
16690
16691 @item -m5307
16692 @opindex m5307
16693 Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
16694 in favor of the equivalent @option{-mcpu=5307}.
16695
16696 @item -m5407
16697 @opindex m5407
16698 Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
16699 in favor of the equivalent @option{-mcpu=5407}.
16700
16701 @item -mcfv4e
16702 @opindex mcfv4e
16703 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
16704 This includes use of hardware floating-point instructions.
16705 The option is equivalent to @option{-mcpu=547x}, and is now
16706 deprecated in favor of that option.
16707
16708 @item -m68020-40
16709 @opindex m68020-40
16710 Generate output for a 68040, without using any of the new instructions.
16711 This results in code that can run relatively efficiently on either a
16712 68020/68881 or a 68030 or a 68040.  The generated code does use the
16713 68881 instructions that are emulated on the 68040.
16714
16715 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
16716
16717 @item -m68020-60
16718 @opindex m68020-60
16719 Generate output for a 68060, without using any of the new instructions.
16720 This results in code that can run relatively efficiently on either a
16721 68020/68881 or a 68030 or a 68040.  The generated code does use the
16722 68881 instructions that are emulated on the 68060.
16723
16724 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
16725
16726 @item -mhard-float
16727 @itemx -m68881
16728 @opindex mhard-float
16729 @opindex m68881
16730 Generate floating-point instructions.  This is the default for 68020
16731 and above, and for ColdFire devices that have an FPU@.  It defines the
16732 macro @code{__HAVE_68881__} on M680x0 targets and @code{__mcffpu__}
16733 on ColdFire targets.
16734
16735 @item -msoft-float
16736 @opindex msoft-float
16737 Do not generate floating-point instructions; use library calls instead.
16738 This is the default for 68000, 68010, and 68832 targets.  It is also
16739 the default for ColdFire devices that have no FPU.
16740
16741 @item -mdiv
16742 @itemx -mno-div
16743 @opindex mdiv
16744 @opindex mno-div
16745 Generate (do not generate) ColdFire hardware divide and remainder
16746 instructions.  If @option{-march} is used without @option{-mcpu},
16747 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
16748 architectures.  Otherwise, the default is taken from the target CPU
16749 (either the default CPU, or the one specified by @option{-mcpu}).  For
16750 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
16751 @option{-mcpu=5206e}.
16752
16753 GCC defines the macro @code{__mcfhwdiv__} when this option is enabled.
16754
16755 @item -mshort
16756 @opindex mshort
16757 Consider type @code{int} to be 16 bits wide, like @code{short int}.
16758 Additionally, parameters passed on the stack are also aligned to a
16759 16-bit boundary even on targets whose API mandates promotion to 32-bit.
16760
16761 @item -mno-short
16762 @opindex mno-short
16763 Do not consider type @code{int} to be 16 bits wide.  This is the default.
16764
16765 @item -mnobitfield
16766 @itemx -mno-bitfield
16767 @opindex mnobitfield
16768 @opindex mno-bitfield
16769 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
16770 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
16771
16772 @item -mbitfield
16773 @opindex mbitfield
16774 Do use the bit-field instructions.  The @option{-m68020} option implies
16775 @option{-mbitfield}.  This is the default if you use a configuration
16776 designed for a 68020.
16777
16778 @item -mrtd
16779 @opindex mrtd
16780 Use a different function-calling convention, in which functions
16781 that take a fixed number of arguments return with the @code{rtd}
16782 instruction, which pops their arguments while returning.  This
16783 saves one instruction in the caller since there is no need to pop
16784 the arguments there.
16785
16786 This calling convention is incompatible with the one normally
16787 used on Unix, so you cannot use it if you need to call libraries
16788 compiled with the Unix compiler.
16789
16790 Also, you must provide function prototypes for all functions that
16791 take variable numbers of arguments (including @code{printf});
16792 otherwise incorrect code is generated for calls to those
16793 functions.
16794
16795 In addition, seriously incorrect code results if you call a
16796 function with too many arguments.  (Normally, extra arguments are
16797 harmlessly ignored.)
16798
16799 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
16800 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
16801
16802 @item -mno-rtd
16803 @opindex mno-rtd
16804 Do not use the calling conventions selected by @option{-mrtd}.
16805 This is the default.
16806
16807 @item -malign-int
16808 @itemx -mno-align-int
16809 @opindex malign-int
16810 @opindex mno-align-int
16811 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
16812 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
16813 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
16814 Aligning variables on 32-bit boundaries produces code that runs somewhat
16815 faster on processors with 32-bit busses at the expense of more memory.
16816
16817 @strong{Warning:} if you use the @option{-malign-int} switch, GCC
16818 aligns structures containing the above types differently than
16819 most published application binary interface specifications for the m68k.
16820
16821 @item -mpcrel
16822 @opindex mpcrel
16823 Use the pc-relative addressing mode of the 68000 directly, instead of
16824 using a global offset table.  At present, this option implies @option{-fpic},
16825 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
16826 not presently supported with @option{-mpcrel}, though this could be supported for
16827 68020 and higher processors.
16828
16829 @item -mno-strict-align
16830 @itemx -mstrict-align
16831 @opindex mno-strict-align
16832 @opindex mstrict-align
16833 Do not (do) assume that unaligned memory references are handled by
16834 the system.
16835
16836 @item -msep-data
16837 Generate code that allows the data segment to be located in a different
16838 area of memory from the text segment.  This allows for execute-in-place in
16839 an environment without virtual memory management.  This option implies
16840 @option{-fPIC}.
16841
16842 @item -mno-sep-data
16843 Generate code that assumes that the data segment follows the text segment.
16844 This is the default.
16845
16846 @item -mid-shared-library
16847 Generate code that supports shared libraries via the library ID method.
16848 This allows for execute-in-place and shared libraries in an environment
16849 without virtual memory management.  This option implies @option{-fPIC}.
16850
16851 @item -mno-id-shared-library
16852 Generate code that doesn't assume ID-based shared libraries are being used.
16853 This is the default.
16854
16855 @item -mshared-library-id=n
16856 Specifies the identification number of the ID-based shared library being
16857 compiled.  Specifying a value of 0 generates more compact code; specifying
16858 other values forces the allocation of that number to the current
16859 library, but is no more space- or time-efficient than omitting this option.
16860
16861 @item -mxgot
16862 @itemx -mno-xgot
16863 @opindex mxgot
16864 @opindex mno-xgot
16865 When generating position-independent code for ColdFire, generate code
16866 that works if the GOT has more than 8192 entries.  This code is
16867 larger and slower than code generated without this option.  On M680x0
16868 processors, this option is not needed; @option{-fPIC} suffices.
16869
16870 GCC normally uses a single instruction to load values from the GOT@.
16871 While this is relatively efficient, it only works if the GOT
16872 is smaller than about 64k.  Anything larger causes the linker
16873 to report an error such as:
16874
16875 @cindex relocation truncated to fit (ColdFire)
16876 @smallexample
16877 relocation truncated to fit: R_68K_GOT16O foobar
16878 @end smallexample
16879
16880 If this happens, you should recompile your code with @option{-mxgot}.
16881 It should then work with very large GOTs.  However, code generated with
16882 @option{-mxgot} is less efficient, since it takes 4 instructions to fetch
16883 the value of a global symbol.
16884
16885 Note that some linkers, including newer versions of the GNU linker,
16886 can create multiple GOTs and sort GOT entries.  If you have such a linker,
16887 you should only need to use @option{-mxgot} when compiling a single
16888 object file that accesses more than 8192 GOT entries.  Very few do.
16889
16890 These options have no effect unless GCC is generating
16891 position-independent code.
16892
16893 @end table
16894
16895 @node MCore Options
16896 @subsection MCore Options
16897 @cindex MCore options
16898
16899 These are the @samp{-m} options defined for the Motorola M*Core
16900 processors.
16901
16902 @table @gcctabopt
16903
16904 @item -mhardlit
16905 @itemx -mno-hardlit
16906 @opindex mhardlit
16907 @opindex mno-hardlit
16908 Inline constants into the code stream if it can be done in two
16909 instructions or less.
16910
16911 @item -mdiv
16912 @itemx -mno-div
16913 @opindex mdiv
16914 @opindex mno-div
16915 Use the divide instruction.  (Enabled by default).
16916
16917 @item -mrelax-immediate
16918 @itemx -mno-relax-immediate
16919 @opindex mrelax-immediate
16920 @opindex mno-relax-immediate
16921 Allow arbitrary-sized immediates in bit operations.
16922
16923 @item -mwide-bitfields
16924 @itemx -mno-wide-bitfields
16925 @opindex mwide-bitfields
16926 @opindex mno-wide-bitfields
16927 Always treat bit-fields as @code{int}-sized.
16928
16929 @item -m4byte-functions
16930 @itemx -mno-4byte-functions
16931 @opindex m4byte-functions
16932 @opindex mno-4byte-functions
16933 Force all functions to be aligned to a 4-byte boundary.
16934
16935 @item -mcallgraph-data
16936 @itemx -mno-callgraph-data
16937 @opindex mcallgraph-data
16938 @opindex mno-callgraph-data
16939 Emit callgraph information.
16940
16941 @item -mslow-bytes
16942 @itemx -mno-slow-bytes
16943 @opindex mslow-bytes
16944 @opindex mno-slow-bytes
16945 Prefer word access when reading byte quantities.
16946
16947 @item -mlittle-endian
16948 @itemx -mbig-endian
16949 @opindex mlittle-endian
16950 @opindex mbig-endian
16951 Generate code for a little-endian target.
16952
16953 @item -m210
16954 @itemx -m340
16955 @opindex m210
16956 @opindex m340
16957 Generate code for the 210 processor.
16958
16959 @item -mno-lsim
16960 @opindex mno-lsim
16961 Assume that runtime support has been provided and so omit the
16962 simulator library (@file{libsim.a)} from the linker command line.
16963
16964 @item -mstack-increment=@var{size}
16965 @opindex mstack-increment
16966 Set the maximum amount for a single stack increment operation.  Large
16967 values can increase the speed of programs that contain functions
16968 that need a large amount of stack space, but they can also trigger a
16969 segmentation fault if the stack is extended too much.  The default
16970 value is 0x1000.
16971
16972 @end table
16973
16974 @node MeP Options
16975 @subsection MeP Options
16976 @cindex MeP options
16977
16978 @table @gcctabopt
16979
16980 @item -mabsdiff
16981 @opindex mabsdiff
16982 Enables the @code{abs} instruction, which is the absolute difference
16983 between two registers.
16984
16985 @item -mall-opts
16986 @opindex mall-opts
16987 Enables all the optional instructions---average, multiply, divide, bit
16988 operations, leading zero, absolute difference, min/max, clip, and
16989 saturation.
16990
16991
16992 @item -maverage
16993 @opindex maverage
16994 Enables the @code{ave} instruction, which computes the average of two
16995 registers.
16996
16997 @item -mbased=@var{n}
16998 @opindex mbased=
16999 Variables of size @var{n} bytes or smaller are placed in the
17000 @code{.based} section by default.  Based variables use the @code{$tp}
17001 register as a base register, and there is a 128-byte limit to the
17002 @code{.based} section.
17003
17004 @item -mbitops
17005 @opindex mbitops
17006 Enables the bit operation instructions---bit test (@code{btstm}), set
17007 (@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
17008 test-and-set (@code{tas}).
17009
17010 @item -mc=@var{name}
17011 @opindex mc=
17012 Selects which section constant data is placed in.  @var{name} may
17013 be @samp{tiny}, @samp{near}, or @samp{far}.
17014
17015 @item -mclip
17016 @opindex mclip
17017 Enables the @code{clip} instruction.  Note that @option{-mclip} is not
17018 useful unless you also provide @option{-mminmax}.
17019
17020 @item -mconfig=@var{name}
17021 @opindex mconfig=
17022 Selects one of the built-in core configurations.  Each MeP chip has
17023 one or more modules in it; each module has a core CPU and a variety of
17024 coprocessors, optional instructions, and peripherals.  The
17025 @code{MeP-Integrator} tool, not part of GCC, provides these
17026 configurations through this option; using this option is the same as
17027 using all the corresponding command-line options.  The default
17028 configuration is @samp{default}.
17029
17030 @item -mcop
17031 @opindex mcop
17032 Enables the coprocessor instructions.  By default, this is a 32-bit
17033 coprocessor.  Note that the coprocessor is normally enabled via the
17034 @option{-mconfig=} option.
17035
17036 @item -mcop32
17037 @opindex mcop32
17038 Enables the 32-bit coprocessor's instructions.
17039
17040 @item -mcop64
17041 @opindex mcop64
17042 Enables the 64-bit coprocessor's instructions.
17043
17044 @item -mivc2
17045 @opindex mivc2
17046 Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
17047
17048 @item -mdc
17049 @opindex mdc
17050 Causes constant variables to be placed in the @code{.near} section.
17051
17052 @item -mdiv
17053 @opindex mdiv
17054 Enables the @code{div} and @code{divu} instructions.
17055
17056 @item -meb
17057 @opindex meb
17058 Generate big-endian code.
17059
17060 @item -mel
17061 @opindex mel
17062 Generate little-endian code.
17063
17064 @item -mio-volatile
17065 @opindex mio-volatile
17066 Tells the compiler that any variable marked with the @code{io}
17067 attribute is to be considered volatile.
17068
17069 @item -ml
17070 @opindex ml
17071 Causes variables to be assigned to the @code{.far} section by default.
17072
17073 @item -mleadz
17074 @opindex mleadz
17075 Enables the @code{leadz} (leading zero) instruction.
17076
17077 @item -mm
17078 @opindex mm
17079 Causes variables to be assigned to the @code{.near} section by default.
17080
17081 @item -mminmax
17082 @opindex mminmax
17083 Enables the @code{min} and @code{max} instructions.
17084
17085 @item -mmult
17086 @opindex mmult
17087 Enables the multiplication and multiply-accumulate instructions.
17088
17089 @item -mno-opts
17090 @opindex mno-opts
17091 Disables all the optional instructions enabled by @option{-mall-opts}.
17092
17093 @item -mrepeat
17094 @opindex mrepeat
17095 Enables the @code{repeat} and @code{erepeat} instructions, used for
17096 low-overhead looping.
17097
17098 @item -ms
17099 @opindex ms
17100 Causes all variables to default to the @code{.tiny} section.  Note
17101 that there is a 65536-byte limit to this section.  Accesses to these
17102 variables use the @code{%gp} base register.
17103
17104 @item -msatur
17105 @opindex msatur
17106 Enables the saturation instructions.  Note that the compiler does not
17107 currently generate these itself, but this option is included for
17108 compatibility with other tools, like @code{as}.
17109
17110 @item -msdram
17111 @opindex msdram
17112 Link the SDRAM-based runtime instead of the default ROM-based runtime.
17113
17114 @item -msim
17115 @opindex msim
17116 Link the simulator run-time libraries.
17117
17118 @item -msimnovec
17119 @opindex msimnovec
17120 Link the simulator runtime libraries, excluding built-in support
17121 for reset and exception vectors and tables.
17122
17123 @item -mtf
17124 @opindex mtf
17125 Causes all functions to default to the @code{.far} section.  Without
17126 this option, functions default to the @code{.near} section.
17127
17128 @item -mtiny=@var{n}
17129 @opindex mtiny=
17130 Variables that are @var{n} bytes or smaller are allocated to the
17131 @code{.tiny} section.  These variables use the @code{$gp} base
17132 register.  The default for this option is 4, but note that there's a
17133 65536-byte limit to the @code{.tiny} section.
17134
17135 @end table
17136
17137 @node MicroBlaze Options
17138 @subsection MicroBlaze Options
17139 @cindex MicroBlaze Options
17140
17141 @table @gcctabopt
17142
17143 @item -msoft-float
17144 @opindex msoft-float
17145 Use software emulation for floating point (default).
17146
17147 @item -mhard-float
17148 @opindex mhard-float
17149 Use hardware floating-point instructions.
17150
17151 @item -mmemcpy
17152 @opindex mmemcpy
17153 Do not optimize block moves, use @code{memcpy}.
17154
17155 @item -mno-clearbss
17156 @opindex mno-clearbss
17157 This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.
17158
17159 @item -mcpu=@var{cpu-type}
17160 @opindex mcpu=
17161 Use features of, and schedule code for, the given CPU.
17162 Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
17163 where @var{X} is a major version, @var{YY} is the minor version, and
17164 @var{Z} is compatibility code.  Example values are @samp{v3.00.a},
17165 @samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}.
17166
17167 @item -mxl-soft-mul
17168 @opindex mxl-soft-mul
17169 Use software multiply emulation (default).
17170
17171 @item -mxl-soft-div
17172 @opindex mxl-soft-div
17173 Use software emulation for divides (default).
17174
17175 @item -mxl-barrel-shift
17176 @opindex mxl-barrel-shift
17177 Use the hardware barrel shifter.
17178
17179 @item -mxl-pattern-compare
17180 @opindex mxl-pattern-compare
17181 Use pattern compare instructions.
17182
17183 @item -msmall-divides
17184 @opindex msmall-divides
17185 Use table lookup optimization for small signed integer divisions.
17186
17187 @item -mxl-stack-check
17188 @opindex mxl-stack-check
17189 This option is deprecated.  Use @option{-fstack-check} instead.
17190
17191 @item -mxl-gp-opt
17192 @opindex mxl-gp-opt
17193 Use GP-relative @code{.sdata}/@code{.sbss} sections.
17194
17195 @item -mxl-multiply-high
17196 @opindex mxl-multiply-high
17197 Use multiply high instructions for high part of 32x32 multiply.
17198
17199 @item -mxl-float-convert
17200 @opindex mxl-float-convert
17201 Use hardware floating-point conversion instructions.
17202
17203 @item -mxl-float-sqrt
17204 @opindex mxl-float-sqrt
17205 Use hardware floating-point square root instruction.
17206
17207 @item -mbig-endian
17208 @opindex mbig-endian
17209 Generate code for a big-endian target.
17210
17211 @item -mlittle-endian
17212 @opindex mlittle-endian
17213 Generate code for a little-endian target.
17214
17215 @item -mxl-reorder
17216 @opindex mxl-reorder
17217 Use reorder instructions (swap and byte reversed load/store).
17218
17219 @item -mxl-mode-@var{app-model}
17220 Select application model @var{app-model}.  Valid models are
17221 @table @samp
17222 @item executable
17223 normal executable (default), uses startup code @file{crt0.o}.
17224
17225 @item xmdstub
17226 for use with Xilinx Microprocessor Debugger (XMD) based
17227 software intrusive debug agent called xmdstub. This uses startup file
17228 @file{crt1.o} and sets the start address of the program to 0x800.
17229
17230 @item bootstrap
17231 for applications that are loaded using a bootloader.
17232 This model uses startup file @file{crt2.o} which does not contain a processor
17233 reset vector handler. This is suitable for transferring control on a
17234 processor reset to the bootloader rather than the application.
17235
17236 @item novectors
17237 for applications that do not require any of the
17238 MicroBlaze vectors. This option may be useful for applications running
17239 within a monitoring application. This model uses @file{crt3.o} as a startup file.
17240 @end table
17241
17242 Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
17243 @option{-mxl-mode-@var{app-model}}.
17244
17245 @end table
17246
17247 @node MIPS Options
17248 @subsection MIPS Options
17249 @cindex MIPS options
17250
17251 @table @gcctabopt
17252
17253 @item -EB
17254 @opindex EB
17255 Generate big-endian code.
17256
17257 @item -EL
17258 @opindex EL
17259 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
17260 configurations.
17261
17262 @item -march=@var{arch}
17263 @opindex march
17264 Generate code that runs on @var{arch}, which can be the name of a
17265 generic MIPS ISA, or the name of a particular processor.
17266 The ISA names are:
17267 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
17268 @samp{mips32}, @samp{mips32r2}, @samp{mips32r3}, @samp{mips32r5},
17269 @samp{mips32r6}, @samp{mips64}, @samp{mips64r2}, @samp{mips64r3},
17270 @samp{mips64r5} and @samp{mips64r6}.
17271 The processor names are:
17272 @samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
17273 @samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
17274 @samp{5kc}, @samp{5kf},
17275 @samp{20kc},
17276 @samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
17277 @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
17278 @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, @samp{34kn},
17279 @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
17280 @samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
17281 @samp{i6400},
17282 @samp{interaptiv},
17283 @samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a},
17284 @samp{m4k},
17285 @samp{m14k}, @samp{m14kc}, @samp{m14ke}, @samp{m14kec},
17286 @samp{m5100}, @samp{m5101},
17287 @samp{octeon}, @samp{octeon+}, @samp{octeon2}, @samp{octeon3},
17288 @samp{orion},
17289 @samp{p5600},
17290 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
17291 @samp{r4600}, @samp{r4650}, @samp{r4700}, @samp{r6000}, @samp{r8000},
17292 @samp{rm7000}, @samp{rm9000},
17293 @samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
17294 @samp{sb1},
17295 @samp{sr71000},
17296 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
17297 @samp{vr5000}, @samp{vr5400}, @samp{vr5500},
17298 @samp{xlr} and @samp{xlp}.
17299 The special value @samp{from-abi} selects the
17300 most compatible architecture for the selected ABI (that is,
17301 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
17302
17303 The native Linux/GNU toolchain also supports the value @samp{native},
17304 which selects the best architecture option for the host processor.
17305 @option{-march=native} has no effect if GCC does not recognize
17306 the processor.
17307
17308 In processor names, a final @samp{000} can be abbreviated as @samp{k}
17309 (for example, @option{-march=r2k}).  Prefixes are optional, and
17310 @samp{vr} may be written @samp{r}.
17311
17312 Names of the form @samp{@var{n}f2_1} refer to processors with
17313 FPUs clocked at half the rate of the core, names of the form
17314 @samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
17315 rate as the core, and names of the form @samp{@var{n}f3_2} refer to
17316 processors with FPUs clocked a ratio of 3:2 with respect to the core.
17317 For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
17318 for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
17319 accepted as synonyms for @samp{@var{n}f1_1}.
17320
17321 GCC defines two macros based on the value of this option.  The first
17322 is @code{_MIPS_ARCH}, which gives the name of target architecture, as
17323 a string.  The second has the form @code{_MIPS_ARCH_@var{foo}},
17324 where @var{foo} is the capitalized value of @code{_MIPS_ARCH}@.
17325 For example, @option{-march=r2000} sets @code{_MIPS_ARCH}
17326 to @code{"r2000"} and defines the macro @code{_MIPS_ARCH_R2000}.
17327
17328 Note that the @code{_MIPS_ARCH} macro uses the processor names given
17329 above.  In other words, it has the full prefix and does not
17330 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
17331 the macro names the resolved architecture (either @code{"mips1"} or
17332 @code{"mips3"}).  It names the default architecture when no
17333 @option{-march} option is given.
17334
17335 @item -mtune=@var{arch}
17336 @opindex mtune
17337 Optimize for @var{arch}.  Among other things, this option controls
17338 the way instructions are scheduled, and the perceived cost of arithmetic
17339 operations.  The list of @var{arch} values is the same as for
17340 @option{-march}.
17341
17342 When this option is not used, GCC optimizes for the processor
17343 specified by @option{-march}.  By using @option{-march} and
17344 @option{-mtune} together, it is possible to generate code that
17345 runs on a family of processors, but optimize the code for one
17346 particular member of that family.
17347
17348 @option{-mtune} defines the macros @code{_MIPS_TUNE} and
17349 @code{_MIPS_TUNE_@var{foo}}, which work in the same way as the
17350 @option{-march} ones described above.
17351
17352 @item -mips1
17353 @opindex mips1
17354 Equivalent to @option{-march=mips1}.
17355
17356 @item -mips2
17357 @opindex mips2
17358 Equivalent to @option{-march=mips2}.
17359
17360 @item -mips3
17361 @opindex mips3
17362 Equivalent to @option{-march=mips3}.
17363
17364 @item -mips4
17365 @opindex mips4
17366 Equivalent to @option{-march=mips4}.
17367
17368 @item -mips32
17369 @opindex mips32
17370 Equivalent to @option{-march=mips32}.
17371
17372 @item -mips32r3
17373 @opindex mips32r3
17374 Equivalent to @option{-march=mips32r3}.
17375
17376 @item -mips32r5
17377 @opindex mips32r5
17378 Equivalent to @option{-march=mips32r5}.
17379
17380 @item -mips32r6
17381 @opindex mips32r6
17382 Equivalent to @option{-march=mips32r6}.
17383
17384 @item -mips64
17385 @opindex mips64
17386 Equivalent to @option{-march=mips64}.
17387
17388 @item -mips64r2
17389 @opindex mips64r2
17390 Equivalent to @option{-march=mips64r2}.
17391
17392 @item -mips64r3
17393 @opindex mips64r3
17394 Equivalent to @option{-march=mips64r3}.
17395
17396 @item -mips64r5
17397 @opindex mips64r5
17398 Equivalent to @option{-march=mips64r5}.
17399
17400 @item -mips64r6
17401 @opindex mips64r6
17402 Equivalent to @option{-march=mips64r6}.
17403
17404 @item -mips16
17405 @itemx -mno-mips16
17406 @opindex mips16
17407 @opindex mno-mips16
17408 Generate (do not generate) MIPS16 code.  If GCC is targeting a
17409 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.
17410
17411 MIPS16 code generation can also be controlled on a per-function basis
17412 by means of @code{mips16} and @code{nomips16} attributes.
17413 @xref{Function Attributes}, for more information.
17414
17415 @item -mflip-mips16
17416 @opindex mflip-mips16
17417 Generate MIPS16 code on alternating functions.  This option is provided
17418 for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
17419 not intended for ordinary use in compiling user code.
17420
17421 @item -minterlink-compressed
17422 @item -mno-interlink-compressed
17423 @opindex minterlink-compressed
17424 @opindex mno-interlink-compressed
17425 Require (do not require) that code using the standard (uncompressed) MIPS ISA
17426 be link-compatible with MIPS16 and microMIPS code, and vice versa.
17427
17428 For example, code using the standard ISA encoding cannot jump directly
17429 to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
17430 @option{-minterlink-compressed} therefore disables direct jumps unless GCC
17431 knows that the target of the jump is not compressed.
17432
17433 @item -minterlink-mips16
17434 @itemx -mno-interlink-mips16
17435 @opindex minterlink-mips16
17436 @opindex mno-interlink-mips16
17437 Aliases of @option{-minterlink-compressed} and
17438 @option{-mno-interlink-compressed}.  These options predate the microMIPS ASE
17439 and are retained for backwards compatibility.
17440
17441 @item -mabi=32
17442 @itemx -mabi=o64
17443 @itemx -mabi=n32
17444 @itemx -mabi=64
17445 @itemx -mabi=eabi
17446 @opindex mabi=32
17447 @opindex mabi=o64
17448 @opindex mabi=n32
17449 @opindex mabi=64
17450 @opindex mabi=eabi
17451 Generate code for the given ABI@.
17452
17453 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
17454 generates 64-bit code when you select a 64-bit architecture, but you
17455 can use @option{-mgp32} to get 32-bit code instead.
17456
17457 For information about the O64 ABI, see
17458 @uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.
17459
17460 GCC supports a variant of the o32 ABI in which floating-point registers
17461 are 64 rather than 32 bits wide.  You can select this combination with
17462 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
17463 and @code{mfhc1} instructions and is therefore only supported for
17464 MIPS32R2, MIPS32R3 and MIPS32R5 processors.
17465
17466 The register assignments for arguments and return values remain the
17467 same, but each scalar value is passed in a single 64-bit register
17468 rather than a pair of 32-bit registers.  For example, scalar
17469 floating-point values are returned in @samp{$f0} only, not a
17470 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
17471 remains the same in that the even-numbered double-precision registers
17472 are saved.
17473
17474 Two additional variants of the o32 ABI are supported to enable
17475 a transition from 32-bit to 64-bit registers.  These are FPXX
17476 (@option{-mfpxx}) and FP64A (@option{-mfp64} @option{-mno-odd-spreg}).
17477 The FPXX extension mandates that all code must execute correctly
17478 when run using 32-bit or 64-bit registers.  The code can be interlinked
17479 with either FP32 or FP64, but not both.
17480 The FP64A extension is similar to the FP64 extension but forbids the
17481 use of odd-numbered single-precision registers.  This can be used
17482 in conjunction with the @code{FRE} mode of FPUs in MIPS32R5
17483 processors and allows both FP32 and FP64A code to interlink and
17484 run in the same process without changing FPU modes.
17485
17486 @item -mabicalls
17487 @itemx -mno-abicalls
17488 @opindex mabicalls
17489 @opindex mno-abicalls
17490 Generate (do not generate) code that is suitable for SVR4-style
17491 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
17492 systems.
17493
17494 @item -mshared
17495 @itemx -mno-shared
17496 Generate (do not generate) code that is fully position-independent,
17497 and that can therefore be linked into shared libraries.  This option
17498 only affects @option{-mabicalls}.
17499
17500 All @option{-mabicalls} code has traditionally been position-independent,
17501 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
17502 as an extension, the GNU toolchain allows executables to use absolute
17503 accesses for locally-binding symbols.  It can also use shorter GP
17504 initialization sequences and generate direct calls to locally-defined
17505 functions.  This mode is selected by @option{-mno-shared}.
17506
17507 @option{-mno-shared} depends on binutils 2.16 or higher and generates
17508 objects that can only be linked by the GNU linker.  However, the option
17509 does not affect the ABI of the final executable; it only affects the ABI
17510 of relocatable objects.  Using @option{-mno-shared} generally makes
17511 executables both smaller and quicker.
17512
17513 @option{-mshared} is the default.
17514
17515 @item -mplt
17516 @itemx -mno-plt
17517 @opindex mplt
17518 @opindex mno-plt
17519 Assume (do not assume) that the static and dynamic linkers
17520 support PLTs and copy relocations.  This option only affects
17521 @option{-mno-shared -mabicalls}.  For the n64 ABI, this option
17522 has no effect without @option{-msym32}.
17523
17524 You can make @option{-mplt} the default by configuring
17525 GCC with @option{--with-mips-plt}.  The default is
17526 @option{-mno-plt} otherwise.
17527
17528 @item -mxgot
17529 @itemx -mno-xgot
17530 @opindex mxgot
17531 @opindex mno-xgot
17532 Lift (do not lift) the usual restrictions on the size of the global
17533 offset table.
17534
17535 GCC normally uses a single instruction to load values from the GOT@.
17536 While this is relatively efficient, it only works if the GOT
17537 is smaller than about 64k.  Anything larger causes the linker
17538 to report an error such as:
17539
17540 @cindex relocation truncated to fit (MIPS)
17541 @smallexample
17542 relocation truncated to fit: R_MIPS_GOT16 foobar
17543 @end smallexample
17544
17545 If this happens, you should recompile your code with @option{-mxgot}.
17546 This works with very large GOTs, although the code is also
17547 less efficient, since it takes three instructions to fetch the
17548 value of a global symbol.
17549
17550 Note that some linkers can create multiple GOTs.  If you have such a
17551 linker, you should only need to use @option{-mxgot} when a single object
17552 file accesses more than 64k's worth of GOT entries.  Very few do.
17553
17554 These options have no effect unless GCC is generating position
17555 independent code.
17556
17557 @item -mgp32
17558 @opindex mgp32
17559 Assume that general-purpose registers are 32 bits wide.
17560
17561 @item -mgp64
17562 @opindex mgp64
17563 Assume that general-purpose registers are 64 bits wide.
17564
17565 @item -mfp32
17566 @opindex mfp32
17567 Assume that floating-point registers are 32 bits wide.
17568
17569 @item -mfp64
17570 @opindex mfp64
17571 Assume that floating-point registers are 64 bits wide.
17572
17573 @item -mfpxx
17574 @opindex mfpxx
17575 Do not assume the width of floating-point registers.
17576
17577 @item -mhard-float
17578 @opindex mhard-float
17579 Use floating-point coprocessor instructions.
17580
17581 @item -msoft-float
17582 @opindex msoft-float
17583 Do not use floating-point coprocessor instructions.  Implement
17584 floating-point calculations using library calls instead.
17585
17586 @item -mno-float
17587 @opindex mno-float
17588 Equivalent to @option{-msoft-float}, but additionally asserts that the
17589 program being compiled does not perform any floating-point operations.
17590 This option is presently supported only by some bare-metal MIPS
17591 configurations, where it may select a special set of libraries
17592 that lack all floating-point support (including, for example, the
17593 floating-point @code{printf} formats).  
17594 If code compiled with @option{-mno-float} accidentally contains
17595 floating-point operations, it is likely to suffer a link-time
17596 or run-time failure.
17597
17598 @item -msingle-float
17599 @opindex msingle-float
17600 Assume that the floating-point coprocessor only supports single-precision
17601 operations.
17602
17603 @item -mdouble-float
17604 @opindex mdouble-float
17605 Assume that the floating-point coprocessor supports double-precision
17606 operations.  This is the default.
17607
17608 @item -modd-spreg
17609 @itemx -mno-odd-spreg
17610 @opindex modd-spreg
17611 @opindex mno-odd-spreg
17612 Enable the use of odd-numbered single-precision floating-point registers
17613 for the o32 ABI.  This is the default for processors that are known to
17614 support these registers.  When using the o32 FPXX ABI, @option{-mno-odd-spreg}
17615 is set by default.
17616
17617 @item -mabs=2008
17618 @itemx -mabs=legacy
17619 @opindex mabs=2008
17620 @opindex mabs=legacy
17621 These options control the treatment of the special not-a-number (NaN)
17622 IEEE 754 floating-point data with the @code{abs.@i{fmt}} and
17623 @code{neg.@i{fmt}} machine instructions.
17624
17625 By default or when @option{-mabs=legacy} is used the legacy
17626 treatment is selected.  In this case these instructions are considered
17627 arithmetic and avoided where correct operation is required and the
17628 input operand might be a NaN.  A longer sequence of instructions that
17629 manipulate the sign bit of floating-point datum manually is used
17630 instead unless the @option{-ffinite-math-only} option has also been
17631 specified.
17632
17633 The @option{-mabs=2008} option selects the IEEE 754-2008 treatment.  In
17634 this case these instructions are considered non-arithmetic and therefore
17635 operating correctly in all cases, including in particular where the
17636 input operand is a NaN.  These instructions are therefore always used
17637 for the respective operations.
17638
17639 @item -mnan=2008
17640 @itemx -mnan=legacy
17641 @opindex mnan=2008
17642 @opindex mnan=legacy
17643 These options control the encoding of the special not-a-number (NaN)
17644 IEEE 754 floating-point data.
17645
17646 The @option{-mnan=legacy} option selects the legacy encoding.  In this
17647 case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17648 significand field being 0, whereas signalling NaNs (sNaNs) are denoted
17649 by the first bit of their trailing significand field being 1.
17650
17651 The @option{-mnan=2008} option selects the IEEE 754-2008 encoding.  In
17652 this case qNaNs are denoted by the first bit of their trailing
17653 significand field being 1, whereas sNaNs are denoted by the first bit of
17654 their trailing significand field being 0.
17655
17656 The default is @option{-mnan=legacy} unless GCC has been configured with
17657 @option{--with-nan=2008}.
17658
17659 @item -mllsc
17660 @itemx -mno-llsc
17661 @opindex mllsc
17662 @opindex mno-llsc
17663 Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
17664 implement atomic memory built-in functions.  When neither option is
17665 specified, GCC uses the instructions if the target architecture
17666 supports them.
17667
17668 @option{-mllsc} is useful if the runtime environment can emulate the
17669 instructions and @option{-mno-llsc} can be useful when compiling for
17670 nonstandard ISAs.  You can make either option the default by
17671 configuring GCC with @option{--with-llsc} and @option{--without-llsc}
17672 respectively.  @option{--with-llsc} is the default for some
17673 configurations; see the installation documentation for details.
17674
17675 @item -mdsp
17676 @itemx -mno-dsp
17677 @opindex mdsp
17678 @opindex mno-dsp
17679 Use (do not use) revision 1 of the MIPS DSP ASE@.
17680 @xref{MIPS DSP Built-in Functions}.  This option defines the
17681 preprocessor macro @code{__mips_dsp}.  It also defines
17682 @code{__mips_dsp_rev} to 1.
17683
17684 @item -mdspr2
17685 @itemx -mno-dspr2
17686 @opindex mdspr2
17687 @opindex mno-dspr2
17688 Use (do not use) revision 2 of the MIPS DSP ASE@.
17689 @xref{MIPS DSP Built-in Functions}.  This option defines the
17690 preprocessor macros @code{__mips_dsp} and @code{__mips_dspr2}.
17691 It also defines @code{__mips_dsp_rev} to 2.
17692
17693 @item -msmartmips
17694 @itemx -mno-smartmips
17695 @opindex msmartmips
17696 @opindex mno-smartmips
17697 Use (do not use) the MIPS SmartMIPS ASE.
17698
17699 @item -mpaired-single
17700 @itemx -mno-paired-single
17701 @opindex mpaired-single
17702 @opindex mno-paired-single
17703 Use (do not use) paired-single floating-point instructions.
17704 @xref{MIPS Paired-Single Support}.  This option requires
17705 hardware floating-point support to be enabled.
17706
17707 @item -mdmx
17708 @itemx -mno-mdmx
17709 @opindex mdmx
17710 @opindex mno-mdmx
17711 Use (do not use) MIPS Digital Media Extension instructions.
17712 This option can only be used when generating 64-bit code and requires
17713 hardware floating-point support to be enabled.
17714
17715 @item -mips3d
17716 @itemx -mno-mips3d
17717 @opindex mips3d
17718 @opindex mno-mips3d
17719 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
17720 The option @option{-mips3d} implies @option{-mpaired-single}.
17721
17722 @item -mmicromips
17723 @itemx -mno-micromips
17724 @opindex mmicromips
17725 @opindex mno-mmicromips
17726 Generate (do not generate) microMIPS code.
17727
17728 MicroMIPS code generation can also be controlled on a per-function basis
17729 by means of @code{micromips} and @code{nomicromips} attributes.
17730 @xref{Function Attributes}, for more information.
17731
17732 @item -mmt
17733 @itemx -mno-mt
17734 @opindex mmt
17735 @opindex mno-mt
17736 Use (do not use) MT Multithreading instructions.
17737
17738 @item -mmcu
17739 @itemx -mno-mcu
17740 @opindex mmcu
17741 @opindex mno-mcu
17742 Use (do not use) the MIPS MCU ASE instructions.
17743
17744 @item -meva
17745 @itemx -mno-eva
17746 @opindex meva
17747 @opindex mno-eva
17748 Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17749
17750 @item -mvirt
17751 @itemx -mno-virt
17752 @opindex mvirt
17753 @opindex mno-virt
17754 Use (do not use) the MIPS Virtualization Application Specific instructions.
17755
17756 @item -mxpa
17757 @itemx -mno-xpa
17758 @opindex mxpa
17759 @opindex mno-xpa
17760 Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.
17761
17762 @item -mlong64
17763 @opindex mlong64
17764 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
17765 an explanation of the default and the way that the pointer size is
17766 determined.
17767
17768 @item -mlong32
17769 @opindex mlong32
17770 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
17771
17772 The default size of @code{int}s, @code{long}s and pointers depends on
17773 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
17774 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
17775 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
17776 or the same size as integer registers, whichever is smaller.
17777
17778 @item -msym32
17779 @itemx -mno-sym32
17780 @opindex msym32
17781 @opindex mno-sym32
17782 Assume (do not assume) that all symbols have 32-bit values, regardless
17783 of the selected ABI@.  This option is useful in combination with
17784 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
17785 to generate shorter and faster references to symbolic addresses.
17786
17787 @item -G @var{num}
17788 @opindex G
17789 Put definitions of externally-visible data in a small data section
17790 if that data is no bigger than @var{num} bytes.  GCC can then generate
17791 more efficient accesses to the data; see @option{-mgpopt} for details.
17792
17793 The default @option{-G} option depends on the configuration.
17794
17795 @item -mlocal-sdata
17796 @itemx -mno-local-sdata
17797 @opindex mlocal-sdata
17798 @opindex mno-local-sdata
17799 Extend (do not extend) the @option{-G} behavior to local data too,
17800 such as to static variables in C@.  @option{-mlocal-sdata} is the
17801 default for all configurations.
17802
17803 If the linker complains that an application is using too much small data,
17804 you might want to try rebuilding the less performance-critical parts with
17805 @option{-mno-local-sdata}.  You might also want to build large
17806 libraries with @option{-mno-local-sdata}, so that the libraries leave
17807 more room for the main program.
17808
17809 @item -mextern-sdata
17810 @itemx -mno-extern-sdata
17811 @opindex mextern-sdata
17812 @opindex mno-extern-sdata
17813 Assume (do not assume) that externally-defined data is in
17814 a small data section if the size of that data is within the @option{-G} limit.
17815 @option{-mextern-sdata} is the default for all configurations.
17816
17817 If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
17818 @var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
17819 that is no bigger than @var{num} bytes, you must make sure that @var{Var}
17820 is placed in a small data section.  If @var{Var} is defined by another
17821 module, you must either compile that module with a high-enough
17822 @option{-G} setting or attach a @code{section} attribute to @var{Var}'s
17823 definition.  If @var{Var} is common, you must link the application
17824 with a high-enough @option{-G} setting.
17825
17826 The easiest way of satisfying these restrictions is to compile
17827 and link every module with the same @option{-G} option.  However,
17828 you may wish to build a library that supports several different
17829 small data limits.  You can do this by compiling the library with
17830 the highest supported @option{-G} setting and additionally using
17831 @option{-mno-extern-sdata} to stop the library from making assumptions
17832 about externally-defined data.
17833
17834 @item -mgpopt
17835 @itemx -mno-gpopt
17836 @opindex mgpopt
17837 @opindex mno-gpopt
17838 Use (do not use) GP-relative accesses for symbols that are known to be
17839 in a small data section; see @option{-G}, @option{-mlocal-sdata} and
17840 @option{-mextern-sdata}.  @option{-mgpopt} is the default for all
17841 configurations.
17842
17843 @option{-mno-gpopt} is useful for cases where the @code{$gp} register
17844 might not hold the value of @code{_gp}.  For example, if the code is
17845 part of a library that might be used in a boot monitor, programs that
17846 call boot monitor routines pass an unknown value in @code{$gp}.
17847 (In such situations, the boot monitor itself is usually compiled
17848 with @option{-G0}.)
17849
17850 @option{-mno-gpopt} implies @option{-mno-local-sdata} and
17851 @option{-mno-extern-sdata}.
17852
17853 @item -membedded-data
17854 @itemx -mno-embedded-data
17855 @opindex membedded-data
17856 @opindex mno-embedded-data
17857 Allocate variables to the read-only data section first if possible, then
17858 next in the small data section if possible, otherwise in data.  This gives
17859 slightly slower code than the default, but reduces the amount of RAM required
17860 when executing, and thus may be preferred for some embedded systems.
17861
17862 @item -muninit-const-in-rodata
17863 @itemx -mno-uninit-const-in-rodata
17864 @opindex muninit-const-in-rodata
17865 @opindex mno-uninit-const-in-rodata
17866 Put uninitialized @code{const} variables in the read-only data section.
17867 This option is only meaningful in conjunction with @option{-membedded-data}.
17868
17869 @item -mcode-readable=@var{setting}
17870 @opindex mcode-readable
17871 Specify whether GCC may generate code that reads from executable sections.
17872 There are three possible settings:
17873
17874 @table @gcctabopt
17875 @item -mcode-readable=yes
17876 Instructions may freely access executable sections.  This is the
17877 default setting.
17878
17879 @item -mcode-readable=pcrel
17880 MIPS16 PC-relative load instructions can access executable sections,
17881 but other instructions must not do so.  This option is useful on 4KSc
17882 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
17883 It is also useful on processors that can be configured to have a dual
17884 instruction/data SRAM interface and that, like the M4K, automatically
17885 redirect PC-relative loads to the instruction RAM.
17886
17887 @item -mcode-readable=no
17888 Instructions must not access executable sections.  This option can be
17889 useful on targets that are configured to have a dual instruction/data
17890 SRAM interface but that (unlike the M4K) do not automatically redirect
17891 PC-relative loads to the instruction RAM.
17892 @end table
17893
17894 @item -msplit-addresses
17895 @itemx -mno-split-addresses
17896 @opindex msplit-addresses
17897 @opindex mno-split-addresses
17898 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
17899 relocation operators.  This option has been superseded by
17900 @option{-mexplicit-relocs} but is retained for backwards compatibility.
17901
17902 @item -mexplicit-relocs
17903 @itemx -mno-explicit-relocs
17904 @opindex mexplicit-relocs
17905 @opindex mno-explicit-relocs
17906 Use (do not use) assembler relocation operators when dealing with symbolic
17907 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
17908 is to use assembler macros instead.
17909
17910 @option{-mexplicit-relocs} is the default if GCC was configured
17911 to use an assembler that supports relocation operators.
17912
17913 @item -mcheck-zero-division
17914 @itemx -mno-check-zero-division
17915 @opindex mcheck-zero-division
17916 @opindex mno-check-zero-division
17917 Trap (do not trap) on integer division by zero.
17918
17919 The default is @option{-mcheck-zero-division}.
17920
17921 @item -mdivide-traps
17922 @itemx -mdivide-breaks
17923 @opindex mdivide-traps
17924 @opindex mdivide-breaks
17925 MIPS systems check for division by zero by generating either a
17926 conditional trap or a break instruction.  Using traps results in
17927 smaller code, but is only supported on MIPS II and later.  Also, some
17928 versions of the Linux kernel have a bug that prevents trap from
17929 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
17930 allow conditional traps on architectures that support them and
17931 @option{-mdivide-breaks} to force the use of breaks.
17932
17933 The default is usually @option{-mdivide-traps}, but this can be
17934 overridden at configure time using @option{--with-divide=breaks}.
17935 Divide-by-zero checks can be completely disabled using
17936 @option{-mno-check-zero-division}.
17937
17938 @item -mmemcpy
17939 @itemx -mno-memcpy
17940 @opindex mmemcpy
17941 @opindex mno-memcpy
17942 Force (do not force) the use of @code{memcpy} for non-trivial block
17943 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
17944 most constant-sized copies.
17945
17946 @item -mlong-calls
17947 @itemx -mno-long-calls
17948 @opindex mlong-calls
17949 @opindex mno-long-calls
17950 Disable (do not disable) use of the @code{jal} instruction.  Calling
17951 functions using @code{jal} is more efficient but requires the caller
17952 and callee to be in the same 256 megabyte segment.
17953
17954 This option has no effect on abicalls code.  The default is
17955 @option{-mno-long-calls}.
17956
17957 @item -mmad
17958 @itemx -mno-mad
17959 @opindex mmad
17960 @opindex mno-mad
17961 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
17962 instructions, as provided by the R4650 ISA@.
17963
17964 @item -mimadd
17965 @itemx -mno-imadd
17966 @opindex mimadd
17967 @opindex mno-imadd
17968 Enable (disable) use of the @code{madd} and @code{msub} integer
17969 instructions.  The default is @option{-mimadd} on architectures
17970 that support @code{madd} and @code{msub} except for the 74k 
17971 architecture where it was found to generate slower code.
17972
17973 @item -mfused-madd
17974 @itemx -mno-fused-madd
17975 @opindex mfused-madd
17976 @opindex mno-fused-madd
17977 Enable (disable) use of the floating-point multiply-accumulate
17978 instructions, when they are available.  The default is
17979 @option{-mfused-madd}.
17980
17981 On the R8000 CPU when multiply-accumulate instructions are used,
17982 the intermediate product is calculated to infinite precision
17983 and is not subject to the FCSR Flush to Zero bit.  This may be
17984 undesirable in some circumstances.  On other processors the result
17985 is numerically identical to the equivalent computation using
17986 separate multiply, add, subtract and negate instructions.
17987
17988 @item -nocpp
17989 @opindex nocpp
17990 Tell the MIPS assembler to not run its preprocessor over user
17991 assembler files (with a @samp{.s} suffix) when assembling them.
17992
17993 @item -mfix-24k
17994 @item -mno-fix-24k
17995 @opindex mfix-24k
17996 @opindex mno-fix-24k
17997 Work around the 24K E48 (lost data on stores during refill) errata.
17998 The workarounds are implemented by the assembler rather than by GCC@.
17999
18000 @item -mfix-r4000
18001 @itemx -mno-fix-r4000
18002 @opindex mfix-r4000
18003 @opindex mno-fix-r4000
18004 Work around certain R4000 CPU errata:
18005 @itemize @minus
18006 @item
18007 A double-word or a variable shift may give an incorrect result if executed
18008 immediately after starting an integer division.
18009 @item
18010 A double-word or a variable shift may give an incorrect result if executed
18011 while an integer multiplication is in progress.
18012 @item
18013 An integer division may give an incorrect result if started in a delay slot
18014 of a taken branch or a jump.
18015 @end itemize
18016
18017 @item -mfix-r4400
18018 @itemx -mno-fix-r4400
18019 @opindex mfix-r4400
18020 @opindex mno-fix-r4400
18021 Work around certain R4400 CPU errata:
18022 @itemize @minus
18023 @item
18024 A double-word or a variable shift may give an incorrect result if executed
18025 immediately after starting an integer division.
18026 @end itemize
18027
18028 @item -mfix-r10000
18029 @itemx -mno-fix-r10000
18030 @opindex mfix-r10000
18031 @opindex mno-fix-r10000
18032 Work around certain R10000 errata:
18033 @itemize @minus
18034 @item
18035 @code{ll}/@code{sc} sequences may not behave atomically on revisions
18036 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
18037 @end itemize
18038
18039 This option can only be used if the target architecture supports
18040 branch-likely instructions.  @option{-mfix-r10000} is the default when
18041 @option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
18042 otherwise.
18043
18044 @item -mfix-rm7000
18045 @itemx -mno-fix-rm7000
18046 @opindex mfix-rm7000
18047 Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
18048 workarounds are implemented by the assembler rather than by GCC@.
18049
18050 @item -mfix-vr4120
18051 @itemx -mno-fix-vr4120
18052 @opindex mfix-vr4120
18053 Work around certain VR4120 errata:
18054 @itemize @minus
18055 @item
18056 @code{dmultu} does not always produce the correct result.
18057 @item
18058 @code{div} and @code{ddiv} do not always produce the correct result if one
18059 of the operands is negative.
18060 @end itemize
18061 The workarounds for the division errata rely on special functions in
18062 @file{libgcc.a}.  At present, these functions are only provided by
18063 the @code{mips64vr*-elf} configurations.
18064
18065 Other VR4120 errata require a NOP to be inserted between certain pairs of
18066 instructions.  These errata are handled by the assembler, not by GCC itself.
18067
18068 @item -mfix-vr4130
18069 @opindex mfix-vr4130
18070 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
18071 workarounds are implemented by the assembler rather than by GCC,
18072 although GCC avoids using @code{mflo} and @code{mfhi} if the
18073 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
18074 instructions are available instead.
18075
18076 @item -mfix-sb1
18077 @itemx -mno-fix-sb1
18078 @opindex mfix-sb1
18079 Work around certain SB-1 CPU core errata.
18080 (This flag currently works around the SB-1 revision 2
18081 ``F1'' and ``F2'' floating-point errata.)
18082
18083 @item -mr10k-cache-barrier=@var{setting}
18084 @opindex mr10k-cache-barrier
18085 Specify whether GCC should insert cache barriers to avoid the
18086 side-effects of speculation on R10K processors.
18087
18088 In common with many processors, the R10K tries to predict the outcome
18089 of a conditional branch and speculatively executes instructions from
18090 the ``taken'' branch.  It later aborts these instructions if the
18091 predicted outcome is wrong.  However, on the R10K, even aborted
18092 instructions can have side effects.
18093
18094 This problem only affects kernel stores and, depending on the system,
18095 kernel loads.  As an example, a speculatively-executed store may load
18096 the target memory into cache and mark the cache line as dirty, even if
18097 the store itself is later aborted.  If a DMA operation writes to the
18098 same area of memory before the ``dirty'' line is flushed, the cached
18099 data overwrites the DMA-ed data.  See the R10K processor manual
18100 for a full description, including other potential problems.
18101
18102 One workaround is to insert cache barrier instructions before every memory
18103 access that might be speculatively executed and that might have side
18104 effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
18105 controls GCC's implementation of this workaround.  It assumes that
18106 aborted accesses to any byte in the following regions does not have
18107 side effects:
18108
18109 @enumerate
18110 @item
18111 the memory occupied by the current function's stack frame;
18112
18113 @item
18114 the memory occupied by an incoming stack argument;
18115
18116 @item
18117 the memory occupied by an object with a link-time-constant address.
18118 @end enumerate
18119
18120 It is the kernel's responsibility to ensure that speculative
18121 accesses to these regions are indeed safe.
18122
18123 If the input program contains a function declaration such as:
18124
18125 @smallexample
18126 void foo (void);
18127 @end smallexample
18128
18129 then the implementation of @code{foo} must allow @code{j foo} and
18130 @code{jal foo} to be executed speculatively.  GCC honors this
18131 restriction for functions it compiles itself.  It expects non-GCC
18132 functions (such as hand-written assembly code) to do the same.
18133
18134 The option has three forms:
18135
18136 @table @gcctabopt
18137 @item -mr10k-cache-barrier=load-store
18138 Insert a cache barrier before a load or store that might be
18139 speculatively executed and that might have side effects even
18140 if aborted.
18141
18142 @item -mr10k-cache-barrier=store
18143 Insert a cache barrier before a store that might be speculatively
18144 executed and that might have side effects even if aborted.
18145
18146 @item -mr10k-cache-barrier=none
18147 Disable the insertion of cache barriers.  This is the default setting.
18148 @end table
18149
18150 @item -mflush-func=@var{func}
18151 @itemx -mno-flush-func
18152 @opindex mflush-func
18153 Specifies the function to call to flush the I and D caches, or to not
18154 call any such function.  If called, the function must take the same
18155 arguments as the common @code{_flush_func}, that is, the address of the
18156 memory range for which the cache is being flushed, the size of the
18157 memory range, and the number 3 (to flush both caches).  The default
18158 depends on the target GCC was configured for, but commonly is either
18159 @code{_flush_func} or @code{__cpu_flush}.
18160
18161 @item mbranch-cost=@var{num}
18162 @opindex mbranch-cost
18163 Set the cost of branches to roughly @var{num} ``simple'' instructions.
18164 This cost is only a heuristic and is not guaranteed to produce
18165 consistent results across releases.  A zero cost redundantly selects
18166 the default, which is based on the @option{-mtune} setting.
18167
18168 @item -mbranch-likely
18169 @itemx -mno-branch-likely
18170 @opindex mbranch-likely
18171 @opindex mno-branch-likely
18172 Enable or disable use of Branch Likely instructions, regardless of the
18173 default for the selected architecture.  By default, Branch Likely
18174 instructions may be generated if they are supported by the selected
18175 architecture.  An exception is for the MIPS32 and MIPS64 architectures
18176 and processors that implement those architectures; for those, Branch
18177 Likely instructions are not be generated by default because the MIPS32
18178 and MIPS64 architectures specifically deprecate their use.
18179
18180 @item -mcompact-branches=never
18181 @itemx -mcompact-branches=optimal
18182 @itemx -mcompact-branches=always
18183 @opindex mcompact-branches=never
18184 @opindex mcompact-branches=optimal
18185 @opindex mcompact-branches=always
18186 These options control which form of branches will be generated.  The
18187 default is @option{-mcompact-branches=optimal}.
18188
18189 The @option{-mcompact-branches=never} option ensures that compact branch
18190 instructions will never be generated.
18191
18192 The @option{-mcompact-branches=always} option ensures that a compact
18193 branch instruction will be generated if available.  If a compact branch
18194 instruction is not available, a delay slot form of the branch will be
18195 used instead.
18196
18197 This option is supported from MIPS Release 6 onwards.
18198
18199 The @option{-mcompact-branches=optimal} option will cause a delay slot
18200 branch to be used if one is available in the current ISA and the delay
18201 slot is successfully filled.  If the delay slot is not filled, a compact
18202 branch will be chosen if one is available.
18203
18204 @item -mfp-exceptions
18205 @itemx -mno-fp-exceptions
18206 @opindex mfp-exceptions
18207 Specifies whether FP exceptions are enabled.  This affects how
18208 FP instructions are scheduled for some processors.
18209 The default is that FP exceptions are
18210 enabled.
18211
18212 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
18213 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
18214 FP pipe.
18215
18216 @item -mvr4130-align
18217 @itemx -mno-vr4130-align
18218 @opindex mvr4130-align
18219 The VR4130 pipeline is two-way superscalar, but can only issue two
18220 instructions together if the first one is 8-byte aligned.  When this
18221 option is enabled, GCC aligns pairs of instructions that it
18222 thinks should execute in parallel.
18223
18224 This option only has an effect when optimizing for the VR4130.
18225 It normally makes code faster, but at the expense of making it bigger.
18226 It is enabled by default at optimization level @option{-O3}.
18227
18228 @item -msynci
18229 @itemx -mno-synci
18230 @opindex msynci
18231 Enable (disable) generation of @code{synci} instructions on
18232 architectures that support it.  The @code{synci} instructions (if
18233 enabled) are generated when @code{__builtin___clear_cache} is
18234 compiled.
18235
18236 This option defaults to @option{-mno-synci}, but the default can be
18237 overridden by configuring GCC with @option{--with-synci}.
18238
18239 When compiling code for single processor systems, it is generally safe
18240 to use @code{synci}.  However, on many multi-core (SMP) systems, it
18241 does not invalidate the instruction caches on all cores and may lead
18242 to undefined behavior.
18243
18244 @item -mrelax-pic-calls
18245 @itemx -mno-relax-pic-calls
18246 @opindex mrelax-pic-calls
18247 Try to turn PIC calls that are normally dispatched via register
18248 @code{$25} into direct calls.  This is only possible if the linker can
18249 resolve the destination at link-time and if the destination is within
18250 range for a direct call.
18251
18252 @option{-mrelax-pic-calls} is the default if GCC was configured to use
18253 an assembler and a linker that support the @code{.reloc} assembly
18254 directive and @option{-mexplicit-relocs} is in effect.  With
18255 @option{-mno-explicit-relocs}, this optimization can be performed by the
18256 assembler and the linker alone without help from the compiler.
18257
18258 @item -mmcount-ra-address
18259 @itemx -mno-mcount-ra-address
18260 @opindex mmcount-ra-address
18261 @opindex mno-mcount-ra-address
18262 Emit (do not emit) code that allows @code{_mcount} to modify the
18263 calling function's return address.  When enabled, this option extends
18264 the usual @code{_mcount} interface with a new @var{ra-address}
18265 parameter, which has type @code{intptr_t *} and is passed in register
18266 @code{$12}.  @code{_mcount} can then modify the return address by
18267 doing both of the following:
18268 @itemize
18269 @item
18270 Returning the new address in register @code{$31}.
18271 @item
18272 Storing the new address in @code{*@var{ra-address}},
18273 if @var{ra-address} is nonnull.
18274 @end itemize
18275
18276 The default is @option{-mno-mcount-ra-address}.
18277
18278 @item -mframe-header-opt
18279 @itemx -mno-frame-header-opt
18280 @opindex mframe-header-opt
18281 Enable (disable) frame header optimization in the o32 ABI.  When using the
18282 o32 ABI, calling functions will allocate 16 bytes on the stack for the called
18283 function to write out register arguments.  When enabled, this optimization
18284 will suppress the allocation of the frame header if it can be determined that
18285 it is unused.
18286
18287 This optimization is off by default at all optimization levels.
18288
18289 @end table
18290
18291 @node MMIX Options
18292 @subsection MMIX Options
18293 @cindex MMIX Options
18294
18295 These options are defined for the MMIX:
18296
18297 @table @gcctabopt
18298 @item -mlibfuncs
18299 @itemx -mno-libfuncs
18300 @opindex mlibfuncs
18301 @opindex mno-libfuncs
18302 Specify that intrinsic library functions are being compiled, passing all
18303 values in registers, no matter the size.
18304
18305 @item -mepsilon
18306 @itemx -mno-epsilon
18307 @opindex mepsilon
18308 @opindex mno-epsilon
18309 Generate floating-point comparison instructions that compare with respect
18310 to the @code{rE} epsilon register.
18311
18312 @item -mabi=mmixware
18313 @itemx -mabi=gnu
18314 @opindex mabi=mmixware
18315 @opindex mabi=gnu
18316 Generate code that passes function parameters and return values that (in
18317 the called function) are seen as registers @code{$0} and up, as opposed to
18318 the GNU ABI which uses global registers @code{$231} and up.
18319
18320 @item -mzero-extend
18321 @itemx -mno-zero-extend
18322 @opindex mzero-extend
18323 @opindex mno-zero-extend
18324 When reading data from memory in sizes shorter than 64 bits, use (do not
18325 use) zero-extending load instructions by default, rather than
18326 sign-extending ones.
18327
18328 @item -mknuthdiv
18329 @itemx -mno-knuthdiv
18330 @opindex mknuthdiv
18331 @opindex mno-knuthdiv
18332 Make the result of a division yielding a remainder have the same sign as
18333 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
18334 remainder follows the sign of the dividend.  Both methods are
18335 arithmetically valid, the latter being almost exclusively used.
18336
18337 @item -mtoplevel-symbols
18338 @itemx -mno-toplevel-symbols
18339 @opindex mtoplevel-symbols
18340 @opindex mno-toplevel-symbols
18341 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
18342 code can be used with the @code{PREFIX} assembly directive.
18343
18344 @item -melf
18345 @opindex melf
18346 Generate an executable in the ELF format, rather than the default
18347 @samp{mmo} format used by the @command{mmix} simulator.
18348
18349 @item -mbranch-predict
18350 @itemx -mno-branch-predict
18351 @opindex mbranch-predict
18352 @opindex mno-branch-predict
18353 Use (do not use) the probable-branch instructions, when static branch
18354 prediction indicates a probable branch.
18355
18356 @item -mbase-addresses
18357 @itemx -mno-base-addresses
18358 @opindex mbase-addresses
18359 @opindex mno-base-addresses
18360 Generate (do not generate) code that uses @emph{base addresses}.  Using a
18361 base address automatically generates a request (handled by the assembler
18362 and the linker) for a constant to be set up in a global register.  The
18363 register is used for one or more base address requests within the range 0
18364 to 255 from the value held in the register.  The generally leads to short
18365 and fast code, but the number of different data items that can be
18366 addressed is limited.  This means that a program that uses lots of static
18367 data may require @option{-mno-base-addresses}.
18368
18369 @item -msingle-exit
18370 @itemx -mno-single-exit
18371 @opindex msingle-exit
18372 @opindex mno-single-exit
18373 Force (do not force) generated code to have a single exit point in each
18374 function.
18375 @end table
18376
18377 @node MN10300 Options
18378 @subsection MN10300 Options
18379 @cindex MN10300 options
18380
18381 These @option{-m} options are defined for Matsushita MN10300 architectures:
18382
18383 @table @gcctabopt
18384 @item -mmult-bug
18385 @opindex mmult-bug
18386 Generate code to avoid bugs in the multiply instructions for the MN10300
18387 processors.  This is the default.
18388
18389 @item -mno-mult-bug
18390 @opindex mno-mult-bug
18391 Do not generate code to avoid bugs in the multiply instructions for the
18392 MN10300 processors.
18393
18394 @item -mam33
18395 @opindex mam33
18396 Generate code using features specific to the AM33 processor.
18397
18398 @item -mno-am33
18399 @opindex mno-am33
18400 Do not generate code using features specific to the AM33 processor.  This
18401 is the default.
18402
18403 @item -mam33-2
18404 @opindex mam33-2
18405 Generate code using features specific to the AM33/2.0 processor.
18406
18407 @item -mam34
18408 @opindex mam34
18409 Generate code using features specific to the AM34 processor.
18410
18411 @item -mtune=@var{cpu-type}
18412 @opindex mtune
18413 Use the timing characteristics of the indicated CPU type when
18414 scheduling instructions.  This does not change the targeted processor
18415 type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
18416 @samp{am33-2} or @samp{am34}.
18417
18418 @item -mreturn-pointer-on-d0
18419 @opindex mreturn-pointer-on-d0
18420 When generating a function that returns a pointer, return the pointer
18421 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
18422 only in @code{a0}, and attempts to call such functions without a prototype
18423 result in errors.  Note that this option is on by default; use
18424 @option{-mno-return-pointer-on-d0} to disable it.
18425
18426 @item -mno-crt0
18427 @opindex mno-crt0
18428 Do not link in the C run-time initialization object file.
18429
18430 @item -mrelax
18431 @opindex mrelax
18432 Indicate to the linker that it should perform a relaxation optimization pass
18433 to shorten branches, calls and absolute memory addresses.  This option only
18434 has an effect when used on the command line for the final link step.
18435
18436 This option makes symbolic debugging impossible.
18437
18438 @item -mliw
18439 @opindex mliw
18440 Allow the compiler to generate @emph{Long Instruction Word}
18441 instructions if the target is the @samp{AM33} or later.  This is the
18442 default.  This option defines the preprocessor macro @code{__LIW__}.
18443
18444 @item -mnoliw
18445 @opindex mnoliw
18446 Do not allow the compiler to generate @emph{Long Instruction Word}
18447 instructions.  This option defines the preprocessor macro
18448 @code{__NO_LIW__}.
18449
18450 @item -msetlb
18451 @opindex msetlb
18452 Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
18453 instructions if the target is the @samp{AM33} or later.  This is the
18454 default.  This option defines the preprocessor macro @code{__SETLB__}.
18455
18456 @item -mnosetlb
18457 @opindex mnosetlb
18458 Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
18459 instructions.  This option defines the preprocessor macro
18460 @code{__NO_SETLB__}.
18461
18462 @end table
18463
18464 @node Moxie Options
18465 @subsection Moxie Options
18466 @cindex Moxie Options
18467
18468 @table @gcctabopt
18469
18470 @item -meb
18471 @opindex meb
18472 Generate big-endian code.  This is the default for @samp{moxie-*-*}
18473 configurations.
18474
18475 @item -mel
18476 @opindex mel
18477 Generate little-endian code.
18478
18479 @item -mmul.x
18480 @opindex mmul.x
18481 Generate mul.x and umul.x instructions.  This is the default for
18482 @samp{moxiebox-*-*} configurations.
18483
18484 @item -mno-crt0
18485 @opindex mno-crt0
18486 Do not link in the C run-time initialization object file.
18487
18488 @end table
18489
18490 @node MSP430 Options
18491 @subsection MSP430 Options
18492 @cindex MSP430 Options
18493
18494 These options are defined for the MSP430:
18495
18496 @table @gcctabopt
18497
18498 @item -masm-hex
18499 @opindex masm-hex
18500 Force assembly output to always use hex constants.  Normally such
18501 constants are signed decimals, but this option is available for
18502 testsuite and/or aesthetic purposes.
18503
18504 @item -mmcu=
18505 @opindex mmcu=
18506 Select the MCU to target.  This is used to create a C preprocessor
18507 symbol based upon the MCU name, converted to upper case and pre- and
18508 post-fixed with @samp{__}.  This in turn is used by the
18509 @file{msp430.h} header file to select an MCU-specific supplementary
18510 header file.
18511
18512 The option also sets the ISA to use.  If the MCU name is one that is
18513 known to only support the 430 ISA then that is selected, otherwise the
18514 430X ISA is selected.  A generic MCU name of @samp{msp430} can also be
18515 used to select the 430 ISA.  Similarly the generic @samp{msp430x} MCU
18516 name selects the 430X ISA.
18517
18518 In addition an MCU-specific linker script is added to the linker
18519 command line.  The script's name is the name of the MCU with
18520 @file{.ld} appended.  Thus specifying @option{-mmcu=xxx} on the @command{gcc}
18521 command line defines the C preprocessor symbol @code{__XXX__} and
18522 cause the linker to search for a script called @file{xxx.ld}.
18523
18524 This option is also passed on to the assembler.
18525
18526 @item -mwarn-mcu
18527 @itemx -mno-warn-mcu
18528 @opindex mwarn-mcu
18529 @opindex mno-warn-mcu
18530 This option enables or disables warnings about conflicts between the
18531 MCU name specified by the @option{-mmcu} option and the ISA set by the
18532 @option{-mcpu} option and/or the hardware multiply support set by the
18533 @option{-mhwmult} option.  It also toggles warnings about unrecognised
18534 MCU names.  This option is on by default.
18535
18536 @item -mcpu=
18537 @opindex mcpu=
18538 Specifies the ISA to use.  Accepted values are @samp{msp430},
18539 @samp{msp430x} and @samp{msp430xv2}.  This option is deprecated.  The
18540 @option{-mmcu=} option should be used to select the ISA.
18541
18542 @item -msim
18543 @opindex msim
18544 Link to the simulator runtime libraries and linker script.  Overrides
18545 any scripts that would be selected by the @option{-mmcu=} option.
18546
18547 @item -mlarge
18548 @opindex mlarge
18549 Use large-model addressing (20-bit pointers, 32-bit @code{size_t}).
18550
18551 @item -msmall
18552 @opindex msmall
18553 Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).
18554
18555 @item -mrelax
18556 @opindex mrelax
18557 This option is passed to the assembler and linker, and allows the
18558 linker to perform certain optimizations that cannot be done until
18559 the final link.
18560
18561 @item mhwmult=
18562 @opindex mhwmult=
18563 Describes the type of hardware multiply supported by the target.
18564 Accepted values are @samp{none} for no hardware multiply, @samp{16bit}
18565 for the original 16-bit-only multiply supported by early MCUs.
18566 @samp{32bit} for the 16/32-bit multiply supported by later MCUs and
18567 @samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
18568 A value of @samp{auto} can also be given.  This tells GCC to deduce
18569 the hardware multiply support based upon the MCU name provided by the
18570 @option{-mmcu} option.  If no @option{-mmcu} option is specified or if
18571 the MCU name is not recognised then no hardware multiply support is
18572 assumed.  @code{auto} is the default setting.
18573
18574 Hardware multiplies are normally performed by calling a library
18575 routine.  This saves space in the generated code.  When compiling at
18576 @option{-O3} or higher however the hardware multiplier is invoked
18577 inline.  This makes for bigger, but faster code.
18578
18579 The hardware multiply routines disable interrupts whilst running and
18580 restore the previous interrupt state when they finish.  This makes
18581 them safe to use inside interrupt handlers as well as in normal code.
18582
18583 @item -minrt
18584 @opindex minrt
18585 Enable the use of a minimum runtime environment - no static
18586 initializers or constructors.  This is intended for memory-constrained
18587 devices.  The compiler includes special symbols in some objects
18588 that tell the linker and runtime which code fragments are required.
18589
18590 @item -mcode-region=
18591 @itemx -mdata-region=
18592 @opindex mcode-region
18593 @opindex mdata-region
18594 These options tell the compiler where to place functions and data that
18595 do not have one of the @code{lower}, @code{upper}, @code{either} or
18596 @code{section} attributes.  Possible values are @code{lower},
18597 @code{upper}, @code{either} or @code{any}.  The first three behave
18598 like the corresponding attribute.  The fourth possible value -
18599 @code{any} - is the default.  It leaves placement entirely up to the
18600 linker script and how it assigns the standard sections (.text, .data
18601 etc) to the memory regions.
18602
18603 @item -msilicon-errata=
18604 @opindex msilicon-errata
18605 This option passes on a request to assembler to enable the fixes for
18606 the named silicon errata.
18607
18608 @item -msilicon-errata-warn=
18609 @opindex msilicon-errata-warn
18610 This option passes on a request to the assembler to enable warning
18611 messages when a silicon errata might need to be applied.
18612
18613 @end table
18614
18615 @node NDS32 Options
18616 @subsection NDS32 Options
18617 @cindex NDS32 Options
18618
18619 These options are defined for NDS32 implementations:
18620
18621 @table @gcctabopt
18622
18623 @item -mbig-endian
18624 @opindex mbig-endian
18625 Generate code in big-endian mode.
18626
18627 @item -mlittle-endian
18628 @opindex mlittle-endian
18629 Generate code in little-endian mode.
18630
18631 @item -mreduced-regs
18632 @opindex mreduced-regs
18633 Use reduced-set registers for register allocation.
18634
18635 @item -mfull-regs
18636 @opindex mfull-regs
18637 Use full-set registers for register allocation.
18638
18639 @item -mcmov
18640 @opindex mcmov
18641 Generate conditional move instructions.
18642
18643 @item -mno-cmov
18644 @opindex mno-cmov
18645 Do not generate conditional move instructions.
18646
18647 @item -mperf-ext
18648 @opindex mperf-ext
18649 Generate performance extension instructions.
18650
18651 @item -mno-perf-ext
18652 @opindex mno-perf-ext
18653 Do not generate performance extension instructions.
18654
18655 @item -mv3push
18656 @opindex mv3push
18657 Generate v3 push25/pop25 instructions.
18658
18659 @item -mno-v3push
18660 @opindex mno-v3push
18661 Do not generate v3 push25/pop25 instructions.
18662
18663 @item -m16-bit
18664 @opindex m16-bit
18665 Generate 16-bit instructions.
18666
18667 @item -mno-16-bit
18668 @opindex mno-16-bit
18669 Do not generate 16-bit instructions.
18670
18671 @item -misr-vector-size=@var{num}
18672 @opindex misr-vector-size
18673 Specify the size of each interrupt vector, which must be 4 or 16.
18674
18675 @item -mcache-block-size=@var{num}
18676 @opindex mcache-block-size
18677 Specify the size of each cache block,
18678 which must be a power of 2 between 4 and 512.
18679
18680 @item -march=@var{arch}
18681 @opindex march
18682 Specify the name of the target architecture.
18683
18684 @item -mcmodel=@var{code-model}
18685 @opindex mcmodel
18686 Set the code model to one of
18687 @table @asis
18688 @item @samp{small}
18689 All the data and read-only data segments must be within 512KB addressing space.
18690 The text segment must be within 16MB addressing space.
18691 @item @samp{medium}
18692 The data segment must be within 512KB while the read-only data segment can be
18693 within 4GB addressing space.  The text segment should be still within 16MB
18694 addressing space.
18695 @item @samp{large}
18696 All the text and data segments can be within 4GB addressing space.
18697 @end table
18698
18699 @item -mctor-dtor
18700 @opindex mctor-dtor
18701 Enable constructor/destructor feature.
18702
18703 @item -mrelax
18704 @opindex mrelax
18705 Guide linker to relax instructions.
18706
18707 @end table
18708
18709 @node Nios II Options
18710 @subsection Nios II Options
18711 @cindex Nios II options
18712 @cindex Altera Nios II options
18713
18714 These are the options defined for the Altera Nios II processor.
18715
18716 @table @gcctabopt
18717
18718 @item -G @var{num}
18719 @opindex G
18720 @cindex smaller data references
18721 Put global and static objects less than or equal to @var{num} bytes
18722 into the small data or BSS sections instead of the normal data or BSS
18723 sections.  The default value of @var{num} is 8.
18724
18725 @item -mgpopt=@var{option}
18726 @item -mgpopt
18727 @itemx -mno-gpopt
18728 @opindex mgpopt
18729 @opindex mno-gpopt
18730 Generate (do not generate) GP-relative accesses.  The following 
18731 @var{option} names are recognized:
18732
18733 @table @samp
18734
18735 @item none
18736 Do not generate GP-relative accesses.
18737
18738 @item local
18739 Generate GP-relative accesses for small data objects that are not 
18740 external, weak, or uninitialized common symbols.  
18741 Also use GP-relative addressing for objects that
18742 have been explicitly placed in a small data section via a @code{section}
18743 attribute.
18744
18745 @item global
18746 As for @samp{local}, but also generate GP-relative accesses for
18747 small data objects that are external, weak, or common.  If you use this option,
18748 you must ensure that all parts of your program (including libraries) are
18749 compiled with the same @option{-G} setting.
18750
18751 @item data
18752 Generate GP-relative accesses for all data objects in the program.  If you
18753 use this option, the entire data and BSS segments
18754 of your program must fit in 64K of memory and you must use an appropriate
18755 linker script to allocate them within the addressible range of the
18756 global pointer.
18757
18758 @item all
18759 Generate GP-relative addresses for function pointers as well as data
18760 pointers.  If you use this option, the entire text, data, and BSS segments
18761 of your program must fit in 64K of memory and you must use an appropriate
18762 linker script to allocate them within the addressible range of the
18763 global pointer.
18764
18765 @end table
18766
18767 @option{-mgpopt} is equivalent to @option{-mgpopt=local}, and
18768 @option{-mno-gpopt} is equivalent to @option{-mgpopt=none}.
18769
18770 The default is @option{-mgpopt} except when @option{-fpic} or
18771 @option{-fPIC} is specified to generate position-independent code.
18772 Note that the Nios II ABI does not permit GP-relative accesses from
18773 shared libraries.
18774
18775 You may need to specify @option{-mno-gpopt} explicitly when building
18776 programs that include large amounts of small data, including large
18777 GOT data sections.  In this case, the 16-bit offset for GP-relative
18778 addressing may not be large enough to allow access to the entire 
18779 small data section.
18780
18781 @item -mel
18782 @itemx -meb
18783 @opindex mel
18784 @opindex meb
18785 Generate little-endian (default) or big-endian (experimental) code,
18786 respectively.
18787
18788 @item -march=@var{arch}
18789 @opindex march
18790 This specifies the name of the target Nios II architecture.  GCC uses this
18791 name to determine what kind of instructions it can emit when generating
18792 assembly code.  Permissible names are: @samp{r1}, @samp{r2}.
18793
18794 The preprocessor macro @code{__nios2_arch__} is available to programs,
18795 with value 1 or 2, indicating the targeted ISA level.
18796
18797 @item -mbypass-cache
18798 @itemx -mno-bypass-cache
18799 @opindex mno-bypass-cache
18800 @opindex mbypass-cache
18801 Force all load and store instructions to always bypass cache by 
18802 using I/O variants of the instructions. The default is not to
18803 bypass the cache.
18804
18805 @item -mno-cache-volatile 
18806 @itemx -mcache-volatile       
18807 @opindex mcache-volatile 
18808 @opindex mno-cache-volatile
18809 Volatile memory access bypass the cache using the I/O variants of 
18810 the load and store instructions. The default is not to bypass the cache.
18811
18812 @item -mno-fast-sw-div
18813 @itemx -mfast-sw-div
18814 @opindex mno-fast-sw-div
18815 @opindex mfast-sw-div
18816 Do not use table-based fast divide for small numbers. The default 
18817 is to use the fast divide at @option{-O3} and above.
18818
18819 @item -mno-hw-mul
18820 @itemx -mhw-mul
18821 @itemx -mno-hw-mulx
18822 @itemx -mhw-mulx
18823 @itemx -mno-hw-div
18824 @itemx -mhw-div
18825 @opindex mno-hw-mul
18826 @opindex mhw-mul
18827 @opindex mno-hw-mulx
18828 @opindex mhw-mulx
18829 @opindex mno-hw-div
18830 @opindex mhw-div
18831 Enable or disable emitting @code{mul}, @code{mulx} and @code{div} family of 
18832 instructions by the compiler. The default is to emit @code{mul}
18833 and not emit @code{div} and @code{mulx}.
18834
18835 @item -mbmx
18836 @itemx -mno-bmx
18837 @itemx -mcdx
18838 @itemx -mno-cdx
18839 Enable or disable generation of Nios II R2 BMX (bit manipulation) and
18840 CDX (code density) instructions.  Enabling these instructions also
18841 requires @option{-march=r2}.  Since these instructions are optional
18842 extensions to the R2 architecture, the default is not to emit them.
18843
18844 @item -mcustom-@var{insn}=@var{N}
18845 @itemx -mno-custom-@var{insn}
18846 @opindex mcustom-@var{insn}
18847 @opindex mno-custom-@var{insn}
18848 Each @option{-mcustom-@var{insn}=@var{N}} option enables use of a
18849 custom instruction with encoding @var{N} when generating code that uses 
18850 @var{insn}.  For example, @option{-mcustom-fadds=253} generates custom
18851 instruction 253 for single-precision floating-point add operations instead
18852 of the default behavior of using a library call.
18853
18854 The following values of @var{insn} are supported.  Except as otherwise
18855 noted, floating-point operations are expected to be implemented with
18856 normal IEEE 754 semantics and correspond directly to the C operators or the
18857 equivalent GCC built-in functions (@pxref{Other Builtins}).
18858
18859 Single-precision floating point:
18860 @table @asis
18861
18862 @item @samp{fadds}, @samp{fsubs}, @samp{fdivs}, @samp{fmuls}
18863 Binary arithmetic operations.
18864
18865 @item @samp{fnegs}
18866 Unary negation.
18867
18868 @item @samp{fabss}
18869 Unary absolute value.
18870
18871 @item @samp{fcmpeqs}, @samp{fcmpges}, @samp{fcmpgts}, @samp{fcmples}, @samp{fcmplts}, @samp{fcmpnes}
18872 Comparison operations.
18873
18874 @item @samp{fmins}, @samp{fmaxs}
18875 Floating-point minimum and maximum.  These instructions are only
18876 generated if @option{-ffinite-math-only} is specified.
18877
18878 @item @samp{fsqrts}
18879 Unary square root operation.
18880
18881 @item @samp{fcoss}, @samp{fsins}, @samp{ftans}, @samp{fatans}, @samp{fexps}, @samp{flogs}
18882 Floating-point trigonometric and exponential functions.  These instructions
18883 are only generated if @option{-funsafe-math-optimizations} is also specified.
18884
18885 @end table
18886
18887 Double-precision floating point:
18888 @table @asis
18889
18890 @item @samp{faddd}, @samp{fsubd}, @samp{fdivd}, @samp{fmuld}
18891 Binary arithmetic operations.
18892
18893 @item @samp{fnegd}
18894 Unary negation.
18895
18896 @item @samp{fabsd}
18897 Unary absolute value.
18898
18899 @item @samp{fcmpeqd}, @samp{fcmpged}, @samp{fcmpgtd}, @samp{fcmpled}, @samp{fcmpltd}, @samp{fcmpned}
18900 Comparison operations.
18901
18902 @item @samp{fmind}, @samp{fmaxd}
18903 Double-precision minimum and maximum.  These instructions are only
18904 generated if @option{-ffinite-math-only} is specified.
18905
18906 @item @samp{fsqrtd}
18907 Unary square root operation.
18908
18909 @item @samp{fcosd}, @samp{fsind}, @samp{ftand}, @samp{fatand}, @samp{fexpd}, @samp{flogd}
18910 Double-precision trigonometric and exponential functions.  These instructions
18911 are only generated if @option{-funsafe-math-optimizations} is also specified.
18912
18913 @end table
18914
18915 Conversions:
18916 @table @asis
18917 @item @samp{fextsd}
18918 Conversion from single precision to double precision.
18919
18920 @item @samp{ftruncds}
18921 Conversion from double precision to single precision.
18922
18923 @item @samp{fixsi}, @samp{fixsu}, @samp{fixdi}, @samp{fixdu}
18924 Conversion from floating point to signed or unsigned integer types, with
18925 truncation towards zero.
18926
18927 @item @samp{round}
18928 Conversion from single-precision floating point to signed integer,
18929 rounding to the nearest integer and ties away from zero.
18930 This corresponds to the @code{__builtin_lroundf} function when
18931 @option{-fno-math-errno} is used.
18932
18933 @item @samp{floatis}, @samp{floatus}, @samp{floatid}, @samp{floatud}
18934 Conversion from signed or unsigned integer types to floating-point types.
18935
18936 @end table
18937
18938 In addition, all of the following transfer instructions for internal
18939 registers X and Y must be provided to use any of the double-precision
18940 floating-point instructions.  Custom instructions taking two
18941 double-precision source operands expect the first operand in the
18942 64-bit register X.  The other operand (or only operand of a unary
18943 operation) is given to the custom arithmetic instruction with the
18944 least significant half in source register @var{src1} and the most
18945 significant half in @var{src2}.  A custom instruction that returns a
18946 double-precision result returns the most significant 32 bits in the
18947 destination register and the other half in 32-bit register Y.  
18948 GCC automatically generates the necessary code sequences to write
18949 register X and/or read register Y when double-precision floating-point
18950 instructions are used.
18951
18952 @table @asis
18953
18954 @item @samp{fwrx}
18955 Write @var{src1} into the least significant half of X and @var{src2} into
18956 the most significant half of X.
18957
18958 @item @samp{fwry}
18959 Write @var{src1} into Y.
18960
18961 @item @samp{frdxhi}, @samp{frdxlo}
18962 Read the most or least (respectively) significant half of X and store it in
18963 @var{dest}.
18964
18965 @item @samp{frdy}
18966 Read the value of Y and store it into @var{dest}.
18967 @end table
18968
18969 Note that you can gain more local control over generation of Nios II custom
18970 instructions by using the @code{target("custom-@var{insn}=@var{N}")}
18971 and @code{target("no-custom-@var{insn}")} function attributes
18972 (@pxref{Function Attributes})
18973 or pragmas (@pxref{Function Specific Option Pragmas}).
18974
18975 @item -mcustom-fpu-cfg=@var{name}
18976 @opindex mcustom-fpu-cfg
18977
18978 This option enables a predefined, named set of custom instruction encodings
18979 (see @option{-mcustom-@var{insn}} above).  
18980 Currently, the following sets are defined:
18981
18982 @option{-mcustom-fpu-cfg=60-1} is equivalent to:
18983 @gccoptlist{-mcustom-fmuls=252 @gol
18984 -mcustom-fadds=253 @gol
18985 -mcustom-fsubs=254 @gol
18986 -fsingle-precision-constant}
18987
18988 @option{-mcustom-fpu-cfg=60-2} is equivalent to:
18989 @gccoptlist{-mcustom-fmuls=252 @gol
18990 -mcustom-fadds=253 @gol
18991 -mcustom-fsubs=254 @gol
18992 -mcustom-fdivs=255 @gol
18993 -fsingle-precision-constant}
18994
18995 @option{-mcustom-fpu-cfg=72-3} is equivalent to:
18996 @gccoptlist{-mcustom-floatus=243 @gol
18997 -mcustom-fixsi=244 @gol
18998 -mcustom-floatis=245 @gol
18999 -mcustom-fcmpgts=246 @gol
19000 -mcustom-fcmples=249 @gol
19001 -mcustom-fcmpeqs=250 @gol
19002 -mcustom-fcmpnes=251 @gol
19003 -mcustom-fmuls=252 @gol
19004 -mcustom-fadds=253 @gol
19005 -mcustom-fsubs=254 @gol
19006 -mcustom-fdivs=255 @gol
19007 -fsingle-precision-constant}
19008
19009 Custom instruction assignments given by individual
19010 @option{-mcustom-@var{insn}=} options override those given by
19011 @option{-mcustom-fpu-cfg=}, regardless of the
19012 order of the options on the command line.
19013
19014 Note that you can gain more local control over selection of a FPU
19015 configuration by using the @code{target("custom-fpu-cfg=@var{name}")}
19016 function attribute (@pxref{Function Attributes})
19017 or pragma (@pxref{Function Specific Option Pragmas}).
19018
19019 @end table
19020
19021 These additional @samp{-m} options are available for the Altera Nios II
19022 ELF (bare-metal) target:
19023
19024 @table @gcctabopt
19025
19026 @item -mhal
19027 @opindex mhal
19028 Link with HAL BSP.  This suppresses linking with the GCC-provided C runtime
19029 startup and termination code, and is typically used in conjunction with
19030 @option{-msys-crt0=} to specify the location of the alternate startup code
19031 provided by the HAL BSP.
19032
19033 @item -msmallc
19034 @opindex msmallc
19035 Link with a limited version of the C library, @option{-lsmallc}, rather than
19036 Newlib.
19037
19038 @item -msys-crt0=@var{startfile}
19039 @opindex msys-crt0
19040 @var{startfile} is the file name of the startfile (crt0) to use 
19041 when linking.  This option is only useful in conjunction with @option{-mhal}.
19042
19043 @item -msys-lib=@var{systemlib}
19044 @opindex msys-lib
19045 @var{systemlib} is the library name of the library that provides
19046 low-level system calls required by the C library,
19047 e.g. @code{read} and @code{write}.
19048 This option is typically used to link with a library provided by a HAL BSP.
19049
19050 @end table
19051
19052 @node Nvidia PTX Options
19053 @subsection Nvidia PTX Options
19054 @cindex Nvidia PTX options
19055 @cindex nvptx options
19056
19057 These options are defined for Nvidia PTX:
19058
19059 @table @gcctabopt
19060
19061 @item -m32
19062 @itemx -m64
19063 @opindex m32
19064 @opindex m64
19065 Generate code for 32-bit or 64-bit ABI.
19066
19067 @item -mmainkernel
19068 @opindex mmainkernel
19069 Link in code for a __main kernel.  This is for stand-alone instead of
19070 offloading execution.
19071
19072 @item -moptimize
19073 @opindex moptimize
19074 Apply partitioned execution optimizations.  This is the default when any
19075 level of optimization is selected.
19076
19077 @end table
19078
19079 @node PDP-11 Options
19080 @subsection PDP-11 Options
19081 @cindex PDP-11 Options
19082
19083 These options are defined for the PDP-11:
19084
19085 @table @gcctabopt
19086 @item -mfpu
19087 @opindex mfpu
19088 Use hardware FPP floating point.  This is the default.  (FIS floating
19089 point on the PDP-11/40 is not supported.)
19090
19091 @item -msoft-float
19092 @opindex msoft-float
19093 Do not use hardware floating point.
19094
19095 @item -mac0
19096 @opindex mac0
19097 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
19098
19099 @item -mno-ac0
19100 @opindex mno-ac0
19101 Return floating-point results in memory.  This is the default.
19102
19103 @item -m40
19104 @opindex m40
19105 Generate code for a PDP-11/40.
19106
19107 @item -m45
19108 @opindex m45
19109 Generate code for a PDP-11/45.  This is the default.
19110
19111 @item -m10
19112 @opindex m10
19113 Generate code for a PDP-11/10.
19114
19115 @item -mbcopy-builtin
19116 @opindex mbcopy-builtin
19117 Use inline @code{movmemhi} patterns for copying memory.  This is the
19118 default.
19119
19120 @item -mbcopy
19121 @opindex mbcopy
19122 Do not use inline @code{movmemhi} patterns for copying memory.
19123
19124 @item -mint16
19125 @itemx -mno-int32
19126 @opindex mint16
19127 @opindex mno-int32
19128 Use 16-bit @code{int}.  This is the default.
19129
19130 @item -mint32
19131 @itemx -mno-int16
19132 @opindex mint32
19133 @opindex mno-int16
19134 Use 32-bit @code{int}.
19135
19136 @item -mfloat64
19137 @itemx -mno-float32
19138 @opindex mfloat64
19139 @opindex mno-float32
19140 Use 64-bit @code{float}.  This is the default.
19141
19142 @item -mfloat32
19143 @itemx -mno-float64
19144 @opindex mfloat32
19145 @opindex mno-float64
19146 Use 32-bit @code{float}.
19147
19148 @item -mabshi
19149 @opindex mabshi
19150 Use @code{abshi2} pattern.  This is the default.
19151
19152 @item -mno-abshi
19153 @opindex mno-abshi
19154 Do not use @code{abshi2} pattern.
19155
19156 @item -mbranch-expensive
19157 @opindex mbranch-expensive
19158 Pretend that branches are expensive.  This is for experimenting with
19159 code generation only.
19160
19161 @item -mbranch-cheap
19162 @opindex mbranch-cheap
19163 Do not pretend that branches are expensive.  This is the default.
19164
19165 @item -munix-asm
19166 @opindex munix-asm
19167 Use Unix assembler syntax.  This is the default when configured for
19168 @samp{pdp11-*-bsd}.
19169
19170 @item -mdec-asm
19171 @opindex mdec-asm
19172 Use DEC assembler syntax.  This is the default when configured for any
19173 PDP-11 target other than @samp{pdp11-*-bsd}.
19174 @end table
19175
19176 @node picoChip Options
19177 @subsection picoChip Options
19178 @cindex picoChip options
19179
19180 These @samp{-m} options are defined for picoChip implementations:
19181
19182 @table @gcctabopt
19183
19184 @item -mae=@var{ae_type}
19185 @opindex mcpu
19186 Set the instruction set, register set, and instruction scheduling
19187 parameters for array element type @var{ae_type}.  Supported values
19188 for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
19189
19190 @option{-mae=ANY} selects a completely generic AE type.  Code
19191 generated with this option runs on any of the other AE types.  The
19192 code is not as efficient as it would be if compiled for a specific
19193 AE type, and some types of operation (e.g., multiplication) do not
19194 work properly on all types of AE.
19195
19196 @option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
19197 for compiled code, and is the default.
19198
19199 @option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
19200 option may suffer from poor performance of byte (char) manipulation,
19201 since the DSP AE does not provide hardware support for byte load/stores.
19202
19203 @item -msymbol-as-address
19204 Enable the compiler to directly use a symbol name as an address in a
19205 load/store instruction, without first loading it into a
19206 register.  Typically, the use of this option generates larger
19207 programs, which run faster than when the option isn't used.  However, the
19208 results vary from program to program, so it is left as a user option,
19209 rather than being permanently enabled.
19210
19211 @item -mno-inefficient-warnings
19212 Disables warnings about the generation of inefficient code.  These
19213 warnings can be generated, for example, when compiling code that
19214 performs byte-level memory operations on the MAC AE type.  The MAC AE has
19215 no hardware support for byte-level memory operations, so all byte
19216 load/stores must be synthesized from word load/store operations.  This is
19217 inefficient and a warning is generated to indicate
19218 that you should rewrite the code to avoid byte operations, or to target
19219 an AE type that has the necessary hardware support.  This option disables
19220 these warnings.
19221
19222 @end table
19223
19224 @node PowerPC Options
19225 @subsection PowerPC Options
19226 @cindex PowerPC options
19227
19228 These are listed under @xref{RS/6000 and PowerPC Options}.
19229
19230 @node RL78 Options
19231 @subsection RL78 Options
19232 @cindex RL78 Options
19233
19234 @table @gcctabopt
19235
19236 @item -msim
19237 @opindex msim
19238 Links in additional target libraries to support operation within a
19239 simulator.
19240
19241 @item -mmul=none
19242 @itemx -mmul=g10
19243 @itemx -mmul=g13
19244 @itemx -mmul=g14
19245 @itemx -mmul=rl78
19246 @opindex mmul
19247 Specifies the type of hardware multiplication and division support to
19248 be used.  The simplest is @code{none}, which uses software for both
19249 multiplication and division.  This is the default.  The @code{g13}
19250 value is for the hardware multiply/divide peripheral found on the
19251 RL78/G13 (S2 core) targets.  The @code{g14} value selects the use of
19252 the multiplication and division instructions supported by the RL78/G14
19253 (S3 core) parts.  The value @code{rl78} is an alias for @code{g14} and
19254 the value @code{mg10} is an alias for @code{none}.
19255
19256 In addition a C preprocessor macro is defined, based upon the setting
19257 of this option.  Possible values are: @code{__RL78_MUL_NONE__},
19258 @code{__RL78_MUL_G13__} or @code{__RL78_MUL_G14__}.
19259
19260 @item -mcpu=g10
19261 @itemx -mcpu=g13
19262 @itemx -mcpu=g14
19263 @itemx -mcpu=rl78
19264 @opindex mcpu
19265 Specifies the RL78 core to target.  The default is the G14 core, also
19266 known as an S3 core or just RL78.  The G13 or S2 core does not have
19267 multiply or divide instructions, instead it uses a hardware peripheral
19268 for these operations.  The G10 or S1 core does not have register
19269 banks, so it uses a different calling convention.
19270
19271 If this option is set it also selects the type of hardware multiply
19272 support to use, unless this is overridden by an explicit
19273 @option{-mmul=none} option on the command line.  Thus specifying
19274 @option{-mcpu=g13} enables the use of the G13 hardware multiply
19275 peripheral and specifying @option{-mcpu=g10} disables the use of
19276 hardware multipications altogether.
19277
19278 Note, although the RL78/G14 core is the default target, specifying
19279 @option{-mcpu=g14} or @option{-mcpu=rl78} on the command line does
19280 change the behaviour of the toolchain since it also enables G14
19281 hardware multiply support.  If these options are not specified on the
19282 command line then software multiplication routines will be used even
19283 though the code targets the RL78 core.  This is for backwards
19284 compatibility with older toolchains which did not have hardware
19285 multiply and divide support.
19286
19287 In addition a C preprocessor macro is defined, based upon the setting
19288 of this option.  Possible values are: @code{__RL78_G10__},
19289 @code{__RL78_G13__} or @code{__RL78_G14__}.
19290
19291 @item -mg10
19292 @itemx -mg13
19293 @itemx -mg14
19294 @itemx -mrl78
19295 @opindex mg10
19296 @opindex mg13
19297 @opindex mg14
19298 @opindex mrl78
19299 These are aliases for the corresponding @option{-mcpu=} option.  They
19300 are provided for backwards compatibility.
19301
19302 @item -mallregs
19303 @opindex mallregs
19304 Allow the compiler to use all of the available registers.  By default
19305 registers @code{r24..r31} are reserved for use in interrupt handlers.
19306 With this option enabled these registers can be used in ordinary
19307 functions as well.
19308
19309 @item -m64bit-doubles
19310 @itemx -m32bit-doubles
19311 @opindex m64bit-doubles
19312 @opindex m32bit-doubles
19313 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
19314 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
19315 @option{-m32bit-doubles}.
19316
19317 @end table
19318
19319 @node RS/6000 and PowerPC Options
19320 @subsection IBM RS/6000 and PowerPC Options
19321 @cindex RS/6000 and PowerPC Options
19322 @cindex IBM RS/6000 and PowerPC Options
19323
19324 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
19325 @table @gcctabopt
19326 @item -mpowerpc-gpopt
19327 @itemx -mno-powerpc-gpopt
19328 @itemx -mpowerpc-gfxopt
19329 @itemx -mno-powerpc-gfxopt
19330 @need 800
19331 @itemx -mpowerpc64
19332 @itemx -mno-powerpc64
19333 @itemx -mmfcrf
19334 @itemx -mno-mfcrf
19335 @itemx -mpopcntb
19336 @itemx -mno-popcntb
19337 @itemx -mpopcntd
19338 @itemx -mno-popcntd
19339 @itemx -mfprnd
19340 @itemx -mno-fprnd
19341 @need 800
19342 @itemx -mcmpb
19343 @itemx -mno-cmpb
19344 @itemx -mmfpgpr
19345 @itemx -mno-mfpgpr
19346 @itemx -mhard-dfp
19347 @itemx -mno-hard-dfp
19348 @opindex mpowerpc-gpopt
19349 @opindex mno-powerpc-gpopt
19350 @opindex mpowerpc-gfxopt
19351 @opindex mno-powerpc-gfxopt
19352 @opindex mpowerpc64
19353 @opindex mno-powerpc64
19354 @opindex mmfcrf
19355 @opindex mno-mfcrf
19356 @opindex mpopcntb
19357 @opindex mno-popcntb
19358 @opindex mpopcntd
19359 @opindex mno-popcntd
19360 @opindex mfprnd
19361 @opindex mno-fprnd
19362 @opindex mcmpb
19363 @opindex mno-cmpb
19364 @opindex mmfpgpr
19365 @opindex mno-mfpgpr
19366 @opindex mhard-dfp
19367 @opindex mno-hard-dfp
19368 You use these options to specify which instructions are available on the
19369 processor you are using.  The default value of these options is
19370 determined when configuring GCC@.  Specifying the
19371 @option{-mcpu=@var{cpu_type}} overrides the specification of these
19372 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
19373 rather than the options listed above.
19374
19375 Specifying @option{-mpowerpc-gpopt} allows
19376 GCC to use the optional PowerPC architecture instructions in the
19377 General Purpose group, including floating-point square root.  Specifying
19378 @option{-mpowerpc-gfxopt} allows GCC to
19379 use the optional PowerPC architecture instructions in the Graphics
19380 group, including floating-point select.
19381
19382 The @option{-mmfcrf} option allows GCC to generate the move from
19383 condition register field instruction implemented on the POWER4
19384 processor and other processors that support the PowerPC V2.01
19385 architecture.
19386 The @option{-mpopcntb} option allows GCC to generate the popcount and
19387 double-precision FP reciprocal estimate instruction implemented on the
19388 POWER5 processor and other processors that support the PowerPC V2.02
19389 architecture.
19390 The @option{-mpopcntd} option allows GCC to generate the popcount
19391 instruction implemented on the POWER7 processor and other processors
19392 that support the PowerPC V2.06 architecture.
19393 The @option{-mfprnd} option allows GCC to generate the FP round to
19394 integer instructions implemented on the POWER5+ processor and other
19395 processors that support the PowerPC V2.03 architecture.
19396 The @option{-mcmpb} option allows GCC to generate the compare bytes
19397 instruction implemented on the POWER6 processor and other processors
19398 that support the PowerPC V2.05 architecture.
19399 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
19400 general-purpose register instructions implemented on the POWER6X
19401 processor and other processors that support the extended PowerPC V2.05
19402 architecture.
19403 The @option{-mhard-dfp} option allows GCC to generate the decimal
19404 floating-point instructions implemented on some POWER processors.
19405
19406 The @option{-mpowerpc64} option allows GCC to generate the additional
19407 64-bit instructions that are found in the full PowerPC64 architecture
19408 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
19409 @option{-mno-powerpc64}.
19410
19411 @item -mcpu=@var{cpu_type}
19412 @opindex mcpu
19413 Set architecture type, register usage, and
19414 instruction scheduling parameters for machine type @var{cpu_type}.
19415 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
19416 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
19417 @samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
19418 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
19419 @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
19420 @samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
19421 @samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
19422 @samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
19423 @samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
19424 @samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8},
19425 @samp{power9}, @samp{powerpc}, @samp{powerpc64}, @samp{powerpc64le},
19426 and @samp{rs64}.
19427
19428 @option{-mcpu=powerpc}, @option{-mcpu=powerpc64}, and
19429 @option{-mcpu=powerpc64le} specify pure 32-bit PowerPC (either
19430 endian), 64-bit big endian PowerPC and 64-bit little endian PowerPC
19431 architecture machine types, with an appropriate, generic processor
19432 model assumed for scheduling purposes.
19433
19434 The other options specify a specific processor.  Code generated under
19435 those options runs best on that processor, and may not run at all on
19436 others.
19437
19438 The @option{-mcpu} options automatically enable or disable the
19439 following options:
19440
19441 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
19442 -mpopcntb -mpopcntd  -mpowerpc64 @gol
19443 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
19444 -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx @gol
19445 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector @gol
19446 -mquad-memory -mquad-memory-atomic -mmodulo -mfloat128 -mfloat128-hardware @gol
19447 -mpower9-fusion -mpower9-vector}
19448
19449 The particular options set for any particular CPU varies between
19450 compiler versions, depending on what setting seems to produce optimal
19451 code for that CPU; it doesn't necessarily reflect the actual hardware's
19452 capabilities.  If you wish to set an individual option to a particular
19453 value, you may specify it after the @option{-mcpu} option, like
19454 @option{-mcpu=970 -mno-altivec}.
19455
19456 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
19457 not enabled or disabled by the @option{-mcpu} option at present because
19458 AIX does not have full support for these options.  You may still
19459 enable or disable them individually if you're sure it'll work in your
19460 environment.
19461
19462 @item -mtune=@var{cpu_type}
19463 @opindex mtune
19464 Set the instruction scheduling parameters for machine type
19465 @var{cpu_type}, but do not set the architecture type or register usage,
19466 as @option{-mcpu=@var{cpu_type}} does.  The same
19467 values for @var{cpu_type} are used for @option{-mtune} as for
19468 @option{-mcpu}.  If both are specified, the code generated uses the
19469 architecture and registers set by @option{-mcpu}, but the
19470 scheduling parameters set by @option{-mtune}.
19471
19472 @item -mcmodel=small
19473 @opindex mcmodel=small
19474 Generate PowerPC64 code for the small model: The TOC is limited to
19475 64k.
19476
19477 @item -mcmodel=medium
19478 @opindex mcmodel=medium
19479 Generate PowerPC64 code for the medium model: The TOC and other static
19480 data may be up to a total of 4G in size.
19481
19482 @item -mcmodel=large
19483 @opindex mcmodel=large
19484 Generate PowerPC64 code for the large model: The TOC may be up to 4G
19485 in size.  Other data and code is only limited by the 64-bit address
19486 space.
19487
19488 @item -maltivec
19489 @itemx -mno-altivec
19490 @opindex maltivec
19491 @opindex mno-altivec
19492 Generate code that uses (does not use) AltiVec instructions, and also
19493 enable the use of built-in functions that allow more direct access to
19494 the AltiVec instruction set.  You may also need to set
19495 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
19496 enhancements.
19497
19498 When @option{-maltivec} is used, rather than @option{-maltivec=le} or
19499 @option{-maltivec=be}, the element order for Altivec intrinsics such
19500 as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} 
19501 match array element order corresponding to the endianness of the
19502 target.  That is, element zero identifies the leftmost element in a
19503 vector register when targeting a big-endian platform, and identifies
19504 the rightmost element in a vector register when targeting a
19505 little-endian platform.
19506
19507 @item -maltivec=be
19508 @opindex maltivec=be
19509 Generate Altivec instructions using big-endian element order,
19510 regardless of whether the target is big- or little-endian.  This is
19511 the default when targeting a big-endian platform.
19512
19513 The element order is used to interpret element numbers in Altivec
19514 intrinsics such as @code{vec_splat}, @code{vec_extract}, and
19515 @code{vec_insert}.  By default, these match array element order
19516 corresponding to the endianness for the target.
19517
19518 @item -maltivec=le
19519 @opindex maltivec=le
19520 Generate Altivec instructions using little-endian element order,
19521 regardless of whether the target is big- or little-endian.  This is
19522 the default when targeting a little-endian platform.  This option is
19523 currently ignored when targeting a big-endian platform.
19524
19525 The element order is used to interpret element numbers in Altivec
19526 intrinsics such as @code{vec_splat}, @code{vec_extract}, and
19527 @code{vec_insert}.  By default, these match array element order
19528 corresponding to the endianness for the target.
19529
19530 @item -mvrsave
19531 @itemx -mno-vrsave
19532 @opindex mvrsave
19533 @opindex mno-vrsave
19534 Generate VRSAVE instructions when generating AltiVec code.
19535
19536 @item -mgen-cell-microcode
19537 @opindex mgen-cell-microcode
19538 Generate Cell microcode instructions.
19539
19540 @item -mwarn-cell-microcode
19541 @opindex mwarn-cell-microcode
19542 Warn when a Cell microcode instruction is emitted.  An example
19543 of a Cell microcode instruction is a variable shift.
19544
19545 @item -msecure-plt
19546 @opindex msecure-plt
19547 Generate code that allows @command{ld} and @command{ld.so}
19548 to build executables and shared
19549 libraries with non-executable @code{.plt} and @code{.got} sections.
19550 This is a PowerPC
19551 32-bit SYSV ABI option.
19552
19553 @item -mbss-plt
19554 @opindex mbss-plt
19555 Generate code that uses a BSS @code{.plt} section that @command{ld.so}
19556 fills in, and
19557 requires @code{.plt} and @code{.got}
19558 sections that are both writable and executable.
19559 This is a PowerPC 32-bit SYSV ABI option.
19560
19561 @item -misel
19562 @itemx -mno-isel
19563 @opindex misel
19564 @opindex mno-isel
19565 This switch enables or disables the generation of ISEL instructions.
19566
19567 @item -misel=@var{yes/no}
19568 This switch has been deprecated.  Use @option{-misel} and
19569 @option{-mno-isel} instead.
19570
19571 @item -mspe
19572 @itemx -mno-spe
19573 @opindex mspe
19574 @opindex mno-spe
19575 This switch enables or disables the generation of SPE simd
19576 instructions.
19577
19578 @item -mpaired
19579 @itemx -mno-paired
19580 @opindex mpaired
19581 @opindex mno-paired
19582 This switch enables or disables the generation of PAIRED simd
19583 instructions.
19584
19585 @item -mspe=@var{yes/no}
19586 This option has been deprecated.  Use @option{-mspe} and
19587 @option{-mno-spe} instead.
19588
19589 @item -mvsx
19590 @itemx -mno-vsx
19591 @opindex mvsx
19592 @opindex mno-vsx
19593 Generate code that uses (does not use) vector/scalar (VSX)
19594 instructions, and also enable the use of built-in functions that allow
19595 more direct access to the VSX instruction set.
19596
19597 @item -mcrypto
19598 @itemx -mno-crypto
19599 @opindex mcrypto
19600 @opindex mno-crypto
19601 Enable the use (disable) of the built-in functions that allow direct
19602 access to the cryptographic instructions that were added in version
19603 2.07 of the PowerPC ISA.
19604
19605 @item -mdirect-move
19606 @itemx -mno-direct-move
19607 @opindex mdirect-move
19608 @opindex mno-direct-move
19609 Generate code that uses (does not use) the instructions to move data
19610 between the general purpose registers and the vector/scalar (VSX)
19611 registers that were added in version 2.07 of the PowerPC ISA.
19612
19613 @item -mpower8-fusion
19614 @itemx -mno-power8-fusion
19615 @opindex mpower8-fusion
19616 @opindex mno-power8-fusion
19617 Generate code that keeps (does not keeps) some integer operations
19618 adjacent so that the instructions can be fused together on power8 and
19619 later processors.
19620
19621 @item -mpower8-vector
19622 @itemx -mno-power8-vector
19623 @opindex mpower8-vector
19624 @opindex mno-power8-vector
19625 Generate code that uses (does not use) the vector and scalar
19626 instructions that were added in version 2.07 of the PowerPC ISA.  Also
19627 enable the use of built-in functions that allow more direct access to
19628 the vector instructions.
19629
19630 @item -mquad-memory
19631 @itemx -mno-quad-memory
19632 @opindex mquad-memory
19633 @opindex mno-quad-memory
19634 Generate code that uses (does not use) the non-atomic quad word memory
19635 instructions.  The @option{-mquad-memory} option requires use of
19636 64-bit mode.
19637
19638 @item -mquad-memory-atomic
19639 @itemx -mno-quad-memory-atomic
19640 @opindex mquad-memory-atomic
19641 @opindex mno-quad-memory-atomic
19642 Generate code that uses (does not use) the atomic quad word memory
19643 instructions.  The @option{-mquad-memory-atomic} option requires use of
19644 64-bit mode.
19645
19646 @item -mupper-regs-df
19647 @itemx -mno-upper-regs-df
19648 @opindex mupper-regs-df
19649 @opindex mno-upper-regs-df
19650 Generate code that uses (does not use) the scalar double precision
19651 instructions that target all 64 registers in the vector/scalar
19652 floating point register set that were added in version 2.06 of the
19653 PowerPC ISA.  @option{-mupper-regs-df} is turned on by default if you
19654 use any of the @option{-mcpu=power7}, @option{-mcpu=power8}, or
19655 @option{-mvsx} options.
19656
19657 @item -mupper-regs-sf
19658 @itemx -mno-upper-regs-sf
19659 @opindex mupper-regs-sf
19660 @opindex mno-upper-regs-sf
19661 Generate code that uses (does not use) the scalar single precision
19662 instructions that target all 64 registers in the vector/scalar
19663 floating point register set that were added in version 2.07 of the
19664 PowerPC ISA.  @option{-mupper-regs-sf} is turned on by default if you
19665 use either of the @option{-mcpu=power8} or @option{-mpower8-vector}
19666 options.
19667
19668 @item -mupper-regs
19669 @itemx -mno-upper-regs
19670 @opindex mupper-regs
19671 @opindex mno-upper-regs
19672 Generate code that uses (does not use) the scalar
19673 instructions that target all 64 registers in the vector/scalar
19674 floating point register set, depending on the model of the machine.
19675
19676 If the @option{-mno-upper-regs} option is used, it turns off both
19677 @option{-mupper-regs-sf} and @option{-mupper-regs-df} options.
19678
19679 @item -mfloat128
19680 @itemx -mno-float128
19681 @opindex mfloat128
19682 @opindex mno-float128
19683 Enable/disable the @var{__float128} keyword for IEEE 128-bit floating point
19684 and use either software emulation for IEEE 128-bit floating point or
19685 hardware instructions.
19686
19687 The VSX instruction set (@option{-mvsx}, @option{-mcpu=power7}, or
19688 @option{-mcpu=power8}) must be enabled to use the @option{-mfloat128}
19689 option.
19690
19691 @item -mfloat128-hardware
19692 @itemx -mno-float128-hardware
19693 @opindex mfloat128-hardware
19694 @opindex mno-float128-hardware
19695 Enable/disable using ISA 3.0 hardware instructions to support the
19696 @var{__float128} data type.
19697
19698 @item -mmodulo
19699 @itemx -mno-modulo
19700 @opindex mmodulo
19701 @opindex mno-module
19702 Generate code that uses (does not use) the ISA 3.0 integer modulo
19703 instructions.  The @option{-mmodulo} option is enabled by default
19704 with the @option{-mcpu=power9} option.
19705
19706 @item -mpower9-fusion
19707 @itemx -mno-power9-fusion
19708 @opindex mpower9-fusion
19709 @opindex mno-power9-fusion
19710 Generate code that keeps (does not keeps) some operations adjacent so
19711 that the instructions can be fused together on power9 and later
19712 processors.
19713
19714 @item -mpower9-vector
19715 @itemx -mno-power9-vector
19716 @opindex mpower9-vector
19717 @opindex mno-power9-vector
19718 Generate code that uses (does not use) the vector and scalar
19719 instructions that were added in version 2.07 of the PowerPC ISA.  Also
19720 enable the use of built-in functions that allow more direct access to
19721 the vector instructions.
19722
19723 @item -mfloat-gprs=@var{yes/single/double/no}
19724 @itemx -mfloat-gprs
19725 @opindex mfloat-gprs
19726 This switch enables or disables the generation of floating-point
19727 operations on the general-purpose registers for architectures that
19728 support it.
19729
19730 The argument @samp{yes} or @samp{single} enables the use of
19731 single-precision floating-point operations.
19732
19733 The argument @samp{double} enables the use of single and
19734 double-precision floating-point operations.
19735
19736 The argument @samp{no} disables floating-point operations on the
19737 general-purpose registers.
19738
19739 This option is currently only available on the MPC854x.
19740
19741 @item -m32
19742 @itemx -m64
19743 @opindex m32
19744 @opindex m64
19745 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
19746 targets (including GNU/Linux).  The 32-bit environment sets int, long
19747 and pointer to 32 bits and generates code that runs on any PowerPC
19748 variant.  The 64-bit environment sets int to 32 bits and long and
19749 pointer to 64 bits, and generates code for PowerPC64, as for
19750 @option{-mpowerpc64}.
19751
19752 @item -mfull-toc
19753 @itemx -mno-fp-in-toc
19754 @itemx -mno-sum-in-toc
19755 @itemx -mminimal-toc
19756 @opindex mfull-toc
19757 @opindex mno-fp-in-toc
19758 @opindex mno-sum-in-toc
19759 @opindex mminimal-toc
19760 Modify generation of the TOC (Table Of Contents), which is created for
19761 every executable file.  The @option{-mfull-toc} option is selected by
19762 default.  In that case, GCC allocates at least one TOC entry for
19763 each unique non-automatic variable reference in your program.  GCC
19764 also places floating-point constants in the TOC@.  However, only
19765 16,384 entries are available in the TOC@.
19766
19767 If you receive a linker error message that saying you have overflowed
19768 the available TOC space, you can reduce the amount of TOC space used
19769 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
19770 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
19771 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
19772 generate code to calculate the sum of an address and a constant at
19773 run time instead of putting that sum into the TOC@.  You may specify one
19774 or both of these options.  Each causes GCC to produce very slightly
19775 slower and larger code at the expense of conserving TOC space.
19776
19777 If you still run out of space in the TOC even when you specify both of
19778 these options, specify @option{-mminimal-toc} instead.  This option causes
19779 GCC to make only one TOC entry for every file.  When you specify this
19780 option, GCC produces code that is slower and larger but which
19781 uses extremely little TOC space.  You may wish to use this option
19782 only on files that contain less frequently-executed code.
19783
19784 @item -maix64
19785 @itemx -maix32
19786 @opindex maix64
19787 @opindex maix32
19788 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
19789 @code{long} type, and the infrastructure needed to support them.
19790 Specifying @option{-maix64} implies @option{-mpowerpc64},
19791 while @option{-maix32} disables the 64-bit ABI and
19792 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
19793
19794 @item -mxl-compat
19795 @itemx -mno-xl-compat
19796 @opindex mxl-compat
19797 @opindex mno-xl-compat
19798 Produce code that conforms more closely to IBM XL compiler semantics
19799 when using AIX-compatible ABI@.  Pass floating-point arguments to
19800 prototyped functions beyond the register save area (RSA) on the stack
19801 in addition to argument FPRs.  Do not assume that most significant
19802 double in 128-bit long double value is properly rounded when comparing
19803 values and converting to double.  Use XL symbol names for long double
19804 support routines.
19805
19806 The AIX calling convention was extended but not initially documented to
19807 handle an obscure K&R C case of calling a function that takes the
19808 address of its arguments with fewer arguments than declared.  IBM XL
19809 compilers access floating-point arguments that do not fit in the
19810 RSA from the stack when a subroutine is compiled without
19811 optimization.  Because always storing floating-point arguments on the
19812 stack is inefficient and rarely needed, this option is not enabled by
19813 default and only is necessary when calling subroutines compiled by IBM
19814 XL compilers without optimization.
19815
19816 @item -mpe
19817 @opindex mpe
19818 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
19819 application written to use message passing with special startup code to
19820 enable the application to run.  The system must have PE installed in the
19821 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
19822 must be overridden with the @option{-specs=} option to specify the
19823 appropriate directory location.  The Parallel Environment does not
19824 support threads, so the @option{-mpe} option and the @option{-pthread}
19825 option are incompatible.
19826
19827 @item -malign-natural
19828 @itemx -malign-power
19829 @opindex malign-natural
19830 @opindex malign-power
19831 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19832 @option{-malign-natural} overrides the ABI-defined alignment of larger
19833 types, such as floating-point doubles, on their natural size-based boundary.
19834 The option @option{-malign-power} instructs GCC to follow the ABI-specified
19835 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
19836
19837 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
19838 is not supported.
19839
19840 @item -msoft-float
19841 @itemx -mhard-float
19842 @opindex msoft-float
19843 @opindex mhard-float
19844 Generate code that does not use (uses) the floating-point register set.
19845 Software floating-point emulation is provided if you use the
19846 @option{-msoft-float} option, and pass the option to GCC when linking.
19847
19848 @item -msingle-float
19849 @itemx -mdouble-float
19850 @opindex msingle-float
19851 @opindex mdouble-float
19852 Generate code for single- or double-precision floating-point operations.
19853 @option{-mdouble-float} implies @option{-msingle-float}.
19854
19855 @item -msimple-fpu
19856 @opindex msimple-fpu
19857 Do not generate @code{sqrt} and @code{div} instructions for hardware
19858 floating-point unit.
19859
19860 @item -mfpu=@var{name}
19861 @opindex mfpu
19862 Specify type of floating-point unit.  Valid values for @var{name} are
19863 @samp{sp_lite} (equivalent to @option{-msingle-float -msimple-fpu}),
19864 @samp{dp_lite} (equivalent to @option{-mdouble-float -msimple-fpu}),
19865 @samp{sp_full} (equivalent to @option{-msingle-float}),
19866 and @samp{dp_full} (equivalent to @option{-mdouble-float}).
19867
19868 @item -mxilinx-fpu
19869 @opindex mxilinx-fpu
19870 Perform optimizations for the floating-point unit on Xilinx PPC 405/440.
19871
19872 @item -mmultiple
19873 @itemx -mno-multiple
19874 @opindex mmultiple
19875 @opindex mno-multiple
19876 Generate code that uses (does not use) the load multiple word
19877 instructions and the store multiple word instructions.  These
19878 instructions are generated by default on POWER systems, and not
19879 generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
19880 PowerPC systems, since those instructions do not work when the
19881 processor is in little-endian mode.  The exceptions are PPC740 and
19882 PPC750 which permit these instructions in little-endian mode.
19883
19884 @item -mstring
19885 @itemx -mno-string
19886 @opindex mstring
19887 @opindex mno-string
19888 Generate code that uses (does not use) the load string instructions
19889 and the store string word instructions to save multiple registers and
19890 do small block moves.  These instructions are generated by default on
19891 POWER systems, and not generated on PowerPC systems.  Do not use
19892 @option{-mstring} on little-endian PowerPC systems, since those
19893 instructions do not work when the processor is in little-endian mode.
19894 The exceptions are PPC740 and PPC750 which permit these instructions
19895 in little-endian mode.
19896
19897 @item -mupdate
19898 @itemx -mno-update
19899 @opindex mupdate
19900 @opindex mno-update
19901 Generate code that uses (does not use) the load or store instructions
19902 that update the base register to the address of the calculated memory
19903 location.  These instructions are generated by default.  If you use
19904 @option{-mno-update}, there is a small window between the time that the
19905 stack pointer is updated and the address of the previous frame is
19906 stored, which means code that walks the stack frame across interrupts or
19907 signals may get corrupted data.
19908
19909 @item -mavoid-indexed-addresses
19910 @itemx -mno-avoid-indexed-addresses
19911 @opindex mavoid-indexed-addresses
19912 @opindex mno-avoid-indexed-addresses
19913 Generate code that tries to avoid (not avoid) the use of indexed load
19914 or store instructions. These instructions can incur a performance
19915 penalty on Power6 processors in certain situations, such as when
19916 stepping through large arrays that cross a 16M boundary.  This option
19917 is enabled by default when targeting Power6 and disabled otherwise.
19918
19919 @item -mfused-madd
19920 @itemx -mno-fused-madd
19921 @opindex mfused-madd
19922 @opindex mno-fused-madd
19923 Generate code that uses (does not use) the floating-point multiply and
19924 accumulate instructions.  These instructions are generated by default
19925 if hardware floating point is used.  The machine-dependent
19926 @option{-mfused-madd} option is now mapped to the machine-independent
19927 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
19928 mapped to @option{-ffp-contract=off}.
19929
19930 @item -mmulhw
19931 @itemx -mno-mulhw
19932 @opindex mmulhw
19933 @opindex mno-mulhw
19934 Generate code that uses (does not use) the half-word multiply and
19935 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
19936 These instructions are generated by default when targeting those
19937 processors.
19938
19939 @item -mdlmzb
19940 @itemx -mno-dlmzb
19941 @opindex mdlmzb
19942 @opindex mno-dlmzb
19943 Generate code that uses (does not use) the string-search @samp{dlmzb}
19944 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
19945 generated by default when targeting those processors.
19946
19947 @item -mno-bit-align
19948 @itemx -mbit-align
19949 @opindex mno-bit-align
19950 @opindex mbit-align
19951 On System V.4 and embedded PowerPC systems do not (do) force structures
19952 and unions that contain bit-fields to be aligned to the base type of the
19953 bit-field.
19954
19955 For example, by default a structure containing nothing but 8
19956 @code{unsigned} bit-fields of length 1 is aligned to a 4-byte
19957 boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
19958 the structure is aligned to a 1-byte boundary and is 1 byte in
19959 size.
19960
19961 @item -mno-strict-align
19962 @itemx -mstrict-align
19963 @opindex mno-strict-align
19964 @opindex mstrict-align
19965 On System V.4 and embedded PowerPC systems do not (do) assume that
19966 unaligned memory references are handled by the system.
19967
19968 @item -mrelocatable
19969 @itemx -mno-relocatable
19970 @opindex mrelocatable
19971 @opindex mno-relocatable
19972 Generate code that allows (does not allow) a static executable to be
19973 relocated to a different address at run time.  A simple embedded
19974 PowerPC system loader should relocate the entire contents of
19975 @code{.got2} and 4-byte locations listed in the @code{.fixup} section,
19976 a table of 32-bit addresses generated by this option.  For this to
19977 work, all objects linked together must be compiled with
19978 @option{-mrelocatable} or @option{-mrelocatable-lib}.
19979 @option{-mrelocatable} code aligns the stack to an 8-byte boundary.
19980
19981 @item -mrelocatable-lib
19982 @itemx -mno-relocatable-lib
19983 @opindex mrelocatable-lib
19984 @opindex mno-relocatable-lib
19985 Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
19986 @code{.fixup} section to allow static executables to be relocated at
19987 run time, but @option{-mrelocatable-lib} does not use the smaller stack
19988 alignment of @option{-mrelocatable}.  Objects compiled with
19989 @option{-mrelocatable-lib} may be linked with objects compiled with
19990 any combination of the @option{-mrelocatable} options.
19991
19992 @item -mno-toc
19993 @itemx -mtoc
19994 @opindex mno-toc
19995 @opindex mtoc
19996 On System V.4 and embedded PowerPC systems do not (do) assume that
19997 register 2 contains a pointer to a global area pointing to the addresses
19998 used in the program.
19999
20000 @item -mlittle
20001 @itemx -mlittle-endian
20002 @opindex mlittle
20003 @opindex mlittle-endian
20004 On System V.4 and embedded PowerPC systems compile code for the
20005 processor in little-endian mode.  The @option{-mlittle-endian} option is
20006 the same as @option{-mlittle}.
20007
20008 @item -mbig
20009 @itemx -mbig-endian
20010 @opindex mbig
20011 @opindex mbig-endian
20012 On System V.4 and embedded PowerPC systems compile code for the
20013 processor in big-endian mode.  The @option{-mbig-endian} option is
20014 the same as @option{-mbig}.
20015
20016 @item -mdynamic-no-pic
20017 @opindex mdynamic-no-pic
20018 On Darwin and Mac OS X systems, compile code so that it is not
20019 relocatable, but that its external references are relocatable.  The
20020 resulting code is suitable for applications, but not shared
20021 libraries.
20022
20023 @item -msingle-pic-base
20024 @opindex msingle-pic-base
20025 Treat the register used for PIC addressing as read-only, rather than
20026 loading it in the prologue for each function.  The runtime system is
20027 responsible for initializing this register with an appropriate value
20028 before execution begins.
20029
20030 @item -mprioritize-restricted-insns=@var{priority}
20031 @opindex mprioritize-restricted-insns
20032 This option controls the priority that is assigned to
20033 dispatch-slot restricted instructions during the second scheduling
20034 pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
20035 or @samp{2} to assign no, highest, or second-highest (respectively) 
20036 priority to dispatch-slot restricted
20037 instructions.
20038
20039 @item -msched-costly-dep=@var{dependence_type}
20040 @opindex msched-costly-dep
20041 This option controls which dependences are considered costly
20042 by the target during instruction scheduling.  The argument
20043 @var{dependence_type} takes one of the following values:
20044
20045 @table @asis
20046 @item @samp{no}
20047 No dependence is costly.
20048
20049 @item @samp{all}
20050 All dependences are costly.
20051
20052 @item @samp{true_store_to_load}
20053 A true dependence from store to load is costly.
20054
20055 @item @samp{store_to_load}
20056 Any dependence from store to load is costly.
20057
20058 @item @var{number}
20059 Any dependence for which the latency is greater than or equal to 
20060 @var{number} is costly.
20061 @end table
20062
20063 @item -minsert-sched-nops=@var{scheme}
20064 @opindex minsert-sched-nops
20065 This option controls which NOP insertion scheme is used during
20066 the second scheduling pass.  The argument @var{scheme} takes one of the
20067 following values:
20068
20069 @table @asis
20070 @item @samp{no}
20071 Don't insert NOPs.
20072
20073 @item @samp{pad}
20074 Pad with NOPs any dispatch group that has vacant issue slots,
20075 according to the scheduler's grouping.
20076
20077 @item @samp{regroup_exact}
20078 Insert NOPs to force costly dependent insns into
20079 separate groups.  Insert exactly as many NOPs as needed to force an insn
20080 to a new group, according to the estimated processor grouping.
20081
20082 @item @var{number}
20083 Insert NOPs to force costly dependent insns into
20084 separate groups.  Insert @var{number} NOPs to force an insn to a new group.
20085 @end table
20086
20087 @item -mcall-sysv
20088 @opindex mcall-sysv
20089 On System V.4 and embedded PowerPC systems compile code using calling
20090 conventions that adhere to the March 1995 draft of the System V
20091 Application Binary Interface, PowerPC processor supplement.  This is the
20092 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
20093
20094 @item -mcall-sysv-eabi
20095 @itemx -mcall-eabi
20096 @opindex mcall-sysv-eabi
20097 @opindex mcall-eabi
20098 Specify both @option{-mcall-sysv} and @option{-meabi} options.
20099
20100 @item -mcall-sysv-noeabi
20101 @opindex mcall-sysv-noeabi
20102 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
20103
20104 @item -mcall-aixdesc
20105 @opindex m
20106 On System V.4 and embedded PowerPC systems compile code for the AIX
20107 operating system.
20108
20109 @item -mcall-linux
20110 @opindex mcall-linux
20111 On System V.4 and embedded PowerPC systems compile code for the
20112 Linux-based GNU system.
20113
20114 @item -mcall-freebsd
20115 @opindex mcall-freebsd
20116 On System V.4 and embedded PowerPC systems compile code for the
20117 FreeBSD operating system.
20118
20119 @item -mcall-netbsd
20120 @opindex mcall-netbsd
20121 On System V.4 and embedded PowerPC systems compile code for the
20122 NetBSD operating system.
20123
20124 @item -mcall-openbsd
20125 @opindex mcall-netbsd
20126 On System V.4 and embedded PowerPC systems compile code for the
20127 OpenBSD operating system.
20128
20129 @item -maix-struct-return
20130 @opindex maix-struct-return
20131 Return all structures in memory (as specified by the AIX ABI)@.
20132
20133 @item -msvr4-struct-return
20134 @opindex msvr4-struct-return
20135 Return structures smaller than 8 bytes in registers (as specified by the
20136 SVR4 ABI)@.
20137
20138 @item -mabi=@var{abi-type}
20139 @opindex mabi
20140 Extend the current ABI with a particular extension, or remove such extension.
20141 Valid values are @samp{altivec}, @samp{no-altivec}, @samp{spe},
20142 @samp{no-spe}, @samp{ibmlongdouble}, @samp{ieeelongdouble},
20143 @samp{elfv1}, @samp{elfv2}@.
20144
20145 @item -mabi=spe
20146 @opindex mabi=spe
20147 Extend the current ABI with SPE ABI extensions.  This does not change
20148 the default ABI, instead it adds the SPE ABI extensions to the current
20149 ABI@.
20150
20151 @item -mabi=no-spe
20152 @opindex mabi=no-spe
20153 Disable Book-E SPE ABI extensions for the current ABI@.
20154
20155 @item -mabi=ibmlongdouble
20156 @opindex mabi=ibmlongdouble
20157 Change the current ABI to use IBM extended-precision long double.
20158 This is a PowerPC 32-bit SYSV ABI option.
20159
20160 @item -mabi=ieeelongdouble
20161 @opindex mabi=ieeelongdouble
20162 Change the current ABI to use IEEE extended-precision long double.
20163 This is a PowerPC 32-bit Linux ABI option.
20164
20165 @item -mabi=elfv1
20166 @opindex mabi=elfv1
20167 Change the current ABI to use the ELFv1 ABI.
20168 This is the default ABI for big-endian PowerPC 64-bit Linux.
20169 Overriding the default ABI requires special system support and is
20170 likely to fail in spectacular ways.
20171
20172 @item -mabi=elfv2
20173 @opindex mabi=elfv2
20174 Change the current ABI to use the ELFv2 ABI.
20175 This is the default ABI for little-endian PowerPC 64-bit Linux.
20176 Overriding the default ABI requires special system support and is
20177 likely to fail in spectacular ways.
20178
20179 @item -mprototype
20180 @itemx -mno-prototype
20181 @opindex mprototype
20182 @opindex mno-prototype
20183 On System V.4 and embedded PowerPC systems assume that all calls to
20184 variable argument functions are properly prototyped.  Otherwise, the
20185 compiler must insert an instruction before every non-prototyped call to
20186 set or clear bit 6 of the condition code register (@code{CR}) to
20187 indicate whether floating-point values are passed in the floating-point
20188 registers in case the function takes variable arguments.  With
20189 @option{-mprototype}, only calls to prototyped variable argument functions
20190 set or clear the bit.
20191
20192 @item -msim
20193 @opindex msim
20194 On embedded PowerPC systems, assume that the startup module is called
20195 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
20196 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
20197 configurations.
20198
20199 @item -mmvme
20200 @opindex mmvme
20201 On embedded PowerPC systems, assume that the startup module is called
20202 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
20203 @file{libc.a}.
20204
20205 @item -mads
20206 @opindex mads
20207 On embedded PowerPC systems, assume that the startup module is called
20208 @file{crt0.o} and the standard C libraries are @file{libads.a} and
20209 @file{libc.a}.
20210
20211 @item -myellowknife
20212 @opindex myellowknife
20213 On embedded PowerPC systems, assume that the startup module is called
20214 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
20215 @file{libc.a}.
20216
20217 @item -mvxworks
20218 @opindex mvxworks
20219 On System V.4 and embedded PowerPC systems, specify that you are
20220 compiling for a VxWorks system.
20221
20222 @item -memb
20223 @opindex memb
20224 On embedded PowerPC systems, set the @code{PPC_EMB} bit in the ELF flags
20225 header to indicate that @samp{eabi} extended relocations are used.
20226
20227 @item -meabi
20228 @itemx -mno-eabi
20229 @opindex meabi
20230 @opindex mno-eabi
20231 On System V.4 and embedded PowerPC systems do (do not) adhere to the
20232 Embedded Applications Binary Interface (EABI), which is a set of
20233 modifications to the System V.4 specifications.  Selecting @option{-meabi}
20234 means that the stack is aligned to an 8-byte boundary, a function
20235 @code{__eabi} is called from @code{main} to set up the EABI
20236 environment, and the @option{-msdata} option can use both @code{r2} and
20237 @code{r13} to point to two separate small data areas.  Selecting
20238 @option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
20239 no EABI initialization function is called from @code{main}, and the
20240 @option{-msdata} option only uses @code{r13} to point to a single
20241 small data area.  The @option{-meabi} option is on by default if you
20242 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
20243
20244 @item -msdata=eabi
20245 @opindex msdata=eabi
20246 On System V.4 and embedded PowerPC systems, put small initialized
20247 @code{const} global and static data in the @code{.sdata2} section, which
20248 is pointed to by register @code{r2}.  Put small initialized
20249 non-@code{const} global and static data in the @code{.sdata} section,
20250 which is pointed to by register @code{r13}.  Put small uninitialized
20251 global and static data in the @code{.sbss} section, which is adjacent to
20252 the @code{.sdata} section.  The @option{-msdata=eabi} option is
20253 incompatible with the @option{-mrelocatable} option.  The
20254 @option{-msdata=eabi} option also sets the @option{-memb} option.
20255
20256 @item -msdata=sysv
20257 @opindex msdata=sysv
20258 On System V.4 and embedded PowerPC systems, put small global and static
20259 data in the @code{.sdata} section, which is pointed to by register
20260 @code{r13}.  Put small uninitialized global and static data in the
20261 @code{.sbss} section, which is adjacent to the @code{.sdata} section.
20262 The @option{-msdata=sysv} option is incompatible with the
20263 @option{-mrelocatable} option.
20264
20265 @item -msdata=default
20266 @itemx -msdata
20267 @opindex msdata=default
20268 @opindex msdata
20269 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
20270 compile code the same as @option{-msdata=eabi}, otherwise compile code the
20271 same as @option{-msdata=sysv}.
20272
20273 @item -msdata=data
20274 @opindex msdata=data
20275 On System V.4 and embedded PowerPC systems, put small global
20276 data in the @code{.sdata} section.  Put small uninitialized global
20277 data in the @code{.sbss} section.  Do not use register @code{r13}
20278 to address small data however.  This is the default behavior unless
20279 other @option{-msdata} options are used.
20280
20281 @item -msdata=none
20282 @itemx -mno-sdata
20283 @opindex msdata=none
20284 @opindex mno-sdata
20285 On embedded PowerPC systems, put all initialized global and static data
20286 in the @code{.data} section, and all uninitialized data in the
20287 @code{.bss} section.
20288
20289 @item -mblock-move-inline-limit=@var{num}
20290 @opindex mblock-move-inline-limit
20291 Inline all block moves (such as calls to @code{memcpy} or structure
20292 copies) less than or equal to @var{num} bytes.  The minimum value for
20293 @var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
20294 targets.  The default value is target-specific.
20295
20296 @item -G @var{num}
20297 @opindex G
20298 @cindex smaller data references (PowerPC)
20299 @cindex .sdata/.sdata2 references (PowerPC)
20300 On embedded PowerPC systems, put global and static items less than or
20301 equal to @var{num} bytes into the small data or BSS sections instead of
20302 the normal data or BSS section.  By default, @var{num} is 8.  The
20303 @option{-G @var{num}} switch is also passed to the linker.
20304 All modules should be compiled with the same @option{-G @var{num}} value.
20305
20306 @item -mregnames
20307 @itemx -mno-regnames
20308 @opindex mregnames
20309 @opindex mno-regnames
20310 On System V.4 and embedded PowerPC systems do (do not) emit register
20311 names in the assembly language output using symbolic forms.
20312
20313 @item -mlongcall
20314 @itemx -mno-longcall
20315 @opindex mlongcall
20316 @opindex mno-longcall
20317 By default assume that all calls are far away so that a longer and more
20318 expensive calling sequence is required.  This is required for calls
20319 farther than 32 megabytes (33,554,432 bytes) from the current location.
20320 A short call is generated if the compiler knows
20321 the call cannot be that far away.  This setting can be overridden by
20322 the @code{shortcall} function attribute, or by @code{#pragma
20323 longcall(0)}.
20324
20325 Some linkers are capable of detecting out-of-range calls and generating
20326 glue code on the fly.  On these systems, long calls are unnecessary and
20327 generate slower code.  As of this writing, the AIX linker can do this,
20328 as can the GNU linker for PowerPC/64.  It is planned to add this feature
20329 to the GNU linker for 32-bit PowerPC systems as well.
20330
20331 On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
20332 callee, L42}, plus a @dfn{branch island} (glue code).  The two target
20333 addresses represent the callee and the branch island.  The
20334 Darwin/PPC linker prefers the first address and generates a @code{bl
20335 callee} if the PPC @code{bl} instruction reaches the callee directly;
20336 otherwise, the linker generates @code{bl L42} to call the branch
20337 island.  The branch island is appended to the body of the
20338 calling function; it computes the full 32-bit address of the callee
20339 and jumps to it.
20340
20341 On Mach-O (Darwin) systems, this option directs the compiler emit to
20342 the glue for every direct call, and the Darwin linker decides whether
20343 to use or discard it.
20344
20345 In the future, GCC may ignore all longcall specifications
20346 when the linker is known to generate glue.
20347
20348 @item -mtls-markers
20349 @itemx -mno-tls-markers
20350 @opindex mtls-markers
20351 @opindex mno-tls-markers
20352 Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
20353 specifying the function argument.  The relocation allows the linker to
20354 reliably associate function call with argument setup instructions for
20355 TLS optimization, which in turn allows GCC to better schedule the
20356 sequence.
20357
20358 @item -pthread
20359 @opindex pthread
20360 Adds support for multithreading with the @dfn{pthreads} library.
20361 This option sets flags for both the preprocessor and linker.
20362
20363 @item -mrecip
20364 @itemx -mno-recip
20365 @opindex mrecip
20366 This option enables use of the reciprocal estimate and
20367 reciprocal square root estimate instructions with additional
20368 Newton-Raphson steps to increase precision instead of doing a divide or
20369 square root and divide for floating-point arguments.  You should use
20370 the @option{-ffast-math} option when using @option{-mrecip} (or at
20371 least @option{-funsafe-math-optimizations},
20372 @option{-finite-math-only}, @option{-freciprocal-math} and
20373 @option{-fno-trapping-math}).  Note that while the throughput of the
20374 sequence is generally higher than the throughput of the non-reciprocal
20375 instruction, the precision of the sequence can be decreased by up to 2
20376 ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
20377 roots.
20378
20379 @item -mrecip=@var{opt}
20380 @opindex mrecip=opt
20381 This option controls which reciprocal estimate instructions
20382 may be used.  @var{opt} is a comma-separated list of options, which may
20383 be preceded by a @code{!} to invert the option:
20384
20385 @table @samp
20386
20387 @item all
20388 Enable all estimate instructions.
20389
20390 @item default 
20391 Enable the default instructions, equivalent to @option{-mrecip}.
20392
20393 @item none 
20394 Disable all estimate instructions, equivalent to @option{-mno-recip}.
20395
20396 @item div 
20397 Enable the reciprocal approximation instructions for both 
20398 single and double precision.
20399
20400 @item divf 
20401 Enable the single-precision reciprocal approximation instructions.
20402
20403 @item divd 
20404 Enable the double-precision reciprocal approximation instructions.
20405
20406 @item rsqrt 
20407 Enable the reciprocal square root approximation instructions for both
20408 single and double precision.
20409
20410 @item rsqrtf 
20411 Enable the single-precision reciprocal square root approximation instructions.
20412
20413 @item rsqrtd 
20414 Enable the double-precision reciprocal square root approximation instructions.
20415
20416 @end table
20417
20418 So, for example, @option{-mrecip=all,!rsqrtd} enables
20419 all of the reciprocal estimate instructions, except for the
20420 @code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
20421 which handle the double-precision reciprocal square root calculations.
20422
20423 @item -mrecip-precision
20424 @itemx -mno-recip-precision
20425 @opindex mrecip-precision
20426 Assume (do not assume) that the reciprocal estimate instructions
20427 provide higher-precision estimates than is mandated by the PowerPC
20428 ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
20429 @option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
20430 The double-precision square root estimate instructions are not generated by
20431 default on low-precision machines, since they do not provide an
20432 estimate that converges after three steps.
20433
20434 @item -mveclibabi=@var{type}
20435 @opindex mveclibabi
20436 Specifies the ABI type to use for vectorizing intrinsics using an
20437 external library.  The only type supported at present is @samp{mass},
20438 which specifies to use IBM's Mathematical Acceleration Subsystem
20439 (MASS) libraries for vectorizing intrinsics using external libraries.
20440 GCC currently emits calls to @code{acosd2}, @code{acosf4},
20441 @code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
20442 @code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
20443 @code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
20444 @code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
20445 @code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
20446 @code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
20447 @code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
20448 @code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
20449 @code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
20450 @code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
20451 @code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
20452 @code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
20453 @code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
20454 for power7.  Both @option{-ftree-vectorize} and
20455 @option{-funsafe-math-optimizations} must also be enabled.  The MASS
20456 libraries must be specified at link time.
20457
20458 @item -mfriz
20459 @itemx -mno-friz
20460 @opindex mfriz
20461 Generate (do not generate) the @code{friz} instruction when the
20462 @option{-funsafe-math-optimizations} option is used to optimize
20463 rounding of floating-point values to 64-bit integer and back to floating
20464 point.  The @code{friz} instruction does not return the same value if
20465 the floating-point number is too large to fit in an integer.
20466
20467 @item -mpointers-to-nested-functions
20468 @itemx -mno-pointers-to-nested-functions
20469 @opindex mpointers-to-nested-functions
20470 Generate (do not generate) code to load up the static chain register
20471 (@code{r11}) when calling through a pointer on AIX and 64-bit Linux
20472 systems where a function pointer points to a 3-word descriptor giving
20473 the function address, TOC value to be loaded in register @code{r2}, and
20474 static chain value to be loaded in register @code{r11}.  The
20475 @option{-mpointers-to-nested-functions} is on by default.  You cannot
20476 call through pointers to nested functions or pointers
20477 to functions compiled in other languages that use the static chain if
20478 you use @option{-mno-pointers-to-nested-functions}.
20479
20480 @item -msave-toc-indirect
20481 @itemx -mno-save-toc-indirect
20482 @opindex msave-toc-indirect
20483 Generate (do not generate) code to save the TOC value in the reserved
20484 stack location in the function prologue if the function calls through
20485 a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
20486 saved in the prologue, it is saved just before the call through the
20487 pointer.  The @option{-mno-save-toc-indirect} option is the default.
20488
20489 @item -mcompat-align-parm
20490 @itemx -mno-compat-align-parm
20491 @opindex mcompat-align-parm
20492 Generate (do not generate) code to pass structure parameters with a
20493 maximum alignment of 64 bits, for compatibility with older versions
20494 of GCC.
20495
20496 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
20497 structure parameter on a 128-bit boundary when that structure contained
20498 a member requiring 128-bit alignment.  This is corrected in more
20499 recent versions of GCC.  This option may be used to generate code
20500 that is compatible with functions compiled with older versions of
20501 GCC.
20502
20503 The @option{-mno-compat-align-parm} option is the default.
20504 @end table
20505
20506 @node RX Options
20507 @subsection RX Options
20508 @cindex RX Options
20509
20510 These command-line options are defined for RX targets:
20511
20512 @table @gcctabopt
20513 @item -m64bit-doubles
20514 @itemx -m32bit-doubles
20515 @opindex m64bit-doubles
20516 @opindex m32bit-doubles
20517 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
20518 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
20519 @option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
20520 works on 32-bit values, which is why the default is
20521 @option{-m32bit-doubles}.
20522
20523 @item -fpu
20524 @itemx -nofpu
20525 @opindex fpu
20526 @opindex nofpu
20527 Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
20528 floating-point hardware.  The default is enabled for the RX600
20529 series and disabled for the RX200 series.
20530
20531 Floating-point instructions are only generated for 32-bit floating-point 
20532 values, however, so the FPU hardware is not used for doubles if the
20533 @option{-m64bit-doubles} option is used.
20534
20535 @emph{Note} If the @option{-fpu} option is enabled then
20536 @option{-funsafe-math-optimizations} is also enabled automatically.
20537 This is because the RX FPU instructions are themselves unsafe.
20538
20539 @item -mcpu=@var{name}
20540 @opindex mcpu
20541 Selects the type of RX CPU to be targeted.  Currently three types are
20542 supported, the generic @samp{RX600} and @samp{RX200} series hardware and
20543 the specific @samp{RX610} CPU.  The default is @samp{RX600}.
20544
20545 The only difference between @samp{RX600} and @samp{RX610} is that the
20546 @samp{RX610} does not support the @code{MVTIPL} instruction.
20547
20548 The @samp{RX200} series does not have a hardware floating-point unit
20549 and so @option{-nofpu} is enabled by default when this type is
20550 selected.
20551
20552 @item -mbig-endian-data
20553 @itemx -mlittle-endian-data
20554 @opindex mbig-endian-data
20555 @opindex mlittle-endian-data
20556 Store data (but not code) in the big-endian format.  The default is
20557 @option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
20558 format.
20559
20560 @item -msmall-data-limit=@var{N}
20561 @opindex msmall-data-limit
20562 Specifies the maximum size in bytes of global and static variables
20563 which can be placed into the small data area.  Using the small data
20564 area can lead to smaller and faster code, but the size of area is
20565 limited and it is up to the programmer to ensure that the area does
20566 not overflow.  Also when the small data area is used one of the RX's
20567 registers (usually @code{r13}) is reserved for use pointing to this
20568 area, so it is no longer available for use by the compiler.  This
20569 could result in slower and/or larger code if variables are pushed onto
20570 the stack instead of being held in this register.
20571
20572 Note, common variables (variables that have not been initialized) and
20573 constants are not placed into the small data area as they are assigned
20574 to other sections in the output executable.
20575
20576 The default value is zero, which disables this feature.  Note, this
20577 feature is not enabled by default with higher optimization levels
20578 (@option{-O2} etc) because of the potentially detrimental effects of
20579 reserving a register.  It is up to the programmer to experiment and
20580 discover whether this feature is of benefit to their program.  See the
20581 description of the @option{-mpid} option for a description of how the
20582 actual register to hold the small data area pointer is chosen.
20583
20584 @item -msim
20585 @itemx -mno-sim
20586 @opindex msim
20587 @opindex mno-sim
20588 Use the simulator runtime.  The default is to use the libgloss
20589 board-specific runtime.
20590
20591 @item -mas100-syntax
20592 @itemx -mno-as100-syntax
20593 @opindex mas100-syntax
20594 @opindex mno-as100-syntax
20595 When generating assembler output use a syntax that is compatible with
20596 Renesas's AS100 assembler.  This syntax can also be handled by the GAS
20597 assembler, but it has some restrictions so it is not generated by default.
20598
20599 @item -mmax-constant-size=@var{N}
20600 @opindex mmax-constant-size
20601 Specifies the maximum size, in bytes, of a constant that can be used as
20602 an operand in a RX instruction.  Although the RX instruction set does
20603 allow constants of up to 4 bytes in length to be used in instructions,
20604 a longer value equates to a longer instruction.  Thus in some
20605 circumstances it can be beneficial to restrict the size of constants
20606 that are used in instructions.  Constants that are too big are instead
20607 placed into a constant pool and referenced via register indirection.
20608
20609 The value @var{N} can be between 0 and 4.  A value of 0 (the default)
20610 or 4 means that constants of any size are allowed.
20611
20612 @item -mrelax
20613 @opindex mrelax
20614 Enable linker relaxation.  Linker relaxation is a process whereby the
20615 linker attempts to reduce the size of a program by finding shorter
20616 versions of various instructions.  Disabled by default.
20617
20618 @item -mint-register=@var{N}
20619 @opindex mint-register
20620 Specify the number of registers to reserve for fast interrupt handler
20621 functions.  The value @var{N} can be between 0 and 4.  A value of 1
20622 means that register @code{r13} is reserved for the exclusive use
20623 of fast interrupt handlers.  A value of 2 reserves @code{r13} and
20624 @code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
20625 @code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
20626 A value of 0, the default, does not reserve any registers.
20627
20628 @item -msave-acc-in-interrupts
20629 @opindex msave-acc-in-interrupts
20630 Specifies that interrupt handler functions should preserve the
20631 accumulator register.  This is only necessary if normal code might use
20632 the accumulator register, for example because it performs 64-bit
20633 multiplications.  The default is to ignore the accumulator as this
20634 makes the interrupt handlers faster.
20635
20636 @item -mpid
20637 @itemx -mno-pid
20638 @opindex mpid
20639 @opindex mno-pid
20640 Enables the generation of position independent data.  When enabled any
20641 access to constant data is done via an offset from a base address
20642 held in a register.  This allows the location of constant data to be
20643 determined at run time without requiring the executable to be
20644 relocated, which is a benefit to embedded applications with tight
20645 memory constraints.  Data that can be modified is not affected by this
20646 option.
20647
20648 Note, using this feature reserves a register, usually @code{r13}, for
20649 the constant data base address.  This can result in slower and/or
20650 larger code, especially in complicated functions.
20651
20652 The actual register chosen to hold the constant data base address
20653 depends upon whether the @option{-msmall-data-limit} and/or the
20654 @option{-mint-register} command-line options are enabled.  Starting
20655 with register @code{r13} and proceeding downwards, registers are
20656 allocated first to satisfy the requirements of @option{-mint-register},
20657 then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
20658 is possible for the small data area register to be @code{r8} if both
20659 @option{-mint-register=4} and @option{-mpid} are specified on the
20660 command line.
20661
20662 By default this feature is not enabled.  The default can be restored
20663 via the @option{-mno-pid} command-line option.
20664
20665 @item -mno-warn-multiple-fast-interrupts
20666 @itemx -mwarn-multiple-fast-interrupts
20667 @opindex mno-warn-multiple-fast-interrupts
20668 @opindex mwarn-multiple-fast-interrupts
20669 Prevents GCC from issuing a warning message if it finds more than one
20670 fast interrupt handler when it is compiling a file.  The default is to
20671 issue a warning for each extra fast interrupt handler found, as the RX
20672 only supports one such interrupt.
20673
20674 @item -mallow-string-insns
20675 @itemx -mno-allow-string-insns
20676 @opindex mallow-string-insns
20677 @opindex mno-allow-string-insns
20678 Enables or disables the use of the string manipulation instructions
20679 @code{SMOVF}, @code{SCMPU}, @code{SMOVB}, @code{SMOVU}, @code{SUNTIL}
20680 @code{SWHILE} and also the @code{RMPA} instruction.  These
20681 instructions may prefetch data, which is not safe to do if accessing
20682 an I/O register.  (See section 12.2.7 of the RX62N Group User's Manual
20683 for more information).
20684
20685 The default is to allow these instructions, but it is not possible for
20686 GCC to reliably detect all circumstances where a string instruction
20687 might be used to access an I/O register, so their use cannot be
20688 disabled automatically.  Instead it is reliant upon the programmer to
20689 use the @option{-mno-allow-string-insns} option if their program
20690 accesses I/O space.
20691
20692 When the instructions are enabled GCC defines the C preprocessor
20693 symbol @code{__RX_ALLOW_STRING_INSNS__}, otherwise it defines the
20694 symbol @code{__RX_DISALLOW_STRING_INSNS__}.
20695
20696 @item -mjsr
20697 @itemx -mno-jsr
20698 @opindex mjsr
20699 @opindex mno-jsr
20700 Use only (or not only) @code{JSR} instructions to access functions.
20701 This option can be used when code size exceeds the range of @code{BSR}
20702 instructions.  Note that @option{-mno-jsr} does not mean to not use
20703 @code{JSR} but instead means that any type of branch may be used.
20704 @end table
20705
20706 @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
20707 has special significance to the RX port when used with the
20708 @code{interrupt} function attribute.  This attribute indicates a
20709 function intended to process fast interrupts.  GCC ensures
20710 that it only uses the registers @code{r10}, @code{r11}, @code{r12}
20711 and/or @code{r13} and only provided that the normal use of the
20712 corresponding registers have been restricted via the
20713 @option{-ffixed-@var{reg}} or @option{-mint-register} command-line
20714 options.
20715
20716 @node S/390 and zSeries Options
20717 @subsection S/390 and zSeries Options
20718 @cindex S/390 and zSeries Options
20719
20720 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
20721
20722 @table @gcctabopt
20723 @item -mhard-float
20724 @itemx -msoft-float
20725 @opindex mhard-float
20726 @opindex msoft-float
20727 Use (do not use) the hardware floating-point instructions and registers
20728 for floating-point operations.  When @option{-msoft-float} is specified,
20729 functions in @file{libgcc.a} are used to perform floating-point
20730 operations.  When @option{-mhard-float} is specified, the compiler
20731 generates IEEE floating-point instructions.  This is the default.
20732
20733 @item -mhard-dfp
20734 @itemx -mno-hard-dfp
20735 @opindex mhard-dfp
20736 @opindex mno-hard-dfp
20737 Use (do not use) the hardware decimal-floating-point instructions for
20738 decimal-floating-point operations.  When @option{-mno-hard-dfp} is
20739 specified, functions in @file{libgcc.a} are used to perform
20740 decimal-floating-point operations.  When @option{-mhard-dfp} is
20741 specified, the compiler generates decimal-floating-point hardware
20742 instructions.  This is the default for @option{-march=z9-ec} or higher.
20743
20744 @item -mlong-double-64
20745 @itemx -mlong-double-128
20746 @opindex mlong-double-64
20747 @opindex mlong-double-128
20748 These switches control the size of @code{long double} type. A size
20749 of 64 bits makes the @code{long double} type equivalent to the @code{double}
20750 type. This is the default.
20751
20752 @item -mbackchain
20753 @itemx -mno-backchain
20754 @opindex mbackchain
20755 @opindex mno-backchain
20756 Store (do not store) the address of the caller's frame as backchain pointer
20757 into the callee's stack frame.
20758 A backchain may be needed to allow debugging using tools that do not understand
20759 DWARF 2 call frame information.
20760 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
20761 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
20762 the backchain is placed into the topmost word of the 96/160 byte register
20763 save area.
20764
20765 In general, code compiled with @option{-mbackchain} is call-compatible with
20766 code compiled with @option{-mmo-backchain}; however, use of the backchain
20767 for debugging purposes usually requires that the whole binary is built with
20768 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
20769 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
20770 to build a linux kernel use @option{-msoft-float}.
20771
20772 The default is to not maintain the backchain.
20773
20774 @item -mpacked-stack
20775 @itemx -mno-packed-stack
20776 @opindex mpacked-stack
20777 @opindex mno-packed-stack
20778 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
20779 specified, the compiler uses the all fields of the 96/160 byte register save
20780 area only for their default purpose; unused fields still take up stack space.
20781 When @option{-mpacked-stack} is specified, register save slots are densely
20782 packed at the top of the register save area; unused space is reused for other
20783 purposes, allowing for more efficient use of the available stack space.
20784 However, when @option{-mbackchain} is also in effect, the topmost word of
20785 the save area is always used to store the backchain, and the return address
20786 register is always saved two words below the backchain.
20787
20788 As long as the stack frame backchain is not used, code generated with
20789 @option{-mpacked-stack} is call-compatible with code generated with
20790 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
20791 S/390 or zSeries generated code that uses the stack frame backchain at run
20792 time, not just for debugging purposes.  Such code is not call-compatible
20793 with code compiled with @option{-mpacked-stack}.  Also, note that the
20794 combination of @option{-mbackchain},
20795 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
20796 to build a linux kernel use @option{-msoft-float}.
20797
20798 The default is to not use the packed stack layout.
20799
20800 @item -msmall-exec
20801 @itemx -mno-small-exec
20802 @opindex msmall-exec
20803 @opindex mno-small-exec
20804 Generate (or do not generate) code using the @code{bras} instruction
20805 to do subroutine calls.
20806 This only works reliably if the total executable size does not
20807 exceed 64k.  The default is to use the @code{basr} instruction instead,
20808 which does not have this limitation.
20809
20810 @item -m64
20811 @itemx -m31
20812 @opindex m64
20813 @opindex m31
20814 When @option{-m31} is specified, generate code compliant to the
20815 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
20816 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
20817 particular to generate 64-bit instructions.  For the @samp{s390}
20818 targets, the default is @option{-m31}, while the @samp{s390x}
20819 targets default to @option{-m64}.
20820
20821 @item -mzarch
20822 @itemx -mesa
20823 @opindex mzarch
20824 @opindex mesa
20825 When @option{-mzarch} is specified, generate code using the
20826 instructions available on z/Architecture.
20827 When @option{-mesa} is specified, generate code using the
20828 instructions available on ESA/390.  Note that @option{-mesa} is
20829 not possible with @option{-m64}.
20830 When generating code compliant to the GNU/Linux for S/390 ABI,
20831 the default is @option{-mesa}.  When generating code compliant
20832 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
20833
20834 @item -mhtm
20835 @itemx -mno-htm
20836 @opindex mhtm
20837 @opindex mno-htm
20838 The @option{-mhtm} option enables a set of builtins making use of
20839 instructions available with the transactional execution facility
20840 introduced with the IBM zEnterprise EC12 machine generation
20841 @ref{S/390 System z Built-in Functions}.
20842 @option{-mhtm} is enabled by default when using @option{-march=zEC12}.
20843
20844 @item -mvx
20845 @itemx -mno-vx
20846 @opindex mvx
20847 @opindex mno-vx
20848 When @option{-mvx} is specified, generate code using the instructions
20849 available with the vector extension facility introduced with the IBM
20850 z13 machine generation.
20851 This option changes the ABI for some vector type values with regard to
20852 alignment and calling conventions.  In case vector type values are
20853 being used in an ABI-relevant context a GAS @samp{.gnu_attribute}
20854 command will be added to mark the resulting binary with the ABI used.
20855 @option{-mvx} is enabled by default when using @option{-march=z13}.
20856
20857 @item -mzvector
20858 @itemx -mno-zvector
20859 @opindex mzvector
20860 @opindex mno-zvector
20861 The @option{-mzvector} option enables vector language extensions and
20862 builtins using instructions available with the vector extension
20863 facility introduced with the IBM z13 machine generation.
20864 This option adds support for @samp{vector} to be used as a keyword to
20865 define vector type variables and arguments.  @samp{vector} is only
20866 available when GNU extensions are enabled.  It will not be expanded
20867 when requesting strict standard compliance e.g. with @option{-std=c99}.
20868 In addition to the GCC low-level builtins @option{-mzvector} enables
20869 a set of builtins added for compatibility with Altivec-style
20870 implementations like Power and Cell.  In order to make use of these
20871 builtins the header file @file{vecintrin.h} needs to be included.
20872 @option{-mzvector} is disabled by default.
20873
20874 @item -mmvcle
20875 @itemx -mno-mvcle
20876 @opindex mmvcle
20877 @opindex mno-mvcle
20878 Generate (or do not generate) code using the @code{mvcle} instruction
20879 to perform block moves.  When @option{-mno-mvcle} is specified,
20880 use a @code{mvc} loop instead.  This is the default unless optimizing for
20881 size.
20882
20883 @item -mdebug
20884 @itemx -mno-debug
20885 @opindex mdebug
20886 @opindex mno-debug
20887 Print (or do not print) additional debug information when compiling.
20888 The default is to not print debug information.
20889
20890 @item -march=@var{cpu-type}
20891 @opindex march
20892 Generate code that runs on @var{cpu-type}, which is the name of a system
20893 representing a certain processor type.  Possible values for
20894 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
20895 @samp{z9-109}, @samp{z9-ec}, @samp{z10},  @samp{z196}, @samp{zEC12},
20896 and @samp{z13}.
20897 When generating code using the instructions available on z/Architecture,
20898 the default is @option{-march=z900}.  Otherwise, the default is
20899 @option{-march=g5}.
20900
20901 @item -mtune=@var{cpu-type}
20902 @opindex mtune
20903 Tune to @var{cpu-type} everything applicable about the generated code,
20904 except for the ABI and the set of available instructions.
20905 The list of @var{cpu-type} values is the same as for @option{-march}.
20906 The default is the value used for @option{-march}.
20907
20908 @item -mtpf-trace
20909 @itemx -mno-tpf-trace
20910 @opindex mtpf-trace
20911 @opindex mno-tpf-trace
20912 Generate code that adds (does not add) in TPF OS specific branches to trace
20913 routines in the operating system.  This option is off by default, even
20914 when compiling for the TPF OS@.
20915
20916 @item -mfused-madd
20917 @itemx -mno-fused-madd
20918 @opindex mfused-madd
20919 @opindex mno-fused-madd
20920 Generate code that uses (does not use) the floating-point multiply and
20921 accumulate instructions.  These instructions are generated by default if
20922 hardware floating point is used.
20923
20924 @item -mwarn-framesize=@var{framesize}
20925 @opindex mwarn-framesize
20926 Emit a warning if the current function exceeds the given frame size.  Because
20927 this is a compile-time check it doesn't need to be a real problem when the program
20928 runs.  It is intended to identify functions that most probably cause
20929 a stack overflow.  It is useful to be used in an environment with limited stack
20930 size e.g.@: the linux kernel.
20931
20932 @item -mwarn-dynamicstack
20933 @opindex mwarn-dynamicstack
20934 Emit a warning if the function calls @code{alloca} or uses dynamically-sized
20935 arrays.  This is generally a bad idea with a limited stack size.
20936
20937 @item -mstack-guard=@var{stack-guard}
20938 @itemx -mstack-size=@var{stack-size}
20939 @opindex mstack-guard
20940 @opindex mstack-size
20941 If these options are provided the S/390 back end emits additional instructions in
20942 the function prologue that trigger a trap if the stack size is @var{stack-guard}
20943 bytes above the @var{stack-size} (remember that the stack on S/390 grows downward).
20944 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
20945 the frame size of the compiled function is chosen.
20946 These options are intended to be used to help debugging stack overflow problems.
20947 The additionally emitted code causes only little overhead and hence can also be
20948 used in production-like systems without greater performance degradation.  The given
20949 values have to be exact powers of 2 and @var{stack-size} has to be greater than
20950 @var{stack-guard} without exceeding 64k.
20951 In order to be efficient the extra code makes the assumption that the stack starts
20952 at an address aligned to the value given by @var{stack-size}.
20953 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
20954
20955 @item -mhotpatch=@var{pre-halfwords},@var{post-halfwords}
20956 @opindex mhotpatch
20957 If the hotpatch option is enabled, a ``hot-patching'' function
20958 prologue is generated for all functions in the compilation unit.
20959 The funtion label is prepended with the given number of two-byte
20960 NOP instructions (@var{pre-halfwords}, maximum 1000000).  After
20961 the label, 2 * @var{post-halfwords} bytes are appended, using the
20962 largest NOP like instructions the architecture allows (maximum
20963 1000000).
20964
20965 If both arguments are zero, hotpatching is disabled.
20966
20967 This option can be overridden for individual functions with the
20968 @code{hotpatch} attribute.
20969 @end table
20970
20971 @node Score Options
20972 @subsection Score Options
20973 @cindex Score Options
20974
20975 These options are defined for Score implementations:
20976
20977 @table @gcctabopt
20978 @item -meb
20979 @opindex meb
20980 Compile code for big-endian mode.  This is the default.
20981
20982 @item -mel
20983 @opindex mel
20984 Compile code for little-endian mode.
20985
20986 @item -mnhwloop
20987 @opindex mnhwloop
20988 Disable generation of @code{bcnz} instructions.
20989
20990 @item -muls
20991 @opindex muls
20992 Enable generation of unaligned load and store instructions.
20993
20994 @item -mmac
20995 @opindex mmac
20996 Enable the use of multiply-accumulate instructions. Disabled by default.
20997
20998 @item -mscore5
20999 @opindex mscore5
21000 Specify the SCORE5 as the target architecture.
21001
21002 @item -mscore5u
21003 @opindex mscore5u
21004 Specify the SCORE5U of the target architecture.
21005
21006 @item -mscore7
21007 @opindex mscore7
21008 Specify the SCORE7 as the target architecture. This is the default.
21009
21010 @item -mscore7d
21011 @opindex mscore7d
21012 Specify the SCORE7D as the target architecture.
21013 @end table
21014
21015 @node SH Options
21016 @subsection SH Options
21017
21018 These @samp{-m} options are defined for the SH implementations:
21019
21020 @table @gcctabopt
21021 @item -m1
21022 @opindex m1
21023 Generate code for the SH1.
21024
21025 @item -m2
21026 @opindex m2
21027 Generate code for the SH2.
21028
21029 @item -m2e
21030 Generate code for the SH2e.
21031
21032 @item -m2a-nofpu
21033 @opindex m2a-nofpu
21034 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
21035 that the floating-point unit is not used.
21036
21037 @item -m2a-single-only
21038 @opindex m2a-single-only
21039 Generate code for the SH2a-FPU, in such a way that no double-precision
21040 floating-point operations are used.
21041
21042 @item -m2a-single
21043 @opindex m2a-single
21044 Generate code for the SH2a-FPU assuming the floating-point unit is in
21045 single-precision mode by default.
21046
21047 @item -m2a
21048 @opindex m2a
21049 Generate code for the SH2a-FPU assuming the floating-point unit is in
21050 double-precision mode by default.
21051
21052 @item -m3
21053 @opindex m3
21054 Generate code for the SH3.
21055
21056 @item -m3e
21057 @opindex m3e
21058 Generate code for the SH3e.
21059
21060 @item -m4-nofpu
21061 @opindex m4-nofpu
21062 Generate code for the SH4 without a floating-point unit.
21063
21064 @item -m4-single-only
21065 @opindex m4-single-only
21066 Generate code for the SH4 with a floating-point unit that only
21067 supports single-precision arithmetic.
21068
21069 @item -m4-single
21070 @opindex m4-single
21071 Generate code for the SH4 assuming the floating-point unit is in
21072 single-precision mode by default.
21073
21074 @item -m4
21075 @opindex m4
21076 Generate code for the SH4.
21077
21078 @item -m4-100
21079 @opindex m4-100
21080 Generate code for SH4-100.
21081
21082 @item -m4-100-nofpu
21083 @opindex m4-100-nofpu
21084 Generate code for SH4-100 in such a way that the
21085 floating-point unit is not used.
21086
21087 @item -m4-100-single
21088 @opindex m4-100-single
21089 Generate code for SH4-100 assuming the floating-point unit is in
21090 single-precision mode by default.
21091
21092 @item -m4-100-single-only
21093 @opindex m4-100-single-only
21094 Generate code for SH4-100 in such a way that no double-precision
21095 floating-point operations are used.
21096
21097 @item -m4-200
21098 @opindex m4-200
21099 Generate code for SH4-200.
21100
21101 @item -m4-200-nofpu
21102 @opindex m4-200-nofpu
21103 Generate code for SH4-200 without in such a way that the
21104 floating-point unit is not used.
21105
21106 @item -m4-200-single
21107 @opindex m4-200-single
21108 Generate code for SH4-200 assuming the floating-point unit is in
21109 single-precision mode by default.
21110
21111 @item -m4-200-single-only
21112 @opindex m4-200-single-only
21113 Generate code for SH4-200 in such a way that no double-precision
21114 floating-point operations are used.
21115
21116 @item -m4-300
21117 @opindex m4-300
21118 Generate code for SH4-300.
21119
21120 @item -m4-300-nofpu
21121 @opindex m4-300-nofpu
21122 Generate code for SH4-300 without in such a way that the
21123 floating-point unit is not used.
21124
21125 @item -m4-300-single
21126 @opindex m4-300-single
21127 Generate code for SH4-300 in such a way that no double-precision
21128 floating-point operations are used.
21129
21130 @item -m4-300-single-only
21131 @opindex m4-300-single-only
21132 Generate code for SH4-300 in such a way that no double-precision
21133 floating-point operations are used.
21134
21135 @item -m4-340
21136 @opindex m4-340
21137 Generate code for SH4-340 (no MMU, no FPU).
21138
21139 @item -m4-500
21140 @opindex m4-500
21141 Generate code for SH4-500 (no FPU).  Passes @option{-isa=sh4-nofpu} to the
21142 assembler.
21143
21144 @item -m4a-nofpu
21145 @opindex m4a-nofpu
21146 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
21147 floating-point unit is not used.
21148
21149 @item -m4a-single-only
21150 @opindex m4a-single-only
21151 Generate code for the SH4a, in such a way that no double-precision
21152 floating-point operations are used.
21153
21154 @item -m4a-single
21155 @opindex m4a-single
21156 Generate code for the SH4a assuming the floating-point unit is in
21157 single-precision mode by default.
21158
21159 @item -m4a
21160 @opindex m4a
21161 Generate code for the SH4a.
21162
21163 @item -m4al
21164 @opindex m4al
21165 Same as @option{-m4a-nofpu}, except that it implicitly passes
21166 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
21167 instructions at the moment.
21168
21169 @item -mb
21170 @opindex mb
21171 Compile code for the processor in big-endian mode.
21172
21173 @item -ml
21174 @opindex ml
21175 Compile code for the processor in little-endian mode.
21176
21177 @item -mdalign
21178 @opindex mdalign
21179 Align doubles at 64-bit boundaries.  Note that this changes the calling
21180 conventions, and thus some functions from the standard C library do
21181 not work unless you recompile it first with @option{-mdalign}.
21182
21183 @item -mrelax
21184 @opindex mrelax
21185 Shorten some address references at link time, when possible; uses the
21186 linker option @option{-relax}.
21187
21188 @item -mbigtable
21189 @opindex mbigtable
21190 Use 32-bit offsets in @code{switch} tables.  The default is to use
21191 16-bit offsets.
21192
21193 @item -mbitops
21194 @opindex mbitops
21195 Enable the use of bit manipulation instructions on SH2A.
21196
21197 @item -mfmovd
21198 @opindex mfmovd
21199 Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
21200 alignment constraints.
21201
21202 @item -mrenesas
21203 @opindex mrenesas
21204 Comply with the calling conventions defined by Renesas.
21205
21206 @item -mno-renesas
21207 @opindex mno-renesas
21208 Comply with the calling conventions defined for GCC before the Renesas
21209 conventions were available.  This option is the default for all
21210 targets of the SH toolchain.
21211
21212 @item -mnomacsave
21213 @opindex mnomacsave
21214 Mark the @code{MAC} register as call-clobbered, even if
21215 @option{-mrenesas} is given.
21216
21217 @item -mieee
21218 @itemx -mno-ieee
21219 @opindex mieee
21220 @opindex mno-ieee
21221 Control the IEEE compliance of floating-point comparisons, which affects the
21222 handling of cases where the result of a comparison is unordered.  By default
21223 @option{-mieee} is implicitly enabled.  If @option{-ffinite-math-only} is
21224 enabled @option{-mno-ieee} is implicitly set, which results in faster
21225 floating-point greater-equal and less-equal comparisons.  The implcit settings
21226 can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.
21227
21228 @item -minline-ic_invalidate
21229 @opindex minline-ic_invalidate
21230 Inline code to invalidate instruction cache entries after setting up
21231 nested function trampolines.
21232 This option has no effect if @option{-musermode} is in effect and the selected
21233 code generation option (e.g. @option{-m4}) does not allow the use of the @code{icbi}
21234 instruction.
21235 If the selected code generation option does not allow the use of the @code{icbi}
21236 instruction, and @option{-musermode} is not in effect, the inlined code
21237 manipulates the instruction cache address array directly with an associative
21238 write.  This not only requires privileged mode at run time, but it also
21239 fails if the cache line had been mapped via the TLB and has become unmapped.
21240
21241 @item -misize
21242 @opindex misize
21243 Dump instruction size and location in the assembly code.
21244
21245 @item -mpadstruct
21246 @opindex mpadstruct
21247 This option is deprecated.  It pads structures to multiple of 4 bytes,
21248 which is incompatible with the SH ABI@.
21249
21250 @item -matomic-model=@var{model}
21251 @opindex matomic-model=@var{model}
21252 Sets the model of atomic operations and additional parameters as a comma
21253 separated list.  For details on the atomic built-in functions see
21254 @ref{__atomic Builtins}.  The following models and parameters are supported:
21255
21256 @table @samp
21257
21258 @item none
21259 Disable compiler generated atomic sequences and emit library calls for atomic
21260 operations.  This is the default if the target is not @code{sh*-*-linux*}.
21261
21262 @item soft-gusa
21263 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
21264 built-in functions.  The generated atomic sequences require additional support
21265 from the interrupt/exception handling code of the system and are only suitable
21266 for SH3* and SH4* single-core systems.  This option is enabled by default when
21267 the target is @code{sh*-*-linux*} and SH3* or SH4*.  When the target is SH4A,
21268 this option also partially utilizes the hardware atomic instructions
21269 @code{movli.l} and @code{movco.l} to create more efficient code, unless
21270 @samp{strict} is specified.  
21271
21272 @item soft-tcb
21273 Generate software atomic sequences that use a variable in the thread control
21274 block.  This is a variation of the gUSA sequences which can also be used on
21275 SH1* and SH2* targets.  The generated atomic sequences require additional
21276 support from the interrupt/exception handling code of the system and are only
21277 suitable for single-core systems.  When using this model, the @samp{gbr-offset=}
21278 parameter has to be specified as well.
21279
21280 @item soft-imask
21281 Generate software atomic sequences that temporarily disable interrupts by
21282 setting @code{SR.IMASK = 1111}.  This model works only when the program runs
21283 in privileged mode and is only suitable for single-core systems.  Additional
21284 support from the interrupt/exception handling code of the system is not
21285 required.  This model is enabled by default when the target is
21286 @code{sh*-*-linux*} and SH1* or SH2*.
21287
21288 @item hard-llcs
21289 Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
21290 instructions only.  This is only available on SH4A and is suitable for
21291 multi-core systems.  Since the hardware instructions support only 32 bit atomic
21292 variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
21293 Code compiled with this option is also compatible with other software
21294 atomic model interrupt/exception handling systems if executed on an SH4A
21295 system.  Additional support from the interrupt/exception handling code of the
21296 system is not required for this model.
21297
21298 @item gbr-offset=
21299 This parameter specifies the offset in bytes of the variable in the thread
21300 control block structure that should be used by the generated atomic sequences
21301 when the @samp{soft-tcb} model has been selected.  For other models this
21302 parameter is ignored.  The specified value must be an integer multiple of four
21303 and in the range 0-1020.
21304
21305 @item strict
21306 This parameter prevents mixed usage of multiple atomic models, even if they
21307 are compatible, and makes the compiler generate atomic sequences of the
21308 specified model only.
21309
21310 @end table
21311
21312 @item -mtas
21313 @opindex mtas
21314 Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
21315 Notice that depending on the particular hardware and software configuration
21316 this can degrade overall performance due to the operand cache line flushes
21317 that are implied by the @code{tas.b} instruction.  On multi-core SH4A
21318 processors the @code{tas.b} instruction must be used with caution since it
21319 can result in data corruption for certain cache configurations.
21320
21321 @item -mprefergot
21322 @opindex mprefergot
21323 When generating position-independent code, emit function calls using
21324 the Global Offset Table instead of the Procedure Linkage Table.
21325
21326 @item -musermode
21327 @itemx -mno-usermode
21328 @opindex musermode
21329 @opindex mno-usermode
21330 Don't allow (allow) the compiler generating privileged mode code.  Specifying
21331 @option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
21332 inlined code would not work in user mode.  @option{-musermode} is the default
21333 when the target is @code{sh*-*-linux*}.  If the target is SH1* or SH2*
21334 @option{-musermode} has no effect, since there is no user mode.
21335
21336 @item -multcost=@var{number}
21337 @opindex multcost=@var{number}
21338 Set the cost to assume for a multiply insn.
21339
21340 @item -mdiv=@var{strategy}
21341 @opindex mdiv=@var{strategy}
21342 Set the division strategy to be used for integer division operations.
21343 @var{strategy} can be one of: 
21344
21345 @table @samp
21346
21347 @item call-div1
21348 Calls a library function that uses the single-step division instruction
21349 @code{div1} to perform the operation.  Division by zero calculates an
21350 unspecified result and does not trap.  This is the default except for SH4,
21351 SH2A and SHcompact.
21352
21353 @item call-fp
21354 Calls a library function that performs the operation in double precision
21355 floating point.  Division by zero causes a floating-point exception.  This is
21356 the default for SHcompact with FPU.  Specifying this for targets that do not
21357 have a double precision FPU defaults to @code{call-div1}.
21358
21359 @item call-table
21360 Calls a library function that uses a lookup table for small divisors and
21361 the @code{div1} instruction with case distinction for larger divisors.  Division
21362 by zero calculates an unspecified result and does not trap.  This is the default
21363 for SH4.  Specifying this for targets that do not have dynamic shift
21364 instructions defaults to @code{call-div1}.
21365
21366 @end table
21367
21368 When a division strategy has not been specified the default strategy is
21369 selected based on the current target.  For SH2A the default strategy is to
21370 use the @code{divs} and @code{divu} instructions instead of library function
21371 calls.
21372
21373 @item -maccumulate-outgoing-args
21374 @opindex maccumulate-outgoing-args
21375 Reserve space once for outgoing arguments in the function prologue rather
21376 than around each call.  Generally beneficial for performance and size.  Also
21377 needed for unwinding to avoid changing the stack frame around conditional code.
21378
21379 @item -mdivsi3_libfunc=@var{name}
21380 @opindex mdivsi3_libfunc=@var{name}
21381 Set the name of the library function used for 32-bit signed division to
21382 @var{name}.
21383 This only affects the name used in the @samp{call} division strategies, and
21384 the compiler still expects the same sets of input/output/clobbered registers as
21385 if this option were not present.
21386
21387 @item -mfixed-range=@var{register-range}
21388 @opindex mfixed-range
21389 Generate code treating the given register range as fixed registers.
21390 A fixed register is one that the register allocator can not use.  This is
21391 useful when compiling kernel code.  A register range is specified as
21392 two registers separated by a dash.  Multiple register ranges can be
21393 specified separated by a comma.
21394
21395 @item -mbranch-cost=@var{num}
21396 @opindex mbranch-cost=@var{num}
21397 Assume @var{num} to be the cost for a branch instruction.  Higher numbers
21398 make the compiler try to generate more branch-free code if possible.  
21399 If not specified the value is selected depending on the processor type that
21400 is being compiled for.
21401
21402 @item -mzdcbranch
21403 @itemx -mno-zdcbranch
21404 @opindex mzdcbranch
21405 @opindex mno-zdcbranch
21406 Assume (do not assume) that zero displacement conditional branch instructions
21407 @code{bt} and @code{bf} are fast.  If @option{-mzdcbranch} is specified, the
21408 compiler prefers zero displacement branch code sequences.  This is
21409 enabled by default when generating code for SH4 and SH4A.  It can be explicitly
21410 disabled by specifying @option{-mno-zdcbranch}.
21411
21412 @item -mcbranch-force-delay-slot
21413 @opindex mcbranch-force-delay-slot
21414 Force the usage of delay slots for conditional branches, which stuffs the delay
21415 slot with a @code{nop} if a suitable instruction can't be found.  By default
21416 this option is disabled.  It can be enabled to work around hardware bugs as
21417 found in the original SH7055.
21418
21419 @item -mfused-madd
21420 @itemx -mno-fused-madd
21421 @opindex mfused-madd
21422 @opindex mno-fused-madd
21423 Generate code that uses (does not use) the floating-point multiply and
21424 accumulate instructions.  These instructions are generated by default
21425 if hardware floating point is used.  The machine-dependent
21426 @option{-mfused-madd} option is now mapped to the machine-independent
21427 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
21428 mapped to @option{-ffp-contract=off}.
21429
21430 @item -mfsca
21431 @itemx -mno-fsca
21432 @opindex mfsca
21433 @opindex mno-fsca
21434 Allow or disallow the compiler to emit the @code{fsca} instruction for sine
21435 and cosine approximations.  The option @option{-mfsca} must be used in
21436 combination with @option{-funsafe-math-optimizations}.  It is enabled by default
21437 when generating code for SH4A.  Using @option{-mno-fsca} disables sine and cosine
21438 approximations even if @option{-funsafe-math-optimizations} is in effect.
21439
21440 @item -mfsrra
21441 @itemx -mno-fsrra
21442 @opindex mfsrra
21443 @opindex mno-fsrra
21444 Allow or disallow the compiler to emit the @code{fsrra} instruction for
21445 reciprocal square root approximations.  The option @option{-mfsrra} must be used
21446 in combination with @option{-funsafe-math-optimizations} and
21447 @option{-ffinite-math-only}.  It is enabled by default when generating code for
21448 SH4A.  Using @option{-mno-fsrra} disables reciprocal square root approximations
21449 even if @option{-funsafe-math-optimizations} and @option{-ffinite-math-only} are
21450 in effect.
21451
21452 @item -mpretend-cmove
21453 @opindex mpretend-cmove
21454 Prefer zero-displacement conditional branches for conditional move instruction
21455 patterns.  This can result in faster code on the SH4 processor.
21456
21457 @item -mfdpic
21458 @opindex fdpic
21459 Generate code using the FDPIC ABI.
21460
21461 @end table
21462
21463 @node Solaris 2 Options
21464 @subsection Solaris 2 Options
21465 @cindex Solaris 2 options
21466
21467 These @samp{-m} options are supported on Solaris 2:
21468
21469 @table @gcctabopt
21470 @item -mclear-hwcap
21471 @opindex mclear-hwcap
21472 @option{-mclear-hwcap} tells the compiler to remove the hardware
21473 capabilities generated by the Solaris assembler.  This is only necessary
21474 when object files use ISA extensions not supported by the current
21475 machine, but check at runtime whether or not to use them.
21476
21477 @item -mimpure-text
21478 @opindex mimpure-text
21479 @option{-mimpure-text}, used in addition to @option{-shared}, tells
21480 the compiler to not pass @option{-z text} to the linker when linking a
21481 shared object.  Using this option, you can link position-dependent
21482 code into a shared object.
21483
21484 @option{-mimpure-text} suppresses the ``relocations remain against
21485 allocatable but non-writable sections'' linker error message.
21486 However, the necessary relocations trigger copy-on-write, and the
21487 shared object is not actually shared across processes.  Instead of
21488 using @option{-mimpure-text}, you should compile all source code with
21489 @option{-fpic} or @option{-fPIC}.
21490
21491 @end table
21492
21493 These switches are supported in addition to the above on Solaris 2:
21494
21495 @table @gcctabopt
21496 @item -pthreads
21497 @opindex pthreads
21498 Add support for multithreading using the POSIX threads library.  This
21499 option sets flags for both the preprocessor and linker.  This option does
21500 not affect the thread safety of object code produced  by the compiler or
21501 that of libraries supplied with it.
21502
21503 @item -pthread
21504 @opindex pthread
21505 This is a synonym for @option{-pthreads}.
21506 @end table
21507
21508 @node SPARC Options
21509 @subsection SPARC Options
21510 @cindex SPARC options
21511
21512 These @samp{-m} options are supported on the SPARC:
21513
21514 @table @gcctabopt
21515 @item -mno-app-regs
21516 @itemx -mapp-regs
21517 @opindex mno-app-regs
21518 @opindex mapp-regs
21519 Specify @option{-mapp-regs} to generate output using the global registers
21520 2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
21521 global register 1, each global register 2 through 4 is then treated as an
21522 allocable register that is clobbered by function calls.  This is the default.
21523
21524 To be fully SVR4 ABI-compliant at the cost of some performance loss,
21525 specify @option{-mno-app-regs}.  You should compile libraries and system
21526 software with this option.
21527
21528 @item -mflat
21529 @itemx -mno-flat
21530 @opindex mflat
21531 @opindex mno-flat
21532 With @option{-mflat}, the compiler does not generate save/restore instructions
21533 and uses a ``flat'' or single register window model.  This model is compatible
21534 with the regular register window model.  The local registers and the input
21535 registers (0--5) are still treated as ``call-saved'' registers and are
21536 saved on the stack as needed.
21537
21538 With @option{-mno-flat} (the default), the compiler generates save/restore
21539 instructions (except for leaf functions).  This is the normal operating mode.
21540
21541 @item -mfpu
21542 @itemx -mhard-float
21543 @opindex mfpu
21544 @opindex mhard-float
21545 Generate output containing floating-point instructions.  This is the
21546 default.
21547
21548 @item -mno-fpu
21549 @itemx -msoft-float
21550 @opindex mno-fpu
21551 @opindex msoft-float
21552 Generate output containing library calls for floating point.
21553 @strong{Warning:} the requisite libraries are not available for all SPARC
21554 targets.  Normally the facilities of the machine's usual C compiler are
21555 used, but this cannot be done directly in cross-compilation.  You must make
21556 your own arrangements to provide suitable library functions for
21557 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
21558 @samp{sparclite-*-*} do provide software floating-point support.
21559
21560 @option{-msoft-float} changes the calling convention in the output file;
21561 therefore, it is only useful if you compile @emph{all} of a program with
21562 this option.  In particular, you need to compile @file{libgcc.a}, the
21563 library that comes with GCC, with @option{-msoft-float} in order for
21564 this to work.
21565
21566 @item -mhard-quad-float
21567 @opindex mhard-quad-float
21568 Generate output containing quad-word (long double) floating-point
21569 instructions.
21570
21571 @item -msoft-quad-float
21572 @opindex msoft-quad-float
21573 Generate output containing library calls for quad-word (long double)
21574 floating-point instructions.  The functions called are those specified
21575 in the SPARC ABI@.  This is the default.
21576
21577 As of this writing, there are no SPARC implementations that have hardware
21578 support for the quad-word floating-point instructions.  They all invoke
21579 a trap handler for one of these instructions, and then the trap handler
21580 emulates the effect of the instruction.  Because of the trap handler overhead,
21581 this is much slower than calling the ABI library routines.  Thus the
21582 @option{-msoft-quad-float} option is the default.
21583
21584 @item -mno-unaligned-doubles
21585 @itemx -munaligned-doubles
21586 @opindex mno-unaligned-doubles
21587 @opindex munaligned-doubles
21588 Assume that doubles have 8-byte alignment.  This is the default.
21589
21590 With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
21591 alignment only if they are contained in another type, or if they have an
21592 absolute address.  Otherwise, it assumes they have 4-byte alignment.
21593 Specifying this option avoids some rare compatibility problems with code
21594 generated by other compilers.  It is not the default because it results
21595 in a performance loss, especially for floating-point code.
21596
21597 @item -muser-mode
21598 @itemx -mno-user-mode
21599 @opindex muser-mode
21600 @opindex mno-user-mode
21601 Do not generate code that can only run in supervisor mode.  This is relevant
21602 only for the @code{casa} instruction emitted for the LEON3 processor.  This
21603 is the default.
21604
21605 @item -mfaster-structs
21606 @itemx -mno-faster-structs
21607 @opindex mfaster-structs
21608 @opindex mno-faster-structs
21609 With @option{-mfaster-structs}, the compiler assumes that structures
21610 should have 8-byte alignment.  This enables the use of pairs of
21611 @code{ldd} and @code{std} instructions for copies in structure
21612 assignment, in place of twice as many @code{ld} and @code{st} pairs.
21613 However, the use of this changed alignment directly violates the SPARC
21614 ABI@.  Thus, it's intended only for use on targets where the developer
21615 acknowledges that their resulting code is not directly in line with
21616 the rules of the ABI@.
21617
21618 @item -mstd-struct-return
21619 @itemx -mno-std-struct-return
21620 @opindex mstd-struct-return
21621 @opindex mno-std-struct-return
21622 With @option{-mstd-struct-return}, the compiler generates checking code
21623 in functions returning structures or unions to detect size mismatches
21624 between the two sides of function calls, as per the 32-bit ABI@.
21625
21626 The default is @option{-mno-std-struct-return}.  This option has no effect
21627 in 64-bit mode.
21628
21629 @item -mcpu=@var{cpu_type}
21630 @opindex mcpu
21631 Set the instruction set, register set, and instruction scheduling parameters
21632 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
21633 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
21634 @samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{sparclite}, @samp{f930},
21635 @samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
21636 @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
21637 @samp{niagara3} and @samp{niagara4}.
21638
21639 Native Solaris and GNU/Linux toolchains also support the value @samp{native},
21640 which selects the best architecture option for the host processor.
21641 @option{-mcpu=native} has no effect if GCC does not recognize
21642 the processor.
21643
21644 Default instruction scheduling parameters are used for values that select
21645 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
21646 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
21647
21648 Here is a list of each supported architecture and their supported
21649 implementations.
21650
21651 @table @asis
21652 @item v7
21653 cypress, leon3v7
21654
21655 @item v8
21656 supersparc, hypersparc, leon, leon3
21657
21658 @item sparclite
21659 f930, f934, sparclite86x
21660
21661 @item sparclet
21662 tsc701
21663
21664 @item v9
21665 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
21666 @end table
21667
21668 By default (unless configured otherwise), GCC generates code for the V7
21669 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
21670 additionally optimizes it for the Cypress CY7C602 chip, as used in the
21671 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
21672 SPARCStation 1, 2, IPX etc.
21673
21674 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
21675 architecture.  The only difference from V7 code is that the compiler emits
21676 the integer multiply and integer divide instructions which exist in SPARC-V8
21677 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
21678 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
21679 2000 series.
21680
21681 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
21682 the SPARC architecture.  This adds the integer multiply, integer divide step
21683 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
21684 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
21685 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
21686 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
21687 MB86934 chip, which is the more recent SPARClite with FPU@.
21688
21689 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
21690 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
21691 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
21692 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
21693 optimizes it for the TEMIC SPARClet chip.
21694
21695 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
21696 architecture.  This adds 64-bit integer and floating-point move instructions,
21697 3 additional floating-point condition code registers and conditional move
21698 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
21699 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
21700 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
21701 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
21702 @option{-mcpu=niagara}, the compiler additionally optimizes it for
21703 Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
21704 additionally optimizes it for Sun UltraSPARC T2 chips. With
21705 @option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
21706 UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
21707 additionally optimizes it for Sun UltraSPARC T4 chips.
21708
21709 @item -mtune=@var{cpu_type}
21710 @opindex mtune
21711 Set the instruction scheduling parameters for machine type
21712 @var{cpu_type}, but do not set the instruction set or register set that the
21713 option @option{-mcpu=@var{cpu_type}} does.
21714
21715 The same values for @option{-mcpu=@var{cpu_type}} can be used for
21716 @option{-mtune=@var{cpu_type}}, but the only useful values are those
21717 that select a particular CPU implementation.  Those are @samp{cypress},
21718 @samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3},
21719 @samp{leon3v7}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{tsc701},
21720 @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
21721 @samp{niagara3} and @samp{niagara4}.  With native Solaris and GNU/Linux
21722 toolchains, @samp{native} can also be used.
21723
21724 @item -mv8plus
21725 @itemx -mno-v8plus
21726 @opindex mv8plus
21727 @opindex mno-v8plus
21728 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
21729 difference from the V8 ABI is that the global and out registers are
21730 considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
21731 mode for all SPARC-V9 processors.
21732
21733 @item -mvis
21734 @itemx -mno-vis
21735 @opindex mvis
21736 @opindex mno-vis
21737 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
21738 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
21739
21740 @item -mvis2
21741 @itemx -mno-vis2
21742 @opindex mvis2
21743 @opindex mno-vis2
21744 With @option{-mvis2}, GCC generates code that takes advantage of
21745 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
21746 default is @option{-mvis2} when targeting a cpu that supports such
21747 instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
21748 also sets @option{-mvis}.
21749
21750 @item -mvis3
21751 @itemx -mno-vis3
21752 @opindex mvis3
21753 @opindex mno-vis3
21754 With @option{-mvis3}, GCC generates code that takes advantage of
21755 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
21756 default is @option{-mvis3} when targeting a cpu that supports such
21757 instructions, such as niagara-3 and later.  Setting @option{-mvis3}
21758 also sets @option{-mvis2} and @option{-mvis}.
21759
21760 @item -mcbcond
21761 @itemx -mno-cbcond
21762 @opindex mcbcond
21763 @opindex mno-cbcond
21764 With @option{-mcbcond}, GCC generates code that takes advantage of
21765 compare-and-branch instructions, as defined in the Sparc Architecture 2011.
21766 The default is @option{-mcbcond} when targeting a cpu that supports such
21767 instructions, such as niagara-4 and later.
21768
21769 @item -mpopc
21770 @itemx -mno-popc
21771 @opindex mpopc
21772 @opindex mno-popc
21773 With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
21774 population count instruction.  The default is @option{-mpopc}
21775 when targeting a cpu that supports such instructions, such as Niagara-2 and
21776 later.
21777
21778 @item -mfmaf
21779 @itemx -mno-fmaf
21780 @opindex mfmaf
21781 @opindex mno-fmaf
21782 With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
21783 Fused Multiply-Add Floating-point extensions.  The default is @option{-mfmaf}
21784 when targeting a cpu that supports such instructions, such as Niagara-3 and
21785 later.
21786
21787 @item -mfix-at697f
21788 @opindex mfix-at697f
21789 Enable the documented workaround for the single erratum of the Atmel AT697F
21790 processor (which corresponds to erratum #13 of the AT697E processor).
21791
21792 @item -mfix-ut699
21793 @opindex mfix-ut699
21794 Enable the documented workarounds for the floating-point errata and the data
21795 cache nullify errata of the UT699 processor.
21796 @end table
21797
21798 These @samp{-m} options are supported in addition to the above
21799 on SPARC-V9 processors in 64-bit environments:
21800
21801 @table @gcctabopt
21802 @item -m32
21803 @itemx -m64
21804 @opindex m32
21805 @opindex m64
21806 Generate code for a 32-bit or 64-bit environment.
21807 The 32-bit environment sets int, long and pointer to 32 bits.
21808 The 64-bit environment sets int to 32 bits and long and pointer
21809 to 64 bits.
21810
21811 @item -mcmodel=@var{which}
21812 @opindex mcmodel
21813 Set the code model to one of
21814
21815 @table @samp
21816 @item medlow
21817 The Medium/Low code model: 64-bit addresses, programs
21818 must be linked in the low 32 bits of memory.  Programs can be statically
21819 or dynamically linked.
21820
21821 @item medmid
21822 The Medium/Middle code model: 64-bit addresses, programs
21823 must be linked in the low 44 bits of memory, the text and data segments must
21824 be less than 2GB in size and the data segment must be located within 2GB of
21825 the text segment.
21826
21827 @item medany
21828 The Medium/Anywhere code model: 64-bit addresses, programs
21829 may be linked anywhere in memory, the text and data segments must be less
21830 than 2GB in size and the data segment must be located within 2GB of the
21831 text segment.
21832
21833 @item embmedany
21834 The Medium/Anywhere code model for embedded systems:
21835 64-bit addresses, the text and data segments must be less than 2GB in
21836 size, both starting anywhere in memory (determined at link time).  The
21837 global register %g4 points to the base of the data segment.  Programs
21838 are statically linked and PIC is not supported.
21839 @end table
21840
21841 @item -mmemory-model=@var{mem-model}
21842 @opindex mmemory-model
21843 Set the memory model in force on the processor to one of
21844
21845 @table @samp
21846 @item default
21847 The default memory model for the processor and operating system.
21848
21849 @item rmo
21850 Relaxed Memory Order
21851
21852 @item pso
21853 Partial Store Order
21854
21855 @item tso
21856 Total Store Order
21857
21858 @item sc
21859 Sequential Consistency
21860 @end table
21861
21862 These memory models are formally defined in Appendix D of the Sparc V9
21863 architecture manual, as set in the processor's @code{PSTATE.MM} field.
21864
21865 @item -mstack-bias
21866 @itemx -mno-stack-bias
21867 @opindex mstack-bias
21868 @opindex mno-stack-bias
21869 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
21870 frame pointer if present, are offset by @minus{}2047 which must be added back
21871 when making stack frame references.  This is the default in 64-bit mode.
21872 Otherwise, assume no such offset is present.
21873 @end table
21874
21875 @node SPU Options
21876 @subsection SPU Options
21877 @cindex SPU options
21878
21879 These @samp{-m} options are supported on the SPU:
21880
21881 @table @gcctabopt
21882 @item -mwarn-reloc
21883 @itemx -merror-reloc
21884 @opindex mwarn-reloc
21885 @opindex merror-reloc
21886
21887 The loader for SPU does not handle dynamic relocations.  By default, GCC
21888 gives an error when it generates code that requires a dynamic
21889 relocation.  @option{-mno-error-reloc} disables the error,
21890 @option{-mwarn-reloc} generates a warning instead.
21891
21892 @item -msafe-dma
21893 @itemx -munsafe-dma
21894 @opindex msafe-dma
21895 @opindex munsafe-dma
21896
21897 Instructions that initiate or test completion of DMA must not be
21898 reordered with respect to loads and stores of the memory that is being
21899 accessed.
21900 With @option{-munsafe-dma} you must use the @code{volatile} keyword to protect
21901 memory accesses, but that can lead to inefficient code in places where the
21902 memory is known to not change.  Rather than mark the memory as volatile,
21903 you can use @option{-msafe-dma} to tell the compiler to treat
21904 the DMA instructions as potentially affecting all memory.  
21905
21906 @item -mbranch-hints
21907 @opindex mbranch-hints
21908
21909 By default, GCC generates a branch hint instruction to avoid
21910 pipeline stalls for always-taken or probably-taken branches.  A hint
21911 is not generated closer than 8 instructions away from its branch.
21912 There is little reason to disable them, except for debugging purposes,
21913 or to make an object a little bit smaller.
21914
21915 @item -msmall-mem
21916 @itemx -mlarge-mem
21917 @opindex msmall-mem
21918 @opindex mlarge-mem
21919
21920 By default, GCC generates code assuming that addresses are never larger
21921 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
21922 a full 32-bit address.
21923
21924 @item -mstdmain
21925 @opindex mstdmain
21926
21927 By default, GCC links against startup code that assumes the SPU-style
21928 main function interface (which has an unconventional parameter list).
21929 With @option{-mstdmain}, GCC links your program against startup
21930 code that assumes a C99-style interface to @code{main}, including a
21931 local copy of @code{argv} strings.
21932
21933 @item -mfixed-range=@var{register-range}
21934 @opindex mfixed-range
21935 Generate code treating the given register range as fixed registers.
21936 A fixed register is one that the register allocator cannot use.  This is
21937 useful when compiling kernel code.  A register range is specified as
21938 two registers separated by a dash.  Multiple register ranges can be
21939 specified separated by a comma.
21940
21941 @item -mea32
21942 @itemx -mea64
21943 @opindex mea32
21944 @opindex mea64
21945 Compile code assuming that pointers to the PPU address space accessed
21946 via the @code{__ea} named address space qualifier are either 32 or 64
21947 bits wide.  The default is 32 bits.  As this is an ABI-changing option,
21948 all object code in an executable must be compiled with the same setting.
21949
21950 @item -maddress-space-conversion
21951 @itemx -mno-address-space-conversion
21952 @opindex maddress-space-conversion
21953 @opindex mno-address-space-conversion
21954 Allow/disallow treating the @code{__ea} address space as superset
21955 of the generic address space.  This enables explicit type casts
21956 between @code{__ea} and generic pointer as well as implicit
21957 conversions of generic pointers to @code{__ea} pointers.  The
21958 default is to allow address space pointer conversions.
21959
21960 @item -mcache-size=@var{cache-size}
21961 @opindex mcache-size
21962 This option controls the version of libgcc that the compiler links to an
21963 executable and selects a software-managed cache for accessing variables
21964 in the @code{__ea} address space with a particular cache size.  Possible
21965 options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
21966 and @samp{128}.  The default cache size is 64KB.
21967
21968 @item -matomic-updates
21969 @itemx -mno-atomic-updates
21970 @opindex matomic-updates
21971 @opindex mno-atomic-updates
21972 This option controls the version of libgcc that the compiler links to an
21973 executable and selects whether atomic updates to the software-managed
21974 cache of PPU-side variables are used.  If you use atomic updates, changes
21975 to a PPU variable from SPU code using the @code{__ea} named address space
21976 qualifier do not interfere with changes to other PPU variables residing
21977 in the same cache line from PPU code.  If you do not use atomic updates,
21978 such interference may occur; however, writing back cache lines is
21979 more efficient.  The default behavior is to use atomic updates.
21980
21981 @item -mdual-nops
21982 @itemx -mdual-nops=@var{n}
21983 @opindex mdual-nops
21984 By default, GCC inserts nops to increase dual issue when it expects
21985 it to increase performance.  @var{n} can be a value from 0 to 10.  A
21986 smaller @var{n} inserts fewer nops.  10 is the default, 0 is the
21987 same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
21988
21989 @item -mhint-max-nops=@var{n}
21990 @opindex mhint-max-nops
21991 Maximum number of nops to insert for a branch hint.  A branch hint must
21992 be at least 8 instructions away from the branch it is affecting.  GCC
21993 inserts up to @var{n} nops to enforce this, otherwise it does not
21994 generate the branch hint.
21995
21996 @item -mhint-max-distance=@var{n}
21997 @opindex mhint-max-distance
21998 The encoding of the branch hint instruction limits the hint to be within
21999 256 instructions of the branch it is affecting.  By default, GCC makes
22000 sure it is within 125.
22001
22002 @item -msafe-hints
22003 @opindex msafe-hints
22004 Work around a hardware bug that causes the SPU to stall indefinitely.
22005 By default, GCC inserts the @code{hbrp} instruction to make sure
22006 this stall won't happen.
22007
22008 @end table
22009
22010 @node System V Options
22011 @subsection Options for System V
22012
22013 These additional options are available on System V Release 4 for
22014 compatibility with other compilers on those systems:
22015
22016 @table @gcctabopt
22017 @item -G
22018 @opindex G
22019 Create a shared object.
22020 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
22021
22022 @item -Qy
22023 @opindex Qy
22024 Identify the versions of each tool used by the compiler, in a
22025 @code{.ident} assembler directive in the output.
22026
22027 @item -Qn
22028 @opindex Qn
22029 Refrain from adding @code{.ident} directives to the output file (this is
22030 the default).
22031
22032 @item -YP,@var{dirs}
22033 @opindex YP
22034 Search the directories @var{dirs}, and no others, for libraries
22035 specified with @option{-l}.
22036
22037 @item -Ym,@var{dir}
22038 @opindex Ym
22039 Look in the directory @var{dir} to find the M4 preprocessor.
22040 The assembler uses this option.
22041 @c This is supposed to go with a -Yd for predefined M4 macro files, but
22042 @c the generic assembler that comes with Solaris takes just -Ym.
22043 @end table
22044
22045 @node TILE-Gx Options
22046 @subsection TILE-Gx Options
22047 @cindex TILE-Gx options
22048
22049 These @samp{-m} options are supported on the TILE-Gx:
22050
22051 @table @gcctabopt
22052 @item -mcmodel=small
22053 @opindex mcmodel=small
22054 Generate code for the small model.  The distance for direct calls is
22055 limited to 500M in either direction.  PC-relative addresses are 32
22056 bits.  Absolute addresses support the full address range.
22057
22058 @item -mcmodel=large
22059 @opindex mcmodel=large
22060 Generate code for the large model.  There is no limitation on call
22061 distance, pc-relative addresses, or absolute addresses.
22062
22063 @item -mcpu=@var{name}
22064 @opindex mcpu
22065 Selects the type of CPU to be targeted.  Currently the only supported
22066 type is @samp{tilegx}.
22067
22068 @item -m32
22069 @itemx -m64
22070 @opindex m32
22071 @opindex m64
22072 Generate code for a 32-bit or 64-bit environment.  The 32-bit
22073 environment sets int, long, and pointer to 32 bits.  The 64-bit
22074 environment sets int to 32 bits and long and pointer to 64 bits.
22075
22076 @item -mbig-endian
22077 @itemx -mlittle-endian
22078 @opindex mbig-endian
22079 @opindex mlittle-endian
22080 Generate code in big/little endian mode, respectively.
22081 @end table
22082
22083 @node TILEPro Options
22084 @subsection TILEPro Options
22085 @cindex TILEPro options
22086
22087 These @samp{-m} options are supported on the TILEPro:
22088
22089 @table @gcctabopt
22090 @item -mcpu=@var{name}
22091 @opindex mcpu
22092 Selects the type of CPU to be targeted.  Currently the only supported
22093 type is @samp{tilepro}.
22094
22095 @item -m32
22096 @opindex m32
22097 Generate code for a 32-bit environment, which sets int, long, and
22098 pointer to 32 bits.  This is the only supported behavior so the flag
22099 is essentially ignored.
22100 @end table
22101
22102 @node V850 Options
22103 @subsection V850 Options
22104 @cindex V850 Options
22105
22106 These @samp{-m} options are defined for V850 implementations:
22107
22108 @table @gcctabopt
22109 @item -mlong-calls
22110 @itemx -mno-long-calls
22111 @opindex mlong-calls
22112 @opindex mno-long-calls
22113 Treat all calls as being far away (near).  If calls are assumed to be
22114 far away, the compiler always loads the function's address into a
22115 register, and calls indirect through the pointer.
22116
22117 @item -mno-ep
22118 @itemx -mep
22119 @opindex mno-ep
22120 @opindex mep
22121 Do not optimize (do optimize) basic blocks that use the same index
22122 pointer 4 or more times to copy pointer into the @code{ep} register, and
22123 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
22124 option is on by default if you optimize.
22125
22126 @item -mno-prolog-function
22127 @itemx -mprolog-function
22128 @opindex mno-prolog-function
22129 @opindex mprolog-function
22130 Do not use (do use) external functions to save and restore registers
22131 at the prologue and epilogue of a function.  The external functions
22132 are slower, but use less code space if more than one function saves
22133 the same number of registers.  The @option{-mprolog-function} option
22134 is on by default if you optimize.
22135
22136 @item -mspace
22137 @opindex mspace
22138 Try to make the code as small as possible.  At present, this just turns
22139 on the @option{-mep} and @option{-mprolog-function} options.
22140
22141 @item -mtda=@var{n}
22142 @opindex mtda
22143 Put static or global variables whose size is @var{n} bytes or less into
22144 the tiny data area that register @code{ep} points to.  The tiny data
22145 area can hold up to 256 bytes in total (128 bytes for byte references).
22146
22147 @item -msda=@var{n}
22148 @opindex msda
22149 Put static or global variables whose size is @var{n} bytes or less into
22150 the small data area that register @code{gp} points to.  The small data
22151 area can hold up to 64 kilobytes.
22152
22153 @item -mzda=@var{n}
22154 @opindex mzda
22155 Put static or global variables whose size is @var{n} bytes or less into
22156 the first 32 kilobytes of memory.
22157
22158 @item -mv850
22159 @opindex mv850
22160 Specify that the target processor is the V850.
22161
22162 @item -mv850e3v5
22163 @opindex mv850e3v5
22164 Specify that the target processor is the V850E3V5.  The preprocessor
22165 constant @code{__v850e3v5__} is defined if this option is used.
22166
22167 @item -mv850e2v4
22168 @opindex mv850e2v4
22169 Specify that the target processor is the V850E3V5.  This is an alias for
22170 the @option{-mv850e3v5} option.
22171
22172 @item -mv850e2v3
22173 @opindex mv850e2v3
22174 Specify that the target processor is the V850E2V3.  The preprocessor
22175 constant @code{__v850e2v3__} is defined if this option is used.
22176
22177 @item -mv850e2
22178 @opindex mv850e2
22179 Specify that the target processor is the V850E2.  The preprocessor
22180 constant @code{__v850e2__} is defined if this option is used.
22181
22182 @item -mv850e1
22183 @opindex mv850e1
22184 Specify that the target processor is the V850E1.  The preprocessor
22185 constants @code{__v850e1__} and @code{__v850e__} are defined if
22186 this option is used.
22187
22188 @item -mv850es
22189 @opindex mv850es
22190 Specify that the target processor is the V850ES.  This is an alias for
22191 the @option{-mv850e1} option.
22192
22193 @item -mv850e
22194 @opindex mv850e
22195 Specify that the target processor is the V850E@.  The preprocessor
22196 constant @code{__v850e__} is defined if this option is used.
22197
22198 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
22199 nor @option{-mv850e2} nor @option{-mv850e2v3} nor @option{-mv850e3v5}
22200 are defined then a default target processor is chosen and the
22201 relevant @samp{__v850*__} preprocessor constant is defined.
22202
22203 The preprocessor constants @code{__v850} and @code{__v851__} are always
22204 defined, regardless of which processor variant is the target.
22205
22206 @item -mdisable-callt
22207 @itemx -mno-disable-callt
22208 @opindex mdisable-callt
22209 @opindex mno-disable-callt
22210 This option suppresses generation of the @code{CALLT} instruction for the
22211 v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
22212 architecture.
22213
22214 This option is enabled by default when the RH850 ABI is
22215 in use (see @option{-mrh850-abi}), and disabled by default when the
22216 GCC ABI is in use.  If @code{CALLT} instructions are being generated
22217 then the C preprocessor symbol @code{__V850_CALLT__} is defined.
22218
22219 @item -mrelax
22220 @itemx -mno-relax
22221 @opindex mrelax
22222 @opindex mno-relax
22223 Pass on (or do not pass on) the @option{-mrelax} command-line option
22224 to the assembler.
22225
22226 @item -mlong-jumps
22227 @itemx -mno-long-jumps
22228 @opindex mlong-jumps
22229 @opindex mno-long-jumps
22230 Disable (or re-enable) the generation of PC-relative jump instructions.
22231
22232 @item -msoft-float
22233 @itemx -mhard-float
22234 @opindex msoft-float
22235 @opindex mhard-float
22236 Disable (or re-enable) the generation of hardware floating point
22237 instructions.  This option is only significant when the target
22238 architecture is @samp{V850E2V3} or higher.  If hardware floating point
22239 instructions are being generated then the C preprocessor symbol
22240 @code{__FPU_OK__} is defined, otherwise the symbol
22241 @code{__NO_FPU__} is defined.
22242
22243 @item -mloop
22244 @opindex mloop
22245 Enables the use of the e3v5 LOOP instruction.  The use of this
22246 instruction is not enabled by default when the e3v5 architecture is
22247 selected because its use is still experimental.
22248
22249 @item -mrh850-abi
22250 @itemx -mghs
22251 @opindex mrh850-abi
22252 @opindex mghs
22253 Enables support for the RH850 version of the V850 ABI.  This is the
22254 default.  With this version of the ABI the following rules apply:
22255
22256 @itemize
22257 @item
22258 Integer sized structures and unions are returned via a memory pointer
22259 rather than a register.
22260
22261 @item
22262 Large structures and unions (more than 8 bytes in size) are passed by
22263 value.
22264
22265 @item
22266 Functions are aligned to 16-bit boundaries.
22267
22268 @item
22269 The @option{-m8byte-align} command-line option is supported.
22270
22271 @item
22272 The @option{-mdisable-callt} command-line option is enabled by
22273 default.  The @option{-mno-disable-callt} command-line option is not
22274 supported.
22275 @end itemize
22276
22277 When this version of the ABI is enabled the C preprocessor symbol
22278 @code{__V850_RH850_ABI__} is defined.
22279
22280 @item -mgcc-abi
22281 @opindex mgcc-abi
22282 Enables support for the old GCC version of the V850 ABI.  With this
22283 version of the ABI the following rules apply:
22284
22285 @itemize
22286 @item
22287 Integer sized structures and unions are returned in register @code{r10}.
22288
22289 @item
22290 Large structures and unions (more than 8 bytes in size) are passed by
22291 reference.
22292
22293 @item
22294 Functions are aligned to 32-bit boundaries, unless optimizing for
22295 size.
22296
22297 @item
22298 The @option{-m8byte-align} command-line option is not supported.
22299
22300 @item
22301 The @option{-mdisable-callt} command-line option is supported but not
22302 enabled by default.
22303 @end itemize
22304
22305 When this version of the ABI is enabled the C preprocessor symbol
22306 @code{__V850_GCC_ABI__} is defined.
22307
22308 @item -m8byte-align
22309 @itemx -mno-8byte-align
22310 @opindex m8byte-align
22311 @opindex mno-8byte-align
22312 Enables support for @code{double} and @code{long long} types to be
22313 aligned on 8-byte boundaries.  The default is to restrict the
22314 alignment of all objects to at most 4-bytes.  When
22315 @option{-m8byte-align} is in effect the C preprocessor symbol
22316 @code{__V850_8BYTE_ALIGN__} is defined.
22317
22318 @item -mbig-switch
22319 @opindex mbig-switch
22320 Generate code suitable for big switch tables.  Use this option only if
22321 the assembler/linker complain about out of range branches within a switch
22322 table.
22323
22324 @item -mapp-regs
22325 @opindex mapp-regs
22326 This option causes r2 and r5 to be used in the code generated by
22327 the compiler.  This setting is the default.
22328
22329 @item -mno-app-regs
22330 @opindex mno-app-regs
22331 This option causes r2 and r5 to be treated as fixed registers.
22332
22333 @end table
22334
22335 @node VAX Options
22336 @subsection VAX Options
22337 @cindex VAX options
22338
22339 These @samp{-m} options are defined for the VAX:
22340
22341 @table @gcctabopt
22342 @item -munix
22343 @opindex munix
22344 Do not output certain jump instructions (@code{aobleq} and so on)
22345 that the Unix assembler for the VAX cannot handle across long
22346 ranges.
22347
22348 @item -mgnu
22349 @opindex mgnu
22350 Do output those jump instructions, on the assumption that the
22351 GNU assembler is being used.
22352
22353 @item -mg
22354 @opindex mg
22355 Output code for G-format floating-point numbers instead of D-format.
22356 @end table
22357
22358 @node Visium Options
22359 @subsection Visium Options
22360 @cindex Visium options
22361
22362 @table @gcctabopt
22363
22364 @item -mdebug
22365 @opindex mdebug
22366 A program which performs file I/O and is destined to run on an MCM target
22367 should be linked with this option.  It causes the libraries libc.a and
22368 libdebug.a to be linked.  The program should be run on the target under
22369 the control of the GDB remote debugging stub.
22370
22371 @item -msim
22372 @opindex msim
22373 A program which performs file I/O and is destined to run on the simulator
22374 should be linked with option.  This causes libraries libc.a and libsim.a to
22375 be linked.
22376
22377 @item -mfpu
22378 @itemx -mhard-float
22379 @opindex mfpu
22380 @opindex mhard-float
22381 Generate code containing floating-point instructions.  This is the
22382 default.
22383
22384 @item -mno-fpu
22385 @itemx -msoft-float
22386 @opindex mno-fpu
22387 @opindex msoft-float
22388 Generate code containing library calls for floating-point.
22389
22390 @option{-msoft-float} changes the calling convention in the output file;
22391 therefore, it is only useful if you compile @emph{all} of a program with
22392 this option.  In particular, you need to compile @file{libgcc.a}, the
22393 library that comes with GCC, with @option{-msoft-float} in order for
22394 this to work.
22395
22396 @item -mcpu=@var{cpu_type}
22397 @opindex mcpu
22398 Set the instruction set, register set, and instruction scheduling parameters
22399 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
22400 @samp{mcm}, @samp{gr5} and @samp{gr6}.
22401
22402 @samp{mcm} is a synonym of @samp{gr5} present for backward compatibility.
22403
22404 By default (unless configured otherwise), GCC generates code for the GR5
22405 variant of the Visium architecture.  
22406
22407 With @option{-mcpu=gr6}, GCC generates code for the GR6 variant of the Visium
22408 architecture.  The only difference from GR5 code is that the compiler will
22409 generate block move instructions.
22410
22411 @item -mtune=@var{cpu_type}
22412 @opindex mtune
22413 Set the instruction scheduling parameters for machine type @var{cpu_type},
22414 but do not set the instruction set or register set that the option
22415 @option{-mcpu=@var{cpu_type}} would.
22416
22417 @item -msv-mode
22418 @opindex msv-mode
22419 Generate code for the supervisor mode, where there are no restrictions on
22420 the access to general registers.  This is the default.
22421
22422 @item -muser-mode
22423 @opindex muser-mode
22424 Generate code for the user mode, where the access to some general registers
22425 is forbidden: on the GR5, registers r24 to r31 cannot be accessed in this
22426 mode; on the GR6, only registers r29 to r31 are affected.
22427 @end table
22428
22429 @node VMS Options
22430 @subsection VMS Options
22431
22432 These @samp{-m} options are defined for the VMS implementations:
22433
22434 @table @gcctabopt
22435 @item -mvms-return-codes
22436 @opindex mvms-return-codes
22437 Return VMS condition codes from @code{main}. The default is to return POSIX-style
22438 condition (e.g.@ error) codes.
22439
22440 @item -mdebug-main=@var{prefix}
22441 @opindex mdebug-main=@var{prefix}
22442 Flag the first routine whose name starts with @var{prefix} as the main
22443 routine for the debugger.
22444
22445 @item -mmalloc64
22446 @opindex mmalloc64
22447 Default to 64-bit memory allocation routines.
22448
22449 @item -mpointer-size=@var{size}
22450 @opindex mpointer-size=@var{size}
22451 Set the default size of pointers. Possible options for @var{size} are
22452 @samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
22453 for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
22454 The later option disables @code{pragma pointer_size}.
22455 @end table
22456
22457 @node VxWorks Options
22458 @subsection VxWorks Options
22459 @cindex VxWorks Options
22460
22461 The options in this section are defined for all VxWorks targets.
22462 Options specific to the target hardware are listed with the other
22463 options for that target.
22464
22465 @table @gcctabopt
22466 @item -mrtp
22467 @opindex mrtp
22468 GCC can generate code for both VxWorks kernels and real time processes
22469 (RTPs).  This option switches from the former to the latter.  It also
22470 defines the preprocessor macro @code{__RTP__}.
22471
22472 @item -non-static
22473 @opindex non-static
22474 Link an RTP executable against shared libraries rather than static
22475 libraries.  The options @option{-static} and @option{-shared} can
22476 also be used for RTPs (@pxref{Link Options}); @option{-static}
22477 is the default.
22478
22479 @item -Bstatic
22480 @itemx -Bdynamic
22481 @opindex Bstatic
22482 @opindex Bdynamic
22483 These options are passed down to the linker.  They are defined for
22484 compatibility with Diab.
22485
22486 @item -Xbind-lazy
22487 @opindex Xbind-lazy
22488 Enable lazy binding of function calls.  This option is equivalent to
22489 @option{-Wl,-z,now} and is defined for compatibility with Diab.
22490
22491 @item -Xbind-now
22492 @opindex Xbind-now
22493 Disable lazy binding of function calls.  This option is the default and
22494 is defined for compatibility with Diab.
22495 @end table
22496
22497 @node x86 Options
22498 @subsection x86 Options
22499 @cindex x86 Options
22500
22501 These @samp{-m} options are defined for the x86 family of computers.
22502
22503 @table @gcctabopt
22504
22505 @item -march=@var{cpu-type}
22506 @opindex march
22507 Generate instructions for the machine type @var{cpu-type}.  In contrast to
22508 @option{-mtune=@var{cpu-type}}, which merely tunes the generated code 
22509 for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
22510 to generate code that may not run at all on processors other than the one
22511 indicated.  Specifying @option{-march=@var{cpu-type}} implies 
22512 @option{-mtune=@var{cpu-type}}.
22513
22514 The choices for @var{cpu-type} are:
22515
22516 @table @samp
22517 @item native
22518 This selects the CPU to generate code for at compilation time by determining
22519 the processor type of the compiling machine.  Using @option{-march=native}
22520 enables all instruction subsets supported by the local machine (hence
22521 the result might not run on different machines).  Using @option{-mtune=native}
22522 produces code optimized for the local machine under the constraints
22523 of the selected instruction set.  
22524
22525 @item i386
22526 Original Intel i386 CPU@.
22527
22528 @item i486
22529 Intel i486 CPU@.  (No scheduling is implemented for this chip.)
22530
22531 @item i586
22532 @itemx pentium
22533 Intel Pentium CPU with no MMX support.
22534
22535 @item lakemont
22536 Intel Lakemont MCU, based on Intel Pentium CPU.
22537
22538 @item pentium-mmx
22539 Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
22540
22541 @item pentiumpro
22542 Intel Pentium Pro CPU@.
22543
22544 @item i686
22545 When used with @option{-march}, the Pentium Pro
22546 instruction set is used, so the code runs on all i686 family chips.
22547 When used with @option{-mtune}, it has the same meaning as @samp{generic}.
22548
22549 @item pentium2
22550 Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
22551 support.
22552
22553 @item pentium3
22554 @itemx pentium3m
22555 Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
22556 set support.
22557
22558 @item pentium-m
22559 Intel Pentium M; low-power version of Intel Pentium III CPU
22560 with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.
22561
22562 @item pentium4
22563 @itemx pentium4m
22564 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.
22565
22566 @item prescott
22567 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
22568 set support.
22569
22570 @item nocona
22571 Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
22572 SSE2 and SSE3 instruction set support.
22573
22574 @item core2
22575 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
22576 instruction set support.
22577
22578 @item nehalem
22579 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
22580 SSE4.1, SSE4.2 and POPCNT instruction set support.
22581
22582 @item westmere
22583 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
22584 SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction set support.
22585
22586 @item sandybridge
22587 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
22588 SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL instruction set support.
22589
22590 @item ivybridge
22591 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
22592 SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C
22593 instruction set support.
22594
22595 @item haswell
22596 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
22597 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
22598 BMI, BMI2 and F16C instruction set support.
22599
22600 @item broadwell
22601 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
22602 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
22603 BMI, BMI2, F16C, RDSEED, ADCX and PREFETCHW instruction set support.
22604
22605 @item skylake
22606 Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
22607 SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
22608 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and
22609 XSAVES instruction set support.
22610
22611 @item bonnell
22612 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
22613 instruction set support.
22614
22615 @item silvermont
22616 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
22617 SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and RDRND instruction set support.
22618
22619 @item knl
22620 Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
22621 SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
22622 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and
22623 AVX512CD instruction set support.
22624
22625 @item skylake-avx512
22626 Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
22627 SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
22628 BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
22629 AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set support.
22630
22631 @item k6
22632 AMD K6 CPU with MMX instruction set support.
22633
22634 @item k6-2
22635 @itemx k6-3
22636 Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
22637
22638 @item athlon
22639 @itemx athlon-tbird
22640 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
22641 support.
22642
22643 @item athlon-4
22644 @itemx athlon-xp
22645 @itemx athlon-mp
22646 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
22647 instruction set support.
22648
22649 @item k8
22650 @itemx opteron
22651 @itemx athlon64
22652 @itemx athlon-fx
22653 Processors based on the AMD K8 core with x86-64 instruction set support,
22654 including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
22655 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
22656 instruction set extensions.)
22657
22658 @item k8-sse3
22659 @itemx opteron-sse3
22660 @itemx athlon64-sse3
22661 Improved versions of AMD K8 cores with SSE3 instruction set support.
22662
22663 @item amdfam10
22664 @itemx barcelona
22665 CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
22666 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
22667 instruction set extensions.)
22668
22669 @item bdver1
22670 CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
22671 supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
22672 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
22673 @item bdver2
22674 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
22675 supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX,
22676 SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
22677 extensions.)
22678 @item bdver3
22679 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
22680 supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
22681 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 
22682 64-bit instruction set extensions.
22683 @item bdver4
22684 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
22685 supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
22686 AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 
22687 SSE4.2, ABM and 64-bit instruction set extensions.
22688
22689 @item znver1
22690 AMD Family 17h core based CPUs with x86-64 instruction set support.  (This
22691 supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
22692 SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
22693 SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
22694 instruction set extensions.
22695
22696 @item btver1
22697 CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
22698 supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
22699 instruction set extensions.)
22700
22701 @item btver2
22702 CPUs based on AMD Family 16h cores with x86-64 instruction set support. This
22703 includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM,
22704 SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set extensions.
22705
22706 @item winchip-c6
22707 IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
22708 set support.
22709
22710 @item winchip2
22711 IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
22712 instruction set support.
22713
22714 @item c3
22715 VIA C3 CPU with MMX and 3DNow!@: instruction set support.  (No scheduling is
22716 implemented for this chip.)
22717
22718 @item c3-2
22719 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
22720 (No scheduling is
22721 implemented for this chip.)
22722
22723 @item geode
22724 AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
22725 @end table
22726
22727 @item -mtune=@var{cpu-type}
22728 @opindex mtune
22729 Tune to @var{cpu-type} everything applicable about the generated code, except
22730 for the ABI and the set of available instructions.  
22731 While picking a specific @var{cpu-type} schedules things appropriately
22732 for that particular chip, the compiler does not generate any code that
22733 cannot run on the default machine type unless you use a
22734 @option{-march=@var{cpu-type}} option.
22735 For example, if GCC is configured for i686-pc-linux-gnu
22736 then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
22737 but still runs on i686 machines.
22738
22739 The choices for @var{cpu-type} are the same as for @option{-march}.
22740 In addition, @option{-mtune} supports 2 extra choices for @var{cpu-type}:
22741
22742 @table @samp
22743 @item generic
22744 Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
22745 If you know the CPU on which your code will run, then you should use
22746 the corresponding @option{-mtune} or @option{-march} option instead of
22747 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
22748 of your application will have, then you should use this option.
22749
22750 As new processors are deployed in the marketplace, the behavior of this
22751 option will change.  Therefore, if you upgrade to a newer version of
22752 GCC, code generation controlled by this option will change to reflect
22753 the processors
22754 that are most common at the time that version of GCC is released.
22755
22756 There is no @option{-march=generic} option because @option{-march}
22757 indicates the instruction set the compiler can use, and there is no
22758 generic instruction set applicable to all processors.  In contrast,
22759 @option{-mtune} indicates the processor (or, in this case, collection of
22760 processors) for which the code is optimized.
22761
22762 @item intel
22763 Produce code optimized for the most current Intel processors, which are
22764 Haswell and Silvermont for this version of GCC.  If you know the CPU
22765 on which your code will run, then you should use the corresponding
22766 @option{-mtune} or @option{-march} option instead of @option{-mtune=intel}.
22767 But, if you want your application performs better on both Haswell and
22768 Silvermont, then you should use this option.
22769
22770 As new Intel processors are deployed in the marketplace, the behavior of
22771 this option will change.  Therefore, if you upgrade to a newer version of
22772 GCC, code generation controlled by this option will change to reflect
22773 the most current Intel processors at the time that version of GCC is
22774 released.
22775
22776 There is no @option{-march=intel} option because @option{-march} indicates
22777 the instruction set the compiler can use, and there is no common
22778 instruction set applicable to all processors.  In contrast,
22779 @option{-mtune} indicates the processor (or, in this case, collection of
22780 processors) for which the code is optimized.
22781 @end table
22782
22783 @item -mcpu=@var{cpu-type}
22784 @opindex mcpu
22785 A deprecated synonym for @option{-mtune}.
22786
22787 @item -mfpmath=@var{unit}
22788 @opindex mfpmath
22789 Generate floating-point arithmetic for selected unit @var{unit}.  The choices
22790 for @var{unit} are:
22791
22792 @table @samp
22793 @item 387
22794 Use the standard 387 floating-point coprocessor present on the majority of chips and
22795 emulated otherwise.  Code compiled with this option runs almost everywhere.
22796 The temporary results are computed in 80-bit precision instead of the precision
22797 specified by the type, resulting in slightly different results compared to most
22798 of other chips.  See @option{-ffloat-store} for more detailed description.
22799
22800 This is the default choice for x86-32 targets.
22801
22802 @item sse
22803 Use scalar floating-point instructions present in the SSE instruction set.
22804 This instruction set is supported by Pentium III and newer chips,
22805 and in the AMD line
22806 by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
22807 instruction set supports only single-precision arithmetic, thus the double and
22808 extended-precision arithmetic are still done using 387.  A later version, present
22809 only in Pentium 4 and AMD x86-64 chips, supports double-precision
22810 arithmetic too.
22811
22812 For the x86-32 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
22813 or @option{-msse2} switches to enable SSE extensions and make this option
22814 effective.  For the x86-64 compiler, these extensions are enabled by default.
22815
22816 The resulting code should be considerably faster in the majority of cases and avoid
22817 the numerical instability problems of 387 code, but may break some existing
22818 code that expects temporaries to be 80 bits.
22819
22820 This is the default choice for the x86-64 compiler.
22821
22822 @item sse,387
22823 @itemx sse+387
22824 @itemx both
22825 Attempt to utilize both instruction sets at once.  This effectively doubles the
22826 amount of available registers, and on chips with separate execution units for
22827 387 and SSE the execution resources too.  Use this option with care, as it is
22828 still experimental, because the GCC register allocator does not model separate
22829 functional units well, resulting in unstable performance.
22830 @end table
22831
22832 @item -masm=@var{dialect}
22833 @opindex masm=@var{dialect}
22834 Output assembly instructions using selected @var{dialect}.  Also affects
22835 which dialect is used for basic @code{asm} (@pxref{Basic Asm}) and
22836 extended @code{asm} (@pxref{Extended Asm}). Supported choices (in dialect
22837 order) are @samp{att} or @samp{intel}. The default is @samp{att}. Darwin does
22838 not support @samp{intel}.
22839
22840 @item -mieee-fp
22841 @itemx -mno-ieee-fp
22842 @opindex mieee-fp
22843 @opindex mno-ieee-fp
22844 Control whether or not the compiler uses IEEE floating-point
22845 comparisons.  These correctly handle the case where the result of a
22846 comparison is unordered.
22847
22848 @item -msoft-float
22849 @opindex msoft-float
22850 Generate output containing library calls for floating point.
22851
22852 @strong{Warning:} the requisite libraries are not part of GCC@.
22853 Normally the facilities of the machine's usual C compiler are used, but
22854 this can't be done directly in cross-compilation.  You must make your
22855 own arrangements to provide suitable library functions for
22856 cross-compilation.
22857
22858 On machines where a function returns floating-point results in the 80387
22859 register stack, some floating-point opcodes may be emitted even if
22860 @option{-msoft-float} is used.
22861
22862 @item -mno-fp-ret-in-387
22863 @opindex mno-fp-ret-in-387
22864 Do not use the FPU registers for return values of functions.
22865
22866 The usual calling convention has functions return values of types
22867 @code{float} and @code{double} in an FPU register, even if there
22868 is no FPU@.  The idea is that the operating system should emulate
22869 an FPU@.
22870
22871 The option @option{-mno-fp-ret-in-387} causes such values to be returned
22872 in ordinary CPU registers instead.
22873
22874 @item -mno-fancy-math-387
22875 @opindex mno-fancy-math-387
22876 Some 387 emulators do not support the @code{sin}, @code{cos} and
22877 @code{sqrt} instructions for the 387.  Specify this option to avoid
22878 generating those instructions.  This option is the default on
22879 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
22880 indicates that the target CPU always has an FPU and so the
22881 instruction does not need emulation.  These
22882 instructions are not generated unless you also use the
22883 @option{-funsafe-math-optimizations} switch.
22884
22885 @item -malign-double
22886 @itemx -mno-align-double
22887 @opindex malign-double
22888 @opindex mno-align-double
22889 Control whether GCC aligns @code{double}, @code{long double}, and
22890 @code{long long} variables on a two-word boundary or a one-word
22891 boundary.  Aligning @code{double} variables on a two-word boundary
22892 produces code that runs somewhat faster on a Pentium at the
22893 expense of more memory.
22894
22895 On x86-64, @option{-malign-double} is enabled by default.
22896
22897 @strong{Warning:} if you use the @option{-malign-double} switch,
22898 structures containing the above types are aligned differently than
22899 the published application binary interface specifications for the x86-32
22900 and are not binary compatible with structures in code compiled
22901 without that switch.
22902
22903 @item -m96bit-long-double
22904 @itemx -m128bit-long-double
22905 @opindex m96bit-long-double
22906 @opindex m128bit-long-double
22907 These switches control the size of @code{long double} type.  The x86-32
22908 application binary interface specifies the size to be 96 bits,
22909 so @option{-m96bit-long-double} is the default in 32-bit mode.
22910
22911 Modern architectures (Pentium and newer) prefer @code{long double}
22912 to be aligned to an 8- or 16-byte boundary.  In arrays or structures
22913 conforming to the ABI, this is not possible.  So specifying
22914 @option{-m128bit-long-double} aligns @code{long double}
22915 to a 16-byte boundary by padding the @code{long double} with an additional
22916 32-bit zero.
22917
22918 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
22919 its ABI specifies that @code{long double} is aligned on 16-byte boundary.
22920
22921 Notice that neither of these options enable any extra precision over the x87
22922 standard of 80 bits for a @code{long double}.
22923
22924 @strong{Warning:} if you override the default value for your target ABI, this
22925 changes the size of 
22926 structures and arrays containing @code{long double} variables,
22927 as well as modifying the function calling convention for functions taking
22928 @code{long double}.  Hence they are not binary-compatible
22929 with code compiled without that switch.
22930
22931 @item -mlong-double-64
22932 @itemx -mlong-double-80
22933 @itemx -mlong-double-128
22934 @opindex mlong-double-64
22935 @opindex mlong-double-80
22936 @opindex mlong-double-128
22937 These switches control the size of @code{long double} type. A size
22938 of 64 bits makes the @code{long double} type equivalent to the @code{double}
22939 type. This is the default for 32-bit Bionic C library.  A size
22940 of 128 bits makes the @code{long double} type equivalent to the
22941 @code{__float128} type. This is the default for 64-bit Bionic C library.
22942
22943 @strong{Warning:} if you override the default value for your target ABI, this
22944 changes the size of
22945 structures and arrays containing @code{long double} variables,
22946 as well as modifying the function calling convention for functions taking
22947 @code{long double}.  Hence they are not binary-compatible
22948 with code compiled without that switch.
22949
22950 @item -malign-data=@var{type}
22951 @opindex malign-data
22952 Control how GCC aligns variables.  Supported values for @var{type} are
22953 @samp{compat} uses increased alignment value compatible uses GCC 4.8
22954 and earlier, @samp{abi} uses alignment value as specified by the
22955 psABI, and @samp{cacheline} uses increased alignment value to match
22956 the cache line size.  @samp{compat} is the default.
22957
22958 @item -mlarge-data-threshold=@var{threshold}
22959 @opindex mlarge-data-threshold
22960 When @option{-mcmodel=medium} is specified, data objects larger than
22961 @var{threshold} are placed in the large data section.  This value must be the
22962 same across all objects linked into the binary, and defaults to 65535.
22963
22964 @item -mrtd
22965 @opindex mrtd
22966 Use a different function-calling convention, in which functions that
22967 take a fixed number of arguments return with the @code{ret @var{num}}
22968 instruction, which pops their arguments while returning.  This saves one
22969 instruction in the caller since there is no need to pop the arguments
22970 there.
22971
22972 You can specify that an individual function is called with this calling
22973 sequence with the function attribute @code{stdcall}.  You can also
22974 override the @option{-mrtd} option by using the function attribute
22975 @code{cdecl}.  @xref{Function Attributes}.
22976
22977 @strong{Warning:} this calling convention is incompatible with the one
22978 normally used on Unix, so you cannot use it if you need to call
22979 libraries compiled with the Unix compiler.
22980
22981 Also, you must provide function prototypes for all functions that
22982 take variable numbers of arguments (including @code{printf});
22983 otherwise incorrect code is generated for calls to those
22984 functions.
22985
22986 In addition, seriously incorrect code results if you call a
22987 function with too many arguments.  (Normally, extra arguments are
22988 harmlessly ignored.)
22989
22990 @item -mregparm=@var{num}
22991 @opindex mregparm
22992 Control how many registers are used to pass integer arguments.  By
22993 default, no registers are used to pass arguments, and at most 3
22994 registers can be used.  You can control this behavior for a specific
22995 function by using the function attribute @code{regparm}.
22996 @xref{Function Attributes}.
22997
22998 @strong{Warning:} if you use this switch, and
22999 @var{num} is nonzero, then you must build all modules with the same
23000 value, including any libraries.  This includes the system libraries and
23001 startup modules.
23002
23003 @item -msseregparm
23004 @opindex msseregparm
23005 Use SSE register passing conventions for float and double arguments
23006 and return values.  You can control this behavior for a specific
23007 function by using the function attribute @code{sseregparm}.
23008 @xref{Function Attributes}.
23009
23010 @strong{Warning:} if you use this switch then you must build all
23011 modules with the same value, including any libraries.  This includes
23012 the system libraries and startup modules.
23013
23014 @item -mvect8-ret-in-mem
23015 @opindex mvect8-ret-in-mem
23016 Return 8-byte vectors in memory instead of MMX registers.  This is the
23017 default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun
23018 Studio compilers until version 12.  Later compiler versions (starting
23019 with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which
23020 is the default on Solaris@tie{}10 and later.  @emph{Only} use this option if
23021 you need to remain compatible with existing code produced by those
23022 previous compiler versions or older versions of GCC@.
23023
23024 @item -mpc32
23025 @itemx -mpc64
23026 @itemx -mpc80
23027 @opindex mpc32
23028 @opindex mpc64
23029 @opindex mpc80
23030
23031 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
23032 is specified, the significands of results of floating-point operations are
23033 rounded to 24 bits (single precision); @option{-mpc64} rounds the
23034 significands of results of floating-point operations to 53 bits (double
23035 precision) and @option{-mpc80} rounds the significands of results of
23036 floating-point operations to 64 bits (extended double precision), which is
23037 the default.  When this option is used, floating-point operations in higher
23038 precisions are not available to the programmer without setting the FPU
23039 control word explicitly.
23040
23041 Setting the rounding of floating-point operations to less than the default
23042 80 bits can speed some programs by 2% or more.  Note that some mathematical
23043 libraries assume that extended-precision (80-bit) floating-point operations
23044 are enabled by default; routines in such libraries could suffer significant
23045 loss of accuracy, typically through so-called ``catastrophic cancellation'',
23046 when this option is used to set the precision to less than extended precision.
23047
23048 @item -mstackrealign
23049 @opindex mstackrealign
23050 Realign the stack at entry.  On the x86, the @option{-mstackrealign}
23051 option generates an alternate prologue and epilogue that realigns the
23052 run-time stack if necessary.  This supports mixing legacy codes that keep
23053 4-byte stack alignment with modern codes that keep 16-byte stack alignment for
23054 SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
23055 applicable to individual functions.
23056
23057 @item -mpreferred-stack-boundary=@var{num}
23058 @opindex mpreferred-stack-boundary
23059 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
23060 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
23061 the default is 4 (16 bytes or 128 bits).
23062
23063 @strong{Warning:} When generating code for the x86-64 architecture with
23064 SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
23065 used to keep the stack boundary aligned to 8 byte boundary.  Since
23066 x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
23067 intended to be used in controlled environment where stack space is
23068 important limitation.  This option leads to wrong code when functions
23069 compiled with 16 byte stack alignment (such as functions from a standard
23070 library) are called with misaligned stack.  In this case, SSE
23071 instructions may lead to misaligned memory access traps.  In addition,
23072 variable arguments are handled incorrectly for 16 byte aligned
23073 objects (including x87 long double and __int128), leading to wrong
23074 results.  You must build all modules with
23075 @option{-mpreferred-stack-boundary=3}, including any libraries.  This
23076 includes the system libraries and startup modules.
23077
23078 @item -mincoming-stack-boundary=@var{num}
23079 @opindex mincoming-stack-boundary
23080 Assume the incoming stack is aligned to a 2 raised to @var{num} byte
23081 boundary.  If @option{-mincoming-stack-boundary} is not specified,
23082 the one specified by @option{-mpreferred-stack-boundary} is used.
23083
23084 On Pentium and Pentium Pro, @code{double} and @code{long double} values
23085 should be aligned to an 8-byte boundary (see @option{-malign-double}) or
23086 suffer significant run time performance penalties.  On Pentium III, the
23087 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
23088 properly if it is not 16-byte aligned.
23089
23090 To ensure proper alignment of this values on the stack, the stack boundary
23091 must be as aligned as that required by any value stored on the stack.
23092 Further, every function must be generated such that it keeps the stack
23093 aligned.  Thus calling a function compiled with a higher preferred
23094 stack boundary from a function compiled with a lower preferred stack
23095 boundary most likely misaligns the stack.  It is recommended that
23096 libraries that use callbacks always use the default setting.
23097
23098 This extra alignment does consume extra stack space, and generally
23099 increases code size.  Code that is sensitive to stack space usage, such
23100 as embedded systems and operating system kernels, may want to reduce the
23101 preferred alignment to @option{-mpreferred-stack-boundary=2}.
23102
23103 @need 200
23104 @item -mmmx
23105 @opindex mmmx
23106 @need 200
23107 @itemx -msse
23108 @opindex msse
23109 @need 200
23110 @itemx -msse2
23111 @opindex msse2
23112 @need 200
23113 @itemx -msse3
23114 @opindex msse3
23115 @need 200
23116 @itemx -mssse3
23117 @opindex mssse3
23118 @need 200
23119 @itemx -msse4
23120 @opindex msse4
23121 @need 200
23122 @itemx -msse4a
23123 @opindex msse4a
23124 @need 200
23125 @itemx -msse4.1
23126 @opindex msse4.1
23127 @need 200
23128 @itemx -msse4.2
23129 @opindex msse4.2
23130 @need 200
23131 @itemx -mavx
23132 @opindex mavx
23133 @need 200
23134 @itemx -mavx2
23135 @opindex mavx2
23136 @need 200
23137 @itemx -mavx512f
23138 @opindex mavx512f
23139 @need 200
23140 @itemx -mavx512pf
23141 @opindex mavx512pf
23142 @need 200
23143 @itemx -mavx512er
23144 @opindex mavx512er
23145 @need 200
23146 @itemx -mavx512cd
23147 @opindex mavx512cd
23148 @need 200
23149 @itemx -mavx512vl
23150 @opindex mavx512vl
23151 @need 200
23152 @itemx -mavx512bw
23153 @opindex mavx512bw
23154 @need 200
23155 @itemx -mavx512dq
23156 @opindex mavx512dq
23157 @need 200
23158 @itemx -mavx512ifma
23159 @opindex mavx512ifma
23160 @need 200
23161 @itemx -mavx512vbmi
23162 @opindex mavx512vbmi
23163 @need 200
23164 @itemx -msha
23165 @opindex msha
23166 @need 200
23167 @itemx -maes
23168 @opindex maes
23169 @need 200
23170 @itemx -mpclmul
23171 @opindex mpclmul
23172 @need 200
23173 @itemx -mclfushopt
23174 @opindex mclfushopt
23175 @need 200
23176 @itemx -mfsgsbase
23177 @opindex mfsgsbase
23178 @need 200
23179 @itemx -mrdrnd
23180 @opindex mrdrnd
23181 @need 200
23182 @itemx -mf16c
23183 @opindex mf16c
23184 @need 200
23185 @itemx -mfma
23186 @opindex mfma
23187 @need 200
23188 @itemx -mfma4
23189 @opindex mfma4
23190 @need 200
23191 @itemx -mno-fma4
23192 @opindex mno-fma4
23193 @need 200
23194 @itemx -mprefetchwt1
23195 @opindex mprefetchwt1
23196 @need 200
23197 @itemx -mxop
23198 @opindex mxop
23199 @need 200
23200 @itemx -mlwp
23201 @opindex mlwp
23202 @need 200
23203 @itemx -m3dnow
23204 @opindex m3dnow
23205 @need 200
23206 @itemx -mpopcnt
23207 @opindex mpopcnt
23208 @need 200
23209 @itemx -mabm
23210 @opindex mabm
23211 @need 200
23212 @itemx -mbmi
23213 @opindex mbmi
23214 @need 200
23215 @itemx -mbmi2
23216 @need 200
23217 @itemx -mlzcnt
23218 @opindex mlzcnt
23219 @need 200
23220 @itemx -mfxsr
23221 @opindex mfxsr
23222 @need 200
23223 @itemx -mxsave
23224 @opindex mxsave
23225 @need 200
23226 @itemx -mxsaveopt
23227 @opindex mxsaveopt
23228 @need 200
23229 @itemx -mxsavec
23230 @opindex mxsavec
23231 @need 200
23232 @itemx -mxsaves
23233 @opindex mxsaves
23234 @need 200
23235 @itemx -mrtm
23236 @opindex mrtm
23237 @need 200
23238 @itemx -mtbm
23239 @opindex mtbm
23240 @need 200
23241 @itemx -mmpx
23242 @opindex mmpx
23243 @need 200
23244 @itemx -mmwaitx
23245 @opindex mmwaitx
23246 @need 200
23247 @itemx -mclzero
23248 @opindex mclzero
23249 These switches enable the use of instructions in the MMX, SSE,
23250 SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD,
23251 SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM,
23252 AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA AVX512VBMI, BMI, BMI2, FXSR,
23253 XSAVE, XSAVEOPT, LZCNT, RTM, MPX, MWAITX or 3DNow!@:
23254 extended instruction sets.  Each has a corresponding @option{-mno-} option
23255 to disable use of these instructions.
23256
23257 These extensions are also available as built-in functions: see
23258 @ref{x86 Built-in Functions}, for details of the functions enabled and
23259 disabled by these switches.
23260
23261 To generate SSE/SSE2 instructions automatically from floating-point
23262 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
23263
23264 GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
23265 generates new AVX instructions or AVX equivalence for all SSEx instructions
23266 when needed.
23267
23268 These options enable GCC to use these extended instructions in
23269 generated code, even without @option{-mfpmath=sse}.  Applications that
23270 perform run-time CPU detection must compile separate files for each
23271 supported architecture, using the appropriate flags.  In particular,
23272 the file containing the CPU detection code should be compiled without
23273 these options.
23274
23275 @item -mdump-tune-features
23276 @opindex mdump-tune-features
23277 This option instructs GCC to dump the names of the x86 performance 
23278 tuning features and default settings. The names can be used in 
23279 @option{-mtune-ctrl=@var{feature-list}}.
23280
23281 @item -mtune-ctrl=@var{feature-list}
23282 @opindex mtune-ctrl=@var{feature-list}
23283 This option is used to do fine grain control of x86 code generation features.
23284 @var{feature-list} is a comma separated list of @var{feature} names. See also
23285 @option{-mdump-tune-features}. When specified, the @var{feature} is turned
23286 on if it is not preceded with @samp{^}, otherwise, it is turned off. 
23287 @option{-mtune-ctrl=@var{feature-list}} is intended to be used by GCC
23288 developers. Using it may lead to code paths not covered by testing and can
23289 potentially result in compiler ICEs or runtime errors.
23290
23291 @item -mno-default
23292 @opindex mno-default
23293 This option instructs GCC to turn off all tunable features. See also 
23294 @option{-mtune-ctrl=@var{feature-list}} and @option{-mdump-tune-features}.
23295
23296 @item -mcld
23297 @opindex mcld
23298 This option instructs GCC to emit a @code{cld} instruction in the prologue
23299 of functions that use string instructions.  String instructions depend on
23300 the DF flag to select between autoincrement or autodecrement mode.  While the
23301 ABI specifies the DF flag to be cleared on function entry, some operating
23302 systems violate this specification by not clearing the DF flag in their
23303 exception dispatchers.  The exception handler can be invoked with the DF flag
23304 set, which leads to wrong direction mode when string instructions are used.
23305 This option can be enabled by default on 32-bit x86 targets by configuring
23306 GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
23307 instructions can be suppressed with the @option{-mno-cld} compiler option
23308 in this case.
23309
23310 @item -mvzeroupper
23311 @opindex mvzeroupper
23312 This option instructs GCC to emit a @code{vzeroupper} instruction
23313 before a transfer of control flow out of the function to minimize
23314 the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
23315 intrinsics.
23316
23317 @item -mprefer-avx128
23318 @opindex mprefer-avx128
23319 This option instructs GCC to use 128-bit AVX instructions instead of
23320 256-bit AVX instructions in the auto-vectorizer.
23321
23322 @item -mcx16
23323 @opindex mcx16
23324 This option enables GCC to generate @code{CMPXCHG16B} instructions.
23325 @code{CMPXCHG16B} allows for atomic operations on 128-bit double quadword
23326 (or oword) data types.  
23327 This is useful for high-resolution counters that can be updated
23328 by multiple processors (or cores).  This instruction is generated as part of
23329 atomic built-in functions: see @ref{__sync Builtins} or
23330 @ref{__atomic Builtins} for details.
23331
23332 @item -msahf
23333 @opindex msahf
23334 This option enables generation of @code{SAHF} instructions in 64-bit code.
23335 Early Intel Pentium 4 CPUs with Intel 64 support,
23336 prior to the introduction of Pentium 4 G1 step in December 2005,
23337 lacked the @code{LAHF} and @code{SAHF} instructions
23338 which are supported by AMD64.
23339 These are load and store instructions, respectively, for certain status flags.
23340 In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
23341 @code{drem}, and @code{remainder} built-in functions;
23342 see @ref{Other Builtins} for details.
23343
23344 @item -mmovbe
23345 @opindex mmovbe
23346 This option enables use of the @code{movbe} instruction to implement
23347 @code{__builtin_bswap32} and @code{__builtin_bswap64}.
23348
23349 @item -mcrc32
23350 @opindex mcrc32
23351 This option enables built-in functions @code{__builtin_ia32_crc32qi},
23352 @code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
23353 @code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.
23354
23355 @item -mrecip
23356 @opindex mrecip
23357 This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
23358 (and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
23359 with an additional Newton-Raphson step
23360 to increase precision instead of @code{DIVSS} and @code{SQRTSS}
23361 (and their vectorized
23362 variants) for single-precision floating-point arguments.  These instructions
23363 are generated only when @option{-funsafe-math-optimizations} is enabled
23364 together with @option{-finite-math-only} and @option{-fno-trapping-math}.
23365 Note that while the throughput of the sequence is higher than the throughput
23366 of the non-reciprocal instruction, the precision of the sequence can be
23367 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
23368
23369 Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
23370 (or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
23371 combination), and doesn't need @option{-mrecip}.
23372
23373 Also note that GCC emits the above sequence with additional Newton-Raphson step
23374 for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
23375 already with @option{-ffast-math} (or the above option combination), and
23376 doesn't need @option{-mrecip}.
23377
23378 @item -mrecip=@var{opt}
23379 @opindex mrecip=opt
23380 This option controls which reciprocal estimate instructions
23381 may be used.  @var{opt} is a comma-separated list of options, which may
23382 be preceded by a @samp{!} to invert the option:
23383
23384 @table @samp
23385 @item all
23386 Enable all estimate instructions.
23387
23388 @item default
23389 Enable the default instructions, equivalent to @option{-mrecip}.
23390
23391 @item none
23392 Disable all estimate instructions, equivalent to @option{-mno-recip}.
23393
23394 @item div
23395 Enable the approximation for scalar division.
23396
23397 @item vec-div
23398 Enable the approximation for vectorized division.
23399
23400 @item sqrt
23401 Enable the approximation for scalar square root.
23402
23403 @item vec-sqrt
23404 Enable the approximation for vectorized square root.
23405 @end table
23406
23407 So, for example, @option{-mrecip=all,!sqrt} enables
23408 all of the reciprocal approximations, except for square root.
23409
23410 @item -mveclibabi=@var{type}
23411 @opindex mveclibabi
23412 Specifies the ABI type to use for vectorizing intrinsics using an
23413 external library.  Supported values for @var{type} are @samp{svml} 
23414 for the Intel short
23415 vector math library and @samp{acml} for the AMD math core library.
23416 To use this option, both @option{-ftree-vectorize} and
23417 @option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML 
23418 ABI-compatible library must be specified at link time.
23419
23420 GCC currently emits calls to @code{vmldExp2},
23421 @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
23422 @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
23423 @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
23424 @code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
23425 @code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
23426 @code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
23427 @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
23428 @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
23429 @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
23430 function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin},
23431 @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
23432 @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
23433 @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
23434 @code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type
23435 when @option{-mveclibabi=acml} is used.  
23436
23437 @item -mabi=@var{name}
23438 @opindex mabi
23439 Generate code for the specified calling convention.  Permissible values
23440 are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
23441 @samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
23442 ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
23443 You can control this behavior for specific functions by
23444 using the function attributes @code{ms_abi} and @code{sysv_abi}.
23445 @xref{Function Attributes}.
23446
23447 @item -mtls-dialect=@var{type}
23448 @opindex mtls-dialect
23449 Generate code to access thread-local storage using the @samp{gnu} or
23450 @samp{gnu2} conventions.  @samp{gnu} is the conservative default;
23451 @samp{gnu2} is more efficient, but it may add compile- and run-time
23452 requirements that cannot be satisfied on all systems.
23453
23454 @item -mpush-args
23455 @itemx -mno-push-args
23456 @opindex mpush-args
23457 @opindex mno-push-args
23458 Use PUSH operations to store outgoing parameters.  This method is shorter
23459 and usually equally fast as method using SUB/MOV operations and is enabled
23460 by default.  In some cases disabling it may improve performance because of
23461 improved scheduling and reduced dependencies.
23462
23463 @item -maccumulate-outgoing-args
23464 @opindex maccumulate-outgoing-args
23465 If enabled, the maximum amount of space required for outgoing arguments is
23466 computed in the function prologue.  This is faster on most modern CPUs
23467 because of reduced dependencies, improved scheduling and reduced stack usage
23468 when the preferred stack boundary is not equal to 2.  The drawback is a notable
23469 increase in code size.  This switch implies @option{-mno-push-args}.
23470
23471 @item -mthreads
23472 @opindex mthreads
23473 Support thread-safe exception handling on MinGW.  Programs that rely
23474 on thread-safe exception handling must compile and link all code with the
23475 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
23476 @option{-D_MT}; when linking, it links in a special thread helper library
23477 @option{-lmingwthrd} which cleans up per-thread exception-handling data.
23478
23479 @item -mms-bitfields
23480 @itemx -mno-ms-bitfields
23481 @opindex mms-bitfields
23482 @opindex mno-ms-bitfields
23483
23484 Enable/disable bit-field layout compatible with the native Microsoft
23485 Windows compiler.  
23486
23487 If @code{packed} is used on a structure, or if bit-fields are used,
23488 it may be that the Microsoft ABI lays out the structure differently
23489 than the way GCC normally does.  Particularly when moving packed
23490 data between functions compiled with GCC and the native Microsoft compiler
23491 (either via function call or as data in a file), it may be necessary to access
23492 either format.
23493
23494 This option is enabled by default for Microsoft Windows
23495 targets.  This behavior can also be controlled locally by use of variable
23496 or type attributes.  For more information, see @ref{x86 Variable Attributes}
23497 and @ref{x86 Type Attributes}.
23498
23499 The Microsoft structure layout algorithm is fairly simple with the exception
23500 of the bit-field packing.  
23501 The padding and alignment of members of structures and whether a bit-field 
23502 can straddle a storage-unit boundary are determine by these rules:
23503
23504 @enumerate
23505 @item Structure members are stored sequentially in the order in which they are
23506 declared: the first member has the lowest memory address and the last member
23507 the highest.
23508
23509 @item Every data object has an alignment requirement.  The alignment requirement
23510 for all data except structures, unions, and arrays is either the size of the
23511 object or the current packing size (specified with either the
23512 @code{aligned} attribute or the @code{pack} pragma),
23513 whichever is less.  For structures, unions, and arrays,
23514 the alignment requirement is the largest alignment requirement of its members.
23515 Every object is allocated an offset so that:
23516
23517 @smallexample
23518 offset % alignment_requirement == 0
23519 @end smallexample
23520
23521 @item Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation
23522 unit if the integral types are the same size and if the next bit-field fits
23523 into the current allocation unit without crossing the boundary imposed by the
23524 common alignment requirements of the bit-fields.
23525 @end enumerate
23526
23527 MSVC interprets zero-length bit-fields in the following ways:
23528
23529 @enumerate
23530 @item If a zero-length bit-field is inserted between two bit-fields that
23531 are normally coalesced, the bit-fields are not coalesced.
23532
23533 For example:
23534
23535 @smallexample
23536 struct
23537  @{
23538    unsigned long bf_1 : 12;
23539    unsigned long : 0;
23540    unsigned long bf_2 : 12;
23541  @} t1;
23542 @end smallexample
23543
23544 @noindent
23545 The size of @code{t1} is 8 bytes with the zero-length bit-field.  If the
23546 zero-length bit-field were removed, @code{t1}'s size would be 4 bytes.
23547
23548 @item If a zero-length bit-field is inserted after a bit-field, @code{foo}, and the
23549 alignment of the zero-length bit-field is greater than the member that follows it,
23550 @code{bar}, @code{bar} is aligned as the type of the zero-length bit-field.
23551
23552 For example:
23553
23554 @smallexample
23555 struct
23556  @{
23557    char foo : 4;
23558    short : 0;
23559    char bar;
23560  @} t2;
23561
23562 struct
23563  @{
23564    char foo : 4;
23565    short : 0;
23566    double bar;
23567  @} t3;
23568 @end smallexample
23569
23570 @noindent
23571 For @code{t2}, @code{bar} is placed at offset 2, rather than offset 1.
23572 Accordingly, the size of @code{t2} is 4.  For @code{t3}, the zero-length
23573 bit-field does not affect the alignment of @code{bar} or, as a result, the size
23574 of the structure.
23575
23576 Taking this into account, it is important to note the following:
23577
23578 @enumerate
23579 @item If a zero-length bit-field follows a normal bit-field, the type of the
23580 zero-length bit-field may affect the alignment of the structure as whole. For
23581 example, @code{t2} has a size of 4 bytes, since the zero-length bit-field follows a
23582 normal bit-field, and is of type short.
23583
23584 @item Even if a zero-length bit-field is not followed by a normal bit-field, it may
23585 still affect the alignment of the structure:
23586
23587 @smallexample
23588 struct
23589  @{
23590    char foo : 6;
23591    long : 0;
23592  @} t4;
23593 @end smallexample
23594
23595 @noindent
23596 Here, @code{t4} takes up 4 bytes.
23597 @end enumerate
23598
23599 @item Zero-length bit-fields following non-bit-field members are ignored:
23600
23601 @smallexample
23602 struct
23603  @{
23604    char foo;
23605    long : 0;
23606    char bar;
23607  @} t5;
23608 @end smallexample
23609
23610 @noindent
23611 Here, @code{t5} takes up 2 bytes.
23612 @end enumerate
23613
23614
23615 @item -mno-align-stringops
23616 @opindex mno-align-stringops
23617 Do not align the destination of inlined string operations.  This switch reduces
23618 code size and improves performance in case the destination is already aligned,
23619 but GCC doesn't know about it.
23620
23621 @item -minline-all-stringops
23622 @opindex minline-all-stringops
23623 By default GCC inlines string operations only when the destination is 
23624 known to be aligned to least a 4-byte boundary.  
23625 This enables more inlining and increases code
23626 size, but may improve performance of code that depends on fast
23627 @code{memcpy}, @code{strlen},
23628 and @code{memset} for short lengths.
23629
23630 @item -minline-stringops-dynamically
23631 @opindex minline-stringops-dynamically
23632 For string operations of unknown size, use run-time checks with
23633 inline code for small blocks and a library call for large blocks.
23634
23635 @item -mstringop-strategy=@var{alg}
23636 @opindex mstringop-strategy=@var{alg}
23637 Override the internal decision heuristic for the particular algorithm to use
23638 for inlining string operations.  The allowed values for @var{alg} are:
23639
23640 @table @samp
23641 @item rep_byte
23642 @itemx rep_4byte
23643 @itemx rep_8byte
23644 Expand using i386 @code{rep} prefix of the specified size.
23645
23646 @item byte_loop
23647 @itemx loop
23648 @itemx unrolled_loop
23649 Expand into an inline loop.
23650
23651 @item libcall
23652 Always use a library call.
23653 @end table
23654
23655 @item -mmemcpy-strategy=@var{strategy}
23656 @opindex mmemcpy-strategy=@var{strategy}
23657 Override the internal decision heuristic to decide if @code{__builtin_memcpy}
23658 should be inlined and what inline algorithm to use when the expected size
23659 of the copy operation is known. @var{strategy} 
23660 is a comma-separated list of @var{alg}:@var{max_size}:@var{dest_align} triplets. 
23661 @var{alg} is specified in @option{-mstringop-strategy}, @var{max_size} specifies
23662 the max byte size with which inline algorithm @var{alg} is allowed.  For the last
23663 triplet, the @var{max_size} must be @code{-1}. The @var{max_size} of the triplets
23664 in the list must be specified in increasing order.  The minimal byte size for 
23665 @var{alg} is @code{0} for the first triplet and @code{@var{max_size} + 1} of the 
23666 preceding range.
23667
23668 @item -mmemset-strategy=@var{strategy}
23669 @opindex mmemset-strategy=@var{strategy}
23670 The option is similar to @option{-mmemcpy-strategy=} except that it is to control
23671 @code{__builtin_memset} expansion.
23672
23673 @item -momit-leaf-frame-pointer
23674 @opindex momit-leaf-frame-pointer
23675 Don't keep the frame pointer in a register for leaf functions.  This
23676 avoids the instructions to save, set up, and restore frame pointers and
23677 makes an extra register available in leaf functions.  The option
23678 @option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
23679 which might make debugging harder.
23680
23681 @item -mtls-direct-seg-refs
23682 @itemx -mno-tls-direct-seg-refs
23683 @opindex mtls-direct-seg-refs
23684 Controls whether TLS variables may be accessed with offsets from the
23685 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
23686 or whether the thread base pointer must be added.  Whether or not this
23687 is valid depends on the operating system, and whether it maps the
23688 segment to cover the entire TLS area.
23689
23690 For systems that use the GNU C Library, the default is on.
23691
23692 @item -msse2avx
23693 @itemx -mno-sse2avx
23694 @opindex msse2avx
23695 Specify that the assembler should encode SSE instructions with VEX
23696 prefix.  The option @option{-mavx} turns this on by default.
23697
23698 @item -mfentry
23699 @itemx -mno-fentry
23700 @opindex mfentry
23701 If profiling is active (@option{-pg}), put the profiling
23702 counter call before the prologue.
23703 Note: On x86 architectures the attribute @code{ms_hook_prologue}
23704 isn't possible at the moment for @option{-mfentry} and @option{-pg}.
23705
23706 @item -mrecord-mcount
23707 @itemx -mno-record-mcount
23708 @opindex mrecord-mcount
23709 If profiling is active (@option{-pg}), generate a __mcount_loc section
23710 that contains pointers to each profiling call. This is useful for
23711 automatically patching and out calls.
23712
23713 @item -mnop-mcount
23714 @itemx -mno-nop-mcount
23715 @opindex mnop-mcount
23716 If profiling is active (@option{-pg}), generate the calls to
23717 the profiling functions as nops. This is useful when they
23718 should be patched in later dynamically. This is likely only
23719 useful together with @option{-mrecord-mcount}.
23720
23721 @item -mskip-rax-setup
23722 @itemx -mno-skip-rax-setup
23723 @opindex mskip-rax-setup
23724 When generating code for the x86-64 architecture with SSE extensions
23725 disabled, @option{-skip-rax-setup} can be used to skip setting up RAX
23726 register when there are no variable arguments passed in vector registers.
23727
23728 @strong{Warning:} Since RAX register is used to avoid unnecessarily
23729 saving vector registers on stack when passing variable arguments, the
23730 impacts of this option are callees may waste some stack space,
23731 misbehave or jump to a random location.  GCC 4.4 or newer don't have
23732 those issues, regardless the RAX register value.
23733
23734 @item -m8bit-idiv
23735 @itemx -mno-8bit-idiv
23736 @opindex m8bit-idiv
23737 On some processors, like Intel Atom, 8-bit unsigned integer divide is
23738 much faster than 32-bit/64-bit integer divide.  This option generates a
23739 run-time check.  If both dividend and divisor are within range of 0
23740 to 255, 8-bit unsigned integer divide is used instead of
23741 32-bit/64-bit integer divide.
23742
23743 @item -mavx256-split-unaligned-load
23744 @itemx -mavx256-split-unaligned-store
23745 @opindex mavx256-split-unaligned-load
23746 @opindex mavx256-split-unaligned-store
23747 Split 32-byte AVX unaligned load and store.
23748
23749 @item -mstack-protector-guard=@var{guard}
23750 @opindex mstack-protector-guard=@var{guard}
23751 Generate stack protection code using canary at @var{guard}.  Supported
23752 locations are @samp{global} for global canary or @samp{tls} for per-thread
23753 canary in the TLS block (the default).  This option has effect only when
23754 @option{-fstack-protector} or @option{-fstack-protector-all} is specified.
23755
23756 @item -mmitigate-rop
23757 @opindex mmitigate-rop
23758 Try to avoid generating code sequences that contain unintended return
23759 opcodes, to mitigate against certain forms of attack. At the moment,
23760 this option is limited in what it can do and should not be relied
23761 on to provide serious protection.
23762
23763 @end table
23764
23765 These @samp{-m} switches are supported in addition to the above
23766 on x86-64 processors in 64-bit environments.
23767
23768 @table @gcctabopt
23769 @item -m32
23770 @itemx -m64
23771 @itemx -mx32
23772 @itemx -m16
23773 @itemx -miamcu
23774 @opindex m32
23775 @opindex m64
23776 @opindex mx32
23777 @opindex m16
23778 @opindex miamcu
23779 Generate code for a 16-bit, 32-bit or 64-bit environment.
23780 The @option{-m32} option sets @code{int}, @code{long}, and pointer types
23781 to 32 bits, and
23782 generates code that runs on any i386 system.
23783
23784 The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
23785 types to 64 bits, and generates code for the x86-64 architecture.
23786 For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
23787 and @option{-mdynamic-no-pic} options.
23788
23789 The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
23790 to 32 bits, and
23791 generates code for the x86-64 architecture.
23792
23793 The @option{-m16} option is the same as @option{-m32}, except for that
23794 it outputs the @code{.code16gcc} assembly directive at the beginning of
23795 the assembly output so that the binary can run in 16-bit mode.
23796
23797 The @option{-miamcu} option generates code which conforms to Intel MCU
23798 psABI.  It requires the @option{-m32} option to be turned on.
23799
23800 @item -mno-red-zone
23801 @opindex mno-red-zone
23802 Do not use a so-called ``red zone'' for x86-64 code.  The red zone is mandated
23803 by the x86-64 ABI; it is a 128-byte area beyond the location of the
23804 stack pointer that is not modified by signal or interrupt handlers
23805 and therefore can be used for temporary data without adjusting the stack
23806 pointer.  The flag @option{-mno-red-zone} disables this red zone.
23807
23808 @item -mcmodel=small
23809 @opindex mcmodel=small
23810 Generate code for the small code model: the program and its symbols must
23811 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
23812 Programs can be statically or dynamically linked.  This is the default
23813 code model.
23814
23815 @item -mcmodel=kernel
23816 @opindex mcmodel=kernel
23817 Generate code for the kernel code model.  The kernel runs in the
23818 negative 2 GB of the address space.
23819 This model has to be used for Linux kernel code.
23820
23821 @item -mcmodel=medium
23822 @opindex mcmodel=medium
23823 Generate code for the medium model: the program is linked in the lower 2
23824 GB of the address space.  Small symbols are also placed there.  Symbols
23825 with sizes larger than @option{-mlarge-data-threshold} are put into
23826 large data or BSS sections and can be located above 2GB.  Programs can
23827 be statically or dynamically linked.
23828
23829 @item -mcmodel=large
23830 @opindex mcmodel=large
23831 Generate code for the large model.  This model makes no assumptions
23832 about addresses and sizes of sections.
23833
23834 @item -maddress-mode=long
23835 @opindex maddress-mode=long
23836 Generate code for long address mode.  This is only supported for 64-bit
23837 and x32 environments.  It is the default address mode for 64-bit
23838 environments.
23839
23840 @item -maddress-mode=short
23841 @opindex maddress-mode=short
23842 Generate code for short address mode.  This is only supported for 32-bit
23843 and x32 environments.  It is the default address mode for 32-bit and
23844 x32 environments.
23845 @end table
23846
23847 @node x86 Windows Options
23848 @subsection x86 Windows Options
23849 @cindex x86 Windows Options
23850 @cindex Windows Options for x86
23851
23852 These additional options are available for Microsoft Windows targets:
23853
23854 @table @gcctabopt
23855 @item -mconsole
23856 @opindex mconsole
23857 This option
23858 specifies that a console application is to be generated, by
23859 instructing the linker to set the PE header subsystem type
23860 required for console applications.
23861 This option is available for Cygwin and MinGW targets and is
23862 enabled by default on those targets.
23863
23864 @item -mdll
23865 @opindex mdll
23866 This option is available for Cygwin and MinGW targets.  It
23867 specifies that a DLL---a dynamic link library---is to be
23868 generated, enabling the selection of the required runtime
23869 startup object and entry point.
23870
23871 @item -mnop-fun-dllimport
23872 @opindex mnop-fun-dllimport
23873 This option is available for Cygwin and MinGW targets.  It
23874 specifies that the @code{dllimport} attribute should be ignored.
23875
23876 @item -mthread
23877 @opindex mthread
23878 This option is available for MinGW targets. It specifies
23879 that MinGW-specific thread support is to be used.
23880
23881 @item -municode
23882 @opindex municode
23883 This option is available for MinGW-w64 targets.  It causes
23884 the @code{UNICODE} preprocessor macro to be predefined, and
23885 chooses Unicode-capable runtime startup code.
23886
23887 @item -mwin32
23888 @opindex mwin32
23889 This option is available for Cygwin and MinGW targets.  It
23890 specifies that the typical Microsoft Windows predefined macros are to
23891 be set in the pre-processor, but does not influence the choice
23892 of runtime library/startup code.
23893
23894 @item -mwindows
23895 @opindex mwindows
23896 This option is available for Cygwin and MinGW targets.  It
23897 specifies that a GUI application is to be generated by
23898 instructing the linker to set the PE header subsystem type
23899 appropriately.
23900
23901 @item -fno-set-stack-executable
23902 @opindex fno-set-stack-executable
23903 This option is available for MinGW targets. It specifies that
23904 the executable flag for the stack used by nested functions isn't
23905 set. This is necessary for binaries running in kernel mode of
23906 Microsoft Windows, as there the User32 API, which is used to set executable
23907 privileges, isn't available.
23908
23909 @item -fwritable-relocated-rdata
23910 @opindex fno-writable-relocated-rdata
23911 This option is available for MinGW and Cygwin targets.  It specifies
23912 that relocated-data in read-only section is put into .data
23913 section.  This is a necessary for older runtimes not supporting
23914 modification of .rdata sections for pseudo-relocation.
23915
23916 @item -mpe-aligned-commons
23917 @opindex mpe-aligned-commons
23918 This option is available for Cygwin and MinGW targets.  It
23919 specifies that the GNU extension to the PE file format that
23920 permits the correct alignment of COMMON variables should be
23921 used when generating code.  It is enabled by default if
23922 GCC detects that the target assembler found during configuration
23923 supports the feature.
23924 @end table
23925
23926 See also under @ref{x86 Options} for standard options.
23927
23928 @node Xstormy16 Options
23929 @subsection Xstormy16 Options
23930 @cindex Xstormy16 Options
23931
23932 These options are defined for Xstormy16:
23933
23934 @table @gcctabopt
23935 @item -msim
23936 @opindex msim
23937 Choose startup files and linker script suitable for the simulator.
23938 @end table
23939
23940 @node Xtensa Options
23941 @subsection Xtensa Options
23942 @cindex Xtensa Options
23943
23944 These options are supported for Xtensa targets:
23945
23946 @table @gcctabopt
23947 @item -mconst16
23948 @itemx -mno-const16
23949 @opindex mconst16
23950 @opindex mno-const16
23951 Enable or disable use of @code{CONST16} instructions for loading
23952 constant values.  The @code{CONST16} instruction is currently not a
23953 standard option from Tensilica.  When enabled, @code{CONST16}
23954 instructions are always used in place of the standard @code{L32R}
23955 instructions.  The use of @code{CONST16} is enabled by default only if
23956 the @code{L32R} instruction is not available.
23957
23958 @item -mfused-madd
23959 @itemx -mno-fused-madd
23960 @opindex mfused-madd
23961 @opindex mno-fused-madd
23962 Enable or disable use of fused multiply/add and multiply/subtract
23963 instructions in the floating-point option.  This has no effect if the
23964 floating-point option is not also enabled.  Disabling fused multiply/add
23965 and multiply/subtract instructions forces the compiler to use separate
23966 instructions for the multiply and add/subtract operations.  This may be
23967 desirable in some cases where strict IEEE 754-compliant results are
23968 required: the fused multiply add/subtract instructions do not round the
23969 intermediate result, thereby producing results with @emph{more} bits of
23970 precision than specified by the IEEE standard.  Disabling fused multiply
23971 add/subtract instructions also ensures that the program output is not
23972 sensitive to the compiler's ability to combine multiply and add/subtract
23973 operations.
23974
23975 @item -mserialize-volatile
23976 @itemx -mno-serialize-volatile
23977 @opindex mserialize-volatile
23978 @opindex mno-serialize-volatile
23979 When this option is enabled, GCC inserts @code{MEMW} instructions before
23980 @code{volatile} memory references to guarantee sequential consistency.
23981 The default is @option{-mserialize-volatile}.  Use
23982 @option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
23983
23984 @item -mforce-no-pic
23985 @opindex mforce-no-pic
23986 For targets, like GNU/Linux, where all user-mode Xtensa code must be
23987 position-independent code (PIC), this option disables PIC for compiling
23988 kernel code.
23989
23990 @item -mtext-section-literals
23991 @itemx -mno-text-section-literals
23992 @opindex mtext-section-literals
23993 @opindex mno-text-section-literals
23994 These options control the treatment of literal pools.  The default is
23995 @option{-mno-text-section-literals}, which places literals in a separate
23996 section in the output file.  This allows the literal pool to be placed
23997 in a data RAM/ROM, and it also allows the linker to combine literal
23998 pools from separate object files to remove redundant literals and
23999 improve code size.  With @option{-mtext-section-literals}, the literals
24000 are interspersed in the text section in order to keep them as close as
24001 possible to their references.  This may be necessary for large assembly
24002 files.  Literals for each function are placed right before that function.
24003
24004 @item -mauto-litpools
24005 @itemx -mno-auto-litpools
24006 @opindex mauto-litpools
24007 @opindex mno-auto-litpools
24008 These options control the treatment of literal pools.  The default is
24009 @option{-mno-auto-litpools}, which places literals in a separate
24010 section in the output file unless @option{-mtext-section-literals} is
24011 used.  With @option{-mauto-litpools} the literals are interspersed in
24012 the text section by the assembler.  Compiler does not produce explicit
24013 @code{.literal} directives and loads literals into registers with
24014 @code{MOVI} instructions instead of @code{L32R} to let the assembler
24015 do relaxation and place literals as necessary.  This option allows
24016 assembler to create several literal pools per function and assemble
24017 very big functions, which may not be possible with
24018 @option{-mtext-section-literals}.
24019
24020 @item -mtarget-align
24021 @itemx -mno-target-align
24022 @opindex mtarget-align
24023 @opindex mno-target-align
24024 When this option is enabled, GCC instructs the assembler to
24025 automatically align instructions to reduce branch penalties at the
24026 expense of some code density.  The assembler attempts to widen density
24027 instructions to align branch targets and the instructions following call
24028 instructions.  If there are not enough preceding safe density
24029 instructions to align a target, no widening is performed.  The
24030 default is @option{-mtarget-align}.  These options do not affect the
24031 treatment of auto-aligned instructions like @code{LOOP}, which the
24032 assembler always aligns, either by widening density instructions or
24033 by inserting NOP instructions.
24034
24035 @item -mlongcalls
24036 @itemx -mno-longcalls
24037 @opindex mlongcalls
24038 @opindex mno-longcalls
24039 When this option is enabled, GCC instructs the assembler to translate
24040 direct calls to indirect calls unless it can determine that the target
24041 of a direct call is in the range allowed by the call instruction.  This
24042 translation typically occurs for calls to functions in other source
24043 files.  Specifically, the assembler translates a direct @code{CALL}
24044 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
24045 The default is @option{-mno-longcalls}.  This option should be used in
24046 programs where the call target can potentially be out of range.  This
24047 option is implemented in the assembler, not the compiler, so the
24048 assembly code generated by GCC still shows direct call
24049 instructions---look at the disassembled object code to see the actual
24050 instructions.  Note that the assembler uses an indirect call for
24051 every cross-file call, not just those that really are out of range.
24052 @end table
24053
24054 @node zSeries Options
24055 @subsection zSeries Options
24056 @cindex zSeries options
24057
24058 These are listed under @xref{S/390 and zSeries Options}.
24059
24060 @node Code Gen Options
24061 @section Options for Code Generation Conventions
24062 @cindex code generation conventions
24063 @cindex options, code generation
24064 @cindex run-time options
24065
24066 These machine-independent options control the interface conventions
24067 used in code generation.
24068
24069 Most of them have both positive and negative forms; the negative form
24070 of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
24071 one of the forms is listed---the one that is not the default.  You
24072 can figure out the other form by either removing @samp{no-} or adding
24073 it.
24074
24075 @table @gcctabopt
24076 @item -fbounds-check
24077 @opindex fbounds-check
24078 For front ends that support it, generate additional code to check that
24079 indices used to access arrays are within the declared range.  This is
24080 currently only supported by the Java and Fortran front ends, where
24081 this option defaults to true and false respectively.
24082
24083 @item -fstack-reuse=@var{reuse-level}
24084 @opindex fstack_reuse
24085 This option controls stack space reuse for user declared local/auto variables
24086 and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
24087 @samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
24088 local variables and temporaries, @samp{named_vars} enables the reuse only for
24089 user defined local variables with names, and @samp{none} disables stack reuse
24090 completely. The default value is @samp{all}. The option is needed when the
24091 program extends the lifetime of a scoped local variable or a compiler generated
24092 temporary beyond the end point defined by the language.  When a lifetime of
24093 a variable ends, and if the variable lives in memory, the optimizing compiler
24094 has the freedom to reuse its stack space with other temporaries or scoped
24095 local variables whose live range does not overlap with it. Legacy code extending
24096 local lifetime is likely to break with the stack reuse optimization.
24097
24098 For example,
24099
24100 @smallexample
24101    int *p;
24102    @{
24103      int local1;
24104
24105      p = &local1;
24106      local1 = 10;
24107      ....
24108    @}
24109    @{
24110       int local2;
24111       local2 = 20;
24112       ...
24113    @}
24114
24115    if (*p == 10)  // out of scope use of local1
24116      @{
24117
24118      @}
24119 @end smallexample
24120
24121 Another example:
24122 @smallexample
24123
24124    struct A
24125    @{
24126        A(int k) : i(k), j(k) @{ @}
24127        int i;
24128        int j;
24129    @};
24130
24131    A *ap;
24132
24133    void foo(const A& ar)
24134    @{
24135       ap = &ar;
24136    @}
24137
24138    void bar()
24139    @{
24140       foo(A(10)); // temp object's lifetime ends when foo returns
24141
24142       @{
24143         A a(20);
24144         ....
24145       @}
24146       ap->i+= 10;  // ap references out of scope temp whose space
24147                    // is reused with a. What is the value of ap->i?
24148    @}
24149
24150 @end smallexample
24151
24152 The lifetime of a compiler generated temporary is well defined by the C++
24153 standard. When a lifetime of a temporary ends, and if the temporary lives
24154 in memory, the optimizing compiler has the freedom to reuse its stack
24155 space with other temporaries or scoped local variables whose live range
24156 does not overlap with it. However some of the legacy code relies on
24157 the behavior of older compilers in which temporaries' stack space is
24158 not reused, the aggressive stack reuse can lead to runtime errors. This
24159 option is used to control the temporary stack reuse optimization.
24160
24161 @item -ftrapv
24162 @opindex ftrapv
24163 This option generates traps for signed overflow on addition, subtraction,
24164 multiplication operations.
24165 The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
24166 @option{-ftrapv} @option{-fwrapv} on the command-line results in
24167 @option{-fwrapv} being effective.  Note that only active options override, so
24168 using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
24169 results in @option{-ftrapv} being effective.
24170
24171 @item -fwrapv
24172 @opindex fwrapv
24173 This option instructs the compiler to assume that signed arithmetic
24174 overflow of addition, subtraction and multiplication wraps around
24175 using twos-complement representation.  This flag enables some optimizations
24176 and disables others.  This option is enabled by default for the Java
24177 front end, as required by the Java language specification.
24178 The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
24179 @option{-ftrapv} @option{-fwrapv} on the command-line results in
24180 @option{-fwrapv} being effective.  Note that only active options override, so
24181 using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
24182 results in @option{-ftrapv} being effective.
24183
24184 @item -fexceptions
24185 @opindex fexceptions
24186 Enable exception handling.  Generates extra code needed to propagate
24187 exceptions.  For some targets, this implies GCC generates frame
24188 unwind information for all functions, which can produce significant data
24189 size overhead, although it does not affect execution.  If you do not
24190 specify this option, GCC enables it by default for languages like
24191 C++ that normally require exception handling, and disables it for
24192 languages like C that do not normally require it.  However, you may need
24193 to enable this option when compiling C code that needs to interoperate
24194 properly with exception handlers written in C++.  You may also wish to
24195 disable this option if you are compiling older C++ programs that don't
24196 use exception handling.
24197
24198 @item -fnon-call-exceptions
24199 @opindex fnon-call-exceptions
24200 Generate code that allows trapping instructions to throw exceptions.
24201 Note that this requires platform-specific runtime support that does
24202 not exist everywhere.  Moreover, it only allows @emph{trapping}
24203 instructions to throw exceptions, i.e.@: memory references or floating-point
24204 instructions.  It does not allow exceptions to be thrown from
24205 arbitrary signal handlers such as @code{SIGALRM}.
24206
24207 @item -fdelete-dead-exceptions
24208 @opindex fdelete-dead-exceptions
24209 Consider that instructions that may throw exceptions but don't otherwise
24210 contribute to the execution of the program can be optimized away.
24211 This option is enabled by default for the Ada front end, as permitted by
24212 the Ada language specification.
24213 Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
24214
24215 @item -funwind-tables
24216 @opindex funwind-tables
24217 Similar to @option{-fexceptions}, except that it just generates any needed
24218 static data, but does not affect the generated code in any other way.
24219 You normally do not need to enable this option; instead, a language processor
24220 that needs this handling enables it on your behalf.
24221
24222 @item -fasynchronous-unwind-tables
24223 @opindex fasynchronous-unwind-tables
24224 Generate unwind table in DWARF 2 format, if supported by target machine.  The
24225 table is exact at each instruction boundary, so it can be used for stack
24226 unwinding from asynchronous events (such as debugger or garbage collector).
24227
24228 @item -fno-gnu-unique
24229 @opindex fno-gnu-unique
24230 On systems with recent GNU assembler and C library, the C++ compiler
24231 uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions
24232 of template static data members and static local variables in inline
24233 functions are unique even in the presence of @code{RTLD_LOCAL}; this
24234 is necessary to avoid problems with a library used by two different
24235 @code{RTLD_LOCAL} plugins depending on a definition in one of them and
24236 therefore disagreeing with the other one about the binding of the
24237 symbol.  But this causes @code{dlclose} to be ignored for affected
24238 DSOs; if your program relies on reinitialization of a DSO via
24239 @code{dlclose} and @code{dlopen}, you can use
24240 @option{-fno-gnu-unique}.
24241
24242 @item -fpcc-struct-return
24243 @opindex fpcc-struct-return
24244 Return ``short'' @code{struct} and @code{union} values in memory like
24245 longer ones, rather than in registers.  This convention is less
24246 efficient, but it has the advantage of allowing intercallability between
24247 GCC-compiled files and files compiled with other compilers, particularly
24248 the Portable C Compiler (pcc).
24249
24250 The precise convention for returning structures in memory depends
24251 on the target configuration macros.
24252
24253 Short structures and unions are those whose size and alignment match
24254 that of some integer type.
24255
24256 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
24257 switch is not binary compatible with code compiled with the
24258 @option{-freg-struct-return} switch.
24259 Use it to conform to a non-default application binary interface.
24260
24261 @item -freg-struct-return
24262 @opindex freg-struct-return
24263 Return @code{struct} and @code{union} values in registers when possible.
24264 This is more efficient for small structures than
24265 @option{-fpcc-struct-return}.
24266
24267 If you specify neither @option{-fpcc-struct-return} nor
24268 @option{-freg-struct-return}, GCC defaults to whichever convention is
24269 standard for the target.  If there is no standard convention, GCC
24270 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
24271 the principal compiler.  In those cases, we can choose the standard, and
24272 we chose the more efficient register return alternative.
24273
24274 @strong{Warning:} code compiled with the @option{-freg-struct-return}
24275 switch is not binary compatible with code compiled with the
24276 @option{-fpcc-struct-return} switch.
24277 Use it to conform to a non-default application binary interface.
24278
24279 @item -fshort-enums
24280 @opindex fshort-enums
24281 Allocate to an @code{enum} type only as many bytes as it needs for the
24282 declared range of possible values.  Specifically, the @code{enum} type
24283 is equivalent to the smallest integer type that has enough room.
24284
24285 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
24286 code that is not binary compatible with code generated without that switch.
24287 Use it to conform to a non-default application binary interface.
24288
24289 @item -fshort-double
24290 @opindex fshort-double
24291 Use the same size for @code{double} as for @code{float}.
24292
24293 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
24294 code that is not binary compatible with code generated without that switch.
24295 Use it to conform to a non-default application binary interface.
24296
24297 @item -fshort-wchar
24298 @opindex fshort-wchar
24299 Override the underlying type for @code{wchar_t} to be @code{short
24300 unsigned int} instead of the default for the target.  This option is
24301 useful for building programs to run under WINE@.
24302
24303 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
24304 code that is not binary compatible with code generated without that switch.
24305 Use it to conform to a non-default application binary interface.
24306
24307 @item -fno-common
24308 @opindex fno-common
24309 In C code, controls the placement of uninitialized global variables.
24310 Unix C compilers have traditionally permitted multiple definitions of
24311 such variables in different compilation units by placing the variables
24312 in a common block.
24313 This is the behavior specified by @option{-fcommon}, and is the default
24314 for GCC on most targets.
24315 On the other hand, this behavior is not required by ISO C, and on some
24316 targets may carry a speed or code size penalty on variable references.
24317 The @option{-fno-common} option specifies that the compiler should place
24318 uninitialized global variables in the data section of the object file,
24319 rather than generating them as common blocks.
24320 This has the effect that if the same variable is declared
24321 (without @code{extern}) in two different compilations,
24322 you get a multiple-definition error when you link them.
24323 In this case, you must compile with @option{-fcommon} instead.
24324 Compiling with @option{-fno-common} is useful on targets for which
24325 it provides better performance, or if you wish to verify that the
24326 program will work on other systems that always treat uninitialized
24327 variable declarations this way.
24328
24329 @item -fno-ident
24330 @opindex fno-ident
24331 Ignore the @code{#ident} directive.
24332
24333 @item -finhibit-size-directive
24334 @opindex finhibit-size-directive
24335 Don't output a @code{.size} assembler directive, or anything else that
24336 would cause trouble if the function is split in the middle, and the
24337 two halves are placed at locations far apart in memory.  This option is
24338 used when compiling @file{crtstuff.c}; you should not need to use it
24339 for anything else.
24340
24341 @item -fverbose-asm
24342 @opindex fverbose-asm
24343 Put extra commentary information in the generated assembly code to
24344 make it more readable.  This option is generally only of use to those
24345 who actually need to read the generated assembly code (perhaps while
24346 debugging the compiler itself).
24347
24348 @option{-fno-verbose-asm}, the default, causes the
24349 extra information to be omitted and is useful when comparing two assembler
24350 files.
24351
24352 @item -frecord-gcc-switches
24353 @opindex frecord-gcc-switches
24354 This switch causes the command line used to invoke the
24355 compiler to be recorded into the object file that is being created.
24356 This switch is only implemented on some targets and the exact format
24357 of the recording is target and binary file format dependent, but it
24358 usually takes the form of a section containing ASCII text.  This
24359 switch is related to the @option{-fverbose-asm} switch, but that
24360 switch only records information in the assembler output file as
24361 comments, so it never reaches the object file.
24362 See also @option{-grecord-gcc-switches} for another
24363 way of storing compiler options into the object file.
24364
24365 @item -fpic
24366 @opindex fpic
24367 @cindex global offset table
24368 @cindex PIC
24369 Generate position-independent code (PIC) suitable for use in a shared
24370 library, if supported for the target machine.  Such code accesses all
24371 constant addresses through a global offset table (GOT)@.  The dynamic
24372 loader resolves the GOT entries when the program starts (the dynamic
24373 loader is not part of GCC; it is part of the operating system).  If
24374 the GOT size for the linked executable exceeds a machine-specific
24375 maximum size, you get an error message from the linker indicating that
24376 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
24377 instead.  (These maximums are 8k on the SPARC, 28k on AArch64 and 32k
24378 on the m68k and RS/6000.  The x86 has no such limit.)
24379
24380 Position-independent code requires special support, and therefore works
24381 only on certain machines.  For the x86, GCC supports PIC for System V
24382 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
24383 position-independent.
24384
24385 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
24386 are defined to 1.
24387
24388 @item -fPIC
24389 @opindex fPIC
24390 If supported for the target machine, emit position-independent code,
24391 suitable for dynamic linking and avoiding any limit on the size of the
24392 global offset table.  This option makes a difference on AArch64, m68k,
24393 PowerPC and SPARC@.
24394
24395 Position-independent code requires special support, and therefore works
24396 only on certain machines.
24397
24398 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
24399 are defined to 2.
24400
24401 @item -fpie
24402 @itemx -fPIE
24403 @opindex fpie
24404 @opindex fPIE
24405 These options are similar to @option{-fpic} and @option{-fPIC}, but
24406 generated position independent code can be only linked into executables.
24407 Usually these options are used when @option{-pie} GCC option is
24408 used during linking.
24409
24410 @option{-fpie} and @option{-fPIE} both define the macros
24411 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
24412 for @option{-fpie} and 2 for @option{-fPIE}.
24413
24414 @item -fno-plt
24415 @opindex fno-plt
24416 Do not use PLT for external function calls in position-independent code.
24417 Instead, load callee address at call site from GOT and branch to it.
24418 This leads to more efficient code by eliminating PLT stubs and exposing
24419 GOT load to optimizations.  On architectures such as 32-bit x86 where
24420 PLT stubs expect GOT pointer in a specific register, this gives more
24421 register allocation freedom to the compiler.  Lazy binding requires PLT:
24422 with @option{-fno-plt} all external symbols are resolved at load time.
24423
24424 Alternatively, function attribute @code{noplt} can be used to avoid PLT
24425 for calls to specific external functions by marking those functions with
24426 this attribute.
24427
24428 Additionally, a few targets also convert calls to those functions that are
24429 marked to not use the PLT to use the GOT instead for non-position independent
24430 code.
24431
24432 @item -fno-jump-tables
24433 @opindex fno-jump-tables
24434 Do not use jump tables for switch statements even where it would be
24435 more efficient than other code generation strategies.  This option is
24436 of use in conjunction with @option{-fpic} or @option{-fPIC} for
24437 building code that forms part of a dynamic linker and cannot
24438 reference the address of a jump table.  On some targets, jump tables
24439 do not require a GOT and this option is not needed.
24440
24441 @item -ffixed-@var{reg}
24442 @opindex ffixed
24443 Treat the register named @var{reg} as a fixed register; generated code
24444 should never refer to it (except perhaps as a stack pointer, frame
24445 pointer or in some other fixed role).
24446
24447 @var{reg} must be the name of a register.  The register names accepted
24448 are machine-specific and are defined in the @code{REGISTER_NAMES}
24449 macro in the machine description macro file.
24450
24451 This flag does not have a negative form, because it specifies a
24452 three-way choice.
24453
24454 @item -fcall-used-@var{reg}
24455 @opindex fcall-used
24456 Treat the register named @var{reg} as an allocable register that is
24457 clobbered by function calls.  It may be allocated for temporaries or
24458 variables that do not live across a call.  Functions compiled this way
24459 do not save and restore the register @var{reg}.
24460
24461 It is an error to use this flag with the frame pointer or stack pointer.
24462 Use of this flag for other registers that have fixed pervasive roles in
24463 the machine's execution model produces disastrous results.
24464
24465 This flag does not have a negative form, because it specifies a
24466 three-way choice.
24467
24468 @item -fcall-saved-@var{reg}
24469 @opindex fcall-saved
24470 Treat the register named @var{reg} as an allocable register saved by
24471 functions.  It may be allocated even for temporaries or variables that
24472 live across a call.  Functions compiled this way save and restore
24473 the register @var{reg} if they use it.
24474
24475 It is an error to use this flag with the frame pointer or stack pointer.
24476 Use of this flag for other registers that have fixed pervasive roles in
24477 the machine's execution model produces disastrous results.
24478
24479 A different sort of disaster results from the use of this flag for
24480 a register in which function values may be returned.
24481
24482 This flag does not have a negative form, because it specifies a
24483 three-way choice.
24484
24485 @item -fpack-struct[=@var{n}]
24486 @opindex fpack-struct
24487 Without a value specified, pack all structure members together without
24488 holes.  When a value is specified (which must be a small power of two), pack
24489 structure members according to this value, representing the maximum
24490 alignment (that is, objects with default alignment requirements larger than
24491 this are output potentially unaligned at the next fitting location.
24492
24493 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
24494 code that is not binary compatible with code generated without that switch.
24495 Additionally, it makes the code suboptimal.
24496 Use it to conform to a non-default application binary interface.
24497
24498 @item -finstrument-functions
24499 @opindex finstrument-functions
24500 Generate instrumentation calls for entry and exit to functions.  Just
24501 after function entry and just before function exit, the following
24502 profiling functions are called with the address of the current
24503 function and its call site.  (On some platforms,
24504 @code{__builtin_return_address} does not work beyond the current
24505 function, so the call site information may not be available to the
24506 profiling functions otherwise.)
24507
24508 @smallexample
24509 void __cyg_profile_func_enter (void *this_fn,
24510                                void *call_site);
24511 void __cyg_profile_func_exit  (void *this_fn,
24512                                void *call_site);
24513 @end smallexample
24514
24515 The first argument is the address of the start of the current function,
24516 which may be looked up exactly in the symbol table.
24517
24518 This instrumentation is also done for functions expanded inline in other
24519 functions.  The profiling calls indicate where, conceptually, the
24520 inline function is entered and exited.  This means that addressable
24521 versions of such functions must be available.  If all your uses of a
24522 function are expanded inline, this may mean an additional expansion of
24523 code size.  If you use @code{extern inline} in your C code, an
24524 addressable version of such functions must be provided.  (This is
24525 normally the case anyway, but if you get lucky and the optimizer always
24526 expands the functions inline, you might have gotten away without
24527 providing static copies.)
24528
24529 A function may be given the attribute @code{no_instrument_function}, in
24530 which case this instrumentation is not done.  This can be used, for
24531 example, for the profiling functions listed above, high-priority
24532 interrupt routines, and any functions from which the profiling functions
24533 cannot safely be called (perhaps signal handlers, if the profiling
24534 routines generate output or allocate memory).
24535
24536 @item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
24537 @opindex finstrument-functions-exclude-file-list
24538
24539 Set the list of functions that are excluded from instrumentation (see
24540 the description of @option{-finstrument-functions}).  If the file that
24541 contains a function definition matches with one of @var{file}, then
24542 that function is not instrumented.  The match is done on substrings:
24543 if the @var{file} parameter is a substring of the file name, it is
24544 considered to be a match.
24545
24546 For example:
24547
24548 @smallexample
24549 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
24550 @end smallexample
24551
24552 @noindent
24553 excludes any inline function defined in files whose pathnames
24554 contain @file{/bits/stl} or @file{include/sys}.
24555
24556 If, for some reason, you want to include letter @samp{,} in one of
24557 @var{sym}, write @samp{\,}. For example,
24558 @option{-finstrument-functions-exclude-file-list='\,\,tmp'}
24559 (note the single quote surrounding the option).
24560
24561 @item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
24562 @opindex finstrument-functions-exclude-function-list
24563
24564 This is similar to @option{-finstrument-functions-exclude-file-list},
24565 but this option sets the list of function names to be excluded from
24566 instrumentation.  The function name to be matched is its user-visible
24567 name, such as @code{vector<int> blah(const vector<int> &)}, not the
24568 internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
24569 match is done on substrings: if the @var{sym} parameter is a substring
24570 of the function name, it is considered to be a match.  For C99 and C++
24571 extended identifiers, the function name must be given in UTF-8, not
24572 using universal character names.
24573
24574 @item -fstack-check
24575 @opindex fstack-check
24576 Generate code to verify that you do not go beyond the boundary of the
24577 stack.  You should specify this flag if you are running in an
24578 environment with multiple threads, but you only rarely need to specify it in
24579 a single-threaded environment since stack overflow is automatically
24580 detected on nearly all systems if there is only one stack.
24581
24582 Note that this switch does not actually cause checking to be done; the
24583 operating system or the language runtime must do that.  The switch causes
24584 generation of code to ensure that they see the stack being extended.
24585
24586 You can additionally specify a string parameter: @samp{no} means no
24587 checking, @samp{generic} means force the use of old-style checking,
24588 @samp{specific} means use the best checking method and is equivalent
24589 to bare @option{-fstack-check}.
24590
24591 Old-style checking is a generic mechanism that requires no specific
24592 target support in the compiler but comes with the following drawbacks:
24593
24594 @enumerate
24595 @item
24596 Modified allocation strategy for large objects: they are always
24597 allocated dynamically if their size exceeds a fixed threshold.
24598
24599 @item
24600 Fixed limit on the size of the static frame of functions: when it is
24601 topped by a particular function, stack checking is not reliable and
24602 a warning is issued by the compiler.
24603
24604 @item
24605 Inefficiency: because of both the modified allocation strategy and the
24606 generic implementation, code performance is hampered.
24607 @end enumerate
24608
24609 Note that old-style stack checking is also the fallback method for
24610 @samp{specific} if no target support has been added in the compiler.
24611
24612 @item -fstack-limit-register=@var{reg}
24613 @itemx -fstack-limit-symbol=@var{sym}
24614 @itemx -fno-stack-limit
24615 @opindex fstack-limit-register
24616 @opindex fstack-limit-symbol
24617 @opindex fno-stack-limit
24618 Generate code to ensure that the stack does not grow beyond a certain value,
24619 either the value of a register or the address of a symbol.  If a larger
24620 stack is required, a signal is raised at run time.  For most targets,
24621 the signal is raised before the stack overruns the boundary, so
24622 it is possible to catch the signal without taking special precautions.
24623
24624 For instance, if the stack starts at absolute address @samp{0x80000000}
24625 and grows downwards, you can use the flags
24626 @option{-fstack-limit-symbol=__stack_limit} and
24627 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
24628 of 128KB@.  Note that this may only work with the GNU linker.
24629
24630 @item -fsplit-stack
24631 @opindex fsplit-stack
24632 Generate code to automatically split the stack before it overflows.
24633 The resulting program has a discontiguous stack which can only
24634 overflow if the program is unable to allocate any more memory.  This
24635 is most useful when running threaded programs, as it is no longer
24636 necessary to calculate a good stack size to use for each thread.  This
24637 is currently only implemented for the x86 targets running
24638 GNU/Linux.
24639
24640 When code compiled with @option{-fsplit-stack} calls code compiled
24641 without @option{-fsplit-stack}, there may not be much stack space
24642 available for the latter code to run.  If compiling all code,
24643 including library code, with @option{-fsplit-stack} is not an option,
24644 then the linker can fix up these calls so that the code compiled
24645 without @option{-fsplit-stack} always has a large stack.  Support for
24646 this is implemented in the gold linker in GNU binutils release 2.21
24647 and later.
24648
24649 @item -fleading-underscore
24650 @opindex fleading-underscore
24651 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
24652 change the way C symbols are represented in the object file.  One use
24653 is to help link with legacy assembly code.
24654
24655 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
24656 generate code that is not binary compatible with code generated without that
24657 switch.  Use it to conform to a non-default application binary interface.
24658 Not all targets provide complete support for this switch.
24659
24660 @item -ftls-model=@var{model}
24661 @opindex ftls-model
24662 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
24663 The @var{model} argument should be one of @samp{global-dynamic},
24664 @samp{local-dynamic}, @samp{initial-exec} or @samp{local-exec}.
24665 Note that the choice is subject to optimization: the compiler may use
24666 a more efficient model for symbols not visible outside of the translation
24667 unit, or if @option{-fpic} is not given on the command line.
24668
24669 The default without @option{-fpic} is @samp{initial-exec}; with
24670 @option{-fpic} the default is @samp{global-dynamic}.
24671
24672 @item -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]}
24673 @opindex fvisibility
24674 Set the default ELF image symbol visibility to the specified option---all
24675 symbols are marked with this unless overridden within the code.
24676 Using this feature can very substantially improve linking and
24677 load times of shared object libraries, produce more optimized
24678 code, provide near-perfect API export and prevent symbol clashes.
24679 It is @strong{strongly} recommended that you use this in any shared objects
24680 you distribute.
24681
24682 Despite the nomenclature, @samp{default} always means public; i.e.,
24683 available to be linked against from outside the shared object.
24684 @samp{protected} and @samp{internal} are pretty useless in real-world
24685 usage so the only other commonly used option is @samp{hidden}.
24686 The default if @option{-fvisibility} isn't specified is
24687 @samp{default}, i.e., make every symbol public.
24688
24689 A good explanation of the benefits offered by ensuring ELF
24690 symbols have the correct visibility is given by ``How To Write
24691 Shared Libraries'' by Ulrich Drepper (which can be found at
24692 @w{@uref{http://www.akkadia.org/drepper/}})---however a superior
24693 solution made possible by this option to marking things hidden when
24694 the default is public is to make the default hidden and mark things
24695 public.  This is the norm with DLLs on Windows and with @option{-fvisibility=hidden}
24696 and @code{__attribute__ ((visibility("default")))} instead of
24697 @code{__declspec(dllexport)} you get almost identical semantics with
24698 identical syntax.  This is a great boon to those working with
24699 cross-platform projects.
24700
24701 For those adding visibility support to existing code, you may find
24702 @code{#pragma GCC visibility} of use.  This works by you enclosing
24703 the declarations you wish to set visibility for with (for example)
24704 @code{#pragma GCC visibility push(hidden)} and
24705 @code{#pragma GCC visibility pop}.
24706 Bear in mind that symbol visibility should be viewed @strong{as
24707 part of the API interface contract} and thus all new code should
24708 always specify visibility when it is not the default; i.e., declarations
24709 only for use within the local DSO should @strong{always} be marked explicitly
24710 as hidden as so to avoid PLT indirection overheads---making this
24711 abundantly clear also aids readability and self-documentation of the code.
24712 Note that due to ISO C++ specification requirements, @code{operator new} and
24713 @code{operator delete} must always be of default visibility.
24714
24715 Be aware that headers from outside your project, in particular system
24716 headers and headers from any other library you use, may not be
24717 expecting to be compiled with visibility other than the default.  You
24718 may need to explicitly say @code{#pragma GCC visibility push(default)}
24719 before including any such headers.
24720
24721 @code{extern} declarations are not affected by @option{-fvisibility}, so
24722 a lot of code can be recompiled with @option{-fvisibility=hidden} with
24723 no modifications.  However, this means that calls to @code{extern}
24724 functions with no explicit visibility use the PLT, so it is more
24725 effective to use @code{__attribute ((visibility))} and/or
24726 @code{#pragma GCC visibility} to tell the compiler which @code{extern}
24727 declarations should be treated as hidden.
24728
24729 Note that @option{-fvisibility} does affect C++ vague linkage
24730 entities. This means that, for instance, an exception class that is
24731 be thrown between DSOs must be explicitly marked with default
24732 visibility so that the @samp{type_info} nodes are unified between
24733 the DSOs.
24734
24735 An overview of these techniques, their benefits and how to use them
24736 is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.
24737
24738 @item -fstrict-volatile-bitfields
24739 @opindex fstrict-volatile-bitfields
24740 This option should be used if accesses to volatile bit-fields (or other
24741 structure fields, although the compiler usually honors those types
24742 anyway) should use a single access of the width of the
24743 field's type, aligned to a natural alignment if possible.  For
24744 example, targets with memory-mapped peripheral registers might require
24745 all such accesses to be 16 bits wide; with this flag you can
24746 declare all peripheral bit-fields as @code{unsigned short} (assuming short
24747 is 16 bits on these targets) to force GCC to use 16-bit accesses
24748 instead of, perhaps, a more efficient 32-bit access.
24749
24750 If this option is disabled, the compiler uses the most efficient
24751 instruction.  In the previous example, that might be a 32-bit load
24752 instruction, even though that accesses bytes that do not contain
24753 any portion of the bit-field, or memory-mapped registers unrelated to
24754 the one being updated.
24755
24756 In some cases, such as when the @code{packed} attribute is applied to a 
24757 structure field, it may not be possible to access the field with a single
24758 read or write that is correctly aligned for the target machine.  In this
24759 case GCC falls back to generating multiple accesses rather than code that 
24760 will fault or truncate the result at run time.
24761
24762 Note:  Due to restrictions of the C/C++11 memory model, write accesses are
24763 not allowed to touch non bit-field members.  It is therefore recommended
24764 to define all bits of the field's type as bit-field members.
24765
24766 The default value of this option is determined by the application binary
24767 interface for the target processor.
24768
24769 @item -fsync-libcalls
24770 @opindex fsync-libcalls
24771 This option controls whether any out-of-line instance of the @code{__sync}
24772 family of functions may be used to implement the C++11 @code{__atomic}
24773 family of functions.
24774
24775 The default value of this option is enabled, thus the only useful form
24776 of the option is @option{-fno-sync-libcalls}.  This option is used in
24777 the implementation of the @file{libatomic} runtime library.
24778
24779 @end table
24780
24781 @c man end
24782
24783 @node Environment Variables
24784 @section Environment Variables Affecting GCC
24785 @cindex environment variables
24786
24787 @c man begin ENVIRONMENT
24788 This section describes several environment variables that affect how GCC
24789 operates.  Some of them work by specifying directories or prefixes to use
24790 when searching for various kinds of files.  Some are used to specify other
24791 aspects of the compilation environment.
24792
24793 Note that you can also specify places to search using options such as
24794 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
24795 take precedence over places specified using environment variables, which
24796 in turn take precedence over those specified by the configuration of GCC@.
24797 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
24798 GNU Compiler Collection (GCC) Internals}.
24799
24800 @table @env
24801 @item LANG
24802 @itemx LC_CTYPE
24803 @c @itemx LC_COLLATE
24804 @itemx LC_MESSAGES
24805 @c @itemx LC_MONETARY
24806 @c @itemx LC_NUMERIC
24807 @c @itemx LC_TIME
24808 @itemx LC_ALL
24809 @findex LANG
24810 @findex LC_CTYPE
24811 @c @findex LC_COLLATE
24812 @findex LC_MESSAGES
24813 @c @findex LC_MONETARY
24814 @c @findex LC_NUMERIC
24815 @c @findex LC_TIME
24816 @findex LC_ALL
24817 @cindex locale
24818 These environment variables control the way that GCC uses
24819 localization information which allows GCC to work with different
24820 national conventions.  GCC inspects the locale categories
24821 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
24822 so.  These locale categories can be set to any value supported by your
24823 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
24824 Kingdom encoded in UTF-8.
24825
24826 The @env{LC_CTYPE} environment variable specifies character
24827 classification.  GCC uses it to determine the character boundaries in
24828 a string; this is needed for some multibyte encodings that contain quote
24829 and escape characters that are otherwise interpreted as a string
24830 end or escape.
24831
24832 The @env{LC_MESSAGES} environment variable specifies the language to
24833 use in diagnostic messages.
24834
24835 If the @env{LC_ALL} environment variable is set, it overrides the value
24836 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
24837 and @env{LC_MESSAGES} default to the value of the @env{LANG}
24838 environment variable.  If none of these variables are set, GCC
24839 defaults to traditional C English behavior.
24840
24841 @item TMPDIR
24842 @findex TMPDIR
24843 If @env{TMPDIR} is set, it specifies the directory to use for temporary
24844 files.  GCC uses temporary files to hold the output of one stage of
24845 compilation which is to be used as input to the next stage: for example,
24846 the output of the preprocessor, which is the input to the compiler
24847 proper.
24848
24849 @item GCC_COMPARE_DEBUG
24850 @findex GCC_COMPARE_DEBUG
24851 Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
24852 @option{-fcompare-debug} to the compiler driver.  See the documentation
24853 of this option for more details.
24854
24855 @item GCC_EXEC_PREFIX
24856 @findex GCC_EXEC_PREFIX
24857 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
24858 names of the subprograms executed by the compiler.  No slash is added
24859 when this prefix is combined with the name of a subprogram, but you can
24860 specify a prefix that ends with a slash if you wish.
24861
24862 If @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
24863 an appropriate prefix to use based on the pathname it is invoked with.
24864
24865 If GCC cannot find the subprogram using the specified prefix, it
24866 tries looking in the usual places for the subprogram.
24867
24868 The default value of @env{GCC_EXEC_PREFIX} is
24869 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
24870 the installed compiler. In many cases @var{prefix} is the value
24871 of @code{prefix} when you ran the @file{configure} script.
24872
24873 Other prefixes specified with @option{-B} take precedence over this prefix.
24874
24875 This prefix is also used for finding files such as @file{crt0.o} that are
24876 used for linking.
24877
24878 In addition, the prefix is used in an unusual way in finding the
24879 directories to search for header files.  For each of the standard
24880 directories whose name normally begins with @samp{/usr/local/lib/gcc}
24881 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
24882 replacing that beginning with the specified prefix to produce an
24883 alternate directory name.  Thus, with @option{-Bfoo/}, GCC searches
24884 @file{foo/bar} just before it searches the standard directory 
24885 @file{/usr/local/lib/bar}.
24886 If a standard directory begins with the configured
24887 @var{prefix} then the value of @var{prefix} is replaced by
24888 @env{GCC_EXEC_PREFIX} when looking for header files.
24889
24890 @item COMPILER_PATH
24891 @findex COMPILER_PATH
24892 The value of @env{COMPILER_PATH} is a colon-separated list of
24893 directories, much like @env{PATH}.  GCC tries the directories thus
24894 specified when searching for subprograms, if it can't find the
24895 subprograms using @env{GCC_EXEC_PREFIX}.
24896
24897 @item LIBRARY_PATH
24898 @findex LIBRARY_PATH
24899 The value of @env{LIBRARY_PATH} is a colon-separated list of
24900 directories, much like @env{PATH}.  When configured as a native compiler,
24901 GCC tries the directories thus specified when searching for special
24902 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
24903 using GCC also uses these directories when searching for ordinary
24904 libraries for the @option{-l} option (but directories specified with
24905 @option{-L} come first).
24906
24907 @item LANG
24908 @findex LANG
24909 @cindex locale definition
24910 This variable is used to pass locale information to the compiler.  One way in
24911 which this information is used is to determine the character set to be used
24912 when character literals, string literals and comments are parsed in C and C++.
24913 When the compiler is configured to allow multibyte characters,
24914 the following values for @env{LANG} are recognized:
24915
24916 @table @samp
24917 @item C-JIS
24918 Recognize JIS characters.
24919 @item C-SJIS
24920 Recognize SJIS characters.
24921 @item C-EUCJP
24922 Recognize EUCJP characters.
24923 @end table
24924
24925 If @env{LANG} is not defined, or if it has some other value, then the
24926 compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
24927 recognize and translate multibyte characters.
24928 @end table
24929
24930 @noindent
24931 Some additional environment variables affect the behavior of the
24932 preprocessor.
24933
24934 @include cppenv.texi
24935
24936 @c man end
24937
24938 @node Precompiled Headers
24939 @section Using Precompiled Headers
24940 @cindex precompiled headers
24941 @cindex speed of compilation
24942
24943 Often large projects have many header files that are included in every
24944 source file.  The time the compiler takes to process these header files
24945 over and over again can account for nearly all of the time required to
24946 build the project.  To make builds faster, GCC allows you to
24947 @dfn{precompile} a header file.
24948
24949 To create a precompiled header file, simply compile it as you would any
24950 other file, if necessary using the @option{-x} option to make the driver
24951 treat it as a C or C++ header file.  You may want to use a
24952 tool like @command{make} to keep the precompiled header up-to-date when
24953 the headers it contains change.
24954
24955 A precompiled header file is searched for when @code{#include} is
24956 seen in the compilation.  As it searches for the included file
24957 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
24958 compiler looks for a precompiled header in each directory just before it
24959 looks for the include file in that directory.  The name searched for is
24960 the name specified in the @code{#include} with @samp{.gch} appended.  If
24961 the precompiled header file can't be used, it is ignored.
24962
24963 For instance, if you have @code{#include "all.h"}, and you have
24964 @file{all.h.gch} in the same directory as @file{all.h}, then the
24965 precompiled header file is used if possible, and the original
24966 header is used otherwise.
24967
24968 Alternatively, you might decide to put the precompiled header file in a
24969 directory and use @option{-I} to ensure that directory is searched
24970 before (or instead of) the directory containing the original header.
24971 Then, if you want to check that the precompiled header file is always
24972 used, you can put a file of the same name as the original header in this
24973 directory containing an @code{#error} command.
24974
24975 This also works with @option{-include}.  So yet another way to use
24976 precompiled headers, good for projects not designed with precompiled
24977 header files in mind, is to simply take most of the header files used by
24978 a project, include them from another header file, precompile that header
24979 file, and @option{-include} the precompiled header.  If the header files
24980 have guards against multiple inclusion, they are skipped because
24981 they've already been included (in the precompiled header).
24982
24983 If you need to precompile the same header file for different
24984 languages, targets, or compiler options, you can instead make a
24985 @emph{directory} named like @file{all.h.gch}, and put each precompiled
24986 header in the directory, perhaps using @option{-o}.  It doesn't matter
24987 what you call the files in the directory; every precompiled header in
24988 the directory is considered.  The first precompiled header
24989 encountered in the directory that is valid for this compilation is
24990 used; they're searched in no particular order.
24991
24992 There are many other possibilities, limited only by your imagination,
24993 good sense, and the constraints of your build system.
24994
24995 A precompiled header file can be used only when these conditions apply:
24996
24997 @itemize
24998 @item
24999 Only one precompiled header can be used in a particular compilation.
25000
25001 @item
25002 A precompiled header can't be used once the first C token is seen.  You
25003 can have preprocessor directives before a precompiled header; you cannot
25004 include a precompiled header from inside another header.
25005
25006 @item
25007 The precompiled header file must be produced for the same language as
25008 the current compilation.  You can't use a C precompiled header for a C++
25009 compilation.
25010
25011 @item
25012 The precompiled header file must have been produced by the same compiler
25013 binary as the current compilation is using.
25014
25015 @item
25016 Any macros defined before the precompiled header is included must
25017 either be defined in the same way as when the precompiled header was
25018 generated, or must not affect the precompiled header, which usually
25019 means that they don't appear in the precompiled header at all.
25020
25021 The @option{-D} option is one way to define a macro before a
25022 precompiled header is included; using a @code{#define} can also do it.
25023 There are also some options that define macros implicitly, like
25024 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
25025 defined this way.
25026
25027 @item If debugging information is output when using the precompiled
25028 header, using @option{-g} or similar, the same kind of debugging information
25029 must have been output when building the precompiled header.  However,
25030 a precompiled header built using @option{-g} can be used in a compilation
25031 when no debugging information is being output.
25032
25033 @item The same @option{-m} options must generally be used when building
25034 and using the precompiled header.  @xref{Submodel Options},
25035 for any cases where this rule is relaxed.
25036
25037 @item Each of the following options must be the same when building and using
25038 the precompiled header:
25039
25040 @gccoptlist{-fexceptions}
25041
25042 @item
25043 Some other command-line options starting with @option{-f},
25044 @option{-p}, or @option{-O} must be defined in the same way as when
25045 the precompiled header was generated.  At present, it's not clear
25046 which options are safe to change and which are not; the safest choice
25047 is to use exactly the same options when generating and using the
25048 precompiled header.  The following are known to be safe:
25049
25050 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
25051 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
25052 -fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
25053 -pedantic-errors}
25054
25055 @end itemize
25056
25057 For all of these except the last, the compiler automatically
25058 ignores the precompiled header if the conditions aren't met.  If you
25059 find an option combination that doesn't work and doesn't cause the
25060 precompiled header to be ignored, please consider filing a bug report,
25061 see @ref{Bugs}.
25062
25063 If you do use differing options when generating and using the
25064 precompiled header, the actual behavior is a mixture of the
25065 behavior for the options.  For instance, if you use @option{-g} to
25066 generate the precompiled header but not when using it, you may or may
25067 not get debugging information for routines in the precompiled header.