1@c Copyright (C) 1988-2014 Free Software Foundation, Inc.
2@c This is part of the GCC manual.
3@c For copying conditions, see the file gcc.texi.
4
5@ignore
6@c man begin INCLUDE
7@include gcc-vers.texi
8@c man end
9
10@c man begin COPYRIGHT
11Copyright @copyright{} 1988-2014 Free Software Foundation, Inc.
12
13Permission is granted to copy, distribute and/or modify this document
14under the terms of the GNU Free Documentation License, Version 1.3 or
15any later version published by the Free Software Foundation; with the
16Invariant Sections being ``GNU General Public License'' and ``Funding
17Free Software'', the Front-Cover texts being (a) (see below), and with
18the Back-Cover Texts being (b) (see below).  A copy of the license is
19included 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
35gcc [@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
43Only the most useful options are listed here; see below for the
44remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
45@c man end
46@c man begin SEEALSO
47gpl(7), gfdl(7), fsf-funding(7),
48cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
49and 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
53For instructions on reporting bugs, see
54@w{@value{BUGURL}}.
55@c man end
56@c man begin AUTHOR
57See the Info entry for @command{gcc}, or
58@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
59for 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
70When you invoke GCC, it normally does preprocessing, compilation,
71assembly and linking.  The ``overall options'' allow you to stop this
72process at an intermediate stage.  For example, the @option{-c} option
73says not to run the linker.  Then the output consists of object files
74output by the assembler.
75
76Other options are passed on to one stage of processing.  Some options
77control the preprocessor and others the compiler itself.  Yet other
78options control the assembler and linker; most of these are not
79documented here, since you rarely need to use any of them.
80
81@cindex C compilation options
82Most of the command-line options that you can use with GCC are useful
83for C programs; when an option is only useful with another language
84(usually C++), the explanation says so explicitly.  If the description
85for a particular option does not mention a source language, you can use
86that option with all supported languages.
87
88@cindex C++ compilation options
89@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
90options for compiling C++ programs.
91
92@cindex grouping options
93@cindex options, grouping
94The @command{gcc} program accepts options and file names as operands.  Many
95options have multi-letter names; therefore multiple single-letter options
96may @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
101You can mix options and other arguments.  For the most part, the order
102you use doesn't matter.  Order does matter when you use several
103options of the same kind; for example, if you specify @option{-L} more
104than once, the directories are searched in the order specified.  Also,
105the placement of the @option{-l} option is significant.
106
107Many 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
110these have both positive and negative forms; the negative form of
111@option{-ffoo} is @option{-fno-foo}.  This manual documents
112only 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* Language Independent Options:: Controlling how diagnostics should be
129                        formatted.
130* Warning Options::     How picky should the compiler be?
131* Debugging Options::   Symbol tables, measurements, and debugging dumps.
132* Optimize Options::    How much optimization?
133* Preprocessor Options:: Controlling header files and macro definitions.
134                         Also, getting dependency information for Make.
135* Assembler Options::   Passing options to the assembler.
136* Link Options::        Specifying libraries and so on.
137* Directory Options::   Where to find header files and libraries.
138                        Where to find the compiler executable files.
139* Spec Files::          How to pass switches to sub-processes.
140* Target Options::      Running a cross-compiler, or an old version of GCC.
141* Submodel Options::    Specifying minor hardware or convention variations,
142                        such as 68010 vs 68020.
143* Code Gen Options::    Specifying conventions for function calls, data layout
144                        and register usage.
145* Environment Variables:: Env vars that affect GCC.
146* Precompiled Headers:: Compiling a header once, and using it many times.
147@end menu
148
149@c man begin OPTIONS
150
151@node Option Summary
152@section Option Summary
153
154Here is a summary of all the options, grouped by type.  Explanations are
155in 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 -fopenmp -fopenmp-simd -fms-extensions @gol
172-fplan9-extensions -trigraphs  -traditional  -traditional-cpp @gol
173-fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
174-fsigned-bitfields  -fsigned-char @gol
175-funsigned-bitfields  -funsigned-char}
176
177@item C++ Language Options
178@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
179@gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
180-fconstexpr-depth=@var{n}  -ffriend-injection @gol
181-fno-elide-constructors @gol
182-fno-enforce-eh-specs @gol
183-ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
184-fno-implicit-templates @gol
185-fno-implicit-inline-templates @gol
186-fno-implement-inlines  -fms-extensions @gol
187-fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
188-fno-optional-diags  -fpermissive @gol
189-fno-pretty-templates @gol
190-frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=@var{n} @gol
191-ftemplate-depth=@var{n} @gol
192-fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
193-fvisibility-inlines-hidden @gol
194-fvtable-verify=@var{std|preinit|none} @gol
195-fvtv-counts -fvtv-debug @gol
196-fvisibility-ms-compat @gol
197-fext-numeric-literals @gol
198-Wabi  -Wconversion-null  -Wctor-dtor-privacy @gol
199-Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing @gol
200-Wnoexcept -Wnon-virtual-dtor  -Wreorder @gol
201-Weffc++  -Wstrict-null-sentinel @gol
202-Wno-non-template-friend  -Wold-style-cast @gol
203-Woverloaded-virtual  -Wno-pmf-conversions @gol
204-Wsign-promo}
205
206@item Objective-C and Objective-C++ Language Options
207@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
208Objective-C and Objective-C++ Dialects}.
209@gccoptlist{-fconstant-string-class=@var{class-name} @gol
210-fgnu-runtime  -fnext-runtime @gol
211-fno-nil-receivers @gol
212-fobjc-abi-version=@var{n} @gol
213-fobjc-call-cxx-cdtors @gol
214-fobjc-direct-dispatch @gol
215-fobjc-exceptions @gol
216-fobjc-gc @gol
217-fobjc-nilcheck @gol
218-fobjc-std=objc1 @gol
219-freplace-objc-classes @gol
220-fzero-link @gol
221-gen-decls @gol
222-Wassign-intercept @gol
223-Wno-protocol  -Wselector @gol
224-Wstrict-selector-match @gol
225-Wundeclared-selector}
226
227@item Language Independent Options
228@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
229@gccoptlist{-fmessage-length=@var{n}  @gol
230-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
231-fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
232-fno-diagnostics-show-option -fno-diagnostics-show-caret}
233
234@item Warning Options
235@xref{Warning Options,,Options to Request or Suppress Warnings}.
236@gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
237-pedantic-errors @gol
238-w  -Wextra  -Wall  -Waddress  -Waggregate-return  @gol
239-Waggressive-loop-optimizations -Warray-bounds @gol
240-Wno-attributes -Wno-builtin-macro-redefined @gol
241-Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual  @gol
242-Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported  @gol
243-Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp  @gol
244-Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization  @gol
245-Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare @gol
246-Wno-endif-labels -Werror  -Werror=* @gol
247-Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
248-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
249-Wformat-security  -Wformat-y2k @gol
250-Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
251-Wignored-qualifiers @gol
252-Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
253-Winit-self  -Winline -Wmaybe-uninitialized @gol
254-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
255-Winvalid-pch -Wlarger-than=@var{len}  -Wunsafe-loop-optimizations @gol
256-Wlogical-op -Wlong-long @gol
257-Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers @gol
258-Wmissing-include-dirs @gol
259-Wno-multichar  -Wnonnull  -Wno-overflow -Wopenmp-simd @gol
260-Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
261-Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
262-Wpointer-arith  -Wno-pointer-to-int-cast @gol
263-Wredundant-decls  -Wno-return-local-addr @gol
264-Wreturn-type  -Wsequence-point  -Wshadow @gol
265-Wsign-compare  -Wsign-conversion -Wfloat-conversion @gol
266-Wsizeof-pointer-memaccess @gol
267-Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol
268-Wstrict-aliasing=n @gol -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
269-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
270-Wmissing-format-attribute @gol
271-Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand @gol
272-Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef @gol
273-Wuninitialized  -Wunknown-pragmas  -Wno-pragmas @gol
274-Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
275-Wunused-label  -Wunused-local-typedefs -Wunused-parameter @gol
276-Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
277-Wunused-but-set-parameter -Wunused-but-set-variable @gol
278-Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
279-Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant}
280
281@item C and Objective-C-only Warning Options
282@gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
283-Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
284-Wold-style-declaration  -Wold-style-definition @gol
285-Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
286-Wdeclaration-after-statement -Wpointer-sign}
287
288@item Debugging Options
289@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
290@gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
291-fsanitize=@var{style} @gol
292-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
293-fdisable-ipa-@var{pass_name} @gol
294-fdisable-rtl-@var{pass_name} @gol
295-fdisable-rtl-@var{pass-name}=@var{range-list} @gol
296-fdisable-tree-@var{pass_name} @gol
297-fdisable-tree-@var{pass-name}=@var{range-list} @gol
298-fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol
299-fdump-translation-unit@r{[}-@var{n}@r{]} @gol
300-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
301-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
302-fdump-passes @gol
303-fdump-statistics @gol
304-fdump-tree-all @gol
305-fdump-tree-original@r{[}-@var{n}@r{]}  @gol
306-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
307-fdump-tree-cfg -fdump-tree-alias @gol
308-fdump-tree-ch @gol
309-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
310-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
311-fdump-tree-gimple@r{[}-raw@r{]} @gol
312-fdump-tree-dom@r{[}-@var{n}@r{]} @gol
313-fdump-tree-dse@r{[}-@var{n}@r{]} @gol
314-fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol
315-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
316-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
317-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
318-fdump-tree-nrv -fdump-tree-vect @gol
319-fdump-tree-sink @gol
320-fdump-tree-sra@r{[}-@var{n}@r{]} @gol
321-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
322-fdump-tree-fre@r{[}-@var{n}@r{]} @gol
323-fdump-tree-vtable-verify @gol
324-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
325-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
326-fdump-final-insns=@var{file} @gol
327-fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
328-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types @gol
329-feliminate-unused-debug-symbols -femit-class-debug-always @gol
330-fenable-@var{kind}-@var{pass} @gol
331-fenable-@var{kind}-@var{pass}=@var{range-list} @gol
332-fdebug-types-section -fmem-report-wpa @gol
333-fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
334-fopt-info @gol
335-fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol
336-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
337-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
338-fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking @gol
339-fvar-tracking-assignments  -fvar-tracking-assignments-toggle @gol
340-g  -g@var{level}  -gtoggle  -gcoff  -gdwarf-@var{version} @gol
341-ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
342-gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
343-gvms  -gxcoff  -gxcoff+ @gol
344-fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
345-fdebug-prefix-map=@var{old}=@var{new} @gol
346-femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
347-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
348-p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
349-print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
350-print-prog-name=@var{program}  -print-search-dirs  -Q @gol
351-print-sysroot -print-sysroot-headers-suffix @gol
352-save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}}
353
354@item Optimization Options
355@xref{Optimize Options,,Options that Control Optimization}.
356@gccoptlist{-faggressive-loop-optimizations -falign-functions[=@var{n}] @gol
357-falign-jumps[=@var{n}] @gol
358-falign-labels[=@var{n}] -falign-loops[=@var{n}] @gol
359-fassociative-math -fauto-inc-dec -fbranch-probabilities @gol
360-fbranch-target-load-optimize -fbranch-target-load-optimize2 @gol
361-fbtr-bb-exclusive -fcaller-saves @gol
362-fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol
363-fcompare-elim -fcprop-registers -fcrossjumping @gol
364-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
365-fcx-limited-range @gol
366-fdata-sections -fdce -fdelayed-branch @gol
367-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively -fdse @gol
368-fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol
369-ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
370-fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
371-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol
372-fgcse-sm -fhoist-adjacent-loads -fif-conversion @gol
373-fif-conversion2 -findirect-inlining @gol
374-finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
375-finline-small-functions -fipa-cp -fipa-cp-clone @gol
376-fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol
377-fira-algorithm=@var{algorithm} @gol
378-fira-region=@var{region} -fira-hoist-pressure @gol
379-fira-loop-pressure -fno-ira-share-save-slots @gol
380-fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
381-fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute
382-fivopts -fkeep-inline-functions -fkeep-static-consts -flive-range-shrinkage @gol
383-floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize @gol
384-floop-parallelize-all -flto -flto-compression-level @gol
385-flto-partition=@var{alg} -flto-report -flto-report-wpa -fmerge-all-constants @gol
386-fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol
387-fmove-loop-invariants -fno-branch-count-reg @gol
388-fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
389-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
390-fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
391-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
392-fomit-frame-pointer -foptimize-sibling-calls @gol
393-fpartial-inlining -fpeel-loops -fpredictive-commoning @gol
394-fprefetch-loop-arrays -fprofile-report @gol
395-fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
396-fprofile-generate=@var{path} @gol
397-fprofile-use -fprofile-use=@var{path} -fprofile-values -fprofile-reorder-functions @gol
398-freciprocal-math -free -frename-registers -freorder-blocks @gol
399-freorder-blocks-and-partition -freorder-functions @gol
400-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
401-frounding-math -fsched2-use-superblocks -fsched-pressure @gol
402-fsched-spec-load -fsched-spec-load-dangerous @gol
403-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
404-fsched-group-heuristic -fsched-critical-path-heuristic @gol
405-fsched-spec-insn-heuristic -fsched-rank-heuristic @gol
406-fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol
407-fschedule-insns -fschedule-insns2 -fsection-anchors @gol
408-fselective-scheduling -fselective-scheduling2 @gol
409-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
410-fshrink-wrap -fsignaling-nans -fsingle-precision-constant @gol
411-fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector @gol
412-fstack-protector-all -fstack-protector-strong -fstrict-aliasing @gol
413-fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp @gol
414-ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
415-ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop @gol
416-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol
417-ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol
418-ftree-loop-if-convert-stores -ftree-loop-im @gol
419-ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol
420-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
421-ftree-loop-vectorize @gol
422-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
423-ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol
424-ftree-switch-conversion -ftree-tail-merge -ftree-ter @gol
425-ftree-vectorize -ftree-vrp @gol
426-funit-at-a-time -funroll-all-loops -funroll-loops @gol
427-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
428-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
429-fwhole-program -fwpa -fuse-ld=@var{linker} -fuse-linker-plugin @gol
430--param @var{name}=@var{value}
431-O  -O0  -O1  -O2  -O3  -Os -Ofast -Og}
432
433@item Preprocessor Options
434@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
435@gccoptlist{-A@var{question}=@var{answer} @gol
436-A-@var{question}@r{[}=@var{answer}@r{]} @gol
437-C  -dD  -dI  -dM  -dN @gol
438-D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
439-idirafter @var{dir} @gol
440-include @var{file}  -imacros @var{file} @gol
441-iprefix @var{file}  -iwithprefix @var{dir} @gol
442-iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
443-imultilib @var{dir} -isysroot @var{dir} @gol
444-M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
445-P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory @gol
446-remap -trigraphs  -undef  -U@var{macro}  @gol
447-Wp,@var{option} -Xpreprocessor @var{option} -no-integrated-cpp}
448
449@item Assembler Option
450@xref{Assembler Options,,Passing Options to the Assembler}.
451@gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
452
453@item Linker Options
454@xref{Link Options,,Options for Linking}.
455@gccoptlist{@var{object-file-name}  -l@var{library} @gol
456-nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
457-s  -static -static-libgcc -static-libstdc++ @gol
458-static-libasan -static-libtsan -static-liblsan -static-libubsan @gol
459-shared -shared-libgcc  -symbolic @gol
460-T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
461-u @var{symbol}}
462
463@item Directory Options
464@xref{Directory Options,,Options for Directory Search}.
465@gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir} @gol
466-iquote@var{dir} -L@var{dir} -specs=@var{file} -I- @gol
467--sysroot=@var{dir} --no-sysroot-suffix}
468
469@item Machine Dependent Options
470@xref{Submodel Options,,Hardware Models and Configurations}.
471@c This list is ordered alphanumerically by subsection name.
472@c Try and put the significant identifier (CPU or system) first,
473@c so users have a clue at guessing where the ones they want will be.
474
475@emph{AArch64 Options}
476@gccoptlist{-mabi=@var{name}  -mbig-endian  -mlittle-endian @gol
477-mgeneral-regs-only @gol
478-mcmodel=tiny  -mcmodel=small  -mcmodel=large @gol
479-mstrict-align @gol
480-momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
481-mtls-dialect=desc  -mtls-dialect=traditional @gol
482-mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769 @gol
483-march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}}
484
485@emph{Adapteva Epiphany Options}
486@gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol
487-mbranch-cost=@var{num} -mcmove -mnops=@var{num} -msoft-cmpsf @gol
488-msplit-lohi -mpost-inc -mpost-modify -mstack-offset=@var{num} @gol
489-mround-nearest -mlong-calls -mshort-calls -msmall16 @gol
490-mfp-mode=@var{mode} -mvect-double -max-vect-align=@var{num} @gol
491-msplit-vecmove-early -m1reg-@var{reg}}
492
493@emph{ARC Options}
494@gccoptlist{-mbarrel-shifter @gol
495-mcpu=@var{cpu} -mA6 -mARC600 -mA7 -mARC700 @gol
496-mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr @gol
497-mea -mno-mpy -mmul32x16 -mmul64 @gol
498-mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap @gol
499-mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape @gol
500-mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof @gol
501-mepilogue-cfi -mlong-calls -mmedium-calls -msdata @gol
502-mucb-mcount -mvolatile-cache @gol
503-malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc @gol
504-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi @gol
505-mexpand-adddi -mindexed-loads -mlra -mlra-priority-none @gol
506-mlra-priority-compact mlra-priority-noncompact -mno-millicode @gol
507-mmixed-code -mq-class -mRcq -mRcw -msize-level=@var{level} @gol
508-mtune=@var{cpu} -mmultcost=@var{num} -munalign-prob-threshold=@var{probability}}
509
510@emph{ARM Options}
511@gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
512-mabi=@var{name} @gol
513-mapcs-stack-check  -mno-apcs-stack-check @gol
514-mapcs-float  -mno-apcs-float @gol
515-mapcs-reentrant  -mno-apcs-reentrant @gol
516-msched-prolog  -mno-sched-prolog @gol
517-mlittle-endian  -mbig-endian  -mwords-little-endian @gol
518-mfloat-abi=@var{name} @gol
519-mfp16-format=@var{name}
520-mthumb-interwork  -mno-thumb-interwork @gol
521-mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
522-mstructure-size-boundary=@var{n} @gol
523-mabort-on-noreturn @gol
524-mlong-calls  -mno-long-calls @gol
525-msingle-pic-base  -mno-single-pic-base @gol
526-mpic-register=@var{reg} @gol
527-mnop-fun-dllimport @gol
528-mpoke-function-name @gol
529-mthumb  -marm @gol
530-mtpcs-frame  -mtpcs-leaf-frame @gol
531-mcaller-super-interworking  -mcallee-super-interworking @gol
532-mtp=@var{name} -mtls-dialect=@var{dialect} @gol
533-mword-relocations @gol
534-mfix-cortex-m3-ldrd @gol
535-munaligned-access @gol
536-mneon-for-64bits @gol
537-mslow-flash-data @gol
538-mrestrict-it}
539
540@emph{AVR Options}
541@gccoptlist{-mmcu=@var{mcu} -maccumulate-args -mbranch-cost=@var{cost} @gol
542-mcall-prologues -mint8 -mno-interrupts -mrelax @gol
543-mstrict-X -mtiny-stack -Waddr-space-convert}
544
545@emph{Blackfin Options}
546@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
547-msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
548-mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
549-mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
550-mno-id-shared-library  -mshared-library-id=@var{n} @gol
551-mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
552-msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
553-mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
554-micplb}
555
556@emph{C6X Options}
557@gccoptlist{-mbig-endian  -mlittle-endian -march=@var{cpu} @gol
558-msim -msdata=@var{sdata-type}}
559
560@emph{CRIS Options}
561@gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
562-mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
563-metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
564-mstack-align  -mdata-align  -mconst-align @gol
565-m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
566-melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
567-mmul-bug-workaround  -mno-mul-bug-workaround}
568
569@emph{CR16 Options}
570@gccoptlist{-mmac @gol
571-mcr16cplus -mcr16c @gol
572-msim -mint32 -mbit-ops
573-mdata-model=@var{model}}
574
575@emph{Darwin Options}
576@gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
577-arch_only  -bind_at_load  -bundle  -bundle_loader @gol
578-client_name  -compatibility_version  -current_version @gol
579-dead_strip @gol
580-dependency-file  -dylib_file  -dylinker_install_name @gol
581-dynamic  -dynamiclib  -exported_symbols_list @gol
582-filelist  -flat_namespace  -force_cpusubtype_ALL @gol
583-force_flat_namespace  -headerpad_max_install_names @gol
584-iframework @gol
585-image_base  -init  -install_name  -keep_private_externs @gol
586-multi_module  -multiply_defined  -multiply_defined_unused @gol
587-noall_load   -no_dead_strip_inits_and_terms @gol
588-nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
589-pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
590-private_bundle  -read_only_relocs  -sectalign @gol
591-sectobjectsymbols  -whyload  -seg1addr @gol
592-sectcreate  -sectobjectsymbols  -sectorder @gol
593-segaddr -segs_read_only_addr -segs_read_write_addr @gol
594-seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
595-segprot  -segs_read_only_addr  -segs_read_write_addr @gol
596-single_module  -static  -sub_library  -sub_umbrella @gol
597-twolevel_namespace  -umbrella  -undefined @gol
598-unexported_symbols_list  -weak_reference_mismatches @gol
599-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
600-mkernel -mone-byte-bool}
601
602@emph{DEC Alpha Options}
603@gccoptlist{-mno-fp-regs  -msoft-float @gol
604-mieee  -mieee-with-inexact  -mieee-conformant @gol
605-mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
606-mtrap-precision=@var{mode}  -mbuild-constants @gol
607-mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
608-mbwx  -mmax  -mfix  -mcix @gol
609-mfloat-vax  -mfloat-ieee @gol
610-mexplicit-relocs  -msmall-data  -mlarge-data @gol
611-msmall-text  -mlarge-text @gol
612-mmemory-latency=@var{time}}
613
614@emph{FR30 Options}
615@gccoptlist{-msmall-model -mno-lsim}
616
617@emph{FRV Options}
618@gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
619-mhard-float  -msoft-float @gol
620-malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
621-mdouble  -mno-double @gol
622-mmedia  -mno-media  -mmuladd  -mno-muladd @gol
623-mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
624-mlinked-fp  -mlong-calls  -malign-labels @gol
625-mlibrary-pic  -macc-4  -macc-8 @gol
626-mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
627-moptimize-membar -mno-optimize-membar @gol
628-mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
629-mvliw-branch  -mno-vliw-branch @gol
630-mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
631-mno-nested-cond-exec  -mtomcat-stats @gol
632-mTLS -mtls @gol
633-mcpu=@var{cpu}}
634
635@emph{GNU/Linux Options}
636@gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol
637-tno-android-cc -tno-android-ld}
638
639@emph{H8/300 Options}
640@gccoptlist{-mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300}
641
642@emph{HPPA Options}
643@gccoptlist{-march=@var{architecture-type} @gol
644-mdisable-fpregs  -mdisable-indexing @gol
645-mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
646-mfixed-range=@var{register-range} @gol
647-mjump-in-delay -mlinker-opt -mlong-calls @gol
648-mlong-load-store  -mno-disable-fpregs @gol
649-mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
650-mno-jump-in-delay  -mno-long-load-store @gol
651-mno-portable-runtime  -mno-soft-float @gol
652-mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
653-mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
654-mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
655-munix=@var{unix-std}  -nolibdld  -static  -threads}
656
657@emph{i386 and x86-64 Options}
658@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
659-mtune-ctrl=@var{feature-list} -mdump-tune-features -mno-default @gol
660-mfpmath=@var{unit} @gol
661-masm=@var{dialect}  -mno-fancy-math-387 @gol
662-mno-fp-ret-in-387  -msoft-float @gol
663-mno-wide-multiply  -mrtd  -malign-double @gol
664-mpreferred-stack-boundary=@var{num} @gol
665-mincoming-stack-boundary=@var{num} @gol
666-mcld -mcx16 -msahf -mmovbe -mcrc32 @gol
667-mrecip -mrecip=@var{opt} @gol
668-mvzeroupper -mprefer-avx128 @gol
669-mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
670-mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha @gol
671-maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 @gol
672-msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt @gol
673-mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mthreads @gol
674-mno-align-stringops  -minline-all-stringops @gol
675-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
676-mmemcpy-strategy=@var{strategy} -mmemset-strategy=@var{strategy}
677-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
678-m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 @gol
679-mregparm=@var{num}  -msseregparm @gol
680-mveclibabi=@var{type} -mvect8-ret-in-mem @gol
681-mpc32 -mpc64 -mpc80 -mstackrealign @gol
682-momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
683-mcmodel=@var{code-model} -mabi=@var{name} -maddress-mode=@var{mode} @gol
684-m32 -m64 -mx32 -m16 -mlarge-data-threshold=@var{num} @gol
685-msse2avx -mfentry -m8bit-idiv @gol
686-mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol
687-mstack-protector-guard=@var{guard}}
688
689@emph{i386 and x86-64 Windows Options}
690@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol
691-mnop-fun-dllimport -mthread @gol
692-municode -mwin32 -mwindows -fno-set-stack-executable}
693
694@emph{IA-64 Options}
695@gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
696-mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata @gol
697-mconstant-gp  -mauto-pic  -mfused-madd @gol
698-minline-float-divide-min-latency @gol
699-minline-float-divide-max-throughput @gol
700-mno-inline-float-divide @gol
701-minline-int-divide-min-latency @gol
702-minline-int-divide-max-throughput  @gol
703-mno-inline-int-divide @gol
704-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
705-mno-inline-sqrt @gol
706-mdwarf2-asm -mearly-stop-bits @gol
707-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
708-mtune=@var{cpu-type} -milp32 -mlp64 @gol
709-msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol
710-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
711-msched-spec-ldc -msched-spec-control-ldc @gol
712-msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol
713-msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol
714-msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol
715-msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}}
716
717@emph{LM32 Options}
718@gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
719-msign-extend-enabled -muser-enabled}
720
721@emph{M32R/D Options}
722@gccoptlist{-m32r2 -m32rx -m32r @gol
723-mdebug @gol
724-malign-loops -mno-align-loops @gol
725-missue-rate=@var{number} @gol
726-mbranch-cost=@var{number} @gol
727-mmodel=@var{code-size-model-type} @gol
728-msdata=@var{sdata-type} @gol
729-mno-flush-func -mflush-func=@var{name} @gol
730-mno-flush-trap -mflush-trap=@var{number} @gol
731-G @var{num}}
732
733@emph{M32C Options}
734@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
735
736@emph{M680x0 Options}
737@gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
738-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
739-m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
740-mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
741-mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
742-mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
743-malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
744-mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
745-mxgot -mno-xgot}
746
747@emph{MCore Options}
748@gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
749-mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
750-m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
751-mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
752-mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
753
754@emph{MeP Options}
755@gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol
756-mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol
757-mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol
758-mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol
759-mtiny=@var{n}}
760
761@emph{MicroBlaze Options}
762@gccoptlist{-msoft-float -mhard-float -msmall-divides -mcpu=@var{cpu} @gol
763-mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift @gol
764-mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss @gol
765-mxl-multiply-high -mxl-float-convert -mxl-float-sqrt @gol
766-mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-@var{app-model}}
767
768@emph{MIPS Options}
769@gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
770-mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2 @gol
771-mips64  -mips64r2 @gol
772-mips16  -mno-mips16  -mflip-mips16 @gol
773-minterlink-compressed -mno-interlink-compressed @gol
774-minterlink-mips16  -mno-interlink-mips16 @gol
775-mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
776-mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
777-mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
778-mno-float  -msingle-float  -mdouble-float @gol
779-mabs=@var{mode}  -mnan=@var{encoding} @gol
780-mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
781-mmcu -mmno-mcu @gol
782-meva -mno-eva @gol
783-mvirt -mno-virt @gol
784-mmicromips -mno-micromips @gol
785-mfpu=@var{fpu-type} @gol
786-msmartmips  -mno-smartmips @gol
787-mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
788-mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
789-mlong64  -mlong32  -msym32  -mno-sym32 @gol
790-G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
791-mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
792-membedded-data  -mno-embedded-data @gol
793-muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
794-mcode-readable=@var{setting} @gol
795-msplit-addresses  -mno-split-addresses @gol
796-mexplicit-relocs  -mno-explicit-relocs @gol
797-mcheck-zero-division  -mno-check-zero-division @gol
798-mdivide-traps  -mdivide-breaks @gol
799-mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
800-mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp @gol
801-mfix-24k -mno-fix-24k @gol
802-mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
803-mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000 @gol
804-mfix-vr4120  -mno-fix-vr4120 @gol
805-mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
806-mflush-func=@var{func}  -mno-flush-func @gol
807-mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
808-mfp-exceptions -mno-fp-exceptions @gol
809-mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol
810-mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address}
811
812@emph{MMIX Options}
813@gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
814-mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
815-melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
816-mno-base-addresses  -msingle-exit  -mno-single-exit}
817
818@emph{MN10300 Options}
819@gccoptlist{-mmult-bug  -mno-mult-bug @gol
820-mno-am33 -mam33 -mam33-2 -mam34 @gol
821-mtune=@var{cpu-type} @gol
822-mreturn-pointer-on-d0 @gol
823-mno-crt0  -mrelax -mliw -msetlb}
824
825@emph{Moxie Options}
826@gccoptlist{-meb -mel -mno-crt0}
827
828@emph{MSP430 Options}
829@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
830-mhwmult= -minrt}
831
832@emph{NDS32 Options}
833@gccoptlist{-mbig-endian -mlittle-endian @gol
834-mreduced-regs -mfull-regs @gol
835-mcmov -mno-cmov @gol
836-mperf-ext -mno-perf-ext @gol
837-mv3push -mno-v3push @gol
838-m16bit -mno-16bit @gol
839-mgp-direct -mno-gp-direct @gol
840-misr-vector-size=@var{num} @gol
841-mcache-block-size=@var{num} @gol
842-march=@var{arch} @gol
843-mforce-fp-as-gp -mforbid-fp-as-gp @gol
844-mex9 -mctor-dtor -mrelax}
845
846@emph{Nios II Options}
847@gccoptlist{-G @var{num} -mgpopt -mno-gpopt -mel -meb @gol
848-mno-bypass-cache -mbypass-cache @gol
849-mno-cache-volatile -mcache-volatile @gol
850-mno-fast-sw-div -mfast-sw-div @gol
851-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div @gol
852-mcustom-@var{insn}=@var{N} -mno-custom-@var{insn} @gol
853-mcustom-fpu-cfg=@var{name} @gol
854-mhal -msmallc -msys-crt0=@var{name} -msys-lib=@var{name}}
855
856@emph{PDP-11 Options}
857@gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
858-mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
859-mint16  -mno-int32  -mfloat32  -mno-float64 @gol
860-mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
861-mbranch-expensive  -mbranch-cheap @gol
862-munix-asm  -mdec-asm}
863
864@emph{picoChip Options}
865@gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} @gol
866-msymbol-as-address -mno-inefficient-warnings}
867
868@emph{PowerPC Options}
869See RS/6000 and PowerPC Options.
870
871@emph{RL78 Options}
872@gccoptlist{-msim -mmul=none -mmul=g13 -mmul=rl78}
873
874@emph{RS/6000 and PowerPC Options}
875@gccoptlist{-mcpu=@var{cpu-type} @gol
876-mtune=@var{cpu-type} @gol
877-mcmodel=@var{code-model} @gol
878-mpowerpc64 @gol
879-maltivec  -mno-altivec @gol
880-mpowerpc-gpopt  -mno-powerpc-gpopt @gol
881-mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
882-mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd @gol
883-mfprnd  -mno-fprnd @gol
884-mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
885-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
886-m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
887-malign-power  -malign-natural @gol
888-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
889-msingle-float -mdouble-float -msimple-fpu @gol
890-mstring  -mno-string  -mupdate  -mno-update @gol
891-mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
892-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
893-mstrict-align  -mno-strict-align  -mrelocatable @gol
894-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
895-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
896-mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base @gol
897-mprioritize-restricted-insns=@var{priority} @gol
898-msched-costly-dep=@var{dependence_type} @gol
899-minsert-sched-nops=@var{scheme} @gol
900-mcall-sysv  -mcall-netbsd @gol
901-maix-struct-return  -msvr4-struct-return @gol
902-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
903-mblock-move-inline-limit=@var{num} @gol
904-misel -mno-isel @gol
905-misel=yes  -misel=no @gol
906-mspe -mno-spe @gol
907-mspe=yes  -mspe=no @gol
908-mpaired @gol
909-mgen-cell-microcode -mwarn-cell-microcode @gol
910-mvrsave -mno-vrsave @gol
911-mmulhw -mno-mulhw @gol
912-mdlmzb -mno-dlmzb @gol
913-mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
914-mprototype  -mno-prototype @gol
915-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
916-msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread @gol
917-mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision @gol
918-mno-recip-precision @gol
919-mveclibabi=@var{type} -mfriz -mno-friz @gol
920-mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol
921-msave-toc-indirect -mno-save-toc-indirect @gol
922-mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol
923-mcrypto -mno-crypto -mdirect-move -mno-direct-move @gol
924-mquad-memory -mno-quad-memory @gol
925-mquad-memory-atomic -mno-quad-memory-atomic @gol
926-mcompat-align-parm -mno-compat-align-parm}
927
928@emph{RX Options}
929@gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
930-mcpu=@gol
931-mbig-endian-data -mlittle-endian-data @gol
932-msmall-data @gol
933-msim  -mno-sim@gol
934-mas100-syntax -mno-as100-syntax@gol
935-mrelax@gol
936-mmax-constant-size=@gol
937-mint-register=@gol
938-mpid@gol
939-mno-warn-multiple-fast-interrupts@gol
940-msave-acc-in-interrupts}
941
942@emph{S/390 and zSeries Options}
943@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
944-mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
945-mlong-double-64 -mlong-double-128 @gol
946-mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
947-msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
948-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
949-mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
950-mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard @gol
951-mhotpatch[=@var{halfwords}] -mno-hotpatch}
952
953@emph{Score Options}
954@gccoptlist{-meb -mel @gol
955-mnhwloop @gol
956-muls @gol
957-mmac @gol
958-mscore5 -mscore5u -mscore7 -mscore7d}
959
960@emph{SH Options}
961@gccoptlist{-m1  -m2  -m2e @gol
962-m2a-nofpu -m2a-single-only -m2a-single -m2a @gol
963-m3  -m3e @gol
964-m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
965-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
966-m5-64media  -m5-64media-nofpu @gol
967-m5-32media  -m5-32media-nofpu @gol
968-m5-compact  -m5-compact-nofpu @gol
969-mb  -ml  -mdalign  -mrelax @gol
970-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
971-mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct @gol
972-mspace -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
973-mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
974-mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
975-maccumulate-outgoing-args -minvalid-symbols @gol
976-matomic-model=@var{atomic-model} @gol
977-mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch @gol
978-mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra @gol
979-mpretend-cmove -mtas}
980
981@emph{Solaris 2 Options}
982@gccoptlist{-mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text @gol
983-pthreads -pthread}
984
985@emph{SPARC Options}
986@gccoptlist{-mcpu=@var{cpu-type} @gol
987-mtune=@var{cpu-type} @gol
988-mcmodel=@var{code-model} @gol
989-mmemory-model=@var{mem-model} @gol
990-m32  -m64  -mapp-regs  -mno-app-regs @gol
991-mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
992-mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
993-mhard-quad-float  -msoft-quad-float @gol
994-mstack-bias  -mno-stack-bias @gol
995-munaligned-doubles  -mno-unaligned-doubles @gol
996-muser-mode  -mno-user-mode @gol
997-mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
998-mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
999-mcbcond -mno-cbcond @gol
1000-mfmaf  -mno-fmaf  -mpopc  -mno-popc @gol
1001-mfix-at697f -mfix-ut699}
1002
1003@emph{SPU Options}
1004@gccoptlist{-mwarn-reloc -merror-reloc @gol
1005-msafe-dma -munsafe-dma @gol
1006-mbranch-hints @gol
1007-msmall-mem -mlarge-mem -mstdmain @gol
1008-mfixed-range=@var{register-range} @gol
1009-mea32 -mea64 @gol
1010-maddress-space-conversion -mno-address-space-conversion @gol
1011-mcache-size=@var{cache-size} @gol
1012-matomic-updates -mno-atomic-updates}
1013
1014@emph{System V Options}
1015@gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
1016
1017@emph{TILE-Gx Options}
1018@gccoptlist{-mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian @gol
1019-mcmodel=@var{code-model}}
1020
1021@emph{TILEPro Options}
1022@gccoptlist{-mcpu=@var{cpu} -m32}
1023
1024@emph{V850 Options}
1025@gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
1026-mprolog-function  -mno-prolog-function  -mspace @gol
1027-mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
1028-mapp-regs  -mno-app-regs @gol
1029-mdisable-callt  -mno-disable-callt @gol
1030-mv850e2v3 -mv850e2 -mv850e1 -mv850es @gol
1031-mv850e -mv850 -mv850e3v5 @gol
1032-mloop @gol
1033-mrelax @gol
1034-mlong-jumps @gol
1035-msoft-float @gol
1036-mhard-float @gol
1037-mgcc-abi @gol
1038-mrh850-abi @gol
1039-mbig-switch}
1040
1041@emph{VAX Options}
1042@gccoptlist{-mg  -mgnu  -munix}
1043
1044@emph{VMS Options}
1045@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64 @gol
1046-mpointer-size=@var{size}}
1047
1048@emph{VxWorks Options}
1049@gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
1050-Xbind-lazy  -Xbind-now}
1051
1052@emph{x86-64 Options}
1053See i386 and x86-64 Options.
1054
1055@emph{Xstormy16 Options}
1056@gccoptlist{-msim}
1057
1058@emph{Xtensa Options}
1059@gccoptlist{-mconst16 -mno-const16 @gol
1060-mfused-madd  -mno-fused-madd @gol
1061-mforce-no-pic @gol
1062-mserialize-volatile  -mno-serialize-volatile @gol
1063-mtext-section-literals  -mno-text-section-literals @gol
1064-mtarget-align  -mno-target-align @gol
1065-mlongcalls  -mno-longcalls}
1066
1067@emph{zSeries Options}
1068See S/390 and zSeries Options.
1069
1070@item Code Generation Options
1071@xref{Code Gen Options,,Options for Code Generation Conventions}.
1072@gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
1073-ffixed-@var{reg}  -fexceptions @gol
1074-fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
1075-fasynchronous-unwind-tables @gol
1076-fno-gnu-unique @gol
1077-finhibit-size-directive  -finstrument-functions @gol
1078-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
1079-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
1080-fno-common  -fno-ident @gol
1081-fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
1082-fno-jump-tables @gol
1083-frecord-gcc-switches @gol
1084-freg-struct-return  -fshort-enums @gol
1085-fshort-double  -fshort-wchar @gol
1086-fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
1087-fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
1088-fno-stack-limit -fsplit-stack @gol
1089-fleading-underscore  -ftls-model=@var{model} @gol
1090-fstack-reuse=@var{reuse_level} @gol
1091-ftrapv  -fwrapv  -fbounds-check @gol
1092-fvisibility -fstrict-volatile-bitfields -fsync-libcalls}
1093@end table
1094
1095
1096@node Overall Options
1097@section Options Controlling the Kind of Output
1098
1099Compilation can involve up to four stages: preprocessing, compilation
1100proper, assembly and linking, always in that order.  GCC is capable of
1101preprocessing and compiling several files either into several
1102assembler input files, or into one assembler input file; then each
1103assembler input file produces an object file, and linking combines all
1104the object files (those newly compiled, and those specified as input)
1105into an executable file.
1106
1107@cindex file name suffix
1108For any given input file, the file name suffix determines what kind of
1109compilation is done:
1110
1111@table @gcctabopt
1112@item @var{file}.c
1113C source code that must be preprocessed.
1114
1115@item @var{file}.i
1116C source code that should not be preprocessed.
1117
1118@item @var{file}.ii
1119C++ source code that should not be preprocessed.
1120
1121@item @var{file}.m
1122Objective-C source code.  Note that you must link with the @file{libobjc}
1123library to make an Objective-C program work.
1124
1125@item @var{file}.mi
1126Objective-C source code that should not be preprocessed.
1127
1128@item @var{file}.mm
1129@itemx @var{file}.M
1130Objective-C++ source code.  Note that you must link with the @file{libobjc}
1131library to make an Objective-C++ program work.  Note that @samp{.M} refers
1132to a literal capital M@.
1133
1134@item @var{file}.mii
1135Objective-C++ source code that should not be preprocessed.
1136
1137@item @var{file}.h
1138C, C++, Objective-C or Objective-C++ header file to be turned into a
1139precompiled header (default), or C, C++ header file to be turned into an
1140Ada spec (via the @option{-fdump-ada-spec} switch).
1141
1142@item @var{file}.cc
1143@itemx @var{file}.cp
1144@itemx @var{file}.cxx
1145@itemx @var{file}.cpp
1146@itemx @var{file}.CPP
1147@itemx @var{file}.c++
1148@itemx @var{file}.C
1149C++ source code that must be preprocessed.  Note that in @samp{.cxx},
1150the last two letters must both be literally @samp{x}.  Likewise,
1151@samp{.C} refers to a literal capital C@.
1152
1153@item @var{file}.mm
1154@itemx @var{file}.M
1155Objective-C++ source code that must be preprocessed.
1156
1157@item @var{file}.mii
1158Objective-C++ source code that should not be preprocessed.
1159
1160@item @var{file}.hh
1161@itemx @var{file}.H
1162@itemx @var{file}.hp
1163@itemx @var{file}.hxx
1164@itemx @var{file}.hpp
1165@itemx @var{file}.HPP
1166@itemx @var{file}.h++
1167@itemx @var{file}.tcc
1168C++ header file to be turned into a precompiled header or Ada spec.
1169
1170@item @var{file}.f
1171@itemx @var{file}.for
1172@itemx @var{file}.ftn
1173Fixed form Fortran source code that should not be preprocessed.
1174
1175@item @var{file}.F
1176@itemx @var{file}.FOR
1177@itemx @var{file}.fpp
1178@itemx @var{file}.FPP
1179@itemx @var{file}.FTN
1180Fixed form Fortran source code that must be preprocessed (with the traditional
1181preprocessor).
1182
1183@item @var{file}.f90
1184@itemx @var{file}.f95
1185@itemx @var{file}.f03
1186@itemx @var{file}.f08
1187Free form Fortran source code that should not be preprocessed.
1188
1189@item @var{file}.F90
1190@itemx @var{file}.F95
1191@itemx @var{file}.F03
1192@itemx @var{file}.F08
1193Free form Fortran source code that must be preprocessed (with the
1194traditional preprocessor).
1195
1196@item @var{file}.go
1197Go source code.
1198
1199@c FIXME: Descriptions of Java file types.
1200@c @var{file}.java
1201@c @var{file}.class
1202@c @var{file}.zip
1203@c @var{file}.jar
1204
1205@item @var{file}.ads
1206Ada source code file that contains a library unit declaration (a
1207declaration of a package, subprogram, or generic, or a generic
1208instantiation), or a library unit renaming declaration (a package,
1209generic, or subprogram renaming declaration).  Such files are also
1210called @dfn{specs}.
1211
1212@item @var{file}.adb
1213Ada source code file containing a library unit body (a subprogram or
1214package body).  Such files are also called @dfn{bodies}.
1215
1216@c GCC also knows about some suffixes for languages not yet included:
1217@c Pascal:
1218@c @var{file}.p
1219@c @var{file}.pas
1220@c Ratfor:
1221@c @var{file}.r
1222
1223@item @var{file}.s
1224Assembler code.
1225
1226@item @var{file}.S
1227@itemx @var{file}.sx
1228Assembler code that must be preprocessed.
1229
1230@item @var{other}
1231An object file to be fed straight into linking.
1232Any file name with no recognized suffix is treated this way.
1233@end table
1234
1235@opindex x
1236You can specify the input language explicitly with the @option{-x} option:
1237
1238@table @gcctabopt
1239@item -x @var{language}
1240Specify explicitly the @var{language} for the following input files
1241(rather than letting the compiler choose a default based on the file
1242name suffix).  This option applies to all following input files until
1243the next @option{-x} option.  Possible values for @var{language} are:
1244@smallexample
1245c  c-header  cpp-output
1246c++  c++-header  c++-cpp-output
1247objective-c  objective-c-header  objective-c-cpp-output
1248objective-c++ objective-c++-header objective-c++-cpp-output
1249assembler  assembler-with-cpp
1250ada
1251f77  f77-cpp-input f95  f95-cpp-input
1252go
1253java
1254@end smallexample
1255
1256@item -x none
1257Turn off any specification of a language, so that subsequent files are
1258handled according to their file name suffixes (as they are if @option{-x}
1259has not been used at all).
1260
1261@item -pass-exit-codes
1262@opindex pass-exit-codes
1263Normally the @command{gcc} program exits with the code of 1 if any
1264phase of the compiler returns a non-success return code.  If you specify
1265@option{-pass-exit-codes}, the @command{gcc} program instead returns with
1266the numerically highest error produced by any phase returning an error
1267indication.  The C, C++, and Fortran front ends return 4 if an internal
1268compiler error is encountered.
1269@end table
1270
1271If you only want some of the stages of compilation, you can use
1272@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1273one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1274@command{gcc} is to stop.  Note that some combinations (for example,
1275@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1276
1277@table @gcctabopt
1278@item -c
1279@opindex c
1280Compile or assemble the source files, but do not link.  The linking
1281stage simply is not done.  The ultimate output is in the form of an
1282object file for each source file.
1283
1284By default, the object file name for a source file is made by replacing
1285the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1286
1287Unrecognized input files, not requiring compilation or assembly, are
1288ignored.
1289
1290@item -S
1291@opindex S
1292Stop after the stage of compilation proper; do not assemble.  The output
1293is in the form of an assembler code file for each non-assembler input
1294file specified.
1295
1296By default, the assembler file name for a source file is made by
1297replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1298
1299Input files that don't require compilation are ignored.
1300
1301@item -E
1302@opindex E
1303Stop after the preprocessing stage; do not run the compiler proper.  The
1304output is in the form of preprocessed source code, which is sent to the
1305standard output.
1306
1307Input files that don't require preprocessing are ignored.
1308
1309@cindex output file option
1310@item -o @var{file}
1311@opindex o
1312Place output in file @var{file}.  This applies to whatever
1313sort of output is being produced, whether it be an executable file,
1314an object file, an assembler file or preprocessed C code.
1315
1316If @option{-o} is not specified, the default is to put an executable
1317file in @file{a.out}, the object file for
1318@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1319assembler file in @file{@var{source}.s}, a precompiled header file in
1320@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1321standard output.
1322
1323@item -v
1324@opindex v
1325Print (on standard error output) the commands executed to run the stages
1326of compilation.  Also print the version number of the compiler driver
1327program and of the preprocessor and the compiler proper.
1328
1329@item -###
1330@opindex ###
1331Like @option{-v} except the commands are not executed and arguments
1332are quoted unless they contain only alphanumeric characters or @code{./-_}.
1333This is useful for shell scripts to capture the driver-generated command lines.
1334
1335@item -pipe
1336@opindex pipe
1337Use pipes rather than temporary files for communication between the
1338various stages of compilation.  This fails to work on some systems where
1339the assembler is unable to read from a pipe; but the GNU assembler has
1340no trouble.
1341
1342@item --help
1343@opindex help
1344Print (on the standard output) a description of the command-line options
1345understood by @command{gcc}.  If the @option{-v} option is also specified
1346then @option{--help} is also passed on to the various processes
1347invoked by @command{gcc}, so that they can display the command-line options
1348they accept.  If the @option{-Wextra} option has also been specified
1349(prior to the @option{--help} option), then command-line options that
1350have no documentation associated with them are also displayed.
1351
1352@item --target-help
1353@opindex target-help
1354Print (on the standard output) a description of target-specific command-line
1355options for each tool.  For some targets extra target-specific
1356information may also be printed.
1357
1358@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1359Print (on the standard output) a description of the command-line
1360options understood by the compiler that fit into all specified classes
1361and qualifiers.  These are the supported classes:
1362
1363@table @asis
1364@item @samp{optimizers}
1365Display all of the optimization options supported by the
1366compiler.
1367
1368@item @samp{warnings}
1369Display all of the options controlling warning messages
1370produced by the compiler.
1371
1372@item @samp{target}
1373Display target-specific options.  Unlike the
1374@option{--target-help} option however, target-specific options of the
1375linker and assembler are not displayed.  This is because those
1376tools do not currently support the extended @option{--help=} syntax.
1377
1378@item @samp{params}
1379Display the values recognized by the @option{--param}
1380option.
1381
1382@item @var{language}
1383Display the options supported for @var{language}, where
1384@var{language} is the name of one of the languages supported in this
1385version of GCC@.
1386
1387@item @samp{common}
1388Display the options that are common to all languages.
1389@end table
1390
1391These are the supported qualifiers:
1392
1393@table @asis
1394@item @samp{undocumented}
1395Display only those options that are undocumented.
1396
1397@item @samp{joined}
1398Display options taking an argument that appears after an equal
1399sign in the same continuous piece of text, such as:
1400@samp{--help=target}.
1401
1402@item @samp{separate}
1403Display options taking an argument that appears as a separate word
1404following the original option, such as: @samp{-o output-file}.
1405@end table
1406
1407Thus for example to display all the undocumented target-specific
1408switches supported by the compiler, use:
1409
1410@smallexample
1411--help=target,undocumented
1412@end smallexample
1413
1414The sense of a qualifier can be inverted by prefixing it with the
1415@samp{^} character, so for example to display all binary warning
1416options (i.e., ones that are either on or off and that do not take an
1417argument) that have a description, use:
1418
1419@smallexample
1420--help=warnings,^joined,^undocumented
1421@end smallexample
1422
1423The argument to @option{--help=} should not consist solely of inverted
1424qualifiers.
1425
1426Combining several classes is possible, although this usually
1427restricts the output so much that there is nothing to display.  One
1428case where it does work, however, is when one of the classes is
1429@var{target}.  For example, to display all the target-specific
1430optimization options, use:
1431
1432@smallexample
1433--help=target,optimizers
1434@end smallexample
1435
1436The @option{--help=} option can be repeated on the command line.  Each
1437successive use displays its requested class of options, skipping
1438those that have already been displayed.
1439
1440If the @option{-Q} option appears on the command line before the
1441@option{--help=} option, then the descriptive text displayed by
1442@option{--help=} is changed.  Instead of describing the displayed
1443options, an indication is given as to whether the option is enabled,
1444disabled or set to a specific value (assuming that the compiler
1445knows this at the point where the @option{--help=} option is used).
1446
1447Here is a truncated example from the ARM port of @command{gcc}:
1448
1449@smallexample
1450  % gcc -Q -mabi=2 --help=target -c
1451  The following options are target specific:
1452  -mabi=                                2
1453  -mabort-on-noreturn                   [disabled]
1454  -mapcs                                [disabled]
1455@end smallexample
1456
1457The output is sensitive to the effects of previous command-line
1458options, so for example it is possible to find out which optimizations
1459are enabled at @option{-O2} by using:
1460
1461@smallexample
1462-Q -O2 --help=optimizers
1463@end smallexample
1464
1465Alternatively you can discover which binary optimizations are enabled
1466by @option{-O3} by using:
1467
1468@smallexample
1469gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1470gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1471diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1472@end smallexample
1473
1474@item -no-canonical-prefixes
1475@opindex no-canonical-prefixes
1476Do not expand any symbolic links, resolve references to @samp{/../}
1477or @samp{/./}, or make the path absolute when generating a relative
1478prefix.
1479
1480@item --version
1481@opindex version
1482Display the version number and copyrights of the invoked GCC@.
1483
1484@item -wrapper
1485@opindex wrapper
1486Invoke all subcommands under a wrapper program.  The name of the
1487wrapper program and its parameters are passed as a comma separated
1488list.
1489
1490@smallexample
1491gcc -c t.c -wrapper gdb,--args
1492@end smallexample
1493
1494@noindent
1495This invokes all subprograms of @command{gcc} under
1496@samp{gdb --args}, thus the invocation of @command{cc1} is
1497@samp{gdb --args cc1 @dots{}}.
1498
1499@item -fplugin=@var{name}.so
1500@opindex fplugin
1501Load the plugin code in file @var{name}.so, assumed to be a
1502shared object to be dlopen'd by the compiler.  The base name of
1503the shared object file is used to identify the plugin for the
1504purposes of argument parsing (See
1505@option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1506Each plugin should define the callback functions specified in the
1507Plugins API.
1508
1509@item -fplugin-arg-@var{name}-@var{key}=@var{value}
1510@opindex fplugin-arg
1511Define an argument called @var{key} with a value of @var{value}
1512for the plugin called @var{name}.
1513
1514@item -fdump-ada-spec@r{[}-slim@r{]}
1515@opindex fdump-ada-spec
1516For C and C++ source and include files, generate corresponding Ada specs.
1517@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
1518GNAT User's Guide}, which provides detailed documentation on this feature.
1519
1520@item -fada-spec-parent=@var{unit}
1521@opindex fada-spec-parent
1522In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
1523Ada specs as child units of parent @var{unit}.
1524
1525@item -fdump-go-spec=@var{file}
1526@opindex fdump-go-spec
1527For input files in any language, generate corresponding Go
1528declarations in @var{file}.  This generates Go @code{const},
1529@code{type}, @code{var}, and @code{func} declarations which may be a
1530useful way to start writing a Go interface to code written in some
1531other language.
1532
1533@include @value{srcdir}/../libiberty/at-file.texi
1534@end table
1535
1536@node Invoking G++
1537@section Compiling C++ Programs
1538
1539@cindex suffixes for C++ source
1540@cindex C++ source file suffixes
1541C++ source files conventionally use one of the suffixes @samp{.C},
1542@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1543@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1544@samp{.H}, or (for shared template code) @samp{.tcc}; and
1545preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1546files with these names and compiles them as C++ programs even if you
1547call the compiler the same way as for compiling C programs (usually
1548with the name @command{gcc}).
1549
1550@findex g++
1551@findex c++
1552However, the use of @command{gcc} does not add the C++ library.
1553@command{g++} is a program that calls GCC and automatically specifies linking
1554against the C++ library.  It treats @samp{.c},
1555@samp{.h} and @samp{.i} files as C++ source files instead of C source
1556files unless @option{-x} is used.  This program is also useful when
1557precompiling a C header file with a @samp{.h} extension for use in C++
1558compilations.  On many systems, @command{g++} is also installed with
1559the name @command{c++}.
1560
1561@cindex invoking @command{g++}
1562When you compile C++ programs, you may specify many of the same
1563command-line options that you use for compiling programs in any
1564language; or command-line options meaningful for C and related
1565languages; or options that are meaningful only for C++ programs.
1566@xref{C Dialect Options,,Options Controlling C Dialect}, for
1567explanations of options for languages related to C@.
1568@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1569explanations of options that are meaningful only for C++ programs.
1570
1571@node C Dialect Options
1572@section Options Controlling C Dialect
1573@cindex dialect options
1574@cindex language dialect options
1575@cindex options, dialect
1576
1577The following options control the dialect of C (or languages derived
1578from C, such as C++, Objective-C and Objective-C++) that the compiler
1579accepts:
1580
1581@table @gcctabopt
1582@cindex ANSI support
1583@cindex ISO support
1584@item -ansi
1585@opindex ansi
1586In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
1587equivalent to @option{-std=c++98}.
1588
1589This turns off certain features of GCC that are incompatible with ISO
1590C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1591such as the @code{asm} and @code{typeof} keywords, and
1592predefined macros such as @code{unix} and @code{vax} that identify the
1593type of system you are using.  It also enables the undesirable and
1594rarely used ISO trigraph feature.  For the C compiler,
1595it disables recognition of C++ style @samp{//} comments as well as
1596the @code{inline} keyword.
1597
1598The alternate keywords @code{__asm__}, @code{__extension__},
1599@code{__inline__} and @code{__typeof__} continue to work despite
1600@option{-ansi}.  You would not want to use them in an ISO C program, of
1601course, but it is useful to put them in header files that might be included
1602in compilations done with @option{-ansi}.  Alternate predefined macros
1603such as @code{__unix__} and @code{__vax__} are also available, with or
1604without @option{-ansi}.
1605
1606The @option{-ansi} option does not cause non-ISO programs to be
1607rejected gratuitously.  For that, @option{-Wpedantic} is required in
1608addition to @option{-ansi}.  @xref{Warning Options}.
1609
1610The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1611option is used.  Some header files may notice this macro and refrain
1612from declaring certain functions or defining certain macros that the
1613ISO standard doesn't call for; this is to avoid interfering with any
1614programs that might use these names for other things.
1615
1616Functions that are normally built in but do not have semantics
1617defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1618functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1619built-in functions provided by GCC}, for details of the functions
1620affected.
1621
1622@item -std=
1623@opindex std
1624Determine the language standard. @xref{Standards,,Language Standards
1625Supported by GCC}, for details of these standard versions.  This option
1626is currently only supported when compiling C or C++.
1627
1628The compiler can accept several base standards, such as @samp{c90} or
1629@samp{c++98}, and GNU dialects of those standards, such as
1630@samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
1631compiler accepts all programs following that standard plus those
1632using GNU extensions that do not contradict it.  For example,
1633@option{-std=c90} turns off certain features of GCC that are
1634incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1635keywords, but not other GNU extensions that do not have a meaning in
1636ISO C90, such as omitting the middle term of a @code{?:}
1637expression. On the other hand, when a GNU dialect of a standard is
1638specified, all features supported by the compiler are enabled, even when
1639those features change the meaning of the base standard.  As a result, some
1640strict-conforming programs may be rejected.  The particular standard
1641is used by @option{-Wpedantic} to identify which features are GNU
1642extensions given that version of the standard. For example
1643@option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
1644comments, while @option{-std=gnu99 -Wpedantic} does not.
1645
1646A value for this option must be provided; possible values are
1647
1648@table @samp
1649@item c90
1650@itemx c89
1651@itemx iso9899:1990
1652Support all ISO C90 programs (certain GNU extensions that conflict
1653with ISO C90 are disabled). Same as @option{-ansi} for C code.
1654
1655@item iso9899:199409
1656ISO C90 as modified in amendment 1.
1657
1658@item c99
1659@itemx c9x
1660@itemx iso9899:1999
1661@itemx iso9899:199x
1662ISO C99.  This standard is substantially completely supported, modulo
1663bugs, extended identifiers (supported except for corner cases when
1664@option{-fextended-identifiers} is used) and floating-point issues
1665(mainly but not entirely relating to optional C99 features from
1666Annexes F and G).  See
1667@w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1668names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1669
1670@item c11
1671@itemx c1x
1672@itemx iso9899:2011
1673ISO C11, the 2011 revision of the ISO C standard.  This standard is
1674substantially completely supported, modulo bugs, extended identifiers
1675(supported except for corner cases when
1676@option{-fextended-identifiers} is used), floating-point issues
1677(mainly but not entirely relating to optional C11 features from
1678Annexes F and G) and the optional Annexes K (Bounds-checking
1679interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.
1680
1681@item gnu90
1682@itemx gnu89
1683GNU dialect of ISO C90 (including some C99 features). This
1684is the default for C code.
1685
1686@item gnu99
1687@itemx gnu9x
1688GNU dialect of ISO C99.  The name @samp{gnu9x} is deprecated.
1689
1690@item gnu11
1691@itemx gnu1x
1692GNU dialect of ISO C11.  This is intended to become the default in a
1693future release of GCC.  The name @samp{gnu1x} is deprecated.
1694
1695@item c++98
1696@itemx c++03
1697The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
1698additional defect reports. Same as @option{-ansi} for C++ code.
1699
1700@item gnu++98
1701@itemx gnu++03
1702GNU dialect of @option{-std=c++98}.  This is the default for
1703C++ code.
1704
1705@item c++11
1706@itemx c++0x
1707The 2011 ISO C++ standard plus amendments.
1708The name @samp{c++0x} is deprecated.
1709
1710@item gnu++11
1711@itemx gnu++0x
1712GNU dialect of @option{-std=c++11}.
1713The name @samp{gnu++0x} is deprecated.
1714
1715@item c++1y
1716The next revision of the ISO C++ standard, tentatively planned for
17172014.  Support is highly experimental, and will almost certainly
1718change in incompatible ways in future releases.
1719
1720@item gnu++1y
1721GNU dialect of @option{-std=c++1y}.  Support is highly experimental,
1722and will almost certainly change in incompatible ways in future
1723releases.
1724@end table
1725
1726@item -fgnu89-inline
1727@opindex fgnu89-inline
1728The option @option{-fgnu89-inline} tells GCC to use the traditional
1729GNU semantics for @code{inline} functions when in C99 mode.
1730@xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1731is accepted and ignored by GCC versions 4.1.3 up to but not including
17324.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1733C99 mode.  Using this option is roughly equivalent to adding the
1734@code{gnu_inline} function attribute to all inline functions
1735(@pxref{Function Attributes}).
1736
1737The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1738C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1739specifies the default behavior).  This option was first supported in
1740GCC 4.3.  This option is not supported in @option{-std=c90} or
1741@option{-std=gnu90} mode.
1742
1743The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1744@code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1745in effect for @code{inline} functions.  @xref{Common Predefined
1746Macros,,,cpp,The C Preprocessor}.
1747
1748@item -aux-info @var{filename}
1749@opindex aux-info
1750Output to the given filename prototyped declarations for all functions
1751declared and/or defined in a translation unit, including those in header
1752files.  This option is silently ignored in any language other than C@.
1753
1754Besides declarations, the file indicates, in comments, the origin of
1755each declaration (source file and line), whether the declaration was
1756implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1757@samp{O} for old, respectively, in the first character after the line
1758number and the colon), and whether it came from a declaration or a
1759definition (@samp{C} or @samp{F}, respectively, in the following
1760character).  In the case of function definitions, a K&R-style list of
1761arguments followed by their declarations is also provided, inside
1762comments, after the declaration.
1763
1764@item -fallow-parameterless-variadic-functions
1765@opindex fallow-parameterless-variadic-functions
1766Accept variadic functions without named parameters.
1767
1768Although it is possible to define such a function, this is not very
1769useful as it is not possible to read the arguments.  This is only
1770supported for C as this construct is allowed by C++.
1771
1772@item -fno-asm
1773@opindex fno-asm
1774Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1775keyword, so that code can use these words as identifiers.  You can use
1776the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1777instead.  @option{-ansi} implies @option{-fno-asm}.
1778
1779In C++, this switch only affects the @code{typeof} keyword, since
1780@code{asm} and @code{inline} are standard keywords.  You may want to
1781use the @option{-fno-gnu-keywords} flag instead, which has the same
1782effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1783switch only affects the @code{asm} and @code{typeof} keywords, since
1784@code{inline} is a standard keyword in ISO C99.
1785
1786@item -fno-builtin
1787@itemx -fno-builtin-@var{function}
1788@opindex fno-builtin
1789@cindex built-in functions
1790Don't recognize built-in functions that do not begin with
1791@samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1792functions provided by GCC}, for details of the functions affected,
1793including those which are not built-in functions when @option{-ansi} or
1794@option{-std} options for strict ISO C conformance are used because they
1795do not have an ISO standard meaning.
1796
1797GCC normally generates special code to handle certain built-in functions
1798more efficiently; for instance, calls to @code{alloca} may become single
1799instructions which adjust the stack directly, and calls to @code{memcpy}
1800may become inline copy loops.  The resulting code is often both smaller
1801and faster, but since the function calls no longer appear as such, you
1802cannot set a breakpoint on those calls, nor can you change the behavior
1803of the functions by linking with a different library.  In addition,
1804when a function is recognized as a built-in function, GCC may use
1805information about that function to warn about problems with calls to
1806that function, or to generate more efficient code, even if the
1807resulting code still contains calls to that function.  For example,
1808warnings are given with @option{-Wformat} for bad calls to
1809@code{printf} when @code{printf} is built in and @code{strlen} is
1810known not to modify global memory.
1811
1812With the @option{-fno-builtin-@var{function}} option
1813only the built-in function @var{function} is
1814disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1815function is named that is not built-in in this version of GCC, this
1816option is ignored.  There is no corresponding
1817@option{-fbuiltin-@var{function}} option; if you wish to enable
1818built-in functions selectively when using @option{-fno-builtin} or
1819@option{-ffreestanding}, you may define macros such as:
1820
1821@smallexample
1822#define abs(n)          __builtin_abs ((n))
1823#define strcpy(d, s)    __builtin_strcpy ((d), (s))
1824@end smallexample
1825
1826@item -fhosted
1827@opindex fhosted
1828@cindex hosted environment
1829
1830Assert that compilation targets a hosted environment.  This implies
1831@option{-fbuiltin}.  A hosted environment is one in which the
1832entire standard library is available, and in which @code{main} has a return
1833type of @code{int}.  Examples are nearly everything except a kernel.
1834This is equivalent to @option{-fno-freestanding}.
1835
1836@item -ffreestanding
1837@opindex ffreestanding
1838@cindex hosted environment
1839
1840Assert that compilation targets a freestanding environment.  This
1841implies @option{-fno-builtin}.  A freestanding environment
1842is one in which the standard library may not exist, and program startup may
1843not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1844This is equivalent to @option{-fno-hosted}.
1845
1846@xref{Standards,,Language Standards Supported by GCC}, for details of
1847freestanding and hosted environments.
1848
1849@item -fopenmp
1850@opindex fopenmp
1851@cindex OpenMP parallel
1852Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1853@code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1854compiler generates parallel code according to the OpenMP Application
1855Program Interface v4.0 @w{@uref{http://www.openmp.org/}}.  This option
1856implies @option{-pthread}, and thus is only supported on targets that
1857have support for @option{-pthread}. @option{-fopenmp} implies
1858@option{-fopenmp-simd}.
1859
1860@item -fopenmp-simd
1861@opindex fopenmp-simd
1862@cindex OpenMP SIMD
1863@cindex SIMD
1864Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
1865in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
1866are ignored.
1867
1868@item -fcilkplus
1869@opindex fcilkplus
1870@cindex Enable Cilk Plus
1871Enable the usage of Cilk Plus language extension features for C/C++.
1872When the option @option{-fcilkplus} is specified, enable the usage of
1873the Cilk Plus Language extension features for C/C++.  The present
1874implementation follows ABI version 1.2.  This is an experimental
1875feature that is only partially complete, and whose interface may
1876change in future versions of GCC as the official specification
1877changes.  Currently, all features but @code{_Cilk_for} have been
1878implemented.
1879
1880@item -fgnu-tm
1881@opindex fgnu-tm
1882When the option @option{-fgnu-tm} is specified, the compiler
1883generates code for the Linux variant of Intel's current Transactional
1884Memory ABI specification document (Revision 1.1, May 6 2009).  This is
1885an experimental feature whose interface may change in future versions
1886of GCC, as the official specification changes.  Please note that not
1887all architectures are supported for this feature.
1888
1889For more information on GCC's support for transactional memory,
1890@xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
1891Transactional Memory Library}.
1892
1893Note that the transactional memory feature is not supported with
1894non-call exceptions (@option{-fnon-call-exceptions}).
1895
1896@item -fms-extensions
1897@opindex fms-extensions
1898Accept some non-standard constructs used in Microsoft header files.
1899
1900In C++ code, this allows member names in structures to be similar
1901to previous types declarations.
1902
1903@smallexample
1904typedef int UOW;
1905struct ABC @{
1906  UOW UOW;
1907@};
1908@end smallexample
1909
1910Some cases of unnamed fields in structures and unions are only
1911accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1912fields within structs/unions}, for details.
1913
1914Note that this option is off for all targets but i?86 and x86_64
1915targets using ms-abi.
1916@item -fplan9-extensions
1917Accept some non-standard constructs used in Plan 9 code.
1918
1919This enables @option{-fms-extensions}, permits passing pointers to
1920structures with anonymous fields to functions that expect pointers to
1921elements of the type of the field, and permits referring to anonymous
1922fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
1923struct/union fields within structs/unions}, for details.  This is only
1924supported for C, not C++.
1925
1926@item -trigraphs
1927@opindex trigraphs
1928Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1929options for strict ISO C conformance) implies @option{-trigraphs}.
1930
1931@cindex traditional C language
1932@cindex C language, traditional
1933@item -traditional
1934@itemx -traditional-cpp
1935@opindex traditional-cpp
1936@opindex traditional
1937Formerly, these options caused GCC to attempt to emulate a pre-standard
1938C compiler.  They are now only supported with the @option{-E} switch.
1939The preprocessor continues to support a pre-standard mode.  See the GNU
1940CPP manual for details.
1941
1942@item -fcond-mismatch
1943@opindex fcond-mismatch
1944Allow conditional expressions with mismatched types in the second and
1945third arguments.  The value of such an expression is void.  This option
1946is not supported for C++.
1947
1948@item -flax-vector-conversions
1949@opindex flax-vector-conversions
1950Allow implicit conversions between vectors with differing numbers of
1951elements and/or incompatible element types.  This option should not be
1952used for new code.
1953
1954@item -funsigned-char
1955@opindex funsigned-char
1956Let the type @code{char} be unsigned, like @code{unsigned char}.
1957
1958Each kind of machine has a default for what @code{char} should
1959be.  It is either like @code{unsigned char} by default or like
1960@code{signed char} by default.
1961
1962Ideally, a portable program should always use @code{signed char} or
1963@code{unsigned char} when it depends on the signedness of an object.
1964But many programs have been written to use plain @code{char} and
1965expect it to be signed, or expect it to be unsigned, depending on the
1966machines they were written for.  This option, and its inverse, let you
1967make such a program work with the opposite default.
1968
1969The type @code{char} is always a distinct type from each of
1970@code{signed char} or @code{unsigned char}, even though its behavior
1971is always just like one of those two.
1972
1973@item -fsigned-char
1974@opindex fsigned-char
1975Let the type @code{char} be signed, like @code{signed char}.
1976
1977Note that this is equivalent to @option{-fno-unsigned-char}, which is
1978the negative form of @option{-funsigned-char}.  Likewise, the option
1979@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1980
1981@item -fsigned-bitfields
1982@itemx -funsigned-bitfields
1983@itemx -fno-signed-bitfields
1984@itemx -fno-unsigned-bitfields
1985@opindex fsigned-bitfields
1986@opindex funsigned-bitfields
1987@opindex fno-signed-bitfields
1988@opindex fno-unsigned-bitfields
1989These options control whether a bit-field is signed or unsigned, when the
1990declaration does not use either @code{signed} or @code{unsigned}.  By
1991default, such a bit-field is signed, because this is consistent: the
1992basic integer types such as @code{int} are signed types.
1993@end table
1994
1995@node C++ Dialect Options
1996@section Options Controlling C++ Dialect
1997
1998@cindex compiler options, C++
1999@cindex C++ options, command-line
2000@cindex options, C++
2001This section describes the command-line options that are only meaningful
2002for C++ programs.  You can also use most of the GNU compiler options
2003regardless of what language your program is in.  For example, you
2004might compile a file @code{firstClass.C} like this:
2005
2006@smallexample
2007g++ -g -frepo -O -c firstClass.C
2008@end smallexample
2009
2010@noindent
2011In this example, only @option{-frepo} is an option meant
2012only for C++ programs; you can use the other options with any
2013language supported by GCC@.
2014
2015Here is a list of options that are @emph{only} for compiling C++ programs:
2016
2017@table @gcctabopt
2018
2019@item -fabi-version=@var{n}
2020@opindex fabi-version
2021Use version @var{n} of the C++ ABI@.  The default is version 2.
2022
2023Version 0 refers to the version conforming most closely to
2024the C++ ABI specification.  Therefore, the ABI obtained using version 0
2025will change in different versions of G++ as ABI bugs are fixed.
2026
2027Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.
2028
2029Version 2 is the version of the C++ ABI that first appeared in G++ 3.4.
2030
2031Version 3 corrects an error in mangling a constant address as a
2032template argument.
2033
2034Version 4, which first appeared in G++ 4.5, implements a standard
2035mangling for vector types.
2036
2037Version 5, which first appeared in G++ 4.6, corrects the mangling of
2038attribute const/volatile on function pointer types, decltype of a
2039plain decl, and use of a function parameter in the declaration of
2040another parameter.
2041
2042Version 6, which first appeared in G++ 4.7, corrects the promotion
2043behavior of C++11 scoped enums and the mangling of template argument
2044packs, const/static_cast, prefix ++ and --, and a class scope function
2045used as a template argument.
2046
2047See also @option{-Wabi}.
2048
2049@item -fno-access-control
2050@opindex fno-access-control
2051Turn off all access checking.  This switch is mainly useful for working
2052around bugs in the access control code.
2053
2054@item -fcheck-new
2055@opindex fcheck-new
2056Check that the pointer returned by @code{operator new} is non-null
2057before attempting to modify the storage allocated.  This check is
2058normally unnecessary because the C++ standard specifies that
2059@code{operator new} only returns @code{0} if it is declared
2060@samp{throw()}, in which case the compiler always checks the
2061return value even without this option.  In all other cases, when
2062@code{operator new} has a non-empty exception specification, memory
2063exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
2064@samp{new (nothrow)}.
2065
2066@item -fconstexpr-depth=@var{n}
2067@opindex fconstexpr-depth
2068Set the maximum nested evaluation depth for C++11 constexpr functions
2069to @var{n}.  A limit is needed to detect endless recursion during
2070constant expression evaluation.  The minimum specified by the standard
2071is 512.
2072
2073@item -fdeduce-init-list
2074@opindex fdeduce-init-list
2075Enable deduction of a template type parameter as
2076@code{std::initializer_list} from a brace-enclosed initializer list, i.e.@:
2077
2078@smallexample
2079template <class T> auto forward(T t) -> decltype (realfn (t))
2080@{
2081  return realfn (t);
2082@}
2083
2084void f()
2085@{
2086  forward(@{1,2@}); // call forward<std::initializer_list<int>>
2087@}
2088@end smallexample
2089
2090This deduction was implemented as a possible extension to the
2091originally proposed semantics for the C++11 standard, but was not part
2092of the final standard, so it is disabled by default.  This option is
2093deprecated, and may be removed in a future version of G++.
2094
2095@item -ffriend-injection
2096@opindex ffriend-injection
2097Inject friend functions into the enclosing namespace, so that they are
2098visible outside the scope of the class in which they are declared.
2099Friend functions were documented to work this way in the old Annotated
2100C++ Reference Manual, and versions of G++ before 4.1 always worked
2101that way.  However, in ISO C++ a friend function that is not declared
2102in an enclosing scope can only be found using argument dependent
2103lookup.  This option causes friends to be injected as they were in
2104earlier releases.
2105
2106This option is for compatibility, and may be removed in a future
2107release of G++.
2108
2109@item -fno-elide-constructors
2110@opindex fno-elide-constructors
2111The C++ standard allows an implementation to omit creating a temporary
2112that is only used to initialize another object of the same type.
2113Specifying this option disables that optimization, and forces G++ to
2114call the copy constructor in all cases.
2115
2116@item -fno-enforce-eh-specs
2117@opindex fno-enforce-eh-specs
2118Don't generate code to check for violation of exception specifications
2119at run time.  This option violates the C++ standard, but may be useful
2120for reducing code size in production builds, much like defining
2121@samp{NDEBUG}.  This does not give user code permission to throw
2122exceptions in violation of the exception specifications; the compiler
2123still optimizes based on the specifications, so throwing an
2124unexpected exception results in undefined behavior at run time.
2125
2126@item -fextern-tls-init
2127@itemx -fno-extern-tls-init
2128@opindex fextern-tls-init
2129@opindex fno-extern-tls-init
2130The C++11 and OpenMP standards allow @samp{thread_local} and
2131@samp{threadprivate} variables to have dynamic (runtime)
2132initialization.  To support this, any use of such a variable goes
2133through a wrapper function that performs any necessary initialization.
2134When the use and definition of the variable are in the same
2135translation unit, this overhead can be optimized away, but when the
2136use is in a different translation unit there is significant overhead
2137even if the variable doesn't actually need dynamic initialization.  If
2138the programmer can be sure that no use of the variable in a
2139non-defining TU needs to trigger dynamic initialization (either
2140because the variable is statically initialized, or a use of the
2141variable in the defining TU will be executed before any uses in
2142another TU), they can avoid this overhead with the
2143@option{-fno-extern-tls-init} option.
2144
2145On targets that support symbol aliases, the default is
2146@option{-fextern-tls-init}.  On targets that do not support symbol
2147aliases, the default is @option{-fno-extern-tls-init}.
2148
2149@item -ffor-scope
2150@itemx -fno-for-scope
2151@opindex ffor-scope
2152@opindex fno-for-scope
2153If @option{-ffor-scope} is specified, the scope of variables declared in
2154a @i{for-init-statement} is limited to the @samp{for} loop itself,
2155as specified by the C++ standard.
2156If @option{-fno-for-scope} is specified, the scope of variables declared in
2157a @i{for-init-statement} extends to the end of the enclosing scope,
2158as was the case in old versions of G++, and other (traditional)
2159implementations of C++.
2160
2161If neither flag is given, the default is to follow the standard,
2162but to allow and give a warning for old-style code that would
2163otherwise be invalid, or have different behavior.
2164
2165@item -fno-gnu-keywords
2166@opindex fno-gnu-keywords
2167Do not recognize @code{typeof} as a keyword, so that code can use this
2168word as an identifier.  You can use the keyword @code{__typeof__} instead.
2169@option{-ansi} implies @option{-fno-gnu-keywords}.
2170
2171@item -fno-implicit-templates
2172@opindex fno-implicit-templates
2173Never emit code for non-inline templates that are instantiated
2174implicitly (i.e.@: by use); only emit code for explicit instantiations.
2175@xref{Template Instantiation}, for more information.
2176
2177@item -fno-implicit-inline-templates
2178@opindex fno-implicit-inline-templates
2179Don't emit code for implicit instantiations of inline templates, either.
2180The default is to handle inlines differently so that compiles with and
2181without optimization need the same set of explicit instantiations.
2182
2183@item -fno-implement-inlines
2184@opindex fno-implement-inlines
2185To save space, do not emit out-of-line copies of inline functions
2186controlled by @samp{#pragma implementation}.  This causes linker
2187errors if these functions are not inlined everywhere they are called.
2188
2189@item -fms-extensions
2190@opindex fms-extensions
2191Disable Wpedantic warnings about constructs used in MFC, such as implicit
2192int and getting a pointer to member function via non-standard syntax.
2193
2194@item -fno-nonansi-builtins
2195@opindex fno-nonansi-builtins
2196Disable built-in declarations of functions that are not mandated by
2197ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
2198@code{index}, @code{bzero}, @code{conjf}, and other related functions.
2199
2200@item -fnothrow-opt
2201@opindex fnothrow-opt
2202Treat a @code{throw()} exception specification as if it were a
2203@code{noexcept} specification to reduce or eliminate the text size
2204overhead relative to a function with no exception specification.  If
2205the function has local variables of types with non-trivial
2206destructors, the exception specification actually makes the
2207function smaller because the EH cleanups for those variables can be
2208optimized away.  The semantic effect is that an exception thrown out of
2209a function with such an exception specification results in a call
2210to @code{terminate} rather than @code{unexpected}.
2211
2212@item -fno-operator-names
2213@opindex fno-operator-names
2214Do not treat the operator name keywords @code{and}, @code{bitand},
2215@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
2216synonyms as keywords.
2217
2218@item -fno-optional-diags
2219@opindex fno-optional-diags
2220Disable diagnostics that the standard says a compiler does not need to
2221issue.  Currently, the only such diagnostic issued by G++ is the one for
2222a name having multiple meanings within a class.
2223
2224@item -fpermissive
2225@opindex fpermissive
2226Downgrade some diagnostics about nonconformant code from errors to
2227warnings.  Thus, using @option{-fpermissive} allows some
2228nonconforming code to compile.
2229
2230@item -fno-pretty-templates
2231@opindex fno-pretty-templates
2232When an error message refers to a specialization of a function
2233template, the compiler normally prints the signature of the
2234template followed by the template arguments and any typedefs or
2235typenames in the signature (e.g. @code{void f(T) [with T = int]}
2236rather than @code{void f(int)}) so that it's clear which template is
2237involved.  When an error message refers to a specialization of a class
2238template, the compiler omits any template arguments that match
2239the default template arguments for that template.  If either of these
2240behaviors make it harder to understand the error message rather than
2241easier, you can use @option{-fno-pretty-templates} to disable them.
2242
2243@item -frepo
2244@opindex frepo
2245Enable automatic template instantiation at link time.  This option also
2246implies @option{-fno-implicit-templates}.  @xref{Template
2247Instantiation}, for more information.
2248
2249@item -fno-rtti
2250@opindex fno-rtti
2251Disable generation of information about every class with virtual
2252functions for use by the C++ run-time type identification features
2253(@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
2254of the language, you can save some space by using this flag.  Note that
2255exception handling uses the same information, but G++ generates it as
2256needed. The @samp{dynamic_cast} operator can still be used for casts that
2257do not require run-time type information, i.e.@: casts to @code{void *} or to
2258unambiguous base classes.
2259
2260@item -fstats
2261@opindex fstats
2262Emit statistics about front-end processing at the end of the compilation.
2263This information is generally only useful to the G++ development team.
2264
2265@item -fstrict-enums
2266@opindex fstrict-enums
2267Allow the compiler to optimize using the assumption that a value of
2268enumerated type can only be one of the values of the enumeration (as
2269defined in the C++ standard; basically, a value that can be
2270represented in the minimum number of bits needed to represent all the
2271enumerators).  This assumption may not be valid if the program uses a
2272cast to convert an arbitrary integer value to the enumerated type.
2273
2274@item -ftemplate-backtrace-limit=@var{n}
2275@opindex ftemplate-backtrace-limit
2276Set the maximum number of template instantiation notes for a single
2277warning or error to @var{n}.  The default value is 10.
2278
2279@item -ftemplate-depth=@var{n}
2280@opindex ftemplate-depth
2281Set the maximum instantiation depth for template classes to @var{n}.
2282A limit on the template instantiation depth is needed to detect
2283endless recursions during template class instantiation.  ANSI/ISO C++
2284conforming programs must not rely on a maximum depth greater than 17
2285(changed to 1024 in C++11).  The default value is 900, as the compiler
2286can run out of stack space before hitting 1024 in some situations.
2287
2288@item -fno-threadsafe-statics
2289@opindex fno-threadsafe-statics
2290Do not emit the extra code to use the routines specified in the C++
2291ABI for thread-safe initialization of local statics.  You can use this
2292option to reduce code size slightly in code that doesn't need to be
2293thread-safe.
2294
2295@item -fuse-cxa-atexit
2296@opindex fuse-cxa-atexit
2297Register destructors for objects with static storage duration with the
2298@code{__cxa_atexit} function rather than the @code{atexit} function.
2299This option is required for fully standards-compliant handling of static
2300destructors, but only works if your C library supports
2301@code{__cxa_atexit}.
2302
2303@item -fno-use-cxa-get-exception-ptr
2304@opindex fno-use-cxa-get-exception-ptr
2305Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2306causes @code{std::uncaught_exception} to be incorrect, but is necessary
2307if the runtime routine is not available.
2308
2309@item -fvisibility-inlines-hidden
2310@opindex fvisibility-inlines-hidden
2311This switch declares that the user does not attempt to compare
2312pointers to inline functions or methods where the addresses of the two functions
2313are taken in different shared objects.
2314
2315The effect of this is that GCC may, effectively, mark inline methods with
2316@code{__attribute__ ((visibility ("hidden")))} so that they do not
2317appear in the export table of a DSO and do not require a PLT indirection
2318when used within the DSO@.  Enabling this option can have a dramatic effect
2319on load and link times of a DSO as it massively reduces the size of the
2320dynamic export table when the library makes heavy use of templates.
2321
2322The behavior of this switch is not quite the same as marking the
2323methods as hidden directly, because it does not affect static variables
2324local to the function or cause the compiler to deduce that
2325the function is defined in only one shared object.
2326
2327You may mark a method as having a visibility explicitly to negate the
2328effect of the switch for that method.  For example, if you do want to
2329compare pointers to a particular inline method, you might mark it as
2330having default visibility.  Marking the enclosing class with explicit
2331visibility has no effect.
2332
2333Explicitly instantiated inline methods are unaffected by this option
2334as their linkage might otherwise cross a shared library boundary.
2335@xref{Template Instantiation}.
2336
2337@item -fvisibility-ms-compat
2338@opindex fvisibility-ms-compat
2339This flag attempts to use visibility settings to make GCC's C++
2340linkage model compatible with that of Microsoft Visual Studio.
2341
2342The flag makes these changes to GCC's linkage model:
2343
2344@enumerate
2345@item
2346It sets the default visibility to @code{hidden}, like
2347@option{-fvisibility=hidden}.
2348
2349@item
2350Types, but not their members, are not hidden by default.
2351
2352@item
2353The One Definition Rule is relaxed for types without explicit
2354visibility specifications that are defined in more than one
2355shared object: those declarations are permitted if they are
2356permitted when this option is not used.
2357@end enumerate
2358
2359In new code it is better to use @option{-fvisibility=hidden} and
2360export those classes that are intended to be externally visible.
2361Unfortunately it is possible for code to rely, perhaps accidentally,
2362on the Visual Studio behavior.
2363
2364Among the consequences of these changes are that static data members
2365of the same type with the same name but defined in different shared
2366objects are different, so changing one does not change the other;
2367and that pointers to function members defined in different shared
2368objects may not compare equal.  When this flag is given, it is a
2369violation of the ODR to define types with the same name differently.
2370
2371@item -fvtable-verify=@var{std|preinit|none}
2372@opindex fvtable-verify
2373Turn on (or off, if using @option{-fvtable-verify=none}) the security
2374feature that verifies at runtime, for every virtual call that is made, that
2375the vtable pointer through which the call is made is valid for the type of
2376the object, and has not been corrupted or overwritten.  If an invalid vtable
2377pointer is detected (at runtime), an error is reported and execution of the
2378program is immediately halted.
2379
2380This option causes runtime data structures to be built, at program start up,
2381for verifying the vtable pointers.  The options @code{std} and @code{preinit}
2382control the timing of when these data structures are built.  In both cases the
2383data structures are built before execution reaches 'main'.  The
2384@option{-fvtable-verify=std} causes these data structure to be built after the
2385shared libraries have been loaded and initialized.
2386@option{-fvtable-verify=preinit} causes them to be built before the shared
2387libraries have been loaded and initialized.
2388
2389If this option appears multiple times in the compiler line, with different
2390values specified, 'none' will take highest priority over both 'std' and
2391'preinit'; 'preinit' will take priority over 'std'.
2392
2393@item -fvtv-debug
2394@opindex (fvtv-debug)
2395Causes debug versions of the runtime functions for the vtable verification
2396feature to be called.  This assumes the @option{-fvtable-verify=std} or
2397@option{-fvtable-verify=preinit} has been used.  This flag will also cause the
2398compiler to keep track of which vtable pointers it found for each class, and
2399record that information in the file ``vtv_set_ptr_data.log'', in the dump
2400file directory on the user's machine.
2401
2402Note:  This feature APPENDS data to the log file. If you want a fresh log
2403file, be sure to delete any existing one.
2404
2405@item -fvtv-counts
2406@opindex fvtv-counts
2407This is a debugging flag.  When used in conjunction with
2408@option{-fvtable-verify=std} or @option{-fvtable-verify=preinit}, this
2409causes the compiler to keep track of the total number of virtual calls
2410it encountered and the number of verifications it inserted.  It also
2411counts the number of calls to certain runtime library functions
2412that it inserts.  This information, for each compilation unit, is written
2413to a file named ``vtv_count_data.log'', in the dump_file directory on
2414the user's machine.   It also counts the size of the vtable pointer sets
2415for each class, and writes this information to ``vtv_class_set_sizes.log''
2416in the same directory.
2417
2418Note:  This feature APPENDS data to the log files.  To get a fresh log
2419files, be sure to delete any existing ones.
2420
2421@item -fno-weak
2422@opindex fno-weak
2423Do not use weak symbol support, even if it is provided by the linker.
2424By default, G++ uses weak symbols if they are available.  This
2425option exists only for testing, and should not be used by end-users;
2426it results in inferior code and has no benefits.  This option may
2427be removed in a future release of G++.
2428
2429@item -nostdinc++
2430@opindex nostdinc++
2431Do not search for header files in the standard directories specific to
2432C++, but do still search the other standard directories.  (This option
2433is used when building the C++ library.)
2434@end table
2435
2436In addition, these optimization, warning, and code generation options
2437have meanings only for C++ programs:
2438
2439@table @gcctabopt
2440@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2441@opindex Wabi
2442@opindex Wno-abi
2443Warn when G++ generates code that is probably not compatible with the
2444vendor-neutral C++ ABI@.  Although an effort has been made to warn about
2445all such cases, there are probably some cases that are not warned about,
2446even though G++ is generating incompatible code.  There may also be
2447cases where warnings are emitted even though the code that is generated
2448is compatible.
2449
2450You should rewrite your code to avoid these warnings if you are
2451concerned about the fact that code generated by G++ may not be binary
2452compatible with code generated by other compilers.
2453
2454The known incompatibilities in @option{-fabi-version=2} (the default) include:
2455
2456@itemize @bullet
2457
2458@item
2459A template with a non-type template parameter of reference type is
2460mangled incorrectly:
2461@smallexample
2462extern int N;
2463template <int &> struct S @{@};
2464void n (S<N>) @{2@}
2465@end smallexample
2466
2467This is fixed in @option{-fabi-version=3}.
2468
2469@item
2470SIMD vector types declared using @code{__attribute ((vector_size))} are
2471mangled in a non-standard way that does not allow for overloading of
2472functions taking vectors of different sizes.
2473
2474The mangling is changed in @option{-fabi-version=4}.
2475@end itemize
2476
2477The known incompatibilities in @option{-fabi-version=1} include:
2478
2479@itemize @bullet
2480
2481@item
2482Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2483pack data into the same byte as a base class.  For example:
2484
2485@smallexample
2486struct A @{ virtual void f(); int f1 : 1; @};
2487struct B : public A @{ int f2 : 1; @};
2488@end smallexample
2489
2490@noindent
2491In this case, G++ places @code{B::f2} into the same byte
2492as @code{A::f1}; other compilers do not.  You can avoid this problem
2493by explicitly padding @code{A} so that its size is a multiple of the
2494byte size on your platform; that causes G++ and other compilers to
2495lay out @code{B} identically.
2496
2497@item
2498Incorrect handling of tail-padding for virtual bases.  G++ does not use
2499tail padding when laying out virtual bases.  For example:
2500
2501@smallexample
2502struct A @{ virtual void f(); char c1; @};
2503struct B @{ B(); char c2; @};
2504struct C : public A, public virtual B @{@};
2505@end smallexample
2506
2507@noindent
2508In this case, G++ does not place @code{B} into the tail-padding for
2509@code{A}; other compilers do.  You can avoid this problem by
2510explicitly padding @code{A} so that its size is a multiple of its
2511alignment (ignoring virtual base classes); that causes G++ and other
2512compilers to lay out @code{C} identically.
2513
2514@item
2515Incorrect handling of bit-fields with declared widths greater than that
2516of their underlying types, when the bit-fields appear in a union.  For
2517example:
2518
2519@smallexample
2520union U @{ int i : 4096; @};
2521@end smallexample
2522
2523@noindent
2524Assuming that an @code{int} does not have 4096 bits, G++ makes the
2525union too small by the number of bits in an @code{int}.
2526
2527@item
2528Empty classes can be placed at incorrect offsets.  For example:
2529
2530@smallexample
2531struct A @{@};
2532
2533struct B @{
2534  A a;
2535  virtual void f ();
2536@};
2537
2538struct C : public B, public A @{@};
2539@end smallexample
2540
2541@noindent
2542G++ places the @code{A} base class of @code{C} at a nonzero offset;
2543it should be placed at offset zero.  G++ mistakenly believes that the
2544@code{A} data member of @code{B} is already at offset zero.
2545
2546@item
2547Names of template functions whose types involve @code{typename} or
2548template template parameters can be mangled incorrectly.
2549
2550@smallexample
2551template <typename Q>
2552void f(typename Q::X) @{@}
2553
2554template <template <typename> class Q>
2555void f(typename Q<int>::X) @{@}
2556@end smallexample
2557
2558@noindent
2559Instantiations of these templates may be mangled incorrectly.
2560
2561@end itemize
2562
2563It also warns about psABI-related changes.  The known psABI changes at this
2564point include:
2565
2566@itemize @bullet
2567
2568@item
2569For SysV/x86-64, unions with @code{long double} members are
2570passed in memory as specified in psABI.  For example:
2571
2572@smallexample
2573union U @{
2574  long double ld;
2575  int i;
2576@};
2577@end smallexample
2578
2579@noindent
2580@code{union U} is always passed in memory.
2581
2582@end itemize
2583
2584@item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2585@opindex Wctor-dtor-privacy
2586@opindex Wno-ctor-dtor-privacy
2587Warn when a class seems unusable because all the constructors or
2588destructors in that class are private, and it has neither friends nor
2589public static member functions.  Also warn if there are no non-private
2590methods, and there's at least one private member function that isn't
2591a constructor or destructor.
2592
2593@item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
2594@opindex Wdelete-non-virtual-dtor
2595@opindex Wno-delete-non-virtual-dtor
2596Warn when @samp{delete} is used to destroy an instance of a class that
2597has virtual functions and non-virtual destructor. It is unsafe to delete
2598an instance of a derived class through a pointer to a base class if the
2599base class does not have a virtual destructor.  This warning is enabled
2600by @option{-Wall}.
2601
2602@item -Wliteral-suffix @r{(C++ and Objective-C++ only)}
2603@opindex Wliteral-suffix
2604@opindex Wno-literal-suffix
2605Warn when a string or character literal is followed by a ud-suffix which does
2606not begin with an underscore.  As a conforming extension, GCC treats such
2607suffixes as separate preprocessing tokens in order to maintain backwards
2608compatibility with code that uses formatting macros from @code{<inttypes.h>}.
2609For example:
2610
2611@smallexample
2612#define __STDC_FORMAT_MACROS
2613#include <inttypes.h>
2614#include <stdio.h>
2615
2616int main() @{
2617  int64_t i64 = 123;
2618  printf("My int64: %"PRId64"\n", i64);
2619@}
2620@end smallexample
2621
2622In this case, @code{PRId64} is treated as a separate preprocessing token.
2623
2624This warning is enabled by default.
2625
2626@item -Wnarrowing @r{(C++ and Objective-C++ only)}
2627@opindex Wnarrowing
2628@opindex Wno-narrowing
2629Warn when a narrowing conversion prohibited by C++11 occurs within
2630@samp{@{ @}}, e.g.
2631
2632@smallexample
2633int i = @{ 2.2 @}; // error: narrowing from double to int
2634@end smallexample
2635
2636This flag is included in @option{-Wall} and @option{-Wc++11-compat}.
2637
2638With @option{-std=c++11}, @option{-Wno-narrowing} suppresses the diagnostic
2639required by the standard.  Note that this does not affect the meaning
2640of well-formed code; narrowing conversions are still considered
2641ill-formed in SFINAE context.
2642
2643@item -Wnoexcept @r{(C++ and Objective-C++ only)}
2644@opindex Wnoexcept
2645@opindex Wno-noexcept
2646Warn when a noexcept-expression evaluates to false because of a call
2647to a function that does not have a non-throwing exception
2648specification (i.e. @samp{throw()} or @samp{noexcept}) but is known by
2649the compiler to never throw an exception.
2650
2651@item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2652@opindex Wnon-virtual-dtor
2653@opindex Wno-non-virtual-dtor
2654Warn when a class has virtual functions and an accessible non-virtual
2655destructor itself or in an accessible polymorphic base class, in which
2656case it is possible but unsafe to delete an instance of a derived
2657class through a pointer to the class itself or base class.  This
2658warning is automatically enabled if @option{-Weffc++} is specified.
2659
2660@item -Wreorder @r{(C++ and Objective-C++ only)}
2661@opindex Wreorder
2662@opindex Wno-reorder
2663@cindex reordering, warning
2664@cindex warning for reordering of member initializers
2665Warn when the order of member initializers given in the code does not
2666match the order in which they must be executed.  For instance:
2667
2668@smallexample
2669struct A @{
2670  int i;
2671  int j;
2672  A(): j (0), i (1) @{ @}
2673@};
2674@end smallexample
2675
2676@noindent
2677The compiler rearranges the member initializers for @samp{i}
2678and @samp{j} to match the declaration order of the members, emitting
2679a warning to that effect.  This warning is enabled by @option{-Wall}.
2680
2681@item -fext-numeric-literals @r{(C++ and Objective-C++ only)}
2682@opindex fext-numeric-literals
2683@opindex fno-ext-numeric-literals
2684Accept imaginary, fixed-point, or machine-defined
2685literal number suffixes as GNU extensions.
2686When this option is turned off these suffixes are treated
2687as C++11 user-defined literal numeric suffixes.
2688This is on by default for all pre-C++11 dialects and all GNU dialects:
2689@option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11},
2690@option{-std=gnu++1y}.
2691This option is off by default
2692for ISO C++11 onwards (@option{-std=c++11}, ...).
2693@end table
2694
2695The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2696
2697@table @gcctabopt
2698@item -Weffc++ @r{(C++ and Objective-C++ only)}
2699@opindex Weffc++
2700@opindex Wno-effc++
2701Warn about violations of the following style guidelines from Scott Meyers'
2702@cite{Effective C++} series of books:
2703
2704@itemize @bullet
2705@item
2706Define a copy constructor and an assignment operator for classes
2707with dynamically-allocated memory.
2708
2709@item
2710Prefer initialization to assignment in constructors.
2711
2712@item
2713Have @code{operator=} return a reference to @code{*this}.
2714
2715@item
2716Don't try to return a reference when you must return an object.
2717
2718@item
2719Distinguish between prefix and postfix forms of increment and
2720decrement operators.
2721
2722@item
2723Never overload @code{&&}, @code{||}, or @code{,}.
2724
2725@end itemize
2726
2727This option also enables @option{-Wnon-virtual-dtor}, which is also
2728one of the effective C++ recommendations.  However, the check is
2729extended to warn about the lack of virtual destructor in accessible
2730non-polymorphic bases classes too.
2731
2732When selecting this option, be aware that the standard library
2733headers do not obey all of these guidelines; use @samp{grep -v}
2734to filter out those warnings.
2735
2736@item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2737@opindex Wstrict-null-sentinel
2738@opindex Wno-strict-null-sentinel
2739Warn about the use of an uncasted @code{NULL} as sentinel.  When
2740compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2741to @code{__null}.  Although it is a null pointer constant rather than a
2742null pointer, it is guaranteed to be of the same size as a pointer.
2743But this use is not portable across different compilers.
2744
2745@item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2746@opindex Wno-non-template-friend
2747@opindex Wnon-template-friend
2748Disable warnings when non-templatized friend functions are declared
2749within a template.  Since the advent of explicit template specification
2750support in G++, if the name of the friend is an unqualified-id (i.e.,
2751@samp{friend foo(int)}), the C++ language specification demands that the
2752friend declare or define an ordinary, nontemplate function.  (Section
275314.5.3).  Before G++ implemented explicit specification, unqualified-ids
2754could be interpreted as a particular specialization of a templatized
2755function.  Because this non-conforming behavior is no longer the default
2756behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2757check existing code for potential trouble spots and is on by default.
2758This new compiler behavior can be turned off with
2759@option{-Wno-non-template-friend}, which keeps the conformant compiler code
2760but disables the helpful warning.
2761
2762@item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2763@opindex Wold-style-cast
2764@opindex Wno-old-style-cast
2765Warn if an old-style (C-style) cast to a non-void type is used within
2766a C++ program.  The new-style casts (@samp{dynamic_cast},
2767@samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2768less vulnerable to unintended effects and much easier to search for.
2769
2770@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2771@opindex Woverloaded-virtual
2772@opindex Wno-overloaded-virtual
2773@cindex overloaded virtual function, warning
2774@cindex warning for overloaded virtual function
2775Warn when a function declaration hides virtual functions from a
2776base class.  For example, in:
2777
2778@smallexample
2779struct A @{
2780  virtual void f();
2781@};
2782
2783struct B: public A @{
2784  void f(int);
2785@};
2786@end smallexample
2787
2788the @code{A} class version of @code{f} is hidden in @code{B}, and code
2789like:
2790
2791@smallexample
2792B* b;
2793b->f();
2794@end smallexample
2795
2796@noindent
2797fails to compile.
2798
2799@item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2800@opindex Wno-pmf-conversions
2801@opindex Wpmf-conversions
2802Disable the diagnostic for converting a bound pointer to member function
2803to a plain pointer.
2804
2805@item -Wsign-promo @r{(C++ and Objective-C++ only)}
2806@opindex Wsign-promo
2807@opindex Wno-sign-promo
2808Warn when overload resolution chooses a promotion from unsigned or
2809enumerated type to a signed type, over a conversion to an unsigned type of
2810the same size.  Previous versions of G++ tried to preserve
2811unsignedness, but the standard mandates the current behavior.
2812@end table
2813
2814@node Objective-C and Objective-C++ Dialect Options
2815@section Options Controlling Objective-C and Objective-C++ Dialects
2816
2817@cindex compiler options, Objective-C and Objective-C++
2818@cindex Objective-C and Objective-C++ options, command-line
2819@cindex options, Objective-C and Objective-C++
2820(NOTE: This manual does not describe the Objective-C and Objective-C++
2821languages themselves.  @xref{Standards,,Language Standards
2822Supported by GCC}, for references.)
2823
2824This section describes the command-line options that are only meaningful
2825for Objective-C and Objective-C++ programs.  You can also use most of
2826the language-independent GNU compiler options.
2827For example, you might compile a file @code{some_class.m} like this:
2828
2829@smallexample
2830gcc -g -fgnu-runtime -O -c some_class.m
2831@end smallexample
2832
2833@noindent
2834In this example, @option{-fgnu-runtime} is an option meant only for
2835Objective-C and Objective-C++ programs; you can use the other options with
2836any language supported by GCC@.
2837
2838Note that since Objective-C is an extension of the C language, Objective-C
2839compilations may also use options specific to the C front-end (e.g.,
2840@option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2841C++-specific options (e.g., @option{-Wabi}).
2842
2843Here is a list of options that are @emph{only} for compiling Objective-C
2844and Objective-C++ programs:
2845
2846@table @gcctabopt
2847@item -fconstant-string-class=@var{class-name}
2848@opindex fconstant-string-class
2849Use @var{class-name} as the name of the class to instantiate for each
2850literal string specified with the syntax @code{@@"@dots{}"}.  The default
2851class name is @code{NXConstantString} if the GNU runtime is being used, and
2852@code{NSConstantString} if the NeXT runtime is being used (see below).  The
2853@option{-fconstant-cfstrings} option, if also present, overrides the
2854@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2855to be laid out as constant CoreFoundation strings.
2856
2857@item -fgnu-runtime
2858@opindex fgnu-runtime
2859Generate object code compatible with the standard GNU Objective-C
2860runtime.  This is the default for most types of systems.
2861
2862@item -fnext-runtime
2863@opindex fnext-runtime
2864Generate output compatible with the NeXT runtime.  This is the default
2865for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2866@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2867used.
2868
2869@item -fno-nil-receivers
2870@opindex fno-nil-receivers
2871Assume that all Objective-C message dispatches (@code{[receiver
2872message:arg]}) in this translation unit ensure that the receiver is
2873not @code{nil}.  This allows for more efficient entry points in the
2874runtime to be used.  This option is only available in conjunction with
2875the NeXT runtime and ABI version 0 or 1.
2876
2877@item -fobjc-abi-version=@var{n}
2878@opindex fobjc-abi-version
2879Use version @var{n} of the Objective-C ABI for the selected runtime.
2880This option is currently supported only for the NeXT runtime.  In that
2881case, Version 0 is the traditional (32-bit) ABI without support for
2882properties and other Objective-C 2.0 additions.  Version 1 is the
2883traditional (32-bit) ABI with support for properties and other
2884Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
2885nothing is specified, the default is Version 0 on 32-bit target
2886machines, and Version 2 on 64-bit target machines.
2887
2888@item -fobjc-call-cxx-cdtors
2889@opindex fobjc-call-cxx-cdtors
2890For each Objective-C class, check if any of its instance variables is a
2891C++ object with a non-trivial default constructor.  If so, synthesize a
2892special @code{- (id) .cxx_construct} instance method which runs
2893non-trivial default constructors on any such instance variables, in order,
2894and then return @code{self}.  Similarly, check if any instance variable
2895is a C++ object with a non-trivial destructor, and if so, synthesize a
2896special @code{- (void) .cxx_destruct} method which runs
2897all such default destructors, in reverse order.
2898
2899The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
2900methods thusly generated only operate on instance variables
2901declared in the current Objective-C class, and not those inherited
2902from superclasses.  It is the responsibility of the Objective-C
2903runtime to invoke all such methods in an object's inheritance
2904hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
2905by the runtime immediately after a new object instance is allocated;
2906the @code{- (void) .cxx_destruct} methods are invoked immediately
2907before the runtime deallocates an object instance.
2908
2909As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2910support for invoking the @code{- (id) .cxx_construct} and
2911@code{- (void) .cxx_destruct} methods.
2912
2913@item -fobjc-direct-dispatch
2914@opindex fobjc-direct-dispatch
2915Allow fast jumps to the message dispatcher.  On Darwin this is
2916accomplished via the comm page.
2917
2918@item -fobjc-exceptions
2919@opindex fobjc-exceptions
2920Enable syntactic support for structured exception handling in
2921Objective-C, similar to what is offered by C++ and Java.  This option
2922is required to use the Objective-C keywords @code{@@try},
2923@code{@@throw}, @code{@@catch}, @code{@@finally} and
2924@code{@@synchronized}.  This option is available with both the GNU
2925runtime and the NeXT runtime (but not available in conjunction with
2926the NeXT runtime on Mac OS X 10.2 and earlier).
2927
2928@item -fobjc-gc
2929@opindex fobjc-gc
2930Enable garbage collection (GC) in Objective-C and Objective-C++
2931programs.  This option is only available with the NeXT runtime; the
2932GNU runtime has a different garbage collection implementation that
2933does not require special compiler flags.
2934
2935@item -fobjc-nilcheck
2936@opindex fobjc-nilcheck
2937For the NeXT runtime with version 2 of the ABI, check for a nil
2938receiver in method invocations before doing the actual method call.
2939This is the default and can be disabled using
2940@option{-fno-objc-nilcheck}.  Class methods and super calls are never
2941checked for nil in this way no matter what this flag is set to.
2942Currently this flag does nothing when the GNU runtime, or an older
2943version of the NeXT runtime ABI, is used.
2944
2945@item -fobjc-std=objc1
2946@opindex fobjc-std
2947Conform to the language syntax of Objective-C 1.0, the language
2948recognized by GCC 4.0.  This only affects the Objective-C additions to
2949the C/C++ language; it does not affect conformance to C/C++ standards,
2950which is controlled by the separate C/C++ dialect option flags.  When
2951this option is used with the Objective-C or Objective-C++ compiler,
2952any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
2953This is useful if you need to make sure that your Objective-C code can
2954be compiled with older versions of GCC@.
2955
2956@item -freplace-objc-classes
2957@opindex freplace-objc-classes
2958Emit a special marker instructing @command{ld(1)} not to statically link in
2959the resulting object file, and allow @command{dyld(1)} to load it in at
2960run time instead.  This is used in conjunction with the Fix-and-Continue
2961debugging mode, where the object file in question may be recompiled and
2962dynamically reloaded in the course of program execution, without the need
2963to restart the program itself.  Currently, Fix-and-Continue functionality
2964is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2965and later.
2966
2967@item -fzero-link
2968@opindex fzero-link
2969When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2970to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2971compile time) with static class references that get initialized at load time,
2972which improves run-time performance.  Specifying the @option{-fzero-link} flag
2973suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2974to be retained.  This is useful in Zero-Link debugging mode, since it allows
2975for individual class implementations to be modified during program execution.
2976The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
2977regardless of command-line options.
2978
2979@item -gen-decls
2980@opindex gen-decls
2981Dump interface declarations for all classes seen in the source file to a
2982file named @file{@var{sourcename}.decl}.
2983
2984@item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
2985@opindex Wassign-intercept
2986@opindex Wno-assign-intercept
2987Warn whenever an Objective-C assignment is being intercepted by the
2988garbage collector.
2989
2990@item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
2991@opindex Wno-protocol
2992@opindex Wprotocol
2993If a class is declared to implement a protocol, a warning is issued for
2994every method in the protocol that is not implemented by the class.  The
2995default behavior is to issue a warning for every method not explicitly
2996implemented in the class, even if a method implementation is inherited
2997from the superclass.  If you use the @option{-Wno-protocol} option, then
2998methods inherited from the superclass are considered to be implemented,
2999and no warning is issued for them.
3000
3001@item -Wselector @r{(Objective-C and Objective-C++ only)}
3002@opindex Wselector
3003@opindex Wno-selector
3004Warn if multiple methods of different types for the same selector are
3005found during compilation.  The check is performed on the list of methods
3006in the final stage of compilation.  Additionally, a check is performed
3007for each selector appearing in a @code{@@selector(@dots{})}
3008expression, and a corresponding method for that selector has been found
3009during compilation.  Because these checks scan the method table only at
3010the end of compilation, these warnings are not produced if the final
3011stage of compilation is not reached, for example because an error is
3012found during compilation, or because the @option{-fsyntax-only} option is
3013being used.
3014
3015@item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
3016@opindex Wstrict-selector-match
3017@opindex Wno-strict-selector-match
3018Warn if multiple methods with differing argument and/or return types are
3019found for a given selector when attempting to send a message using this
3020selector to a receiver of type @code{id} or @code{Class}.  When this flag
3021is off (which is the default behavior), the compiler omits such warnings
3022if any differences found are confined to types that share the same size
3023and alignment.
3024
3025@item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
3026@opindex Wundeclared-selector
3027@opindex Wno-undeclared-selector
3028Warn if a @code{@@selector(@dots{})} expression referring to an
3029undeclared selector is found.  A selector is considered undeclared if no
3030method with that name has been declared before the
3031@code{@@selector(@dots{})} expression, either explicitly in an
3032@code{@@interface} or @code{@@protocol} declaration, or implicitly in
3033an @code{@@implementation} section.  This option always performs its
3034checks as soon as a @code{@@selector(@dots{})} expression is found,
3035while @option{-Wselector} only performs its checks in the final stage of
3036compilation.  This also enforces the coding style convention
3037that methods and selectors must be declared before being used.
3038
3039@item -print-objc-runtime-info
3040@opindex print-objc-runtime-info
3041Generate C header describing the largest structure that is passed by
3042value, if any.
3043
3044@end table
3045
3046@node Language Independent Options
3047@section Options to Control Diagnostic Messages Formatting
3048@cindex options to control diagnostics formatting
3049@cindex diagnostic messages
3050@cindex message formatting
3051
3052Traditionally, diagnostic messages have been formatted irrespective of
3053the output device's aspect (e.g.@: its width, @dots{}).  You can use the
3054options described below
3055to control the formatting algorithm for diagnostic messages,
3056e.g.@: how many characters per line, how often source location
3057information should be reported.  Note that some language front ends may not
3058honor these options.
3059
3060@table @gcctabopt
3061@item -fmessage-length=@var{n}
3062@opindex fmessage-length
3063Try to format error messages so that they fit on lines of about @var{n}
3064characters.  The default is 72 characters for @command{g++} and 0 for the rest of
3065the front ends supported by GCC@.  If @var{n} is zero, then no
3066line-wrapping is done; each error message appears on a single
3067line.
3068
3069@item -fdiagnostics-show-location=once
3070@opindex fdiagnostics-show-location
3071Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
3072reporter to emit source location information @emph{once}; that is, in
3073case the message is too long to fit on a single physical line and has to
3074be wrapped, the source location won't be emitted (as prefix) again,
3075over and over, in subsequent continuation lines.  This is the default
3076behavior.
3077
3078@item -fdiagnostics-show-location=every-line
3079Only meaningful in line-wrapping mode.  Instructs the diagnostic
3080messages reporter to emit the same source location information (as
3081prefix) for physical lines that result from the process of breaking
3082a message which is too long to fit on a single line.
3083
3084@item -fdiagnostics-color[=@var{WHEN}]
3085@itemx -fno-diagnostics-color
3086@opindex fdiagnostics-color
3087@cindex highlight, color, colour
3088@vindex GCC_COLORS @r{environment variable}
3089Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
3090or @samp{auto}.  The default is @samp{never} if @env{GCC_COLORS} environment
3091variable isn't present in the environment, and @samp{auto} otherwise.
3092@samp{auto} means to use color only when the standard error is a terminal.
3093The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
3094aliases for @option{-fdiagnostics-color=always} and
3095@option{-fdiagnostics-color=never}, respectively.
3096
3097The colors are defined by the environment variable @env{GCC_COLORS}.
3098Its value is a colon-separated list of capabilities and Select Graphic
3099Rendition (SGR) substrings. SGR commands are interpreted by the
3100terminal or terminal emulator.  (See the section in the documentation
3101of your text terminal for permitted values and their meanings as
3102character attributes.)  These substring values are integers in decimal
3103representation and can be concatenated with semicolons.
3104Common values to concatenate include
3105@samp{1} for bold,
3106@samp{4} for underline,
3107@samp{5} for blink,
3108@samp{7} for inverse,
3109@samp{39} for default foreground color,
3110@samp{30} to @samp{37} for foreground colors,
3111@samp{90} to @samp{97} for 16-color mode foreground colors,
3112@samp{38;5;0} to @samp{38;5;255}
3113for 88-color and 256-color modes foreground colors,
3114@samp{49} for default background color,
3115@samp{40} to @samp{47} for background colors,
3116@samp{100} to @samp{107} for 16-color mode background colors,
3117and @samp{48;5;0} to @samp{48;5;255}
3118for 88-color and 256-color modes background colors.
3119
3120The default @env{GCC_COLORS} is
3121@samp{error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01}
3122where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
3123@samp{01;36} is bold cyan, @samp{01;32} is bold green and
3124@samp{01} is bold. Setting @env{GCC_COLORS} to the empty
3125string disables colors.
3126Supported capabilities are as follows.
3127
3128@table @code
3129@item error=
3130@vindex error GCC_COLORS @r{capability}
3131SGR substring for error: markers.
3132
3133@item warning=
3134@vindex warning GCC_COLORS @r{capability}
3135SGR substring for warning: markers.
3136
3137@item note=
3138@vindex note GCC_COLORS @r{capability}
3139SGR substring for note: markers.
3140
3141@item caret=
3142@vindex caret GCC_COLORS @r{capability}
3143SGR substring for caret line.
3144
3145@item locus=
3146@vindex locus GCC_COLORS @r{capability}
3147SGR substring for location information, @samp{file:line} or
3148@samp{file:line:column} etc.
3149
3150@item quote=
3151@vindex quote GCC_COLORS @r{capability}
3152SGR substring for information printed within quotes.
3153@end table
3154
3155@item -fno-diagnostics-show-option
3156@opindex fno-diagnostics-show-option
3157@opindex fdiagnostics-show-option
3158By default, each diagnostic emitted includes text indicating the
3159command-line option that directly controls the diagnostic (if such an
3160option is known to the diagnostic machinery).  Specifying the
3161@option{-fno-diagnostics-show-option} flag suppresses that behavior.
3162
3163@item -fno-diagnostics-show-caret
3164@opindex fno-diagnostics-show-caret
3165@opindex fdiagnostics-show-caret
3166By default, each diagnostic emitted includes the original source line
3167and a caret '^' indicating the column.  This option suppresses this
3168information.
3169
3170@end table
3171
3172@node Warning Options
3173@section Options to Request or Suppress Warnings
3174@cindex options to control warnings
3175@cindex warning messages
3176@cindex messages, warning
3177@cindex suppressing warnings
3178
3179Warnings are diagnostic messages that report constructions that
3180are not inherently erroneous but that are risky or suggest there
3181may have been an error.
3182
3183The following language-independent options do not enable specific
3184warnings but control the kinds of diagnostics produced by GCC@.
3185
3186@table @gcctabopt
3187@cindex syntax checking
3188@item -fsyntax-only
3189@opindex fsyntax-only
3190Check the code for syntax errors, but don't do anything beyond that.
3191
3192@item -fmax-errors=@var{n}
3193@opindex fmax-errors
3194Limits the maximum number of error messages to @var{n}, at which point
3195GCC bails out rather than attempting to continue processing the source
3196code.  If @var{n} is 0 (the default), there is no limit on the number
3197of error messages produced.  If @option{-Wfatal-errors} is also
3198specified, then @option{-Wfatal-errors} takes precedence over this
3199option.
3200
3201@item -w
3202@opindex w
3203Inhibit all warning messages.
3204
3205@item -Werror
3206@opindex Werror
3207@opindex Wno-error
3208Make all warnings into errors.
3209
3210@item -Werror=
3211@opindex Werror=
3212@opindex Wno-error=
3213Make the specified warning into an error.  The specifier for a warning
3214is appended; for example @option{-Werror=switch} turns the warnings
3215controlled by @option{-Wswitch} into errors.  This switch takes a
3216negative form, to be used to negate @option{-Werror} for specific
3217warnings; for example @option{-Wno-error=switch} makes
3218@option{-Wswitch} warnings not be errors, even when @option{-Werror}
3219is in effect.
3220
3221The warning message for each controllable warning includes the
3222option that controls the warning.  That option can then be used with
3223@option{-Werror=} and @option{-Wno-error=} as described above.
3224(Printing of the option in the warning message can be disabled using the
3225@option{-fno-diagnostics-show-option} flag.)
3226
3227Note that specifying @option{-Werror=}@var{foo} automatically implies
3228@option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
3229imply anything.
3230
3231@item -Wfatal-errors
3232@opindex Wfatal-errors
3233@opindex Wno-fatal-errors
3234This option causes the compiler to abort compilation on the first error
3235occurred rather than trying to keep going and printing further error
3236messages.
3237
3238@end table
3239
3240You can request many specific warnings with options beginning with
3241@samp{-W}, for example @option{-Wimplicit} to request warnings on
3242implicit declarations.  Each of these specific warning options also
3243has a negative form beginning @samp{-Wno-} to turn off warnings; for
3244example, @option{-Wno-implicit}.  This manual lists only one of the
3245two forms, whichever is not the default.  For further
3246language-specific options also refer to @ref{C++ Dialect Options} and
3247@ref{Objective-C and Objective-C++ Dialect Options}.
3248
3249When an unrecognized warning option is requested (e.g.,
3250@option{-Wunknown-warning}), GCC emits a diagnostic stating
3251that the option is not recognized.  However, if the @option{-Wno-} form
3252is used, the behavior is slightly different: no diagnostic is
3253produced for @option{-Wno-unknown-warning} unless other diagnostics
3254are being produced.  This allows the use of new @option{-Wno-} options
3255with old compilers, but if something goes wrong, the compiler
3256warns that an unrecognized option is present.
3257
3258@table @gcctabopt
3259@item -Wpedantic
3260@itemx -pedantic
3261@opindex pedantic
3262@opindex Wpedantic
3263Issue all the warnings demanded by strict ISO C and ISO C++;
3264reject all programs that use forbidden extensions, and some other
3265programs that do not follow ISO C and ISO C++.  For ISO C, follows the
3266version of the ISO C standard specified by any @option{-std} option used.
3267
3268Valid ISO C and ISO C++ programs should compile properly with or without
3269this option (though a rare few require @option{-ansi} or a
3270@option{-std} option specifying the required version of ISO C)@.  However,
3271without this option, certain GNU extensions and traditional C and C++
3272features are supported as well.  With this option, they are rejected.
3273
3274@option{-Wpedantic} does not cause warning messages for use of the
3275alternate keywords whose names begin and end with @samp{__}.  Pedantic
3276warnings are also disabled in the expression that follows
3277@code{__extension__}.  However, only system header files should use
3278these escape routes; application programs should avoid them.
3279@xref{Alternate Keywords}.
3280
3281Some users try to use @option{-Wpedantic} to check programs for strict ISO
3282C conformance.  They soon find that it does not do quite what they want:
3283it finds some non-ISO practices, but not all---only those for which
3284ISO C @emph{requires} a diagnostic, and some others for which
3285diagnostics have been added.
3286
3287A feature to report any failure to conform to ISO C might be useful in
3288some instances, but would require considerable additional work and would
3289be quite different from @option{-Wpedantic}.  We don't have plans to
3290support such a feature in the near future.
3291
3292Where the standard specified with @option{-std} represents a GNU
3293extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
3294corresponding @dfn{base standard}, the version of ISO C on which the GNU
3295extended dialect is based.  Warnings from @option{-Wpedantic} are given
3296where they are required by the base standard.  (It does not make sense
3297for such warnings to be given only for features not in the specified GNU
3298C dialect, since by definition the GNU dialects of C include all
3299features the compiler supports with the given option, and there would be
3300nothing to warn about.)
3301
3302@item -pedantic-errors
3303@opindex pedantic-errors
3304Like @option{-Wpedantic}, except that errors are produced rather than
3305warnings.
3306
3307@item -Wall
3308@opindex Wall
3309@opindex Wno-all
3310This enables all the warnings about constructions that some users
3311consider questionable, and that are easy to avoid (or modify to
3312prevent the warning), even in conjunction with macros.  This also
3313enables some language-specific warnings described in @ref{C++ Dialect
3314Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
3315
3316@option{-Wall} turns on the following warning flags:
3317
3318@gccoptlist{-Waddress   @gol
3319-Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
3320-Wc++11-compat  @gol
3321-Wchar-subscripts  @gol
3322-Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol
3323-Wimplicit-int @r{(C and Objective-C only)} @gol
3324-Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
3325-Wcomment  @gol
3326-Wformat   @gol
3327-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
3328-Wmaybe-uninitialized @gol
3329-Wmissing-braces @r{(only for C/ObjC)} @gol
3330-Wnonnull  @gol
3331-Wopenmp-simd @gol
3332-Wparentheses  @gol
3333-Wpointer-sign  @gol
3334-Wreorder   @gol
3335-Wreturn-type  @gol
3336-Wsequence-point  @gol
3337-Wsign-compare @r{(only in C++)}  @gol
3338-Wstrict-aliasing  @gol
3339-Wstrict-overflow=1  @gol
3340-Wswitch  @gol
3341-Wtrigraphs  @gol
3342-Wuninitialized  @gol
3343-Wunknown-pragmas  @gol
3344-Wunused-function  @gol
3345-Wunused-label     @gol
3346-Wunused-value     @gol
3347-Wunused-variable  @gol
3348-Wvolatile-register-var @gol
3349}
3350
3351Note that some warning flags are not implied by @option{-Wall}.  Some of
3352them warn about constructions that users generally do not consider
3353questionable, but which occasionally you might wish to check for;
3354others warn about constructions that are necessary or hard to avoid in
3355some cases, and there is no simple way to modify the code to suppress
3356the warning. Some of them are enabled by @option{-Wextra} but many of
3357them must be enabled individually.
3358
3359@item -Wextra
3360@opindex W
3361@opindex Wextra
3362@opindex Wno-extra
3363This enables some extra warning flags that are not enabled by
3364@option{-Wall}. (This option used to be called @option{-W}.  The older
3365name is still supported, but the newer name is more descriptive.)
3366
3367@gccoptlist{-Wclobbered  @gol
3368-Wempty-body  @gol
3369-Wignored-qualifiers @gol
3370-Wmissing-field-initializers  @gol
3371-Wmissing-parameter-type @r{(C only)}  @gol
3372-Wold-style-declaration @r{(C only)}  @gol
3373-Woverride-init  @gol
3374-Wsign-compare  @gol
3375-Wtype-limits  @gol
3376-Wuninitialized  @gol
3377-Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
3378-Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
3379}
3380
3381The option @option{-Wextra} also prints warning messages for the
3382following cases:
3383
3384@itemize @bullet
3385
3386@item
3387A pointer is compared against integer zero with @samp{<}, @samp{<=},
3388@samp{>}, or @samp{>=}.
3389
3390@item
3391(C++ only) An enumerator and a non-enumerator both appear in a
3392conditional expression.
3393
3394@item
3395(C++ only) Ambiguous virtual bases.
3396
3397@item
3398(C++ only) Subscripting an array that has been declared @samp{register}.
3399
3400@item
3401(C++ only) Taking the address of a variable that has been declared
3402@samp{register}.
3403
3404@item
3405(C++ only) A base class is not initialized in a derived class's copy
3406constructor.
3407
3408@end itemize
3409
3410@item -Wchar-subscripts
3411@opindex Wchar-subscripts
3412@opindex Wno-char-subscripts
3413Warn if an array subscript has type @code{char}.  This is a common cause
3414of error, as programmers often forget that this type is signed on some
3415machines.
3416This warning is enabled by @option{-Wall}.
3417
3418@item -Wcomment
3419@opindex Wcomment
3420@opindex Wno-comment
3421Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
3422comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
3423This warning is enabled by @option{-Wall}.
3424
3425@item -Wno-coverage-mismatch
3426@opindex Wno-coverage-mismatch
3427Warn if feedback profiles do not match when using the
3428@option{-fprofile-use} option.
3429If a source file is changed between compiling with @option{-fprofile-gen} and
3430with @option{-fprofile-use}, the files with the profile feedback can fail
3431to match the source file and GCC cannot use the profile feedback
3432information.  By default, this warning is enabled and is treated as an
3433error.  @option{-Wno-coverage-mismatch} can be used to disable the
3434warning or @option{-Wno-error=coverage-mismatch} can be used to
3435disable the error.  Disabling the error for this warning can result in
3436poorly optimized code and is useful only in the
3437case of very minor changes such as bug fixes to an existing code-base.
3438Completely disabling the warning is not recommended.
3439
3440@item -Wno-cpp
3441@r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
3442
3443Suppress warning messages emitted by @code{#warning} directives.
3444
3445@item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
3446@opindex Wdouble-promotion
3447@opindex Wno-double-promotion
3448Give a warning when a value of type @code{float} is implicitly
3449promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
3450floating-point unit implement @code{float} in hardware, but emulate
3451@code{double} in software.  On such a machine, doing computations
3452using @code{double} values is much more expensive because of the
3453overhead required for software emulation.
3454
3455It is easy to accidentally do computations with @code{double} because
3456floating-point literals are implicitly of type @code{double}.  For
3457example, in:
3458@smallexample
3459@group
3460float area(float radius)
3461@{
3462   return 3.14159 * radius * radius;
3463@}
3464@end group
3465@end smallexample
3466the compiler performs the entire computation with @code{double}
3467because the floating-point literal is a @code{double}.
3468
3469@item -Wformat
3470@itemx -Wformat=@var{n}
3471@opindex Wformat
3472@opindex Wno-format
3473@opindex ffreestanding
3474@opindex fno-builtin
3475@opindex Wformat=
3476Check calls to @code{printf} and @code{scanf}, etc., to make sure that
3477the arguments supplied have types appropriate to the format string
3478specified, and that the conversions specified in the format string make
3479sense.  This includes standard functions, and others specified by format
3480attributes (@pxref{Function Attributes}), in the @code{printf},
3481@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
3482not in the C standard) families (or other target-specific families).
3483Which functions are checked without format attributes having been
3484specified depends on the standard version selected, and such checks of
3485functions without the attribute specified are disabled by
3486@option{-ffreestanding} or @option{-fno-builtin}.
3487
3488The formats are checked against the format features supported by GNU
3489libc version 2.2.  These include all ISO C90 and C99 features, as well
3490as features from the Single Unix Specification and some BSD and GNU
3491extensions.  Other library implementations may not support all these
3492features; GCC does not support warning about features that go beyond a
3493particular library's limitations.  However, if @option{-Wpedantic} is used
3494with @option{-Wformat}, warnings are given about format features not
3495in the selected standard version (but not for @code{strfmon} formats,
3496since those are not in any version of the C standard).  @xref{C Dialect
3497Options,,Options Controlling C Dialect}.
3498
3499@table @gcctabopt
3500@item -Wformat=1
3501@itemx -Wformat
3502@opindex Wformat
3503@opindex Wformat=1
3504Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and
3505@option{-Wno-format} is equivalent to @option{-Wformat=0}.  Since
3506@option{-Wformat} also checks for null format arguments for several
3507functions, @option{-Wformat} also implies @option{-Wnonnull}.  Some
3508aspects of this level of format checking can be disabled by the
3509options: @option{-Wno-format-contains-nul},
3510@option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}.
3511@option{-Wformat} is enabled by @option{-Wall}.
3512
3513@item -Wno-format-contains-nul
3514@opindex Wno-format-contains-nul
3515@opindex Wformat-contains-nul
3516If @option{-Wformat} is specified, do not warn about format strings that
3517contain NUL bytes.
3518
3519@item -Wno-format-extra-args
3520@opindex Wno-format-extra-args
3521@opindex Wformat-extra-args
3522If @option{-Wformat} is specified, do not warn about excess arguments to a
3523@code{printf} or @code{scanf} format function.  The C standard specifies
3524that such arguments are ignored.
3525
3526Where the unused arguments lie between used arguments that are
3527specified with @samp{$} operand number specifications, normally
3528warnings are still given, since the implementation could not know what
3529type to pass to @code{va_arg} to skip the unused arguments.  However,
3530in the case of @code{scanf} formats, this option suppresses the
3531warning if the unused arguments are all pointers, since the Single
3532Unix Specification says that such unused arguments are allowed.
3533
3534@item -Wno-format-zero-length
3535@opindex Wno-format-zero-length
3536@opindex Wformat-zero-length
3537If @option{-Wformat} is specified, do not warn about zero-length formats.
3538The C standard specifies that zero-length formats are allowed.
3539
3540
3541@item -Wformat=2
3542@opindex Wformat=2
3543Enable @option{-Wformat} plus additional format checks.  Currently
3544equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security
3545-Wformat-y2k}.
3546
3547@item -Wformat-nonliteral
3548@opindex Wformat-nonliteral
3549@opindex Wno-format-nonliteral
3550If @option{-Wformat} is specified, also warn if the format string is not a
3551string literal and so cannot be checked, unless the format function
3552takes its format arguments as a @code{va_list}.
3553
3554@item -Wformat-security
3555@opindex Wformat-security
3556@opindex Wno-format-security
3557If @option{-Wformat} is specified, also warn about uses of format
3558functions that represent possible security problems.  At present, this
3559warns about calls to @code{printf} and @code{scanf} functions where the
3560format string is not a string literal and there are no format arguments,
3561as in @code{printf (foo);}.  This may be a security hole if the format
3562string came from untrusted input and contains @samp{%n}.  (This is
3563currently a subset of what @option{-Wformat-nonliteral} warns about, but
3564in future warnings may be added to @option{-Wformat-security} that are not
3565included in @option{-Wformat-nonliteral}.)
3566
3567@item -Wformat-y2k
3568@opindex Wformat-y2k
3569@opindex Wno-format-y2k
3570If @option{-Wformat} is specified, also warn about @code{strftime}
3571formats that may yield only a two-digit year.
3572@end table
3573
3574@item -Wnonnull
3575@opindex Wnonnull
3576@opindex Wno-nonnull
3577Warn about passing a null pointer for arguments marked as
3578requiring a non-null value by the @code{nonnull} function attribute.
3579
3580@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
3581can be disabled with the @option{-Wno-nonnull} option.
3582
3583@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
3584@opindex Winit-self
3585@opindex Wno-init-self
3586Warn about uninitialized variables that are initialized with themselves.
3587Note this option can only be used with the @option{-Wuninitialized} option.
3588
3589For example, GCC warns about @code{i} being uninitialized in the
3590following snippet only when @option{-Winit-self} has been specified:
3591@smallexample
3592@group
3593int f()
3594@{
3595  int i = i;
3596  return i;
3597@}
3598@end group
3599@end smallexample
3600
3601This warning is enabled by @option{-Wall} in C++.
3602
3603@item -Wimplicit-int @r{(C and Objective-C only)}
3604@opindex Wimplicit-int
3605@opindex Wno-implicit-int
3606Warn when a declaration does not specify a type.
3607This warning is enabled by @option{-Wall}.
3608
3609@item -Wimplicit-function-declaration @r{(C and Objective-C only)}
3610@opindex Wimplicit-function-declaration
3611@opindex Wno-implicit-function-declaration
3612Give a warning whenever a function is used before being declared. In
3613C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
3614enabled by default and it is made into an error by
3615@option{-pedantic-errors}. This warning is also enabled by
3616@option{-Wall}.
3617
3618@item -Wimplicit @r{(C and Objective-C only)}
3619@opindex Wimplicit
3620@opindex Wno-implicit
3621Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
3622This warning is enabled by @option{-Wall}.
3623
3624@item -Wignored-qualifiers @r{(C and C++ only)}
3625@opindex Wignored-qualifiers
3626@opindex Wno-ignored-qualifiers
3627Warn if the return type of a function has a type qualifier
3628such as @code{const}.  For ISO C such a type qualifier has no effect,
3629since the value returned by a function is not an lvalue.
3630For C++, the warning is only emitted for scalar types or @code{void}.
3631ISO C prohibits qualified @code{void} return types on function
3632definitions, so such return types always receive a warning
3633even without this option.
3634
3635This warning is also enabled by @option{-Wextra}.
3636
3637@item -Wmain
3638@opindex Wmain
3639@opindex Wno-main
3640Warn if the type of @samp{main} is suspicious.  @samp{main} should be
3641a function with external linkage, returning int, taking either zero
3642arguments, two, or three arguments of appropriate types.  This warning
3643is enabled by default in C++ and is enabled by either @option{-Wall}
3644or @option{-Wpedantic}.
3645
3646@item -Wmissing-braces
3647@opindex Wmissing-braces
3648@opindex Wno-missing-braces
3649Warn if an aggregate or union initializer is not fully bracketed.  In
3650the following example, the initializer for @samp{a} is not fully
3651bracketed, but that for @samp{b} is fully bracketed.  This warning is
3652enabled by @option{-Wall} in C.
3653
3654@smallexample
3655int a[2][2] = @{ 0, 1, 2, 3 @};
3656int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3657@end smallexample
3658
3659This warning is enabled by @option{-Wall}.
3660
3661@item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3662@opindex Wmissing-include-dirs
3663@opindex Wno-missing-include-dirs
3664Warn if a user-supplied include directory does not exist.
3665
3666@item -Wparentheses
3667@opindex Wparentheses
3668@opindex Wno-parentheses
3669Warn if parentheses are omitted in certain contexts, such
3670as when there is an assignment in a context where a truth value
3671is expected, or when operators are nested whose precedence people
3672often get confused about.
3673
3674Also warn if a comparison like @samp{x<=y<=z} appears; this is
3675equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
3676interpretation from that of ordinary mathematical notation.
3677
3678Also warn about constructions where there may be confusion to which
3679@code{if} statement an @code{else} branch belongs.  Here is an example of
3680such a case:
3681
3682@smallexample
3683@group
3684@{
3685  if (a)
3686    if (b)
3687      foo ();
3688  else
3689    bar ();
3690@}
3691@end group
3692@end smallexample
3693
3694In C/C++, every @code{else} branch belongs to the innermost possible
3695@code{if} statement, which in this example is @code{if (b)}.  This is
3696often not what the programmer expected, as illustrated in the above
3697example by indentation the programmer chose.  When there is the
3698potential for this confusion, GCC issues a warning when this flag
3699is specified.  To eliminate the warning, add explicit braces around
3700the innermost @code{if} statement so there is no way the @code{else}
3701can belong to the enclosing @code{if}.  The resulting code
3702looks like this:
3703
3704@smallexample
3705@group
3706@{
3707  if (a)
3708    @{
3709      if (b)
3710        foo ();
3711      else
3712        bar ();
3713    @}
3714@}
3715@end group
3716@end smallexample
3717
3718Also warn for dangerous uses of the GNU extension to
3719@code{?:} with omitted middle operand. When the condition
3720in the @code{?}: operator is a boolean expression, the omitted value is
3721always 1.  Often programmers expect it to be a value computed
3722inside the conditional expression instead.
3723
3724This warning is enabled by @option{-Wall}.
3725
3726@item -Wsequence-point
3727@opindex Wsequence-point
3728@opindex Wno-sequence-point
3729Warn about code that may have undefined semantics because of violations
3730of sequence point rules in the C and C++ standards.
3731
3732The C and C++ standards define the order in which expressions in a C/C++
3733program are evaluated in terms of @dfn{sequence points}, which represent
3734a partial ordering between the execution of parts of the program: those
3735executed before the sequence point, and those executed after it.  These
3736occur after the evaluation of a full expression (one which is not part
3737of a larger expression), after the evaluation of the first operand of a
3738@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
3739function is called (but after the evaluation of its arguments and the
3740expression denoting the called function), and in certain other places.
3741Other than as expressed by the sequence point rules, the order of
3742evaluation of subexpressions of an expression is not specified.  All
3743these rules describe only a partial order rather than a total order,
3744since, for example, if two functions are called within one expression
3745with no sequence point between them, the order in which the functions
3746are called is not specified.  However, the standards committee have
3747ruled that function calls do not overlap.
3748
3749It is not specified when between sequence points modifications to the
3750values of objects take effect.  Programs whose behavior depends on this
3751have undefined behavior; the C and C++ standards specify that ``Between
3752the previous and next sequence point an object shall have its stored
3753value modified at most once by the evaluation of an expression.
3754Furthermore, the prior value shall be read only to determine the value
3755to be stored.''.  If a program breaks these rules, the results on any
3756particular implementation are entirely unpredictable.
3757
3758Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
3759= b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
3760diagnosed by this option, and it may give an occasional false positive
3761result, but in general it has been found fairly effective at detecting
3762this sort of problem in programs.
3763
3764The standard is worded confusingly, therefore there is some debate
3765over the precise meaning of the sequence point rules in subtle cases.
3766Links to discussions of the problem, including proposed formal
3767definitions, may be found on the GCC readings page, at
3768@uref{http://gcc.gnu.org/@/readings.html}.
3769
3770This warning is enabled by @option{-Wall} for C and C++.
3771
3772@item -Wno-return-local-addr
3773@opindex Wno-return-local-addr
3774@opindex Wreturn-local-addr
3775Do not warn about returning a pointer (or in C++, a reference) to a
3776variable that goes out of scope after the function returns.
3777
3778@item -Wreturn-type
3779@opindex Wreturn-type
3780@opindex Wno-return-type
3781Warn whenever a function is defined with a return type that defaults
3782to @code{int}.  Also warn about any @code{return} statement with no
3783return value in a function whose return type is not @code{void}
3784(falling off the end of the function body is considered returning
3785without a value), and about a @code{return} statement with an
3786expression in a function whose return type is @code{void}.
3787
3788For C++, a function without return type always produces a diagnostic
3789message, even when @option{-Wno-return-type} is specified.  The only
3790exceptions are @samp{main} and functions defined in system headers.
3791
3792This warning is enabled by @option{-Wall}.
3793
3794@item -Wswitch
3795@opindex Wswitch
3796@opindex Wno-switch
3797Warn whenever a @code{switch} statement has an index of enumerated type
3798and lacks a @code{case} for one or more of the named codes of that
3799enumeration.  (The presence of a @code{default} label prevents this
3800warning.)  @code{case} labels outside the enumeration range also
3801provoke warnings when this option is used (even if there is a
3802@code{default} label).
3803This warning is enabled by @option{-Wall}.
3804
3805@item -Wswitch-default
3806@opindex Wswitch-default
3807@opindex Wno-switch-default
3808Warn whenever a @code{switch} statement does not have a @code{default}
3809case.
3810
3811@item -Wswitch-enum
3812@opindex Wswitch-enum
3813@opindex Wno-switch-enum
3814Warn whenever a @code{switch} statement has an index of enumerated type
3815and lacks a @code{case} for one or more of the named codes of that
3816enumeration.  @code{case} labels outside the enumeration range also
3817provoke warnings when this option is used.  The only difference
3818between @option{-Wswitch} and this option is that this option gives a
3819warning about an omitted enumeration code even if there is a
3820@code{default} label.
3821
3822@item -Wsync-nand @r{(C and C++ only)}
3823@opindex Wsync-nand
3824@opindex Wno-sync-nand
3825Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
3826built-in functions are used.  These functions changed semantics in GCC 4.4.
3827
3828@item -Wtrigraphs
3829@opindex Wtrigraphs
3830@opindex Wno-trigraphs
3831Warn if any trigraphs are encountered that might change the meaning of
3832the program (trigraphs within comments are not warned about).
3833This warning is enabled by @option{-Wall}.
3834
3835@item -Wunused-but-set-parameter
3836@opindex Wunused-but-set-parameter
3837@opindex Wno-unused-but-set-parameter
3838Warn whenever a function parameter is assigned to, but otherwise unused
3839(aside from its declaration).
3840
3841To suppress this warning use the @samp{unused} attribute
3842(@pxref{Variable Attributes}).
3843
3844This warning is also enabled by @option{-Wunused} together with
3845@option{-Wextra}.
3846
3847@item -Wunused-but-set-variable
3848@opindex Wunused-but-set-variable
3849@opindex Wno-unused-but-set-variable
3850Warn whenever a local variable is assigned to, but otherwise unused
3851(aside from its declaration).
3852This warning is enabled by @option{-Wall}.
3853
3854To suppress this warning use the @samp{unused} attribute
3855(@pxref{Variable Attributes}).
3856
3857This warning is also enabled by @option{-Wunused}, which is enabled
3858by @option{-Wall}.
3859
3860@item -Wunused-function
3861@opindex Wunused-function
3862@opindex Wno-unused-function
3863Warn whenever a static function is declared but not defined or a
3864non-inline static function is unused.
3865This warning is enabled by @option{-Wall}.
3866
3867@item -Wunused-label
3868@opindex Wunused-label
3869@opindex Wno-unused-label
3870Warn whenever a label is declared but not used.
3871This warning is enabled by @option{-Wall}.
3872
3873To suppress this warning use the @samp{unused} attribute
3874(@pxref{Variable Attributes}).
3875
3876@item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
3877@opindex Wunused-local-typedefs
3878Warn when a typedef locally defined in a function is not used.
3879This warning is enabled by @option{-Wall}.
3880
3881@item -Wunused-parameter
3882@opindex Wunused-parameter
3883@opindex Wno-unused-parameter
3884Warn whenever a function parameter is unused aside from its declaration.
3885
3886To suppress this warning use the @samp{unused} attribute
3887(@pxref{Variable Attributes}).
3888
3889@item -Wno-unused-result
3890@opindex Wunused-result
3891@opindex Wno-unused-result
3892Do not warn if a caller of a function marked with attribute
3893@code{warn_unused_result} (@pxref{Function Attributes}) does not use
3894its return value. The default is @option{-Wunused-result}.
3895
3896@item -Wunused-variable
3897@opindex Wunused-variable
3898@opindex Wno-unused-variable
3899Warn whenever a local variable or non-constant static variable is unused
3900aside from its declaration.
3901This warning is enabled by @option{-Wall}.
3902
3903To suppress this warning use the @samp{unused} attribute
3904(@pxref{Variable Attributes}).
3905
3906@item -Wunused-value
3907@opindex Wunused-value
3908@opindex Wno-unused-value
3909Warn whenever a statement computes a result that is explicitly not
3910used. To suppress this warning cast the unused expression to
3911@samp{void}. This includes an expression-statement or the left-hand
3912side of a comma expression that contains no side effects. For example,
3913an expression such as @samp{x[i,j]} causes a warning, while
3914@samp{x[(void)i,j]} does not.
3915
3916This warning is enabled by @option{-Wall}.
3917
3918@item -Wunused
3919@opindex Wunused
3920@opindex Wno-unused
3921All the above @option{-Wunused} options combined.
3922
3923In order to get a warning about an unused function parameter, you must
3924either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
3925@option{-Wunused}), or separately specify @option{-Wunused-parameter}.
3926
3927@item -Wuninitialized
3928@opindex Wuninitialized
3929@opindex Wno-uninitialized
3930Warn if an automatic variable is used without first being initialized
3931or if a variable may be clobbered by a @code{setjmp} call. In C++,
3932warn if a non-static reference or non-static @samp{const} member
3933appears in a class without constructors.
3934
3935If you want to warn about code that uses the uninitialized value of the
3936variable in its own initializer, use the @option{-Winit-self} option.
3937
3938These warnings occur for individual uninitialized or clobbered
3939elements of structure, union or array variables as well as for
3940variables that are uninitialized or clobbered as a whole.  They do
3941not occur for variables or elements declared @code{volatile}.  Because
3942these warnings depend on optimization, the exact variables or elements
3943for which there are warnings depends on the precise optimization
3944options and version of GCC used.
3945
3946Note that there may be no warning about a variable that is used only
3947to compute a value that itself is never used, because such
3948computations may be deleted by data flow analysis before the warnings
3949are printed.
3950
3951@item -Wmaybe-uninitialized
3952@opindex Wmaybe-uninitialized
3953@opindex Wno-maybe-uninitialized
3954For an automatic variable, if there exists a path from the function
3955entry to a use of the variable that is initialized, but there exist
3956some other paths for which the variable is not initialized, the compiler
3957emits a warning if it cannot prove the uninitialized paths are not
3958executed at run time. These warnings are made optional because GCC is
3959not smart enough to see all the reasons why the code might be correct
3960in spite of appearing to have an error.  Here is one example of how
3961this can happen:
3962
3963@smallexample
3964@group
3965@{
3966  int x;
3967  switch (y)
3968    @{
3969    case 1: x = 1;
3970      break;
3971    case 2: x = 4;
3972      break;
3973    case 3: x = 5;
3974    @}
3975  foo (x);
3976@}
3977@end group
3978@end smallexample
3979
3980@noindent
3981If the value of @code{y} is always 1, 2 or 3, then @code{x} is
3982always initialized, but GCC doesn't know this. To suppress the
3983warning, you need to provide a default case with assert(0) or
3984similar code.
3985
3986@cindex @code{longjmp} warnings
3987This option also warns when a non-volatile automatic variable might be
3988changed by a call to @code{longjmp}.  These warnings as well are possible
3989only in optimizing compilation.
3990
3991The compiler sees only the calls to @code{setjmp}.  It cannot know
3992where @code{longjmp} will be called; in fact, a signal handler could
3993call it at any point in the code.  As a result, you may get a warning
3994even when there is in fact no problem because @code{longjmp} cannot
3995in fact be called at the place that would cause a problem.
3996
3997Some spurious warnings can be avoided if you declare all the functions
3998you use that never return as @code{noreturn}.  @xref{Function
3999Attributes}.
4000
4001This warning is enabled by @option{-Wall} or @option{-Wextra}.
4002
4003@item -Wunknown-pragmas
4004@opindex Wunknown-pragmas
4005@opindex Wno-unknown-pragmas
4006@cindex warning for unknown pragmas
4007@cindex unknown pragmas, warning
4008@cindex pragmas, warning of unknown
4009Warn when a @code{#pragma} directive is encountered that is not understood by
4010GCC@.  If this command-line option is used, warnings are even issued
4011for unknown pragmas in system header files.  This is not the case if
4012the warnings are only enabled by the @option{-Wall} command-line option.
4013
4014@item -Wno-pragmas
4015@opindex Wno-pragmas
4016@opindex Wpragmas
4017Do not warn about misuses of pragmas, such as incorrect parameters,
4018invalid syntax, or conflicts between pragmas.  See also
4019@option{-Wunknown-pragmas}.
4020
4021@item -Wstrict-aliasing
4022@opindex Wstrict-aliasing
4023@opindex Wno-strict-aliasing
4024This option is only active when @option{-fstrict-aliasing} is active.
4025It warns about code that might break the strict aliasing rules that the
4026compiler is using for optimization.  The warning does not catch all
4027cases, but does attempt to catch the more common pitfalls.  It is
4028included in @option{-Wall}.
4029It is equivalent to @option{-Wstrict-aliasing=3}
4030
4031@item -Wstrict-aliasing=n
4032@opindex Wstrict-aliasing=n
4033This option is only active when @option{-fstrict-aliasing} is active.
4034It warns about code that might break the strict aliasing rules that the
4035compiler is using for optimization.
4036Higher levels correspond to higher accuracy (fewer false positives).
4037Higher levels also correspond to more effort, similar to the way @option{-O}
4038works.
4039@option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.
4040
4041Level 1: Most aggressive, quick, least accurate.
4042Possibly useful when higher levels
4043do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
4044false negatives.  However, it has many false positives.
4045Warns for all pointer conversions between possibly incompatible types,
4046even if never dereferenced.  Runs in the front end only.
4047
4048Level 2: Aggressive, quick, not too precise.
4049May still have many false positives (not as many as level 1 though),
4050and few false negatives (but possibly more than level 1).
4051Unlike level 1, it only warns when an address is taken.  Warns about
4052incomplete types.  Runs in the front end only.
4053
4054Level 3 (default for @option{-Wstrict-aliasing}):
4055Should have very few false positives and few false
4056negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
4057Takes care of the common pun+dereference pattern in the front end:
4058@code{*(int*)&some_float}.
4059If optimization is enabled, it also runs in the back end, where it deals
4060with multiple statement cases using flow-sensitive points-to information.
4061Only warns when the converted pointer is dereferenced.
4062Does not warn about incomplete types.
4063
4064@item -Wstrict-overflow
4065@itemx -Wstrict-overflow=@var{n}
4066@opindex Wstrict-overflow
4067@opindex Wno-strict-overflow
4068This option is only active when @option{-fstrict-overflow} is active.
4069It warns about cases where the compiler optimizes based on the
4070assumption that signed overflow does not occur.  Note that it does not
4071warn about all cases where the code might overflow: it only warns
4072about cases where the compiler implements some optimization.  Thus
4073this warning depends on the optimization level.
4074
4075An optimization that assumes that signed overflow does not occur is
4076perfectly safe if the values of the variables involved are such that
4077overflow never does, in fact, occur.  Therefore this warning can
4078easily give a false positive: a warning about code that is not
4079actually a problem.  To help focus on important issues, several
4080warning levels are defined.  No warnings are issued for the use of
4081undefined signed overflow when estimating how many iterations a loop
4082requires, in particular when determining whether a loop will be
4083executed at all.
4084
4085@table @gcctabopt
4086@item -Wstrict-overflow=1
4087Warn about cases that are both questionable and easy to avoid.  For
4088example,  with @option{-fstrict-overflow}, the compiler simplifies
4089@code{x + 1 > x} to @code{1}.  This level of
4090@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
4091are not, and must be explicitly requested.
4092
4093@item -Wstrict-overflow=2
4094Also warn about other cases where a comparison is simplified to a
4095constant.  For example: @code{abs (x) >= 0}.  This can only be
4096simplified when @option{-fstrict-overflow} is in effect, because
4097@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
4098zero.  @option{-Wstrict-overflow} (with no level) is the same as
4099@option{-Wstrict-overflow=2}.
4100
4101@item -Wstrict-overflow=3
4102Also warn about other cases where a comparison is simplified.  For
4103example: @code{x + 1 > 1} is simplified to @code{x > 0}.
4104
4105@item -Wstrict-overflow=4
4106Also warn about other simplifications not covered by the above cases.
4107For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.
4108
4109@item -Wstrict-overflow=5
4110Also warn about cases where the compiler reduces the magnitude of a
4111constant involved in a comparison.  For example: @code{x + 2 > y} is
4112simplified to @code{x + 1 >= y}.  This is reported only at the
4113highest warning level because this simplification applies to many
4114comparisons, so this warning level gives a very large number of
4115false positives.
4116@end table
4117
4118@item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]}
4119@opindex Wsuggest-attribute=
4120@opindex Wno-suggest-attribute=
4121Warn for cases where adding an attribute may be beneficial. The
4122attributes currently supported are listed below.
4123
4124@table @gcctabopt
4125@item -Wsuggest-attribute=pure
4126@itemx -Wsuggest-attribute=const
4127@itemx -Wsuggest-attribute=noreturn
4128@opindex Wsuggest-attribute=pure
4129@opindex Wno-suggest-attribute=pure
4130@opindex Wsuggest-attribute=const
4131@opindex Wno-suggest-attribute=const
4132@opindex Wsuggest-attribute=noreturn
4133@opindex Wno-suggest-attribute=noreturn
4134
4135Warn about functions that might be candidates for attributes
4136@code{pure}, @code{const} or @code{noreturn}.  The compiler only warns for
4137functions visible in other compilation units or (in the case of @code{pure} and
4138@code{const}) if it cannot prove that the function returns normally. A function
4139returns normally if it doesn't contain an infinite loop or return abnormally
4140by throwing, calling @code{abort()} or trapping.  This analysis requires option
4141@option{-fipa-pure-const}, which is enabled by default at @option{-O} and
4142higher.  Higher optimization levels improve the accuracy of the analysis.
4143
4144@item -Wsuggest-attribute=format
4145@itemx -Wmissing-format-attribute
4146@opindex Wsuggest-attribute=format
4147@opindex Wmissing-format-attribute
4148@opindex Wno-suggest-attribute=format
4149@opindex Wno-missing-format-attribute
4150@opindex Wformat
4151@opindex Wno-format
4152
4153Warn about function pointers that might be candidates for @code{format}
4154attributes.  Note these are only possible candidates, not absolute ones.
4155GCC guesses that function pointers with @code{format} attributes that
4156are used in assignment, initialization, parameter passing or return
4157statements should have a corresponding @code{format} attribute in the
4158resulting type.  I.e.@: the left-hand side of the assignment or
4159initialization, the type of the parameter variable, or the return type
4160of the containing function respectively should also have a @code{format}
4161attribute to avoid the warning.
4162
4163GCC also warns about function definitions that might be
4164candidates for @code{format} attributes.  Again, these are only
4165possible candidates.  GCC guesses that @code{format} attributes
4166might be appropriate for any function that calls a function like
4167@code{vprintf} or @code{vscanf}, but this might not always be the
4168case, and some functions for which @code{format} attributes are
4169appropriate may not be detected.
4170@end table
4171
4172@item -Warray-bounds
4173@opindex Wno-array-bounds
4174@opindex Warray-bounds
4175This option is only active when @option{-ftree-vrp} is active
4176(default for @option{-O2} and above). It warns about subscripts to arrays
4177that are always out of bounds. This warning is enabled by @option{-Wall}.
4178
4179@item -Wno-div-by-zero
4180@opindex Wno-div-by-zero
4181@opindex Wdiv-by-zero
4182Do not warn about compile-time integer division by zero.  Floating-point
4183division by zero is not warned about, as it can be a legitimate way of
4184obtaining infinities and NaNs.
4185
4186@item -Wsystem-headers
4187@opindex Wsystem-headers
4188@opindex Wno-system-headers
4189@cindex warnings from system headers
4190@cindex system headers, warnings from
4191Print warning messages for constructs found in system header files.
4192Warnings from system headers are normally suppressed, on the assumption
4193that they usually do not indicate real problems and would only make the
4194compiler output harder to read.  Using this command-line option tells
4195GCC to emit warnings from system headers as if they occurred in user
4196code.  However, note that using @option{-Wall} in conjunction with this
4197option does @emph{not} warn about unknown pragmas in system
4198headers---for that, @option{-Wunknown-pragmas} must also be used.
4199
4200@item -Wtrampolines
4201@opindex Wtrampolines
4202@opindex Wno-trampolines
4203 Warn about trampolines generated for pointers to nested functions.
4204
4205 A trampoline is a small piece of data or code that is created at run
4206 time on the stack when the address of a nested function is taken, and
4207 is used to call the nested function indirectly.  For some targets, it
4208 is made up of data only and thus requires no special treatment.  But,
4209 for most targets, it is made up of code and thus requires the stack
4210 to be made executable in order for the program to work properly.
4211
4212@item -Wfloat-equal
4213@opindex Wfloat-equal
4214@opindex Wno-float-equal
4215Warn if floating-point values are used in equality comparisons.
4216
4217The idea behind this is that sometimes it is convenient (for the
4218programmer) to consider floating-point values as approximations to
4219infinitely precise real numbers.  If you are doing this, then you need
4220to compute (by analyzing the code, or in some other way) the maximum or
4221likely maximum error that the computation introduces, and allow for it
4222when performing comparisons (and when producing output, but that's a
4223different problem).  In particular, instead of testing for equality, you
4224should check to see whether the two values have ranges that overlap; and
4225this is done with the relational operators, so equality comparisons are
4226probably mistaken.
4227
4228@item -Wtraditional @r{(C and Objective-C only)}
4229@opindex Wtraditional
4230@opindex Wno-traditional
4231Warn about certain constructs that behave differently in traditional and
4232ISO C@.  Also warn about ISO C constructs that have no traditional C
4233equivalent, and/or problematic constructs that should be avoided.
4234
4235@itemize @bullet
4236@item
4237Macro parameters that appear within string literals in the macro body.
4238In traditional C macro replacement takes place within string literals,
4239but in ISO C it does not.
4240
4241@item
4242In traditional C, some preprocessor directives did not exist.
4243Traditional preprocessors only considered a line to be a directive
4244if the @samp{#} appeared in column 1 on the line.  Therefore
4245@option{-Wtraditional} warns about directives that traditional C
4246understands but ignores because the @samp{#} does not appear as the
4247first character on the line.  It also suggests you hide directives like
4248@samp{#pragma} not understood by traditional C by indenting them.  Some
4249traditional implementations do not recognize @samp{#elif}, so this option
4250suggests avoiding it altogether.
4251
4252@item
4253A function-like macro that appears without arguments.
4254
4255@item
4256The unary plus operator.
4257
4258@item
4259The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
4260constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
4261constants.)  Note, these suffixes appear in macros defined in the system
4262headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
4263Use of these macros in user code might normally lead to spurious
4264warnings, however GCC's integrated preprocessor has enough context to
4265avoid warning in these cases.
4266
4267@item
4268A function declared external in one block and then used after the end of
4269the block.
4270
4271@item
4272A @code{switch} statement has an operand of type @code{long}.
4273
4274@item
4275A non-@code{static} function declaration follows a @code{static} one.
4276This construct is not accepted by some traditional C compilers.
4277
4278@item
4279The ISO type of an integer constant has a different width or
4280signedness from its traditional type.  This warning is only issued if
4281the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
4282typically represent bit patterns, are not warned about.
4283
4284@item
4285Usage of ISO string concatenation is detected.
4286
4287@item
4288Initialization of automatic aggregates.
4289
4290@item
4291Identifier conflicts with labels.  Traditional C lacks a separate
4292namespace for labels.
4293
4294@item
4295Initialization of unions.  If the initializer is zero, the warning is
4296omitted.  This is done under the assumption that the zero initializer in
4297user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
4298initializer warnings and relies on default initialization to zero in the
4299traditional C case.
4300
4301@item
4302Conversions by prototypes between fixed/floating-point values and vice
4303versa.  The absence of these prototypes when compiling with traditional
4304C causes serious problems.  This is a subset of the possible
4305conversion warnings; for the full set use @option{-Wtraditional-conversion}.
4306
4307@item
4308Use of ISO C style function definitions.  This warning intentionally is
4309@emph{not} issued for prototype declarations or variadic functions
4310because these ISO C features appear in your code when using
4311libiberty's traditional C compatibility macros, @code{PARAMS} and
4312@code{VPARAMS}.  This warning is also bypassed for nested functions
4313because that feature is already a GCC extension and thus not relevant to
4314traditional C compatibility.
4315@end itemize
4316
4317@item -Wtraditional-conversion @r{(C and Objective-C only)}
4318@opindex Wtraditional-conversion
4319@opindex Wno-traditional-conversion
4320Warn if a prototype causes a type conversion that is different from what
4321would happen to the same argument in the absence of a prototype.  This
4322includes conversions of fixed point to floating and vice versa, and
4323conversions changing the width or signedness of a fixed-point argument
4324except when the same as the default promotion.
4325
4326@item -Wdeclaration-after-statement @r{(C and Objective-C only)}
4327@opindex Wdeclaration-after-statement
4328@opindex Wno-declaration-after-statement
4329Warn when a declaration is found after a statement in a block.  This
4330construct, known from C++, was introduced with ISO C99 and is by default
4331allowed in GCC@.  It is not supported by ISO C90 and was not supported by
4332GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
4333
4334@item -Wundef
4335@opindex Wundef
4336@opindex Wno-undef
4337Warn if an undefined identifier is evaluated in an @samp{#if} directive.
4338
4339@item -Wno-endif-labels
4340@opindex Wno-endif-labels
4341@opindex Wendif-labels
4342Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
4343
4344@item -Wshadow
4345@opindex Wshadow
4346@opindex Wno-shadow
4347Warn whenever a local variable or type declaration shadows another variable,
4348parameter, type, or class member (in C++), or whenever a built-in function
4349is shadowed. Note that in C++, the compiler warns if a local variable
4350shadows an explicit typedef, but not if it shadows a struct/class/enum.
4351
4352@item -Wlarger-than=@var{len}
4353@opindex Wlarger-than=@var{len}
4354@opindex Wlarger-than-@var{len}
4355Warn whenever an object of larger than @var{len} bytes is defined.
4356
4357@item -Wframe-larger-than=@var{len}
4358@opindex Wframe-larger-than
4359Warn if the size of a function frame is larger than @var{len} bytes.
4360The computation done to determine the stack frame size is approximate
4361and not conservative.
4362The actual requirements may be somewhat greater than @var{len}
4363even if you do not get a warning.  In addition, any space allocated
4364via @code{alloca}, variable-length arrays, or related constructs
4365is not included by the compiler when determining
4366whether or not to issue a warning.
4367
4368@item -Wno-free-nonheap-object
4369@opindex Wno-free-nonheap-object
4370@opindex Wfree-nonheap-object
4371Do not warn when attempting to free an object that was not allocated
4372on the heap.
4373
4374@item -Wstack-usage=@var{len}
4375@opindex Wstack-usage
4376Warn if the stack usage of a function might be larger than @var{len} bytes.
4377The computation done to determine the stack usage is conservative.
4378Any space allocated via @code{alloca}, variable-length arrays, or related
4379constructs is included by the compiler when determining whether or not to
4380issue a warning.
4381
4382The message is in keeping with the output of @option{-fstack-usage}.
4383
4384@itemize
4385@item
4386If the stack usage is fully static but exceeds the specified amount, it's:
4387
4388@smallexample
4389  warning: stack usage is 1120 bytes
4390@end smallexample
4391@item
4392If the stack usage is (partly) dynamic but bounded, it's:
4393
4394@smallexample
4395  warning: stack usage might be 1648 bytes
4396@end smallexample
4397@item
4398If the stack usage is (partly) dynamic and not bounded, it's:
4399
4400@smallexample
4401  warning: stack usage might be unbounded
4402@end smallexample
4403@end itemize
4404
4405@item -Wunsafe-loop-optimizations
4406@opindex Wunsafe-loop-optimizations
4407@opindex Wno-unsafe-loop-optimizations
4408Warn if the loop cannot be optimized because the compiler cannot
4409assume anything on the bounds of the loop indices.  With
4410@option{-funsafe-loop-optimizations} warn if the compiler makes
4411such assumptions.
4412
4413@item -Wno-pedantic-ms-format @r{(MinGW targets only)}
4414@opindex Wno-pedantic-ms-format
4415@opindex Wpedantic-ms-format
4416When used in combination with @option{-Wformat}
4417and @option{-pedantic} without GNU extensions, this option
4418disables the warnings about non-ISO @code{printf} / @code{scanf} format
4419width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets,
4420which depend on the MS runtime.
4421
4422@item -Wpointer-arith
4423@opindex Wpointer-arith
4424@opindex Wno-pointer-arith
4425Warn about anything that depends on the ``size of'' a function type or
4426of @code{void}.  GNU C assigns these types a size of 1, for
4427convenience in calculations with @code{void *} pointers and pointers
4428to functions.  In C++, warn also when an arithmetic operation involves
4429@code{NULL}.  This warning is also enabled by @option{-Wpedantic}.
4430
4431@item -Wtype-limits
4432@opindex Wtype-limits
4433@opindex Wno-type-limits
4434Warn if a comparison is always true or always false due to the limited
4435range of the data type, but do not warn for constant expressions.  For
4436example, warn if an unsigned variable is compared against zero with
4437@samp{<} or @samp{>=}.  This warning is also enabled by
4438@option{-Wextra}.
4439
4440@item -Wbad-function-cast @r{(C and Objective-C only)}
4441@opindex Wbad-function-cast
4442@opindex Wno-bad-function-cast
4443Warn whenever a function call is cast to a non-matching type.
4444For example, warn if @code{int malloc()} is cast to @code{anything *}.
4445
4446@item -Wc++-compat @r{(C and Objective-C only)}
4447Warn about ISO C constructs that are outside of the common subset of
4448ISO C and ISO C++, e.g.@: request for implicit conversion from
4449@code{void *} to a pointer to non-@code{void} type.
4450
4451@item -Wc++11-compat @r{(C++ and Objective-C++ only)}
4452Warn about C++ constructs whose meaning differs between ISO C++ 1998
4453and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
4454in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
4455enabled by @option{-Wall}.
4456
4457@item -Wcast-qual
4458@opindex Wcast-qual
4459@opindex Wno-cast-qual
4460Warn whenever a pointer is cast so as to remove a type qualifier from
4461the target type.  For example, warn if a @code{const char *} is cast
4462to an ordinary @code{char *}.
4463
4464Also warn when making a cast that introduces a type qualifier in an
4465unsafe way.  For example, casting @code{char **} to @code{const char **}
4466is unsafe, as in this example:
4467
4468@smallexample
4469  /* p is char ** value.  */
4470  const char **q = (const char **) p;
4471  /* Assignment of readonly string to const char * is OK.  */
4472  *q = "string";
4473  /* Now char** pointer points to read-only memory.  */
4474  **p = 'b';
4475@end smallexample
4476
4477@item -Wcast-align
4478@opindex Wcast-align
4479@opindex Wno-cast-align
4480Warn whenever a pointer is cast such that the required alignment of the
4481target is increased.  For example, warn if a @code{char *} is cast to
4482an @code{int *} on machines where integers can only be accessed at
4483two- or four-byte boundaries.
4484
4485@item -Wwrite-strings
4486@opindex Wwrite-strings
4487@opindex Wno-write-strings
4488When compiling C, give string constants the type @code{const
4489char[@var{length}]} so that copying the address of one into a
4490non-@code{const} @code{char *} pointer produces a warning.  These
4491warnings help you find at compile time code that can try to write
4492into a string constant, but only if you have been very careful about
4493using @code{const} in declarations and prototypes.  Otherwise, it is
4494just a nuisance. This is why we did not make @option{-Wall} request
4495these warnings.
4496
4497When compiling C++, warn about the deprecated conversion from string
4498literals to @code{char *}.  This warning is enabled by default for C++
4499programs.
4500
4501@item -Wclobbered
4502@opindex Wclobbered
4503@opindex Wno-clobbered
4504Warn for variables that might be changed by @samp{longjmp} or
4505@samp{vfork}.  This warning is also enabled by @option{-Wextra}.
4506
4507@item -Wconditionally-supported @r{(C++ and Objective-C++ only)}
4508@opindex Wconditionally-supported
4509@opindex Wno-conditionally-supported
4510Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4511
4512@item -Wconversion
4513@opindex Wconversion
4514@opindex Wno-conversion
4515Warn for implicit conversions that may alter a value. This includes
4516conversions between real and integer, like @code{abs (x)} when
4517@code{x} is @code{double}; conversions between signed and unsigned,
4518like @code{unsigned ui = -1}; and conversions to smaller types, like
4519@code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
4520((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
4521changed by the conversion like in @code{abs (2.0)}.  Warnings about
4522conversions between signed and unsigned integers can be disabled by
4523using @option{-Wno-sign-conversion}.
4524
4525For C++, also warn for confusing overload resolution for user-defined
4526conversions; and conversions that never use a type conversion
4527operator: conversions to @code{void}, the same type, a base class or a
4528reference to them. Warnings about conversions between signed and
4529unsigned integers are disabled by default in C++ unless
4530@option{-Wsign-conversion} is explicitly enabled.
4531
4532@item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
4533@opindex Wconversion-null
4534@opindex Wno-conversion-null
4535Do not warn for conversions between @code{NULL} and non-pointer
4536types. @option{-Wconversion-null} is enabled by default.
4537
4538@item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
4539@opindex Wzero-as-null-pointer-constant
4540@opindex Wno-zero-as-null-pointer-constant
4541Warn when a literal '0' is used as null pointer constant.  This can
4542be useful to facilitate the conversion to @code{nullptr} in C++11.
4543
4544@item -Wdate-time
4545@opindex Wdate-time
4546@opindex Wno-date-time
4547Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
4548are encountered as they might prevent bit-wise-identical reproducible
4549compilations.
4550
4551@item -Wdelete-incomplete @r{(C++ and Objective-C++ only)}
4552@opindex Wdelete-incomplete
4553@opindex Wno-delete-incomplete
4554Warn when deleting a pointer to incomplete type, which may cause
4555undefined behavior at runtime.  This warning is enabled by default.
4556
4557@item -Wuseless-cast @r{(C++ and Objective-C++ only)}
4558@opindex Wuseless-cast
4559@opindex Wno-useless-cast
4560Warn when an expression is casted to its own type.
4561
4562@item -Wempty-body
4563@opindex Wempty-body
4564@opindex Wno-empty-body
4565Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
4566while} statement.  This warning is also enabled by @option{-Wextra}.
4567
4568@item -Wenum-compare
4569@opindex Wenum-compare
4570@opindex Wno-enum-compare
4571Warn about a comparison between values of different enumerated types.
4572In C++ enumeral mismatches in conditional expressions are also
4573diagnosed and the warning is enabled by default.  In C this warning is
4574enabled by @option{-Wall}.
4575
4576@item -Wjump-misses-init @r{(C, Objective-C only)}
4577@opindex Wjump-misses-init
4578@opindex Wno-jump-misses-init
4579Warn if a @code{goto} statement or a @code{switch} statement jumps
4580forward across the initialization of a variable, or jumps backward to a
4581label after the variable has been initialized.  This only warns about
4582variables that are initialized when they are declared.  This warning is
4583only supported for C and Objective-C; in C++ this sort of branch is an
4584error in any case.
4585
4586@option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
4587can be disabled with the @option{-Wno-jump-misses-init} option.
4588
4589@item -Wsign-compare
4590@opindex Wsign-compare
4591@opindex Wno-sign-compare
4592@cindex warning for comparison of signed and unsigned values
4593@cindex comparison of signed and unsigned values, warning
4594@cindex signed and unsigned values, comparison warning
4595Warn when a comparison between signed and unsigned values could produce
4596an incorrect result when the signed value is converted to unsigned.
4597This warning is also enabled by @option{-Wextra}; to get the other warnings
4598of @option{-Wextra} without this warning, use @option{-Wextra -Wno-sign-compare}.
4599
4600@item -Wsign-conversion
4601@opindex Wsign-conversion
4602@opindex Wno-sign-conversion
4603Warn for implicit conversions that may change the sign of an integer
4604value, like assigning a signed integer expression to an unsigned
4605integer variable. An explicit cast silences the warning. In C, this
4606option is enabled also by @option{-Wconversion}.
4607
4608@item -Wfloat-conversion
4609@opindex Wfloat-conversion
4610@opindex Wno-float-conversion
4611Warn for implicit conversions that reduce the precision of a real value.
4612This includes conversions from real to integer, and from higher precision
4613real to lower precision real values.  This option is also enabled by
4614@option{-Wconversion}.
4615
4616@item -Wsizeof-pointer-memaccess
4617@opindex Wsizeof-pointer-memaccess
4618@opindex Wno-sizeof-pointer-memaccess
4619Warn for suspicious length parameters to certain string and memory built-in
4620functions if the argument uses @code{sizeof}.  This warning warns e.g.@:
4621about @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not an array,
4622but a pointer, and suggests a possible fix, or about
4623@code{memcpy (&foo, ptr, sizeof (&foo));}.  This warning is enabled by
4624@option{-Wall}.
4625
4626@item -Waddress
4627@opindex Waddress
4628@opindex Wno-address
4629Warn about suspicious uses of memory addresses. These include using
4630the address of a function in a conditional expression, such as
4631@code{void func(void); if (func)}, and comparisons against the memory
4632address of a string literal, such as @code{if (x == "abc")}.  Such
4633uses typically indicate a programmer error: the address of a function
4634always evaluates to true, so their use in a conditional usually
4635indicate that the programmer forgot the parentheses in a function
4636call; and comparisons against string literals result in unspecified
4637behavior and are not portable in C, so they usually indicate that the
4638programmer intended to use @code{strcmp}.  This warning is enabled by
4639@option{-Wall}.
4640
4641@item -Wlogical-op
4642@opindex Wlogical-op
4643@opindex Wno-logical-op
4644Warn about suspicious uses of logical operators in expressions.
4645This includes using logical operators in contexts where a
4646bit-wise operator is likely to be expected.
4647
4648@item -Waggregate-return
4649@opindex Waggregate-return
4650@opindex Wno-aggregate-return
4651Warn if any functions that return structures or unions are defined or
4652called.  (In languages where you can return an array, this also elicits
4653a warning.)
4654
4655@item -Wno-aggressive-loop-optimizations
4656@opindex Wno-aggressive-loop-optimizations
4657@opindex Waggressive-loop-optimizations
4658Warn if in a loop with constant number of iterations the compiler detects
4659undefined behavior in some statement during one or more of the iterations.
4660
4661@item -Wno-attributes
4662@opindex Wno-attributes
4663@opindex Wattributes
4664Do not warn if an unexpected @code{__attribute__} is used, such as
4665unrecognized attributes, function attributes applied to variables,
4666etc.  This does not stop errors for incorrect use of supported
4667attributes.
4668
4669@item -Wno-builtin-macro-redefined
4670@opindex Wno-builtin-macro-redefined
4671@opindex Wbuiltin-macro-redefined
4672Do not warn if certain built-in macros are redefined.  This suppresses
4673warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
4674@code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
4675
4676@item -Wstrict-prototypes @r{(C and Objective-C only)}
4677@opindex Wstrict-prototypes
4678@opindex Wno-strict-prototypes
4679Warn if a function is declared or defined without specifying the
4680argument types.  (An old-style function definition is permitted without
4681a warning if preceded by a declaration that specifies the argument
4682types.)
4683
4684@item -Wold-style-declaration @r{(C and Objective-C only)}
4685@opindex Wold-style-declaration
4686@opindex Wno-old-style-declaration
4687Warn for obsolescent usages, according to the C Standard, in a
4688declaration. For example, warn if storage-class specifiers like
4689@code{static} are not the first things in a declaration.  This warning
4690is also enabled by @option{-Wextra}.
4691
4692@item -Wold-style-definition @r{(C and Objective-C only)}
4693@opindex Wold-style-definition
4694@opindex Wno-old-style-definition
4695Warn if an old-style function definition is used.  A warning is given
4696even if there is a previous prototype.
4697
4698@item -Wmissing-parameter-type @r{(C and Objective-C only)}
4699@opindex Wmissing-parameter-type
4700@opindex Wno-missing-parameter-type
4701A function parameter is declared without a type specifier in K&R-style
4702functions:
4703
4704@smallexample
4705void foo(bar) @{ @}
4706@end smallexample
4707
4708This warning is also enabled by @option{-Wextra}.
4709
4710@item -Wmissing-prototypes @r{(C and Objective-C only)}
4711@opindex Wmissing-prototypes
4712@opindex Wno-missing-prototypes
4713Warn if a global function is defined without a previous prototype
4714declaration.  This warning is issued even if the definition itself
4715provides a prototype.  Use this option to detect global functions
4716that do not have a matching prototype declaration in a header file.
4717This option is not valid for C++ because all function declarations
4718provide prototypes and a non-matching declaration will declare an
4719overload rather than conflict with an earlier declaration.
4720Use @option{-Wmissing-declarations} to detect missing declarations in C++.
4721
4722@item -Wmissing-declarations
4723@opindex Wmissing-declarations
4724@opindex Wno-missing-declarations
4725Warn if a global function is defined without a previous declaration.
4726Do so even if the definition itself provides a prototype.
4727Use this option to detect global functions that are not declared in
4728header files.  In C, no warnings are issued for functions with previous
4729non-prototype declarations; use @option{-Wmissing-prototype} to detect
4730missing prototypes.  In C++, no warnings are issued for function templates,
4731or for inline functions, or for functions in anonymous namespaces.
4732
4733@item -Wmissing-field-initializers
4734@opindex Wmissing-field-initializers
4735@opindex Wno-missing-field-initializers
4736@opindex W
4737@opindex Wextra
4738@opindex Wno-extra
4739Warn if a structure's initializer has some fields missing.  For
4740example, the following code causes such a warning, because
4741@code{x.h} is implicitly zero:
4742
4743@smallexample
4744struct s @{ int f, g, h; @};
4745struct s x = @{ 3, 4 @};
4746@end smallexample
4747
4748This option does not warn about designated initializers, so the following
4749modification does not trigger a warning:
4750
4751@smallexample
4752struct s @{ int f, g, h; @};
4753struct s x = @{ .f = 3, .g = 4 @};
4754@end smallexample
4755
4756This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
4757warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.
4758
4759@item -Wno-multichar
4760@opindex Wno-multichar
4761@opindex Wmultichar
4762Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
4763Usually they indicate a typo in the user's code, as they have
4764implementation-defined values, and should not be used in portable code.
4765
4766@item -Wnormalized=<none|id|nfc|nfkc>
4767@opindex Wnormalized=
4768@cindex NFC
4769@cindex NFKC
4770@cindex character set, input normalization
4771In ISO C and ISO C++, two identifiers are different if they are
4772different sequences of characters.  However, sometimes when characters
4773outside the basic ASCII character set are used, you can have two
4774different character sequences that look the same.  To avoid confusion,
4775the ISO 10646 standard sets out some @dfn{normalization rules} which
4776when applied ensure that two sequences that look the same are turned into
4777the same sequence.  GCC can warn you if you are using identifiers that
4778have not been normalized; this option controls that warning.
4779
4780There are four levels of warning supported by GCC@.  The default is
4781@option{-Wnormalized=nfc}, which warns about any identifier that is
4782not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
4783recommended form for most uses.
4784
4785Unfortunately, there are some characters allowed in identifiers by
4786ISO C and ISO C++ that, when turned into NFC, are not allowed in
4787identifiers.  That is, there's no way to use these symbols in portable
4788ISO C or C++ and have all your identifiers in NFC@.
4789@option{-Wnormalized=id} suppresses the warning for these characters.
4790It is hoped that future versions of the standards involved will correct
4791this, which is why this option is not the default.
4792
4793You can switch the warning off for all characters by writing
4794@option{-Wnormalized=none}.  You should only do this if you
4795are using some other normalization scheme (like ``D''), because
4796otherwise you can easily create bugs that are literally impossible to see.
4797
4798Some characters in ISO 10646 have distinct meanings but look identical
4799in some fonts or display methodologies, especially once formatting has
4800been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
4801LETTER N'', displays just like a regular @code{n} that has been
4802placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
4803normalization scheme to convert all these into a standard form as
4804well, and GCC warns if your code is not in NFKC if you use
4805@option{-Wnormalized=nfkc}.  This warning is comparable to warning
4806about every identifier that contains the letter O because it might be
4807confused with the digit 0, and so is not the default, but may be
4808useful as a local coding convention if the programming environment
4809cannot be fixed to display these characters distinctly.
4810
4811@item -Wno-deprecated
4812@opindex Wno-deprecated
4813@opindex Wdeprecated
4814Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
4815
4816@item -Wno-deprecated-declarations
4817@opindex Wno-deprecated-declarations
4818@opindex Wdeprecated-declarations
4819Do not warn about uses of functions (@pxref{Function Attributes}),
4820variables (@pxref{Variable Attributes}), and types (@pxref{Type
4821Attributes}) marked as deprecated by using the @code{deprecated}
4822attribute.
4823
4824@item -Wno-overflow
4825@opindex Wno-overflow
4826@opindex Woverflow
4827Do not warn about compile-time overflow in constant expressions.
4828
4829@item -Wopenmp-simd
4830@opindex Wopenm-simd
4831Warn if the vectorizer cost model overrides the OpenMP or the Cilk Plus
4832simd directive set by user.  The @option{-fsimd-cost-model=unlimited} can
4833be used to relax the cost model.
4834
4835@item -Woverride-init @r{(C and Objective-C only)}
4836@opindex Woverride-init
4837@opindex Wno-override-init
4838@opindex W
4839@opindex Wextra
4840@opindex Wno-extra
4841Warn if an initialized field without side effects is overridden when
4842using designated initializers (@pxref{Designated Inits, , Designated
4843Initializers}).
4844
4845This warning is included in @option{-Wextra}.  To get other
4846@option{-Wextra} warnings without this one, use @option{-Wextra
4847-Wno-override-init}.
4848
4849@item -Wpacked
4850@opindex Wpacked
4851@opindex Wno-packed
4852Warn if a structure is given the packed attribute, but the packed
4853attribute has no effect on the layout or size of the structure.
4854Such structures may be mis-aligned for little benefit.  For
4855instance, in this code, the variable @code{f.x} in @code{struct bar}
4856is misaligned even though @code{struct bar} does not itself
4857have the packed attribute:
4858
4859@smallexample
4860@group
4861struct foo @{
4862  int x;
4863  char a, b, c, d;
4864@} __attribute__((packed));
4865struct bar @{
4866  char z;
4867  struct foo f;
4868@};
4869@end group
4870@end smallexample
4871
4872@item -Wpacked-bitfield-compat
4873@opindex Wpacked-bitfield-compat
4874@opindex Wno-packed-bitfield-compat
4875The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
4876on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
4877the change can lead to differences in the structure layout.  GCC
4878informs you when the offset of such a field has changed in GCC 4.4.
4879For example there is no longer a 4-bit padding between field @code{a}
4880and @code{b} in this structure:
4881
4882@smallexample
4883struct foo
4884@{
4885  char a:4;
4886  char b:8;
4887@} __attribute__ ((packed));
4888@end smallexample
4889
4890This warning is enabled by default.  Use
4891@option{-Wno-packed-bitfield-compat} to disable this warning.
4892
4893@item -Wpadded
4894@opindex Wpadded
4895@opindex Wno-padded
4896Warn if padding is included in a structure, either to align an element
4897of the structure or to align the whole structure.  Sometimes when this
4898happens it is possible to rearrange the fields of the structure to
4899reduce the padding and so make the structure smaller.
4900
4901@item -Wredundant-decls
4902@opindex Wredundant-decls
4903@opindex Wno-redundant-decls
4904Warn if anything is declared more than once in the same scope, even in
4905cases where multiple declaration is valid and changes nothing.
4906
4907@item -Wnested-externs @r{(C and Objective-C only)}
4908@opindex Wnested-externs
4909@opindex Wno-nested-externs
4910Warn if an @code{extern} declaration is encountered within a function.
4911
4912@item -Wno-inherited-variadic-ctor
4913@opindex Winherited-variadic-ctor
4914@opindex Wno-inherited-variadic-ctor
4915Suppress warnings about use of C++11 inheriting constructors when the
4916base class inherited from has a C variadic constructor; the warning is
4917on by default because the ellipsis is not inherited.
4918
4919@item -Winline
4920@opindex Winline
4921@opindex Wno-inline
4922Warn if a function that is declared as inline cannot be inlined.
4923Even with this option, the compiler does not warn about failures to
4924inline functions declared in system headers.
4925
4926The compiler uses a variety of heuristics to determine whether or not
4927to inline a function.  For example, the compiler takes into account
4928the size of the function being inlined and the amount of inlining
4929that has already been done in the current function.  Therefore,
4930seemingly insignificant changes in the source program can cause the
4931warnings produced by @option{-Winline} to appear or disappear.
4932
4933@item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
4934@opindex Wno-invalid-offsetof
4935@opindex Winvalid-offsetof
4936Suppress warnings from applying the @samp{offsetof} macro to a non-POD
4937type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
4938to a non-POD type is undefined.  In existing C++ implementations,
4939however, @samp{offsetof} typically gives meaningful results even when
4940applied to certain kinds of non-POD types (such as a simple
4941@samp{struct} that fails to be a POD type only by virtue of having a
4942constructor).  This flag is for users who are aware that they are
4943writing nonportable code and who have deliberately chosen to ignore the
4944warning about it.
4945
4946The restrictions on @samp{offsetof} may be relaxed in a future version
4947of the C++ standard.
4948
4949@item -Wno-int-to-pointer-cast
4950@opindex Wno-int-to-pointer-cast
4951@opindex Wint-to-pointer-cast
4952Suppress warnings from casts to pointer type of an integer of a
4953different size. In C++, casting to a pointer type of smaller size is
4954an error. @option{Wint-to-pointer-cast} is enabled by default.
4955
4956
4957@item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
4958@opindex Wno-pointer-to-int-cast
4959@opindex Wpointer-to-int-cast
4960Suppress warnings from casts from a pointer to an integer type of a
4961different size.
4962
4963@item -Winvalid-pch
4964@opindex Winvalid-pch
4965@opindex Wno-invalid-pch
4966Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
4967the search path but can't be used.
4968
4969@item -Wlong-long
4970@opindex Wlong-long
4971@opindex Wno-long-long
4972Warn if @samp{long long} type is used.  This is enabled by either
4973@option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
4974modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
4975
4976@item -Wvariadic-macros
4977@opindex Wvariadic-macros
4978@opindex Wno-variadic-macros
4979Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
4980alternate syntax when in pedantic ISO C99 mode.  This is default.
4981To inhibit the warning messages, use @option{-Wno-variadic-macros}.
4982
4983@item -Wvarargs
4984@opindex Wvarargs
4985@opindex Wno-varargs
4986Warn upon questionable usage of the macros used to handle variable
4987arguments like @samp{va_start}.  This is default.  To inhibit the
4988warning messages, use @option{-Wno-varargs}.
4989
4990@item -Wvector-operation-performance
4991@opindex Wvector-operation-performance
4992@opindex Wno-vector-operation-performance
4993Warn if vector operation is not implemented via SIMD capabilities of the
4994architecture.  Mainly useful for the performance tuning.
4995Vector operation can be implemented @code{piecewise}, which means that the
4996scalar operation is performed on every vector element;
4997@code{in parallel}, which means that the vector operation is implemented
4998using scalars of wider type, which normally is more performance efficient;
4999and @code{as a single scalar}, which means that vector fits into a
5000scalar type.
5001
5002@item -Wno-virtual-move-assign
5003@opindex Wvirtual-move-assign
5004@opindex Wno-virtual-move-assign
5005Suppress warnings about inheriting from a virtual base with a
5006non-trivial C++11 move assignment operator.  This is dangerous because
5007if the virtual base is reachable along more than one path, it will be
5008moved multiple times, which can mean both objects end up in the
5009moved-from state.  If the move assignment operator is written to avoid
5010moving from a moved-from object, this warning can be disabled.
5011
5012@item -Wvla
5013@opindex Wvla
5014@opindex Wno-vla
5015Warn if variable length array is used in the code.
5016@option{-Wno-vla} prevents the @option{-Wpedantic} warning of
5017the variable length array.
5018
5019@item -Wvolatile-register-var
5020@opindex Wvolatile-register-var
5021@opindex Wno-volatile-register-var
5022Warn if a register variable is declared volatile.  The volatile
5023modifier does not inhibit all optimizations that may eliminate reads
5024and/or writes to register variables.  This warning is enabled by
5025@option{-Wall}.
5026
5027@item -Wdisabled-optimization
5028@opindex Wdisabled-optimization
5029@opindex Wno-disabled-optimization
5030Warn if a requested optimization pass is disabled.  This warning does
5031not generally indicate that there is anything wrong with your code; it
5032merely indicates that GCC's optimizers are unable to handle the code
5033effectively.  Often, the problem is that your code is too big or too
5034complex; GCC refuses to optimize programs when the optimization
5035itself is likely to take inordinate amounts of time.
5036
5037@item -Wpointer-sign @r{(C and Objective-C only)}
5038@opindex Wpointer-sign
5039@opindex Wno-pointer-sign
5040Warn for pointer argument passing or assignment with different signedness.
5041This option is only supported for C and Objective-C@.  It is implied by
5042@option{-Wall} and by @option{-Wpedantic}, which can be disabled with
5043@option{-Wno-pointer-sign}.
5044
5045@item -Wstack-protector
5046@opindex Wstack-protector
5047@opindex Wno-stack-protector
5048This option is only active when @option{-fstack-protector} is active.  It
5049warns about functions that are not protected against stack smashing.
5050
5051@item -Woverlength-strings
5052@opindex Woverlength-strings
5053@opindex Wno-overlength-strings
5054Warn about string constants that are longer than the ``minimum
5055maximum'' length specified in the C standard.  Modern compilers
5056generally allow string constants that are much longer than the
5057standard's minimum limit, but very portable programs should avoid
5058using longer strings.
5059
5060The limit applies @emph{after} string constant concatenation, and does
5061not count the trailing NUL@.  In C90, the limit was 509 characters; in
5062C99, it was raised to 4095.  C++98 does not specify a normative
5063minimum maximum, so we do not diagnose overlength strings in C++@.
5064
5065This option is implied by @option{-Wpedantic}, and can be disabled with
5066@option{-Wno-overlength-strings}.
5067
5068@item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
5069@opindex Wunsuffixed-float-constants
5070
5071Issue a warning for any floating constant that does not have
5072a suffix.  When used together with @option{-Wsystem-headers} it
5073warns about such constants in system header files.  This can be useful
5074when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
5075from the decimal floating-point extension to C99.
5076@end table
5077
5078@node Debugging Options
5079@section Options for Debugging Your Program or GCC
5080@cindex options, debugging
5081@cindex debugging information options
5082
5083GCC has various special options that are used for debugging
5084either your program or GCC:
5085
5086@table @gcctabopt
5087@item -g
5088@opindex g
5089Produce debugging information in the operating system's native format
5090(stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
5091information.
5092
5093On most systems that use stabs format, @option{-g} enables use of extra
5094debugging information that only GDB can use; this extra information
5095makes debugging work better in GDB but probably makes other debuggers
5096crash or
5097refuse to read the program.  If you want to control for certain whether
5098to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
5099@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
5100
5101GCC allows you to use @option{-g} with
5102@option{-O}.  The shortcuts taken by optimized code may occasionally
5103produce surprising results: some variables you declared may not exist
5104at all; flow of control may briefly move where you did not expect it;
5105some statements may not be executed because they compute constant
5106results or their values are already at hand; some statements may
5107execute in different places because they have been moved out of loops.
5108
5109Nevertheless it proves possible to debug optimized output.  This makes
5110it reasonable to use the optimizer for programs that might have bugs.
5111
5112The following options are useful when GCC is generated with the
5113capability for more than one debugging format.
5114
5115@item -gsplit-dwarf
5116@opindex gsplit-dwarf
5117Separate as much dwarf debugging information as possible into a
5118separate output file with the extension .dwo.  This option allows
5119the build system to avoid linking files with debug information.  To
5120be useful, this option requires a debugger capable of reading .dwo
5121files.
5122
5123@item -ggdb
5124@opindex ggdb
5125Produce debugging information for use by GDB@.  This means to use the
5126most expressive format available (DWARF 2, stabs, or the native format
5127if neither of those are supported), including GDB extensions if at all
5128possible.
5129
5130@item -gpubnames
5131@opindex gpubnames
5132Generate dwarf .debug_pubnames and .debug_pubtypes sections.
5133
5134@item -ggnu-pubnames
5135@opindex ggnu-pubnames
5136Generate .debug_pubnames and .debug_pubtypes sections in a format
5137suitable for conversion into a GDB@ index.  This option is only useful
5138with a linker that can produce GDB@ index version 7.
5139
5140@item -gstabs
5141@opindex gstabs
5142Produce debugging information in stabs format (if that is supported),
5143without GDB extensions.  This is the format used by DBX on most BSD
5144systems.  On MIPS, Alpha and System V Release 4 systems this option
5145produces stabs debugging output that is not understood by DBX or SDB@.
5146On System V Release 4 systems this option requires the GNU assembler.
5147
5148@item -feliminate-unused-debug-symbols
5149@opindex feliminate-unused-debug-symbols
5150Produce debugging information in stabs format (if that is supported),
5151for only symbols that are actually used.
5152
5153@item -femit-class-debug-always
5154Instead of emitting debugging information for a C++ class in only one
5155object file, emit it in all object files using the class.  This option
5156should be used only with debuggers that are unable to handle the way GCC
5157normally emits debugging information for classes because using this
5158option increases the size of debugging information by as much as a
5159factor of two.
5160
5161@item -fdebug-types-section
5162@opindex fdebug-types-section
5163@opindex fno-debug-types-section
5164When using DWARF Version 4 or higher, type DIEs can be put into
5165their own @code{.debug_types} section instead of making them part of the
5166@code{.debug_info} section.  It is more efficient to put them in a separate
5167comdat sections since the linker can then remove duplicates.
5168But not all DWARF consumers support @code{.debug_types} sections yet
5169and on some objects @code{.debug_types} produces larger instead of smaller
5170debugging information.
5171
5172@item -gstabs+
5173@opindex gstabs+
5174Produce debugging information in stabs format (if that is supported),
5175using GNU extensions understood only by the GNU debugger (GDB)@.  The
5176use of these extensions is likely to make other debuggers crash or
5177refuse to read the program.
5178
5179@item -gcoff
5180@opindex gcoff
5181Produce debugging information in COFF format (if that is supported).
5182This is the format used by SDB on most System V systems prior to
5183System V Release 4.
5184
5185@item -gxcoff
5186@opindex gxcoff
5187Produce debugging information in XCOFF format (if that is supported).
5188This is the format used by the DBX debugger on IBM RS/6000 systems.
5189
5190@item -gxcoff+
5191@opindex gxcoff+
5192Produce debugging information in XCOFF format (if that is supported),
5193using GNU extensions understood only by the GNU debugger (GDB)@.  The
5194use of these extensions is likely to make other debuggers crash or
5195refuse to read the program, and may cause assemblers other than the GNU
5196assembler (GAS) to fail with an error.
5197
5198@item -gdwarf-@var{version}
5199@opindex gdwarf-@var{version}
5200Produce debugging information in DWARF format (if that is supported).
5201The value of @var{version} may be either 2, 3 or 4; the default version
5202for most targets is 4.
5203
5204Note that with DWARF Version 2, some ports require and always
5205use some non-conflicting DWARF 3 extensions in the unwind tables.
5206
5207Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
5208for maximum benefit.
5209
5210@item -grecord-gcc-switches
5211@opindex grecord-gcc-switches
5212This switch causes the command-line options used to invoke the
5213compiler that may affect code generation to be appended to the
5214DW_AT_producer attribute in DWARF debugging information.  The options
5215are concatenated with spaces separating them from each other and from
5216the compiler version.  See also @option{-frecord-gcc-switches} for another
5217way of storing compiler options into the object file.  This is the default.
5218
5219@item -gno-record-gcc-switches
5220@opindex gno-record-gcc-switches
5221Disallow appending command-line options to the DW_AT_producer attribute
5222in DWARF debugging information.
5223
5224@item -gstrict-dwarf
5225@opindex gstrict-dwarf
5226Disallow using extensions of later DWARF standard version than selected
5227with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
5228DWARF extensions from later standard versions is allowed.
5229
5230@item -gno-strict-dwarf
5231@opindex gno-strict-dwarf
5232Allow using extensions of later DWARF standard version than selected with
5233@option{-gdwarf-@var{version}}.
5234
5235@item -gvms
5236@opindex gvms
5237Produce debugging information in Alpha/VMS debug format (if that is
5238supported).  This is the format used by DEBUG on Alpha/VMS systems.
5239
5240@item -g@var{level}
5241@itemx -ggdb@var{level}
5242@itemx -gstabs@var{level}
5243@itemx -gcoff@var{level}
5244@itemx -gxcoff@var{level}
5245@itemx -gvms@var{level}
5246Request debugging information and also use @var{level} to specify how
5247much information.  The default level is 2.
5248
5249Level 0 produces no debug information at all.  Thus, @option{-g0} negates
5250@option{-g}.
5251
5252Level 1 produces minimal information, enough for making backtraces in
5253parts of the program that you don't plan to debug.  This includes
5254descriptions of functions and external variables, and line number
5255tables, but no information about local variables.
5256
5257Level 3 includes extra information, such as all the macro definitions
5258present in the program.  Some debuggers support macro expansion when
5259you use @option{-g3}.
5260
5261@option{-gdwarf-2} does not accept a concatenated debug level, because
5262GCC used to support an option @option{-gdwarf} that meant to generate
5263debug information in version 1 of the DWARF format (which is very
5264different from version 2), and it would have been too confusing.  That
5265debug format is long obsolete, but the option cannot be changed now.
5266Instead use an additional @option{-g@var{level}} option to change the
5267debug level for DWARF.
5268
5269@item -gtoggle
5270@opindex gtoggle
5271Turn off generation of debug info, if leaving out this option
5272generates it, or turn it on at level 2 otherwise.  The position of this
5273argument in the command line does not matter; it takes effect after all
5274other options are processed, and it does so only once, no matter how
5275many times it is given.  This is mainly intended to be used with
5276@option{-fcompare-debug}.
5277
5278@item -fsanitize=address
5279@opindex fsanitize=address
5280Enable AddressSanitizer, a fast memory error detector.
5281Memory access instructions will be instrumented to detect
5282out-of-bounds and use-after-free bugs.
5283See @uref{http://code.google.com/p/address-sanitizer/} for
5284more details.  The run-time behavior can be influenced using the
5285@env{ASAN_OPTIONS} environment variable; see
5286@url{https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags} for
5287a list of supported options.
5288
5289@item -fsanitize=kernel-address
5290@opindex fsanitize=kernel-address
5291Enable AddressSanitizer for Linux kernel.
5292See @uref{http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel} for more details.
5293
5294@item -fsanitize=thread
5295@opindex fsanitize=thread
5296Enable ThreadSanitizer, a fast data race detector.
5297Memory access instructions will be instrumented to detect
5298data race bugs.  See @uref{http://code.google.com/p/thread-sanitizer/} for more
5299details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
5300environment variable; see
5301@url{https://code.google.com/p/thread-sanitizer/wiki/Flags} for a list of
5302supported options.
5303
5304@item -fsanitize=leak
5305@opindex fsanitize=leak
5306Enable LeakSanitizer, a memory leak detector.
5307This option only matters for linking of executables and if neither
5308@option{-fsanitize=address} nor @option{-fsanitize=thread} is used.  In that
5309case it will link the executable against a library that overrides @code{malloc}
5310and other allocator functions.  See
5311@uref{https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer} for more
5312details.  The run-time behavior can be influenced using the
5313@env{LSAN_OPTIONS} environment variable.
5314
5315@item -fsanitize=undefined
5316@opindex fsanitize=undefined
5317Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
5318Various computations will be instrumented to detect undefined behavior
5319at runtime.  Current suboptions are:
5320
5321@table @gcctabopt
5322
5323@item -fsanitize=shift
5324@opindex fsanitize=shift
5325
5326This option enables checking that the result of a shift operation is
5327not undefined.  Note that what exactly is considered undefined differs
5328slightly between C and C++, as well as between ISO C90 and C99, etc.
5329
5330@item -fsanitize=integer-divide-by-zero
5331@opindex fsanitize=integer-divide-by-zero
5332
5333Detect integer division by zero as well as @code{INT_MIN / -1} division.
5334
5335@item -fsanitize=unreachable
5336@opindex fsanitize=unreachable
5337
5338With this option, the compiler will turn the @code{__builtin_unreachable}
5339call into a diagnostics message call instead.  When reaching the
5340@code{__builtin_unreachable} call, the behavior is undefined.
5341
5342@item -fsanitize=vla-bound
5343@opindex fsanitize=vla-bound
5344
5345This option instructs the compiler to check that the size of a variable
5346length array is positive.  This option does not have any effect in
5347@option{-std=c++1y} mode, as the standard requires the exception be thrown
5348instead.
5349
5350@item -fsanitize=null
5351@opindex fsanitize=null
5352
5353This option enables pointer checking.  Particularly, the application
5354built with this option turned on will issue an error message when it
5355tries to dereference a NULL pointer, or if a reference (possibly an
5356rvalue reference) is bound to a NULL pointer.
5357
5358@item -fsanitize=return
5359@opindex fsanitize=return
5360
5361This option enables return statement checking.  Programs
5362built with this option turned on will issue an error message
5363when the end of a non-void function is reached without actually
5364returning a value.  This option works in C++ only.
5365
5366@item -fsanitize=signed-integer-overflow
5367@opindex fsanitize=signed-integer-overflow
5368
5369This option enables signed integer overflow checking.  We check that
5370the result of @code{+}, @code{*}, and both unary and binary @code{-}
5371does not overflow in the signed arithmetics.  Note, integer promotion
5372rules must be taken into account.  That is, the following is not an
5373overflow:
5374@smallexample
5375signed char a = SCHAR_MAX;
5376a++;
5377@end smallexample
5378
5379@end table
5380
5381While @option{-ftrapv} causes traps for signed overflows to be emitted,
5382@option{-fsanitize=undefined} gives a diagnostic message.
5383This currently works only for the C family of languages.
5384
5385@item -fdump-final-insns@r{[}=@var{file}@r{]}
5386@opindex fdump-final-insns
5387Dump the final internal representation (RTL) to @var{file}.  If the
5388optional argument is omitted (or if @var{file} is @code{.}), the name
5389of the dump file is determined by appending @code{.gkd} to the
5390compilation output file name.
5391
5392@item -fcompare-debug@r{[}=@var{opts}@r{]}
5393@opindex fcompare-debug
5394@opindex fno-compare-debug
5395If no error occurs during compilation, run the compiler a second time,
5396adding @var{opts} and @option{-fcompare-debug-second} to the arguments
5397passed to the second compilation.  Dump the final internal
5398representation in both compilations, and print an error if they differ.
5399
5400If the equal sign is omitted, the default @option{-gtoggle} is used.
5401
5402The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
5403and nonzero, implicitly enables @option{-fcompare-debug}.  If
5404@env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
5405then it is used for @var{opts}, otherwise the default @option{-gtoggle}
5406is used.
5407
5408@option{-fcompare-debug=}, with the equal sign but without @var{opts},
5409is equivalent to @option{-fno-compare-debug}, which disables the dumping
5410of the final representation and the second compilation, preventing even
5411@env{GCC_COMPARE_DEBUG} from taking effect.
5412
5413To verify full coverage during @option{-fcompare-debug} testing, set
5414@env{GCC_COMPARE_DEBUG} to say @samp{-fcompare-debug-not-overridden},
5415which GCC rejects as an invalid option in any actual compilation
5416(rather than preprocessing, assembly or linking).  To get just a
5417warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
5418not overridden} will do.
5419
5420@item -fcompare-debug-second
5421@opindex fcompare-debug-second
5422This option is implicitly passed to the compiler for the second
5423compilation requested by @option{-fcompare-debug}, along with options to
5424silence warnings, and omitting other options that would cause
5425side-effect compiler outputs to files or to the standard output.  Dump
5426files and preserved temporary files are renamed so as to contain the
5427@code{.gk} additional extension during the second compilation, to avoid
5428overwriting those generated by the first.
5429
5430When this option is passed to the compiler driver, it causes the
5431@emph{first} compilation to be skipped, which makes it useful for little
5432other than debugging the compiler proper.
5433
5434@item -feliminate-dwarf2-dups
5435@opindex feliminate-dwarf2-dups
5436Compress DWARF 2 debugging information by eliminating duplicated
5437information about each symbol.  This option only makes sense when
5438generating DWARF 2 debugging information with @option{-gdwarf-2}.
5439
5440@item -femit-struct-debug-baseonly
5441@opindex femit-struct-debug-baseonly
5442Emit debug information for struct-like types
5443only when the base name of the compilation source file
5444matches the base name of file in which the struct is defined.
5445
5446This option substantially reduces the size of debugging information,
5447but at significant potential loss in type information to the debugger.
5448See @option{-femit-struct-debug-reduced} for a less aggressive option.
5449See @option{-femit-struct-debug-detailed} for more detailed control.
5450
5451This option works only with DWARF 2.
5452
5453@item -femit-struct-debug-reduced
5454@opindex femit-struct-debug-reduced
5455Emit debug information for struct-like types
5456only when the base name of the compilation source file
5457matches the base name of file in which the type is defined,
5458unless the struct is a template or defined in a system header.
5459
5460This option significantly reduces the size of debugging information,
5461with some potential loss in type information to the debugger.
5462See @option{-femit-struct-debug-baseonly} for a more aggressive option.
5463See @option{-femit-struct-debug-detailed} for more detailed control.
5464
5465This option works only with DWARF 2.
5466
5467@item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
5468Specify the struct-like types
5469for which the compiler generates debug information.
5470The intent is to reduce duplicate struct debug information
5471between different object files within the same program.
5472
5473This option is a detailed version of
5474@option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
5475which serves for most needs.
5476
5477A specification has the syntax@*
5478[@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
5479
5480The optional first word limits the specification to
5481structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
5482A struct type is used directly when it is the type of a variable, member.
5483Indirect uses arise through pointers to structs.
5484That is, when use of an incomplete struct is valid, the use is indirect.
5485An example is
5486@samp{struct one direct; struct two * indirect;}.
5487
5488The optional second word limits the specification to
5489ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
5490Generic structs are a bit complicated to explain.
5491For C++, these are non-explicit specializations of template classes,
5492or non-template classes within the above.
5493Other programming languages have generics,
5494but @option{-femit-struct-debug-detailed} does not yet implement them.
5495
5496The third word specifies the source files for those
5497structs for which the compiler should emit debug information.
5498The values @samp{none} and @samp{any} have the normal meaning.
5499The value @samp{base} means that
5500the base of name of the file in which the type declaration appears
5501must match the base of the name of the main compilation file.
5502In practice, this means that when compiling @file{foo.c}, debug information
5503is generated for types declared in that file and @file{foo.h},
5504but not other header files.
5505The value @samp{sys} means those types satisfying @samp{base}
5506or declared in system or compiler headers.
5507
5508You may need to experiment to determine the best settings for your application.
5509
5510The default is @option{-femit-struct-debug-detailed=all}.
5511
5512This option works only with DWARF 2.
5513
5514@item -fno-merge-debug-strings
5515@opindex fmerge-debug-strings
5516@opindex fno-merge-debug-strings
5517Direct the linker to not merge together strings in the debugging
5518information that are identical in different object files.  Merging is
5519not supported by all assemblers or linkers.  Merging decreases the size
5520of the debug information in the output file at the cost of increasing
5521link processing time.  Merging is enabled by default.
5522
5523@item -fdebug-prefix-map=@var{old}=@var{new}
5524@opindex fdebug-prefix-map
5525When compiling files in directory @file{@var{old}}, record debugging
5526information describing them as in @file{@var{new}} instead.
5527
5528@item -fno-dwarf2-cfi-asm
5529@opindex fdwarf2-cfi-asm
5530@opindex fno-dwarf2-cfi-asm
5531Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
5532instead of using GAS @code{.cfi_*} directives.
5533
5534@cindex @command{prof}
5535@item -p
5536@opindex p
5537Generate extra code to write profile information suitable for the
5538analysis program @command{prof}.  You must use this option when compiling
5539the source files you want data about, and you must also use it when
5540linking.
5541
5542@cindex @command{gprof}
5543@item -pg
5544@opindex pg
5545Generate extra code to write profile information suitable for the
5546analysis program @command{gprof}.  You must use this option when compiling
5547the source files you want data about, and you must also use it when
5548linking.
5549
5550@item -Q
5551@opindex Q
5552Makes the compiler print out each function name as it is compiled, and
5553print some statistics about each pass when it finishes.
5554
5555@item -ftime-report
5556@opindex ftime-report
5557Makes the compiler print some statistics about the time consumed by each
5558pass when it finishes.
5559
5560@item -fmem-report
5561@opindex fmem-report
5562Makes the compiler print some statistics about permanent memory
5563allocation when it finishes.
5564
5565@item -fmem-report-wpa
5566@opindex fmem-report-wpa
5567Makes the compiler print some statistics about permanent memory
5568allocation for the WPA phase only.
5569
5570@item -fpre-ipa-mem-report
5571@opindex fpre-ipa-mem-report
5572@item -fpost-ipa-mem-report
5573@opindex fpost-ipa-mem-report
5574Makes the compiler print some statistics about permanent memory
5575allocation before or after interprocedural optimization.
5576
5577@item -fprofile-report
5578@opindex fprofile-report
5579Makes the compiler print some statistics about consistency of the
5580(estimated) profile and effect of individual passes.
5581
5582@item -fstack-usage
5583@opindex fstack-usage
5584Makes the compiler output stack usage information for the program, on a
5585per-function basis.  The filename for the dump is made by appending
5586@file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
5587the output file, if explicitly specified and it is not an executable,
5588otherwise it is the basename of the source file.  An entry is made up
5589of three fields:
5590
5591@itemize
5592@item
5593The name of the function.
5594@item
5595A number of bytes.
5596@item
5597One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
5598@end itemize
5599
5600The qualifier @code{static} means that the function manipulates the stack
5601statically: a fixed number of bytes are allocated for the frame on function
5602entry and released on function exit; no stack adjustments are otherwise made
5603in the function.  The second field is this fixed number of bytes.
5604
5605The qualifier @code{dynamic} means that the function manipulates the stack
5606dynamically: in addition to the static allocation described above, stack
5607adjustments are made in the body of the function, for example to push/pop
5608arguments around function calls.  If the qualifier @code{bounded} is also
5609present, the amount of these adjustments is bounded at compile time and
5610the second field is an upper bound of the total amount of stack used by
5611the function.  If it is not present, the amount of these adjustments is
5612not bounded at compile time and the second field only represents the
5613bounded part.
5614
5615@item -fprofile-arcs
5616@opindex fprofile-arcs
5617Add code so that program flow @dfn{arcs} are instrumented.  During
5618execution the program records how many times each branch and call is
5619executed and how many times it is taken or returns.  When the compiled
5620program exits it saves this data to a file called
5621@file{@var{auxname}.gcda} for each source file.  The data may be used for
5622profile-directed optimizations (@option{-fbranch-probabilities}), or for
5623test coverage analysis (@option{-ftest-coverage}).  Each object file's
5624@var{auxname} is generated from the name of the output file, if
5625explicitly specified and it is not the final executable, otherwise it is
5626the basename of the source file.  In both cases any suffix is removed
5627(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
5628@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
5629@xref{Cross-profiling}.
5630
5631@cindex @command{gcov}
5632@item --coverage
5633@opindex coverage
5634
5635This option is used to compile and link code instrumented for coverage
5636analysis.  The option is a synonym for @option{-fprofile-arcs}
5637@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
5638linking).  See the documentation for those options for more details.
5639
5640@itemize
5641
5642@item
5643Compile the source files with @option{-fprofile-arcs} plus optimization
5644and code generation options.  For test coverage analysis, use the
5645additional @option{-ftest-coverage} option.  You do not need to profile
5646every source file in a program.
5647
5648@item
5649Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
5650(the latter implies the former).
5651
5652@item
5653Run the program on a representative workload to generate the arc profile
5654information.  This may be repeated any number of times.  You can run
5655concurrent instances of your program, and provided that the file system
5656supports locking, the data files will be correctly updated.  Also
5657@code{fork} calls are detected and correctly handled (double counting
5658will not happen).
5659
5660@item
5661For profile-directed optimizations, compile the source files again with
5662the same optimization and code generation options plus
5663@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
5664Control Optimization}).
5665
5666@item
5667For test coverage analysis, use @command{gcov} to produce human readable
5668information from the @file{.gcno} and @file{.gcda} files.  Refer to the
5669@command{gcov} documentation for further information.
5670
5671@end itemize
5672
5673With @option{-fprofile-arcs}, for each function of your program GCC
5674creates a program flow graph, then finds a spanning tree for the graph.
5675Only arcs that are not on the spanning tree have to be instrumented: the
5676compiler adds code to count the number of times that these arcs are
5677executed.  When an arc is the only exit or only entrance to a block, the
5678instrumentation code can be added to the block; otherwise, a new basic
5679block must be created to hold the instrumentation code.
5680
5681@need 2000
5682@item -ftest-coverage
5683@opindex ftest-coverage
5684Produce a notes file that the @command{gcov} code-coverage utility
5685(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
5686show program coverage.  Each source file's note file is called
5687@file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
5688above for a description of @var{auxname} and instructions on how to
5689generate test coverage data.  Coverage data matches the source files
5690more closely if you do not optimize.
5691
5692@item -fdbg-cnt-list
5693@opindex fdbg-cnt-list
5694Print the name and the counter upper bound for all debug counters.
5695
5696
5697@item -fdbg-cnt=@var{counter-value-list}
5698@opindex fdbg-cnt
5699Set the internal debug counter upper bound.  @var{counter-value-list}
5700is a comma-separated list of @var{name}:@var{value} pairs
5701which sets the upper bound of each debug counter @var{name} to @var{value}.
5702All debug counters have the initial upper bound of @code{UINT_MAX};
5703thus @code{dbg_cnt()} returns true always unless the upper bound
5704is set by this option.
5705For example, with @option{-fdbg-cnt=dce:10,tail_call:0},
5706@code{dbg_cnt(dce)} returns true only for first 10 invocations.
5707
5708@item -fenable-@var{kind}-@var{pass}
5709@itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
5710@opindex fdisable-
5711@opindex fenable-
5712
5713This is a set of options that are used to explicitly disable/enable
5714optimization passes.  These options are intended for use for debugging GCC.
5715Compiler users should use regular options for enabling/disabling
5716passes instead.
5717
5718@table @gcctabopt
5719
5720@item -fdisable-ipa-@var{pass}
5721Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
5722statically invoked in the compiler multiple times, the pass name should be
5723appended with a sequential number starting from 1.
5724
5725@item -fdisable-rtl-@var{pass}
5726@itemx -fdisable-rtl-@var{pass}=@var{range-list}
5727Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
5728statically invoked in the compiler multiple times, the pass name should be
5729appended with a sequential number starting from 1.  @var{range-list} is a
5730comma-separated list of function ranges or assembler names.  Each range is a number
5731pair separated by a colon.  The range is inclusive in both ends.  If the range
5732is trivial, the number pair can be simplified as a single number.  If the
5733function's call graph node's @var{uid} falls within one of the specified ranges,
5734the @var{pass} is disabled for that function.  The @var{uid} is shown in the
5735function header of a dump file, and the pass names can be dumped by using
5736option @option{-fdump-passes}.
5737
5738@item -fdisable-tree-@var{pass}
5739@itemx -fdisable-tree-@var{pass}=@var{range-list}
5740Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
5741option arguments.
5742
5743@item -fenable-ipa-@var{pass}
5744Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
5745statically invoked in the compiler multiple times, the pass name should be
5746appended with a sequential number starting from 1.
5747
5748@item -fenable-rtl-@var{pass}
5749@itemx -fenable-rtl-@var{pass}=@var{range-list}
5750Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
5751description and examples.
5752
5753@item -fenable-tree-@var{pass}
5754@itemx -fenable-tree-@var{pass}=@var{range-list}
5755Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
5756of option arguments.
5757
5758@end table
5759
5760Here are some examples showing uses of these options.
5761
5762@smallexample
5763
5764# disable ccp1 for all functions
5765   -fdisable-tree-ccp1
5766# disable complete unroll for function whose cgraph node uid is 1
5767   -fenable-tree-cunroll=1
5768# disable gcse2 for functions at the following ranges [1,1],
5769# [300,400], and [400,1000]
5770# disable gcse2 for functions foo and foo2
5771   -fdisable-rtl-gcse2=foo,foo2
5772# disable early inlining
5773   -fdisable-tree-einline
5774# disable ipa inlining
5775   -fdisable-ipa-inline
5776# enable tree full unroll
5777   -fenable-tree-unroll
5778
5779@end smallexample
5780
5781@item -d@var{letters}
5782@itemx -fdump-rtl-@var{pass}
5783@itemx -fdump-rtl-@var{pass}=@var{filename}
5784@opindex d
5785@opindex fdump-rtl-@var{pass}
5786Says to make debugging dumps during compilation at times specified by
5787@var{letters}.  This is used for debugging the RTL-based passes of the
5788compiler.  The file names for most of the dumps are made by appending
5789a pass number and a word to the @var{dumpname}, and the files are
5790created in the directory of the output file. In case of
5791@option{=@var{filename}} option, the dump is output on the given file
5792instead of the pass numbered dump files. Note that the pass number is
5793computed statically as passes get registered into the pass manager.
5794Thus the numbering is not related to the dynamic order of execution of
5795passes.  In particular, a pass installed by a plugin could have a
5796number over 200 even if it executed quite early.  @var{dumpname} is
5797generated from the name of the output file, if explicitly specified
5798and it is not an executable, otherwise it is the basename of the
5799source file. These switches may have different effects when
5800@option{-E} is used for preprocessing.
5801
5802Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
5803@option{-d} option @var{letters}.  Here are the possible
5804letters for use in @var{pass} and @var{letters}, and their meanings:
5805
5806@table @gcctabopt
5807
5808@item -fdump-rtl-alignments
5809@opindex fdump-rtl-alignments
5810Dump after branch alignments have been computed.
5811
5812@item -fdump-rtl-asmcons
5813@opindex fdump-rtl-asmcons
5814Dump after fixing rtl statements that have unsatisfied in/out constraints.
5815
5816@item -fdump-rtl-auto_inc_dec
5817@opindex fdump-rtl-auto_inc_dec
5818Dump after auto-inc-dec discovery.  This pass is only run on
5819architectures that have auto inc or auto dec instructions.
5820
5821@item -fdump-rtl-barriers
5822@opindex fdump-rtl-barriers
5823Dump after cleaning up the barrier instructions.
5824
5825@item -fdump-rtl-bbpart
5826@opindex fdump-rtl-bbpart
5827Dump after partitioning hot and cold basic blocks.
5828
5829@item -fdump-rtl-bbro
5830@opindex fdump-rtl-bbro
5831Dump after block reordering.
5832
5833@item -fdump-rtl-btl1
5834@itemx -fdump-rtl-btl2
5835@opindex fdump-rtl-btl2
5836@opindex fdump-rtl-btl2
5837@option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
5838after the two branch
5839target load optimization passes.
5840
5841@item -fdump-rtl-bypass
5842@opindex fdump-rtl-bypass
5843Dump after jump bypassing and control flow optimizations.
5844
5845@item -fdump-rtl-combine
5846@opindex fdump-rtl-combine
5847Dump after the RTL instruction combination pass.
5848
5849@item -fdump-rtl-compgotos
5850@opindex fdump-rtl-compgotos
5851Dump after duplicating the computed gotos.
5852
5853@item -fdump-rtl-ce1
5854@itemx -fdump-rtl-ce2
5855@itemx -fdump-rtl-ce3
5856@opindex fdump-rtl-ce1
5857@opindex fdump-rtl-ce2
5858@opindex fdump-rtl-ce3
5859@option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
5860@option{-fdump-rtl-ce3} enable dumping after the three
5861if conversion passes.
5862
5863@item -fdump-rtl-cprop_hardreg
5864@opindex fdump-rtl-cprop_hardreg
5865Dump after hard register copy propagation.
5866
5867@item -fdump-rtl-csa
5868@opindex fdump-rtl-csa
5869Dump after combining stack adjustments.
5870
5871@item -fdump-rtl-cse1
5872@itemx -fdump-rtl-cse2
5873@opindex fdump-rtl-cse1
5874@opindex fdump-rtl-cse2
5875@option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
5876the two common subexpression elimination passes.
5877
5878@item -fdump-rtl-dce
5879@opindex fdump-rtl-dce
5880Dump after the standalone dead code elimination passes.
5881
5882@item -fdump-rtl-dbr
5883@opindex fdump-rtl-dbr
5884Dump after delayed branch scheduling.
5885
5886@item -fdump-rtl-dce1
5887@itemx -fdump-rtl-dce2
5888@opindex fdump-rtl-dce1
5889@opindex fdump-rtl-dce2
5890@option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
5891the two dead store elimination passes.
5892
5893@item -fdump-rtl-eh
5894@opindex fdump-rtl-eh
5895Dump after finalization of EH handling code.
5896
5897@item -fdump-rtl-eh_ranges
5898@opindex fdump-rtl-eh_ranges
5899Dump after conversion of EH handling range regions.
5900
5901@item -fdump-rtl-expand
5902@opindex fdump-rtl-expand
5903Dump after RTL generation.
5904
5905@item -fdump-rtl-fwprop1
5906@itemx -fdump-rtl-fwprop2
5907@opindex fdump-rtl-fwprop1
5908@opindex fdump-rtl-fwprop2
5909@option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
5910dumping after the two forward propagation passes.
5911
5912@item -fdump-rtl-gcse1
5913@itemx -fdump-rtl-gcse2
5914@opindex fdump-rtl-gcse1
5915@opindex fdump-rtl-gcse2
5916@option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
5917after global common subexpression elimination.
5918
5919@item -fdump-rtl-init-regs
5920@opindex fdump-rtl-init-regs
5921Dump after the initialization of the registers.
5922
5923@item -fdump-rtl-initvals
5924@opindex fdump-rtl-initvals
5925Dump after the computation of the initial value sets.
5926
5927@item -fdump-rtl-into_cfglayout
5928@opindex fdump-rtl-into_cfglayout
5929Dump after converting to cfglayout mode.
5930
5931@item -fdump-rtl-ira
5932@opindex fdump-rtl-ira
5933Dump after iterated register allocation.
5934
5935@item -fdump-rtl-jump
5936@opindex fdump-rtl-jump
5937Dump after the second jump optimization.
5938
5939@item -fdump-rtl-loop2
5940@opindex fdump-rtl-loop2
5941@option{-fdump-rtl-loop2} enables dumping after the rtl
5942loop optimization passes.
5943
5944@item -fdump-rtl-mach
5945@opindex fdump-rtl-mach
5946Dump after performing the machine dependent reorganization pass, if that
5947pass exists.
5948
5949@item -fdump-rtl-mode_sw
5950@opindex fdump-rtl-mode_sw
5951Dump after removing redundant mode switches.
5952
5953@item -fdump-rtl-rnreg
5954@opindex fdump-rtl-rnreg
5955Dump after register renumbering.
5956
5957@item -fdump-rtl-outof_cfglayout
5958@opindex fdump-rtl-outof_cfglayout
5959Dump after converting from cfglayout mode.
5960
5961@item -fdump-rtl-peephole2
5962@opindex fdump-rtl-peephole2
5963Dump after the peephole pass.
5964
5965@item -fdump-rtl-postreload
5966@opindex fdump-rtl-postreload
5967Dump after post-reload optimizations.
5968
5969@item -fdump-rtl-pro_and_epilogue
5970@opindex fdump-rtl-pro_and_epilogue
5971Dump after generating the function prologues and epilogues.
5972
5973@item -fdump-rtl-sched1
5974@itemx -fdump-rtl-sched2
5975@opindex fdump-rtl-sched1
5976@opindex fdump-rtl-sched2
5977@option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
5978after the basic block scheduling passes.
5979
5980@item -fdump-rtl-ree
5981@opindex fdump-rtl-ree
5982Dump after sign/zero extension elimination.
5983
5984@item -fdump-rtl-seqabstr
5985@opindex fdump-rtl-seqabstr
5986Dump after common sequence discovery.
5987
5988@item -fdump-rtl-shorten
5989@opindex fdump-rtl-shorten
5990Dump after shortening branches.
5991
5992@item -fdump-rtl-sibling
5993@opindex fdump-rtl-sibling
5994Dump after sibling call optimizations.
5995
5996@item -fdump-rtl-split1
5997@itemx -fdump-rtl-split2
5998@itemx -fdump-rtl-split3
5999@itemx -fdump-rtl-split4
6000@itemx -fdump-rtl-split5
6001@opindex fdump-rtl-split1
6002@opindex fdump-rtl-split2
6003@opindex fdump-rtl-split3
6004@opindex fdump-rtl-split4
6005@opindex fdump-rtl-split5
6006@option{-fdump-rtl-split1}, @option{-fdump-rtl-split2},
6007@option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and
6008@option{-fdump-rtl-split5} enable dumping after five rounds of
6009instruction splitting.
6010
6011@item -fdump-rtl-sms
6012@opindex fdump-rtl-sms
6013Dump after modulo scheduling.  This pass is only run on some
6014architectures.
6015
6016@item -fdump-rtl-stack
6017@opindex fdump-rtl-stack
6018Dump after conversion from GCC's ``flat register file'' registers to the
6019x87's stack-like registers.  This pass is only run on x86 variants.
6020
6021@item -fdump-rtl-subreg1
6022@itemx -fdump-rtl-subreg2
6023@opindex fdump-rtl-subreg1
6024@opindex fdump-rtl-subreg2
6025@option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
6026the two subreg expansion passes.
6027
6028@item -fdump-rtl-unshare
6029@opindex fdump-rtl-unshare
6030Dump after all rtl has been unshared.
6031
6032@item -fdump-rtl-vartrack
6033@opindex fdump-rtl-vartrack
6034Dump after variable tracking.
6035
6036@item -fdump-rtl-vregs
6037@opindex fdump-rtl-vregs
6038Dump after converting virtual registers to hard registers.
6039
6040@item -fdump-rtl-web
6041@opindex fdump-rtl-web
6042Dump after live range splitting.
6043
6044@item -fdump-rtl-regclass
6045@itemx -fdump-rtl-subregs_of_mode_init
6046@itemx -fdump-rtl-subregs_of_mode_finish
6047@itemx -fdump-rtl-dfinit
6048@itemx -fdump-rtl-dfinish
6049@opindex fdump-rtl-regclass
6050@opindex fdump-rtl-subregs_of_mode_init
6051@opindex fdump-rtl-subregs_of_mode_finish
6052@opindex fdump-rtl-dfinit
6053@opindex fdump-rtl-dfinish
6054These dumps are defined but always produce empty files.
6055
6056@item -da
6057@itemx -fdump-rtl-all
6058@opindex da
6059@opindex fdump-rtl-all
6060Produce all the dumps listed above.
6061
6062@item -dA
6063@opindex dA
6064Annotate the assembler output with miscellaneous debugging information.
6065
6066@item -dD
6067@opindex dD
6068Dump all macro definitions, at the end of preprocessing, in addition to
6069normal output.
6070
6071@item -dH
6072@opindex dH
6073Produce a core dump whenever an error occurs.
6074
6075@item -dp
6076@opindex dp
6077Annotate the assembler output with a comment indicating which
6078pattern and alternative is used.  The length of each instruction is
6079also printed.
6080
6081@item -dP
6082@opindex dP
6083Dump the RTL in the assembler output as a comment before each instruction.
6084Also turns on @option{-dp} annotation.
6085
6086@item -dx
6087@opindex dx
6088Just generate RTL for a function instead of compiling it.  Usually used
6089with @option{-fdump-rtl-expand}.
6090@end table
6091
6092@item -fdump-noaddr
6093@opindex fdump-noaddr
6094When doing debugging dumps, suppress address output.  This makes it more
6095feasible to use diff on debugging dumps for compiler invocations with
6096different compiler binaries and/or different
6097text / bss / data / heap / stack / dso start locations.
6098
6099@item -fdump-unnumbered
6100@opindex fdump-unnumbered
6101When doing debugging dumps, suppress instruction numbers and address output.
6102This makes it more feasible to use diff on debugging dumps for compiler
6103invocations with different options, in particular with and without
6104@option{-g}.
6105
6106@item -fdump-unnumbered-links
6107@opindex fdump-unnumbered-links
6108When doing debugging dumps (see @option{-d} option above), suppress
6109instruction numbers for the links to the previous and next instructions
6110in a sequence.
6111
6112@item -fdump-translation-unit @r{(C++ only)}
6113@itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
6114@opindex fdump-translation-unit
6115Dump a representation of the tree structure for the entire translation
6116unit to a file.  The file name is made by appending @file{.tu} to the
6117source file name, and the file is created in the same directory as the
6118output file.  If the @samp{-@var{options}} form is used, @var{options}
6119controls the details of the dump as described for the
6120@option{-fdump-tree} options.
6121
6122@item -fdump-class-hierarchy @r{(C++ only)}
6123@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
6124@opindex fdump-class-hierarchy
6125Dump a representation of each class's hierarchy and virtual function
6126table layout to a file.  The file name is made by appending
6127@file{.class} to the source file name, and the file is created in the
6128same directory as the output file.  If the @samp{-@var{options}} form
6129is used, @var{options} controls the details of the dump as described
6130for the @option{-fdump-tree} options.
6131
6132@item -fdump-ipa-@var{switch}
6133@opindex fdump-ipa
6134Control the dumping at various stages of inter-procedural analysis
6135language tree to a file.  The file name is generated by appending a
6136switch specific suffix to the source file name, and the file is created
6137in the same directory as the output file.  The following dumps are
6138possible:
6139
6140@table @samp
6141@item all
6142Enables all inter-procedural analysis dumps.
6143
6144@item cgraph
6145Dumps information about call-graph optimization, unused function removal,
6146and inlining decisions.
6147
6148@item inline
6149Dump after function inlining.
6150
6151@end table
6152
6153@item -fdump-passes
6154@opindex fdump-passes
6155Dump the list of optimization passes that are turned on and off by
6156the current command-line options.
6157
6158@item -fdump-statistics-@var{option}
6159@opindex fdump-statistics
6160Enable and control dumping of pass statistics in a separate file.  The
6161file name is generated by appending a suffix ending in
6162@samp{.statistics} to the source file name, and the file is created in
6163the same directory as the output file.  If the @samp{-@var{option}}
6164form is used, @samp{-stats} causes counters to be summed over the
6165whole compilation unit while @samp{-details} dumps every event as
6166the passes generate them.  The default with no option is to sum
6167counters for each function compiled.
6168
6169@item -fdump-tree-@var{switch}
6170@itemx -fdump-tree-@var{switch}-@var{options}
6171@itemx -fdump-tree-@var{switch}-@var{options}=@var{filename}
6172@opindex fdump-tree
6173Control the dumping at various stages of processing the intermediate
6174language tree to a file.  The file name is generated by appending a
6175switch-specific suffix to the source file name, and the file is
6176created in the same directory as the output file. In case of
6177@option{=@var{filename}} option, the dump is output on the given file
6178instead of the auto named dump files.  If the @samp{-@var{options}}
6179form is used, @var{options} is a list of @samp{-} separated options
6180which control the details of the dump.  Not all options are applicable
6181to all dumps; those that are not meaningful are ignored.  The
6182following options are available
6183
6184@table @samp
6185@item address
6186Print the address of each node.  Usually this is not meaningful as it
6187changes according to the environment and source file.  Its primary use
6188is for tying up a dump file with a debug environment.
6189@item asmname
6190If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
6191in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
6192use working backward from mangled names in the assembly file.
6193@item slim
6194When dumping front-end intermediate representations, inhibit dumping
6195of members of a scope or body of a function merely because that scope
6196has been reached.  Only dump such items when they are directly reachable
6197by some other path.
6198
6199When dumping pretty-printed trees, this option inhibits dumping the
6200bodies of control structures.
6201
6202When dumping RTL, print the RTL in slim (condensed) form instead of
6203the default LISP-like representation.
6204@item raw
6205Print a raw representation of the tree.  By default, trees are
6206pretty-printed into a C-like representation.
6207@item details
6208Enable more detailed dumps (not honored by every dump option). Also
6209include information from the optimization passes.
6210@item stats
6211Enable dumping various statistics about the pass (not honored by every dump
6212option).
6213@item blocks
6214Enable showing basic block boundaries (disabled in raw dumps).
6215@item graph
6216For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
6217dump a representation of the control flow graph suitable for viewing with
6218GraphViz to @file{@var{file}.@var{passid}.@var{pass}.dot}.  Each function in
6219the file is pretty-printed as a subgraph, so that GraphViz can render them
6220all in a single plot.
6221
6222This option currently only works for RTL dumps, and the RTL is always
6223dumped in slim form.
6224@item vops
6225Enable showing virtual operands for every statement.
6226@item lineno
6227Enable showing line numbers for statements.
6228@item uid
6229Enable showing the unique ID (@code{DECL_UID}) for each variable.
6230@item verbose
6231Enable showing the tree dump for each statement.
6232@item eh
6233Enable showing the EH region number holding each statement.
6234@item scev
6235Enable showing scalar evolution analysis details.
6236@item optimized
6237Enable showing optimization information (only available in certain
6238passes).
6239@item missed
6240Enable showing missed optimization information (only available in certain
6241passes).
6242@item notes
6243Enable other detailed optimization information (only available in
6244certain passes).
6245@item =@var{filename}
6246Instead of an auto named dump file, output into the given file
6247name. The file names @file{stdout} and @file{stderr} are treated
6248specially and are considered already open standard streams. For
6249example,
6250
6251@smallexample
6252gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
6253     -fdump-tree-pre=stderr file.c
6254@end smallexample
6255
6256outputs vectorizer dump into @file{foo.dump}, while the PRE dump is
6257output on to @file{stderr}. If two conflicting dump filenames are
6258given for the same pass, then the latter option overrides the earlier
6259one.
6260
6261@item all
6262Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
6263and @option{lineno}.
6264
6265@item optall
6266Turn on all optimization options, i.e., @option{optimized},
6267@option{missed}, and @option{note}.
6268@end table
6269
6270The following tree dumps are possible:
6271@table @samp
6272
6273@item original
6274@opindex fdump-tree-original
6275Dump before any tree based optimization, to @file{@var{file}.original}.
6276
6277@item optimized
6278@opindex fdump-tree-optimized
6279Dump after all tree based optimization, to @file{@var{file}.optimized}.
6280
6281@item gimple
6282@opindex fdump-tree-gimple
6283Dump each function before and after the gimplification pass to a file.  The
6284file name is made by appending @file{.gimple} to the source file name.
6285
6286@item cfg
6287@opindex fdump-tree-cfg
6288Dump the control flow graph of each function to a file.  The file name is
6289made by appending @file{.cfg} to the source file name.
6290
6291@item ch
6292@opindex fdump-tree-ch
6293Dump each function after copying loop headers.  The file name is made by
6294appending @file{.ch} to the source file name.
6295
6296@item ssa
6297@opindex fdump-tree-ssa
6298Dump SSA related information to a file.  The file name is made by appending
6299@file{.ssa} to the source file name.
6300
6301@item alias
6302@opindex fdump-tree-alias
6303Dump aliasing information for each function.  The file name is made by
6304appending @file{.alias} to the source file name.
6305
6306@item ccp
6307@opindex fdump-tree-ccp
6308Dump each function after CCP@.  The file name is made by appending
6309@file{.ccp} to the source file name.
6310
6311@item storeccp
6312@opindex fdump-tree-storeccp
6313Dump each function after STORE-CCP@.  The file name is made by appending
6314@file{.storeccp} to the source file name.
6315
6316@item pre
6317@opindex fdump-tree-pre
6318Dump trees after partial redundancy elimination.  The file name is made
6319by appending @file{.pre} to the source file name.
6320
6321@item fre
6322@opindex fdump-tree-fre
6323Dump trees after full redundancy elimination.  The file name is made
6324by appending @file{.fre} to the source file name.
6325
6326@item copyprop
6327@opindex fdump-tree-copyprop
6328Dump trees after copy propagation.  The file name is made
6329by appending @file{.copyprop} to the source file name.
6330
6331@item store_copyprop
6332@opindex fdump-tree-store_copyprop
6333Dump trees after store copy-propagation.  The file name is made
6334by appending @file{.store_copyprop} to the source file name.
6335
6336@item dce
6337@opindex fdump-tree-dce
6338Dump each function after dead code elimination.  The file name is made by
6339appending @file{.dce} to the source file name.
6340
6341@item sra
6342@opindex fdump-tree-sra
6343Dump each function after performing scalar replacement of aggregates.  The
6344file name is made by appending @file{.sra} to the source file name.
6345
6346@item sink
6347@opindex fdump-tree-sink
6348Dump each function after performing code sinking.  The file name is made
6349by appending @file{.sink} to the source file name.
6350
6351@item dom
6352@opindex fdump-tree-dom
6353Dump each function after applying dominator tree optimizations.  The file
6354name is made by appending @file{.dom} to the source file name.
6355
6356@item dse
6357@opindex fdump-tree-dse
6358Dump each function after applying dead store elimination.  The file
6359name is made by appending @file{.dse} to the source file name.
6360
6361@item phiopt
6362@opindex fdump-tree-phiopt
6363Dump each function after optimizing PHI nodes into straightline code.  The file
6364name is made by appending @file{.phiopt} to the source file name.
6365
6366@item forwprop
6367@opindex fdump-tree-forwprop
6368Dump each function after forward propagating single use variables.  The file
6369name is made by appending @file{.forwprop} to the source file name.
6370
6371@item copyrename
6372@opindex fdump-tree-copyrename
6373Dump each function after applying the copy rename optimization.  The file
6374name is made by appending @file{.copyrename} to the source file name.
6375
6376@item nrv
6377@opindex fdump-tree-nrv
6378Dump each function after applying the named return value optimization on
6379generic trees.  The file name is made by appending @file{.nrv} to the source
6380file name.
6381
6382@item vect
6383@opindex fdump-tree-vect
6384Dump each function after applying vectorization of loops.  The file name is
6385made by appending @file{.vect} to the source file name.
6386
6387@item slp
6388@opindex fdump-tree-slp
6389Dump each function after applying vectorization of basic blocks.  The file name
6390is made by appending @file{.slp} to the source file name.
6391
6392@item vrp
6393@opindex fdump-tree-vrp
6394Dump each function after Value Range Propagation (VRP).  The file name
6395is made by appending @file{.vrp} to the source file name.
6396
6397@item all
6398@opindex fdump-tree-all
6399Enable all the available tree dumps with the flags provided in this option.
6400@end table
6401
6402@item -fopt-info
6403@itemx -fopt-info-@var{options}
6404@itemx -fopt-info-@var{options}=@var{filename}
6405@opindex fopt-info
6406Controls optimization dumps from various optimization passes. If the
6407@samp{-@var{options}} form is used, @var{options} is a list of
6408@samp{-} separated options to select the dump details and
6409optimizations.  If @var{options} is not specified, it defaults to
6410@option{optimized} for details and @option{optall} for optimization
6411groups. If the @var{filename} is not specified, it defaults to
6412@file{stderr}. Note that the output @var{filename} will be overwritten
6413in case of multiple translation units. If a combined output from
6414multiple translation units is desired, @file{stderr} should be used
6415instead.
6416
6417The options can be divided into two groups, 1) options describing the
6418verbosity of the dump, and 2) options describing which optimizations
6419should be included. The options from both the groups can be freely
6420mixed as they are non-overlapping. However, in case of any conflicts,
6421the latter options override the earlier options on the command
6422line. Though multiple -fopt-info options are accepted, only one of
6423them can have @option{=filename}. If other filenames are provided then
6424all but the first one are ignored.
6425
6426The dump verbosity has the following options
6427
6428@table @samp
6429@item optimized
6430Print information when an optimization is successfully applied. It is
6431up to a pass to decide which information is relevant. For example, the
6432vectorizer passes print the source location of loops which got
6433successfully vectorized.
6434@item missed
6435Print information about missed optimizations. Individual passes
6436control which information to include in the output. For example,
6437
6438@smallexample
6439gcc -O2 -ftree-vectorize -fopt-info-vec-missed
6440@end smallexample
6441
6442will print information about missed optimization opportunities from
6443vectorization passes on stderr.
6444@item note
6445Print verbose information about optimizations, such as certain
6446transformations, more detailed messages about decisions etc.
6447@item all
6448Print detailed optimization information. This includes
6449@var{optimized}, @var{missed}, and @var{note}.
6450@end table
6451
6452The second set of options describes a group of optimizations and may
6453include one or more of the following.
6454
6455@table @samp
6456@item ipa
6457Enable dumps from all interprocedural optimizations.
6458@item loop
6459Enable dumps from all loop optimizations.
6460@item inline
6461Enable dumps from all inlining optimizations.
6462@item vec
6463Enable dumps from all vectorization optimizations.
6464@item optall
6465Enable dumps from all optimizations. This is a superset of
6466the optimization groups listed above.
6467@end table
6468
6469For example,
6470@smallexample
6471gcc -O3 -fopt-info-missed=missed.all
6472@end smallexample
6473
6474outputs missed optimization report from all the passes into
6475@file{missed.all}.
6476
6477As another example,
6478@smallexample
6479gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
6480@end smallexample
6481
6482will output information about missed optimizations as well as
6483optimized locations from all the inlining passes into
6484@file{inline.txt}.
6485
6486If the @var{filename} is provided, then the dumps from all the
6487applicable optimizations are concatenated into the @file{filename}.
6488Otherwise the dump is output onto @file{stderr}. If @var{options} is
6489omitted, it defaults to @option{all-optall}, which means dump all
6490available optimization info from all the passes. In the following
6491example, all optimization info is output on to @file{stderr}.
6492
6493@smallexample
6494gcc -O3 -fopt-info
6495@end smallexample
6496
6497Note that @option{-fopt-info-vec-missed} behaves the same as
6498@option{-fopt-info-missed-vec}.
6499
6500As another example, consider
6501
6502@smallexample
6503gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
6504@end smallexample
6505
6506Here the two output filenames @file{vec.miss} and @file{loop.opt} are
6507in conflict since only one output file is allowed. In this case, only
6508the first option takes effect and the subsequent options are
6509ignored. Thus only the @file{vec.miss} is produced which contains
6510dumps from the vectorizer about missed opportunities.
6511
6512@item -frandom-seed=@var{string}
6513@opindex frandom-seed
6514This option provides a seed that GCC uses in place of
6515random numbers in generating certain symbol names
6516that have to be different in every compiled file.  It is also used to
6517place unique stamps in coverage data files and the object files that
6518produce them.  You can use the @option{-frandom-seed} option to produce
6519reproducibly identical object files.
6520
6521The @var{string} should be different for every file you compile.
6522
6523@item -fsched-verbose=@var{n}
6524@opindex fsched-verbose
6525On targets that use instruction scheduling, this option controls the
6526amount of debugging output the scheduler prints.  This information is
6527written to standard error, unless @option{-fdump-rtl-sched1} or
6528@option{-fdump-rtl-sched2} is specified, in which case it is output
6529to the usual dump listing file, @file{.sched1} or @file{.sched2}
6530respectively.  However for @var{n} greater than nine, the output is
6531always printed to standard error.
6532
6533For @var{n} greater than zero, @option{-fsched-verbose} outputs the
6534same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
6535For @var{n} greater than one, it also output basic block probabilities,
6536detailed ready list information and unit/insn info.  For @var{n} greater
6537than two, it includes RTL at abort point, control-flow and regions info.
6538And for @var{n} over four, @option{-fsched-verbose} also includes
6539dependence info.
6540
6541@item -save-temps
6542@itemx -save-temps=cwd
6543@opindex save-temps
6544Store the usual ``temporary'' intermediate files permanently; place them
6545in the current directory and name them based on the source file.  Thus,
6546compiling @file{foo.c} with @option{-c -save-temps} produces files
6547@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
6548preprocessed @file{foo.i} output file even though the compiler now
6549normally uses an integrated preprocessor.
6550
6551When used in combination with the @option{-x} command-line option,
6552@option{-save-temps} is sensible enough to avoid over writing an
6553input source file with the same extension as an intermediate file.
6554The corresponding intermediate file may be obtained by renaming the
6555source file before using @option{-save-temps}.
6556
6557If you invoke GCC in parallel, compiling several different source
6558files that share a common base name in different subdirectories or the
6559same source file compiled for multiple output destinations, it is
6560likely that the different parallel compilers will interfere with each
6561other, and overwrite the temporary files.  For instance:
6562
6563@smallexample
6564gcc -save-temps -o outdir1/foo.o indir1/foo.c&
6565gcc -save-temps -o outdir2/foo.o indir2/foo.c&
6566@end smallexample
6567
6568may result in @file{foo.i} and @file{foo.o} being written to
6569simultaneously by both compilers.
6570
6571@item -save-temps=obj
6572@opindex save-temps=obj
6573Store the usual ``temporary'' intermediate files permanently.  If the
6574@option{-o} option is used, the temporary files are based on the
6575object file.  If the @option{-o} option is not used, the
6576@option{-save-temps=obj} switch behaves like @option{-save-temps}.
6577
6578For example:
6579
6580@smallexample
6581gcc -save-temps=obj -c foo.c
6582gcc -save-temps=obj -c bar.c -o dir/xbar.o
6583gcc -save-temps=obj foobar.c -o dir2/yfoobar
6584@end smallexample
6585
6586@noindent
6587creates @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
6588@file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
6589@file{dir2/yfoobar.o}.
6590
6591@item -time@r{[}=@var{file}@r{]}
6592@opindex time
6593Report the CPU time taken by each subprocess in the compilation
6594sequence.  For C source files, this is the compiler proper and assembler
6595(plus the linker if linking is done).
6596
6597Without the specification of an output file, the output looks like this:
6598
6599@smallexample
6600# cc1 0.12 0.01
6601# as 0.00 0.01
6602@end smallexample
6603
6604The first number on each line is the ``user time'', that is time spent
6605executing the program itself.  The second number is ``system time'',
6606time spent executing operating system routines on behalf of the program.
6607Both numbers are in seconds.
6608
6609With the specification of an output file, the output is appended to the
6610named file, and it looks like this:
6611
6612@smallexample
66130.12 0.01 cc1 @var{options}
66140.00 0.01 as @var{options}
6615@end smallexample
6616
6617The ``user time'' and the ``system time'' are moved before the program
6618name, and the options passed to the program are displayed, so that one
6619can later tell what file was being compiled, and with which options.
6620
6621@item -fvar-tracking
6622@opindex fvar-tracking
6623Run variable tracking pass.  It computes where variables are stored at each
6624position in code.  Better debugging information is then generated
6625(if the debugging information format supports this information).
6626
6627It is enabled by default when compiling with optimization (@option{-Os},
6628@option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
6629the debug info format supports it.
6630
6631@item -fvar-tracking-assignments
6632@opindex fvar-tracking-assignments
6633@opindex fno-var-tracking-assignments
6634Annotate assignments to user variables early in the compilation and
6635attempt to carry the annotations over throughout the compilation all the
6636way to the end, in an attempt to improve debug information while
6637optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
6638
6639It can be enabled even if var-tracking is disabled, in which case
6640annotations are created and maintained, but discarded at the end.
6641
6642@item -fvar-tracking-assignments-toggle
6643@opindex fvar-tracking-assignments-toggle
6644@opindex fno-var-tracking-assignments-toggle
6645Toggle @option{-fvar-tracking-assignments}, in the same way that
6646@option{-gtoggle} toggles @option{-g}.
6647
6648@item -print-file-name=@var{library}
6649@opindex print-file-name
6650Print the full absolute name of the library file @var{library} that
6651would be used when linking---and don't do anything else.  With this
6652option, GCC does not compile or link anything; it just prints the
6653file name.
6654
6655@item -print-multi-directory
6656@opindex print-multi-directory
6657Print the directory name corresponding to the multilib selected by any
6658other switches present in the command line.  This directory is supposed
6659to exist in @env{GCC_EXEC_PREFIX}.
6660
6661@item -print-multi-lib
6662@opindex print-multi-lib
6663Print the mapping from multilib directory names to compiler switches
6664that enable them.  The directory name is separated from the switches by
6665@samp{;}, and each switch starts with an @samp{@@} instead of the
6666@samp{-}, without spaces between multiple switches.  This is supposed to
6667ease shell processing.
6668
6669@item -print-multi-os-directory
6670@opindex print-multi-os-directory
6671Print the path to OS libraries for the selected
6672multilib, relative to some @file{lib} subdirectory.  If OS libraries are
6673present in the @file{lib} subdirectory and no multilibs are used, this is
6674usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
6675sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
6676@file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
6677subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
6678
6679@item -print-multiarch
6680@opindex print-multiarch
6681Print the path to OS libraries for the selected multiarch,
6682relative to some @file{lib} subdirectory.
6683
6684@item -print-prog-name=@var{program}
6685@opindex print-prog-name
6686Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
6687
6688@item -print-libgcc-file-name
6689@opindex print-libgcc-file-name
6690Same as @option{-print-file-name=libgcc.a}.
6691
6692This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
6693but you do want to link with @file{libgcc.a}.  You can do:
6694
6695@smallexample
6696gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
6697@end smallexample
6698
6699@item -print-search-dirs
6700@opindex print-search-dirs
6701Print the name of the configured installation directory and a list of
6702program and library directories @command{gcc} searches---and don't do anything else.
6703
6704This is useful when @command{gcc} prints the error message
6705@samp{installation problem, cannot exec cpp0: No such file or directory}.
6706To resolve this you either need to put @file{cpp0} and the other compiler
6707components where @command{gcc} expects to find them, or you can set the environment
6708variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
6709Don't forget the trailing @samp{/}.
6710@xref{Environment Variables}.
6711
6712@item -print-sysroot
6713@opindex print-sysroot
6714Print the target sysroot directory that is used during
6715compilation.  This is the target sysroot specified either at configure
6716time or using the @option{--sysroot} option, possibly with an extra
6717suffix that depends on compilation options.  If no target sysroot is
6718specified, the option prints nothing.
6719
6720@item -print-sysroot-headers-suffix
6721@opindex print-sysroot-headers-suffix
6722Print the suffix added to the target sysroot when searching for
6723headers, or give an error if the compiler is not configured with such
6724a suffix---and don't do anything else.
6725
6726@item -dumpmachine
6727@opindex dumpmachine
6728Print the compiler's target machine (for example,
6729@samp{i686-pc-linux-gnu})---and don't do anything else.
6730
6731@item -dumpversion
6732@opindex dumpversion
6733Print the compiler version (for example, @samp{3.0})---and don't do
6734anything else.
6735
6736@item -dumpspecs
6737@opindex dumpspecs
6738Print the compiler's built-in specs---and don't do anything else.  (This
6739is used when GCC itself is being built.)  @xref{Spec Files}.
6740
6741@item -fno-eliminate-unused-debug-types
6742@opindex feliminate-unused-debug-types
6743@opindex fno-eliminate-unused-debug-types
6744Normally, when producing DWARF 2 output, GCC avoids producing debug symbol
6745output for types that are nowhere used in the source file being compiled.
6746Sometimes it is useful to have GCC emit debugging
6747information for all types declared in a compilation
6748unit, regardless of whether or not they are actually used
6749in that compilation unit, for example
6750if, in the debugger, you want to cast a value to a type that is
6751not actually used in your program (but is declared).  More often,
6752however, this results in a significant amount of wasted space.
6753@end table
6754
6755@node Optimize Options
6756@section Options That Control Optimization
6757@cindex optimize options
6758@cindex options, optimization
6759
6760These options control various sorts of optimizations.
6761
6762Without any optimization option, the compiler's goal is to reduce the
6763cost of compilation and to make debugging produce the expected
6764results.  Statements are independent: if you stop the program with a
6765breakpoint between statements, you can then assign a new value to any
6766variable or change the program counter to any other statement in the
6767function and get exactly the results you expect from the source
6768code.
6769
6770Turning on optimization flags makes the compiler attempt to improve
6771the performance and/or code size at the expense of compilation time
6772and possibly the ability to debug the program.
6773
6774The compiler performs optimization based on the knowledge it has of the
6775program.  Compiling multiple files at once to a single output file mode allows
6776the compiler to use information gained from all of the files when compiling
6777each of them.
6778
6779Not all optimizations are controlled directly by a flag.  Only
6780optimizations that have a flag are listed in this section.
6781
6782Most optimizations are only enabled if an @option{-O} level is set on
6783the command line.  Otherwise they are disabled, even if individual
6784optimization flags are specified.
6785
6786Depending on the target and how GCC was configured, a slightly different
6787set of optimizations may be enabled at each @option{-O} level than
6788those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
6789to find out the exact set of optimizations that are enabled at each level.
6790@xref{Overall Options}, for examples.
6791
6792@table @gcctabopt
6793@item -O
6794@itemx -O1
6795@opindex O
6796@opindex O1
6797Optimize.  Optimizing compilation takes somewhat more time, and a lot
6798more memory for a large function.
6799
6800With @option{-O}, the compiler tries to reduce code size and execution
6801time, without performing any optimizations that take a great deal of
6802compilation time.
6803
6804@option{-O} turns on the following optimization flags:
6805@gccoptlist{
6806-fauto-inc-dec @gol
6807-fcompare-elim @gol
6808-fcprop-registers @gol
6809-fdce @gol
6810-fdefer-pop @gol
6811-fdelayed-branch @gol
6812-fdse @gol
6813-fguess-branch-probability @gol
6814-fif-conversion2 @gol
6815-fif-conversion @gol
6816-fipa-pure-const @gol
6817-fipa-profile @gol
6818-fipa-reference @gol
6819-fmerge-constants
6820-fsplit-wide-types @gol
6821-ftree-bit-ccp @gol
6822-ftree-builtin-call-dce @gol
6823-ftree-ccp @gol
6824-ftree-ch @gol
6825-ftree-copyrename @gol
6826-ftree-dce @gol
6827-ftree-dominator-opts @gol
6828-ftree-dse @gol
6829-ftree-forwprop @gol
6830-ftree-fre @gol
6831-ftree-phiprop @gol
6832-ftree-slsr @gol
6833-ftree-sra @gol
6834-ftree-pta @gol
6835-ftree-ter @gol
6836-funit-at-a-time}
6837
6838@option{-O} also turns on @option{-fomit-frame-pointer} on machines
6839where doing so does not interfere with debugging.
6840
6841@item -O2
6842@opindex O2
6843Optimize even more.  GCC performs nearly all supported optimizations
6844that do not involve a space-speed tradeoff.
6845As compared to @option{-O}, this option increases both compilation time
6846and the performance of the generated code.
6847
6848@option{-O2} turns on all optimization flags specified by @option{-O}.  It
6849also turns on the following optimization flags:
6850@gccoptlist{-fthread-jumps @gol
6851-falign-functions  -falign-jumps @gol
6852-falign-loops  -falign-labels @gol
6853-fcaller-saves @gol
6854-fcrossjumping @gol
6855-fcse-follow-jumps  -fcse-skip-blocks @gol
6856-fdelete-null-pointer-checks @gol
6857-fdevirtualize -fdevirtualize-speculatively @gol
6858-fexpensive-optimizations @gol
6859-fgcse  -fgcse-lm  @gol
6860-fhoist-adjacent-loads @gol
6861-finline-small-functions @gol
6862-findirect-inlining @gol
6863-fipa-sra @gol
6864-fisolate-erroneous-paths-dereference @gol
6865-foptimize-sibling-calls @gol
6866-fpartial-inlining @gol
6867-fpeephole2 @gol
6868-freorder-blocks  -freorder-functions @gol
6869-frerun-cse-after-loop  @gol
6870-fsched-interblock  -fsched-spec @gol
6871-fschedule-insns  -fschedule-insns2 @gol
6872-fstrict-aliasing -fstrict-overflow @gol
6873-ftree-switch-conversion -ftree-tail-merge @gol
6874-ftree-pre @gol
6875-ftree-vrp}
6876
6877Please note the warning under @option{-fgcse} about
6878invoking @option{-O2} on programs that use computed gotos.
6879
6880@item -O3
6881@opindex O3
6882Optimize yet more.  @option{-O3} turns on all optimizations specified
6883by @option{-O2} and also turns on the @option{-finline-functions},
6884@option{-funswitch-loops}, @option{-fpredictive-commoning},
6885@option{-fgcse-after-reload}, @option{-ftree-loop-vectorize},
6886@option{-ftree-slp-vectorize}, @option{-fvect-cost-model},
6887@option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
6888
6889@item -O0
6890@opindex O0
6891Reduce compilation time and make debugging produce the expected
6892results.  This is the default.
6893
6894@item -Os
6895@opindex Os
6896Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
6897do not typically increase code size.  It also performs further
6898optimizations designed to reduce code size.
6899
6900@option{-Os} disables the following optimization flags:
6901@gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
6902-falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
6903-fprefetch-loop-arrays}
6904
6905@item -Ofast
6906@opindex Ofast
6907Disregard strict standards compliance.  @option{-Ofast} enables all
6908@option{-O3} optimizations.  It also enables optimizations that are not
6909valid for all standard-compliant programs.
6910It turns on @option{-ffast-math} and the Fortran-specific
6911@option{-fno-protect-parens} and @option{-fstack-arrays}.
6912
6913@item -Og
6914@opindex Og
6915Optimize debugging experience.  @option{-Og} enables optimizations
6916that do not interfere with debugging. It should be the optimization
6917level of choice for the standard edit-compile-debug cycle, offering
6918a reasonable level of optimization while maintaining fast compilation
6919and a good debugging experience.
6920
6921If you use multiple @option{-O} options, with or without level numbers,
6922the last such option is the one that is effective.
6923@end table
6924
6925Options of the form @option{-f@var{flag}} specify machine-independent
6926flags.  Most flags have both positive and negative forms; the negative
6927form of @option{-ffoo} is @option{-fno-foo}.  In the table
6928below, only one of the forms is listed---the one you typically
6929use.  You can figure out the other form by either removing @samp{no-}
6930or adding it.
6931
6932The following options control specific optimizations.  They are either
6933activated by @option{-O} options or are related to ones that are.  You
6934can use the following flags in the rare cases when ``fine-tuning'' of
6935optimizations to be performed is desired.
6936
6937@table @gcctabopt
6938@item -fno-defer-pop
6939@opindex fno-defer-pop
6940Always pop the arguments to each function call as soon as that function
6941returns.  For machines that must pop arguments after a function call,
6942the compiler normally lets arguments accumulate on the stack for several
6943function calls and pops them all at once.
6944
6945Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6946
6947@item -fforward-propagate
6948@opindex fforward-propagate
6949Perform a forward propagation pass on RTL@.  The pass tries to combine two
6950instructions and checks if the result can be simplified.  If loop unrolling
6951is active, two passes are performed and the second is scheduled after
6952loop unrolling.
6953
6954This option is enabled by default at optimization levels @option{-O},
6955@option{-O2}, @option{-O3}, @option{-Os}.
6956
6957@item -ffp-contract=@var{style}
6958@opindex ffp-contract
6959@option{-ffp-contract=off} disables floating-point expression contraction.
6960@option{-ffp-contract=fast} enables floating-point expression contraction
6961such as forming of fused multiply-add operations if the target has
6962native support for them.
6963@option{-ffp-contract=on} enables floating-point expression contraction
6964if allowed by the language standard.  This is currently not implemented
6965and treated equal to @option{-ffp-contract=off}.
6966
6967The default is @option{-ffp-contract=fast}.
6968
6969@item -fomit-frame-pointer
6970@opindex fomit-frame-pointer
6971Don't keep the frame pointer in a register for functions that
6972don't need one.  This avoids the instructions to save, set up and
6973restore frame pointers; it also makes an extra register available
6974in many functions.  @strong{It also makes debugging impossible on
6975some machines.}
6976
6977On some machines, such as the VAX, this flag has no effect, because
6978the standard calling sequence automatically handles the frame pointer
6979and nothing is saved by pretending it doesn't exist.  The
6980machine-description macro @code{FRAME_POINTER_REQUIRED} controls
6981whether a target machine supports this flag.  @xref{Registers,,Register
6982Usage, gccint, GNU Compiler Collection (GCC) Internals}.
6983
6984Starting with GCC version 4.6, the default setting (when not optimizing for
6985size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets has been changed to
6986@option{-fomit-frame-pointer}.  The default can be reverted to
6987@option{-fno-omit-frame-pointer} by configuring GCC with the
6988@option{--enable-frame-pointer} configure option.
6989
6990Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6991
6992@item -foptimize-sibling-calls
6993@opindex foptimize-sibling-calls
6994Optimize sibling and tail recursive calls.
6995
6996Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6997
6998@item -fno-inline
6999@opindex fno-inline
7000Do not expand any functions inline apart from those marked with
7001the @code{always_inline} attribute.  This is the default when not
7002optimizing.
7003
7004Single functions can be exempted from inlining by marking them
7005with the @code{noinline} attribute.
7006
7007@item -finline-small-functions
7008@opindex finline-small-functions
7009Integrate functions into their callers when their body is smaller than expected
7010function call code (so overall size of program gets smaller).  The compiler
7011heuristically decides which functions are simple enough to be worth integrating
7012in this way.  This inlining applies to all functions, even those not declared
7013inline.
7014
7015Enabled at level @option{-O2}.
7016
7017@item -findirect-inlining
7018@opindex findirect-inlining
7019Inline also indirect calls that are discovered to be known at compile
7020time thanks to previous inlining.  This option has any effect only
7021when inlining itself is turned on by the @option{-finline-functions}
7022or @option{-finline-small-functions} options.
7023
7024Enabled at level @option{-O2}.
7025
7026@item -finline-functions
7027@opindex finline-functions
7028Consider all functions for inlining, even if they are not declared inline.
7029The compiler heuristically decides which functions are worth integrating
7030in this way.
7031
7032If all calls to a given function are integrated, and the function is
7033declared @code{static}, then the function is normally not output as
7034assembler code in its own right.
7035
7036Enabled at level @option{-O3}.
7037
7038@item -finline-functions-called-once
7039@opindex finline-functions-called-once
7040Consider all @code{static} functions called once for inlining into their
7041caller even if they are not marked @code{inline}.  If a call to a given
7042function is integrated, then the function is not output as assembler code
7043in its own right.
7044
7045Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
7046
7047@item -fearly-inlining
7048@opindex fearly-inlining
7049Inline functions marked by @code{always_inline} and functions whose body seems
7050smaller than the function call overhead early before doing
7051@option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
7052makes profiling significantly cheaper and usually inlining faster on programs
7053having large chains of nested wrapper functions.
7054
7055Enabled by default.
7056
7057@item -fipa-sra
7058@opindex fipa-sra
7059Perform interprocedural scalar replacement of aggregates, removal of
7060unused parameters and replacement of parameters passed by reference
7061by parameters passed by value.
7062
7063Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
7064
7065@item -finline-limit=@var{n}
7066@opindex finline-limit
7067By default, GCC limits the size of functions that can be inlined.  This flag
7068allows coarse control of this limit.  @var{n} is the size of functions that
7069can be inlined in number of pseudo instructions.
7070
7071Inlining is actually controlled by a number of parameters, which may be
7072specified individually by using @option{--param @var{name}=@var{value}}.
7073The @option{-finline-limit=@var{n}} option sets some of these parameters
7074as follows:
7075
7076@table @gcctabopt
7077@item max-inline-insns-single
7078is set to @var{n}/2.
7079@item max-inline-insns-auto
7080is set to @var{n}/2.
7081@end table
7082
7083See below for a documentation of the individual
7084parameters controlling inlining and for the defaults of these parameters.
7085
7086@emph{Note:} there may be no value to @option{-finline-limit} that results
7087in default behavior.
7088
7089@emph{Note:} pseudo instruction represents, in this particular context, an
7090abstract measurement of function's size.  In no way does it represent a count
7091of assembly instructions and as such its exact meaning might change from one
7092release to an another.
7093
7094@item -fno-keep-inline-dllexport
7095@opindex -fno-keep-inline-dllexport
7096This is a more fine-grained version of @option{-fkeep-inline-functions},
7097which applies only to functions that are declared using the @code{dllexport}
7098attribute or declspec (@xref{Function Attributes,,Declaring Attributes of
7099Functions}.)
7100
7101@item -fkeep-inline-functions
7102@opindex fkeep-inline-functions
7103In C, emit @code{static} functions that are declared @code{inline}
7104into the object file, even if the function has been inlined into all
7105of its callers.  This switch does not affect functions using the
7106@code{extern inline} extension in GNU C90@.  In C++, emit any and all
7107inline functions into the object file.
7108
7109@item -fkeep-static-consts
7110@opindex fkeep-static-consts
7111Emit variables declared @code{static const} when optimization isn't turned
7112on, even if the variables aren't referenced.
7113
7114GCC enables this option by default.  If you want to force the compiler to
7115check if a variable is referenced, regardless of whether or not
7116optimization is turned on, use the @option{-fno-keep-static-consts} option.
7117
7118@item -fmerge-constants
7119@opindex fmerge-constants
7120Attempt to merge identical constants (string constants and floating-point
7121constants) across compilation units.
7122
7123This option is the default for optimized compilation if the assembler and
7124linker support it.  Use @option{-fno-merge-constants} to inhibit this
7125behavior.
7126
7127Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7128
7129@item -fmerge-all-constants
7130@opindex fmerge-all-constants
7131Attempt to merge identical constants and identical variables.
7132
7133This option implies @option{-fmerge-constants}.  In addition to
7134@option{-fmerge-constants} this considers e.g.@: even constant initialized
7135arrays or initialized constant variables with integral or floating-point
7136types.  Languages like C or C++ require each variable, including multiple
7137instances of the same variable in recursive calls, to have distinct locations,
7138so using this option results in non-conforming
7139behavior.
7140
7141@item -fmodulo-sched
7142@opindex fmodulo-sched
7143Perform swing modulo scheduling immediately before the first scheduling
7144pass.  This pass looks at innermost loops and reorders their
7145instructions by overlapping different iterations.
7146
7147@item -fmodulo-sched-allow-regmoves
7148@opindex fmodulo-sched-allow-regmoves
7149Perform more aggressive SMS-based modulo scheduling with register moves
7150allowed.  By setting this flag certain anti-dependences edges are
7151deleted, which triggers the generation of reg-moves based on the
7152life-range analysis.  This option is effective only with
7153@option{-fmodulo-sched} enabled.
7154
7155@item -fno-branch-count-reg
7156@opindex fno-branch-count-reg
7157Do not use ``decrement and branch'' instructions on a count register,
7158but instead generate a sequence of instructions that decrement a
7159register, compare it against zero, then branch based upon the result.
7160This option is only meaningful on architectures that support such
7161instructions, which include x86, PowerPC, IA-64 and S/390.
7162
7163The default is @option{-fbranch-count-reg}.
7164
7165@item -fno-function-cse
7166@opindex fno-function-cse
7167Do not put function addresses in registers; make each instruction that
7168calls a constant function contain the function's address explicitly.
7169
7170This option results in less efficient code, but some strange hacks
7171that alter the assembler output may be confused by the optimizations
7172performed when this option is not used.
7173
7174The default is @option{-ffunction-cse}
7175
7176@item -fno-zero-initialized-in-bss
7177@opindex fno-zero-initialized-in-bss
7178If the target supports a BSS section, GCC by default puts variables that
7179are initialized to zero into BSS@.  This can save space in the resulting
7180code.
7181
7182This option turns off this behavior because some programs explicitly
7183rely on variables going to the data section---e.g., so that the
7184resulting executable can find the beginning of that section and/or make
7185assumptions based on that.
7186
7187The default is @option{-fzero-initialized-in-bss}.
7188
7189@item -fthread-jumps
7190@opindex fthread-jumps
7191Perform optimizations that check to see if a jump branches to a
7192location where another comparison subsumed by the first is found.  If
7193so, the first branch is redirected to either the destination of the
7194second branch or a point immediately following it, depending on whether
7195the condition is known to be true or false.
7196
7197Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7198
7199@item -fsplit-wide-types
7200@opindex fsplit-wide-types
7201When using a type that occupies multiple registers, such as @code{long
7202long} on a 32-bit system, split the registers apart and allocate them
7203independently.  This normally generates better code for those types,
7204but may make debugging more difficult.
7205
7206Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
7207@option{-Os}.
7208
7209@item -fcse-follow-jumps
7210@opindex fcse-follow-jumps
7211In common subexpression elimination (CSE), scan through jump instructions
7212when the target of the jump is not reached by any other path.  For
7213example, when CSE encounters an @code{if} statement with an
7214@code{else} clause, CSE follows the jump when the condition
7215tested is false.
7216
7217Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7218
7219@item -fcse-skip-blocks
7220@opindex fcse-skip-blocks
7221This is similar to @option{-fcse-follow-jumps}, but causes CSE to
7222follow jumps that conditionally skip over blocks.  When CSE
7223encounters a simple @code{if} statement with no else clause,
7224@option{-fcse-skip-blocks} causes CSE to follow the jump around the
7225body of the @code{if}.
7226
7227Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7228
7229@item -frerun-cse-after-loop
7230@opindex frerun-cse-after-loop
7231Re-run common subexpression elimination after loop optimizations are
7232performed.
7233
7234Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7235
7236@item -fgcse
7237@opindex fgcse
7238Perform a global common subexpression elimination pass.
7239This pass also performs global constant and copy propagation.
7240
7241@emph{Note:} When compiling a program using computed gotos, a GCC
7242extension, you may get better run-time performance if you disable
7243the global common subexpression elimination pass by adding
7244@option{-fno-gcse} to the command line.
7245
7246Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7247
7248@item -fgcse-lm
7249@opindex fgcse-lm
7250When @option{-fgcse-lm} is enabled, global common subexpression elimination
7251attempts to move loads that are only killed by stores into themselves.  This
7252allows a loop containing a load/store sequence to be changed to a load outside
7253the loop, and a copy/store within the loop.
7254
7255Enabled by default when @option{-fgcse} is enabled.
7256
7257@item -fgcse-sm
7258@opindex fgcse-sm
7259When @option{-fgcse-sm} is enabled, a store motion pass is run after
7260global common subexpression elimination.  This pass attempts to move
7261stores out of loops.  When used in conjunction with @option{-fgcse-lm},
7262loops containing a load/store sequence can be changed to a load before
7263the loop and a store after the loop.
7264
7265Not enabled at any optimization level.
7266
7267@item -fgcse-las
7268@opindex fgcse-las
7269When @option{-fgcse-las} is enabled, the global common subexpression
7270elimination pass eliminates redundant loads that come after stores to the
7271same memory location (both partial and full redundancies).
7272
7273Not enabled at any optimization level.
7274
7275@item -fgcse-after-reload
7276@opindex fgcse-after-reload
7277When @option{-fgcse-after-reload} is enabled, a redundant load elimination
7278pass is performed after reload.  The purpose of this pass is to clean up
7279redundant spilling.
7280
7281@item -faggressive-loop-optimizations
7282@opindex faggressive-loop-optimizations
7283This option tells the loop optimizer to use language constraints to
7284derive bounds for the number of iterations of a loop.  This assumes that
7285loop code does not invoke undefined behavior by for example causing signed
7286integer overflows or out-of-bound array accesses.  The bounds for the
7287number of iterations of a loop are used to guide loop unrolling and peeling
7288and loop exit test optimizations.
7289This option is enabled by default.
7290
7291@item -funsafe-loop-optimizations
7292@opindex funsafe-loop-optimizations
7293This option tells the loop optimizer to assume that loop indices do not
7294overflow, and that loops with nontrivial exit condition are not
7295infinite.  This enables a wider range of loop optimizations even if
7296the loop optimizer itself cannot prove that these assumptions are valid.
7297If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
7298if it finds this kind of loop.
7299
7300@item -fcrossjumping
7301@opindex fcrossjumping
7302Perform cross-jumping transformation.
7303This transformation unifies equivalent code and saves code size.  The
7304resulting code may or may not perform better than without cross-jumping.
7305
7306Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7307
7308@item -fauto-inc-dec
7309@opindex fauto-inc-dec
7310Combine increments or decrements of addresses with memory accesses.
7311This pass is always skipped on architectures that do not have
7312instructions to support this.  Enabled by default at @option{-O} and
7313higher on architectures that support this.
7314
7315@item -fdce
7316@opindex fdce
7317Perform dead code elimination (DCE) on RTL@.
7318Enabled by default at @option{-O} and higher.
7319
7320@item -fdse
7321@opindex fdse
7322Perform dead store elimination (DSE) on RTL@.
7323Enabled by default at @option{-O} and higher.
7324
7325@item -fif-conversion
7326@opindex fif-conversion
7327Attempt to transform conditional jumps into branch-less equivalents.  This
7328includes use of conditional moves, min, max, set flags and abs instructions, and
7329some tricks doable by standard arithmetics.  The use of conditional execution
7330on chips where it is available is controlled by @code{if-conversion2}.
7331
7332Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7333
7334@item -fif-conversion2
7335@opindex fif-conversion2
7336Use conditional execution (where available) to transform conditional jumps into
7337branch-less equivalents.
7338
7339Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7340
7341@item -fdeclone-ctor-dtor
7342@opindex fdeclone-ctor-dtor
7343The C++ ABI requires multiple entry points for constructors and
7344destructors: one for a base subobject, one for a complete object, and
7345one for a virtual destructor that calls operator delete afterwards.
7346For a hierarchy with virtual bases, the base and complete variants are
7347clones, which means two copies of the function.  With this option, the
7348base and complete variants are changed to be thunks that call a common
7349implementation.
7350
7351Enabled by @option{-Os}.
7352
7353@item -fdelete-null-pointer-checks
7354@opindex fdelete-null-pointer-checks
7355Assume that programs cannot safely dereference null pointers, and that
7356no code or data element resides there.  This enables simple constant
7357folding optimizations at all optimization levels.  In addition, other
7358optimization passes in GCC use this flag to control global dataflow
7359analyses that eliminate useless checks for null pointers; these assume
7360that if a pointer is checked after it has already been dereferenced,
7361it cannot be null.
7362
7363Note however that in some environments this assumption is not true.
7364Use @option{-fno-delete-null-pointer-checks} to disable this optimization
7365for programs that depend on that behavior.
7366
7367Some targets, especially embedded ones, disable this option at all levels.
7368Otherwise it is enabled at all levels: @option{-O0}, @option{-O1},
7369@option{-O2}, @option{-O3}, @option{-Os}.  Passes that use the information
7370are enabled independently at different optimization levels.
7371
7372@item -fdevirtualize
7373@opindex fdevirtualize
7374Attempt to convert calls to virtual functions to direct calls.  This
7375is done both within a procedure and interprocedurally as part of
7376indirect inlining (@code{-findirect-inlining}) and interprocedural constant
7377propagation (@option{-fipa-cp}).
7378Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7379
7380@item -fdevirtualize-speculatively
7381@opindex fdevirtualize-speculatively
7382Attempt to convert calls to virtual functions to speculative direct calls.
7383Based on the analysis of the type inheritance graph, determine for a given call
7384the set of likely targets. If the set is small, preferably of size 1, change
7385the call into an conditional deciding on direct and indirect call.  The
7386speculative calls enable more optimizations, such as inlining.  When they seem
7387useless after further optimization, they are converted back into original form.
7388
7389@item -fexpensive-optimizations
7390@opindex fexpensive-optimizations
7391Perform a number of minor optimizations that are relatively expensive.
7392
7393Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7394
7395@item -free
7396@opindex free
7397Attempt to remove redundant extension instructions.  This is especially
7398helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
7399registers after writing to their lower 32-bit half.
7400
7401Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
7402@option{-O3}, @option{-Os}.
7403
7404@item -flive-range-shrinkage
7405@opindex flive-range-shrinkage
7406Attempt to decrease register pressure through register live range
7407shrinkage.  This is helpful for fast processors with small or moderate
7408size register sets.
7409
7410@item -fira-algorithm=@var{algorithm}
7411Use the specified coloring algorithm for the integrated register
7412allocator.  The @var{algorithm} argument can be @samp{priority}, which
7413specifies Chow's priority coloring, or @samp{CB}, which specifies
7414Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
7415for all architectures, but for those targets that do support it, it is
7416the default because it generates better code.
7417
7418@item -fira-region=@var{region}
7419Use specified regions for the integrated register allocator.  The
7420@var{region} argument should be one of the following:
7421
7422@table @samp
7423
7424@item all
7425Use all loops as register allocation regions.
7426This can give the best results for machines with a small and/or
7427irregular register set.
7428
7429@item mixed
7430Use all loops except for loops with small register pressure
7431as the regions.  This value usually gives
7432the best results in most cases and for most architectures,
7433and is enabled by default when compiling with optimization for speed
7434(@option{-O}, @option{-O2}, @dots{}).
7435
7436@item one
7437Use all functions as a single region.
7438This typically results in the smallest code size, and is enabled by default for
7439@option{-Os} or @option{-O0}.
7440
7441@end table
7442
7443@item -fira-hoist-pressure
7444@opindex fira-hoist-pressure
7445Use IRA to evaluate register pressure in the code hoisting pass for
7446decisions to hoist expressions.  This option usually results in smaller
7447code, but it can slow the compiler down.
7448
7449This option is enabled at level @option{-Os} for all targets.
7450
7451@item -fira-loop-pressure
7452@opindex fira-loop-pressure
7453Use IRA to evaluate register pressure in loops for decisions to move
7454loop invariants.  This option usually results in generation
7455of faster and smaller code on machines with large register files (>= 32
7456registers), but it can slow the compiler down.
7457
7458This option is enabled at level @option{-O3} for some targets.
7459
7460@item -fno-ira-share-save-slots
7461@opindex fno-ira-share-save-slots
7462Disable sharing of stack slots used for saving call-used hard
7463registers living through a call.  Each hard register gets a
7464separate stack slot, and as a result function stack frames are
7465larger.
7466
7467@item -fno-ira-share-spill-slots
7468@opindex fno-ira-share-spill-slots
7469Disable sharing of stack slots allocated for pseudo-registers.  Each
7470pseudo-register that does not get a hard register gets a separate
7471stack slot, and as a result function stack frames are larger.
7472
7473@item -fira-verbose=@var{n}
7474@opindex fira-verbose
7475Control the verbosity of the dump file for the integrated register allocator.
7476The default value is 5.  If the value @var{n} is greater or equal to 10,
7477the dump output is sent to stderr using the same format as @var{n} minus 10.
7478
7479@item -fdelayed-branch
7480@opindex fdelayed-branch
7481If supported for the target machine, attempt to reorder instructions
7482to exploit instruction slots available after delayed branch
7483instructions.
7484
7485Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7486
7487@item -fschedule-insns
7488@opindex fschedule-insns
7489If supported for the target machine, attempt to reorder instructions to
7490eliminate execution stalls due to required data being unavailable.  This
7491helps machines that have slow floating point or memory load instructions
7492by allowing other instructions to be issued until the result of the load
7493or floating-point instruction is required.
7494
7495Enabled at levels @option{-O2}, @option{-O3}.
7496
7497@item -fschedule-insns2
7498@opindex fschedule-insns2
7499Similar to @option{-fschedule-insns}, but requests an additional pass of
7500instruction scheduling after register allocation has been done.  This is
7501especially useful on machines with a relatively small number of
7502registers and where memory load instructions take more than one cycle.
7503
7504Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7505
7506@item -fno-sched-interblock
7507@opindex fno-sched-interblock
7508Don't schedule instructions across basic blocks.  This is normally
7509enabled by default when scheduling before register allocation, i.e.@:
7510with @option{-fschedule-insns} or at @option{-O2} or higher.
7511
7512@item -fno-sched-spec
7513@opindex fno-sched-spec
7514Don't allow speculative motion of non-load instructions.  This is normally
7515enabled by default when scheduling before register allocation, i.e.@:
7516with @option{-fschedule-insns} or at @option{-O2} or higher.
7517
7518@item -fsched-pressure
7519@opindex fsched-pressure
7520Enable register pressure sensitive insn scheduling before register
7521allocation.  This only makes sense when scheduling before register
7522allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
7523@option{-O2} or higher.  Usage of this option can improve the
7524generated code and decrease its size by preventing register pressure
7525increase above the number of available hard registers and subsequent
7526spills in register allocation.
7527
7528@item -fsched-spec-load
7529@opindex fsched-spec-load
7530Allow speculative motion of some load instructions.  This only makes
7531sense when scheduling before register allocation, i.e.@: with
7532@option{-fschedule-insns} or at @option{-O2} or higher.
7533
7534@item -fsched-spec-load-dangerous
7535@opindex fsched-spec-load-dangerous
7536Allow speculative motion of more load instructions.  This only makes
7537sense when scheduling before register allocation, i.e.@: with
7538@option{-fschedule-insns} or at @option{-O2} or higher.
7539
7540@item -fsched-stalled-insns
7541@itemx -fsched-stalled-insns=@var{n}
7542@opindex fsched-stalled-insns
7543Define how many insns (if any) can be moved prematurely from the queue
7544of stalled insns into the ready list during the second scheduling pass.
7545@option{-fno-sched-stalled-insns} means that no insns are moved
7546prematurely, @option{-fsched-stalled-insns=0} means there is no limit
7547on how many queued insns can be moved prematurely.
7548@option{-fsched-stalled-insns} without a value is equivalent to
7549@option{-fsched-stalled-insns=1}.
7550
7551@item -fsched-stalled-insns-dep
7552@itemx -fsched-stalled-insns-dep=@var{n}
7553@opindex fsched-stalled-insns-dep
7554Define how many insn groups (cycles) are examined for a dependency
7555on a stalled insn that is a candidate for premature removal from the queue
7556of stalled insns.  This has an effect only during the second scheduling pass,
7557and only if @option{-fsched-stalled-insns} is used.
7558@option{-fno-sched-stalled-insns-dep} is equivalent to
7559@option{-fsched-stalled-insns-dep=0}.
7560@option{-fsched-stalled-insns-dep} without a value is equivalent to
7561@option{-fsched-stalled-insns-dep=1}.
7562
7563@item -fsched2-use-superblocks
7564@opindex fsched2-use-superblocks
7565When scheduling after register allocation, use superblock scheduling.
7566This allows motion across basic block boundaries,
7567resulting in faster schedules.  This option is experimental, as not all machine
7568descriptions used by GCC model the CPU closely enough to avoid unreliable
7569results from the algorithm.
7570
7571This only makes sense when scheduling after register allocation, i.e.@: with
7572@option{-fschedule-insns2} or at @option{-O2} or higher.
7573
7574@item -fsched-group-heuristic
7575@opindex fsched-group-heuristic
7576Enable the group heuristic in the scheduler.  This heuristic favors
7577the instruction that belongs to a schedule group.  This is enabled
7578by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
7579or @option{-fschedule-insns2} or at @option{-O2} or higher.
7580
7581@item -fsched-critical-path-heuristic
7582@opindex fsched-critical-path-heuristic
7583Enable the critical-path heuristic in the scheduler.  This heuristic favors
7584instructions on the critical path.  This is enabled by default when
7585scheduling is enabled, i.e.@: with @option{-fschedule-insns}
7586or @option{-fschedule-insns2} or at @option{-O2} or higher.
7587
7588@item -fsched-spec-insn-heuristic
7589@opindex fsched-spec-insn-heuristic
7590Enable the speculative instruction heuristic in the scheduler.  This
7591heuristic favors speculative instructions with greater dependency weakness.
7592This is enabled by default when scheduling is enabled, i.e.@:
7593with @option{-fschedule-insns} or @option{-fschedule-insns2}
7594or at @option{-O2} or higher.
7595
7596@item -fsched-rank-heuristic
7597@opindex fsched-rank-heuristic
7598Enable the rank heuristic in the scheduler.  This heuristic favors
7599the instruction belonging to a basic block with greater size or frequency.
7600This is enabled by default when scheduling is enabled, i.e.@:
7601with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7602at @option{-O2} or higher.
7603
7604@item -fsched-last-insn-heuristic
7605@opindex fsched-last-insn-heuristic
7606Enable the last-instruction heuristic in the scheduler.  This heuristic
7607favors the instruction that is less dependent on the last instruction
7608scheduled.  This is enabled by default when scheduling is enabled,
7609i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7610at @option{-O2} or higher.
7611
7612@item -fsched-dep-count-heuristic
7613@opindex fsched-dep-count-heuristic
7614Enable the dependent-count heuristic in the scheduler.  This heuristic
7615favors the instruction that has more instructions depending on it.
7616This is enabled by default when scheduling is enabled, i.e.@:
7617with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7618at @option{-O2} or higher.
7619
7620@item -freschedule-modulo-scheduled-loops
7621@opindex freschedule-modulo-scheduled-loops
7622Modulo scheduling is performed before traditional scheduling.  If a loop
7623is modulo scheduled, later scheduling passes may change its schedule.
7624Use this option to control that behavior.
7625
7626@item -fselective-scheduling
7627@opindex fselective-scheduling
7628Schedule instructions using selective scheduling algorithm.  Selective
7629scheduling runs instead of the first scheduler pass.
7630
7631@item -fselective-scheduling2
7632@opindex fselective-scheduling2
7633Schedule instructions using selective scheduling algorithm.  Selective
7634scheduling runs instead of the second scheduler pass.
7635
7636@item -fsel-sched-pipelining
7637@opindex fsel-sched-pipelining
7638Enable software pipelining of innermost loops during selective scheduling.
7639This option has no effect unless one of @option{-fselective-scheduling} or
7640@option{-fselective-scheduling2} is turned on.
7641
7642@item -fsel-sched-pipelining-outer-loops
7643@opindex fsel-sched-pipelining-outer-loops
7644When pipelining loops during selective scheduling, also pipeline outer loops.
7645This option has no effect unless @option{-fsel-sched-pipelining} is turned on.
7646
7647@item -fshrink-wrap
7648@opindex fshrink-wrap
7649Emit function prologues only before parts of the function that need it,
7650rather than at the top of the function.  This flag is enabled by default at
7651@option{-O} and higher.
7652
7653@item -fcaller-saves
7654@opindex fcaller-saves
7655Enable allocation of values to registers that are clobbered by
7656function calls, by emitting extra instructions to save and restore the
7657registers around such calls.  Such allocation is done only when it
7658seems to result in better code.
7659
7660This option is always enabled by default on certain machines, usually
7661those which have no call-preserved registers to use instead.
7662
7663Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7664
7665@item -fcombine-stack-adjustments
7666@opindex fcombine-stack-adjustments
7667Tracks stack adjustments (pushes and pops) and stack memory references
7668and then tries to find ways to combine them.
7669
7670Enabled by default at @option{-O1} and higher.
7671
7672@item -fconserve-stack
7673@opindex fconserve-stack
7674Attempt to minimize stack usage.  The compiler attempts to use less
7675stack space, even if that makes the program slower.  This option
7676implies setting the @option{large-stack-frame} parameter to 100
7677and the @option{large-stack-frame-growth} parameter to 400.
7678
7679@item -ftree-reassoc
7680@opindex ftree-reassoc
7681Perform reassociation on trees.  This flag is enabled by default
7682at @option{-O} and higher.
7683
7684@item -ftree-pre
7685@opindex ftree-pre
7686Perform partial redundancy elimination (PRE) on trees.  This flag is
7687enabled by default at @option{-O2} and @option{-O3}.
7688
7689@item -ftree-partial-pre
7690@opindex ftree-partial-pre
7691Make partial redundancy elimination (PRE) more aggressive.  This flag is
7692enabled by default at @option{-O3}.
7693
7694@item -ftree-forwprop
7695@opindex ftree-forwprop
7696Perform forward propagation on trees.  This flag is enabled by default
7697at @option{-O} and higher.
7698
7699@item -ftree-fre
7700@opindex ftree-fre
7701Perform full redundancy elimination (FRE) on trees.  The difference
7702between FRE and PRE is that FRE only considers expressions
7703that are computed on all paths leading to the redundant computation.
7704This analysis is faster than PRE, though it exposes fewer redundancies.
7705This flag is enabled by default at @option{-O} and higher.
7706
7707@item -ftree-phiprop
7708@opindex ftree-phiprop
7709Perform hoisting of loads from conditional pointers on trees.  This
7710pass is enabled by default at @option{-O} and higher.
7711
7712@item -fhoist-adjacent-loads
7713@opindex hoist-adjacent-loads
7714Speculatively hoist loads from both branches of an if-then-else if the
7715loads are from adjacent locations in the same structure and the target
7716architecture has a conditional move instruction.  This flag is enabled
7717by default at @option{-O2} and higher.
7718
7719@item -ftree-copy-prop
7720@opindex ftree-copy-prop
7721Perform copy propagation on trees.  This pass eliminates unnecessary
7722copy operations.  This flag is enabled by default at @option{-O} and
7723higher.
7724
7725@item -fipa-pure-const
7726@opindex fipa-pure-const
7727Discover which functions are pure or constant.
7728Enabled by default at @option{-O} and higher.
7729
7730@item -fipa-reference
7731@opindex fipa-reference
7732Discover which static variables do not escape the
7733compilation unit.
7734Enabled by default at @option{-O} and higher.
7735
7736@item -fipa-pta
7737@opindex fipa-pta
7738Perform interprocedural pointer analysis and interprocedural modification
7739and reference analysis.  This option can cause excessive memory and
7740compile-time usage on large compilation units.  It is not enabled by
7741default at any optimization level.
7742
7743@item -fipa-profile
7744@opindex fipa-profile
7745Perform interprocedural profile propagation.  The functions called only from
7746cold functions are marked as cold. Also functions executed once (such as
7747@code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold
7748functions and loop less parts of functions executed once are then optimized for
7749size.
7750Enabled by default at @option{-O} and higher.
7751
7752@item -fipa-cp
7753@opindex fipa-cp
7754Perform interprocedural constant propagation.
7755This optimization analyzes the program to determine when values passed
7756to functions are constants and then optimizes accordingly.
7757This optimization can substantially increase performance
7758if the application has constants passed to functions.
7759This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
7760
7761@item -fipa-cp-clone
7762@opindex fipa-cp-clone
7763Perform function cloning to make interprocedural constant propagation stronger.
7764When enabled, interprocedural constant propagation performs function cloning
7765when externally visible function can be called with constant arguments.
7766Because this optimization can create multiple copies of functions,
7767it may significantly increase code size
7768(see @option{--param ipcp-unit-growth=@var{value}}).
7769This flag is enabled by default at @option{-O3}.
7770
7771@item -fisolate-erroneous-paths-dereference
7772Detect paths which trigger erroneous or undefined behaviour due to
7773dereferencing a NULL pointer.  Isolate those paths from the main control
7774flow and turn the statement with erroneous or undefined behaviour into a trap.
7775
7776@item -fisolate-erroneous-paths-attribute
7777Detect paths which trigger erroneous or undefined behaviour due a NULL value
7778being used in a way which is forbidden by a @code{returns_nonnull} or @code{nonnull}
7779attribute.  Isolate those paths from the main control flow and turn the
7780statement with erroneous or undefined behaviour into a trap.  This is not
7781currently enabled, but may be enabled by @code{-O2} in the future.
7782
7783@item -ftree-sink
7784@opindex ftree-sink
7785Perform forward store motion  on trees.  This flag is
7786enabled by default at @option{-O} and higher.
7787
7788@item -ftree-bit-ccp
7789@opindex ftree-bit-ccp
7790Perform sparse conditional bit constant propagation on trees and propagate
7791pointer alignment information.
7792This pass only operates on local scalar variables and is enabled by default
7793at @option{-O} and higher.  It requires that @option{-ftree-ccp} is enabled.
7794
7795@item -ftree-ccp
7796@opindex ftree-ccp
7797Perform sparse conditional constant propagation (CCP) on trees.  This
7798pass only operates on local scalar variables and is enabled by default
7799at @option{-O} and higher.
7800
7801@item -ftree-switch-conversion
7802Perform conversion of simple initializations in a switch to
7803initializations from a scalar array.  This flag is enabled by default
7804at @option{-O2} and higher.
7805
7806@item -ftree-tail-merge
7807Look for identical code sequences.  When found, replace one with a jump to the
7808other.  This optimization is known as tail merging or cross jumping.  This flag
7809is enabled by default at @option{-O2} and higher.  The compilation time
7810in this pass can
7811be limited using @option{max-tail-merge-comparisons} parameter and
7812@option{max-tail-merge-iterations} parameter.
7813
7814@item -ftree-dce
7815@opindex ftree-dce
7816Perform dead code elimination (DCE) on trees.  This flag is enabled by
7817default at @option{-O} and higher.
7818
7819@item -ftree-builtin-call-dce
7820@opindex ftree-builtin-call-dce
7821Perform conditional dead code elimination (DCE) for calls to built-in functions
7822that may set @code{errno} but are otherwise side-effect free.  This flag is
7823enabled by default at @option{-O2} and higher if @option{-Os} is not also
7824specified.
7825
7826@item -ftree-dominator-opts
7827@opindex ftree-dominator-opts
7828Perform a variety of simple scalar cleanups (constant/copy
7829propagation, redundancy elimination, range propagation and expression
7830simplification) based on a dominator tree traversal.  This also
7831performs jump threading (to reduce jumps to jumps). This flag is
7832enabled by default at @option{-O} and higher.
7833
7834@item -ftree-dse
7835@opindex ftree-dse
7836Perform dead store elimination (DSE) on trees.  A dead store is a store into
7837a memory location that is later overwritten by another store without
7838any intervening loads.  In this case the earlier store can be deleted.  This
7839flag is enabled by default at @option{-O} and higher.
7840
7841@item -ftree-ch
7842@opindex ftree-ch
7843Perform loop header copying on trees.  This is beneficial since it increases
7844effectiveness of code motion optimizations.  It also saves one jump.  This flag
7845is enabled by default at @option{-O} and higher.  It is not enabled
7846for @option{-Os}, since it usually increases code size.
7847
7848@item -ftree-loop-optimize
7849@opindex ftree-loop-optimize
7850Perform loop optimizations on trees.  This flag is enabled by default
7851at @option{-O} and higher.
7852
7853@item -ftree-loop-linear
7854@opindex ftree-loop-linear
7855Perform loop interchange transformations on tree.  Same as
7856@option{-floop-interchange}.  To use this code transformation, GCC has
7857to be configured with @option{--with-ppl} and @option{--with-cloog} to
7858enable the Graphite loop transformation infrastructure.
7859
7860@item -floop-interchange
7861@opindex floop-interchange
7862Perform loop interchange transformations on loops.  Interchanging two
7863nested loops switches the inner and outer loops.  For example, given a
7864loop like:
7865@smallexample
7866DO J = 1, M
7867  DO I = 1, N
7868    A(J, I) = A(J, I) * C
7869  ENDDO
7870ENDDO
7871@end smallexample
7872loop interchange transforms the loop as if it were written:
7873@smallexample
7874DO I = 1, N
7875  DO J = 1, M
7876    A(J, I) = A(J, I) * C
7877  ENDDO
7878ENDDO
7879@end smallexample
7880which can be beneficial when @code{N} is larger than the caches,
7881because in Fortran, the elements of an array are stored in memory
7882contiguously by column, and the original loop iterates over rows,
7883potentially creating at each access a cache miss.  This optimization
7884applies to all the languages supported by GCC and is not limited to
7885Fortran.  To use this code transformation, GCC has to be configured
7886with @option{--with-ppl} and @option{--with-cloog} to enable the
7887Graphite loop transformation infrastructure.
7888
7889@item -floop-strip-mine
7890@opindex floop-strip-mine
7891Perform loop strip mining transformations on loops.  Strip mining
7892splits a loop into two nested loops.  The outer loop has strides
7893equal to the strip size and the inner loop has strides of the
7894original loop within a strip.  The strip length can be changed
7895using the @option{loop-block-tile-size} parameter.  For example,
7896given a loop like:
7897@smallexample
7898DO I = 1, N
7899  A(I) = A(I) + C
7900ENDDO
7901@end smallexample
7902loop strip mining transforms the loop as if it were written:
7903@smallexample
7904DO II = 1, N, 51
7905  DO I = II, min (II + 50, N)
7906    A(I) = A(I) + C
7907  ENDDO
7908ENDDO
7909@end smallexample
7910This optimization applies to all the languages supported by GCC and is
7911not limited to Fortran.  To use this code transformation, GCC has to
7912be configured with @option{--with-ppl} and @option{--with-cloog} to
7913enable the Graphite loop transformation infrastructure.
7914
7915@item -floop-block
7916@opindex floop-block
7917Perform loop blocking transformations on loops.  Blocking strip mines
7918each loop in the loop nest such that the memory accesses of the
7919element loops fit inside caches.  The strip length can be changed
7920using the @option{loop-block-tile-size} parameter.  For example, given
7921a loop like:
7922@smallexample
7923DO I = 1, N
7924  DO J = 1, M
7925    A(J, I) = B(I) + C(J)
7926  ENDDO
7927ENDDO
7928@end smallexample
7929loop blocking transforms the loop as if it were written:
7930@smallexample
7931DO II = 1, N, 51
7932  DO JJ = 1, M, 51
7933    DO I = II, min (II + 50, N)
7934      DO J = JJ, min (JJ + 50, M)
7935        A(J, I) = B(I) + C(J)
7936      ENDDO
7937    ENDDO
7938  ENDDO
7939ENDDO
7940@end smallexample
7941which can be beneficial when @code{M} is larger than the caches,
7942because the innermost loop iterates over a smaller amount of data
7943which can be kept in the caches.  This optimization applies to all the
7944languages supported by GCC and is not limited to Fortran.  To use this
7945code transformation, GCC has to be configured with @option{--with-ppl}
7946and @option{--with-cloog} to enable the Graphite loop transformation
7947infrastructure.
7948
7949@item -fgraphite-identity
7950@opindex fgraphite-identity
7951Enable the identity transformation for graphite.  For every SCoP we generate
7952the polyhedral representation and transform it back to gimple.  Using
7953@option{-fgraphite-identity} we can check the costs or benefits of the
7954GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
7955are also performed by the code generator CLooG, like index splitting and
7956dead code elimination in loops.
7957
7958@item -floop-nest-optimize
7959@opindex floop-nest-optimize
7960Enable the ISL based loop nest optimizer.  This is a generic loop nest
7961optimizer based on the Pluto optimization algorithms.  It calculates a loop
7962structure optimized for data-locality and parallelism.  This option
7963is experimental.
7964
7965@item -floop-parallelize-all
7966@opindex floop-parallelize-all
7967Use the Graphite data dependence analysis to identify loops that can
7968be parallelized.  Parallelize all the loops that can be analyzed to
7969not contain loop carried dependences without checking that it is
7970profitable to parallelize the loops.
7971
7972@item -fcheck-data-deps
7973@opindex fcheck-data-deps
7974Compare the results of several data dependence analyzers.  This option
7975is used for debugging the data dependence analyzers.
7976
7977@item -ftree-loop-if-convert
7978Attempt to transform conditional jumps in the innermost loops to
7979branch-less equivalents.  The intent is to remove control-flow from
7980the innermost loops in order to improve the ability of the
7981vectorization pass to handle these loops.  This is enabled by default
7982if vectorization is enabled.
7983
7984@item -ftree-loop-if-convert-stores
7985Attempt to also if-convert conditional jumps containing memory writes.
7986This transformation can be unsafe for multi-threaded programs as it
7987transforms conditional memory writes into unconditional memory writes.
7988For example,
7989@smallexample
7990for (i = 0; i < N; i++)
7991  if (cond)
7992    A[i] = expr;
7993@end smallexample
7994is transformed to
7995@smallexample
7996for (i = 0; i < N; i++)
7997  A[i] = cond ? expr : A[i];
7998@end smallexample
7999potentially producing data races.
8000
8001@item -ftree-loop-distribution
8002Perform loop distribution.  This flag can improve cache performance on
8003big loop bodies and allow further loop optimizations, like
8004parallelization or vectorization, to take place.  For example, the loop
8005@smallexample
8006DO I = 1, N
8007  A(I) = B(I) + C
8008  D(I) = E(I) * F
8009ENDDO
8010@end smallexample
8011is transformed to
8012@smallexample
8013DO I = 1, N
8014   A(I) = B(I) + C
8015ENDDO
8016DO I = 1, N
8017   D(I) = E(I) * F
8018ENDDO
8019@end smallexample
8020
8021@item -ftree-loop-distribute-patterns
8022Perform loop distribution of patterns that can be code generated with
8023calls to a library.  This flag is enabled by default at @option{-O3}.
8024
8025This pass distributes the initialization loops and generates a call to
8026memset zero.  For example, the loop
8027@smallexample
8028DO I = 1, N
8029  A(I) = 0
8030  B(I) = A(I) + I
8031ENDDO
8032@end smallexample
8033is transformed to
8034@smallexample
8035DO I = 1, N
8036   A(I) = 0
8037ENDDO
8038DO I = 1, N
8039   B(I) = A(I) + I
8040ENDDO
8041@end smallexample
8042and the initialization loop is transformed into a call to memset zero.
8043
8044@item -ftree-loop-im
8045@opindex ftree-loop-im
8046Perform loop invariant motion on trees.  This pass moves only invariants that
8047are hard to handle at RTL level (function calls, operations that expand to
8048nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
8049operands of conditions that are invariant out of the loop, so that we can use
8050just trivial invariantness analysis in loop unswitching.  The pass also includes
8051store motion.
8052
8053@item -ftree-loop-ivcanon
8054@opindex ftree-loop-ivcanon
8055Create a canonical counter for number of iterations in loops for which
8056determining number of iterations requires complicated analysis.  Later
8057optimizations then may determine the number easily.  Useful especially
8058in connection with unrolling.
8059
8060@item -fivopts
8061@opindex fivopts
8062Perform induction variable optimizations (strength reduction, induction
8063variable merging and induction variable elimination) on trees.
8064
8065@item -ftree-parallelize-loops=n
8066@opindex ftree-parallelize-loops
8067Parallelize loops, i.e., split their iteration space to run in n threads.
8068This is only possible for loops whose iterations are independent
8069and can be arbitrarily reordered.  The optimization is only
8070profitable on multiprocessor machines, for loops that are CPU-intensive,
8071rather than constrained e.g.@: by memory bandwidth.  This option
8072implies @option{-pthread}, and thus is only supported on targets
8073that have support for @option{-pthread}.
8074
8075@item -ftree-pta
8076@opindex ftree-pta
8077Perform function-local points-to analysis on trees.  This flag is
8078enabled by default at @option{-O} and higher.
8079
8080@item -ftree-sra
8081@opindex ftree-sra
8082Perform scalar replacement of aggregates.  This pass replaces structure
8083references with scalars to prevent committing structures to memory too
8084early.  This flag is enabled by default at @option{-O} and higher.
8085
8086@item -ftree-copyrename
8087@opindex ftree-copyrename
8088Perform copy renaming on trees.  This pass attempts to rename compiler
8089temporaries to other variables at copy locations, usually resulting in
8090variable names which more closely resemble the original variables.  This flag
8091is enabled by default at @option{-O} and higher.
8092
8093@item -ftree-coalesce-inlined-vars
8094@opindex ftree-coalesce-inlined-vars
8095Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
8096combine small user-defined variables too, but only if they were inlined
8097from other functions.  It is a more limited form of
8098@option{-ftree-coalesce-vars}.  This may harm debug information of such
8099inlined variables, but it will keep variables of the inlined-into
8100function apart from each other, such that they are more likely to
8101contain the expected values in a debugging session.  This was the
8102default in GCC versions older than 4.7.
8103
8104@item -ftree-coalesce-vars
8105@opindex ftree-coalesce-vars
8106Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
8107combine small user-defined variables too, instead of just compiler
8108temporaries.  This may severely limit the ability to debug an optimized
8109program compiled with @option{-fno-var-tracking-assignments}.  In the
8110negated form, this flag prevents SSA coalescing of user variables,
8111including inlined ones.  This option is enabled by default.
8112
8113@item -ftree-ter
8114@opindex ftree-ter
8115Perform temporary expression replacement during the SSA->normal phase.  Single
8116use/single def temporaries are replaced at their use location with their
8117defining expression.  This results in non-GIMPLE code, but gives the expanders
8118much more complex trees to work on resulting in better RTL generation.  This is
8119enabled by default at @option{-O} and higher.
8120
8121@item -ftree-slsr
8122@opindex ftree-slsr
8123Perform straight-line strength reduction on trees.  This recognizes related
8124expressions involving multiplications and replaces them by less expensive
8125calculations when possible.  This is enabled by default at @option{-O} and
8126higher.
8127
8128@item -ftree-vectorize
8129@opindex ftree-vectorize
8130Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
8131and @option{-ftree-slp-vectorize} if not explicitly specified.
8132
8133@item -ftree-loop-vectorize
8134@opindex ftree-loop-vectorize
8135Perform loop vectorization on trees. This flag is enabled by default at
8136@option{-O3} and when @option{-ftree-vectorize} is enabled.
8137
8138@item -ftree-slp-vectorize
8139@opindex ftree-slp-vectorize
8140Perform basic block vectorization on trees. This flag is enabled by default at
8141@option{-O3} and when @option{-ftree-vectorize} is enabled.
8142
8143@item -fvect-cost-model=@var{model}
8144@opindex fvect-cost-model
8145Alter the cost model used for vectorization.  The @var{model} argument
8146should be one of @code{unlimited}, @code{dynamic} or @code{cheap}.
8147With the @code{unlimited} model the vectorized code-path is assumed
8148to be profitable while with the @code{dynamic} model a runtime check
8149will guard the vectorized code-path to enable it only for iteration
8150counts that will likely execute faster than when executing the original
8151scalar loop.  The @code{cheap} model will disable vectorization of
8152loops where doing so would be cost prohibitive for example due to
8153required runtime checks for data dependence or alignment but otherwise
8154is equal to the @code{dynamic} model.
8155The default cost model depends on other optimization flags and is
8156either @code{dynamic} or @code{cheap}.
8157
8158@item -fsimd-cost-model=@var{model}
8159@opindex fsimd-cost-model
8160Alter the cost model used for vectorization of loops marked with the OpenMP
8161or Cilk Plus simd directive.  The @var{model} argument should be one of
8162@code{unlimited}, @code{dynamic}, @code{cheap}.  All values of @var{model}
8163have the same meaning as described in @option{-fvect-cost-model} and by
8164default a cost model defined with @option{-fvect-cost-model} is used.
8165
8166@item -ftree-vrp
8167@opindex ftree-vrp
8168Perform Value Range Propagation on trees.  This is similar to the
8169constant propagation pass, but instead of values, ranges of values are
8170propagated.  This allows the optimizers to remove unnecessary range
8171checks like array bound checks and null pointer checks.  This is
8172enabled by default at @option{-O2} and higher.  Null pointer check
8173elimination is only done if @option{-fdelete-null-pointer-checks} is
8174enabled.
8175
8176@item -ftracer
8177@opindex ftracer
8178Perform tail duplication to enlarge superblock size.  This transformation
8179simplifies the control flow of the function allowing other optimizations to do
8180a better job.
8181
8182@item -funroll-loops
8183@opindex funroll-loops
8184Unroll loops whose number of iterations can be determined at compile
8185time or upon entry to the loop.  @option{-funroll-loops} implies
8186@option{-frerun-cse-after-loop}.  This option makes code larger,
8187and may or may not make it run faster.
8188
8189@item -funroll-all-loops
8190@opindex funroll-all-loops
8191Unroll all loops, even if their number of iterations is uncertain when
8192the loop is entered.  This usually makes programs run more slowly.
8193@option{-funroll-all-loops} implies the same options as
8194@option{-funroll-loops},
8195
8196@item -fsplit-ivs-in-unroller
8197@opindex fsplit-ivs-in-unroller
8198Enables expression of values of induction variables in later iterations
8199of the unrolled loop using the value in the first iteration.  This breaks
8200long dependency chains, thus improving efficiency of the scheduling passes.
8201
8202A combination of @option{-fweb} and CSE is often sufficient to obtain the
8203same effect.  However, that is not reliable in cases where the loop body
8204is more complicated than a single basic block.  It also does not work at all
8205on some architectures due to restrictions in the CSE pass.
8206
8207This optimization is enabled by default.
8208
8209@item -fvariable-expansion-in-unroller
8210@opindex fvariable-expansion-in-unroller
8211With this option, the compiler creates multiple copies of some
8212local variables when unrolling a loop, which can result in superior code.
8213
8214@item -fpartial-inlining
8215@opindex fpartial-inlining
8216Inline parts of functions.  This option has any effect only
8217when inlining itself is turned on by the @option{-finline-functions}
8218or @option{-finline-small-functions} options.
8219
8220Enabled at level @option{-O2}.
8221
8222@item -fpredictive-commoning
8223@opindex fpredictive-commoning
8224Perform predictive commoning optimization, i.e., reusing computations
8225(especially memory loads and stores) performed in previous
8226iterations of loops.
8227
8228This option is enabled at level @option{-O3}.
8229
8230@item -fprefetch-loop-arrays
8231@opindex fprefetch-loop-arrays
8232If supported by the target machine, generate instructions to prefetch
8233memory to improve the performance of loops that access large arrays.
8234
8235This option may generate better or worse code; results are highly
8236dependent on the structure of loops within the source code.
8237
8238Disabled at level @option{-Os}.
8239
8240@item -fno-peephole
8241@itemx -fno-peephole2
8242@opindex fno-peephole
8243@opindex fno-peephole2
8244Disable any machine-specific peephole optimizations.  The difference
8245between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
8246are implemented in the compiler; some targets use one, some use the
8247other, a few use both.
8248
8249@option{-fpeephole} is enabled by default.
8250@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8251
8252@item -fno-guess-branch-probability
8253@opindex fno-guess-branch-probability
8254Do not guess branch probabilities using heuristics.
8255
8256GCC uses heuristics to guess branch probabilities if they are
8257not provided by profiling feedback (@option{-fprofile-arcs}).  These
8258heuristics are based on the control flow graph.  If some branch probabilities
8259are specified by @samp{__builtin_expect}, then the heuristics are
8260used to guess branch probabilities for the rest of the control flow graph,
8261taking the @samp{__builtin_expect} info into account.  The interactions
8262between the heuristics and @samp{__builtin_expect} can be complex, and in
8263some cases, it may be useful to disable the heuristics so that the effects
8264of @samp{__builtin_expect} are easier to understand.
8265
8266The default is @option{-fguess-branch-probability} at levels
8267@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8268
8269@item -freorder-blocks
8270@opindex freorder-blocks
8271Reorder basic blocks in the compiled function in order to reduce number of
8272taken branches and improve code locality.
8273
8274Enabled at levels @option{-O2}, @option{-O3}.
8275
8276@item -freorder-blocks-and-partition
8277@opindex freorder-blocks-and-partition
8278In addition to reordering basic blocks in the compiled function, in order
8279to reduce number of taken branches, partitions hot and cold basic blocks
8280into separate sections of the assembly and .o files, to improve
8281paging and cache locality performance.
8282
8283This optimization is automatically turned off in the presence of
8284exception handling, for linkonce sections, for functions with a user-defined
8285section attribute and on any architecture that does not support named
8286sections.
8287
8288Enabled for x86 at levels @option{-O2}, @option{-O3}.
8289
8290@item -freorder-functions
8291@opindex freorder-functions
8292Reorder functions in the object file in order to
8293improve code locality.  This is implemented by using special
8294subsections @code{.text.hot} for most frequently executed functions and
8295@code{.text.unlikely} for unlikely executed functions.  Reordering is done by
8296the linker so object file format must support named sections and linker must
8297place them in a reasonable way.
8298
8299Also profile feedback must be available to make this option effective.  See
8300@option{-fprofile-arcs} for details.
8301
8302Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
8303
8304@item -fstrict-aliasing
8305@opindex fstrict-aliasing
8306Allow the compiler to assume the strictest aliasing rules applicable to
8307the language being compiled.  For C (and C++), this activates
8308optimizations based on the type of expressions.  In particular, an
8309object of one type is assumed never to reside at the same address as an
8310object of a different type, unless the types are almost the same.  For
8311example, an @code{unsigned int} can alias an @code{int}, but not a
8312@code{void*} or a @code{double}.  A character type may alias any other
8313type.
8314
8315@anchor{Type-punning}Pay special attention to code like this:
8316@smallexample
8317union a_union @{
8318  int i;
8319  double d;
8320@};
8321
8322int f() @{
8323  union a_union t;
8324  t.d = 3.0;
8325  return t.i;
8326@}
8327@end smallexample
8328The practice of reading from a different union member than the one most
8329recently written to (called ``type-punning'') is common.  Even with
8330@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
8331is accessed through the union type.  So, the code above works as
8332expected.  @xref{Structures unions enumerations and bit-fields
8333implementation}.  However, this code might not:
8334@smallexample
8335int f() @{
8336  union a_union t;
8337  int* ip;
8338  t.d = 3.0;
8339  ip = &t.i;
8340  return *ip;
8341@}
8342@end smallexample
8343
8344Similarly, access by taking the address, casting the resulting pointer
8345and dereferencing the result has undefined behavior, even if the cast
8346uses a union type, e.g.:
8347@smallexample
8348int f() @{
8349  double d = 3.0;
8350  return ((union a_union *) &d)->i;
8351@}
8352@end smallexample
8353
8354The @option{-fstrict-aliasing} option is enabled at levels
8355@option{-O2}, @option{-O3}, @option{-Os}.
8356
8357@item -fstrict-overflow
8358@opindex fstrict-overflow
8359Allow the compiler to assume strict signed overflow rules, depending
8360on the language being compiled.  For C (and C++) this means that
8361overflow when doing arithmetic with signed numbers is undefined, which
8362means that the compiler may assume that it does not happen.  This
8363permits various optimizations.  For example, the compiler assumes
8364that an expression like @code{i + 10 > i} is always true for
8365signed @code{i}.  This assumption is only valid if signed overflow is
8366undefined, as the expression is false if @code{i + 10} overflows when
8367using twos complement arithmetic.  When this option is in effect any
8368attempt to determine whether an operation on signed numbers
8369overflows must be written carefully to not actually involve overflow.
8370
8371This option also allows the compiler to assume strict pointer
8372semantics: given a pointer to an object, if adding an offset to that
8373pointer does not produce a pointer to the same object, the addition is
8374undefined.  This permits the compiler to conclude that @code{p + u >
8375p} is always true for a pointer @code{p} and unsigned integer
8376@code{u}.  This assumption is only valid because pointer wraparound is
8377undefined, as the expression is false if @code{p + u} overflows using
8378twos complement arithmetic.
8379
8380See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
8381that integer signed overflow is fully defined: it wraps.  When
8382@option{-fwrapv} is used, there is no difference between
8383@option{-fstrict-overflow} and @option{-fno-strict-overflow} for
8384integers.  With @option{-fwrapv} certain types of overflow are
8385permitted.  For example, if the compiler gets an overflow when doing
8386arithmetic on constants, the overflowed value can still be used with
8387@option{-fwrapv}, but not otherwise.
8388
8389The @option{-fstrict-overflow} option is enabled at levels
8390@option{-O2}, @option{-O3}, @option{-Os}.
8391
8392@item -falign-functions
8393@itemx -falign-functions=@var{n}
8394@opindex falign-functions
8395Align the start of functions to the next power-of-two greater than
8396@var{n}, skipping up to @var{n} bytes.  For instance,
8397@option{-falign-functions=32} aligns functions to the next 32-byte
8398boundary, but @option{-falign-functions=24} aligns to the next
839932-byte boundary only if this can be done by skipping 23 bytes or less.
8400
8401@option{-fno-align-functions} and @option{-falign-functions=1} are
8402equivalent and mean that functions are not aligned.
8403
8404Some assemblers only support this flag when @var{n} is a power of two;
8405in that case, it is rounded up.
8406
8407If @var{n} is not specified or is zero, use a machine-dependent default.
8408
8409Enabled at levels @option{-O2}, @option{-O3}.
8410
8411@item -falign-labels
8412@itemx -falign-labels=@var{n}
8413@opindex falign-labels
8414Align all branch targets to a power-of-two boundary, skipping up to
8415@var{n} bytes like @option{-falign-functions}.  This option can easily
8416make code slower, because it must insert dummy operations for when the
8417branch target is reached in the usual flow of the code.
8418
8419@option{-fno-align-labels} and @option{-falign-labels=1} are
8420equivalent and mean that labels are not aligned.
8421
8422If @option{-falign-loops} or @option{-falign-jumps} are applicable and
8423are greater than this value, then their values are used instead.
8424
8425If @var{n} is not specified or is zero, use a machine-dependent default
8426which is very likely to be @samp{1}, meaning no alignment.
8427
8428Enabled at levels @option{-O2}, @option{-O3}.
8429
8430@item -falign-loops
8431@itemx -falign-loops=@var{n}
8432@opindex falign-loops
8433Align loops to a power-of-two boundary, skipping up to @var{n} bytes
8434like @option{-falign-functions}.  If the loops are
8435executed many times, this makes up for any execution of the dummy
8436operations.
8437
8438@option{-fno-align-loops} and @option{-falign-loops=1} are
8439equivalent and mean that loops are not aligned.
8440
8441If @var{n} is not specified or is zero, use a machine-dependent default.
8442
8443Enabled at levels @option{-O2}, @option{-O3}.
8444
8445@item -falign-jumps
8446@itemx -falign-jumps=@var{n}
8447@opindex falign-jumps
8448Align branch targets to a power-of-two boundary, for branch targets
8449where the targets can only be reached by jumping, skipping up to @var{n}
8450bytes like @option{-falign-functions}.  In this case, no dummy operations
8451need be executed.
8452
8453@option{-fno-align-jumps} and @option{-falign-jumps=1} are
8454equivalent and mean that loops are not aligned.
8455
8456If @var{n} is not specified or is zero, use a machine-dependent default.
8457
8458Enabled at levels @option{-O2}, @option{-O3}.
8459
8460@item -funit-at-a-time
8461@opindex funit-at-a-time
8462This option is left for compatibility reasons. @option{-funit-at-a-time}
8463has no effect, while @option{-fno-unit-at-a-time} implies
8464@option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
8465
8466Enabled by default.
8467
8468@item -fno-toplevel-reorder
8469@opindex fno-toplevel-reorder
8470Do not reorder top-level functions, variables, and @code{asm}
8471statements.  Output them in the same order that they appear in the
8472input file.  When this option is used, unreferenced static variables
8473are not removed.  This option is intended to support existing code
8474that relies on a particular ordering.  For new code, it is better to
8475use attributes when possible.
8476
8477Enabled at level @option{-O0}.  When disabled explicitly, it also implies
8478@option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some
8479targets.
8480
8481@item -fweb
8482@opindex fweb
8483Constructs webs as commonly used for register allocation purposes and assign
8484each web individual pseudo register.  This allows the register allocation pass
8485to operate on pseudos directly, but also strengthens several other optimization
8486passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
8487however, make debugging impossible, since variables no longer stay in a
8488``home register''.
8489
8490Enabled by default with @option{-funroll-loops}.
8491
8492@item -fwhole-program
8493@opindex fwhole-program
8494Assume that the current compilation unit represents the whole program being
8495compiled.  All public functions and variables with the exception of @code{main}
8496and those merged by attribute @code{externally_visible} become static functions
8497and in effect are optimized more aggressively by interprocedural optimizers.
8498
8499This option should not be used in combination with @code{-flto}.
8500Instead relying on a linker plugin should provide safer and more precise
8501information.
8502
8503@item -flto[=@var{n}]
8504@opindex flto
8505This option runs the standard link-time optimizer.  When invoked
8506with source code, it generates GIMPLE (one of GCC's internal
8507representations) and writes it to special ELF sections in the object
8508file.  When the object files are linked together, all the function
8509bodies are read from these ELF sections and instantiated as if they
8510had been part of the same translation unit.
8511
8512To use the link-time optimizer, @option{-flto} and optimization
8513options should be specified at compile time and during the final link.
8514For example:
8515
8516@smallexample
8517gcc -c -O2 -flto foo.c
8518gcc -c -O2 -flto bar.c
8519gcc -o myprog -flto -O2 foo.o bar.o
8520@end smallexample
8521
8522The first two invocations to GCC save a bytecode representation
8523of GIMPLE into special ELF sections inside @file{foo.o} and
8524@file{bar.o}.  The final invocation reads the GIMPLE bytecode from
8525@file{foo.o} and @file{bar.o}, merges the two files into a single
8526internal image, and compiles the result as usual.  Since both
8527@file{foo.o} and @file{bar.o} are merged into a single image, this
8528causes all the interprocedural analyses and optimizations in GCC to
8529work across the two files as if they were a single one.  This means,
8530for example, that the inliner is able to inline functions in
8531@file{bar.o} into functions in @file{foo.o} and vice-versa.
8532
8533Another (simpler) way to enable link-time optimization is:
8534
8535@smallexample
8536gcc -o myprog -flto -O2 foo.c bar.c
8537@end smallexample
8538
8539The above generates bytecode for @file{foo.c} and @file{bar.c},
8540merges them together into a single GIMPLE representation and optimizes
8541them as usual to produce @file{myprog}.
8542
8543The only important thing to keep in mind is that to enable link-time
8544optimizations you need to use the GCC driver to perform the link-step.
8545GCC then automatically performs link-time optimization if any of the
8546objects involved were compiled with the @option{-flto}.  You generally
8547should specify the optimization options to be used for link-time
8548optimization though GCC will try to be clever at guessing an
8549optimization level to use from the options used at compile-time
8550if you fail to specify one at link-time.  You can always override
8551the automatic decision to do link-time optimization at link-time
8552by passing @option{-fno-lto} to the link command.
8553
8554To make whole program optimization effective, it is necessary to make
8555certain whole program assumptions.  The compiler needs to know
8556what functions and variables can be accessed by libraries and runtime
8557outside of the link-time optimized unit.  When supported by the linker,
8558the linker plugin (see @option{-fuse-linker-plugin}) passes information
8559to the compiler about used and externally visible symbols.  When
8560the linker plugin is not available, @option{-fwhole-program} should be
8561used to allow the compiler to make these assumptions, which leads
8562to more aggressive optimization decisions.
8563
8564When @option{-fuse-linker-plugin} is not enabled then, when a file is
8565compiled with @option{-flto}, the generated object file is larger than
8566a regular object file because it contains GIMPLE bytecodes and the usual
8567final code (see @option{-ffat-lto-objects}.  This means that
8568object files with LTO information can be linked as normal object
8569files; if @option{-fno-lto} is passed to the linker, no
8570interprocedural optimizations are applied.  Note that when
8571@option{-fno-fat-lto-objects} is enabled the compile-stage is faster
8572but you cannot perform a regular, non-LTO link on them.
8573
8574Additionally, the optimization flags used to compile individual files
8575are not necessarily related to those used at link time.  For instance,
8576
8577@smallexample
8578gcc -c -O0 -ffat-lto-objects -flto foo.c
8579gcc -c -O0 -ffat-lto-objects -flto bar.c
8580gcc -o myprog -O3 foo.o bar.o
8581@end smallexample
8582
8583This produces individual object files with unoptimized assembler
8584code, but the resulting binary @file{myprog} is optimized at
8585@option{-O3}.  If, instead, the final binary is generated with
8586@option{-fno-lto}, then @file{myprog} is not optimized.
8587
8588When producing the final binary, GCC only
8589applies link-time optimizations to those files that contain bytecode.
8590Therefore, you can mix and match object files and libraries with
8591GIMPLE bytecodes and final object code.  GCC automatically selects
8592which files to optimize in LTO mode and which files to link without
8593further processing.
8594
8595There are some code generation flags preserved by GCC when
8596generating bytecodes, as they need to be used during the final link
8597stage.  Generally options specified at link-time override those
8598specified at compile-time.
8599
8600If you do not specify an optimization level option @option{-O} at
8601link-time then GCC will compute one based on the optimization levels
8602used when compiling the object files.  The highest optimization
8603level will win here.
8604
8605Currently, the following options and their setting are take from
8606the first object file that explicitely specified it:
8607@option{-fPIC}, @option{-fpic}, @option{-fpie}, @option{-fcommon},
8608@option{-fexceptions}, @option{-fnon-call-exceptions}, @option{-fgnu-tm}
8609and all the @option{-m} target flags.
8610
8611Certain ABI changing flags are required to match in all compilation-units
8612and trying to override this at link-time with a conflicting value
8613is ignored.  This includes options such as @option{-freg-struct-return}
8614and @option{-fpcc-struct-return}.
8615
8616Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
8617@option{-fwrapv}, @option{-fno-trapv} or @option{-fno-strict-aliasing}
8618are passed through to the link stage and merged conservatively for
8619conflicting translation units.  Specifically
8620@option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
8621precedence and for example @option{-ffp-contract=off} takes precedence
8622over @option{-ffp-contract=fast}.  You can override them at linke-time.
8623
8624It is recommended that you compile all the files participating in the
8625same link with the same options and also specify those options at
8626link time.
8627
8628If LTO encounters objects with C linkage declared with incompatible
8629types in separate translation units to be linked together (undefined
8630behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
8631issued.  The behavior is still undefined at run time.  Similar
8632diagnostics may be raised for other languages.
8633
8634Another feature of LTO is that it is possible to apply interprocedural
8635optimizations on files written in different languages:
8636
8637@smallexample
8638gcc -c -flto foo.c
8639g++ -c -flto bar.cc
8640gfortran -c -flto baz.f90
8641g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
8642@end smallexample
8643
8644Notice that the final link is done with @command{g++} to get the C++
8645runtime libraries and @option{-lgfortran} is added to get the Fortran
8646runtime libraries.  In general, when mixing languages in LTO mode, you
8647should use the same link command options as when mixing languages in a
8648regular (non-LTO) compilation.
8649
8650If object files containing GIMPLE bytecode are stored in a library archive, say
8651@file{libfoo.a}, it is possible to extract and use them in an LTO link if you
8652are using a linker with plugin support.  To create static libraries suitable
8653for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar}
8654and @code{ranlib}; to show the symbols of object files with GIMPLE bytecode, use
8655@command{gcc-nm}.  Those commands require that @command{ar}, @command{ranlib}
8656and @command{nm} have been compiled with plugin support.  At link time, use the the
8657flag @option{-fuse-linker-plugin} to ensure that the library participates in
8658the LTO optimization process:
8659
8660@smallexample
8661gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
8662@end smallexample
8663
8664With the linker plugin enabled, the linker extracts the needed
8665GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
8666to make them part of the aggregated GIMPLE image to be optimized.
8667
8668If you are not using a linker with plugin support and/or do not
8669enable the linker plugin, then the objects inside @file{libfoo.a}
8670are extracted and linked as usual, but they do not participate
8671in the LTO optimization process.  In order to make a static library suitable
8672for both LTO optimization and usual linkage, compile its object files with
8673@option{-flto} @code{-ffat-lto-objects}.
8674
8675Link-time optimizations do not require the presence of the whole program to
8676operate.  If the program does not require any symbols to be exported, it is
8677possible to combine @option{-flto} and @option{-fwhole-program} to allow
8678the interprocedural optimizers to use more aggressive assumptions which may
8679lead to improved optimization opportunities.
8680Use of @option{-fwhole-program} is not needed when linker plugin is
8681active (see @option{-fuse-linker-plugin}).
8682
8683The current implementation of LTO makes no
8684attempt to generate bytecode that is portable between different
8685types of hosts.  The bytecode files are versioned and there is a
8686strict version check, so bytecode files generated in one version of
8687GCC will not work with an older or newer version of GCC.
8688
8689Link-time optimization does not work well with generation of debugging
8690information.  Combining @option{-flto} with
8691@option{-g} is currently experimental and expected to produce unexpected
8692results.
8693
8694If you specify the optional @var{n}, the optimization and code
8695generation done at link time is executed in parallel using @var{n}
8696parallel jobs by utilizing an installed @command{make} program.  The
8697environment variable @env{MAKE} may be used to override the program
8698used.  The default value for @var{n} is 1.
8699
8700You can also specify @option{-flto=jobserver} to use GNU make's
8701job server mode to determine the number of parallel jobs. This
8702is useful when the Makefile calling GCC is already executing in parallel.
8703You must prepend a @samp{+} to the command recipe in the parent Makefile
8704for this to work.  This option likely only works if @env{MAKE} is
8705GNU make.
8706
8707@item -flto-partition=@var{alg}
8708@opindex flto-partition
8709Specify the partitioning algorithm used by the link-time optimizer.
8710The value is either @code{1to1} to specify a partitioning mirroring
8711the original source files or @code{balanced} to specify partitioning
8712into equally sized chunks (whenever possible) or @code{max} to create
8713new partition for every symbol where possible.  Specifying @code{none}
8714as an algorithm disables partitioning and streaming completely.
8715The default value is @code{balanced}. While @code{1to1} can be used
8716as an workaround for various code ordering issues, the @code{max}
8717partitioning is intended for internal testing only.
8718
8719@item -flto-compression-level=@var{n}
8720This option specifies the level of compression used for intermediate
8721language written to LTO object files, and is only meaningful in
8722conjunction with LTO mode (@option{-flto}).  Valid
8723values are 0 (no compression) to 9 (maximum compression).  Values
8724outside this range are clamped to either 0 or 9.  If the option is not
8725given, a default balanced compression setting is used.
8726
8727@item -flto-report
8728Prints a report with internal details on the workings of the link-time
8729optimizer.  The contents of this report vary from version to version.
8730It is meant to be useful to GCC developers when processing object
8731files in LTO mode (via @option{-flto}).
8732
8733Disabled by default.
8734
8735@item -flto-report-wpa
8736Like @option{-flto-report}, but only print for the WPA phase of Link
8737Time Optimization.
8738
8739@item -fuse-linker-plugin
8740Enables the use of a linker plugin during link-time optimization.  This
8741option relies on plugin support in the linker, which is available in gold
8742or in GNU ld 2.21 or newer.
8743
8744This option enables the extraction of object files with GIMPLE bytecode out
8745of library archives. This improves the quality of optimization by exposing
8746more code to the link-time optimizer.  This information specifies what
8747symbols can be accessed externally (by non-LTO object or during dynamic
8748linking).  Resulting code quality improvements on binaries (and shared
8749libraries that use hidden visibility) are similar to @code{-fwhole-program}.
8750See @option{-flto} for a description of the effect of this flag and how to
8751use it.
8752
8753This option is enabled by default when LTO support in GCC is enabled
8754and GCC was configured for use with
8755a linker supporting plugins (GNU ld 2.21 or newer or gold).
8756
8757@item -ffat-lto-objects
8758@opindex ffat-lto-objects
8759Fat LTO objects are object files that contain both the intermediate language
8760and the object code. This makes them usable for both LTO linking and normal
8761linking. This option is effective only when compiling with @option{-flto}
8762and is ignored at link time.
8763
8764@option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
8765requires the complete toolchain to be aware of LTO. It requires a linker with
8766linker plugin support for basic functionality.  Additionally,
8767@command{nm}, @command{ar} and @command{ranlib}
8768need to support linker plugins to allow a full-featured build environment
8769(capable of building static libraries etc).  GCC provides the @command{gcc-ar},
8770@command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options
8771to these tools. With non fat LTO makefiles need to be modified to use them.
8772
8773The default is @option{-fno-fat-lto-objects} on targets with linker plugin
8774support.
8775
8776@item -fcompare-elim
8777@opindex fcompare-elim
8778After register allocation and post-register allocation instruction splitting,
8779identify arithmetic instructions that compute processor flags similar to a
8780comparison operation based on that arithmetic.  If possible, eliminate the
8781explicit comparison operation.
8782
8783This pass only applies to certain targets that cannot explicitly represent
8784the comparison operation before register allocation is complete.
8785
8786Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8787
8788@item -fuse-ld=bfd
8789@opindex fuse-ld=bfd
8790Use the @command{bfd} linker instead of the default linker.
8791
8792@item -fuse-ld=gold
8793@opindex fuse-ld=gold
8794Use the @command{gold} linker instead of the default linker.
8795
8796@item -fcprop-registers
8797@opindex fcprop-registers
8798After register allocation and post-register allocation instruction splitting,
8799perform a copy-propagation pass to try to reduce scheduling dependencies
8800and occasionally eliminate the copy.
8801
8802Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8803
8804@item -fprofile-correction
8805@opindex fprofile-correction
8806Profiles collected using an instrumented binary for multi-threaded programs may
8807be inconsistent due to missed counter updates. When this option is specified,
8808GCC uses heuristics to correct or smooth out such inconsistencies. By
8809default, GCC emits an error message when an inconsistent profile is detected.
8810
8811@item -fprofile-dir=@var{path}
8812@opindex fprofile-dir
8813
8814Set the directory to search for the profile data files in to @var{path}.
8815This option affects only the profile data generated by
8816@option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
8817and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
8818and its related options.  Both absolute and relative paths can be used.
8819By default, GCC uses the current directory as @var{path}, thus the
8820profile data file appears in the same directory as the object file.
8821
8822@item -fprofile-generate
8823@itemx -fprofile-generate=@var{path}
8824@opindex fprofile-generate
8825
8826Enable options usually used for instrumenting application to produce
8827profile useful for later recompilation with profile feedback based
8828optimization.  You must use @option{-fprofile-generate} both when
8829compiling and when linking your program.
8830
8831The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
8832
8833If @var{path} is specified, GCC looks at the @var{path} to find
8834the profile feedback data files. See @option{-fprofile-dir}.
8835
8836@item -fprofile-use
8837@itemx -fprofile-use=@var{path}
8838@opindex fprofile-use
8839Enable profile feedback directed optimizations, and optimizations
8840generally profitable only with profile feedback available.
8841
8842The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
8843@code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}, @code{-ftree-vectorize},
8844@code{ftree-loop-distribute-patterns}
8845
8846By default, GCC emits an error message if the feedback profiles do not
8847match the source code.  This error can be turned into a warning by using
8848@option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
8849code.
8850
8851If @var{path} is specified, GCC looks at the @var{path} to find
8852the profile feedback data files. See @option{-fprofile-dir}.
8853@end table
8854
8855The following options control compiler behavior regarding floating-point
8856arithmetic.  These options trade off between speed and
8857correctness.  All must be specifically enabled.
8858
8859@table @gcctabopt
8860@item -ffloat-store
8861@opindex ffloat-store
8862Do not store floating-point variables in registers, and inhibit other
8863options that might change whether a floating-point value is taken from a
8864register or memory.
8865
8866@cindex floating-point precision
8867This option prevents undesirable excess precision on machines such as
8868the 68000 where the floating registers (of the 68881) keep more
8869precision than a @code{double} is supposed to have.  Similarly for the
8870x86 architecture.  For most programs, the excess precision does only
8871good, but a few programs rely on the precise definition of IEEE floating
8872point.  Use @option{-ffloat-store} for such programs, after modifying
8873them to store all pertinent intermediate computations into variables.
8874
8875@item -fexcess-precision=@var{style}
8876@opindex fexcess-precision
8877This option allows further control over excess precision on machines
8878where floating-point registers have more precision than the IEEE
8879@code{float} and @code{double} types and the processor does not
8880support operations rounding to those types.  By default,
8881@option{-fexcess-precision=fast} is in effect; this means that
8882operations are carried out in the precision of the registers and that
8883it is unpredictable when rounding to the types specified in the source
8884code takes place.  When compiling C, if
8885@option{-fexcess-precision=standard} is specified then excess
8886precision follows the rules specified in ISO C99; in particular,
8887both casts and assignments cause values to be rounded to their
8888semantic types (whereas @option{-ffloat-store} only affects
8889assignments).  This option is enabled by default for C if a strict
8890conformance option such as @option{-std=c99} is used.
8891
8892@opindex mfpmath
8893@option{-fexcess-precision=standard} is not implemented for languages
8894other than C, and has no effect if
8895@option{-funsafe-math-optimizations} or @option{-ffast-math} is
8896specified.  On the x86, it also has no effect if @option{-mfpmath=sse}
8897or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
8898semantics apply without excess precision, and in the latter, rounding
8899is unpredictable.
8900
8901@item -ffast-math
8902@opindex ffast-math
8903Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
8904@option{-ffinite-math-only}, @option{-fno-rounding-math},
8905@option{-fno-signaling-nans} and @option{-fcx-limited-range}.
8906
8907This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
8908
8909This option is not turned on by any @option{-O} option besides
8910@option{-Ofast} since it can result in incorrect output for programs
8911that depend on an exact implementation of IEEE or ISO rules/specifications
8912for math functions. It may, however, yield faster code for programs
8913that do not require the guarantees of these specifications.
8914
8915@item -fno-math-errno
8916@opindex fno-math-errno
8917Do not set @code{errno} after calling math functions that are executed
8918with a single instruction, e.g., @code{sqrt}.  A program that relies on
8919IEEE exceptions for math error handling may want to use this flag
8920for speed while maintaining IEEE arithmetic compatibility.
8921
8922This option is not turned on by any @option{-O} option since
8923it can result in incorrect output for programs that depend on
8924an exact implementation of IEEE or ISO rules/specifications for
8925math functions. It may, however, yield faster code for programs
8926that do not require the guarantees of these specifications.
8927
8928The default is @option{-fmath-errno}.
8929
8930On Darwin systems, the math library never sets @code{errno}.  There is
8931therefore no reason for the compiler to consider the possibility that
8932it might, and @option{-fno-math-errno} is the default.
8933
8934@item -funsafe-math-optimizations
8935@opindex funsafe-math-optimizations
8936
8937Allow optimizations for floating-point arithmetic that (a) assume
8938that arguments and results are valid and (b) may violate IEEE or
8939ANSI standards.  When used at link-time, it may include libraries
8940or startup files that change the default FPU control word or other
8941similar optimizations.
8942
8943This option is not turned on by any @option{-O} option since
8944it can result in incorrect output for programs that depend on
8945an exact implementation of IEEE or ISO rules/specifications for
8946math functions. It may, however, yield faster code for programs
8947that do not require the guarantees of these specifications.
8948Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
8949@option{-fassociative-math} and @option{-freciprocal-math}.
8950
8951The default is @option{-fno-unsafe-math-optimizations}.
8952
8953@item -fassociative-math
8954@opindex fassociative-math
8955
8956Allow re-association of operands in series of floating-point operations.
8957This violates the ISO C and C++ language standard by possibly changing
8958computation result.  NOTE: re-ordering may change the sign of zero as
8959well as ignore NaNs and inhibit or create underflow or overflow (and
8960thus cannot be used on code that relies on rounding behavior like
8961@code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
8962and thus may not be used when ordered comparisons are required.
8963This option requires that both @option{-fno-signed-zeros} and
8964@option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
8965much sense with @option{-frounding-math}. For Fortran the option
8966is automatically enabled when both @option{-fno-signed-zeros} and
8967@option{-fno-trapping-math} are in effect.
8968
8969The default is @option{-fno-associative-math}.
8970
8971@item -freciprocal-math
8972@opindex freciprocal-math
8973
8974Allow the reciprocal of a value to be used instead of dividing by
8975the value if this enables optimizations.  For example @code{x / y}
8976can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
8977is subject to common subexpression elimination.  Note that this loses
8978precision and increases the number of flops operating on the value.
8979
8980The default is @option{-fno-reciprocal-math}.
8981
8982@item -ffinite-math-only
8983@opindex ffinite-math-only
8984Allow optimizations for floating-point arithmetic that assume
8985that arguments and results are not NaNs or +-Infs.
8986
8987This option is not turned on by any @option{-O} option since
8988it can result in incorrect output for programs that depend on
8989an exact implementation of IEEE or ISO rules/specifications for
8990math functions. It may, however, yield faster code for programs
8991that do not require the guarantees of these specifications.
8992
8993The default is @option{-fno-finite-math-only}.
8994
8995@item -fno-signed-zeros
8996@opindex fno-signed-zeros
8997Allow optimizations for floating-point arithmetic that ignore the
8998signedness of zero.  IEEE arithmetic specifies the behavior of
8999distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
9000of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
9001This option implies that the sign of a zero result isn't significant.
9002
9003The default is @option{-fsigned-zeros}.
9004
9005@item -fno-trapping-math
9006@opindex fno-trapping-math
9007Compile code assuming that floating-point operations cannot generate
9008user-visible traps.  These traps include division by zero, overflow,
9009underflow, inexact result and invalid operation.  This option requires
9010that @option{-fno-signaling-nans} be in effect.  Setting this option may
9011allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
9012
9013This option should never be turned on by any @option{-O} option since
9014it can result in incorrect output for programs that depend on
9015an exact implementation of IEEE or ISO rules/specifications for
9016math functions.
9017
9018The default is @option{-ftrapping-math}.
9019
9020@item -frounding-math
9021@opindex frounding-math
9022Disable transformations and optimizations that assume default floating-point
9023rounding behavior.  This is round-to-zero for all floating point
9024to integer conversions, and round-to-nearest for all other arithmetic
9025truncations.  This option should be specified for programs that change
9026the FP rounding mode dynamically, or that may be executed with a
9027non-default rounding mode.  This option disables constant folding of
9028floating-point expressions at compile time (which may be affected by
9029rounding mode) and arithmetic transformations that are unsafe in the
9030presence of sign-dependent rounding modes.
9031
9032The default is @option{-fno-rounding-math}.
9033
9034This option is experimental and does not currently guarantee to
9035disable all GCC optimizations that are affected by rounding mode.
9036Future versions of GCC may provide finer control of this setting
9037using C99's @code{FENV_ACCESS} pragma.  This command-line option
9038will be used to specify the default state for @code{FENV_ACCESS}.
9039
9040@item -fsignaling-nans
9041@opindex fsignaling-nans
9042Compile code assuming that IEEE signaling NaNs may generate user-visible
9043traps during floating-point operations.  Setting this option disables
9044optimizations that may change the number of exceptions visible with
9045signaling NaNs.  This option implies @option{-ftrapping-math}.
9046
9047This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
9048be defined.
9049
9050The default is @option{-fno-signaling-nans}.
9051
9052This option is experimental and does not currently guarantee to
9053disable all GCC optimizations that affect signaling NaN behavior.
9054
9055@item -fsingle-precision-constant
9056@opindex fsingle-precision-constant
9057Treat floating-point constants as single precision instead of
9058implicitly converting them to double-precision constants.
9059
9060@item -fcx-limited-range
9061@opindex fcx-limited-range
9062When enabled, this option states that a range reduction step is not
9063needed when performing complex division.  Also, there is no checking
9064whether the result of a complex multiplication or division is @code{NaN
9065+ I*NaN}, with an attempt to rescue the situation in that case.  The
9066default is @option{-fno-cx-limited-range}, but is enabled by
9067@option{-ffast-math}.
9068
9069This option controls the default setting of the ISO C99
9070@code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
9071all languages.
9072
9073@item -fcx-fortran-rules
9074@opindex fcx-fortran-rules
9075Complex multiplication and division follow Fortran rules.  Range
9076reduction is done as part of complex division, but there is no checking
9077whether the result of a complex multiplication or division is @code{NaN
9078+ I*NaN}, with an attempt to rescue the situation in that case.
9079
9080The default is @option{-fno-cx-fortran-rules}.
9081
9082@end table
9083
9084The following options control optimizations that may improve
9085performance, but are not enabled by any @option{-O} options.  This
9086section includes experimental options that may produce broken code.
9087
9088@table @gcctabopt
9089@item -fbranch-probabilities
9090@opindex fbranch-probabilities
9091After running a program compiled with @option{-fprofile-arcs}
9092(@pxref{Debugging Options,, Options for Debugging Your Program or
9093@command{gcc}}), you can compile it a second time using
9094@option{-fbranch-probabilities}, to improve optimizations based on
9095the number of times each branch was taken.  When a program
9096compiled with @option{-fprofile-arcs} exits, it saves arc execution
9097counts to a file called @file{@var{sourcename}.gcda} for each source
9098file.  The information in this data file is very dependent on the
9099structure of the generated code, so you must use the same source code
9100and the same optimization options for both compilations.
9101
9102With @option{-fbranch-probabilities}, GCC puts a
9103@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
9104These can be used to improve optimization.  Currently, they are only
9105used in one place: in @file{reorg.c}, instead of guessing which path a
9106branch is most likely to take, the @samp{REG_BR_PROB} values are used to
9107exactly determine which path is taken more often.
9108
9109@item -fprofile-values
9110@opindex fprofile-values
9111If combined with @option{-fprofile-arcs}, it adds code so that some
9112data about values of expressions in the program is gathered.
9113
9114With @option{-fbranch-probabilities}, it reads back the data gathered
9115from profiling values of expressions for usage in optimizations.
9116
9117Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
9118
9119@item -fprofile-reorder-functions
9120@opindex fprofile-reorder-functions
9121Function reordering based on profile instrumentation collects
9122first time of execution of a function and orders these functions
9123in ascending order.
9124
9125Enabled with @option{-fprofile-use}.
9126
9127@item -fvpt
9128@opindex fvpt
9129If combined with @option{-fprofile-arcs}, this option instructs the compiler
9130to add code to gather information about values of expressions.
9131
9132With @option{-fbranch-probabilities}, it reads back the data gathered
9133and actually performs the optimizations based on them.
9134Currently the optimizations include specialization of division operations
9135using the knowledge about the value of the denominator.
9136
9137@item -frename-registers
9138@opindex frename-registers
9139Attempt to avoid false dependencies in scheduled code by making use
9140of registers left over after register allocation.  This optimization
9141most benefits processors with lots of registers.  Depending on the
9142debug information format adopted by the target, however, it can
9143make debugging impossible, since variables no longer stay in
9144a ``home register''.
9145
9146Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}.
9147
9148@item -ftracer
9149@opindex ftracer
9150Perform tail duplication to enlarge superblock size.  This transformation
9151simplifies the control flow of the function allowing other optimizations to do
9152a better job.
9153
9154Enabled with @option{-fprofile-use}.
9155
9156@item -funroll-loops
9157@opindex funroll-loops
9158Unroll loops whose number of iterations can be determined at compile time or
9159upon entry to the loop.  @option{-funroll-loops} implies
9160@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
9161It also turns on complete loop peeling (i.e.@: complete removal of loops with
9162a small constant number of iterations).  This option makes code larger, and may
9163or may not make it run faster.
9164
9165Enabled with @option{-fprofile-use}.
9166
9167@item -funroll-all-loops
9168@opindex funroll-all-loops
9169Unroll all loops, even if their number of iterations is uncertain when
9170the loop is entered.  This usually makes programs run more slowly.
9171@option{-funroll-all-loops} implies the same options as
9172@option{-funroll-loops}.
9173
9174@item -fpeel-loops
9175@opindex fpeel-loops
9176Peels loops for which there is enough information that they do not
9177roll much (from profile feedback).  It also turns on complete loop peeling
9178(i.e.@: complete removal of loops with small constant number of iterations).
9179
9180Enabled with @option{-fprofile-use}.
9181
9182@item -fmove-loop-invariants
9183@opindex fmove-loop-invariants
9184Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
9185at level @option{-O1}
9186
9187@item -funswitch-loops
9188@opindex funswitch-loops
9189Move branches with loop invariant conditions out of the loop, with duplicates
9190of the loop on both branches (modified according to result of the condition).
9191
9192@item -ffunction-sections
9193@itemx -fdata-sections
9194@opindex ffunction-sections
9195@opindex fdata-sections
9196Place each function or data item into its own section in the output
9197file if the target supports arbitrary sections.  The name of the
9198function or the name of the data item determines the section's name
9199in the output file.
9200
9201Use these options on systems where the linker can perform optimizations
9202to improve locality of reference in the instruction space.  Most systems
9203using the ELF object format and SPARC processors running Solaris 2 have
9204linkers with such optimizations.  AIX may have these optimizations in
9205the future.
9206
9207Only use these options when there are significant benefits from doing
9208so.  When you specify these options, the assembler and linker
9209create larger object and executable files and are also slower.
9210You cannot use @code{gprof} on all systems if you
9211specify this option, and you may have problems with debugging if
9212you specify both this option and @option{-g}.
9213
9214@item -fbranch-target-load-optimize
9215@opindex fbranch-target-load-optimize
9216Perform branch target register load optimization before prologue / epilogue
9217threading.
9218The use of target registers can typically be exposed only during reload,
9219thus hoisting loads out of loops and doing inter-block scheduling needs
9220a separate optimization pass.
9221
9222@item -fbranch-target-load-optimize2
9223@opindex fbranch-target-load-optimize2
9224Perform branch target register load optimization after prologue / epilogue
9225threading.
9226
9227@item -fbtr-bb-exclusive
9228@opindex fbtr-bb-exclusive
9229When performing branch target register load optimization, don't reuse
9230branch target registers within any basic block.
9231
9232@item -fstack-protector
9233@opindex fstack-protector
9234Emit extra code to check for buffer overflows, such as stack smashing
9235attacks.  This is done by adding a guard variable to functions with
9236vulnerable objects.  This includes functions that call @code{alloca}, and
9237functions with buffers larger than 8 bytes.  The guards are initialized
9238when a function is entered and then checked when the function exits.
9239If a guard check fails, an error message is printed and the program exits.
9240
9241@item -fstack-protector-all
9242@opindex fstack-protector-all
9243Like @option{-fstack-protector} except that all functions are protected.
9244
9245@item -fstack-protector-strong
9246@opindex fstack-protector-strong
9247Like @option{-fstack-protector} but includes additional functions to
9248be protected --- those that have local array definitions, or have
9249references to local frame addresses.
9250
9251@item -fsection-anchors
9252@opindex fsection-anchors
9253Try to reduce the number of symbolic address calculations by using
9254shared ``anchor'' symbols to address nearby objects.  This transformation
9255can help to reduce the number of GOT entries and GOT accesses on some
9256targets.
9257
9258For example, the implementation of the following function @code{foo}:
9259
9260@smallexample
9261static int a, b, c;
9262int foo (void) @{ return a + b + c; @}
9263@end smallexample
9264
9265@noindent
9266usually calculates the addresses of all three variables, but if you
9267compile it with @option{-fsection-anchors}, it accesses the variables
9268from a common anchor point instead.  The effect is similar to the
9269following pseudocode (which isn't valid C):
9270
9271@smallexample
9272int foo (void)
9273@{
9274  register int *xr = &x;
9275  return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
9276@}
9277@end smallexample
9278
9279Not all targets support this option.
9280
9281@item --param @var{name}=@var{value}
9282@opindex param
9283In some places, GCC uses various constants to control the amount of
9284optimization that is done.  For example, GCC does not inline functions
9285that contain more than a certain number of instructions.  You can
9286control some of these constants on the command line using the
9287@option{--param} option.
9288
9289The names of specific parameters, and the meaning of the values, are
9290tied to the internals of the compiler, and are subject to change
9291without notice in future releases.
9292
9293In each case, the @var{value} is an integer.  The allowable choices for
9294@var{name} are:
9295
9296@table @gcctabopt
9297@item predictable-branch-outcome
9298When branch is predicted to be taken with probability lower than this threshold
9299(in percent), then it is considered well predictable. The default is 10.
9300
9301@item max-crossjump-edges
9302The maximum number of incoming edges to consider for cross-jumping.
9303The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
9304the number of edges incoming to each block.  Increasing values mean
9305more aggressive optimization, making the compilation time increase with
9306probably small improvement in executable size.
9307
9308@item min-crossjump-insns
9309The minimum number of instructions that must be matched at the end
9310of two blocks before cross-jumping is performed on them.  This
9311value is ignored in the case where all instructions in the block being
9312cross-jumped from are matched.  The default value is 5.
9313
9314@item max-grow-copy-bb-insns
9315The maximum code size expansion factor when copying basic blocks
9316instead of jumping.  The expansion is relative to a jump instruction.
9317The default value is 8.
9318
9319@item max-goto-duplication-insns
9320The maximum number of instructions to duplicate to a block that jumps
9321to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
9322passes, GCC factors computed gotos early in the compilation process,
9323and unfactors them as late as possible.  Only computed jumps at the
9324end of a basic blocks with no more than max-goto-duplication-insns are
9325unfactored.  The default value is 8.
9326
9327@item max-delay-slot-insn-search
9328The maximum number of instructions to consider when looking for an
9329instruction to fill a delay slot.  If more than this arbitrary number of
9330instructions are searched, the time savings from filling the delay slot
9331are minimal, so stop searching.  Increasing values mean more
9332aggressive optimization, making the compilation time increase with probably
9333small improvement in execution time.
9334
9335@item max-delay-slot-live-search
9336When trying to fill delay slots, the maximum number of instructions to
9337consider when searching for a block with valid live register
9338information.  Increasing this arbitrarily chosen value means more
9339aggressive optimization, increasing the compilation time.  This parameter
9340should be removed when the delay slot code is rewritten to maintain the
9341control-flow graph.
9342
9343@item max-gcse-memory
9344The approximate maximum amount of memory that can be allocated in
9345order to perform the global common subexpression elimination
9346optimization.  If more memory than specified is required, the
9347optimization is not done.
9348
9349@item max-gcse-insertion-ratio
9350If the ratio of expression insertions to deletions is larger than this value
9351for any expression, then RTL PRE inserts or removes the expression and thus
9352leaves partially redundant computations in the instruction stream.  The default value is 20.
9353
9354@item max-pending-list-length
9355The maximum number of pending dependencies scheduling allows
9356before flushing the current state and starting over.  Large functions
9357with few branches or calls can create excessively large lists which
9358needlessly consume memory and resources.
9359
9360@item max-modulo-backtrack-attempts
9361The maximum number of backtrack attempts the scheduler should make
9362when modulo scheduling a loop.  Larger values can exponentially increase
9363compilation time.
9364
9365@item max-inline-insns-single
9366Several parameters control the tree inliner used in GCC@.
9367This number sets the maximum number of instructions (counted in GCC's
9368internal representation) in a single function that the tree inliner
9369considers for inlining.  This only affects functions declared
9370inline and methods implemented in a class declaration (C++).
9371The default value is 400.
9372
9373@item max-inline-insns-auto
9374When you use @option{-finline-functions} (included in @option{-O3}),
9375a lot of functions that would otherwise not be considered for inlining
9376by the compiler are investigated.  To those functions, a different
9377(more restrictive) limit compared to functions declared inline can
9378be applied.
9379The default value is 40.
9380
9381@item inline-min-speedup
9382When estimated performance improvement of caller + callee runtime exceeds this
9383threshold (in precent), the function can be inlined regardless the limit on
9384@option{--param max-inline-insns-single} and @option{--param
9385max-inline-insns-auto}.
9386
9387@item large-function-insns
9388The limit specifying really large functions.  For functions larger than this
9389limit after inlining, inlining is constrained by
9390@option{--param large-function-growth}.  This parameter is useful primarily
9391to avoid extreme compilation time caused by non-linear algorithms used by the
9392back end.
9393The default value is 2700.
9394
9395@item large-function-growth
9396Specifies maximal growth of large function caused by inlining in percents.
9397The default value is 100 which limits large function growth to 2.0 times
9398the original size.
9399
9400@item large-unit-insns
9401The limit specifying large translation unit.  Growth caused by inlining of
9402units larger than this limit is limited by @option{--param inline-unit-growth}.
9403For small units this might be too tight.
9404For example, consider a unit consisting of function A
9405that is inline and B that just calls A three times.  If B is small relative to
9406A, the growth of unit is 300\% and yet such inlining is very sane.  For very
9407large units consisting of small inlineable functions, however, the overall unit
9408growth limit is needed to avoid exponential explosion of code size.  Thus for
9409smaller units, the size is increased to @option{--param large-unit-insns}
9410before applying @option{--param inline-unit-growth}.  The default is 10000.
9411
9412@item inline-unit-growth
9413Specifies maximal overall growth of the compilation unit caused by inlining.
9414The default value is 30 which limits unit growth to 1.3 times the original
9415size.
9416
9417@item ipcp-unit-growth
9418Specifies maximal overall growth of the compilation unit caused by
9419interprocedural constant propagation.  The default value is 10 which limits
9420unit growth to 1.1 times the original size.
9421
9422@item large-stack-frame
9423The limit specifying large stack frames.  While inlining the algorithm is trying
9424to not grow past this limit too much.  The default value is 256 bytes.
9425
9426@item large-stack-frame-growth
9427Specifies maximal growth of large stack frames caused by inlining in percents.
9428The default value is 1000 which limits large stack frame growth to 11 times
9429the original size.
9430
9431@item max-inline-insns-recursive
9432@itemx max-inline-insns-recursive-auto
9433Specifies the maximum number of instructions an out-of-line copy of a
9434self-recursive inline
9435function can grow into by performing recursive inlining.
9436
9437For functions declared inline, @option{--param max-inline-insns-recursive} is
9438taken into account.  For functions not declared inline, recursive inlining
9439happens only when @option{-finline-functions} (included in @option{-O3}) is
9440enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
9441default value is 450.
9442
9443@item max-inline-recursive-depth
9444@itemx max-inline-recursive-depth-auto
9445Specifies the maximum recursion depth used for recursive inlining.
9446
9447For functions declared inline, @option{--param max-inline-recursive-depth} is
9448taken into account.  For functions not declared inline, recursive inlining
9449happens only when @option{-finline-functions} (included in @option{-O3}) is
9450enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
9451default value is 8.
9452
9453@item min-inline-recursive-probability
9454Recursive inlining is profitable only for function having deep recursion
9455in average and can hurt for function having little recursion depth by
9456increasing the prologue size or complexity of function body to other
9457optimizers.
9458
9459When profile feedback is available (see @option{-fprofile-generate}) the actual
9460recursion depth can be guessed from probability that function recurses via a
9461given call expression.  This parameter limits inlining only to call expressions
9462whose probability exceeds the given threshold (in percents).
9463The default value is 10.
9464
9465@item early-inlining-insns
9466Specify growth that the early inliner can make.  In effect it increases
9467the amount of inlining for code having a large abstraction penalty.
9468The default value is 10.
9469
9470@item max-early-inliner-iterations
9471@itemx max-early-inliner-iterations
9472Limit of iterations of the early inliner.  This basically bounds
9473the number of nested indirect calls the early inliner can resolve.
9474Deeper chains are still handled by late inlining.
9475
9476@item comdat-sharing-probability
9477@itemx comdat-sharing-probability
9478Probability (in percent) that C++ inline function with comdat visibility
9479are shared across multiple compilation units.  The default value is 20.
9480
9481@item min-vect-loop-bound
9482The minimum number of iterations under which loops are not vectorized
9483when @option{-ftree-vectorize} is used.  The number of iterations after
9484vectorization needs to be greater than the value specified by this option
9485to allow vectorization.  The default value is 0.
9486
9487@item gcse-cost-distance-ratio
9488Scaling factor in calculation of maximum distance an expression
9489can be moved by GCSE optimizations.  This is currently supported only in the
9490code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
9491is with simple expressions, i.e., the expressions that have cost
9492less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
9493hoisting of simple expressions.  The default value is 10.
9494
9495@item gcse-unrestricted-cost
9496Cost, roughly measured as the cost of a single typical machine
9497instruction, at which GCSE optimizations do not constrain
9498the distance an expression can travel.  This is currently
9499supported only in the code hoisting pass.  The lesser the cost,
9500the more aggressive code hoisting is.  Specifying 0
9501allows all expressions to travel unrestricted distances.
9502The default value is 3.
9503
9504@item max-hoist-depth
9505The depth of search in the dominator tree for expressions to hoist.
9506This is used to avoid quadratic behavior in hoisting algorithm.
9507The value of 0 does not limit on the search, but may slow down compilation
9508of huge functions.  The default value is 30.
9509
9510@item max-tail-merge-comparisons
9511The maximum amount of similar bbs to compare a bb with.  This is used to
9512avoid quadratic behavior in tree tail merging.  The default value is 10.
9513
9514@item max-tail-merge-iterations
9515The maximum amount of iterations of the pass over the function.  This is used to
9516limit compilation time in tree tail merging.  The default value is 2.
9517
9518@item max-unrolled-insns
9519The maximum number of instructions that a loop may have to be unrolled.
9520If a loop is unrolled, this parameter also determines how many times
9521the loop code is unrolled.
9522
9523@item max-average-unrolled-insns
9524The maximum number of instructions biased by probabilities of their execution
9525that a loop may have to be unrolled.  If a loop is unrolled,
9526this parameter also determines how many times the loop code is unrolled.
9527
9528@item max-unroll-times
9529The maximum number of unrollings of a single loop.
9530
9531@item max-peeled-insns
9532The maximum number of instructions that a loop may have to be peeled.
9533If a loop is peeled, this parameter also determines how many times
9534the loop code is peeled.
9535
9536@item max-peel-times
9537The maximum number of peelings of a single loop.
9538
9539@item max-peel-branches
9540The maximum number of branches on the hot path through the peeled sequence.
9541
9542@item max-completely-peeled-insns
9543The maximum number of insns of a completely peeled loop.
9544
9545@item max-completely-peel-times
9546The maximum number of iterations of a loop to be suitable for complete peeling.
9547
9548@item max-completely-peel-loop-nest-depth
9549The maximum depth of a loop nest suitable for complete peeling.
9550
9551@item max-unswitch-insns
9552The maximum number of insns of an unswitched loop.
9553
9554@item max-unswitch-level
9555The maximum number of branches unswitched in a single loop.
9556
9557@item lim-expensive
9558The minimum cost of an expensive expression in the loop invariant motion.
9559
9560@item iv-consider-all-candidates-bound
9561Bound on number of candidates for induction variables, below which
9562all candidates are considered for each use in induction variable
9563optimizations.  If there are more candidates than this,
9564only the most relevant ones are considered to avoid quadratic time complexity.
9565
9566@item iv-max-considered-uses
9567The induction variable optimizations give up on loops that contain more
9568induction variable uses.
9569
9570@item iv-always-prune-cand-set-bound
9571If the number of candidates in the set is smaller than this value,
9572always try to remove unnecessary ivs from the set
9573when adding a new one.
9574
9575@item scev-max-expr-size
9576Bound on size of expressions used in the scalar evolutions analyzer.
9577Large expressions slow the analyzer.
9578
9579@item scev-max-expr-complexity
9580Bound on the complexity of the expressions in the scalar evolutions analyzer.
9581Complex expressions slow the analyzer.
9582
9583@item omega-max-vars
9584The maximum number of variables in an Omega constraint system.
9585The default value is 128.
9586
9587@item omega-max-geqs
9588The maximum number of inequalities in an Omega constraint system.
9589The default value is 256.
9590
9591@item omega-max-eqs
9592The maximum number of equalities in an Omega constraint system.
9593The default value is 128.
9594
9595@item omega-max-wild-cards
9596The maximum number of wildcard variables that the Omega solver is
9597able to insert.  The default value is 18.
9598
9599@item omega-hash-table-size
9600The size of the hash table in the Omega solver.  The default value is
9601550.
9602
9603@item omega-max-keys
9604The maximal number of keys used by the Omega solver.  The default
9605value is 500.
9606
9607@item omega-eliminate-redundant-constraints
9608When set to 1, use expensive methods to eliminate all redundant
9609constraints.  The default value is 0.
9610
9611@item vect-max-version-for-alignment-checks
9612The maximum number of run-time checks that can be performed when
9613doing loop versioning for alignment in the vectorizer.
9614
9615@item vect-max-version-for-alias-checks
9616The maximum number of run-time checks that can be performed when
9617doing loop versioning for alias in the vectorizer.
9618
9619@item vect-max-peeling-for-alignment
9620The maximum number of loop peels to enhance access alignment
9621for vectorizer. Value -1 means 'no limit'.
9622
9623@item max-iterations-to-track
9624The maximum number of iterations of a loop the brute-force algorithm
9625for analysis of the number of iterations of the loop tries to evaluate.
9626
9627@item hot-bb-count-ws-permille
9628A basic block profile count is considered hot if it contributes to
9629the given permillage (i.e. 0...1000) of the entire profiled execution.
9630
9631@item hot-bb-frequency-fraction
9632Select fraction of the entry block frequency of executions of basic block in
9633function given basic block needs to have to be considered hot.
9634
9635@item max-predicted-iterations
9636The maximum number of loop iterations we predict statically.  This is useful
9637in cases where a function contains a single loop with known bound and
9638another loop with unknown bound.
9639The known number of iterations is predicted correctly, while
9640the unknown number of iterations average to roughly 10.  This means that the
9641loop without bounds appears artificially cold relative to the other one.
9642
9643@item builtin-expect-probability
9644Control the probability of the expression having the specified value. This
9645parameter takes a percentage (i.e. 0 ... 100) as input.
9646The default probability of 90 is obtained empirically.
9647
9648@item align-threshold
9649
9650Select fraction of the maximal frequency of executions of a basic block in
9651a function to align the basic block.
9652
9653@item align-loop-iterations
9654
9655A loop expected to iterate at least the selected number of iterations is
9656aligned.
9657
9658@item tracer-dynamic-coverage
9659@itemx tracer-dynamic-coverage-feedback
9660
9661This value is used to limit superblock formation once the given percentage of
9662executed instructions is covered.  This limits unnecessary code size
9663expansion.
9664
9665The @option{tracer-dynamic-coverage-feedback} is used only when profile
9666feedback is available.  The real profiles (as opposed to statically estimated
9667ones) are much less balanced allowing the threshold to be larger value.
9668
9669@item tracer-max-code-growth
9670Stop tail duplication once code growth has reached given percentage.  This is
9671a rather artificial limit, as most of the duplicates are eliminated later in
9672cross jumping, so it may be set to much higher values than is the desired code
9673growth.
9674
9675@item tracer-min-branch-ratio
9676
9677Stop reverse growth when the reverse probability of best edge is less than this
9678threshold (in percent).
9679
9680@item tracer-min-branch-ratio
9681@itemx tracer-min-branch-ratio-feedback
9682
9683Stop forward growth if the best edge has probability lower than this
9684threshold.
9685
9686Similarly to @option{tracer-dynamic-coverage} two values are present, one for
9687compilation for profile feedback and one for compilation without.  The value
9688for compilation with profile feedback needs to be more conservative (higher) in
9689order to make tracer effective.
9690
9691@item max-cse-path-length
9692
9693The maximum number of basic blocks on path that CSE considers.
9694The default is 10.
9695
9696@item max-cse-insns
9697The maximum number of instructions CSE processes before flushing.
9698The default is 1000.
9699
9700@item ggc-min-expand
9701
9702GCC uses a garbage collector to manage its own memory allocation.  This
9703parameter specifies the minimum percentage by which the garbage
9704collector's heap should be allowed to expand between collections.
9705Tuning this may improve compilation speed; it has no effect on code
9706generation.
9707
9708The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
9709RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
9710the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
9711GCC is not able to calculate RAM on a particular platform, the lower
9712bound of 30% is used.  Setting this parameter and
9713@option{ggc-min-heapsize} to zero causes a full collection to occur at
9714every opportunity.  This is extremely slow, but can be useful for
9715debugging.
9716
9717@item ggc-min-heapsize
9718
9719Minimum size of the garbage collector's heap before it begins bothering
9720to collect garbage.  The first collection occurs after the heap expands
9721by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
9722tuning this may improve compilation speed, and has no effect on code
9723generation.
9724
9725The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
9726tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
9727with a lower bound of 4096 (four megabytes) and an upper bound of
9728131072 (128 megabytes).  If GCC is not able to calculate RAM on a
9729particular platform, the lower bound is used.  Setting this parameter
9730very large effectively disables garbage collection.  Setting this
9731parameter and @option{ggc-min-expand} to zero causes a full collection
9732to occur at every opportunity.
9733
9734@item max-reload-search-insns
9735The maximum number of instruction reload should look backward for equivalent
9736register.  Increasing values mean more aggressive optimization, making the
9737compilation time increase with probably slightly better performance.
9738The default value is 100.
9739
9740@item max-cselib-memory-locations
9741The maximum number of memory locations cselib should take into account.
9742Increasing values mean more aggressive optimization, making the compilation time
9743increase with probably slightly better performance.  The default value is 500.
9744
9745@item reorder-blocks-duplicate
9746@itemx reorder-blocks-duplicate-feedback
9747
9748Used by the basic block reordering pass to decide whether to use unconditional
9749branch or duplicate the code on its destination.  Code is duplicated when its
9750estimated size is smaller than this value multiplied by the estimated size of
9751unconditional jump in the hot spots of the program.
9752
9753The @option{reorder-block-duplicate-feedback} is used only when profile
9754feedback is available.  It may be set to higher values than
9755@option{reorder-block-duplicate} since information about the hot spots is more
9756accurate.
9757
9758@item max-sched-ready-insns
9759The maximum number of instructions ready to be issued the scheduler should
9760consider at any given time during the first scheduling pass.  Increasing
9761values mean more thorough searches, making the compilation time increase
9762with probably little benefit.  The default value is 100.
9763
9764@item max-sched-region-blocks
9765The maximum number of blocks in a region to be considered for
9766interblock scheduling.  The default value is 10.
9767
9768@item max-pipeline-region-blocks
9769The maximum number of blocks in a region to be considered for
9770pipelining in the selective scheduler.  The default value is 15.
9771
9772@item max-sched-region-insns
9773The maximum number of insns in a region to be considered for
9774interblock scheduling.  The default value is 100.
9775
9776@item max-pipeline-region-insns
9777The maximum number of insns in a region to be considered for
9778pipelining in the selective scheduler.  The default value is 200.
9779
9780@item min-spec-prob
9781The minimum probability (in percents) of reaching a source block
9782for interblock speculative scheduling.  The default value is 40.
9783
9784@item max-sched-extend-regions-iters
9785The maximum number of iterations through CFG to extend regions.
9786A value of 0 (the default) disables region extensions.
9787
9788@item max-sched-insn-conflict-delay
9789The maximum conflict delay for an insn to be considered for speculative motion.
9790The default value is 3.
9791
9792@item sched-spec-prob-cutoff
9793The minimal probability of speculation success (in percents), so that
9794speculative insns are scheduled.
9795The default value is 40.
9796
9797@item sched-spec-state-edge-prob-cutoff
9798The minimum probability an edge must have for the scheduler to save its
9799state across it.
9800The default value is 10.
9801
9802@item sched-mem-true-dep-cost
9803Minimal distance (in CPU cycles) between store and load targeting same
9804memory locations.  The default value is 1.
9805
9806@item selsched-max-lookahead
9807The maximum size of the lookahead window of selective scheduling.  It is a
9808depth of search for available instructions.
9809The default value is 50.
9810
9811@item selsched-max-sched-times
9812The maximum number of times that an instruction is scheduled during
9813selective scheduling.  This is the limit on the number of iterations
9814through which the instruction may be pipelined.  The default value is 2.
9815
9816@item selsched-max-insns-to-rename
9817The maximum number of best instructions in the ready list that are considered
9818for renaming in the selective scheduler.  The default value is 2.
9819
9820@item sms-min-sc
9821The minimum value of stage count that swing modulo scheduler
9822generates.  The default value is 2.
9823
9824@item max-last-value-rtl
9825The maximum size measured as number of RTLs that can be recorded in an expression
9826in combiner for a pseudo register as last known value of that register.  The default
9827is 10000.
9828
9829@item integer-share-limit
9830Small integer constants can use a shared data structure, reducing the
9831compiler's memory usage and increasing its speed.  This sets the maximum
9832value of a shared integer constant.  The default value is 256.
9833
9834@item ssp-buffer-size
9835The minimum size of buffers (i.e.@: arrays) that receive stack smashing
9836protection when @option{-fstack-protection} is used.
9837
9838@item min-size-for-stack-sharing
9839The minimum size of variables taking part in stack slot sharing when not
9840optimizing. The default value is 32.
9841
9842@item max-jump-thread-duplication-stmts
9843Maximum number of statements allowed in a block that needs to be
9844duplicated when threading jumps.
9845
9846@item max-fields-for-field-sensitive
9847Maximum number of fields in a structure treated in
9848a field sensitive manner during pointer analysis.  The default is zero
9849for @option{-O0} and @option{-O1},
9850and 100 for @option{-Os}, @option{-O2}, and @option{-O3}.
9851
9852@item prefetch-latency
9853Estimate on average number of instructions that are executed before
9854prefetch finishes.  The distance prefetched ahead is proportional
9855to this constant.  Increasing this number may also lead to less
9856streams being prefetched (see @option{simultaneous-prefetches}).
9857
9858@item simultaneous-prefetches
9859Maximum number of prefetches that can run at the same time.
9860
9861@item l1-cache-line-size
9862The size of cache line in L1 cache, in bytes.
9863
9864@item l1-cache-size
9865The size of L1 cache, in kilobytes.
9866
9867@item l2-cache-size
9868The size of L2 cache, in kilobytes.
9869
9870@item min-insn-to-prefetch-ratio
9871The minimum ratio between the number of instructions and the
9872number of prefetches to enable prefetching in a loop.
9873
9874@item prefetch-min-insn-to-mem-ratio
9875The minimum ratio between the number of instructions and the
9876number of memory references to enable prefetching in a loop.
9877
9878@item use-canonical-types
9879Whether the compiler should use the ``canonical'' type system.  By
9880default, this should always be 1, which uses a more efficient internal
9881mechanism for comparing types in C++ and Objective-C++.  However, if
9882bugs in the canonical type system are causing compilation failures,
9883set this value to 0 to disable canonical types.
9884
9885@item switch-conversion-max-branch-ratio
9886Switch initialization conversion refuses to create arrays that are
9887bigger than @option{switch-conversion-max-branch-ratio} times the number of
9888branches in the switch.
9889
9890@item max-partial-antic-length
9891Maximum length of the partial antic set computed during the tree
9892partial redundancy elimination optimization (@option{-ftree-pre}) when
9893optimizing at @option{-O3} and above.  For some sorts of source code
9894the enhanced partial redundancy elimination optimization can run away,
9895consuming all of the memory available on the host machine.  This
9896parameter sets a limit on the length of the sets that are computed,
9897which prevents the runaway behavior.  Setting a value of 0 for
9898this parameter allows an unlimited set length.
9899
9900@item sccvn-max-scc-size
9901Maximum size of a strongly connected component (SCC) during SCCVN
9902processing.  If this limit is hit, SCCVN processing for the whole
9903function is not done and optimizations depending on it are
9904disabled.  The default maximum SCC size is 10000.
9905
9906@item sccvn-max-alias-queries-per-access
9907Maximum number of alias-oracle queries we perform when looking for
9908redundancies for loads and stores.  If this limit is hit the search
9909is aborted and the load or store is not considered redundant.  The
9910number of queries is algorithmically limited to the number of
9911stores on all paths from the load to the function entry.
9912The default maxmimum number of queries is 1000.
9913
9914@item ira-max-loops-num
9915IRA uses regional register allocation by default.  If a function
9916contains more loops than the number given by this parameter, only at most
9917the given number of the most frequently-executed loops form regions
9918for regional register allocation.  The default value of the
9919parameter is 100.
9920
9921@item ira-max-conflict-table-size
9922Although IRA uses a sophisticated algorithm to compress the conflict
9923table, the table can still require excessive amounts of memory for
9924huge functions.  If the conflict table for a function could be more
9925than the size in MB given by this parameter, the register allocator
9926instead uses a faster, simpler, and lower-quality
9927algorithm that does not require building a pseudo-register conflict table.
9928The default value of the parameter is 2000.
9929
9930@item ira-loop-reserved-regs
9931IRA can be used to evaluate more accurate register pressure in loops
9932for decisions to move loop invariants (see @option{-O3}).  The number
9933of available registers reserved for some other purposes is given
9934by this parameter.  The default value of the parameter is 2, which is
9935the minimal number of registers needed by typical instructions.
9936This value is the best found from numerous experiments.
9937
9938@item loop-invariant-max-bbs-in-loop
9939Loop invariant motion can be very expensive, both in compilation time and
9940in amount of needed compile-time memory, with very large loops.  Loops
9941with more basic blocks than this parameter won't have loop invariant
9942motion optimization performed on them.  The default value of the
9943parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.
9944
9945@item loop-max-datarefs-for-datadeps
9946Building data dapendencies is expensive for very large loops.  This
9947parameter limits the number of data references in loops that are
9948considered for data dependence analysis.  These large loops are no
9949handled by the optimizations using loop data dependencies.
9950The default value is 1000.
9951
9952@item max-vartrack-size
9953Sets a maximum number of hash table slots to use during variable
9954tracking dataflow analysis of any function.  If this limit is exceeded
9955with variable tracking at assignments enabled, analysis for that
9956function is retried without it, after removing all debug insns from
9957the function.  If the limit is exceeded even without debug insns, var
9958tracking analysis is completely disabled for the function.  Setting
9959the parameter to zero makes it unlimited.
9960
9961@item max-vartrack-expr-depth
9962Sets a maximum number of recursion levels when attempting to map
9963variable names or debug temporaries to value expressions.  This trades
9964compilation time for more complete debug information.  If this is set too
9965low, value expressions that are available and could be represented in
9966debug information may end up not being used; setting this higher may
9967enable the compiler to find more complex debug expressions, but compile
9968time and memory use may grow.  The default is 12.
9969
9970@item min-nondebug-insn-uid
9971Use uids starting at this parameter for nondebug insns.  The range below
9972the parameter is reserved exclusively for debug insns created by
9973@option{-fvar-tracking-assignments}, but debug insns may get
9974(non-overlapping) uids above it if the reserved range is exhausted.
9975
9976@item ipa-sra-ptr-growth-factor
9977IPA-SRA replaces a pointer to an aggregate with one or more new
9978parameters only when their cumulative size is less or equal to
9979@option{ipa-sra-ptr-growth-factor} times the size of the original
9980pointer parameter.
9981
9982@item tm-max-aggregate-size
9983When making copies of thread-local variables in a transaction, this
9984parameter specifies the size in bytes after which variables are
9985saved with the logging functions as opposed to save/restore code
9986sequence pairs.  This option only applies when using
9987@option{-fgnu-tm}.
9988
9989@item graphite-max-nb-scop-params
9990To avoid exponential effects in the Graphite loop transforms, the
9991number of parameters in a Static Control Part (SCoP) is bounded.  The
9992default value is 10 parameters.  A variable whose value is unknown at
9993compilation time and defined outside a SCoP is a parameter of the SCoP.
9994
9995@item graphite-max-bbs-per-function
9996To avoid exponential effects in the detection of SCoPs, the size of
9997the functions analyzed by Graphite is bounded.  The default value is
9998100 basic blocks.
9999
10000@item loop-block-tile-size
10001Loop blocking or strip mining transforms, enabled with
10002@option{-floop-block} or @option{-floop-strip-mine}, strip mine each
10003loop in the loop nest by a given number of iterations.  The strip
10004length can be changed using the @option{loop-block-tile-size}
10005parameter.  The default value is 51 iterations.
10006
10007@item ipa-cp-value-list-size
10008IPA-CP attempts to track all possible values and types passed to a function's
10009parameter in order to propagate them and perform devirtualization.
10010@option{ipa-cp-value-list-size} is the maximum number of values and types it
10011stores per one formal parameter of a function.
10012
10013@item ipa-cp-eval-threshold
10014IPA-CP calculates its own score of cloning profitability heuristics
10015and performs those cloning opportunities with scores that exceed
10016@option{ipa-cp-eval-threshold}.
10017
10018@item ipa-max-agg-items
10019IPA-CP is also capable to propagate a number of scalar values passed
10020in an aggregate. @option{ipa-max-agg-items} controls the maximum
10021number of such values per one parameter.
10022
10023@item ipa-cp-loop-hint-bonus
10024When IPA-CP determines that a cloning candidate would make the number
10025of iterations of a loop known, it adds a bonus of
10026@option{ipa-cp-loop-hint-bonus} bonus to the profitability score of
10027the candidate.
10028
10029@item ipa-cp-array-index-hint-bonus
10030When IPA-CP determines that a cloning candidate would make the index of
10031an array access known, it adds a bonus of
10032@option{ipa-cp-array-index-hint-bonus} bonus to the profitability
10033score of the candidate.
10034
10035@item lto-partitions
10036Specify desired number of partitions produced during WHOPR compilation.
10037The number of partitions should exceed the number of CPUs used for compilation.
10038The default value is 32.
10039
10040@item lto-minpartition
10041Size of minimal partition for WHOPR (in estimated instructions).
10042This prevents expenses of splitting very small programs into too many
10043partitions.
10044
10045@item cxx-max-namespaces-for-diagnostic-help
10046The maximum number of namespaces to consult for suggestions when C++
10047name lookup fails for an identifier.  The default is 1000.
10048
10049@item sink-frequency-threshold
10050The maximum relative execution frequency (in percents) of the target block
10051relative to a statement's original block to allow statement sinking of a
10052statement.  Larger numbers result in more aggressive statement sinking.
10053The default value is 75.  A small positive adjustment is applied for
10054statements with memory operands as those are even more profitable so sink.
10055
10056@item max-stores-to-sink
10057The maximum number of conditional stores paires that can be sunk.  Set to 0
10058if either vectorization (@option{-ftree-vectorize}) or if-conversion
10059(@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
10060
10061@item allow-load-data-races
10062Allow optimizers to introduce new data races on loads.
10063Set to 1 to allow, otherwise to 0.  This option is enabled by default
10064unless implicitly set by the @option{-fmemory-model=} option.
10065
10066@item allow-store-data-races
10067Allow optimizers to introduce new data races on stores.
10068Set to 1 to allow, otherwise to 0.  This option is enabled by default
10069unless implicitly set by the @option{-fmemory-model=} option.
10070
10071@item allow-packed-load-data-races
10072Allow optimizers to introduce new data races on packed data loads.
10073Set to 1 to allow, otherwise to 0.  This option is enabled by default
10074unless implicitly set by the @option{-fmemory-model=} option.
10075
10076@item allow-packed-store-data-races
10077Allow optimizers to introduce new data races on packed data stores.
10078Set to 1 to allow, otherwise to 0.  This option is enabled by default
10079unless implicitly set by the @option{-fmemory-model=} option.
10080
10081@item case-values-threshold
10082The smallest number of different values for which it is best to use a
10083jump-table instead of a tree of conditional branches.  If the value is
100840, use the default for the machine.  The default is 0.
10085
10086@item tree-reassoc-width
10087Set the maximum number of instructions executed in parallel in
10088reassociated tree. This parameter overrides target dependent
10089heuristics used by default if has non zero value.
10090
10091@item sched-pressure-algorithm
10092Choose between the two available implementations of
10093@option{-fsched-pressure}.  Algorithm 1 is the original implementation
10094and is the more likely to prevent instructions from being reordered.
10095Algorithm 2 was designed to be a compromise between the relatively
10096conservative approach taken by algorithm 1 and the rather aggressive
10097approach taken by the default scheduler.  It relies more heavily on
10098having a regular register file and accurate register pressure classes.
10099See @file{haifa-sched.c} in the GCC sources for more details.
10100
10101The default choice depends on the target.
10102
10103@item max-slsr-cand-scan
10104Set the maximum number of existing candidates that will be considered when
10105seeking a basis for a new straight-line strength reduction candidate.
10106
10107@item asan-globals
10108Enable buffer overflow detection for global objects.  This kind
10109of protection is enabled by default if you are using
10110@option{-fsanitize=address} option.
10111To disable global objects protection use @option{--param asan-globals=0}.
10112
10113@item asan-stack
10114Enable buffer overflow detection for stack objects.  This kind of
10115protection is enabled by default when using@option{-fsanitize=address}.
10116To disable stack protection use @option{--param asan-stack=0} option.
10117
10118@item asan-instrument-reads
10119Enable buffer overflow detection for memory reads.  This kind of
10120protection is enabled by default when using @option{-fsanitize=address}.
10121To disable memory reads protection use
10122@option{--param asan-instrument-reads=0}.
10123
10124@item asan-instrument-writes
10125Enable buffer overflow detection for memory writes.  This kind of
10126protection is enabled by default when using @option{-fsanitize=address}.
10127To disable memory writes protection use
10128@option{--param asan-instrument-writes=0} option.
10129
10130@item asan-memintrin
10131Enable detection for built-in functions.  This kind of protection
10132is enabled by default when using @option{-fsanitize=address}.
10133To disable built-in functions protection use
10134@option{--param asan-memintrin=0}.
10135
10136@item asan-use-after-return
10137Enable detection of use-after-return.  This kind of protection
10138is enabled by default when using @option{-fsanitize=address} option.
10139To disable use-after-return detection use
10140@option{--param asan-use-after-return=0}.
10141
10142@item asan-instrumentation-with-call-threshold
10143If number of memory accesses in function being instrumented
10144is greater or equal to this number, use callbacks instead of inline checks.
10145E.g. to disable inline code use
10146@option{--param asan-instrumentation-with-call-threshold=0}.
10147
10148@end table
10149@end table
10150
10151@node Preprocessor Options
10152@section Options Controlling the Preprocessor
10153@cindex preprocessor options
10154@cindex options, preprocessor
10155
10156These options control the C preprocessor, which is run on each C source
10157file before actual compilation.
10158
10159If you use the @option{-E} option, nothing is done except preprocessing.
10160Some of these options make sense only together with @option{-E} because
10161they cause the preprocessor output to be unsuitable for actual
10162compilation.
10163
10164@table @gcctabopt
10165@item -Wp,@var{option}
10166@opindex Wp
10167You can use @option{-Wp,@var{option}} to bypass the compiler driver
10168and pass @var{option} directly through to the preprocessor.  If
10169@var{option} contains commas, it is split into multiple options at the
10170commas.  However, many options are modified, translated or interpreted
10171by the compiler driver before being passed to the preprocessor, and
10172@option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
10173interface is undocumented and subject to change, so whenever possible
10174you should avoid using @option{-Wp} and let the driver handle the
10175options instead.
10176
10177@item -Xpreprocessor @var{option}
10178@opindex Xpreprocessor
10179Pass @var{option} as an option to the preprocessor.  You can use this to
10180supply system-specific preprocessor options that GCC does not
10181recognize.
10182
10183If you want to pass an option that takes an argument, you must use
10184@option{-Xpreprocessor} twice, once for the option and once for the argument.
10185
10186@item -no-integrated-cpp
10187@opindex no-integrated-cpp
10188Perform preprocessing as a separate pass before compilation.
10189By default, GCC performs preprocessing as an integrated part of
10190input tokenization and parsing.
10191If this option is provided, the appropriate language front end
10192(@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
10193and Objective-C, respectively) is instead invoked twice,
10194once for preprocessing only and once for actual compilation
10195of the preprocessed input.
10196This option may be useful in conjunction with the @option{-B} or
10197@option{-wrapper} options to specify an alternate preprocessor or
10198perform additional processing of the program source between
10199normal preprocessing and compilation.
10200@end table
10201
10202@include cppopts.texi
10203
10204@node Assembler Options
10205@section Passing Options to the Assembler
10206
10207@c prevent bad page break with this line
10208You can pass options to the assembler.
10209
10210@table @gcctabopt
10211@item -Wa,@var{option}
10212@opindex Wa
10213Pass @var{option} as an option to the assembler.  If @var{option}
10214contains commas, it is split into multiple options at the commas.
10215
10216@item -Xassembler @var{option}
10217@opindex Xassembler
10218Pass @var{option} as an option to the assembler.  You can use this to
10219supply system-specific assembler options that GCC does not
10220recognize.
10221
10222If you want to pass an option that takes an argument, you must use
10223@option{-Xassembler} twice, once for the option and once for the argument.
10224
10225@end table
10226
10227@node Link Options
10228@section Options for Linking
10229@cindex link options
10230@cindex options, linking
10231
10232These options come into play when the compiler links object files into
10233an executable output file.  They are meaningless if the compiler is
10234not doing a link step.
10235
10236@table @gcctabopt
10237@cindex file names
10238@item @var{object-file-name}
10239A file name that does not end in a special recognized suffix is
10240considered to name an object file or library.  (Object files are
10241distinguished from libraries by the linker according to the file
10242contents.)  If linking is done, these object files are used as input
10243to the linker.
10244
10245@item -c
10246@itemx -S
10247@itemx -E
10248@opindex c
10249@opindex S
10250@opindex E
10251If any of these options is used, then the linker is not run, and
10252object file names should not be used as arguments.  @xref{Overall
10253Options}.
10254
10255@cindex Libraries
10256@item -l@var{library}
10257@itemx -l @var{library}
10258@opindex l
10259Search the library named @var{library} when linking.  (The second
10260alternative with the library as a separate argument is only for
10261POSIX compliance and is not recommended.)
10262
10263It makes a difference where in the command you write this option; the
10264linker searches and processes libraries and object files in the order they
10265are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
10266after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
10267to functions in @samp{z}, those functions may not be loaded.
10268
10269The linker searches a standard list of directories for the library,
10270which is actually a file named @file{lib@var{library}.a}.  The linker
10271then uses this file as if it had been specified precisely by name.
10272
10273The directories searched include several standard system directories
10274plus any that you specify with @option{-L}.
10275
10276Normally the files found this way are library files---archive files
10277whose members are object files.  The linker handles an archive file by
10278scanning through it for members which define symbols that have so far
10279been referenced but not defined.  But if the file that is found is an
10280ordinary object file, it is linked in the usual fashion.  The only
10281difference between using an @option{-l} option and specifying a file name
10282is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
10283and searches several directories.
10284
10285@item -lobjc
10286@opindex lobjc
10287You need this special case of the @option{-l} option in order to
10288link an Objective-C or Objective-C++ program.
10289
10290@item -nostartfiles
10291@opindex nostartfiles
10292Do not use the standard system startup files when linking.
10293The standard system libraries are used normally, unless @option{-nostdlib}
10294or @option{-nodefaultlibs} is used.
10295
10296@item -nodefaultlibs
10297@opindex nodefaultlibs
10298Do not use the standard system libraries when linking.
10299Only the libraries you specify are passed to the linker, and options
10300specifying linkage of the system libraries, such as @code{-static-libgcc}
10301or @code{-shared-libgcc}, are ignored.
10302The standard startup files are used normally, unless @option{-nostartfiles}
10303is used.
10304
10305The compiler may generate calls to @code{memcmp},
10306@code{memset}, @code{memcpy} and @code{memmove}.
10307These entries are usually resolved by entries in
10308libc.  These entry points should be supplied through some other
10309mechanism when this option is specified.
10310
10311@item -nostdlib
10312@opindex nostdlib
10313Do not use the standard system startup files or libraries when linking.
10314No startup files and only the libraries you specify are passed to
10315the linker, and options specifying linkage of the system libraries, such as
10316@code{-static-libgcc} or @code{-shared-libgcc}, are ignored.
10317
10318The compiler may generate calls to @code{memcmp}, @code{memset},
10319@code{memcpy} and @code{memmove}.
10320These entries are usually resolved by entries in
10321libc.  These entry points should be supplied through some other
10322mechanism when this option is specified.
10323
10324@cindex @option{-lgcc}, use with @option{-nostdlib}
10325@cindex @option{-nostdlib} and unresolved references
10326@cindex unresolved references and @option{-nostdlib}
10327@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
10328@cindex @option{-nodefaultlibs} and unresolved references
10329@cindex unresolved references and @option{-nodefaultlibs}
10330One of the standard libraries bypassed by @option{-nostdlib} and
10331@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
10332which GCC uses to overcome shortcomings of particular machines, or special
10333needs for some languages.
10334(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
10335Collection (GCC) Internals},
10336for more discussion of @file{libgcc.a}.)
10337In most cases, you need @file{libgcc.a} even when you want to avoid
10338other standard libraries.  In other words, when you specify @option{-nostdlib}
10339or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
10340This ensures that you have no unresolved references to internal GCC
10341library subroutines.
10342(An example of such an internal subroutine is @samp{__main}, used to ensure C++
10343constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
10344GNU Compiler Collection (GCC) Internals}.)
10345
10346@item -pie
10347@opindex pie
10348Produce a position independent executable on targets that support it.
10349For predictable results, you must also specify the same set of options
10350used for compilation (@option{-fpie}, @option{-fPIE},
10351or model suboptions) when you specify this linker option.
10352
10353@item -rdynamic
10354@opindex rdynamic
10355Pass the flag @option{-export-dynamic} to the ELF linker, on targets
10356that support it. This instructs the linker to add all symbols, not
10357only used ones, to the dynamic symbol table. This option is needed
10358for some uses of @code{dlopen} or to allow obtaining backtraces
10359from within a program.
10360
10361@item -s
10362@opindex s
10363Remove all symbol table and relocation information from the executable.
10364
10365@item -static
10366@opindex static
10367On systems that support dynamic linking, this prevents linking with the shared
10368libraries.  On other systems, this option has no effect.
10369
10370@item -shared
10371@opindex shared
10372Produce a shared object which can then be linked with other objects to
10373form an executable.  Not all systems support this option.  For predictable
10374results, you must also specify the same set of options used for compilation
10375(@option{-fpic}, @option{-fPIC}, or model suboptions) when
10376you specify this linker option.@footnote{On some systems, @samp{gcc -shared}
10377needs to build supplementary stub code for constructors to work.  On
10378multi-libbed systems, @samp{gcc -shared} must select the correct support
10379libraries to link against.  Failing to supply the correct flags may lead
10380to subtle defects.  Supplying them in cases where they are not necessary
10381is innocuous.}
10382
10383@item -shared-libgcc
10384@itemx -static-libgcc
10385@opindex shared-libgcc
10386@opindex static-libgcc
10387On systems that provide @file{libgcc} as a shared library, these options
10388force the use of either the shared or static version, respectively.
10389If no shared version of @file{libgcc} was built when the compiler was
10390configured, these options have no effect.
10391
10392There are several situations in which an application should use the
10393shared @file{libgcc} instead of the static version.  The most common
10394of these is when the application wishes to throw and catch exceptions
10395across different shared libraries.  In that case, each of the libraries
10396as well as the application itself should use the shared @file{libgcc}.
10397
10398Therefore, the G++ and GCJ drivers automatically add
10399@option{-shared-libgcc} whenever you build a shared library or a main
10400executable, because C++ and Java programs typically use exceptions, so
10401this is the right thing to do.
10402
10403If, instead, you use the GCC driver to create shared libraries, you may
10404find that they are not always linked with the shared @file{libgcc}.
10405If GCC finds, at its configuration time, that you have a non-GNU linker
10406or a GNU linker that does not support option @option{--eh-frame-hdr},
10407it links the shared version of @file{libgcc} into shared libraries
10408by default.  Otherwise, it takes advantage of the linker and optimizes
10409away the linking with the shared version of @file{libgcc}, linking with
10410the static version of libgcc by default.  This allows exceptions to
10411propagate through such shared libraries, without incurring relocation
10412costs at library load time.
10413
10414However, if a library or main executable is supposed to throw or catch
10415exceptions, you must link it using the G++ or GCJ driver, as appropriate
10416for the languages used in the program, or using the option
10417@option{-shared-libgcc}, such that it is linked with the shared
10418@file{libgcc}.
10419
10420@item -static-libasan
10421@opindex static-libasan
10422When the @option{-fsanitize=address} option is used to link a program,
10423the GCC driver automatically links against @option{libasan}.  If
10424@file{libasan} is available as a shared library, and the @option{-static}
10425option is not used, then this links against the shared version of
10426@file{libasan}.  The @option{-static-libasan} option directs the GCC
10427driver to link @file{libasan} statically, without necessarily linking
10428other libraries statically.
10429
10430@item -static-libtsan
10431@opindex static-libtsan
10432When the @option{-fsanitize=thread} option is used to link a program,
10433the GCC driver automatically links against @option{libtsan}.  If
10434@file{libtsan} is available as a shared library, and the @option{-static}
10435option is not used, then this links against the shared version of
10436@file{libtsan}.  The @option{-static-libtsan} option directs the GCC
10437driver to link @file{libtsan} statically, without necessarily linking
10438other libraries statically.
10439
10440@item -static-liblsan
10441@opindex static-liblsan
10442When the @option{-fsanitize=leak} option is used to link a program,
10443the GCC driver automatically links against @option{liblsan}.  If
10444@file{liblsan} is available as a shared library, and the @option{-static}
10445option is not used, then this links against the shared version of
10446@file{liblsan}.  The @option{-static-liblsan} option directs the GCC
10447driver to link @file{liblsan} statically, without necessarily linking
10448other libraries statically.
10449
10450@item -static-libubsan
10451@opindex static-libubsan
10452When the @option{-fsanitize=undefined} option is used to link a program,
10453the GCC driver automatically links against @option{libubsan}.  If
10454@file{libubsan} is available as a shared library, and the @option{-static}
10455option is not used, then this links against the shared version of
10456@file{libubsan}.  The @option{-static-libubsan} option directs the GCC
10457driver to link @file{libubsan} statically, without necessarily linking
10458other libraries statically.
10459
10460@item -static-libstdc++
10461@opindex static-libstdc++
10462When the @command{g++} program is used to link a C++ program, it
10463normally automatically links against @option{libstdc++}.  If
10464@file{libstdc++} is available as a shared library, and the
10465@option{-static} option is not used, then this links against the
10466shared version of @file{libstdc++}.  That is normally fine.  However, it
10467is sometimes useful to freeze the version of @file{libstdc++} used by
10468the program without going all the way to a fully static link.  The
10469@option{-static-libstdc++} option directs the @command{g++} driver to
10470link @file{libstdc++} statically, without necessarily linking other
10471libraries statically.
10472
10473@item -symbolic
10474@opindex symbolic
10475Bind references to global symbols when building a shared object.  Warn
10476about any unresolved references (unless overridden by the link editor
10477option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
10478this option.
10479
10480@item -T @var{script}
10481@opindex T
10482@cindex linker script
10483Use @var{script} as the linker script.  This option is supported by most
10484systems using the GNU linker.  On some targets, such as bare-board
10485targets without an operating system, the @option{-T} option may be required
10486when linking to avoid references to undefined symbols.
10487
10488@item -Xlinker @var{option}
10489@opindex Xlinker
10490Pass @var{option} as an option to the linker.  You can use this to
10491supply system-specific linker options that GCC does not recognize.
10492
10493If you want to pass an option that takes a separate argument, you must use
10494@option{-Xlinker} twice, once for the option and once for the argument.
10495For example, to pass @option{-assert definitions}, you must write
10496@option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
10497@option{-Xlinker "-assert definitions"}, because this passes the entire
10498string as a single argument, which is not what the linker expects.
10499
10500When using the GNU linker, it is usually more convenient to pass
10501arguments to linker options using the @option{@var{option}=@var{value}}
10502syntax than as separate arguments.  For example, you can specify
10503@option{-Xlinker -Map=output.map} rather than
10504@option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
10505this syntax for command-line options.
10506
10507@item -Wl,@var{option}
10508@opindex Wl
10509Pass @var{option} as an option to the linker.  If @var{option} contains
10510commas, it is split into multiple options at the commas.  You can use this
10511syntax to pass an argument to the option.
10512For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
10513linker.  When using the GNU linker, you can also get the same effect with
10514@option{-Wl,-Map=output.map}.
10515
10516@item -u @var{symbol}
10517@opindex u
10518Pretend the symbol @var{symbol} is undefined, to force linking of
10519library modules to define it.  You can use @option{-u} multiple times with
10520different symbols to force loading of additional library modules.
10521@end table
10522
10523@node Directory Options
10524@section Options for Directory Search
10525@cindex directory options
10526@cindex options, directory search
10527@cindex search path
10528
10529These options specify directories to search for header files, for
10530libraries and for parts of the compiler:
10531
10532@table @gcctabopt
10533@item -I@var{dir}
10534@opindex I
10535Add the directory @var{dir} to the head of the list of directories to be
10536searched for header files.  This can be used to override a system header
10537file, substituting your own version, since these directories are
10538searched before the system header file directories.  However, you should
10539not use this option to add directories that contain vendor-supplied
10540system header files (use @option{-isystem} for that).  If you use more than
10541one @option{-I} option, the directories are scanned in left-to-right
10542order; the standard system directories come after.
10543
10544If a standard system include directory, or a directory specified with
10545@option{-isystem}, is also specified with @option{-I}, the @option{-I}
10546option is ignored.  The directory is still searched but as a
10547system directory at its normal position in the system include chain.
10548This is to ensure that GCC's procedure to fix buggy system headers and
10549the ordering for the @code{include_next} directive are not inadvertently changed.
10550If you really need to change the search order for system directories,
10551use the @option{-nostdinc} and/or @option{-isystem} options.
10552
10553@item -iplugindir=@var{dir}
10554@opindex iplugindir=
10555Set the directory to search for plugins that are passed
10556by @option{-fplugin=@var{name}} instead of
10557@option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
10558to be used by the user, but only passed by the driver.
10559
10560@item -iquote@var{dir}
10561@opindex iquote
10562Add the directory @var{dir} to the head of the list of directories to
10563be searched for header files only for the case of @samp{#include
10564"@var{file}"}; they are not searched for @samp{#include <@var{file}>},
10565otherwise just like @option{-I}.
10566
10567@item -L@var{dir}
10568@opindex L
10569Add directory @var{dir} to the list of directories to be searched
10570for @option{-l}.
10571
10572@item -B@var{prefix}
10573@opindex B
10574This option specifies where to find the executables, libraries,
10575include files, and data files of the compiler itself.
10576
10577The compiler driver program runs one or more of the subprograms
10578@command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
10579@var{prefix} as a prefix for each program it tries to run, both with and
10580without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
10581
10582For each subprogram to be run, the compiler driver first tries the
10583@option{-B} prefix, if any.  If that name is not found, or if @option{-B}
10584is not specified, the driver tries two standard prefixes,
10585@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
10586those results in a file name that is found, the unmodified program
10587name is searched for using the directories specified in your
10588@env{PATH} environment variable.
10589
10590The compiler checks to see if the path provided by the @option{-B}
10591refers to a directory, and if necessary it adds a directory
10592separator character at the end of the path.
10593
10594@option{-B} prefixes that effectively specify directory names also apply
10595to libraries in the linker, because the compiler translates these
10596options into @option{-L} options for the linker.  They also apply to
10597include files in the preprocessor, because the compiler translates these
10598options into @option{-isystem} options for the preprocessor.  In this case,
10599the compiler appends @samp{include} to the prefix.
10600
10601The runtime support file @file{libgcc.a} can also be searched for using
10602the @option{-B} prefix, if needed.  If it is not found there, the two
10603standard prefixes above are tried, and that is all.  The file is left
10604out of the link if it is not found by those means.
10605
10606Another way to specify a prefix much like the @option{-B} prefix is to use
10607the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
10608Variables}.
10609
10610As a special kludge, if the path provided by @option{-B} is
10611@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
106129, then it is replaced by @file{[dir/]include}.  This is to help
10613with boot-strapping the compiler.
10614
10615@item -specs=@var{file}
10616@opindex specs
10617Process @var{file} after the compiler reads in the standard @file{specs}
10618file, in order to override the defaults which the @command{gcc} driver
10619program uses when determining what switches to pass to @command{cc1},
10620@command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
10621@option{-specs=@var{file}} can be specified on the command line, and they
10622are processed in order, from left to right.
10623
10624@item --sysroot=@var{dir}
10625@opindex sysroot
10626Use @var{dir} as the logical root directory for headers and libraries.
10627For example, if the compiler normally searches for headers in
10628@file{/usr/include} and libraries in @file{/usr/lib}, it instead
10629searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
10630
10631If you use both this option and the @option{-isysroot} option, then
10632the @option{--sysroot} option applies to libraries, but the
10633@option{-isysroot} option applies to header files.
10634
10635The GNU linker (beginning with version 2.16) has the necessary support
10636for this option.  If your linker does not support this option, the
10637header file aspect of @option{--sysroot} still works, but the
10638library aspect does not.
10639
10640@item --no-sysroot-suffix
10641@opindex no-sysroot-suffix
10642For some targets, a suffix is added to the root directory specified
10643with @option{--sysroot}, depending on the other options used, so that
10644headers may for example be found in
10645@file{@var{dir}/@var{suffix}/usr/include} instead of
10646@file{@var{dir}/usr/include}.  This option disables the addition of
10647such a suffix.
10648
10649@item -I-
10650@opindex I-
10651This option has been deprecated.  Please use @option{-iquote} instead for
10652@option{-I} directories before the @option{-I-} and remove the @option{-I-}.
10653Any directories you specify with @option{-I} options before the @option{-I-}
10654option are searched only for the case of @samp{#include "@var{file}"};
10655they are not searched for @samp{#include <@var{file}>}.
10656
10657If additional directories are specified with @option{-I} options after
10658the @option{-I-}, these directories are searched for all @samp{#include}
10659directives.  (Ordinarily @emph{all} @option{-I} directories are used
10660this way.)
10661
10662In addition, the @option{-I-} option inhibits the use of the current
10663directory (where the current input file came from) as the first search
10664directory for @samp{#include "@var{file}"}.  There is no way to
10665override this effect of @option{-I-}.  With @option{-I.} you can specify
10666searching the directory that is current when the compiler is
10667invoked.  That is not exactly the same as what the preprocessor does
10668by default, but it is often satisfactory.
10669
10670@option{-I-} does not inhibit the use of the standard system directories
10671for header files.  Thus, @option{-I-} and @option{-nostdinc} are
10672independent.
10673@end table
10674
10675@c man end
10676
10677@node Spec Files
10678@section Specifying subprocesses and the switches to pass to them
10679@cindex Spec Files
10680
10681@command{gcc} is a driver program.  It performs its job by invoking a
10682sequence of other programs to do the work of compiling, assembling and
10683linking.  GCC interprets its command-line parameters and uses these to
10684deduce which programs it should invoke, and which command-line options
10685it ought to place on their command lines.  This behavior is controlled
10686by @dfn{spec strings}.  In most cases there is one spec string for each
10687program that GCC can invoke, but a few programs have multiple spec
10688strings to control their behavior.  The spec strings built into GCC can
10689be overridden by using the @option{-specs=} command-line switch to specify
10690a spec file.
10691
10692@dfn{Spec files} are plaintext files that are used to construct spec
10693strings.  They consist of a sequence of directives separated by blank
10694lines.  The type of directive is determined by the first non-whitespace
10695character on the line, which can be one of the following:
10696
10697@table @code
10698@item %@var{command}
10699Issues a @var{command} to the spec file processor.  The commands that can
10700appear here are:
10701
10702@table @code
10703@item %include <@var{file}>
10704@cindex @code{%include}
10705Search for @var{file} and insert its text at the current point in the
10706specs file.
10707
10708@item %include_noerr <@var{file}>
10709@cindex @code{%include_noerr}
10710Just like @samp{%include}, but do not generate an error message if the include
10711file cannot be found.
10712
10713@item %rename @var{old_name} @var{new_name}
10714@cindex @code{%rename}
10715Rename the spec string @var{old_name} to @var{new_name}.
10716
10717@end table
10718
10719@item *[@var{spec_name}]:
10720This tells the compiler to create, override or delete the named spec
10721string.  All lines after this directive up to the next directive or
10722blank line are considered to be the text for the spec string.  If this
10723results in an empty string then the spec is deleted.  (Or, if the
10724spec did not exist, then nothing happens.)  Otherwise, if the spec
10725does not currently exist a new spec is created.  If the spec does
10726exist then its contents are overridden by the text of this
10727directive, unless the first character of that text is the @samp{+}
10728character, in which case the text is appended to the spec.
10729
10730@item [@var{suffix}]:
10731Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
10732and up to the next directive or blank line are considered to make up the
10733spec string for the indicated suffix.  When the compiler encounters an
10734input file with the named suffix, it processes the spec string in
10735order to work out how to compile that file.  For example:
10736
10737@smallexample
10738.ZZ:
10739z-compile -input %i
10740@end smallexample
10741
10742This says that any input file whose name ends in @samp{.ZZ} should be
10743passed to the program @samp{z-compile}, which should be invoked with the
10744command-line switch @option{-input} and with the result of performing the
10745@samp{%i} substitution.  (See below.)
10746
10747As an alternative to providing a spec string, the text following a
10748suffix directive can be one of the following:
10749
10750@table @code
10751@item @@@var{language}
10752This says that the suffix is an alias for a known @var{language}.  This is
10753similar to using the @option{-x} command-line switch to GCC to specify a
10754language explicitly.  For example:
10755
10756@smallexample
10757.ZZ:
10758@@c++
10759@end smallexample
10760
10761Says that .ZZ files are, in fact, C++ source files.
10762
10763@item #@var{name}
10764This causes an error messages saying:
10765
10766@smallexample
10767@var{name} compiler not installed on this system.
10768@end smallexample
10769@end table
10770
10771GCC already has an extensive list of suffixes built into it.
10772This directive adds an entry to the end of the list of suffixes, but
10773since the list is searched from the end backwards, it is effectively
10774possible to override earlier entries using this technique.
10775
10776@end table
10777
10778GCC has the following spec strings built into it.  Spec files can
10779override these strings or create their own.  Note that individual
10780targets can also add their own spec strings to this list.
10781
10782@smallexample
10783asm          Options to pass to the assembler
10784asm_final    Options to pass to the assembler post-processor
10785cpp          Options to pass to the C preprocessor
10786cc1          Options to pass to the C compiler
10787cc1plus      Options to pass to the C++ compiler
10788endfile      Object files to include at the end of the link
10789link         Options to pass to the linker
10790lib          Libraries to include on the command line to the linker
10791libgcc       Decides which GCC support library to pass to the linker
10792linker       Sets the name of the linker
10793predefines   Defines to be passed to the C preprocessor
10794signed_char  Defines to pass to CPP to say whether @code{char} is signed
10795             by default
10796startfile    Object files to include at the start of the link
10797@end smallexample
10798
10799Here is a small example of a spec file:
10800
10801@smallexample
10802%rename lib                 old_lib
10803
10804*lib:
10805--start-group -lgcc -lc -leval1 --end-group %(old_lib)
10806@end smallexample
10807
10808This example renames the spec called @samp{lib} to @samp{old_lib} and
10809then overrides the previous definition of @samp{lib} with a new one.
10810The new definition adds in some extra command-line options before
10811including the text of the old definition.
10812
10813@dfn{Spec strings} are a list of command-line options to be passed to their
10814corresponding program.  In addition, the spec strings can contain
10815@samp{%}-prefixed sequences to substitute variable text or to
10816conditionally insert text into the command line.  Using these constructs
10817it is possible to generate quite complex command lines.
10818
10819Here is a table of all defined @samp{%}-sequences for spec
10820strings.  Note that spaces are not generated automatically around the
10821results of expanding these sequences.  Therefore you can concatenate them
10822together or combine them with constant text in a single argument.
10823
10824@table @code
10825@item %%
10826Substitute one @samp{%} into the program name or argument.
10827
10828@item %i
10829Substitute the name of the input file being processed.
10830
10831@item %b
10832Substitute the basename of the input file being processed.
10833This is the substring up to (and not including) the last period
10834and not including the directory.
10835
10836@item %B
10837This is the same as @samp{%b}, but include the file suffix (text after
10838the last period).
10839
10840@item %d
10841Marks the argument containing or following the @samp{%d} as a
10842temporary file name, so that that file is deleted if GCC exits
10843successfully.  Unlike @samp{%g}, this contributes no text to the
10844argument.
10845
10846@item %g@var{suffix}
10847Substitute a file name that has suffix @var{suffix} and is chosen
10848once per compilation, and mark the argument in the same way as
10849@samp{%d}.  To reduce exposure to denial-of-service attacks, the file
10850name is now chosen in a way that is hard to predict even when previously
10851chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
10852might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
10853the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
10854treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
10855was simply substituted with a file name chosen once per compilation,
10856without regard to any appended suffix (which was therefore treated
10857just like ordinary text), making such attacks more likely to succeed.
10858
10859@item %u@var{suffix}
10860Like @samp{%g}, but generates a new temporary file name
10861each time it appears instead of once per compilation.
10862
10863@item %U@var{suffix}
10864Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
10865new one if there is no such last file name.  In the absence of any
10866@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
10867the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
10868involves the generation of two distinct file names, one
10869for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
10870simply substituted with a file name chosen for the previous @samp{%u},
10871without regard to any appended suffix.
10872
10873@item %j@var{suffix}
10874Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
10875writable, and if @option{-save-temps} is not used;
10876otherwise, substitute the name
10877of a temporary file, just like @samp{%u}.  This temporary file is not
10878meant for communication between processes, but rather as a junk
10879disposal mechanism.
10880
10881@item %|@var{suffix}
10882@itemx %m@var{suffix}
10883Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
10884@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
10885all.  These are the two most common ways to instruct a program that it
10886should read from standard input or write to standard output.  If you
10887need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
10888construct: see for example @file{f/lang-specs.h}.
10889
10890@item %.@var{SUFFIX}
10891Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
10892when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
10893terminated by the next space or %.
10894
10895@item %w
10896Marks the argument containing or following the @samp{%w} as the
10897designated output file of this compilation.  This puts the argument
10898into the sequence of arguments that @samp{%o} substitutes.
10899
10900@item %o
10901Substitutes the names of all the output files, with spaces
10902automatically placed around them.  You should write spaces
10903around the @samp{%o} as well or the results are undefined.
10904@samp{%o} is for use in the specs for running the linker.
10905Input files whose names have no recognized suffix are not compiled
10906at all, but they are included among the output files, so they are
10907linked.
10908
10909@item %O
10910Substitutes the suffix for object files.  Note that this is
10911handled specially when it immediately follows @samp{%g, %u, or %U},
10912because of the need for those to form complete file names.  The
10913handling is such that @samp{%O} is treated exactly as if it had already
10914been substituted, except that @samp{%g, %u, and %U} do not currently
10915support additional @var{suffix} characters following @samp{%O} as they do
10916following, for example, @samp{.o}.
10917
10918@item %p
10919Substitutes the standard macro predefinitions for the
10920current target machine.  Use this when running @code{cpp}.
10921
10922@item %P
10923Like @samp{%p}, but puts @samp{__} before and after the name of each
10924predefined macro, except for macros that start with @samp{__} or with
10925@samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
10926C@.
10927
10928@item %I
10929Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
10930@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
10931@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
10932and @option{-imultilib} as necessary.
10933
10934@item %s
10935Current argument is the name of a library or startup file of some sort.
10936Search for that file in a standard list of directories and substitute
10937the full name found.  The current working directory is included in the
10938list of directories scanned.
10939
10940@item %T
10941Current argument is the name of a linker script.  Search for that file
10942in the current list of directories to scan for libraries. If the file
10943is located insert a @option{--script} option into the command line
10944followed by the full path name found.  If the file is not found then
10945generate an error message.  Note: the current working directory is not
10946searched.
10947
10948@item %e@var{str}
10949Print @var{str} as an error message.  @var{str} is terminated by a newline.
10950Use this when inconsistent options are detected.
10951
10952@item %(@var{name})
10953Substitute the contents of spec string @var{name} at this point.
10954
10955@item %x@{@var{option}@}
10956Accumulate an option for @samp{%X}.
10957
10958@item %X
10959Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
10960spec string.
10961
10962@item %Y
10963Output the accumulated assembler options specified by @option{-Wa}.
10964
10965@item %Z
10966Output the accumulated preprocessor options specified by @option{-Wp}.
10967
10968@item %a
10969Process the @code{asm} spec.  This is used to compute the
10970switches to be passed to the assembler.
10971
10972@item %A
10973Process the @code{asm_final} spec.  This is a spec string for
10974passing switches to an assembler post-processor, if such a program is
10975needed.
10976
10977@item %l
10978Process the @code{link} spec.  This is the spec for computing the
10979command line passed to the linker.  Typically it makes use of the
10980@samp{%L %G %S %D and %E} sequences.
10981
10982@item %D
10983Dump out a @option{-L} option for each directory that GCC believes might
10984contain startup files.  If the target supports multilibs then the
10985current multilib directory is prepended to each of these paths.
10986
10987@item %L
10988Process the @code{lib} spec.  This is a spec string for deciding which
10989libraries are included on the command line to the linker.
10990
10991@item %G
10992Process the @code{libgcc} spec.  This is a spec string for deciding
10993which GCC support library is included on the command line to the linker.
10994
10995@item %S
10996Process the @code{startfile} spec.  This is a spec for deciding which
10997object files are the first ones passed to the linker.  Typically
10998this might be a file named @file{crt0.o}.
10999
11000@item %E
11001Process the @code{endfile} spec.  This is a spec string that specifies
11002the last object files that are passed to the linker.
11003
11004@item %C
11005Process the @code{cpp} spec.  This is used to construct the arguments
11006to be passed to the C preprocessor.
11007
11008@item %1
11009Process the @code{cc1} spec.  This is used to construct the options to be
11010passed to the actual C compiler (@samp{cc1}).
11011
11012@item %2
11013Process the @code{cc1plus} spec.  This is used to construct the options to be
11014passed to the actual C++ compiler (@samp{cc1plus}).
11015
11016@item %*
11017Substitute the variable part of a matched option.  See below.
11018Note that each comma in the substituted string is replaced by
11019a single space.
11020
11021@item %<@code{S}
11022Remove all occurrences of @code{-S} from the command line.  Note---this
11023command is position dependent.  @samp{%} commands in the spec string
11024before this one see @code{-S}, @samp{%} commands in the spec string
11025after this one do not.
11026
11027@item %:@var{function}(@var{args})
11028Call the named function @var{function}, passing it @var{args}.
11029@var{args} is first processed as a nested spec string, then split
11030into an argument vector in the usual fashion.  The function returns
11031a string which is processed as if it had appeared literally as part
11032of the current spec.
11033
11034The following built-in spec functions are provided:
11035
11036@table @code
11037@item @code{getenv}
11038The @code{getenv} spec function takes two arguments: an environment
11039variable name and a string.  If the environment variable is not
11040defined, a fatal error is issued.  Otherwise, the return value is the
11041value of the environment variable concatenated with the string.  For
11042example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
11043
11044@smallexample
11045%:getenv(TOPDIR /include)
11046@end smallexample
11047
11048expands to @file{/path/to/top/include}.
11049
11050@item @code{if-exists}
11051The @code{if-exists} spec function takes one argument, an absolute
11052pathname to a file.  If the file exists, @code{if-exists} returns the
11053pathname.  Here is a small example of its usage:
11054
11055@smallexample
11056*startfile:
11057crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
11058@end smallexample
11059
11060@item @code{if-exists-else}
11061The @code{if-exists-else} spec function is similar to the @code{if-exists}
11062spec function, except that it takes two arguments.  The first argument is
11063an absolute pathname to a file.  If the file exists, @code{if-exists-else}
11064returns the pathname.  If it does not exist, it returns the second argument.
11065This way, @code{if-exists-else} can be used to select one file or another,
11066based on the existence of the first.  Here is a small example of its usage:
11067
11068@smallexample
11069*startfile:
11070crt0%O%s %:if-exists(crti%O%s) \
11071%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
11072@end smallexample
11073
11074@item @code{replace-outfile}
11075The @code{replace-outfile} spec function takes two arguments.  It looks for the
11076first argument in the outfiles array and replaces it with the second argument.  Here
11077is a small example of its usage:
11078
11079@smallexample
11080%@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
11081@end smallexample
11082
11083@item @code{remove-outfile}
11084The @code{remove-outfile} spec function takes one argument.  It looks for the
11085first argument in the outfiles array and removes it.  Here is a small example
11086its usage:
11087
11088@smallexample
11089%:remove-outfile(-lm)
11090@end smallexample
11091
11092@item @code{pass-through-libs}
11093The @code{pass-through-libs} spec function takes any number of arguments.  It
11094finds any @option{-l} options and any non-options ending in @file{.a} (which it
11095assumes are the names of linker input library archive files) and returns a
11096result containing all the found arguments each prepended by
11097@option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
11098intended to be passed to the LTO linker plugin.
11099
11100@smallexample
11101%:pass-through-libs(%G %L %G)
11102@end smallexample
11103
11104@item @code{print-asm-header}
11105The @code{print-asm-header} function takes no arguments and simply
11106prints a banner like:
11107
11108@smallexample
11109Assembler options
11110=================
11111
11112Use "-Wa,OPTION" to pass "OPTION" to the assembler.
11113@end smallexample
11114
11115It is used to separate compiler options from assembler options
11116in the @option{--target-help} output.
11117@end table
11118
11119@item %@{@code{S}@}
11120Substitutes the @code{-S} switch, if that switch is given to GCC@.
11121If that switch is not specified, this substitutes nothing.  Note that
11122the leading dash is omitted when specifying this option, and it is
11123automatically inserted if the substitution is performed.  Thus the spec
11124string @samp{%@{foo@}} matches the command-line option @option{-foo}
11125and outputs the command-line option @option{-foo}.
11126
11127@item %W@{@code{S}@}
11128Like %@{@code{S}@} but mark last argument supplied within as a file to be
11129deleted on failure.
11130
11131@item %@{@code{S}*@}
11132Substitutes all the switches specified to GCC whose names start
11133with @code{-S}, but which also take an argument.  This is used for
11134switches like @option{-o}, @option{-D}, @option{-I}, etc.
11135GCC considers @option{-o foo} as being
11136one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
11137text, including the space.  Thus two arguments are generated.
11138
11139@item %@{@code{S}*&@code{T}*@}
11140Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
11141(the order of @code{S} and @code{T} in the spec is not significant).
11142There can be any number of ampersand-separated variables; for each the
11143wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
11144
11145@item %@{@code{S}:@code{X}@}
11146Substitutes @code{X}, if the @option{-S} switch is given to GCC@.
11147
11148@item %@{!@code{S}:@code{X}@}
11149Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.
11150
11151@item %@{@code{S}*:@code{X}@}
11152Substitutes @code{X} if one or more switches whose names start with
11153@code{-S} are specified to GCC@.  Normally @code{X} is substituted only
11154once, no matter how many such switches appeared.  However, if @code{%*}
11155appears somewhere in @code{X}, then @code{X} is substituted once
11156for each matching switch, with the @code{%*} replaced by the part of
11157that switch matching the @code{*}.
11158
11159If @code{%*} appears as the last part of a spec sequence then a space
11160will be added after the end of the last substitution.  If there is more
11161text in the sequence however then a space will not be generated.  This
11162allows the @code{%*} substitution to be used as part of a larger
11163string.  For example, a spec string like this:
11164
11165@smallexample
11166%@{mcu=*:--script=%*/memory.ld@}
11167@end smallexample
11168
11169when matching an option like @code{-mcu=newchip} will produce:
11170
11171@smallexample
11172--script=newchip/memory.ld
11173@end smallexample
11174
11175@item %@{.@code{S}:@code{X}@}
11176Substitutes @code{X}, if processing a file with suffix @code{S}.
11177
11178@item %@{!.@code{S}:@code{X}@}
11179Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
11180
11181@item %@{,@code{S}:@code{X}@}
11182Substitutes @code{X}, if processing a file for language @code{S}.
11183
11184@item %@{!,@code{S}:@code{X}@}
11185Substitutes @code{X}, if not processing a file for language @code{S}.
11186
11187@item %@{@code{S}|@code{P}:@code{X}@}
11188Substitutes @code{X} if either @code{-S} or @code{-P} is given to
11189GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
11190@code{*} sequences as well, although they have a stronger binding than
11191the @samp{|}.  If @code{%*} appears in @code{X}, all of the
11192alternatives must be starred, and only the first matching alternative
11193is substituted.
11194
11195For example, a spec string like this:
11196
11197@smallexample
11198%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
11199@end smallexample
11200
11201@noindent
11202outputs the following command-line options from the following input
11203command-line options:
11204
11205@smallexample
11206fred.c        -foo -baz
11207jim.d         -bar -boggle
11208-d fred.c     -foo -baz -boggle
11209-d jim.d      -bar -baz -boggle
11210@end smallexample
11211
11212@item %@{S:X; T:Y; :D@}
11213
11214If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
11215given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
11216be as many clauses as you need.  This may be combined with @code{.},
11217@code{,}, @code{!}, @code{|}, and @code{*} as needed.
11218
11219
11220@end table
11221
11222The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
11223construct may contain other nested @samp{%} constructs or spaces, or
11224even newlines.  They are processed as usual, as described above.
11225Trailing white space in @code{X} is ignored.  White space may also
11226appear anywhere on the left side of the colon in these constructs,
11227except between @code{.} or @code{*} and the corresponding word.
11228
11229The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
11230handled specifically in these constructs.  If another value of
11231@option{-O} or the negated form of a @option{-f}, @option{-m}, or
11232@option{-W} switch is found later in the command line, the earlier
11233switch value is ignored, except with @{@code{S}*@} where @code{S} is
11234just one letter, which passes all matching options.
11235
11236The character @samp{|} at the beginning of the predicate text is used to
11237indicate that a command should be piped to the following command, but
11238only if @option{-pipe} is specified.
11239
11240It is built into GCC which switches take arguments and which do not.
11241(You might think it would be useful to generalize this to allow each
11242compiler's spec to say which switches take arguments.  But this cannot
11243be done in a consistent fashion.  GCC cannot even decide which input
11244files have been specified without knowing which switches take arguments,
11245and it must know which input files to compile in order to tell which
11246compilers to run).
11247
11248GCC also knows implicitly that arguments starting in @option{-l} are to be
11249treated as compiler output files, and passed to the linker in their
11250proper position among the other output files.
11251
11252@c man begin OPTIONS
11253
11254@node Target Options
11255@section Specifying Target Machine and Compiler Version
11256@cindex target options
11257@cindex cross compiling
11258@cindex specifying machine version
11259@cindex specifying compiler version and target machine
11260@cindex compiler version, specifying
11261@cindex target machine, specifying
11262
11263The usual way to run GCC is to run the executable called @command{gcc}, or
11264@command{@var{machine}-gcc} when cross-compiling, or
11265@command{@var{machine}-gcc-@var{version}} to run a version other than the
11266one that was installed last.
11267
11268@node Submodel Options
11269@section Hardware Models and Configurations
11270@cindex submodel options
11271@cindex specifying hardware config
11272@cindex hardware models and configurations, specifying
11273@cindex machine dependent options
11274
11275Each target machine types can have its own
11276special options, starting with @samp{-m}, to choose among various
11277hardware models or configurations---for example, 68010 vs 68020,
11278floating coprocessor or none.  A single installed version of the
11279compiler can compile for any model or configuration, according to the
11280options specified.
11281
11282Some configurations of the compiler also support additional special
11283options, usually for compatibility with other compilers on the same
11284platform.
11285
11286@c This list is ordered alphanumerically by subsection name.
11287@c It should be the same order and spelling as these options are listed
11288@c in Machine Dependent Options
11289
11290@menu
11291* AArch64 Options::
11292* Adapteva Epiphany Options::
11293* ARC Options::
11294* ARM Options::
11295* AVR Options::
11296* Blackfin Options::
11297* C6X Options::
11298* CRIS Options::
11299* CR16 Options::
11300* Darwin Options::
11301* DEC Alpha Options::
11302* FR30 Options::
11303* FRV Options::
11304* GNU/Linux Options::
11305* H8/300 Options::
11306* HPPA Options::
11307* i386 and x86-64 Options::
11308* i386 and x86-64 Windows Options::
11309* IA-64 Options::
11310* LM32 Options::
11311* M32C Options::
11312* M32R/D Options::
11313* M680x0 Options::
11314* MCore Options::
11315* MeP Options::
11316* MicroBlaze Options::
11317* MIPS Options::
11318* MMIX Options::
11319* MN10300 Options::
11320* Moxie Options::
11321* MSP430 Options::
11322* NDS32 Options::
11323* Nios II Options::
11324* PDP-11 Options::
11325* picoChip Options::
11326* PowerPC Options::
11327* RL78 Options::
11328* RS/6000 and PowerPC Options::
11329* RX Options::
11330* S/390 and zSeries Options::
11331* Score Options::
11332* SH Options::
11333* Solaris 2 Options::
11334* SPARC Options::
11335* SPU Options::
11336* System V Options::
11337* TILE-Gx Options::
11338* TILEPro Options::
11339* V850 Options::
11340* VAX Options::
11341* VMS Options::
11342* VxWorks Options::
11343* x86-64 Options::
11344* Xstormy16 Options::
11345* Xtensa Options::
11346* zSeries Options::
11347@end menu
11348
11349@node AArch64 Options
11350@subsection AArch64 Options
11351@cindex AArch64 Options
11352
11353These options are defined for AArch64 implementations:
11354
11355@table @gcctabopt
11356
11357@item -mabi=@var{name}
11358@opindex mabi
11359Generate code for the specified data model.  Permissible values
11360are @samp{ilp32} for SysV-like data model where int, long int and pointer
11361are 32-bit, and @samp{lp64} for SysV-like data model where int is 32-bit,
11362but long int and pointer are 64-bit.
11363
11364The default depends on the specific target configuration.  Note that
11365the LP64 and ILP32 ABIs are not link-compatible; you must compile your
11366entire program with the same ABI, and link with a compatible set of libraries.
11367
11368@item -mbig-endian
11369@opindex mbig-endian
11370Generate big-endian code.  This is the default when GCC is configured for an
11371@samp{aarch64_be-*-*} target.
11372
11373@item -mgeneral-regs-only
11374@opindex mgeneral-regs-only
11375Generate code which uses only the general registers.
11376
11377@item -mlittle-endian
11378@opindex mlittle-endian
11379Generate little-endian code.  This is the default when GCC is configured for an
11380@samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.
11381
11382@item -mcmodel=tiny
11383@opindex mcmodel=tiny
11384Generate code for the tiny code model.  The program and its statically defined
11385symbols must be within 1GB of each other.  Pointers are 64 bits.  Programs can
11386be statically or dynamically linked.  This model is not fully implemented and
11387mostly treated as @samp{small}.
11388
11389@item -mcmodel=small
11390@opindex mcmodel=small
11391Generate code for the small code model.  The program and its statically defined
11392symbols must be within 4GB of each other.  Pointers are 64 bits.  Programs can
11393be statically or dynamically linked.  This is the default code model.
11394
11395@item -mcmodel=large
11396@opindex mcmodel=large
11397Generate code for the large code model.  This makes no assumptions about
11398addresses and sizes of sections.  Pointers are 64 bits.  Programs can be
11399statically linked only.
11400
11401@item -mstrict-align
11402@opindex mstrict-align
11403Do not assume that unaligned memory references will be handled by the system.
11404
11405@item -momit-leaf-frame-pointer
11406@itemx -mno-omit-leaf-frame-pointer
11407@opindex momit-leaf-frame-pointer
11408@opindex mno-omit-leaf-frame-pointer
11409Omit or keep the frame pointer in leaf functions.  The former behaviour is the
11410default.
11411
11412@item -mtls-dialect=desc
11413@opindex mtls-dialect=desc
11414Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
11415of TLS variables.  This is the default.
11416
11417@item -mtls-dialect=traditional
11418@opindex mtls-dialect=traditional
11419Use traditional TLS as the thread-local storage mechanism for dynamic accesses
11420of TLS variables.
11421
11422@item -mfix-cortex-a53-835769
11423@itemx -mno-fix-cortex-a53-835769
11424@opindex -mfix-cortex-a53-835769
11425@opindex -mno-fix-cortex-a53-835769
11426Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
11427This will involve inserting a NOP instruction between memory instructions and
1142864-bit integer multiply-accumulate instructions.
11429
11430@item -march=@var{name}
11431@opindex march
11432Specify the name of the target architecture, optionally suffixed by one or
11433more feature modifiers.  This option has the form
11434@option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where the
11435only permissible value for @var{arch} is @samp{armv8-a}.  The permissible
11436values for @var{feature} are documented in the sub-section below.
11437
11438Where conflicting feature modifiers are specified, the right-most feature is
11439used.
11440
11441GCC uses this name to determine what kind of instructions it can emit when
11442generating assembly code.
11443
11444Where @option{-march} is specified without either of @option{-mtune}
11445or @option{-mcpu} also being specified, the code will be tuned to perform
11446well across a range of target processors implementing the target
11447architecture.
11448
11449@item -mtune=@var{name}
11450@opindex mtune
11451Specify the name of the target processor for which GCC should tune the
11452performance of the code.  Permissible values for this option are:
11453@samp{generic}, @samp{cortex-a53}, @samp{cortex-a57}.
11454
11455Additionally, this option can specify that GCC should tune the performance
11456of the code for a big.LITTLE system.  The only permissible value is
11457@samp{cortex-a57.cortex-a53}.
11458
11459Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
11460are specified, the code will be tuned to perform well across a range
11461of target processors.
11462
11463This option cannot be suffixed by feature modifiers.
11464
11465@item -mcpu=@var{name}
11466@opindex mcpu
11467Specify the name of the target processor, optionally suffixed by one or more
11468feature modifiers.  This option has the form
11469@option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where the
11470permissible values for @var{cpu} are the same as those available for
11471@option{-mtune}.
11472
11473The permissible values for @var{feature} are documented in the sub-section
11474below.
11475
11476Where conflicting feature modifiers are specified, the right-most feature is
11477used.
11478
11479GCC uses this name to determine what kind of instructions it can emit when
11480generating assembly code (as if by @option{-march}) and to determine
11481the target processor for which to tune for performance (as if
11482by @option{-mtune}).  Where this option is used in conjunction
11483with @option{-march} or @option{-mtune}, those options take precedence
11484over the appropriate part of this option.
11485@end table
11486
11487@subsubsection @option{-march} and @option{-mcpu} feature modifiers
11488@cindex @option{-march} feature modifiers
11489@cindex @option{-mcpu} feature modifiers
11490Feature modifiers used with @option{-march} and @option{-mcpu} can be one
11491the following:
11492
11493@table @samp
11494@item crc
11495Enable CRC extension.
11496@item crypto
11497Enable Crypto extension.  This implies Advanced SIMD is enabled.
11498@item fp
11499Enable floating-point instructions.
11500@item simd
11501Enable Advanced SIMD instructions.  This implies floating-point instructions
11502are enabled.  This is the default for all current possible values for options
11503@option{-march} and @option{-mcpu=}.
11504@end table
11505
11506@node Adapteva Epiphany Options
11507@subsection Adapteva Epiphany Options
11508
11509These @samp{-m} options are defined for Adapteva Epiphany:
11510
11511@table @gcctabopt
11512@item -mhalf-reg-file
11513@opindex mhalf-reg-file
11514Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
11515That allows code to run on hardware variants that lack these registers.
11516
11517@item -mprefer-short-insn-regs
11518@opindex mprefer-short-insn-regs
11519Preferrentially allocate registers that allow short instruction generation.
11520This can result in increased instruction count, so this may either reduce or
11521increase overall code size.
11522
11523@item -mbranch-cost=@var{num}
11524@opindex mbranch-cost
11525Set the cost of branches to roughly @var{num} ``simple'' instructions.
11526This cost is only a heuristic and is not guaranteed to produce
11527consistent results across releases.
11528
11529@item -mcmove
11530@opindex mcmove
11531Enable the generation of conditional moves.
11532
11533@item -mnops=@var{num}
11534@opindex mnops
11535Emit @var{num} NOPs before every other generated instruction.
11536
11537@item -mno-soft-cmpsf
11538@opindex mno-soft-cmpsf
11539For single-precision floating-point comparisons, emit an @code{fsub} instruction
11540and test the flags.  This is faster than a software comparison, but can
11541get incorrect results in the presence of NaNs, or when two different small
11542numbers are compared such that their difference is calculated as zero.
11543The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
11544software comparisons.
11545
11546@item -mstack-offset=@var{num}
11547@opindex mstack-offset
11548Set the offset between the top of the stack and the stack pointer.
11549E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
11550can be used by leaf functions without stack allocation.
11551Values other than @samp{8} or @samp{16} are untested and unlikely to work.
11552Note also that this option changes the ABI; compiling a program with a
11553different stack offset than the libraries have been compiled with
11554generally does not work.
11555This option can be useful if you want to evaluate if a different stack
11556offset would give you better code, but to actually use a different stack
11557offset to build working programs, it is recommended to configure the
11558toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.
11559
11560@item -mno-round-nearest
11561@opindex mno-round-nearest
11562Make the scheduler assume that the rounding mode has been set to
11563truncating.  The default is @option{-mround-nearest}.
11564
11565@item -mlong-calls
11566@opindex mlong-calls
11567If not otherwise specified by an attribute, assume all calls might be beyond
11568the offset range of the @code{b} / @code{bl} instructions, and therefore load the
11569function address into a register before performing a (otherwise direct) call.
11570This is the default.
11571
11572@item -mshort-calls
11573@opindex short-calls
11574If not otherwise specified by an attribute, assume all direct calls are
11575in the range of the @code{b} / @code{bl} instructions, so use these instructions
11576for direct calls.  The default is @option{-mlong-calls}.
11577
11578@item -msmall16
11579@opindex msmall16
11580Assume addresses can be loaded as 16-bit unsigned values.  This does not
11581apply to function addresses for which @option{-mlong-calls} semantics
11582are in effect.
11583
11584@item -mfp-mode=@var{mode}
11585@opindex mfp-mode
11586Set the prevailing mode of the floating-point unit.
11587This determines the floating-point mode that is provided and expected
11588at function call and return time.  Making this mode match the mode you
11589predominantly need at function start can make your programs smaller and
11590faster by avoiding unnecessary mode switches.
11591
11592@var{mode} can be set to one the following values:
11593
11594@table @samp
11595@item caller
11596Any mode at function entry is valid, and retained or restored when
11597the function returns, and when it calls other functions.
11598This mode is useful for compiling libraries or other compilation units
11599you might want to incorporate into different programs with different
11600prevailing FPU modes, and the convenience of being able to use a single
11601object file outweighs the size and speed overhead for any extra
11602mode switching that might be needed, compared with what would be needed
11603with a more specific choice of prevailing FPU mode.
11604
11605@item truncate
11606This is the mode used for floating-point calculations with
11607truncating (i.e.@: round towards zero) rounding mode.  That includes
11608conversion from floating point to integer.
11609
11610@item round-nearest
11611This is the mode used for floating-point calculations with
11612round-to-nearest-or-even rounding mode.
11613
11614@item int
11615This is the mode used to perform integer calculations in the FPU, e.g.@:
11616integer multiply, or integer multiply-and-accumulate.
11617@end table
11618
11619The default is @option{-mfp-mode=caller}
11620
11621@item -mnosplit-lohi
11622@itemx -mno-postinc
11623@itemx -mno-postmodify
11624@opindex mnosplit-lohi
11625@opindex mno-postinc
11626@opindex mno-postmodify
11627Code generation tweaks that disable, respectively, splitting of 32-bit
11628loads, generation of post-increment addresses, and generation of
11629post-modify addresses.  The defaults are @option{msplit-lohi},
11630@option{-mpost-inc}, and @option{-mpost-modify}.
11631
11632@item -mnovect-double
11633@opindex mno-vect-double
11634Change the preferred SIMD mode to SImode.  The default is
11635@option{-mvect-double}, which uses DImode as preferred SIMD mode.
11636
11637@item -max-vect-align=@var{num}
11638@opindex max-vect-align
11639The maximum alignment for SIMD vector mode types.
11640@var{num} may be 4 or 8.  The default is 8.
11641Note that this is an ABI change, even though many library function
11642interfaces are unaffected if they don't use SIMD vector modes
11643in places that affect size and/or alignment of relevant types.
11644
11645@item -msplit-vecmove-early
11646@opindex msplit-vecmove-early
11647Split vector moves into single word moves before reload.  In theory this
11648can give better register allocation, but so far the reverse seems to be
11649generally the case.
11650
11651@item -m1reg-@var{reg}
11652@opindex m1reg-
11653Specify a register to hold the constant @minus{}1, which makes loading small negative
11654constants and certain bitmasks faster.
11655Allowable values for @var{reg} are @samp{r43} and @samp{r63},
11656which specify use of that register as a fixed register,
11657and @samp{none}, which means that no register is used for this
11658purpose.  The default is @option{-m1reg-none}.
11659
11660@end table
11661
11662@node ARC Options
11663@subsection ARC Options
11664@cindex ARC options
11665
11666The following options control the architecture variant for which code
11667is being compiled:
11668
11669@c architecture variants
11670@table @gcctabopt
11671
11672@item -mbarrel-shifter
11673@opindex mbarrel-shifter
11674Generate instructions supported by barrel shifter.  This is the default
11675unless @samp{-mcpu=ARC601} is in effect.
11676
11677@item -mcpu=@var{cpu}
11678@opindex mcpu
11679Set architecture type, register usage, and instruction scheduling
11680parameters for @var{cpu}.  There are also shortcut alias options
11681available for backward compatibility and convenience.  Supported
11682values for @var{cpu} are
11683
11684@table @samp
11685@opindex mA6
11686@opindex mARC600
11687@item ARC600
11688Compile for ARC600.  Aliases: @option{-mA6}, @option{-mARC600}.
11689
11690@item ARC601
11691@opindex mARC601
11692Compile for ARC601.  Alias: @option{-mARC601}.
11693
11694@item ARC700
11695@opindex mA7
11696@opindex mARC700
11697Compile for ARC700.  Aliases: @option{-mA7}, @option{-mARC700}.
11698This is the default when configured with @samp{--with-cpu=arc700}@.
11699@end table
11700
11701@item -mdpfp
11702@opindex mdpfp
11703@itemx -mdpfp-compact
11704@opindex mdpfp-compact
11705FPX: Generate Double Precision FPX instructions, tuned for the compact
11706implementation.
11707
11708@item -mdpfp-fast
11709@opindex mdpfp-fast
11710FPX: Generate Double Precision FPX instructions, tuned for the fast
11711implementation.
11712
11713@item -mno-dpfp-lrsr
11714@opindex mno-dpfp-lrsr
11715Disable LR and SR instructions from using FPX extension aux registers.
11716
11717@item -mea
11718@opindex mea
11719Generate Extended arithmetic instructions.  Currently only
11720@code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
11721supported.  This is always enabled for @samp{-mcpu=ARC700}.
11722
11723@item -mno-mpy
11724@opindex mno-mpy
11725Do not generate mpy instructions for ARC700.
11726
11727@item -mmul32x16
11728@opindex mmul32x16
11729Generate 32x16 bit multiply and mac instructions.
11730
11731@item -mmul64
11732@opindex mmul64
11733Generate mul64 and mulu64 instructions.  Only valid for @samp{-mcpu=ARC600}.
11734
11735@item -mnorm
11736@opindex mnorm
11737Generate norm instruction.  This is the default if @samp{-mcpu=ARC700}
11738is in effect.
11739
11740@item -mspfp
11741@opindex mspfp
11742@itemx -mspfp-compact
11743@opindex mspfp-compact
11744FPX: Generate Single Precision FPX instructions, tuned for the compact
11745implementation.
11746
11747@item -mspfp-fast
11748@opindex mspfp-fast
11749FPX: Generate Single Precision FPX instructions, tuned for the fast
11750implementation.
11751
11752@item -msimd
11753@opindex msimd
11754Enable generation of ARC SIMD instructions via target-specific
11755builtins.  Only valid for @samp{-mcpu=ARC700}.
11756
11757@item -msoft-float
11758@opindex msoft-float
11759This option ignored; it is provided for compatibility purposes only.
11760Software floating point code is emitted by default, and this default
11761can overridden by FPX options; @samp{mspfp}, @samp{mspfp-compact}, or
11762@samp{mspfp-fast} for single precision, and @samp{mdpfp},
11763@samp{mdpfp-compact}, or @samp{mdpfp-fast} for double precision.
11764
11765@item -mswap
11766@opindex mswap
11767Generate swap instructions.
11768
11769@end table
11770
11771The following options are passed through to the assembler, and also
11772define preprocessor macro symbols.
11773
11774@c Flags used by the assembler, but for which we define preprocessor
11775@c macro symbols as well.
11776@table @gcctabopt
11777@item -mdsp-packa
11778@opindex mdsp-packa
11779Passed down to the assembler to enable the DSP Pack A extensions.
11780Also sets the preprocessor symbol @code{__Xdsp_packa}.
11781
11782@item -mdvbf
11783@opindex mdvbf
11784Passed down to the assembler to enable the dual viterbi butterfly
11785extension.  Also sets the preprocessor symbol @code{__Xdvbf}.
11786
11787@c ARC700 4.10 extension instruction
11788@item -mlock
11789@opindex mlock
11790Passed down to the assembler to enable the Locked Load/Store
11791Conditional extension.  Also sets the preprocessor symbol
11792@code{__Xlock}.
11793
11794@item -mmac-d16
11795@opindex mmac-d16
11796Passed down to the assembler.  Also sets the preprocessor symbol
11797@code{__Xxmac_d16}.
11798
11799@item -mmac-24
11800@opindex mmac-24
11801Passed down to the assembler.  Also sets the preprocessor symbol
11802@code{__Xxmac_24}.
11803
11804@c ARC700 4.10 extension instruction
11805@item -mrtsc
11806@opindex mrtsc
11807Passed down to the assembler to enable the 64-bit Time-Stamp Counter
11808extension instruction.  Also sets the preprocessor symbol
11809@code{__Xrtsc}.
11810
11811@c ARC700 4.10 extension instruction
11812@item -mswape
11813@opindex mswape
11814Passed down to the assembler to enable the swap byte ordering
11815extension instruction.  Also sets the preprocessor symbol
11816@code{__Xswape}.
11817
11818@item -mtelephony
11819@opindex mtelephony
11820Passed down to the assembler to enable dual and single operand
11821instructions for telephony.  Also sets the preprocessor symbol
11822@code{__Xtelephony}.
11823
11824@item -mxy
11825@opindex mxy
11826Passed down to the assembler to enable the XY Memory extension.  Also
11827sets the preprocessor symbol @code{__Xxy}.
11828
11829@end table
11830
11831The following options control how the assembly code is annotated:
11832
11833@c Assembly annotation options
11834@table @gcctabopt
11835@item -misize
11836@opindex misize
11837Annotate assembler instructions with estimated addresses.
11838
11839@item -mannotate-align
11840@opindex mannotate-align
11841Explain what alignment considerations lead to the decision to make an
11842instruction short or long.
11843
11844@end table
11845
11846The following options are passed through to the linker:
11847
11848@c options passed through to the linker
11849@table @gcctabopt
11850@item -marclinux
11851@opindex marclinux
11852Passed through to the linker, to specify use of the @code{arclinux} emulation.
11853This option is enabled by default in tool chains built for
11854@w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
11855when profiling is not requested.
11856
11857@item -marclinux_prof
11858@opindex marclinux_prof
11859Passed through to the linker, to specify use of the
11860@code{arclinux_prof} emulation.  This option is enabled by default in
11861tool chains built for @w{@code{arc-linux-uclibc}} and
11862@w{@code{arceb-linux-uclibc}} targets when profiling is requested.
11863
11864@end table
11865
11866The following options control the semantics of generated code:
11867
11868@c semantically relevant code generation options
11869@table @gcctabopt
11870@item -mepilogue-cfi
11871@opindex mepilogue-cfi
11872Enable generation of call frame information for epilogues.
11873
11874@item -mno-epilogue-cfi
11875@opindex mno-epilogue-cfi
11876Disable generation of call frame information for epilogues.
11877
11878@item -mlong-calls
11879@opindex mlong-calls
11880Generate call insns as register indirect calls, thus providing access
11881to the full 32-bit address range.
11882
11883@item -mmedium-calls
11884@opindex mmedium-calls
11885Don't use less than 25 bit addressing range for calls, which is the
11886offset available for an unconditional branch-and-link
11887instruction.  Conditional execution of function calls is suppressed, to
11888allow use of the 25-bit range, rather than the 21-bit range with
11889conditional branch-and-link.  This is the default for tool chains built
11890for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets.
11891
11892@item -mno-sdata
11893@opindex mno-sdata
11894Do not generate sdata references.  This is the default for tool chains
11895built for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}}
11896targets.
11897
11898@item -mucb-mcount
11899@opindex mucb-mcount
11900Instrument with mcount calls as used in UCB code.  I.e. do the
11901counting in the callee, not the caller.  By default ARC instrumentation
11902counts in the caller.
11903
11904@item -mvolatile-cache
11905@opindex mvolatile-cache
11906Use ordinarily cached memory accesses for volatile references.  This is the
11907default.
11908
11909@item -mno-volatile-cache
11910@opindex mno-volatile-cache
11911Enable cache bypass for volatile references.
11912
11913@end table
11914
11915The following options fine tune code generation:
11916@c code generation tuning options
11917@table @gcctabopt
11918@item -malign-call
11919@opindex malign-call
11920Do alignment optimizations for call instructions.
11921
11922@item -mauto-modify-reg
11923@opindex mauto-modify-reg
11924Enable the use of pre/post modify with register displacement.
11925
11926@item -mbbit-peephole
11927@opindex mbbit-peephole
11928Enable bbit peephole2.
11929
11930@item -mno-brcc
11931@opindex mno-brcc
11932This option disables a target-specific pass in @file{arc_reorg} to
11933generate @code{BRcc} instructions.  It has no effect on @code{BRcc}
11934generation driven by the combiner pass.
11935
11936@item -mcase-vector-pcrel
11937@opindex mcase-vector-pcrel
11938Use pc-relative switch case tables - this enables case table shortening.
11939This is the default for @option{-Os}.
11940
11941@item -mcompact-casesi
11942@opindex mcompact-casesi
11943Enable compact casesi pattern.
11944This is the default for @option{-Os}.
11945
11946@item -mno-cond-exec
11947@opindex mno-cond-exec
11948Disable ARCompact specific pass to generate conditional execution instructions.
11949Due to delay slot scheduling and interactions between operand numbers,
11950literal sizes, instruction lengths, and the support for conditional execution,
11951the target-independent pass to generate conditional execution is often lacking,
11952so the ARC port has kept a special pass around that tries to find more
11953conditional execution generating opportunities after register allocation,
11954branch shortening, and delay slot scheduling have been done.  This pass
11955generally, but not always, improves performance and code size, at the cost of
11956extra compilation time, which is why there is an option to switch it off.
11957If you have a problem with call instructions exceeding their allowable
11958offset range because they are conditionalized, you should consider using
11959@option{-mmedium-calls} instead.
11960
11961@item -mearly-cbranchsi
11962@opindex mearly-cbranchsi
11963Enable pre-reload use of the cbranchsi pattern.
11964
11965@item -mexpand-adddi
11966@opindex mexpand-adddi
11967Expand @code{adddi3} and @code{subdi3} at rtl generation time into
11968@code{add.f}, @code{adc} etc.
11969
11970@item -mindexed-loads
11971@opindex mindexed-loads
11972Enable the use of indexed loads.  This can be problematic because some
11973optimizers will then assume the that indexed stores exist, which is not
11974the case.
11975
11976@item -mlra
11977@opindex mlra
11978Enable Local Register Allocation.  This is still experimental for ARC,
11979so by default the compiler uses standard reload
11980(i.e. @samp{-mno-lra}).
11981
11982@item -mlra-priority-none
11983@opindex mlra-priority-none
11984Don't indicate any priority for target registers.
11985
11986@item -mlra-priority-compact
11987@opindex mlra-priority-compact
11988Indicate target register priority for r0..r3 / r12..r15.
11989
11990@item -mlra-priority-noncompact
11991@opindex mlra-priority-noncompact
11992Reduce target regsiter priority for r0..r3 / r12..r15.
11993
11994@item -mno-millicode
11995@opindex mno-millicode
11996When optimizing for size (using @option{-Os}), prologues and epilogues
11997that have to save or restore a large number of registers are often
11998shortened by using call to a special function in libgcc; this is
11999referred to as a @emph{millicode} call.  As these calls can pose
12000performance issues, and/or cause linking issues when linking in a
12001nonstandard way, this option is provided to turn off millicode call
12002generation.
12003
12004@item -mmixed-code
12005@opindex mmixed-code
12006Tweak register allocation to help 16-bit instruction generation.
12007This generally has the effect of decreasing the average instruction size
12008while increasing the instruction count.
12009
12010@item -mq-class
12011@opindex mq-class
12012Enable 'q' instruction alternatives.
12013This is the default for @option{-Os}.
12014
12015@item -mRcq
12016@opindex mRcq
12017Enable Rcq constraint handling - most short code generation depends on this.
12018This is the default.
12019
12020@item -mRcw
12021@opindex mRcw
12022Enable Rcw constraint handling - ccfsm condexec mostly depends on this.
12023This is the default.
12024
12025@item -msize-level=@var{level}
12026@opindex msize-level
12027Fine-tune size optimization with regards to instruction lengths and alignment.
12028The recognized values for @var{level} are:
12029@table @samp
12030@item 0
12031No size optimization.  This level is deprecated and treated like @samp{1}.
12032
12033@item 1
12034Short instructions are used opportunistically.
12035
12036@item 2
12037In addition, alignment of loops and of code after barriers are dropped.
12038
12039@item 3
12040In addition, optional data alignment is dropped, and the option @option{Os} is enabled.
12041
12042@end table
12043
12044This defaults to @samp{3} when @option{-Os} is in effect.  Otherwise,
12045the behavior when this is not set is equivalent to level @samp{1}.
12046
12047@item -mtune=@var{cpu}
12048@opindex mtune
12049Set instruction scheduling parameters for @var{cpu}, overriding any implied
12050by @option{-mcpu=}.
12051
12052Supported values for @var{cpu} are
12053
12054@table @samp
12055@item ARC600
12056Tune for ARC600 cpu.
12057
12058@item ARC601
12059Tune for ARC601 cpu.
12060
12061@item ARC700
12062Tune for ARC700 cpu with standard multiplier block.
12063
12064@item ARC700-xmac
12065Tune for ARC700 cpu with XMAC block.
12066
12067@item ARC725D
12068Tune for ARC725D cpu.
12069
12070@item ARC750D
12071Tune for ARC750D cpu.
12072
12073@end table
12074
12075@item -mmultcost=@var{num}
12076@opindex mmultcost
12077Cost to assume for a multiply instruction, with @samp{4} being equal to a
12078normal instruction.
12079
12080@item -munalign-prob-threshold=@var{probability}
12081@opindex munalign-prob-threshold
12082Set probability threshold for unaligning branches.
12083When tuning for @samp{ARC700} and optimizing for speed, branches without
12084filled delay slot are preferably emitted unaligned and long, unless
12085profiling indicates that the probability for the branch to be taken
12086is below @var{probability}.  @xref{Cross-profiling}.
12087The default is (REG_BR_PROB_BASE/2), i.e.@: 5000.
12088
12089@end table
12090
12091The following options are maintained for backward compatibility, but
12092are now deprecated and will be removed in a future release:
12093
12094@c Deprecated options
12095@table @gcctabopt
12096
12097@item -margonaut
12098@opindex margonaut
12099Obsolete FPX.
12100
12101@item -mbig-endian
12102@opindex mbig-endian
12103@itemx -EB
12104@opindex EB
12105Compile code for big endian targets.  Use of these options is now
12106deprecated.  Users wanting big-endian code, should use the
12107@w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets when
12108building the tool chain, for which big-endian is the default.
12109
12110@item -mlittle-endian
12111@opindex mlittle-endian
12112@itemx -EL
12113@opindex EL
12114Compile code for little endian targets.  Use of these options is now
12115deprecated.  Users wanting little-endian code should use the
12116@w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets when
12117building the tool chain, for which little-endian is the default.
12118
12119@item -mbarrel_shifter
12120@opindex mbarrel_shifter
12121Replaced by @samp{-mbarrel-shifter}
12122
12123@item -mdpfp_compact
12124@opindex mdpfp_compact
12125Replaced by @samp{-mdpfp-compact}
12126
12127@item -mdpfp_fast
12128@opindex mdpfp_fast
12129Replaced by @samp{-mdpfp-fast}
12130
12131@item -mdsp_packa
12132@opindex mdsp_packa
12133Replaced by @samp{-mdsp-packa}
12134
12135@item -mEA
12136@opindex mEA
12137Replaced by @samp{-mea}
12138
12139@item -mmac_24
12140@opindex mmac_24
12141Replaced by @samp{-mmac-24}
12142
12143@item -mmac_d16
12144@opindex mmac_d16
12145Replaced by @samp{-mmac-d16}
12146
12147@item -mspfp_compact
12148@opindex mspfp_compact
12149Replaced by @samp{-mspfp-compact}
12150
12151@item -mspfp_fast
12152@opindex mspfp_fast
12153Replaced by @samp{-mspfp-fast}
12154
12155@item -mtune=@var{cpu}
12156@opindex mtune
12157Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
12158@samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
12159@samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively
12160
12161@item -multcost=@var{num}
12162@opindex multcost
12163Replaced by @samp{-mmultcost}.
12164
12165@end table
12166
12167@node ARM Options
12168@subsection ARM Options
12169@cindex ARM options
12170
12171These @samp{-m} options are defined for Advanced RISC Machines (ARM)
12172architectures:
12173
12174@table @gcctabopt
12175@item -mabi=@var{name}
12176@opindex mabi
12177Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
12178@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
12179
12180@item -mapcs-frame
12181@opindex mapcs-frame
12182Generate a stack frame that is compliant with the ARM Procedure Call
12183Standard for all functions, even if this is not strictly necessary for
12184correct execution of the code.  Specifying @option{-fomit-frame-pointer}
12185with this option causes the stack frames not to be generated for
12186leaf functions.  The default is @option{-mno-apcs-frame}.
12187
12188@item -mapcs
12189@opindex mapcs
12190This is a synonym for @option{-mapcs-frame}.
12191
12192@ignore
12193@c not currently implemented
12194@item -mapcs-stack-check
12195@opindex mapcs-stack-check
12196Generate code to check the amount of stack space available upon entry to
12197every function (that actually uses some stack space).  If there is
12198insufficient space available then either the function
12199@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} is
12200called, depending upon the amount of stack space required.  The runtime
12201system is required to provide these functions.  The default is
12202@option{-mno-apcs-stack-check}, since this produces smaller code.
12203
12204@c not currently implemented
12205@item -mapcs-float
12206@opindex mapcs-float
12207Pass floating-point arguments using the floating-point registers.  This is
12208one of the variants of the APCS@.  This option is recommended if the
12209target hardware has a floating-point unit or if a lot of floating-point
12210arithmetic is going to be performed by the code.  The default is
12211@option{-mno-apcs-float}, since the size of integer-only code is
12212slightly increased if @option{-mapcs-float} is used.
12213
12214@c not currently implemented
12215@item -mapcs-reentrant
12216@opindex mapcs-reentrant
12217Generate reentrant, position-independent code.  The default is
12218@option{-mno-apcs-reentrant}.
12219@end ignore
12220
12221@item -mthumb-interwork
12222@opindex mthumb-interwork
12223Generate code that supports calling between the ARM and Thumb
12224instruction sets.  Without this option, on pre-v5 architectures, the
12225two instruction sets cannot be reliably used inside one program.  The
12226default is @option{-mno-thumb-interwork}, since slightly larger code
12227is generated when @option{-mthumb-interwork} is specified.  In AAPCS
12228configurations this option is meaningless.
12229
12230@item -mno-sched-prolog
12231@opindex mno-sched-prolog
12232Prevent the reordering of instructions in the function prologue, or the
12233merging of those instruction with the instructions in the function's
12234body.  This means that all functions start with a recognizable set
12235of instructions (or in fact one of a choice from a small set of
12236different function prologues), and this information can be used to
12237locate the start of functions inside an executable piece of code.  The
12238default is @option{-msched-prolog}.
12239
12240@item -mfloat-abi=@var{name}
12241@opindex mfloat-abi
12242Specifies which floating-point ABI to use.  Permissible values
12243are: @samp{soft}, @samp{softfp} and @samp{hard}.
12244
12245Specifying @samp{soft} causes GCC to generate output containing
12246library calls for floating-point operations.
12247@samp{softfp} allows the generation of code using hardware floating-point
12248instructions, but still uses the soft-float calling conventions.
12249@samp{hard} allows generation of floating-point instructions
12250and uses FPU-specific calling conventions.
12251
12252The default depends on the specific target configuration.  Note that
12253the hard-float and soft-float ABIs are not link-compatible; you must
12254compile your entire program with the same ABI, and link with a
12255compatible set of libraries.
12256
12257@item -mlittle-endian
12258@opindex mlittle-endian
12259Generate code for a processor running in little-endian mode.  This is
12260the default for all standard configurations.
12261
12262@item -mbig-endian
12263@opindex mbig-endian
12264Generate code for a processor running in big-endian mode; the default is
12265to compile code for a little-endian processor.
12266
12267@item -mwords-little-endian
12268@opindex mwords-little-endian
12269This option only applies when generating code for big-endian processors.
12270Generate code for a little-endian word order but a big-endian byte
12271order.  That is, a byte order of the form @samp{32107654}.  Note: this
12272option should only be used if you require compatibility with code for
12273big-endian ARM processors generated by versions of the compiler prior to
122742.8.  This option is now deprecated.
12275
12276@item -march=@var{name}
12277@opindex march
12278This specifies the name of the target ARM architecture.  GCC uses this
12279name to determine what kind of instructions it can emit when generating
12280assembly code.  This option can be used in conjunction with or instead
12281of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
12282@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
12283@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
12284@samp{armv6}, @samp{armv6j},
12285@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
12286@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m}, @samp{armv7e-m},
12287@samp{armv7ve}, @samp{armv8-a}, @samp{armv8-a+crc},
12288@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
12289
12290@option{-march=armv7ve} is the armv7-a architecture with virtualization
12291extensions.
12292
12293@option{-march=armv8-a+crc} enables code generation for the ARMv8-A
12294architecture together with the optional CRC32 extensions.
12295
12296@option{-march=native} causes the compiler to auto-detect the architecture
12297of the build computer.  At present, this feature is only supported on
12298GNU/Linux, and not all architectures are recognized.  If the auto-detect
12299is unsuccessful the option has no effect.
12300
12301@item -mtune=@var{name}
12302@opindex mtune
12303This option specifies the name of the target ARM processor for
12304which GCC should tune the performance of the code.
12305For some ARM implementations better performance can be obtained by using
12306this option.
12307Permissible names are: @samp{arm2}, @samp{arm250},
12308@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
12309@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
12310@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
12311@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
12312@samp{arm720},
12313@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
12314@samp{arm710t}, @samp{arm720t}, @samp{arm740t},
12315@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
12316@samp{strongarm1110},
12317@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
12318@samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
12319@samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
12320@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
12321@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
12322@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
12323@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
12324@samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8}, @samp{cortex-a9},
12325@samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a53}, @samp{cortex-a57},
12326@samp{cortex-r4},
12327@samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-m4},
12328@samp{cortex-m3},
12329@samp{cortex-m1},
12330@samp{cortex-m0},
12331@samp{cortex-m0plus},
12332@samp{marvell-pj4},
12333@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312},
12334@samp{fa526}, @samp{fa626},
12335@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}.
12336
12337Additionally, this option can specify that GCC should tune the performance
12338of the code for a big.LITTLE system.  Permissible names are:
12339@samp{cortex-a15.cortex-a7}, @samp{cortex-a57.cortex-a53}.
12340
12341@option{-mtune=generic-@var{arch}} specifies that GCC should tune the
12342performance for a blend of processors within architecture @var{arch}.
12343The aim is to generate code that run well on the current most popular
12344processors, balancing between optimizations that benefit some CPUs in the
12345range, and avoiding performance pitfalls of other CPUs.  The effects of
12346this option may change in future GCC versions as CPU models come and go.
12347
12348@option{-mtune=native} causes the compiler to auto-detect the CPU
12349of the build computer.  At present, this feature is only supported on
12350GNU/Linux, and not all architectures are recognized.  If the auto-detect is
12351unsuccessful the option has no effect.
12352
12353@item -mcpu=@var{name}
12354@opindex mcpu
12355This specifies the name of the target ARM processor.  GCC uses this name
12356to derive the name of the target ARM architecture (as if specified
12357by @option{-march}) and the ARM processor type for which to tune for
12358performance (as if specified by @option{-mtune}).  Where this option
12359is used in conjunction with @option{-march} or @option{-mtune},
12360those options take precedence over the appropriate part of this option.
12361
12362Permissible names for this option are the same as those for
12363@option{-mtune}.
12364
12365@option{-mcpu=generic-@var{arch}} is also permissible, and is
12366equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
12367See @option{-mtune} for more information.
12368
12369@option{-mcpu=native} causes the compiler to auto-detect the CPU
12370of the build computer.  At present, this feature is only supported on
12371GNU/Linux, and not all architectures are recognized.  If the auto-detect
12372is unsuccessful the option has no effect.
12373
12374@item -mfpu=@var{name}
12375@opindex mfpu
12376This specifies what floating-point hardware (or hardware emulation) is
12377available on the target.  Permissible names are: @samp{vfp}, @samp{vfpv3},
12378@samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
12379@samp{vfpv3xd-fp16}, @samp{neon}, @samp{neon-fp16}, @samp{vfpv4},
12380@samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
12381@samp{fp-armv8}, @samp{neon-fp-armv8}, and @samp{crypto-neon-fp-armv8}.
12382
12383If @option{-msoft-float} is specified this specifies the format of
12384floating-point values.
12385
12386If the selected floating-point hardware includes the NEON extension
12387(e.g. @option{-mfpu}=@samp{neon}), note that floating-point
12388operations are not generated by GCC's auto-vectorization pass unless
12389@option{-funsafe-math-optimizations} is also specified.  This is
12390because NEON hardware does not fully implement the IEEE 754 standard for
12391floating-point arithmetic (in particular denormal values are treated as
12392zero), so the use of NEON instructions may lead to a loss of precision.
12393
12394@item -mfp16-format=@var{name}
12395@opindex mfp16-format
12396Specify the format of the @code{__fp16} half-precision floating-point type.
12397Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
12398the default is @samp{none}, in which case the @code{__fp16} type is not
12399defined.  @xref{Half-Precision}, for more information.
12400
12401@item -mstructure-size-boundary=@var{n}
12402@opindex mstructure-size-boundary
12403The sizes of all structures and unions are rounded up to a multiple
12404of the number of bits set by this option.  Permissible values are 8, 32
12405and 64.  The default value varies for different toolchains.  For the COFF
12406targeted toolchain the default value is 8.  A value of 64 is only allowed
12407if the underlying ABI supports it.
12408
12409Specifying a larger number can produce faster, more efficient code, but
12410can also increase the size of the program.  Different values are potentially
12411incompatible.  Code compiled with one value cannot necessarily expect to
12412work with code or libraries compiled with another value, if they exchange
12413information using structures or unions.
12414
12415@item -mabort-on-noreturn
12416@opindex mabort-on-noreturn
12417Generate a call to the function @code{abort} at the end of a
12418@code{noreturn} function.  It is executed if the function tries to
12419return.
12420
12421@item -mlong-calls
12422@itemx -mno-long-calls
12423@opindex mlong-calls
12424@opindex mno-long-calls
12425Tells the compiler to perform function calls by first loading the
12426address of the function into a register and then performing a subroutine
12427call on this register.  This switch is needed if the target function
12428lies outside of the 64-megabyte addressing range of the offset-based
12429version of subroutine call instruction.
12430
12431Even if this switch is enabled, not all function calls are turned
12432into long calls.  The heuristic is that static functions, functions
12433that have the @samp{short-call} attribute, functions that are inside
12434the scope of a @samp{#pragma no_long_calls} directive, and functions whose
12435definitions have already been compiled within the current compilation
12436unit are not turned into long calls.  The exceptions to this rule are
12437that weak function definitions, functions with the @samp{long-call}
12438attribute or the @samp{section} attribute, and functions that are within
12439the scope of a @samp{#pragma long_calls} directive are always
12440turned into long calls.
12441
12442This feature is not enabled by default.  Specifying
12443@option{-mno-long-calls} restores the default behavior, as does
12444placing the function calls within the scope of a @samp{#pragma
12445long_calls_off} directive.  Note these switches have no effect on how
12446the compiler generates code to handle function calls via function
12447pointers.
12448
12449@item -msingle-pic-base
12450@opindex msingle-pic-base
12451Treat the register used for PIC addressing as read-only, rather than
12452loading it in the prologue for each function.  The runtime system is
12453responsible for initializing this register with an appropriate value
12454before execution begins.
12455
12456@item -mpic-register=@var{reg}
12457@opindex mpic-register
12458Specify the register to be used for PIC addressing.
12459For standard PIC base case, the default will be any suitable register
12460determined by compiler.  For single PIC base case, the default is
12461@samp{R9} if target is EABI based or stack-checking is enabled,
12462otherwise the default is @samp{R10}.
12463
12464@item -mpic-data-is-text-relative
12465@opindex mpic-data-is-text-relative
12466Assume that each data segments are relative to text segment at load time.
12467Therefore, it permits addressing data using PC-relative operations.
12468This option is on by default for targets other than VxWorks RTP.
12469
12470@item -mpoke-function-name
12471@opindex mpoke-function-name
12472Write the name of each function into the text section, directly
12473preceding the function prologue.  The generated code is similar to this:
12474
12475@smallexample
12476     t0
12477         .ascii "arm_poke_function_name", 0
12478         .align
12479     t1
12480         .word 0xff000000 + (t1 - t0)
12481     arm_poke_function_name
12482         mov     ip, sp
12483         stmfd   sp!, @{fp, ip, lr, pc@}
12484         sub     fp, ip, #4
12485@end smallexample
12486
12487When performing a stack backtrace, code can inspect the value of
12488@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
12489location @code{pc - 12} and the top 8 bits are set, then we know that
12490there is a function name embedded immediately preceding this location
12491and has length @code{((pc[-3]) & 0xff000000)}.
12492
12493@item -mthumb
12494@itemx -marm
12495@opindex marm
12496@opindex mthumb
12497
12498Select between generating code that executes in ARM and Thumb
12499states.  The default for most configurations is to generate code
12500that executes in ARM state, but the default can be changed by
12501configuring GCC with the @option{--with-mode=}@var{state}
12502configure option.
12503
12504@item -mtpcs-frame
12505@opindex mtpcs-frame
12506Generate a stack frame that is compliant with the Thumb Procedure Call
12507Standard for all non-leaf functions.  (A leaf function is one that does
12508not call any other functions.)  The default is @option{-mno-tpcs-frame}.
12509
12510@item -mtpcs-leaf-frame
12511@opindex mtpcs-leaf-frame
12512Generate a stack frame that is compliant with the Thumb Procedure Call
12513Standard for all leaf functions.  (A leaf function is one that does
12514not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
12515
12516@item -mcallee-super-interworking
12517@opindex mcallee-super-interworking
12518Gives all externally visible functions in the file being compiled an ARM
12519instruction set header which switches to Thumb mode before executing the
12520rest of the function.  This allows these functions to be called from
12521non-interworking code.  This option is not valid in AAPCS configurations
12522because interworking is enabled by default.
12523
12524@item -mcaller-super-interworking
12525@opindex mcaller-super-interworking
12526Allows calls via function pointers (including virtual functions) to
12527execute correctly regardless of whether the target code has been
12528compiled for interworking or not.  There is a small overhead in the cost
12529of executing a function pointer if this option is enabled.  This option
12530is not valid in AAPCS configurations because interworking is enabled
12531by default.
12532
12533@item -mtp=@var{name}
12534@opindex mtp
12535Specify the access model for the thread local storage pointer.  The valid
12536models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
12537@option{cp15}, which fetches the thread pointer from @code{cp15} directly
12538(supported in the arm6k architecture), and @option{auto}, which uses the
12539best available method for the selected processor.  The default setting is
12540@option{auto}.
12541
12542@item -mtls-dialect=@var{dialect}
12543@opindex mtls-dialect
12544Specify the dialect to use for accessing thread local storage.  Two
12545@var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
12546@samp{gnu} dialect selects the original GNU scheme for supporting
12547local and global dynamic TLS models.  The @samp{gnu2} dialect
12548selects the GNU descriptor scheme, which provides better performance
12549for shared libraries.  The GNU descriptor scheme is compatible with
12550the original scheme, but does require new assembler, linker and
12551library support.  Initial and local exec TLS models are unaffected by
12552this option and always use the original scheme.
12553
12554@item -mword-relocations
12555@opindex mword-relocations
12556Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
12557This is enabled by default on targets (uClinux, SymbianOS) where the runtime
12558loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
12559is specified.
12560
12561@item -mfix-cortex-m3-ldrd
12562@opindex mfix-cortex-m3-ldrd
12563Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
12564with overlapping destination and base registers are used.  This option avoids
12565generating these instructions.  This option is enabled by default when
12566@option{-mcpu=cortex-m3} is specified.
12567
12568@item -munaligned-access
12569@itemx -mno-unaligned-access
12570@opindex munaligned-access
12571@opindex mno-unaligned-access
12572Enables (or disables) reading and writing of 16- and 32- bit values
12573from addresses that are not 16- or 32- bit aligned.  By default
12574unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
12575architectures, and enabled for all other architectures.  If unaligned
12576access is not enabled then words in packed data structures will be
12577accessed a byte at a time.
12578
12579The ARM attribute @code{Tag_CPU_unaligned_access} will be set in the
12580generated object file to either true or false, depending upon the
12581setting of this option.  If unaligned access is enabled then the
12582preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} will also be
12583defined.
12584
12585@item -mneon-for-64bits
12586@opindex mneon-for-64bits
12587Enables using Neon to handle scalar 64-bits operations. This is
12588disabled by default since the cost of moving data from core registers
12589to Neon is high.
12590
12591@item -mslow-flash-data
12592@opindex mslow-flash-data
12593Assume loading data from flash is slower than fetching instruction.
12594Therefore literal load is minimized for better performance.
12595This option is only supported when compiling for ARMv7 M-profile and
12596off by default.
12597
12598@item -mrestrict-it
12599@opindex mrestrict-it
12600Restricts generation of IT blocks to conform to the rules of ARMv8.
12601IT blocks can only contain a single 16-bit instruction from a select
12602set of instructions. This option is on by default for ARMv8 Thumb mode.
12603@end table
12604
12605@node AVR Options
12606@subsection AVR Options
12607@cindex AVR Options
12608
12609These options are defined for AVR implementations:
12610
12611@table @gcctabopt
12612@item -mmcu=@var{mcu}
12613@opindex mmcu
12614Specify Atmel AVR instruction set architectures (ISA) or MCU type.
12615
12616The default for this option is@tie{}@code{avr2}.
12617
12618GCC supports the following AVR devices and ISAs:
12619
12620@include avr-mmcu.texi
12621
12622@item -maccumulate-args
12623@opindex maccumulate-args
12624Accumulate outgoing function arguments and acquire/release the needed
12625stack space for outgoing function arguments once in function
12626prologue/epilogue.  Without this option, outgoing arguments are pushed
12627before calling a function and popped afterwards.
12628
12629Popping the arguments after the function call can be expensive on
12630AVR so that accumulating the stack space might lead to smaller
12631executables because arguments need not to be removed from the
12632stack after such a function call.
12633
12634This option can lead to reduced code size for functions that perform
12635several calls to functions that get their arguments on the stack like
12636calls to printf-like functions.
12637
12638@item -mbranch-cost=@var{cost}
12639@opindex mbranch-cost
12640Set the branch costs for conditional branch instructions to
12641@var{cost}.  Reasonable values for @var{cost} are small, non-negative
12642integers. The default branch cost is 0.
12643
12644@item -mcall-prologues
12645@opindex mcall-prologues
12646Functions prologues/epilogues are expanded as calls to appropriate
12647subroutines.  Code size is smaller.
12648
12649@item -mint8
12650@opindex mint8
12651Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
12652@code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
12653and @code{long long} is 4 bytes.  Please note that this option does not
12654conform to the C standards, but it results in smaller code
12655size.
12656
12657@item -mno-interrupts
12658@opindex mno-interrupts
12659Generated code is not compatible with hardware interrupts.
12660Code size is smaller.
12661
12662@item -mrelax
12663@opindex mrelax
12664Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
12665@code{RCALL} resp.@: @code{RJMP} instruction if applicable.
12666Setting @code{-mrelax} just adds the @code{--relax} option to the
12667linker command line when the linker is called.
12668
12669Jump relaxing is performed by the linker because jump offsets are not
12670known before code is located. Therefore, the assembler code generated by the
12671compiler is the same, but the instructions in the executable may
12672differ from instructions in the assembler code.
12673
12674Relaxing must be turned on if linker stubs are needed, see the
12675section on @code{EIND} and linker stubs below.
12676
12677@item -msp8
12678@opindex msp8
12679Treat the stack pointer register as an 8-bit register,
12680i.e.@: assume the high byte of the stack pointer is zero.
12681In general, you don't need to set this option by hand.
12682
12683This option is used internally by the compiler to select and
12684build multilibs for architectures @code{avr2} and @code{avr25}.
12685These architectures mix devices with and without @code{SPH}.
12686For any setting other than @code{-mmcu=avr2} or @code{-mmcu=avr25}
12687the compiler driver will add or remove this option from the compiler
12688proper's command line, because the compiler then knows if the device
12689or architecture has an 8-bit stack pointer and thus no @code{SPH}
12690register or not.
12691
12692@item -mstrict-X
12693@opindex mstrict-X
12694Use address register @code{X} in a way proposed by the hardware.  This means
12695that @code{X} is only used in indirect, post-increment or
12696pre-decrement addressing.
12697
12698Without this option, the @code{X} register may be used in the same way
12699as @code{Y} or @code{Z} which then is emulated by additional
12700instructions.
12701For example, loading a value with @code{X+const} addressing with a
12702small non-negative @code{const < 64} to a register @var{Rn} is
12703performed as
12704
12705@example
12706adiw r26, const   ; X += const
12707ld   @var{Rn}, X        ; @var{Rn} = *X
12708sbiw r26, const   ; X -= const
12709@end example
12710
12711@item -mtiny-stack
12712@opindex mtiny-stack
12713Only change the lower 8@tie{}bits of the stack pointer.
12714
12715@item -Waddr-space-convert
12716@opindex Waddr-space-convert
12717Warn about conversions between address spaces in the case where the
12718resulting address space is not contained in the incoming address space.
12719@end table
12720
12721@subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash
12722@cindex @code{EIND}
12723Pointers in the implementation are 16@tie{}bits wide.
12724The address of a function or label is represented as word address so
12725that indirect jumps and calls can target any code address in the
12726range of 64@tie{}Ki words.
12727
12728In order to facilitate indirect jump on devices with more than 128@tie{}Ki
12729bytes of program memory space, there is a special function register called
12730@code{EIND} that serves as most significant part of the target address
12731when @code{EICALL} or @code{EIJMP} instructions are used.
12732
12733Indirect jumps and calls on these devices are handled as follows by
12734the compiler and are subject to some limitations:
12735
12736@itemize @bullet
12737
12738@item
12739The compiler never sets @code{EIND}.
12740
12741@item
12742The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP}
12743instructions or might read @code{EIND} directly in order to emulate an
12744indirect call/jump by means of a @code{RET} instruction.
12745
12746@item
12747The compiler assumes that @code{EIND} never changes during the startup
12748code or during the application. In particular, @code{EIND} is not
12749saved/restored in function or interrupt service routine
12750prologue/epilogue.
12751
12752@item
12753For indirect calls to functions and computed goto, the linker
12754generates @emph{stubs}. Stubs are jump pads sometimes also called
12755@emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
12756The stub contains a direct jump to the desired address.
12757
12758@item
12759Linker relaxation must be turned on so that the linker will generate
12760the stubs correctly an all situaltion. See the compiler option
12761@code{-mrelax} and the linler option @code{--relax}.
12762There are corner cases where the linker is supposed to generate stubs
12763but aborts without relaxation and without a helpful error message.
12764
12765@item
12766The default linker script is arranged for code with @code{EIND = 0}.
12767If code is supposed to work for a setup with @code{EIND != 0}, a custom
12768linker script has to be used in order to place the sections whose
12769name start with @code{.trampolines} into the segment where @code{EIND}
12770points to.
12771
12772@item
12773The startup code from libgcc never sets @code{EIND}.
12774Notice that startup code is a blend of code from libgcc and AVR-LibC.
12775For the impact of AVR-LibC on @code{EIND}, see the
12776@w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}.
12777
12778@item
12779It is legitimate for user-specific startup code to set up @code{EIND}
12780early, for example by means of initialization code located in
12781section @code{.init3}. Such code runs prior to general startup code
12782that initializes RAM and calls constructors, but after the bit
12783of startup code from AVR-LibC that sets @code{EIND} to the segment
12784where the vector table is located.
12785@example
12786#include <avr/io.h>
12787
12788static void
12789__attribute__((section(".init3"),naked,used,no_instrument_function))
12790init3_set_eind (void)
12791@{
12792  __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
12793                  "out %i0,r24" :: "n" (&EIND) : "r24","memory");
12794@}
12795@end example
12796
12797@noindent
12798The @code{__trampolines_start} symbol is defined in the linker script.
12799
12800@item
12801Stubs are generated automatically by the linker if
12802the following two conditions are met:
12803@itemize @minus
12804
12805@item The address of a label is taken by means of the @code{gs} modifier
12806(short for @emph{generate stubs}) like so:
12807@example
12808LDI r24, lo8(gs(@var{func}))
12809LDI r25, hi8(gs(@var{func}))
12810@end example
12811@item The final location of that label is in a code segment
12812@emph{outside} the segment where the stubs are located.
12813@end itemize
12814
12815@item
12816The compiler emits such @code{gs} modifiers for code labels in the
12817following situations:
12818@itemize @minus
12819@item Taking address of a function or code label.
12820@item Computed goto.
12821@item If prologue-save function is used, see @option{-mcall-prologues}
12822command-line option.
12823@item Switch/case dispatch tables. If you do not want such dispatch
12824tables you can specify the @option{-fno-jump-tables} command-line option.
12825@item C and C++ constructors/destructors called during startup/shutdown.
12826@item If the tools hit a @code{gs()} modifier explained above.
12827@end itemize
12828
12829@item
12830Jumping to non-symbolic addresses like so is @emph{not} supported:
12831
12832@example
12833int main (void)
12834@{
12835    /* Call function at word address 0x2 */
12836    return ((int(*)(void)) 0x2)();
12837@}
12838@end example
12839
12840Instead, a stub has to be set up, i.e.@: the function has to be called
12841through a symbol (@code{func_4} in the example):
12842
12843@example
12844int main (void)
12845@{
12846    extern int func_4 (void);
12847
12848    /* Call function at byte address 0x4 */
12849    return func_4();
12850@}
12851@end example
12852
12853and the application be linked with @code{-Wl,--defsym,func_4=0x4}.
12854Alternatively, @code{func_4} can be defined in the linker script.
12855@end itemize
12856
12857@subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
12858@cindex @code{RAMPD}
12859@cindex @code{RAMPX}
12860@cindex @code{RAMPY}
12861@cindex @code{RAMPZ}
12862Some AVR devices support memories larger than the 64@tie{}KiB range
12863that can be accessed with 16-bit pointers.  To access memory locations
12864outside this 64@tie{}KiB range, the contentent of a @code{RAMP}
12865register is used as high part of the address:
12866The @code{X}, @code{Y}, @code{Z} address register is concatenated
12867with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
12868register, respectively, to get a wide address. Similarly,
12869@code{RAMPD} is used together with direct addressing.
12870
12871@itemize
12872@item
12873The startup code initializes the @code{RAMP} special function
12874registers with zero.
12875
12876@item
12877If a @ref{AVR Named Address Spaces,named address space} other than
12878generic or @code{__flash} is used, then @code{RAMPZ} is set
12879as needed before the operation.
12880
12881@item
12882If the device supports RAM larger than 64@tie{}KiB and the compiler
12883needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
12884is reset to zero after the operation.
12885
12886@item
12887If the device comes with a specific @code{RAMP} register, the ISR
12888prologue/epilogue saves/restores that SFR and initializes it with
12889zero in case the ISR code might (implicitly) use it.
12890
12891@item
12892RAM larger than 64@tie{}KiB is not supported by GCC for AVR targets.
12893If you use inline assembler to read from locations outside the
1289416-bit address range and change one of the @code{RAMP} registers,
12895you must reset it to zero after the access.
12896
12897@end itemize
12898
12899@subsubsection AVR Built-in Macros
12900
12901GCC defines several built-in macros so that the user code can test
12902for the presence or absence of features.  Almost any of the following
12903built-in macros are deduced from device capabilities and thus
12904triggered by the @code{-mmcu=} command-line option.
12905
12906For even more AVR-specific built-in macros see
12907@ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.
12908
12909@table @code
12910
12911@item __AVR_ARCH__
12912Build-in macro that resolves to a decimal number that identifies the
12913architecture and depends on the @code{-mmcu=@var{mcu}} option.
12914Possible values are:
12915
12916@code{2}, @code{25}, @code{3}, @code{31}, @code{35},
12917@code{4}, @code{5}, @code{51}, @code{6}, @code{102}, @code{104},
12918@code{105}, @code{106}, @code{107}
12919
12920for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3},
12921@code{avr31}, @code{avr35}, @code{avr4}, @code{avr5}, @code{avr51},
12922@code{avr6}, @code{avrxmega2}, @code{avrxmega4}, @code{avrxmega5},
12923@code{avrxmega6}, @code{avrxmega7}, respectively.
12924If @var{mcu} specifies a device, this built-in macro is set
12925accordingly. For example, with @code{-mmcu=atmega8} the macro will be
12926defined to @code{4}.
12927
12928@item __AVR_@var{Device}__
12929Setting @code{-mmcu=@var{device}} defines this built-in macro which reflects
12930the device's name. For example, @code{-mmcu=atmega8} defines the
12931built-in macro @code{__AVR_ATmega8__}, @code{-mmcu=attiny261a} defines
12932@code{__AVR_ATtiny261A__}, etc.
12933
12934The built-in macros' names follow
12935the scheme @code{__AVR_@var{Device}__} where @var{Device} is
12936the device name as from the AVR user manual. The difference between
12937@var{Device} in the built-in macro and @var{device} in
12938@code{-mmcu=@var{device}} is that the latter is always lowercase.
12939
12940If @var{device} is not a device but only a core architecture like
12941@code{avr51}, this macro will not be defined.
12942
12943@item __AVR_XMEGA__
12944The device / architecture belongs to the XMEGA family of devices.
12945
12946@item __AVR_HAVE_ELPM__
12947The device has the the @code{ELPM} instruction.
12948
12949@item __AVR_HAVE_ELPMX__
12950The device has the @code{ELPM R@var{n},Z} and @code{ELPM
12951R@var{n},Z+} instructions.
12952
12953@item __AVR_HAVE_MOVW__
12954The device has the @code{MOVW} instruction to perform 16-bit
12955register-register moves.
12956
12957@item __AVR_HAVE_LPMX__
12958The device has the @code{LPM R@var{n},Z} and
12959@code{LPM R@var{n},Z+} instructions.
12960
12961@item __AVR_HAVE_MUL__
12962The device has a hardware multiplier.
12963
12964@item __AVR_HAVE_JMP_CALL__
12965The device has the @code{JMP} and @code{CALL} instructions.
12966This is the case for devices with at least 16@tie{}KiB of program
12967memory.
12968
12969@item __AVR_HAVE_EIJMP_EICALL__
12970@itemx __AVR_3_BYTE_PC__
12971The device has the @code{EIJMP} and @code{EICALL} instructions.
12972This is the case for devices with more than 128@tie{}KiB of program memory.
12973This also means that the program counter
12974(PC) is 3@tie{}bytes wide.
12975
12976@item __AVR_2_BYTE_PC__
12977The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
12978with up to 128@tie{}KiB of program memory.
12979
12980@item __AVR_HAVE_8BIT_SP__
12981@itemx __AVR_HAVE_16BIT_SP__
12982The stack pointer (SP) register is treated as 8-bit respectively
1298316-bit register by the compiler.
12984The definition of these macros is affected by @code{-mtiny-stack}.
12985
12986@item __AVR_HAVE_SPH__
12987@itemx __AVR_SP8__
12988The device has the SPH (high part of stack pointer) special function
12989register or has an 8-bit stack pointer, respectively.
12990The definition of these macros is affected by @code{-mmcu=} and
12991in the cases of @code{-mmcu=avr2} and @code{-mmcu=avr25} also
12992by @code{-msp8}.
12993
12994@item __AVR_HAVE_RAMPD__
12995@itemx __AVR_HAVE_RAMPX__
12996@itemx __AVR_HAVE_RAMPY__
12997@itemx __AVR_HAVE_RAMPZ__
12998The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
12999@code{RAMPZ} special function register, respectively.
13000
13001@item __NO_INTERRUPTS__
13002This macro reflects the @code{-mno-interrupts} command line option.
13003
13004@item __AVR_ERRATA_SKIP__
13005@itemx __AVR_ERRATA_SKIP_JMP_CALL__
13006Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
13007instructions because of a hardware erratum.  Skip instructions are
13008@code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
13009The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
13010set.
13011
13012@item __AVR_ISA_RMW__
13013The device has Read-Modify-Write instructions (XCH, LAC, LAS and LAT).
13014
13015@item __AVR_SFR_OFFSET__=@var{offset}
13016Instructions that can address I/O special function registers directly
13017like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
13018address as if addressed by an instruction to access RAM like @code{LD}
13019or @code{STS}. This offset depends on the device architecture and has
13020to be subtracted from the RAM address in order to get the
13021respective I/O@tie{}address.
13022
13023@item __WITH_AVRLIBC__
13024The compiler is configured to be used together with AVR-Libc.
13025See the @code{--with-avrlibc} configure option.
13026
13027@end table
13028
13029@node Blackfin Options
13030@subsection Blackfin Options
13031@cindex Blackfin Options
13032
13033@table @gcctabopt
13034@item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
13035@opindex mcpu=
13036Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
13037can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
13038@samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
13039@samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
13040@samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
13041@samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
13042@samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
13043@samp{bf561}, @samp{bf592}.
13044
13045The optional @var{sirevision} specifies the silicon revision of the target
13046Blackfin processor.  Any workarounds available for the targeted silicon revision
13047are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
13048If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
13049are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
13050hexadecimal digits representing the major and minor numbers in the silicon
13051revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
13052is not defined.  If @var{sirevision} is @samp{any}, the
13053@code{__SILICON_REVISION__} is defined to be @code{0xffff}.
13054If this optional @var{sirevision} is not used, GCC assumes the latest known
13055silicon revision of the targeted Blackfin processor.
13056
13057GCC defines a preprocessor macro for the specified @var{cpu}.
13058For the @samp{bfin-elf} toolchain, this option causes the hardware BSP
13059provided by libgloss to be linked in if @option{-msim} is not given.
13060
13061Without this option, @samp{bf532} is used as the processor by default.
13062
13063Note that support for @samp{bf561} is incomplete.  For @samp{bf561},
13064only the preprocessor macro is defined.
13065
13066@item -msim
13067@opindex msim
13068Specifies that the program will be run on the simulator.  This causes
13069the simulator BSP provided by libgloss to be linked in.  This option
13070has effect only for @samp{bfin-elf} toolchain.
13071Certain other options, such as @option{-mid-shared-library} and
13072@option{-mfdpic}, imply @option{-msim}.
13073
13074@item -momit-leaf-frame-pointer
13075@opindex momit-leaf-frame-pointer
13076Don't keep the frame pointer in a register for leaf functions.  This
13077avoids the instructions to save, set up and restore frame pointers and
13078makes an extra register available in leaf functions.  The option
13079@option{-fomit-frame-pointer} removes the frame pointer for all functions,
13080which might make debugging harder.
13081
13082@item -mspecld-anomaly
13083@opindex mspecld-anomaly
13084When enabled, the compiler ensures that the generated code does not
13085contain speculative loads after jump instructions. If this option is used,
13086@code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
13087
13088@item -mno-specld-anomaly
13089@opindex mno-specld-anomaly
13090Don't generate extra code to prevent speculative loads from occurring.
13091
13092@item -mcsync-anomaly
13093@opindex mcsync-anomaly
13094When enabled, the compiler ensures that the generated code does not
13095contain CSYNC or SSYNC instructions too soon after conditional branches.
13096If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
13097
13098@item -mno-csync-anomaly
13099@opindex mno-csync-anomaly
13100Don't generate extra code to prevent CSYNC or SSYNC instructions from
13101occurring too soon after a conditional branch.
13102
13103@item -mlow-64k
13104@opindex mlow-64k
13105When enabled, the compiler is free to take advantage of the knowledge that
13106the entire program fits into the low 64k of memory.
13107
13108@item -mno-low-64k
13109@opindex mno-low-64k
13110Assume that the program is arbitrarily large.  This is the default.
13111
13112@item -mstack-check-l1
13113@opindex mstack-check-l1
13114Do stack checking using information placed into L1 scratchpad memory by the
13115uClinux kernel.
13116
13117@item -mid-shared-library
13118@opindex mid-shared-library
13119Generate code that supports shared libraries via the library ID method.
13120This allows for execute in place and shared libraries in an environment
13121without virtual memory management.  This option implies @option{-fPIC}.
13122With a @samp{bfin-elf} target, this option implies @option{-msim}.
13123
13124@item -mno-id-shared-library
13125@opindex mno-id-shared-library
13126Generate code that doesn't assume ID-based shared libraries are being used.
13127This is the default.
13128
13129@item -mleaf-id-shared-library
13130@opindex mleaf-id-shared-library
13131Generate code that supports shared libraries via the library ID method,
13132but assumes that this library or executable won't link against any other
13133ID shared libraries.  That allows the compiler to use faster code for jumps
13134and calls.
13135
13136@item -mno-leaf-id-shared-library
13137@opindex mno-leaf-id-shared-library
13138Do not assume that the code being compiled won't link against any ID shared
13139libraries.  Slower code is generated for jump and call insns.
13140
13141@item -mshared-library-id=n
13142@opindex mshared-library-id
13143Specifies the identification number of the ID-based shared library being
13144compiled.  Specifying a value of 0 generates more compact code; specifying
13145other values forces the allocation of that number to the current
13146library but is no more space- or time-efficient than omitting this option.
13147
13148@item -msep-data
13149@opindex msep-data
13150Generate code that allows the data segment to be located in a different
13151area of memory from the text segment.  This allows for execute in place in
13152an environment without virtual memory management by eliminating relocations
13153against the text section.
13154
13155@item -mno-sep-data
13156@opindex mno-sep-data
13157Generate code that assumes that the data segment follows the text segment.
13158This is the default.
13159
13160@item -mlong-calls
13161@itemx -mno-long-calls
13162@opindex mlong-calls
13163@opindex mno-long-calls
13164Tells the compiler to perform function calls by first loading the
13165address of the function into a register and then performing a subroutine
13166call on this register.  This switch is needed if the target function
13167lies outside of the 24-bit addressing range of the offset-based
13168version of subroutine call instruction.
13169
13170This feature is not enabled by default.  Specifying
13171@option{-mno-long-calls} restores the default behavior.  Note these
13172switches have no effect on how the compiler generates code to handle
13173function calls via function pointers.
13174
13175@item -mfast-fp
13176@opindex mfast-fp
13177Link with the fast floating-point library. This library relaxes some of
13178the IEEE floating-point standard's rules for checking inputs against
13179Not-a-Number (NAN), in the interest of performance.
13180
13181@item -minline-plt
13182@opindex minline-plt
13183Enable inlining of PLT entries in function calls to functions that are
13184not known to bind locally.  It has no effect without @option{-mfdpic}.
13185
13186@item -mmulticore
13187@opindex mmulticore
13188Build a standalone application for multicore Blackfin processors.
13189This option causes proper start files and link scripts supporting
13190multicore to be used, and defines the macro @code{__BFIN_MULTICORE}.
13191It can only be used with @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}.
13192
13193This option can be used with @option{-mcorea} or @option{-mcoreb}, which
13194selects the one-application-per-core programming model.  Without
13195@option{-mcorea} or @option{-mcoreb}, the single-application/dual-core
13196programming model is used. In this model, the main function of Core B
13197should be named as @code{coreb_main}.
13198
13199If this option is not used, the single-core application programming
13200model is used.
13201
13202@item -mcorea
13203@opindex mcorea
13204Build a standalone application for Core A of BF561 when using
13205the one-application-per-core programming model. Proper start files
13206and link scripts are used to support Core A, and the macro
13207@code{__BFIN_COREA} is defined.
13208This option can only be used in conjunction with @option{-mmulticore}.
13209
13210@item -mcoreb
13211@opindex mcoreb
13212Build a standalone application for Core B of BF561 when using
13213the one-application-per-core programming model. Proper start files
13214and link scripts are used to support Core B, and the macro
13215@code{__BFIN_COREB} is defined. When this option is used, @code{coreb_main}
13216should be used instead of @code{main}.
13217This option can only be used in conjunction with @option{-mmulticore}.
13218
13219@item -msdram
13220@opindex msdram
13221Build a standalone application for SDRAM. Proper start files and
13222link scripts are used to put the application into SDRAM, and the macro
13223@code{__BFIN_SDRAM} is defined.
13224The loader should initialize SDRAM before loading the application.
13225
13226@item -micplb
13227@opindex micplb
13228Assume that ICPLBs are enabled at run time.  This has an effect on certain
13229anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
13230are enabled; for standalone applications the default is off.
13231@end table
13232
13233@node C6X Options
13234@subsection C6X Options
13235@cindex C6X Options
13236
13237@table @gcctabopt
13238@item -march=@var{name}
13239@opindex march
13240This specifies the name of the target architecture.  GCC uses this
13241name to determine what kind of instructions it can emit when generating
13242assembly code.  Permissible names are: @samp{c62x},
13243@samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.
13244
13245@item -mbig-endian
13246@opindex mbig-endian
13247Generate code for a big-endian target.
13248
13249@item -mlittle-endian
13250@opindex mlittle-endian
13251Generate code for a little-endian target.  This is the default.
13252
13253@item -msim
13254@opindex msim
13255Choose startup files and linker script suitable for the simulator.
13256
13257@item -msdata=default
13258@opindex msdata=default
13259Put small global and static data in the @samp{.neardata} section,
13260which is pointed to by register @code{B14}.  Put small uninitialized
13261global and static data in the @samp{.bss} section, which is adjacent
13262to the @samp{.neardata} section.  Put small read-only data into the
13263@samp{.rodata} section.  The corresponding sections used for large
13264pieces of data are @samp{.fardata}, @samp{.far} and @samp{.const}.
13265
13266@item -msdata=all
13267@opindex msdata=all
13268Put all data, not just small objects, into the sections reserved for
13269small data, and use addressing relative to the @code{B14} register to
13270access them.
13271
13272@item -msdata=none
13273@opindex msdata=none
13274Make no use of the sections reserved for small data, and use absolute
13275addresses to access all data.  Put all initialized global and static
13276data in the @samp{.fardata} section, and all uninitialized data in the
13277@samp{.far} section.  Put all constant data into the @samp{.const}
13278section.
13279@end table
13280
13281@node CRIS Options
13282@subsection CRIS Options
13283@cindex CRIS Options
13284
13285These options are defined specifically for the CRIS ports.
13286
13287@table @gcctabopt
13288@item -march=@var{architecture-type}
13289@itemx -mcpu=@var{architecture-type}
13290@opindex march
13291@opindex mcpu
13292Generate code for the specified architecture.  The choices for
13293@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
13294respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
13295Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
13296@samp{v10}.
13297
13298@item -mtune=@var{architecture-type}
13299@opindex mtune
13300Tune to @var{architecture-type} everything applicable about the generated
13301code, except for the ABI and the set of available instructions.  The
13302choices for @var{architecture-type} are the same as for
13303@option{-march=@var{architecture-type}}.
13304
13305@item -mmax-stack-frame=@var{n}
13306@opindex mmax-stack-frame
13307Warn when the stack frame of a function exceeds @var{n} bytes.
13308
13309@item -metrax4
13310@itemx -metrax100
13311@opindex metrax4
13312@opindex metrax100
13313The options @option{-metrax4} and @option{-metrax100} are synonyms for
13314@option{-march=v3} and @option{-march=v8} respectively.
13315
13316@item -mmul-bug-workaround
13317@itemx -mno-mul-bug-workaround
13318@opindex mmul-bug-workaround
13319@opindex mno-mul-bug-workaround
13320Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
13321models where it applies.  This option is active by default.
13322
13323@item -mpdebug
13324@opindex mpdebug
13325Enable CRIS-specific verbose debug-related information in the assembly
13326code.  This option also has the effect of turning off the @samp{#NO_APP}
13327formatted-code indicator to the assembler at the beginning of the
13328assembly file.
13329
13330@item -mcc-init
13331@opindex mcc-init
13332Do not use condition-code results from previous instruction; always emit
13333compare and test instructions before use of condition codes.
13334
13335@item -mno-side-effects
13336@opindex mno-side-effects
13337Do not emit instructions with side effects in addressing modes other than
13338post-increment.
13339
13340@item -mstack-align
13341@itemx -mno-stack-align
13342@itemx -mdata-align
13343@itemx -mno-data-align
13344@itemx -mconst-align
13345@itemx -mno-const-align
13346@opindex mstack-align
13347@opindex mno-stack-align
13348@opindex mdata-align
13349@opindex mno-data-align
13350@opindex mconst-align
13351@opindex mno-const-align
13352These options (@samp{no-} options) arrange (eliminate arrangements) for the
13353stack frame, individual data and constants to be aligned for the maximum
13354single data access size for the chosen CPU model.  The default is to
13355arrange for 32-bit alignment.  ABI details such as structure layout are
13356not affected by these options.
13357
13358@item -m32-bit
13359@itemx -m16-bit
13360@itemx -m8-bit
13361@opindex m32-bit
13362@opindex m16-bit
13363@opindex m8-bit
13364Similar to the stack- data- and const-align options above, these options
13365arrange for stack frame, writable data and constants to all be 32-bit,
1336616-bit or 8-bit aligned.  The default is 32-bit alignment.
13367
13368@item -mno-prologue-epilogue
13369@itemx -mprologue-epilogue
13370@opindex mno-prologue-epilogue
13371@opindex mprologue-epilogue
13372With @option{-mno-prologue-epilogue}, the normal function prologue and
13373epilogue which set up the stack frame are omitted and no return
13374instructions or return sequences are generated in the code.  Use this
13375option only together with visual inspection of the compiled code: no
13376warnings or errors are generated when call-saved registers must be saved,
13377or storage for local variables needs to be allocated.
13378
13379@item -mno-gotplt
13380@itemx -mgotplt
13381@opindex mno-gotplt
13382@opindex mgotplt
13383With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
13384instruction sequences that load addresses for functions from the PLT part
13385of the GOT rather than (traditional on other architectures) calls to the
13386PLT@.  The default is @option{-mgotplt}.
13387
13388@item -melf
13389@opindex melf
13390Legacy no-op option only recognized with the cris-axis-elf and
13391cris-axis-linux-gnu targets.
13392
13393@item -mlinux
13394@opindex mlinux
13395Legacy no-op option only recognized with the cris-axis-linux-gnu target.
13396
13397@item -sim
13398@opindex sim
13399This option, recognized for the cris-axis-elf, arranges
13400to link with input-output functions from a simulator library.  Code,
13401initialized data and zero-initialized data are allocated consecutively.
13402
13403@item -sim2
13404@opindex sim2
13405Like @option{-sim}, but pass linker options to locate initialized data at
134060x40000000 and zero-initialized data at 0x80000000.
13407@end table
13408
13409@node CR16 Options
13410@subsection CR16 Options
13411@cindex CR16 Options
13412
13413These options are defined specifically for the CR16 ports.
13414
13415@table @gcctabopt
13416
13417@item -mmac
13418@opindex mmac
13419Enable the use of multiply-accumulate instructions. Disabled by default.
13420
13421@item -mcr16cplus
13422@itemx -mcr16c
13423@opindex mcr16cplus
13424@opindex mcr16c
13425Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
13426is default.
13427
13428@item -msim
13429@opindex msim
13430Links the library libsim.a which is in compatible with simulator. Applicable
13431to ELF compiler only.
13432
13433@item -mint32
13434@opindex mint32
13435Choose integer type as 32-bit wide.
13436
13437@item -mbit-ops
13438@opindex mbit-ops
13439Generates @code{sbit}/@code{cbit} instructions for bit manipulations.
13440
13441@item -mdata-model=@var{model}
13442@opindex mdata-model
13443Choose a data model. The choices for @var{model} are @samp{near},
13444@samp{far} or @samp{medium}. @samp{medium} is default.
13445However, @samp{far} is not valid with @option{-mcr16c}, as the
13446CR16C architecture does not support the far data model.
13447@end table
13448
13449@node Darwin Options
13450@subsection Darwin Options
13451@cindex Darwin options
13452
13453These options are defined for all architectures running the Darwin operating
13454system.
13455
13456FSF GCC on Darwin does not create ``fat'' object files; it creates
13457an object file for the single architecture that GCC was built to
13458target.  Apple's GCC on Darwin does create ``fat'' files if multiple
13459@option{-arch} options are used; it does so by running the compiler or
13460linker multiple times and joining the results together with
13461@file{lipo}.
13462
13463The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
13464@samp{i686}) is determined by the flags that specify the ISA
13465that GCC is targeting, like @option{-mcpu} or @option{-march}.  The
13466@option{-force_cpusubtype_ALL} option can be used to override this.
13467
13468The Darwin tools vary in their behavior when presented with an ISA
13469mismatch.  The assembler, @file{as}, only permits instructions to
13470be used that are valid for the subtype of the file it is generating,
13471so you cannot put 64-bit instructions in a @samp{ppc750} object file.
13472The linker for shared libraries, @file{/usr/bin/libtool}, fails
13473and prints an error if asked to create a shared library with a less
13474restrictive subtype than its input files (for instance, trying to put
13475a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
13476for executables, @command{ld}, quietly gives the executable the most
13477restrictive subtype of any of its input files.
13478
13479@table @gcctabopt
13480@item -F@var{dir}
13481@opindex F
13482Add the framework directory @var{dir} to the head of the list of
13483directories to be searched for header files.  These directories are
13484interleaved with those specified by @option{-I} options and are
13485scanned in a left-to-right order.
13486
13487A framework directory is a directory with frameworks in it.  A
13488framework is a directory with a @file{Headers} and/or
13489@file{PrivateHeaders} directory contained directly in it that ends
13490in @file{.framework}.  The name of a framework is the name of this
13491directory excluding the @file{.framework}.  Headers associated with
13492the framework are found in one of those two directories, with
13493@file{Headers} being searched first.  A subframework is a framework
13494directory that is in a framework's @file{Frameworks} directory.
13495Includes of subframework headers can only appear in a header of a
13496framework that contains the subframework, or in a sibling subframework
13497header.  Two subframeworks are siblings if they occur in the same
13498framework.  A subframework should not have the same name as a
13499framework; a warning is issued if this is violated.  Currently a
13500subframework cannot have subframeworks; in the future, the mechanism
13501may be extended to support this.  The standard frameworks can be found
13502in @file{/System/Library/Frameworks} and
13503@file{/Library/Frameworks}.  An example include looks like
13504@code{#include <Framework/header.h>}, where @file{Framework} denotes
13505the name of the framework and @file{header.h} is found in the
13506@file{PrivateHeaders} or @file{Headers} directory.
13507
13508@item -iframework@var{dir}
13509@opindex iframework
13510Like @option{-F} except the directory is a treated as a system
13511directory.  The main difference between this @option{-iframework} and
13512@option{-F} is that with @option{-iframework} the compiler does not
13513warn about constructs contained within header files found via
13514@var{dir}.  This option is valid only for the C family of languages.
13515
13516@item -gused
13517@opindex gused
13518Emit debugging information for symbols that are used.  For stabs
13519debugging format, this enables @option{-feliminate-unused-debug-symbols}.
13520This is by default ON@.
13521
13522@item -gfull
13523@opindex gfull
13524Emit debugging information for all symbols and types.
13525
13526@item -mmacosx-version-min=@var{version}
13527The earliest version of MacOS X that this executable will run on
13528is @var{version}.  Typical values of @var{version} include @code{10.1},
13529@code{10.2}, and @code{10.3.9}.
13530
13531If the compiler was built to use the system's headers by default,
13532then the default for this option is the system version on which the
13533compiler is running, otherwise the default is to make choices that
13534are compatible with as many systems and code bases as possible.
13535
13536@item -mkernel
13537@opindex mkernel
13538Enable kernel development mode.  The @option{-mkernel} option sets
13539@option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
13540@option{-fno-exceptions}, @option{-fno-non-call-exceptions},
13541@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
13542applicable.  This mode also sets @option{-mno-altivec},
13543@option{-msoft-float}, @option{-fno-builtin} and
13544@option{-mlong-branch} for PowerPC targets.
13545
13546@item -mone-byte-bool
13547@opindex mone-byte-bool
13548Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
13549By default @samp{sizeof(bool)} is @samp{4} when compiling for
13550Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
13551option has no effect on x86.
13552
13553@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
13554to generate code that is not binary compatible with code generated
13555without that switch.  Using this switch may require recompiling all
13556other modules in a program, including system libraries.  Use this
13557switch to conform to a non-default data model.
13558
13559@item -mfix-and-continue
13560@itemx -ffix-and-continue
13561@itemx -findirect-data
13562@opindex mfix-and-continue
13563@opindex ffix-and-continue
13564@opindex findirect-data
13565Generate code suitable for fast turnaround development, such as to
13566allow GDB to dynamically load @code{.o} files into already-running
13567programs.  @option{-findirect-data} and @option{-ffix-and-continue}
13568are provided for backwards compatibility.
13569
13570@item -all_load
13571@opindex all_load
13572Loads all members of static archive libraries.
13573See man ld(1) for more information.
13574
13575@item -arch_errors_fatal
13576@opindex arch_errors_fatal
13577Cause the errors having to do with files that have the wrong architecture
13578to be fatal.
13579
13580@item -bind_at_load
13581@opindex bind_at_load
13582Causes the output file to be marked such that the dynamic linker will
13583bind all undefined references when the file is loaded or launched.
13584
13585@item -bundle
13586@opindex bundle
13587Produce a Mach-o bundle format file.
13588See man ld(1) for more information.
13589
13590@item -bundle_loader @var{executable}
13591@opindex bundle_loader
13592This option specifies the @var{executable} that will load the build
13593output file being linked.  See man ld(1) for more information.
13594
13595@item -dynamiclib
13596@opindex dynamiclib
13597When passed this option, GCC produces a dynamic library instead of
13598an executable when linking, using the Darwin @file{libtool} command.
13599
13600@item -force_cpusubtype_ALL
13601@opindex force_cpusubtype_ALL
13602This causes GCC's output file to have the @var{ALL} subtype, instead of
13603one controlled by the @option{-mcpu} or @option{-march} option.
13604
13605@item -allowable_client  @var{client_name}
13606@itemx -client_name
13607@itemx -compatibility_version
13608@itemx -current_version
13609@itemx -dead_strip
13610@itemx -dependency-file
13611@itemx -dylib_file
13612@itemx -dylinker_install_name
13613@itemx -dynamic
13614@itemx -exported_symbols_list
13615@itemx -filelist
13616@need 800
13617@itemx -flat_namespace
13618@itemx -force_flat_namespace
13619@itemx -headerpad_max_install_names
13620@itemx -image_base
13621@itemx -init
13622@itemx -install_name
13623@itemx -keep_private_externs
13624@itemx -multi_module
13625@itemx -multiply_defined
13626@itemx -multiply_defined_unused
13627@need 800
13628@itemx -noall_load
13629@itemx -no_dead_strip_inits_and_terms
13630@itemx -nofixprebinding
13631@itemx -nomultidefs
13632@itemx -noprebind
13633@itemx -noseglinkedit
13634@itemx -pagezero_size
13635@itemx -prebind
13636@itemx -prebind_all_twolevel_modules
13637@itemx -private_bundle
13638@need 800
13639@itemx -read_only_relocs
13640@itemx -sectalign
13641@itemx -sectobjectsymbols
13642@itemx -whyload
13643@itemx -seg1addr
13644@itemx -sectcreate
13645@itemx -sectobjectsymbols
13646@itemx -sectorder
13647@itemx -segaddr
13648@itemx -segs_read_only_addr
13649@need 800
13650@itemx -segs_read_write_addr
13651@itemx -seg_addr_table
13652@itemx -seg_addr_table_filename
13653@itemx -seglinkedit
13654@itemx -segprot
13655@itemx -segs_read_only_addr
13656@itemx -segs_read_write_addr
13657@itemx -single_module
13658@itemx -static
13659@itemx -sub_library
13660@need 800
13661@itemx -sub_umbrella
13662@itemx -twolevel_namespace
13663@itemx -umbrella
13664@itemx -undefined
13665@itemx -unexported_symbols_list
13666@itemx -weak_reference_mismatches
13667@itemx -whatsloaded
13668@opindex allowable_client
13669@opindex client_name
13670@opindex compatibility_version
13671@opindex current_version
13672@opindex dead_strip
13673@opindex dependency-file
13674@opindex dylib_file
13675@opindex dylinker_install_name
13676@opindex dynamic
13677@opindex exported_symbols_list
13678@opindex filelist
13679@opindex flat_namespace
13680@opindex force_flat_namespace
13681@opindex headerpad_max_install_names
13682@opindex image_base
13683@opindex init
13684@opindex install_name
13685@opindex keep_private_externs
13686@opindex multi_module
13687@opindex multiply_defined
13688@opindex multiply_defined_unused
13689@opindex noall_load
13690@opindex no_dead_strip_inits_and_terms
13691@opindex nofixprebinding
13692@opindex nomultidefs
13693@opindex noprebind
13694@opindex noseglinkedit
13695@opindex pagezero_size
13696@opindex prebind
13697@opindex prebind_all_twolevel_modules
13698@opindex private_bundle
13699@opindex read_only_relocs
13700@opindex sectalign
13701@opindex sectobjectsymbols
13702@opindex whyload
13703@opindex seg1addr
13704@opindex sectcreate
13705@opindex sectobjectsymbols
13706@opindex sectorder
13707@opindex segaddr
13708@opindex segs_read_only_addr
13709@opindex segs_read_write_addr
13710@opindex seg_addr_table
13711@opindex seg_addr_table_filename
13712@opindex seglinkedit
13713@opindex segprot
13714@opindex segs_read_only_addr
13715@opindex segs_read_write_addr
13716@opindex single_module
13717@opindex static
13718@opindex sub_library
13719@opindex sub_umbrella
13720@opindex twolevel_namespace
13721@opindex umbrella
13722@opindex undefined
13723@opindex unexported_symbols_list
13724@opindex weak_reference_mismatches
13725@opindex whatsloaded
13726These options are passed to the Darwin linker.  The Darwin linker man page
13727describes them in detail.
13728@end table
13729
13730@node DEC Alpha Options
13731@subsection DEC Alpha Options
13732
13733These @samp{-m} options are defined for the DEC Alpha implementations:
13734
13735@table @gcctabopt
13736@item -mno-soft-float
13737@itemx -msoft-float
13738@opindex mno-soft-float
13739@opindex msoft-float
13740Use (do not use) the hardware floating-point instructions for
13741floating-point operations.  When @option{-msoft-float} is specified,
13742functions in @file{libgcc.a} are used to perform floating-point
13743operations.  Unless they are replaced by routines that emulate the
13744floating-point operations, or compiled in such a way as to call such
13745emulations routines, these routines issue floating-point
13746operations.   If you are compiling for an Alpha without floating-point
13747operations, you must ensure that the library is built so as not to call
13748them.
13749
13750Note that Alpha implementations without floating-point operations are
13751required to have floating-point registers.
13752
13753@item -mfp-reg
13754@itemx -mno-fp-regs
13755@opindex mfp-reg
13756@opindex mno-fp-regs
13757Generate code that uses (does not use) the floating-point register set.
13758@option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
13759register set is not used, floating-point operands are passed in integer
13760registers as if they were integers and floating-point results are passed
13761in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
13762so any function with a floating-point argument or return value called by code
13763compiled with @option{-mno-fp-regs} must also be compiled with that
13764option.
13765
13766A typical use of this option is building a kernel that does not use,
13767and hence need not save and restore, any floating-point registers.
13768
13769@item -mieee
13770@opindex mieee
13771The Alpha architecture implements floating-point hardware optimized for
13772maximum performance.  It is mostly compliant with the IEEE floating-point
13773standard.  However, for full compliance, software assistance is
13774required.  This option generates code fully IEEE-compliant code
13775@emph{except} that the @var{inexact-flag} is not maintained (see below).
13776If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
13777defined during compilation.  The resulting code is less efficient but is
13778able to correctly support denormalized numbers and exceptional IEEE
13779values such as not-a-number and plus/minus infinity.  Other Alpha
13780compilers call this option @option{-ieee_with_no_inexact}.
13781
13782@item -mieee-with-inexact
13783@opindex mieee-with-inexact
13784This is like @option{-mieee} except the generated code also maintains
13785the IEEE @var{inexact-flag}.  Turning on this option causes the
13786generated code to implement fully-compliant IEEE math.  In addition to
13787@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
13788macro.  On some Alpha implementations the resulting code may execute
13789significantly slower than the code generated by default.  Since there is
13790very little code that depends on the @var{inexact-flag}, you should
13791normally not specify this option.  Other Alpha compilers call this
13792option @option{-ieee_with_inexact}.
13793
13794@item -mfp-trap-mode=@var{trap-mode}
13795@opindex mfp-trap-mode
13796This option controls what floating-point related traps are enabled.
13797Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
13798The trap mode can be set to one of four values:
13799
13800@table @samp
13801@item n
13802This is the default (normal) setting.  The only traps that are enabled
13803are the ones that cannot be disabled in software (e.g., division by zero
13804trap).
13805
13806@item u
13807In addition to the traps enabled by @samp{n}, underflow traps are enabled
13808as well.
13809
13810@item su
13811Like @samp{u}, but the instructions are marked to be safe for software
13812completion (see Alpha architecture manual for details).
13813
13814@item sui
13815Like @samp{su}, but inexact traps are enabled as well.
13816@end table
13817
13818@item -mfp-rounding-mode=@var{rounding-mode}
13819@opindex mfp-rounding-mode
13820Selects the IEEE rounding mode.  Other Alpha compilers call this option
13821@option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
13822of:
13823
13824@table @samp
13825@item n
13826Normal IEEE rounding mode.  Floating-point numbers are rounded towards
13827the nearest machine number or towards the even machine number in case
13828of a tie.
13829
13830@item m
13831Round towards minus infinity.
13832
13833@item c
13834Chopped rounding mode.  Floating-point numbers are rounded towards zero.
13835
13836@item d
13837Dynamic rounding mode.  A field in the floating-point control register
13838(@var{fpcr}, see Alpha architecture reference manual) controls the
13839rounding mode in effect.  The C library initializes this register for
13840rounding towards plus infinity.  Thus, unless your program modifies the
13841@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
13842@end table
13843
13844@item -mtrap-precision=@var{trap-precision}
13845@opindex mtrap-precision
13846In the Alpha architecture, floating-point traps are imprecise.  This
13847means without software assistance it is impossible to recover from a
13848floating trap and program execution normally needs to be terminated.
13849GCC can generate code that can assist operating system trap handlers
13850in determining the exact location that caused a floating-point trap.
13851Depending on the requirements of an application, different levels of
13852precisions can be selected:
13853
13854@table @samp
13855@item p
13856Program precision.  This option is the default and means a trap handler
13857can only identify which program caused a floating-point exception.
13858
13859@item f
13860Function precision.  The trap handler can determine the function that
13861caused a floating-point exception.
13862
13863@item i
13864Instruction precision.  The trap handler can determine the exact
13865instruction that caused a floating-point exception.
13866@end table
13867
13868Other Alpha compilers provide the equivalent options called
13869@option{-scope_safe} and @option{-resumption_safe}.
13870
13871@item -mieee-conformant
13872@opindex mieee-conformant
13873This option marks the generated code as IEEE conformant.  You must not
13874use this option unless you also specify @option{-mtrap-precision=i} and either
13875@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
13876is to emit the line @samp{.eflag 48} in the function prologue of the
13877generated assembly file.
13878
13879@item -mbuild-constants
13880@opindex mbuild-constants
13881Normally GCC examines a 32- or 64-bit integer constant to
13882see if it can construct it from smaller constants in two or three
13883instructions.  If it cannot, it outputs the constant as a literal and
13884generates code to load it from the data segment at run time.
13885
13886Use this option to require GCC to construct @emph{all} integer constants
13887using code, even if it takes more instructions (the maximum is six).
13888
13889You typically use this option to build a shared library dynamic
13890loader.  Itself a shared library, it must relocate itself in memory
13891before it can find the variables and constants in its own data segment.
13892
13893@item -mbwx
13894@itemx -mno-bwx
13895@itemx -mcix
13896@itemx -mno-cix
13897@itemx -mfix
13898@itemx -mno-fix
13899@itemx -mmax
13900@itemx -mno-max
13901@opindex mbwx
13902@opindex mno-bwx
13903@opindex mcix
13904@opindex mno-cix
13905@opindex mfix
13906@opindex mno-fix
13907@opindex mmax
13908@opindex mno-max
13909Indicate whether GCC should generate code to use the optional BWX,
13910CIX, FIX and MAX instruction sets.  The default is to use the instruction
13911sets supported by the CPU type specified via @option{-mcpu=} option or that
13912of the CPU on which GCC was built if none is specified.
13913
13914@item -mfloat-vax
13915@itemx -mfloat-ieee
13916@opindex mfloat-vax
13917@opindex mfloat-ieee
13918Generate code that uses (does not use) VAX F and G floating-point
13919arithmetic instead of IEEE single and double precision.
13920
13921@item -mexplicit-relocs
13922@itemx -mno-explicit-relocs
13923@opindex mexplicit-relocs
13924@opindex mno-explicit-relocs
13925Older Alpha assemblers provided no way to generate symbol relocations
13926except via assembler macros.  Use of these macros does not allow
13927optimal instruction scheduling.  GNU binutils as of version 2.12
13928supports a new syntax that allows the compiler to explicitly mark
13929which relocations should apply to which instructions.  This option
13930is mostly useful for debugging, as GCC detects the capabilities of
13931the assembler when it is built and sets the default accordingly.
13932
13933@item -msmall-data
13934@itemx -mlarge-data
13935@opindex msmall-data
13936@opindex mlarge-data
13937When @option{-mexplicit-relocs} is in effect, static data is
13938accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
13939is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
13940(the @code{.sdata} and @code{.sbss} sections) and are accessed via
1394116-bit relocations off of the @code{$gp} register.  This limits the
13942size of the small data area to 64KB, but allows the variables to be
13943directly accessed via a single instruction.
13944
13945The default is @option{-mlarge-data}.  With this option the data area
13946is limited to just below 2GB@.  Programs that require more than 2GB of
13947data must use @code{malloc} or @code{mmap} to allocate the data in the
13948heap instead of in the program's data segment.
13949
13950When generating code for shared libraries, @option{-fpic} implies
13951@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
13952
13953@item -msmall-text
13954@itemx -mlarge-text
13955@opindex msmall-text
13956@opindex mlarge-text
13957When @option{-msmall-text} is used, the compiler assumes that the
13958code of the entire program (or shared library) fits in 4MB, and is
13959thus reachable with a branch instruction.  When @option{-msmall-data}
13960is used, the compiler can assume that all local symbols share the
13961same @code{$gp} value, and thus reduce the number of instructions
13962required for a function call from 4 to 1.
13963
13964The default is @option{-mlarge-text}.
13965
13966@item -mcpu=@var{cpu_type}
13967@opindex mcpu
13968Set the instruction set and instruction scheduling parameters for
13969machine type @var{cpu_type}.  You can specify either the @samp{EV}
13970style name or the corresponding chip number.  GCC supports scheduling
13971parameters for the EV4, EV5 and EV6 family of processors and
13972chooses the default values for the instruction set from the processor
13973you specify.  If you do not specify a processor type, GCC defaults
13974to the processor on which the compiler was built.
13975
13976Supported values for @var{cpu_type} are
13977
13978@table @samp
13979@item ev4
13980@itemx ev45
13981@itemx 21064
13982Schedules as an EV4 and has no instruction set extensions.
13983
13984@item ev5
13985@itemx 21164
13986Schedules as an EV5 and has no instruction set extensions.
13987
13988@item ev56
13989@itemx 21164a
13990Schedules as an EV5 and supports the BWX extension.
13991
13992@item pca56
13993@itemx 21164pc
13994@itemx 21164PC
13995Schedules as an EV5 and supports the BWX and MAX extensions.
13996
13997@item ev6
13998@itemx 21264
13999Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
14000
14001@item ev67
14002@itemx 21264a
14003Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
14004@end table
14005
14006Native toolchains also support the value @samp{native},
14007which selects the best architecture option for the host processor.
14008@option{-mcpu=native} has no effect if GCC does not recognize
14009the processor.
14010
14011@item -mtune=@var{cpu_type}
14012@opindex mtune
14013Set only the instruction scheduling parameters for machine type
14014@var{cpu_type}.  The instruction set is not changed.
14015
14016Native toolchains also support the value @samp{native},
14017which selects the best architecture option for the host processor.
14018@option{-mtune=native} has no effect if GCC does not recognize
14019the processor.
14020
14021@item -mmemory-latency=@var{time}
14022@opindex mmemory-latency
14023Sets the latency the scheduler should assume for typical memory
14024references as seen by the application.  This number is highly
14025dependent on the memory access patterns used by the application
14026and the size of the external cache on the machine.
14027
14028Valid options for @var{time} are
14029
14030@table @samp
14031@item @var{number}
14032A decimal number representing clock cycles.
14033
14034@item L1
14035@itemx L2
14036@itemx L3
14037@itemx main
14038The compiler contains estimates of the number of clock cycles for
14039``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
14040(also called Dcache, Scache, and Bcache), as well as to main memory.
14041Note that L3 is only valid for EV5.
14042
14043@end table
14044@end table
14045
14046@node FR30 Options
14047@subsection FR30 Options
14048@cindex FR30 Options
14049
14050These options are defined specifically for the FR30 port.
14051
14052@table @gcctabopt
14053
14054@item -msmall-model
14055@opindex msmall-model
14056Use the small address space model.  This can produce smaller code, but
14057it does assume that all symbolic values and addresses fit into a
1405820-bit range.
14059
14060@item -mno-lsim
14061@opindex mno-lsim
14062Assume that runtime support has been provided and so there is no need
14063to include the simulator library (@file{libsim.a}) on the linker
14064command line.
14065
14066@end table
14067
14068@node FRV Options
14069@subsection FRV Options
14070@cindex FRV Options
14071
14072@table @gcctabopt
14073@item -mgpr-32
14074@opindex mgpr-32
14075
14076Only use the first 32 general-purpose registers.
14077
14078@item -mgpr-64
14079@opindex mgpr-64
14080
14081Use all 64 general-purpose registers.
14082
14083@item -mfpr-32
14084@opindex mfpr-32
14085
14086Use only the first 32 floating-point registers.
14087
14088@item -mfpr-64
14089@opindex mfpr-64
14090
14091Use all 64 floating-point registers.
14092
14093@item -mhard-float
14094@opindex mhard-float
14095
14096Use hardware instructions for floating-point operations.
14097
14098@item -msoft-float
14099@opindex msoft-float
14100
14101Use library routines for floating-point operations.
14102
14103@item -malloc-cc
14104@opindex malloc-cc
14105
14106Dynamically allocate condition code registers.
14107
14108@item -mfixed-cc
14109@opindex mfixed-cc
14110
14111Do not try to dynamically allocate condition code registers, only
14112use @code{icc0} and @code{fcc0}.
14113
14114@item -mdword
14115@opindex mdword
14116
14117Change ABI to use double word insns.
14118
14119@item -mno-dword
14120@opindex mno-dword
14121
14122Do not use double word instructions.
14123
14124@item -mdouble
14125@opindex mdouble
14126
14127Use floating-point double instructions.
14128
14129@item -mno-double
14130@opindex mno-double
14131
14132Do not use floating-point double instructions.
14133
14134@item -mmedia
14135@opindex mmedia
14136
14137Use media instructions.
14138
14139@item -mno-media
14140@opindex mno-media
14141
14142Do not use media instructions.
14143
14144@item -mmuladd
14145@opindex mmuladd
14146
14147Use multiply and add/subtract instructions.
14148
14149@item -mno-muladd
14150@opindex mno-muladd
14151
14152Do not use multiply and add/subtract instructions.
14153
14154@item -mfdpic
14155@opindex mfdpic
14156
14157Select the FDPIC ABI, which uses function descriptors to represent
14158pointers to functions.  Without any PIC/PIE-related options, it
14159implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
14160assumes GOT entries and small data are within a 12-bit range from the
14161GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
14162are computed with 32 bits.
14163With a @samp{bfin-elf} target, this option implies @option{-msim}.
14164
14165@item -minline-plt
14166@opindex minline-plt
14167
14168Enable inlining of PLT entries in function calls to functions that are
14169not known to bind locally.  It has no effect without @option{-mfdpic}.
14170It's enabled by default if optimizing for speed and compiling for
14171shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
14172optimization option such as @option{-O3} or above is present in the
14173command line.
14174
14175@item -mTLS
14176@opindex mTLS
14177
14178Assume a large TLS segment when generating thread-local code.
14179
14180@item -mtls
14181@opindex mtls
14182
14183Do not assume a large TLS segment when generating thread-local code.
14184
14185@item -mgprel-ro
14186@opindex mgprel-ro
14187
14188Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
14189that is known to be in read-only sections.  It's enabled by default,
14190except for @option{-fpic} or @option{-fpie}: even though it may help
14191make the global offset table smaller, it trades 1 instruction for 4.
14192With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
14193one of which may be shared by multiple symbols, and it avoids the need
14194for a GOT entry for the referenced symbol, so it's more likely to be a
14195win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
14196
14197@item -multilib-library-pic
14198@opindex multilib-library-pic
14199
14200Link with the (library, not FD) pic libraries.  It's implied by
14201@option{-mlibrary-pic}, as well as by @option{-fPIC} and
14202@option{-fpic} without @option{-mfdpic}.  You should never have to use
14203it explicitly.
14204
14205@item -mlinked-fp
14206@opindex mlinked-fp
14207
14208Follow the EABI requirement of always creating a frame pointer whenever
14209a stack frame is allocated.  This option is enabled by default and can
14210be disabled with @option{-mno-linked-fp}.
14211
14212@item -mlong-calls
14213@opindex mlong-calls
14214
14215Use indirect addressing to call functions outside the current
14216compilation unit.  This allows the functions to be placed anywhere
14217within the 32-bit address space.
14218
14219@item -malign-labels
14220@opindex malign-labels
14221
14222Try to align labels to an 8-byte boundary by inserting NOPs into the
14223previous packet.  This option only has an effect when VLIW packing
14224is enabled.  It doesn't create new packets; it merely adds NOPs to
14225existing ones.
14226
14227@item -mlibrary-pic
14228@opindex mlibrary-pic
14229
14230Generate position-independent EABI code.
14231
14232@item -macc-4
14233@opindex macc-4
14234
14235Use only the first four media accumulator registers.
14236
14237@item -macc-8
14238@opindex macc-8
14239
14240Use all eight media accumulator registers.
14241
14242@item -mpack
14243@opindex mpack
14244
14245Pack VLIW instructions.
14246
14247@item -mno-pack
14248@opindex mno-pack
14249
14250Do not pack VLIW instructions.
14251
14252@item -mno-eflags
14253@opindex mno-eflags
14254
14255Do not mark ABI switches in e_flags.
14256
14257@item -mcond-move
14258@opindex mcond-move
14259
14260Enable the use of conditional-move instructions (default).
14261
14262This switch is mainly for debugging the compiler and will likely be removed
14263in a future version.
14264
14265@item -mno-cond-move
14266@opindex mno-cond-move
14267
14268Disable the use of conditional-move instructions.
14269
14270This switch is mainly for debugging the compiler and will likely be removed
14271in a future version.
14272
14273@item -mscc
14274@opindex mscc
14275
14276Enable the use of conditional set instructions (default).
14277
14278This switch is mainly for debugging the compiler and will likely be removed
14279in a future version.
14280
14281@item -mno-scc
14282@opindex mno-scc
14283
14284Disable the use of conditional set instructions.
14285
14286This switch is mainly for debugging the compiler and will likely be removed
14287in a future version.
14288
14289@item -mcond-exec
14290@opindex mcond-exec
14291
14292Enable the use of conditional execution (default).
14293
14294This switch is mainly for debugging the compiler and will likely be removed
14295in a future version.
14296
14297@item -mno-cond-exec
14298@opindex mno-cond-exec
14299
14300Disable the use of conditional execution.
14301
14302This switch is mainly for debugging the compiler and will likely be removed
14303in a future version.
14304
14305@item -mvliw-branch
14306@opindex mvliw-branch
14307
14308Run a pass to pack branches into VLIW instructions (default).
14309
14310This switch is mainly for debugging the compiler and will likely be removed
14311in a future version.
14312
14313@item -mno-vliw-branch
14314@opindex mno-vliw-branch
14315
14316Do not run a pass to pack branches into VLIW instructions.
14317
14318This switch is mainly for debugging the compiler and will likely be removed
14319in a future version.
14320
14321@item -mmulti-cond-exec
14322@opindex mmulti-cond-exec
14323
14324Enable optimization of @code{&&} and @code{||} in conditional execution
14325(default).
14326
14327This switch is mainly for debugging the compiler and will likely be removed
14328in a future version.
14329
14330@item -mno-multi-cond-exec
14331@opindex mno-multi-cond-exec
14332
14333Disable optimization of @code{&&} and @code{||} in conditional execution.
14334
14335This switch is mainly for debugging the compiler and will likely be removed
14336in a future version.
14337
14338@item -mnested-cond-exec
14339@opindex mnested-cond-exec
14340
14341Enable nested conditional execution optimizations (default).
14342
14343This switch is mainly for debugging the compiler and will likely be removed
14344in a future version.
14345
14346@item -mno-nested-cond-exec
14347@opindex mno-nested-cond-exec
14348
14349Disable nested conditional execution optimizations.
14350
14351This switch is mainly for debugging the compiler and will likely be removed
14352in a future version.
14353
14354@item -moptimize-membar
14355@opindex moptimize-membar
14356
14357This switch removes redundant @code{membar} instructions from the
14358compiler-generated code.  It is enabled by default.
14359
14360@item -mno-optimize-membar
14361@opindex mno-optimize-membar
14362
14363This switch disables the automatic removal of redundant @code{membar}
14364instructions from the generated code.
14365
14366@item -mtomcat-stats
14367@opindex mtomcat-stats
14368
14369Cause gas to print out tomcat statistics.
14370
14371@item -mcpu=@var{cpu}
14372@opindex mcpu
14373
14374Select the processor type for which to generate code.  Possible values are
14375@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
14376@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
14377
14378@end table
14379
14380@node GNU/Linux Options
14381@subsection GNU/Linux Options
14382
14383These @samp{-m} options are defined for GNU/Linux targets:
14384
14385@table @gcctabopt
14386@item -mglibc
14387@opindex mglibc
14388Use the GNU C library.  This is the default except
14389on @samp{*-*-linux-*uclibc*} and @samp{*-*-linux-*android*} targets.
14390
14391@item -muclibc
14392@opindex muclibc
14393Use uClibc C library.  This is the default on
14394@samp{*-*-linux-*uclibc*} targets.
14395
14396@item -mbionic
14397@opindex mbionic
14398Use Bionic C library.  This is the default on
14399@samp{*-*-linux-*android*} targets.
14400
14401@item -mandroid
14402@opindex mandroid
14403Compile code compatible with Android platform.  This is the default on
14404@samp{*-*-linux-*android*} targets.
14405
14406When compiling, this option enables @option{-mbionic}, @option{-fPIC},
14407@option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
14408this option makes the GCC driver pass Android-specific options to the linker.
14409Finally, this option causes the preprocessor macro @code{__ANDROID__}
14410to be defined.
14411
14412@item -tno-android-cc
14413@opindex tno-android-cc
14414Disable compilation effects of @option{-mandroid}, i.e., do not enable
14415@option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
14416@option{-fno-rtti} by default.
14417
14418@item -tno-android-ld
14419@opindex tno-android-ld
14420Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
14421linking options to the linker.
14422
14423@end table
14424
14425@node H8/300 Options
14426@subsection H8/300 Options
14427
14428These @samp{-m} options are defined for the H8/300 implementations:
14429
14430@table @gcctabopt
14431@item -mrelax
14432@opindex mrelax
14433Shorten some address references at link time, when possible; uses the
14434linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
14435ld, Using ld}, for a fuller description.
14436
14437@item -mh
14438@opindex mh
14439Generate code for the H8/300H@.
14440
14441@item -ms
14442@opindex ms
14443Generate code for the H8S@.
14444
14445@item -mn
14446@opindex mn
14447Generate code for the H8S and H8/300H in the normal mode.  This switch
14448must be used either with @option{-mh} or @option{-ms}.
14449
14450@item -ms2600
14451@opindex ms2600
14452Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
14453
14454@item -mexr
14455@opindex mexr
14456Extended registers are stored on stack before execution of function
14457with monitor attribute. Default option is @option{-mexr}.
14458This option is valid only for H8S targets.
14459
14460@item -mno-exr
14461@opindex mno-exr
14462Extended registers are not stored on stack before execution of function
14463with monitor attribute. Default option is @option{-mno-exr}.
14464This option is valid only for H8S targets.
14465
14466@item -mint32
14467@opindex mint32
14468Make @code{int} data 32 bits by default.
14469
14470@item -malign-300
14471@opindex malign-300
14472On the H8/300H and H8S, use the same alignment rules as for the H8/300.
14473The default for the H8/300H and H8S is to align longs and floats on
144744-byte boundaries.
14475@option{-malign-300} causes them to be aligned on 2-byte boundaries.
14476This option has no effect on the H8/300.
14477@end table
14478
14479@node HPPA Options
14480@subsection HPPA Options
14481@cindex HPPA Options
14482
14483These @samp{-m} options are defined for the HPPA family of computers:
14484
14485@table @gcctabopt
14486@item -march=@var{architecture-type}
14487@opindex march
14488Generate code for the specified architecture.  The choices for
14489@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
144901.1, and @samp{2.0} for PA 2.0 processors.  Refer to
14491@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
14492architecture option for your machine.  Code compiled for lower numbered
14493architectures runs on higher numbered architectures, but not the
14494other way around.
14495
14496@item -mpa-risc-1-0
14497@itemx -mpa-risc-1-1
14498@itemx -mpa-risc-2-0
14499@opindex mpa-risc-1-0
14500@opindex mpa-risc-1-1
14501@opindex mpa-risc-2-0
14502Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
14503
14504@item -mjump-in-delay
14505@opindex mjump-in-delay
14506Fill delay slots of function calls with unconditional jump instructions
14507by modifying the return pointer for the function call to be the target
14508of the conditional jump.
14509
14510@item -mdisable-fpregs
14511@opindex mdisable-fpregs
14512Prevent floating-point registers from being used in any manner.  This is
14513necessary for compiling kernels that perform lazy context switching of
14514floating-point registers.  If you use this option and attempt to perform
14515floating-point operations, the compiler aborts.
14516
14517@item -mdisable-indexing
14518@opindex mdisable-indexing
14519Prevent the compiler from using indexing address modes.  This avoids some
14520rather obscure problems when compiling MIG generated code under MACH@.
14521
14522@item -mno-space-regs
14523@opindex mno-space-regs
14524Generate code that assumes the target has no space registers.  This allows
14525GCC to generate faster indirect calls and use unscaled index address modes.
14526
14527Such code is suitable for level 0 PA systems and kernels.
14528
14529@item -mfast-indirect-calls
14530@opindex mfast-indirect-calls
14531Generate code that assumes calls never cross space boundaries.  This
14532allows GCC to emit code that performs faster indirect calls.
14533
14534This option does not work in the presence of shared libraries or nested
14535functions.
14536
14537@item -mfixed-range=@var{register-range}
14538@opindex mfixed-range
14539Generate code treating the given register range as fixed registers.
14540A fixed register is one that the register allocator cannot use.  This is
14541useful when compiling kernel code.  A register range is specified as
14542two registers separated by a dash.  Multiple register ranges can be
14543specified separated by a comma.
14544
14545@item -mlong-load-store
14546@opindex mlong-load-store
14547Generate 3-instruction load and store sequences as sometimes required by
14548the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
14549the HP compilers.
14550
14551@item -mportable-runtime
14552@opindex mportable-runtime
14553Use the portable calling conventions proposed by HP for ELF systems.
14554
14555@item -mgas
14556@opindex mgas
14557Enable the use of assembler directives only GAS understands.
14558
14559@item -mschedule=@var{cpu-type}
14560@opindex mschedule
14561Schedule code according to the constraints for the machine type
14562@var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
14563@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
14564to @file{/usr/lib/sched.models} on an HP-UX system to determine the
14565proper scheduling option for your machine.  The default scheduling is
14566@samp{8000}.
14567
14568@item -mlinker-opt
14569@opindex mlinker-opt
14570Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
14571debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
14572linkers in which they give bogus error messages when linking some programs.
14573
14574@item -msoft-float
14575@opindex msoft-float
14576Generate output containing library calls for floating point.
14577@strong{Warning:} the requisite libraries are not available for all HPPA
14578targets.  Normally the facilities of the machine's usual C compiler are
14579used, but this cannot be done directly in cross-compilation.  You must make
14580your own arrangements to provide suitable library functions for
14581cross-compilation.
14582
14583@option{-msoft-float} changes the calling convention in the output file;
14584therefore, it is only useful if you compile @emph{all} of a program with
14585this option.  In particular, you need to compile @file{libgcc.a}, the
14586library that comes with GCC, with @option{-msoft-float} in order for
14587this to work.
14588
14589@item -msio
14590@opindex msio
14591Generate the predefine, @code{_SIO}, for server IO@.  The default is
14592@option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
14593@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
14594options are available under HP-UX and HI-UX@.
14595
14596@item -mgnu-ld
14597@opindex mgnu-ld
14598Use options specific to GNU @command{ld}.
14599This passes @option{-shared} to @command{ld} when
14600building a shared library.  It is the default when GCC is configured,
14601explicitly or implicitly, with the GNU linker.  This option does not
14602affect which @command{ld} is called; it only changes what parameters
14603are passed to that @command{ld}.
14604The @command{ld} that is called is determined by the
14605@option{--with-ld} configure option, GCC's program search path, and
14606finally by the user's @env{PATH}.  The linker used by GCC can be printed
14607using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
14608on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
14609
14610@item -mhp-ld
14611@opindex mhp-ld
14612Use options specific to HP @command{ld}.
14613This passes @option{-b} to @command{ld} when building
14614a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
14615links.  It is the default when GCC is configured, explicitly or
14616implicitly, with the HP linker.  This option does not affect
14617which @command{ld} is called; it only changes what parameters are passed to that
14618@command{ld}.
14619The @command{ld} that is called is determined by the @option{--with-ld}
14620configure option, GCC's program search path, and finally by the user's
14621@env{PATH}.  The linker used by GCC can be printed using @samp{which
14622`gcc -print-prog-name=ld`}.  This option is only available on the 64-bit
14623HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
14624
14625@item -mlong-calls
14626@opindex mno-long-calls
14627Generate code that uses long call sequences.  This ensures that a call
14628is always able to reach linker generated stubs.  The default is to generate
14629long calls only when the distance from the call site to the beginning
14630of the function or translation unit, as the case may be, exceeds a
14631predefined limit set by the branch type being used.  The limits for
14632normal calls are 7,600,000 and 240,000 bytes, respectively for the
14633PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
14634240,000 bytes.
14635
14636Distances are measured from the beginning of functions when using the
14637@option{-ffunction-sections} option, or when using the @option{-mgas}
14638and @option{-mno-portable-runtime} options together under HP-UX with
14639the SOM linker.
14640
14641It is normally not desirable to use this option as it degrades
14642performance.  However, it may be useful in large applications,
14643particularly when partial linking is used to build the application.
14644
14645The types of long calls used depends on the capabilities of the
14646assembler and linker, and the type of code being generated.  The
14647impact on systems that support long absolute calls, and long pic
14648symbol-difference or pc-relative calls should be relatively small.
14649However, an indirect call is used on 32-bit ELF systems in pic code
14650and it is quite long.
14651
14652@item -munix=@var{unix-std}
14653@opindex march
14654Generate compiler predefines and select a startfile for the specified
14655UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
14656and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
14657is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
1465811.11 and later.  The default values are @samp{93} for HP-UX 10.00,
14659@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
14660and later.
14661
14662@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
14663@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
14664and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
14665@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
14666@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
14667@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
14668
14669It is @emph{important} to note that this option changes the interfaces
14670for various library routines.  It also affects the operational behavior
14671of the C library.  Thus, @emph{extreme} care is needed in using this
14672option.
14673
14674Library code that is intended to operate with more than one UNIX
14675standard must test, set and restore the variable @var{__xpg4_extended_mask}
14676as appropriate.  Most GNU software doesn't provide this capability.
14677
14678@item -nolibdld
14679@opindex nolibdld
14680Suppress the generation of link options to search libdld.sl when the
14681@option{-static} option is specified on HP-UX 10 and later.
14682
14683@item -static
14684@opindex static
14685The HP-UX implementation of setlocale in libc has a dependency on
14686libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14687when the @option{-static} option is specified, special link options
14688are needed to resolve this dependency.
14689
14690On HP-UX 10 and later, the GCC driver adds the necessary options to
14691link with libdld.sl when the @option{-static} option is specified.
14692This causes the resulting binary to be dynamic.  On the 64-bit port,
14693the linkers generate dynamic binaries by default in any case.  The
14694@option{-nolibdld} option can be used to prevent the GCC driver from
14695adding these link options.
14696
14697@item -threads
14698@opindex threads
14699Add support for multithreading with the @dfn{dce thread} library
14700under HP-UX@.  This option sets flags for both the preprocessor and
14701linker.
14702@end table
14703
14704@node i386 and x86-64 Options
14705@subsection Intel 386 and AMD x86-64 Options
14706@cindex i386 Options
14707@cindex x86-64 Options
14708@cindex Intel 386 Options
14709@cindex AMD x86-64 Options
14710
14711These @samp{-m} options are defined for the i386 and x86-64 family of
14712computers:
14713
14714@table @gcctabopt
14715
14716@item -march=@var{cpu-type}
14717@opindex march
14718Generate instructions for the machine type @var{cpu-type}.  In contrast to
14719@option{-mtune=@var{cpu-type}}, which merely tunes the generated code
14720for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
14721to generate code that may not run at all on processors other than the one
14722indicated.  Specifying @option{-march=@var{cpu-type}} implies
14723@option{-mtune=@var{cpu-type}}.
14724
14725The choices for @var{cpu-type} are:
14726
14727@table @samp
14728@item native
14729This selects the CPU to generate code for at compilation time by determining
14730the processor type of the compiling machine.  Using @option{-march=native}
14731enables all instruction subsets supported by the local machine (hence
14732the result might not run on different machines).  Using @option{-mtune=native}
14733produces code optimized for the local machine under the constraints
14734of the selected instruction set.
14735
14736@item i386
14737Original Intel i386 CPU@.
14738
14739@item i486
14740Intel i486 CPU@.  (No scheduling is implemented for this chip.)
14741
14742@item i586
14743@itemx pentium
14744Intel Pentium CPU with no MMX support.
14745
14746@item pentium-mmx
14747Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
14748
14749@item pentiumpro
14750Intel Pentium Pro CPU@.
14751
14752@item i686
14753When used with @option{-march}, the Pentium Pro
14754instruction set is used, so the code runs on all i686 family chips.
14755When used with @option{-mtune}, it has the same meaning as @samp{generic}.
14756
14757@item pentium2
14758Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
14759support.
14760
14761@item pentium3
14762@itemx pentium3m
14763Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
14764set support.
14765
14766@item pentium-m
14767Intel Pentium M; low-power version of Intel Pentium III CPU
14768with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.
14769
14770@item pentium4
14771@itemx pentium4m
14772Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.
14773
14774@item prescott
14775Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
14776set support.
14777
14778@item nocona
14779Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
14780SSE2 and SSE3 instruction set support.
14781
14782@item core2
14783Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
14784instruction set support.
14785
14786@item nehalem
14787Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
14788SSE4.1, SSE4.2 and POPCNT instruction set support.
14789
14790@item westmere
14791Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
14792SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction set support.
14793
14794@item sandybridge
14795Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
14796SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL instruction set support.
14797
14798@item ivybridge
14799Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
14800SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C
14801instruction set support.
14802
14803@item haswell
14804Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
14805SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
14806BMI, BMI2 and F16C instruction set support.
14807
14808@item broadwell
14809Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
14810SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
14811BMI, BMI2, F16C, RDSEED, ADCX and PREFETCHW instruction set support.
14812
14813@item bonnell
14814Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
14815instruction set support.
14816
14817@item silvermont
14818Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
14819SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and RDRND instruction set support.
14820
14821@item k6
14822AMD K6 CPU with MMX instruction set support.
14823
14824@item k6-2
14825@itemx k6-3
14826Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
14827
14828@item athlon
14829@itemx athlon-tbird
14830AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
14831support.
14832
14833@item athlon-4
14834@itemx athlon-xp
14835@itemx athlon-mp
14836Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
14837instruction set support.
14838
14839@item k8
14840@itemx opteron
14841@itemx athlon64
14842@itemx athlon-fx
14843Processors based on the AMD K8 core with x86-64 instruction set support,
14844including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
14845(This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
14846instruction set extensions.)
14847
14848@item k8-sse3
14849@itemx opteron-sse3
14850@itemx athlon64-sse3
14851Improved versions of AMD K8 cores with SSE3 instruction set support.
14852
14853@item amdfam10
14854@itemx barcelona
14855CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
14856supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
14857instruction set extensions.)
14858
14859@item bdver1
14860CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
14861supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
14862SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
14863@item bdver2
14864AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
14865supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX,
14866SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
14867extensions.)
14868@item bdver3
14869AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
14870supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES,
14871PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and
1487264-bit instruction set extensions.
14873@item bdver4
14874AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
14875supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP,
14876AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
14877SSE4.2, ABM and 64-bit instruction set extensions.
14878
14879@item btver1
14880CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
14881supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
14882instruction set extensions.)
14883
14884@item btver2
14885CPUs based on AMD Family 16h cores with x86-64 instruction set support. This
14886includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM,
14887SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set extensions.
14888
14889@item winchip-c6
14890IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
14891set support.
14892
14893@item winchip2
14894IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
14895instruction set support.
14896
14897@item c3
14898VIA C3 CPU with MMX and 3DNow!@: instruction set support.  (No scheduling is
14899implemented for this chip.)
14900
14901@item c3-2
14902VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
14903(No scheduling is
14904implemented for this chip.)
14905
14906@item geode
14907AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
14908@end table
14909
14910@item -mtune=@var{cpu-type}
14911@opindex mtune
14912Tune to @var{cpu-type} everything applicable about the generated code, except
14913for the ABI and the set of available instructions.
14914While picking a specific @var{cpu-type} schedules things appropriately
14915for that particular chip, the compiler does not generate any code that
14916cannot run on the default machine type unless you use a
14917@option{-march=@var{cpu-type}} option.
14918For example, if GCC is configured for i686-pc-linux-gnu
14919then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
14920but still runs on i686 machines.
14921
14922The choices for @var{cpu-type} are the same as for @option{-march}.
14923In addition, @option{-mtune} supports 2 extra choices for @var{cpu-type}:
14924
14925@table @samp
14926@item generic
14927Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
14928If you know the CPU on which your code will run, then you should use
14929the corresponding @option{-mtune} or @option{-march} option instead of
14930@option{-mtune=generic}.  But, if you do not know exactly what CPU users
14931of your application will have, then you should use this option.
14932
14933As new processors are deployed in the marketplace, the behavior of this
14934option will change.  Therefore, if you upgrade to a newer version of
14935GCC, code generation controlled by this option will change to reflect
14936the processors
14937that are most common at the time that version of GCC is released.
14938
14939There is no @option{-march=generic} option because @option{-march}
14940indicates the instruction set the compiler can use, and there is no
14941generic instruction set applicable to all processors.  In contrast,
14942@option{-mtune} indicates the processor (or, in this case, collection of
14943processors) for which the code is optimized.
14944
14945@item intel
14946Produce code optimized for the most current Intel processors, which are
14947Haswell and Silvermont for this version of GCC.  If you know the CPU
14948on which your code will run, then you should use the corresponding
14949@option{-mtune} or @option{-march} option instead of @option{-mtune=intel}.
14950But, if you want your application performs better on both Haswell and
14951Silvermont, then you should use this option.
14952
14953As new Intel processors are deployed in the marketplace, the behavior of
14954this option will change.  Therefore, if you upgrade to a newer version of
14955GCC, code generation controlled by this option will change to reflect
14956the most current Intel processors at the time that version of GCC is
14957released.
14958
14959There is no @option{-march=intel} option because @option{-march} indicates
14960the instruction set the compiler can use, and there is no common
14961instruction set applicable to all processors.  In contrast,
14962@option{-mtune} indicates the processor (or, in this case, collection of
14963processors) for which the code is optimized.
14964@end table
14965
14966@item -mcpu=@var{cpu-type}
14967@opindex mcpu
14968A deprecated synonym for @option{-mtune}.
14969
14970@item -mfpmath=@var{unit}
14971@opindex mfpmath
14972Generate floating-point arithmetic for selected unit @var{unit}.  The choices
14973for @var{unit} are:
14974
14975@table @samp
14976@item 387
14977Use the standard 387 floating-point coprocessor present on the majority of chips and
14978emulated otherwise.  Code compiled with this option runs almost everywhere.
14979The temporary results are computed in 80-bit precision instead of the precision
14980specified by the type, resulting in slightly different results compared to most
14981of other chips.  See @option{-ffloat-store} for more detailed description.
14982
14983This is the default choice for i386 compiler.
14984
14985@item sse
14986Use scalar floating-point instructions present in the SSE instruction set.
14987This instruction set is supported by Pentium III and newer chips,
14988and in the AMD line
14989by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
14990instruction set supports only single-precision arithmetic, thus the double and
14991extended-precision arithmetic are still done using 387.  A later version, present
14992only in Pentium 4 and AMD x86-64 chips, supports double-precision
14993arithmetic too.
14994
14995For the i386 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
14996or @option{-msse2} switches to enable SSE extensions and make this option
14997effective.  For the x86-64 compiler, these extensions are enabled by default.
14998
14999The resulting code should be considerably faster in the majority of cases and avoid
15000the numerical instability problems of 387 code, but may break some existing
15001code that expects temporaries to be 80 bits.
15002
15003This is the default choice for the x86-64 compiler.
15004
15005@item sse,387
15006@itemx sse+387
15007@itemx both
15008Attempt to utilize both instruction sets at once.  This effectively doubles the
15009amount of available registers, and on chips with separate execution units for
15010387 and SSE the execution resources too.  Use this option with care, as it is
15011still experimental, because the GCC register allocator does not model separate
15012functional units well, resulting in unstable performance.
15013@end table
15014
15015@item -masm=@var{dialect}
15016@opindex masm=@var{dialect}
15017Output assembly instructions using selected @var{dialect}.  Supported
15018choices are @samp{intel} or @samp{att} (the default).  Darwin does
15019not support @samp{intel}.
15020
15021@item -mieee-fp
15022@itemx -mno-ieee-fp
15023@opindex mieee-fp
15024@opindex mno-ieee-fp
15025Control whether or not the compiler uses IEEE floating-point
15026comparisons.  These correctly handle the case where the result of a
15027comparison is unordered.
15028
15029@item -msoft-float
15030@opindex msoft-float
15031Generate output containing library calls for floating point.
15032
15033@strong{Warning:} the requisite libraries are not part of GCC@.
15034Normally the facilities of the machine's usual C compiler are used, but
15035this can't be done directly in cross-compilation.  You must make your
15036own arrangements to provide suitable library functions for
15037cross-compilation.
15038
15039On machines where a function returns floating-point results in the 80387
15040register stack, some floating-point opcodes may be emitted even if
15041@option{-msoft-float} is used.
15042
15043@item -mno-fp-ret-in-387
15044@opindex mno-fp-ret-in-387
15045Do not use the FPU registers for return values of functions.
15046
15047The usual calling convention has functions return values of types
15048@code{float} and @code{double} in an FPU register, even if there
15049is no FPU@.  The idea is that the operating system should emulate
15050an FPU@.
15051
15052The option @option{-mno-fp-ret-in-387} causes such values to be returned
15053in ordinary CPU registers instead.
15054
15055@item -mno-fancy-math-387
15056@opindex mno-fancy-math-387
15057Some 387 emulators do not support the @code{sin}, @code{cos} and
15058@code{sqrt} instructions for the 387.  Specify this option to avoid
15059generating those instructions.  This option is the default on FreeBSD,
15060OpenBSD and NetBSD@.  This option is overridden when @option{-march}
15061indicates that the target CPU always has an FPU and so the
15062instruction does not need emulation.  These
15063instructions are not generated unless you also use the
15064@option{-funsafe-math-optimizations} switch.
15065
15066@item -malign-double
15067@itemx -mno-align-double
15068@opindex malign-double
15069@opindex mno-align-double
15070Control whether GCC aligns @code{double}, @code{long double}, and
15071@code{long long} variables on a two-word boundary or a one-word
15072boundary.  Aligning @code{double} variables on a two-word boundary
15073produces code that runs somewhat faster on a Pentium at the
15074expense of more memory.
15075
15076On x86-64, @option{-malign-double} is enabled by default.
15077
15078@strong{Warning:} if you use the @option{-malign-double} switch,
15079structures containing the above types are aligned differently than
15080the published application binary interface specifications for the 386
15081and are not binary compatible with structures in code compiled
15082without that switch.
15083
15084@item -m96bit-long-double
15085@itemx -m128bit-long-double
15086@opindex m96bit-long-double
15087@opindex m128bit-long-double
15088These switches control the size of @code{long double} type.  The i386
15089application binary interface specifies the size to be 96 bits,
15090so @option{-m96bit-long-double} is the default in 32-bit mode.
15091
15092Modern architectures (Pentium and newer) prefer @code{long double}
15093to be aligned to an 8- or 16-byte boundary.  In arrays or structures
15094conforming to the ABI, this is not possible.  So specifying
15095@option{-m128bit-long-double} aligns @code{long double}
15096to a 16-byte boundary by padding the @code{long double} with an additional
1509732-bit zero.
15098
15099In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
15100its ABI specifies that @code{long double} is aligned on 16-byte boundary.
15101
15102Notice that neither of these options enable any extra precision over the x87
15103standard of 80 bits for a @code{long double}.
15104
15105@strong{Warning:} if you override the default value for your target ABI, this
15106changes the size of
15107structures and arrays containing @code{long double} variables,
15108as well as modifying the function calling convention for functions taking
15109@code{long double}.  Hence they are not binary-compatible
15110with code compiled without that switch.
15111
15112@item -mlong-double-64
15113@itemx -mlong-double-80
15114@itemx -mlong-double-128
15115@opindex mlong-double-64
15116@opindex mlong-double-80
15117@opindex mlong-double-128
15118These switches control the size of @code{long double} type. A size
15119of 64 bits makes the @code{long double} type equivalent to the @code{double}
15120type. This is the default for 32-bit Bionic C library.  A size
15121of 128 bits makes the @code{long double} type equivalent to the
15122@code{__float128} type. This is the default for 64-bit Bionic C library.
15123
15124@strong{Warning:} if you override the default value for your target ABI, this
15125changes the size of
15126structures and arrays containing @code{long double} variables,
15127as well as modifying the function calling convention for functions taking
15128@code{long double}.  Hence they are not binary-compatible
15129with code compiled without that switch.
15130
15131@item -mlarge-data-threshold=@var{threshold}
15132@opindex mlarge-data-threshold
15133When @option{-mcmodel=medium} is specified, data objects larger than
15134@var{threshold} are placed in the large data section.  This value must be the
15135same across all objects linked into the binary, and defaults to 65535.
15136
15137@item -mrtd
15138@opindex mrtd
15139Use a different function-calling convention, in which functions that
15140take a fixed number of arguments return with the @code{ret @var{num}}
15141instruction, which pops their arguments while returning.  This saves one
15142instruction in the caller since there is no need to pop the arguments
15143there.
15144
15145You can specify that an individual function is called with this calling
15146sequence with the function attribute @samp{stdcall}.  You can also
15147override the @option{-mrtd} option by using the function attribute
15148@samp{cdecl}.  @xref{Function Attributes}.
15149
15150@strong{Warning:} this calling convention is incompatible with the one
15151normally used on Unix, so you cannot use it if you need to call
15152libraries compiled with the Unix compiler.
15153
15154Also, you must provide function prototypes for all functions that
15155take variable numbers of arguments (including @code{printf});
15156otherwise incorrect code is generated for calls to those
15157functions.
15158
15159In addition, seriously incorrect code results if you call a
15160function with too many arguments.  (Normally, extra arguments are
15161harmlessly ignored.)
15162
15163@item -mregparm=@var{num}
15164@opindex mregparm
15165Control how many registers are used to pass integer arguments.  By
15166default, no registers are used to pass arguments, and at most 3
15167registers can be used.  You can control this behavior for a specific
15168function by using the function attribute @samp{regparm}.
15169@xref{Function Attributes}.
15170
15171@strong{Warning:} if you use this switch, and
15172@var{num} is nonzero, then you must build all modules with the same
15173value, including any libraries.  This includes the system libraries and
15174startup modules.
15175
15176@item -msseregparm
15177@opindex msseregparm
15178Use SSE register passing conventions for float and double arguments
15179and return values.  You can control this behavior for a specific
15180function by using the function attribute @samp{sseregparm}.
15181@xref{Function Attributes}.
15182
15183@strong{Warning:} if you use this switch then you must build all
15184modules with the same value, including any libraries.  This includes
15185the system libraries and startup modules.
15186
15187@item -mvect8-ret-in-mem
15188@opindex mvect8-ret-in-mem
15189Return 8-byte vectors in memory instead of MMX registers.  This is the
15190default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun
15191Studio compilers until version 12.  Later compiler versions (starting
15192with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which
15193is the default on Solaris@tie{}10 and later.  @emph{Only} use this option if
15194you need to remain compatible with existing code produced by those
15195previous compiler versions or older versions of GCC@.
15196
15197@item -mpc32
15198@itemx -mpc64
15199@itemx -mpc80
15200@opindex mpc32
15201@opindex mpc64
15202@opindex mpc80
15203
15204Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
15205is specified, the significands of results of floating-point operations are
15206rounded to 24 bits (single precision); @option{-mpc64} rounds the
15207significands of results of floating-point operations to 53 bits (double
15208precision) and @option{-mpc80} rounds the significands of results of
15209floating-point operations to 64 bits (extended double precision), which is
15210the default.  When this option is used, floating-point operations in higher
15211precisions are not available to the programmer without setting the FPU
15212control word explicitly.
15213
15214Setting the rounding of floating-point operations to less than the default
1521580 bits can speed some programs by 2% or more.  Note that some mathematical
15216libraries assume that extended-precision (80-bit) floating-point operations
15217are enabled by default; routines in such libraries could suffer significant
15218loss of accuracy, typically through so-called ``catastrophic cancellation'',
15219when this option is used to set the precision to less than extended precision.
15220
15221@item -mstackrealign
15222@opindex mstackrealign
15223Realign the stack at entry.  On the Intel x86, the @option{-mstackrealign}
15224option generates an alternate prologue and epilogue that realigns the
15225run-time stack if necessary.  This supports mixing legacy codes that keep
152264-byte stack alignment with modern codes that keep 16-byte stack alignment for
15227SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
15228applicable to individual functions.
15229
15230@item -mpreferred-stack-boundary=@var{num}
15231@opindex mpreferred-stack-boundary
15232Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
15233byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
15234the default is 4 (16 bytes or 128 bits).
15235
15236@strong{Warning:} When generating code for the x86-64 architecture with
15237SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
15238used to keep the stack boundary aligned to 8 byte boundary.  Since
15239x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
15240intended to be used in controlled environment where stack space is
15241important limitation.  This option will lead to wrong code when functions
15242compiled with 16 byte stack alignment (such as functions from a standard
15243library) are called with misaligned stack.  In this case, SSE
15244instructions may lead to misaligned memory access traps.  In addition,
15245variable arguments will be handled incorrectly for 16 byte aligned
15246objects (including x87 long double and __int128), leading to wrong
15247results.  You must build all modules with
15248@option{-mpreferred-stack-boundary=3}, including any libraries.  This
15249includes the system libraries and startup modules.
15250
15251@item -mincoming-stack-boundary=@var{num}
15252@opindex mincoming-stack-boundary
15253Assume the incoming stack is aligned to a 2 raised to @var{num} byte
15254boundary.  If @option{-mincoming-stack-boundary} is not specified,
15255the one specified by @option{-mpreferred-stack-boundary} is used.
15256
15257On Pentium and Pentium Pro, @code{double} and @code{long double} values
15258should be aligned to an 8-byte boundary (see @option{-malign-double}) or
15259suffer significant run time performance penalties.  On Pentium III, the
15260Streaming SIMD Extension (SSE) data type @code{__m128} may not work
15261properly if it is not 16-byte aligned.
15262
15263To ensure proper alignment of this values on the stack, the stack boundary
15264must be as aligned as that required by any value stored on the stack.
15265Further, every function must be generated such that it keeps the stack
15266aligned.  Thus calling a function compiled with a higher preferred
15267stack boundary from a function compiled with a lower preferred stack
15268boundary most likely misaligns the stack.  It is recommended that
15269libraries that use callbacks always use the default setting.
15270
15271This extra alignment does consume extra stack space, and generally
15272increases code size.  Code that is sensitive to stack space usage, such
15273as embedded systems and operating system kernels, may want to reduce the
15274preferred alignment to @option{-mpreferred-stack-boundary=2}.
15275
15276@item -mmmx
15277@itemx -mno-mmx
15278@itemx -msse
15279@itemx -mno-sse
15280@itemx -msse2
15281@itemx -mno-sse2
15282@itemx -msse3
15283@itemx -mno-sse3
15284@itemx -mssse3
15285@itemx -mno-ssse3
15286@itemx -msse4.1
15287@need 800
15288@itemx -mno-sse4.1
15289@itemx -msse4.2
15290@itemx -mno-sse4.2
15291@itemx -msse4
15292@itemx -mno-sse4
15293@itemx -mavx
15294@itemx -mno-avx
15295@itemx -mavx2
15296@itemx -mno-avx2
15297@itemx -mavx512f
15298@itemx -mno-avx512f
15299@need 800
15300@itemx -mavx512pf
15301@itemx -mno-avx512pf
15302@itemx -mavx512er
15303@itemx -mno-avx512er
15304@itemx -mavx512cd
15305@itemx -mno-avx512cd
15306@itemx -msha
15307@itemx -mno-sha
15308@itemx -maes
15309@itemx -mno-aes
15310@itemx -mpclmul
15311@itemx -mno-pclmul
15312@need 800
15313@itemx -mfsgsbase
15314@itemx -mno-fsgsbase
15315@itemx -mrdrnd
15316@itemx -mno-rdrnd
15317@itemx -mf16c
15318@itemx -mno-f16c
15319@itemx -mfma
15320@itemx -mno-fma
15321@itemx -mprefetchwt1
15322@itemx -mno-prefetchwt1
15323@itemx -msse4a
15324@itemx -mno-sse4a
15325@itemx -mfma4
15326@itemx -mno-fma4
15327@need 800
15328@itemx -mxop
15329@itemx -mno-xop
15330@itemx -mlwp
15331@itemx -mno-lwp
15332@itemx -m3dnow
15333@itemx -mno-3dnow
15334@itemx -mpopcnt
15335@itemx -mno-popcnt
15336@itemx -mabm
15337@itemx -mno-abm
15338@itemx -mbmi
15339@itemx -mbmi2
15340@itemx -mno-bmi
15341@itemx -mno-bmi2
15342@itemx -mlzcnt
15343@itemx -mno-lzcnt
15344@itemx -mfxsr
15345@itemx -mxsave
15346@itemx -mxsaveopt
15347@itemx -mrtm
15348@itemx -mtbm
15349@itemx -mno-tbm
15350@opindex mmmx
15351@opindex mno-mmx
15352@opindex msse
15353@opindex mno-sse
15354@opindex m3dnow
15355@opindex mno-3dnow
15356These switches enable or disable the use of instructions in the MMX, SSE,
15357SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD,
15358SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM,
15359BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, or 3DNow!@:
15360extended instruction sets.
15361These extensions are also available as built-in functions: see
15362@ref{X86 Built-in Functions}, for details of the functions enabled and
15363disabled by these switches.
15364
15365To generate SSE/SSE2 instructions automatically from floating-point
15366code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
15367
15368GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
15369generates new AVX instructions or AVX equivalence for all SSEx instructions
15370when needed.
15371
15372These options enable GCC to use these extended instructions in
15373generated code, even without @option{-mfpmath=sse}.  Applications that
15374perform run-time CPU detection must compile separate files for each
15375supported architecture, using the appropriate flags.  In particular,
15376the file containing the CPU detection code should be compiled without
15377these options.
15378
15379@item -mdump-tune-features
15380@opindex mdump-tune-features
15381This option instructs GCC to dump the names of the x86 performance
15382tuning features and default settings. The names can be used in
15383@option{-mtune-ctrl=@var{feature-list}}.
15384
15385@item -mtune-ctrl=@var{feature-list}
15386@opindex mtune-ctrl=@var{feature-list}
15387This option is used to do fine grain control of x86 code generation features.
15388@var{feature-list} is a comma separated list of @var{feature} names. See also
15389@option{-mdump-tune-features}. When specified, the @var{feature} will be turned
15390on if it is not preceded with @code{^}, otherwise, it will be turned off.
15391@option{-mtune-ctrl=@var{feature-list}} is intended to be used by GCC
15392developers. Using it may lead to code paths not covered by testing and can
15393potentially result in compiler ICEs or runtime errors.
15394
15395@item -mno-default
15396@opindex mno-default
15397This option instructs GCC to turn off all tunable features. See also
15398@option{-mtune-ctrl=@var{feature-list}} and @option{-mdump-tune-features}.
15399
15400@item -mcld
15401@opindex mcld
15402This option instructs GCC to emit a @code{cld} instruction in the prologue
15403of functions that use string instructions.  String instructions depend on
15404the DF flag to select between autoincrement or autodecrement mode.  While the
15405ABI specifies the DF flag to be cleared on function entry, some operating
15406systems violate this specification by not clearing the DF flag in their
15407exception dispatchers.  The exception handler can be invoked with the DF flag
15408set, which leads to wrong direction mode when string instructions are used.
15409This option can be enabled by default on 32-bit x86 targets by configuring
15410GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
15411instructions can be suppressed with the @option{-mno-cld} compiler option
15412in this case.
15413
15414@item -mvzeroupper
15415@opindex mvzeroupper
15416This option instructs GCC to emit a @code{vzeroupper} instruction
15417before a transfer of control flow out of the function to minimize
15418the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
15419intrinsics.
15420
15421@item -mprefer-avx128
15422@opindex mprefer-avx128
15423This option instructs GCC to use 128-bit AVX instructions instead of
15424256-bit AVX instructions in the auto-vectorizer.
15425
15426@item -mcx16
15427@opindex mcx16
15428This option enables GCC to generate @code{CMPXCHG16B} instructions.
15429@code{CMPXCHG16B} allows for atomic operations on 128-bit double quadword
15430(or oword) data types.
15431This is useful for high-resolution counters that can be updated
15432by multiple processors (or cores).  This instruction is generated as part of
15433atomic built-in functions: see @ref{__sync Builtins} or
15434@ref{__atomic Builtins} for details.
15435
15436@item -msahf
15437@opindex msahf
15438This option enables generation of @code{SAHF} instructions in 64-bit code.
15439Early Intel Pentium 4 CPUs with Intel 64 support,
15440prior to the introduction of Pentium 4 G1 step in December 2005,
15441lacked the @code{LAHF} and @code{SAHF} instructions
15442which were supported by AMD64.
15443These are load and store instructions, respectively, for certain status flags.
15444In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
15445@code{drem}, and @code{remainder} built-in functions;
15446see @ref{Other Builtins} for details.
15447
15448@item -mmovbe
15449@opindex mmovbe
15450This option enables use of the @code{movbe} instruction to implement
15451@code{__builtin_bswap32} and @code{__builtin_bswap64}.
15452
15453@item -mcrc32
15454@opindex mcrc32
15455This option enables built-in functions @code{__builtin_ia32_crc32qi},
15456@code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
15457@code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.
15458
15459@item -mrecip
15460@opindex mrecip
15461This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
15462(and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
15463with an additional Newton-Raphson step
15464to increase precision instead of @code{DIVSS} and @code{SQRTSS}
15465(and their vectorized
15466variants) for single-precision floating-point arguments.  These instructions
15467are generated only when @option{-funsafe-math-optimizations} is enabled
15468together with @option{-finite-math-only} and @option{-fno-trapping-math}.
15469Note that while the throughput of the sequence is higher than the throughput
15470of the non-reciprocal instruction, the precision of the sequence can be
15471decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
15472
15473Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
15474(or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
15475combination), and doesn't need @option{-mrecip}.
15476
15477Also note that GCC emits the above sequence with additional Newton-Raphson step
15478for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
15479already with @option{-ffast-math} (or the above option combination), and
15480doesn't need @option{-mrecip}.
15481
15482@item -mrecip=@var{opt}
15483@opindex mrecip=opt
15484This option controls which reciprocal estimate instructions
15485may be used.  @var{opt} is a comma-separated list of options, which may
15486be preceded by a @samp{!} to invert the option:
15487
15488@table @samp
15489@item all
15490Enable all estimate instructions.
15491
15492@item default
15493Enable the default instructions, equivalent to @option{-mrecip}.
15494
15495@item none
15496Disable all estimate instructions, equivalent to @option{-mno-recip}.
15497
15498@item div
15499Enable the approximation for scalar division.
15500
15501@item vec-div
15502Enable the approximation for vectorized division.
15503
15504@item sqrt
15505Enable the approximation for scalar square root.
15506
15507@item vec-sqrt
15508Enable the approximation for vectorized square root.
15509@end table
15510
15511So, for example, @option{-mrecip=all,!sqrt} enables
15512all of the reciprocal approximations, except for square root.
15513
15514@item -mveclibabi=@var{type}
15515@opindex mveclibabi
15516Specifies the ABI type to use for vectorizing intrinsics using an
15517external library.  Supported values for @var{type} are @samp{svml}
15518for the Intel short
15519vector math library and @samp{acml} for the AMD math core library.
15520To use this option, both @option{-ftree-vectorize} and
15521@option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML
15522ABI-compatible library must be specified at link time.
15523
15524GCC currently emits calls to @code{vmldExp2},
15525@code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
15526@code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
15527@code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
15528@code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
15529@code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
15530@code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
15531@code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
15532@code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
15533@code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
15534function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin},
15535@code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
15536@code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
15537@code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
15538@code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type
15539when @option{-mveclibabi=acml} is used.
15540
15541@item -mabi=@var{name}
15542@opindex mabi
15543Generate code for the specified calling convention.  Permissible values
15544are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
15545@samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
15546ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
15547You can control this behavior for a specific function by
15548using the function attribute @samp{ms_abi}/@samp{sysv_abi}.
15549@xref{Function Attributes}.
15550
15551@item -mtls-dialect=@var{type}
15552@opindex mtls-dialect
15553Generate code to access thread-local storage using the @samp{gnu} or
15554@samp{gnu2} conventions.  @samp{gnu} is the conservative default;
15555@samp{gnu2} is more efficient, but it may add compile- and run-time
15556requirements that cannot be satisfied on all systems.
15557
15558@item -mpush-args
15559@itemx -mno-push-args
15560@opindex mpush-args
15561@opindex mno-push-args
15562Use PUSH operations to store outgoing parameters.  This method is shorter
15563and usually equally fast as method using SUB/MOV operations and is enabled
15564by default.  In some cases disabling it may improve performance because of
15565improved scheduling and reduced dependencies.
15566
15567@item -maccumulate-outgoing-args
15568@opindex maccumulate-outgoing-args
15569If enabled, the maximum amount of space required for outgoing arguments is
15570computed in the function prologue.  This is faster on most modern CPUs
15571because of reduced dependencies, improved scheduling and reduced stack usage
15572when the preferred stack boundary is not equal to 2.  The drawback is a notable
15573increase in code size.  This switch implies @option{-mno-push-args}.
15574
15575@item -mthreads
15576@opindex mthreads
15577Support thread-safe exception handling on MinGW.  Programs that rely
15578on thread-safe exception handling must compile and link all code with the
15579@option{-mthreads} option.  When compiling, @option{-mthreads} defines
15580@code{-D_MT}; when linking, it links in a special thread helper library
15581@option{-lmingwthrd} which cleans up per-thread exception-handling data.
15582
15583@item -mno-align-stringops
15584@opindex mno-align-stringops
15585Do not align the destination of inlined string operations.  This switch reduces
15586code size and improves performance in case the destination is already aligned,
15587but GCC doesn't know about it.
15588
15589@item -minline-all-stringops
15590@opindex minline-all-stringops
15591By default GCC inlines string operations only when the destination is
15592known to be aligned to least a 4-byte boundary.
15593This enables more inlining and increases code
15594size, but may improve performance of code that depends on fast
15595@code{memcpy}, @code{strlen},
15596and @code{memset} for short lengths.
15597
15598@item -minline-stringops-dynamically
15599@opindex minline-stringops-dynamically
15600For string operations of unknown size, use run-time checks with
15601inline code for small blocks and a library call for large blocks.
15602
15603@item -mstringop-strategy=@var{alg}
15604@opindex mstringop-strategy=@var{alg}
15605Override the internal decision heuristic for the particular algorithm to use
15606for inlining string operations.  The allowed values for @var{alg} are:
15607
15608@table @samp
15609@item rep_byte
15610@itemx rep_4byte
15611@itemx rep_8byte
15612Expand using i386 @code{rep} prefix of the specified size.
15613
15614@item byte_loop
15615@itemx loop
15616@itemx unrolled_loop
15617Expand into an inline loop.
15618
15619@item libcall
15620Always use a library call.
15621@end table
15622
15623@item -mmemcpy-strategy=@var{strategy}
15624@opindex mmemcpy-strategy=@var{strategy}
15625Override the internal decision heuristic to decide if @code{__builtin_memcpy}
15626should be inlined and what inline algorithm to use when the expected size
15627of the copy operation is known. @var{strategy}
15628is a comma-separated list of @var{alg}:@var{max_size}:@var{dest_align} triplets.
15629@var{alg} is specified in @option{-mstringop-strategy}, @var{max_size} specifies
15630the max byte size with which inline algorithm @var{alg} is allowed.  For the last
15631triplet, the @var{max_size} must be @code{-1}. The @var{max_size} of the triplets
15632in the list must be specified in increasing order.  The minimal byte size for
15633@var{alg} is @code{0} for the first triplet and @code{@var{max_size} + 1} of the
15634preceding range.
15635
15636@item -mmemset-strategy=@var{strategy}
15637@opindex mmemset-strategy=@var{strategy}
15638The option is similar to @option{-mmemcpy-strategy=} except that it is to control
15639@code{__builtin_memset} expansion.
15640
15641@item -momit-leaf-frame-pointer
15642@opindex momit-leaf-frame-pointer
15643Don't keep the frame pointer in a register for leaf functions.  This
15644avoids the instructions to save, set up, and restore frame pointers and
15645makes an extra register available in leaf functions.  The option
15646@option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
15647which might make debugging harder.
15648
15649@item -mtls-direct-seg-refs
15650@itemx -mno-tls-direct-seg-refs
15651@opindex mtls-direct-seg-refs
15652Controls whether TLS variables may be accessed with offsets from the
15653TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
15654or whether the thread base pointer must be added.  Whether or not this
15655is valid depends on the operating system, and whether it maps the
15656segment to cover the entire TLS area.
15657
15658For systems that use the GNU C Library, the default is on.
15659
15660@item -msse2avx
15661@itemx -mno-sse2avx
15662@opindex msse2avx
15663Specify that the assembler should encode SSE instructions with VEX
15664prefix.  The option @option{-mavx} turns this on by default.
15665
15666@item -mfentry
15667@itemx -mno-fentry
15668@opindex mfentry
15669If profiling is active (@option{-pg}), put the profiling
15670counter call before the prologue.
15671Note: On x86 architectures the attribute @code{ms_hook_prologue}
15672isn't possible at the moment for @option{-mfentry} and @option{-pg}.
15673
15674@item -m8bit-idiv
15675@itemx -mno-8bit-idiv
15676@opindex 8bit-idiv
15677On some processors, like Intel Atom, 8-bit unsigned integer divide is
15678much faster than 32-bit/64-bit integer divide.  This option generates a
15679run-time check.  If both dividend and divisor are within range of 0
15680to 255, 8-bit unsigned integer divide is used instead of
1568132-bit/64-bit integer divide.
15682
15683@item -mavx256-split-unaligned-load
15684@itemx -mavx256-split-unaligned-store
15685@opindex avx256-split-unaligned-load
15686@opindex avx256-split-unaligned-store
15687Split 32-byte AVX unaligned load and store.
15688
15689@item -mstack-protector-guard=@var{guard}
15690@opindex mstack-protector-guard=@var{guard}
15691Generate stack protection code using canary at @var{guard}.  Supported
15692locations are @samp{global} for global canary or @samp{tls} for per-thread
15693canary in the TLS block (the default).  This option has effect only when
15694@option{-fstack-protector} or @option{-fstack-protector-all} is specified.
15695
15696@end table
15697
15698These @samp{-m} switches are supported in addition to the above
15699on x86-64 processors in 64-bit environments.
15700
15701@table @gcctabopt
15702@item -m32
15703@itemx -m64
15704@itemx -mx32
15705@itemx -m16
15706@opindex m32
15707@opindex m64
15708@opindex mx32
15709@opindex m16
15710Generate code for a 16-bit, 32-bit or 64-bit environment.
15711The @option{-m32} option sets @code{int}, @code{long}, and pointer types
15712to 32 bits, and
15713generates code that runs on any i386 system.
15714
15715The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
15716types to 64 bits, and generates code for the x86-64 architecture.
15717For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
15718and @option{-mdynamic-no-pic} options.
15719
15720The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
15721to 32 bits, and
15722generates code for the x86-64 architecture.
15723
15724The @option{-m16} option is the same as @option{-m32}, except for that
15725it outputs the @code{.code16gcc} assembly directive at the beginning of
15726the assembly output so that the binary can run in 16-bit mode.
15727
15728@item -mno-red-zone
15729@opindex mno-red-zone
15730Do not use a so-called ``red zone'' for x86-64 code.  The red zone is mandated
15731by the x86-64 ABI; it is a 128-byte area beyond the location of the
15732stack pointer that is not modified by signal or interrupt handlers
15733and therefore can be used for temporary data without adjusting the stack
15734pointer.  The flag @option{-mno-red-zone} disables this red zone.
15735
15736@item -mcmodel=small
15737@opindex mcmodel=small
15738Generate code for the small code model: the program and its symbols must
15739be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
15740Programs can be statically or dynamically linked.  This is the default
15741code model.
15742
15743@item -mcmodel=kernel
15744@opindex mcmodel=kernel
15745Generate code for the kernel code model.  The kernel runs in the
15746negative 2 GB of the address space.
15747This model has to be used for Linux kernel code.
15748
15749@item -mcmodel=medium
15750@opindex mcmodel=medium
15751Generate code for the medium model: the program is linked in the lower 2
15752GB of the address space.  Small symbols are also placed there.  Symbols
15753with sizes larger than @option{-mlarge-data-threshold} are put into
15754large data or BSS sections and can be located above 2GB.  Programs can
15755be statically or dynamically linked.
15756
15757@item -mcmodel=large
15758@opindex mcmodel=large
15759Generate code for the large model.  This model makes no assumptions
15760about addresses and sizes of sections.
15761
15762@item -maddress-mode=long
15763@opindex maddress-mode=long
15764Generate code for long address mode.  This is only supported for 64-bit
15765and x32 environments.  It is the default address mode for 64-bit
15766environments.
15767
15768@item -maddress-mode=short
15769@opindex maddress-mode=short
15770Generate code for short address mode.  This is only supported for 32-bit
15771and x32 environments.  It is the default address mode for 32-bit and
15772x32 environments.
15773@end table
15774
15775@node i386 and x86-64 Windows Options
15776@subsection i386 and x86-64 Windows Options
15777@cindex i386 and x86-64 Windows Options
15778
15779These additional options are available for Microsoft Windows targets:
15780
15781@table @gcctabopt
15782@item -mconsole
15783@opindex mconsole
15784This option
15785specifies that a console application is to be generated, by
15786instructing the linker to set the PE header subsystem type
15787required for console applications.
15788This option is available for Cygwin and MinGW targets and is
15789enabled by default on those targets.
15790
15791@item -mdll
15792@opindex mdll
15793This option is available for Cygwin and MinGW targets.  It
15794specifies that a DLL---a dynamic link library---is to be
15795generated, enabling the selection of the required runtime
15796startup object and entry point.
15797
15798@item -mnop-fun-dllimport
15799@opindex mnop-fun-dllimport
15800This option is available for Cygwin and MinGW targets.  It
15801specifies that the @code{dllimport} attribute should be ignored.
15802
15803@item -mthread
15804@opindex mthread
15805This option is available for MinGW targets. It specifies
15806that MinGW-specific thread support is to be used.
15807
15808@item -municode
15809@opindex municode
15810This option is available for MinGW-w64 targets.  It causes
15811the @code{UNICODE} preprocessor macro to be predefined, and
15812chooses Unicode-capable runtime startup code.
15813
15814@item -mwin32
15815@opindex mwin32
15816This option is available for Cygwin and MinGW targets.  It
15817specifies that the typical Microsoft Windows predefined macros are to
15818be set in the pre-processor, but does not influence the choice
15819of runtime library/startup code.
15820
15821@item -mwindows
15822@opindex mwindows
15823This option is available for Cygwin and MinGW targets.  It
15824specifies that a GUI application is to be generated by
15825instructing the linker to set the PE header subsystem type
15826appropriately.
15827
15828@item -fno-set-stack-executable
15829@opindex fno-set-stack-executable
15830This option is available for MinGW targets. It specifies that
15831the executable flag for the stack used by nested functions isn't
15832set. This is necessary for binaries running in kernel mode of
15833Microsoft Windows, as there the User32 API, which is used to set executable
15834privileges, isn't available.
15835
15836@item -fwritable-relocated-rdata
15837@opindex fno-writable-relocated-rdata
15838This option is available for MinGW and Cygwin targets.  It specifies
15839that relocated-data in read-only section is put into .data
15840section.  This is a necessary for older runtimes not supporting
15841modification of .rdata sections for pseudo-relocation.
15842
15843@item -mpe-aligned-commons
15844@opindex mpe-aligned-commons
15845This option is available for Cygwin and MinGW targets.  It
15846specifies that the GNU extension to the PE file format that
15847permits the correct alignment of COMMON variables should be
15848used when generating code.  It is enabled by default if
15849GCC detects that the target assembler found during configuration
15850supports the feature.
15851@end table
15852
15853See also under @ref{i386 and x86-64 Options} for standard options.
15854
15855@node IA-64 Options
15856@subsection IA-64 Options
15857@cindex IA-64 Options
15858
15859These are the @samp{-m} options defined for the Intel IA-64 architecture.
15860
15861@table @gcctabopt
15862@item -mbig-endian
15863@opindex mbig-endian
15864Generate code for a big-endian target.  This is the default for HP-UX@.
15865
15866@item -mlittle-endian
15867@opindex mlittle-endian
15868Generate code for a little-endian target.  This is the default for AIX5
15869and GNU/Linux.
15870
15871@item -mgnu-as
15872@itemx -mno-gnu-as
15873@opindex mgnu-as
15874@opindex mno-gnu-as
15875Generate (or don't) code for the GNU assembler.  This is the default.
15876@c Also, this is the default if the configure option @option{--with-gnu-as}
15877@c is used.
15878
15879@item -mgnu-ld
15880@itemx -mno-gnu-ld
15881@opindex mgnu-ld
15882@opindex mno-gnu-ld
15883Generate (or don't) code for the GNU linker.  This is the default.
15884@c Also, this is the default if the configure option @option{--with-gnu-ld}
15885@c is used.
15886
15887@item -mno-pic
15888@opindex mno-pic
15889Generate code that does not use a global pointer register.  The result
15890is not position independent code, and violates the IA-64 ABI@.
15891
15892@item -mvolatile-asm-stop
15893@itemx -mno-volatile-asm-stop
15894@opindex mvolatile-asm-stop
15895@opindex mno-volatile-asm-stop
15896Generate (or don't) a stop bit immediately before and after volatile asm
15897statements.
15898
15899@item -mregister-names
15900@itemx -mno-register-names
15901@opindex mregister-names
15902@opindex mno-register-names
15903Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
15904the stacked registers.  This may make assembler output more readable.
15905
15906@item -mno-sdata
15907@itemx -msdata
15908@opindex mno-sdata
15909@opindex msdata
15910Disable (or enable) optimizations that use the small data section.  This may
15911be useful for working around optimizer bugs.
15912
15913@item -mconstant-gp
15914@opindex mconstant-gp
15915Generate code that uses a single constant global pointer value.  This is
15916useful when compiling kernel code.
15917
15918@item -mauto-pic
15919@opindex mauto-pic
15920Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
15921This is useful when compiling firmware code.
15922
15923@item -minline-float-divide-min-latency
15924@opindex minline-float-divide-min-latency
15925Generate code for inline divides of floating-point values
15926using the minimum latency algorithm.
15927
15928@item -minline-float-divide-max-throughput
15929@opindex minline-float-divide-max-throughput
15930Generate code for inline divides of floating-point values
15931using the maximum throughput algorithm.
15932
15933@item -mno-inline-float-divide
15934@opindex mno-inline-float-divide
15935Do not generate inline code for divides of floating-point values.
15936
15937@item -minline-int-divide-min-latency
15938@opindex minline-int-divide-min-latency
15939Generate code for inline divides of integer values
15940using the minimum latency algorithm.
15941
15942@item -minline-int-divide-max-throughput
15943@opindex minline-int-divide-max-throughput
15944Generate code for inline divides of integer values
15945using the maximum throughput algorithm.
15946
15947@item -mno-inline-int-divide
15948@opindex mno-inline-int-divide
15949Do not generate inline code for divides of integer values.
15950
15951@item -minline-sqrt-min-latency
15952@opindex minline-sqrt-min-latency
15953Generate code for inline square roots
15954using the minimum latency algorithm.
15955
15956@item -minline-sqrt-max-throughput
15957@opindex minline-sqrt-max-throughput
15958Generate code for inline square roots
15959using the maximum throughput algorithm.
15960
15961@item -mno-inline-sqrt
15962@opindex mno-inline-sqrt
15963Do not generate inline code for @code{sqrt}.
15964
15965@item -mfused-madd
15966@itemx -mno-fused-madd
15967@opindex mfused-madd
15968@opindex mno-fused-madd
15969Do (don't) generate code that uses the fused multiply/add or multiply/subtract
15970instructions.  The default is to use these instructions.
15971
15972@item -mno-dwarf2-asm
15973@itemx -mdwarf2-asm
15974@opindex mno-dwarf2-asm
15975@opindex mdwarf2-asm
15976Don't (or do) generate assembler code for the DWARF 2 line number debugging
15977info.  This may be useful when not using the GNU assembler.
15978
15979@item -mearly-stop-bits
15980@itemx -mno-early-stop-bits
15981@opindex mearly-stop-bits
15982@opindex mno-early-stop-bits
15983Allow stop bits to be placed earlier than immediately preceding the
15984instruction that triggered the stop bit.  This can improve instruction
15985scheduling, but does not always do so.
15986
15987@item -mfixed-range=@var{register-range}
15988@opindex mfixed-range
15989Generate code treating the given register range as fixed registers.
15990A fixed register is one that the register allocator cannot use.  This is
15991useful when compiling kernel code.  A register range is specified as
15992two registers separated by a dash.  Multiple register ranges can be
15993specified separated by a comma.
15994
15995@item -mtls-size=@var{tls-size}
15996@opindex mtls-size
15997Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
1599864.
15999
16000@item -mtune=@var{cpu-type}
16001@opindex mtune
16002Tune the instruction scheduling for a particular CPU, Valid values are
16003@samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
16004and @samp{mckinley}.
16005
16006@item -milp32
16007@itemx -mlp64
16008@opindex milp32
16009@opindex mlp64
16010Generate code for a 32-bit or 64-bit environment.
16011The 32-bit environment sets int, long and pointer to 32 bits.
16012The 64-bit environment sets int to 32 bits and long and pointer
16013to 64 bits.  These are HP-UX specific flags.
16014
16015@item -mno-sched-br-data-spec
16016@itemx -msched-br-data-spec
16017@opindex mno-sched-br-data-spec
16018@opindex msched-br-data-spec
16019(Dis/En)able data speculative scheduling before reload.
16020This results in generation of @code{ld.a} instructions and
16021the corresponding check instructions (@code{ld.c} / @code{chk.a}).
16022The default is 'disable'.
16023
16024@item -msched-ar-data-spec
16025@itemx -mno-sched-ar-data-spec
16026@opindex msched-ar-data-spec
16027@opindex mno-sched-ar-data-spec
16028(En/Dis)able data speculative scheduling after reload.
16029This results in generation of @code{ld.a} instructions and
16030the corresponding check instructions (@code{ld.c} / @code{chk.a}).
16031The default is 'enable'.
16032
16033@item -mno-sched-control-spec
16034@itemx -msched-control-spec
16035@opindex mno-sched-control-spec
16036@opindex msched-control-spec
16037(Dis/En)able control speculative scheduling.  This feature is
16038available only during region scheduling (i.e.@: before reload).
16039This results in generation of the @code{ld.s} instructions and
16040the corresponding check instructions @code{chk.s}.
16041The default is 'disable'.
16042
16043@item -msched-br-in-data-spec
16044@itemx -mno-sched-br-in-data-spec
16045@opindex msched-br-in-data-spec
16046@opindex mno-sched-br-in-data-spec
16047(En/Dis)able speculative scheduling of the instructions that
16048are dependent on the data speculative loads before reload.
16049This is effective only with @option{-msched-br-data-spec} enabled.
16050The default is 'enable'.
16051
16052@item -msched-ar-in-data-spec
16053@itemx -mno-sched-ar-in-data-spec
16054@opindex msched-ar-in-data-spec
16055@opindex mno-sched-ar-in-data-spec
16056(En/Dis)able speculative scheduling of the instructions that
16057are dependent on the data speculative loads after reload.
16058This is effective only with @option{-msched-ar-data-spec} enabled.
16059The default is 'enable'.
16060
16061@item -msched-in-control-spec
16062@itemx -mno-sched-in-control-spec
16063@opindex msched-in-control-spec
16064@opindex mno-sched-in-control-spec
16065(En/Dis)able speculative scheduling of the instructions that
16066are dependent on the control speculative loads.
16067This is effective only with @option{-msched-control-spec} enabled.
16068The default is 'enable'.
16069
16070@item -mno-sched-prefer-non-data-spec-insns
16071@itemx -msched-prefer-non-data-spec-insns
16072@opindex mno-sched-prefer-non-data-spec-insns
16073@opindex msched-prefer-non-data-spec-insns
16074If enabled, data-speculative instructions are chosen for schedule
16075only if there are no other choices at the moment.  This makes
16076the use of the data speculation much more conservative.
16077The default is 'disable'.
16078
16079@item -mno-sched-prefer-non-control-spec-insns
16080@itemx -msched-prefer-non-control-spec-insns
16081@opindex mno-sched-prefer-non-control-spec-insns
16082@opindex msched-prefer-non-control-spec-insns
16083If enabled, control-speculative instructions are chosen for schedule
16084only if there are no other choices at the moment.  This makes
16085the use of the control speculation much more conservative.
16086The default is 'disable'.
16087
16088@item -mno-sched-count-spec-in-critical-path
16089@itemx -msched-count-spec-in-critical-path
16090@opindex mno-sched-count-spec-in-critical-path
16091@opindex msched-count-spec-in-critical-path
16092If enabled, speculative dependencies are considered during
16093computation of the instructions priorities.  This makes the use of the
16094speculation a bit more conservative.
16095The default is 'disable'.
16096
16097@item -msched-spec-ldc
16098@opindex msched-spec-ldc
16099Use a simple data speculation check.  This option is on by default.
16100
16101@item -msched-control-spec-ldc
16102@opindex msched-spec-ldc
16103Use a simple check for control speculation.  This option is on by default.
16104
16105@item -msched-stop-bits-after-every-cycle
16106@opindex msched-stop-bits-after-every-cycle
16107Place a stop bit after every cycle when scheduling.  This option is on
16108by default.
16109
16110@item -msched-fp-mem-deps-zero-cost
16111@opindex msched-fp-mem-deps-zero-cost
16112Assume that floating-point stores and loads are not likely to cause a conflict
16113when placed into the same instruction group.  This option is disabled by
16114default.
16115
16116@item -msel-sched-dont-check-control-spec
16117@opindex msel-sched-dont-check-control-spec
16118Generate checks for control speculation in selective scheduling.
16119This flag is disabled by default.
16120
16121@item -msched-max-memory-insns=@var{max-insns}
16122@opindex msched-max-memory-insns
16123Limit on the number of memory insns per instruction group, giving lower
16124priority to subsequent memory insns attempting to schedule in the same
16125instruction group. Frequently useful to prevent cache bank conflicts.
16126The default value is 1.
16127
16128@item -msched-max-memory-insns-hard-limit
16129@opindex msched-max-memory-insns-hard-limit
16130Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
16131disallowing more than that number in an instruction group.
16132Otherwise, the limit is ``soft'', meaning that non-memory operations
16133are preferred when the limit is reached, but memory operations may still
16134be scheduled.
16135
16136@end table
16137
16138@node LM32 Options
16139@subsection LM32 Options
16140@cindex LM32 options
16141
16142These @option{-m} options are defined for the LatticeMico32 architecture:
16143
16144@table @gcctabopt
16145@item -mbarrel-shift-enabled
16146@opindex mbarrel-shift-enabled
16147Enable barrel-shift instructions.
16148
16149@item -mdivide-enabled
16150@opindex mdivide-enabled
16151Enable divide and modulus instructions.
16152
16153@item -mmultiply-enabled
16154@opindex multiply-enabled
16155Enable multiply instructions.
16156
16157@item -msign-extend-enabled
16158@opindex msign-extend-enabled
16159Enable sign extend instructions.
16160
16161@item -muser-enabled
16162@opindex muser-enabled
16163Enable user-defined instructions.
16164
16165@end table
16166
16167@node M32C Options
16168@subsection M32C Options
16169@cindex M32C options
16170
16171@table @gcctabopt
16172@item -mcpu=@var{name}
16173@opindex mcpu=
16174Select the CPU for which code is generated.  @var{name} may be one of
16175@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
16176/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
16177the M32C/80 series.
16178
16179@item -msim
16180@opindex msim
16181Specifies that the program will be run on the simulator.  This causes
16182an alternate runtime library to be linked in which supports, for
16183example, file I/O@.  You must not use this option when generating
16184programs that will run on real hardware; you must provide your own
16185runtime library for whatever I/O functions are needed.
16186
16187@item -memregs=@var{number}
16188@opindex memregs=
16189Specifies the number of memory-based pseudo-registers GCC uses
16190during code generation.  These pseudo-registers are used like real
16191registers, so there is a tradeoff between GCC's ability to fit the
16192code into available registers, and the performance penalty of using
16193memory instead of registers.  Note that all modules in a program must
16194be compiled with the same value for this option.  Because of that, you
16195must not use this option with GCC's default runtime libraries.
16196
16197@end table
16198
16199@node M32R/D Options
16200@subsection M32R/D Options
16201@cindex M32R/D options
16202
16203These @option{-m} options are defined for Renesas M32R/D architectures:
16204
16205@table @gcctabopt
16206@item -m32r2
16207@opindex m32r2
16208Generate code for the M32R/2@.
16209
16210@item -m32rx
16211@opindex m32rx
16212Generate code for the M32R/X@.
16213
16214@item -m32r
16215@opindex m32r
16216Generate code for the M32R@.  This is the default.
16217
16218@item -mmodel=small
16219@opindex mmodel=small
16220Assume all objects live in the lower 16MB of memory (so that their addresses
16221can be loaded with the @code{ld24} instruction), and assume all subroutines
16222are reachable with the @code{bl} instruction.
16223This is the default.
16224
16225The addressability of a particular object can be set with the
16226@code{model} attribute.
16227
16228@item -mmodel=medium
16229@opindex mmodel=medium
16230Assume objects may be anywhere in the 32-bit address space (the compiler
16231generates @code{seth/add3} instructions to load their addresses), and
16232assume all subroutines are reachable with the @code{bl} instruction.
16233
16234@item -mmodel=large
16235@opindex mmodel=large
16236Assume objects may be anywhere in the 32-bit address space (the compiler
16237generates @code{seth/add3} instructions to load their addresses), and
16238assume subroutines may not be reachable with the @code{bl} instruction
16239(the compiler generates the much slower @code{seth/add3/jl}
16240instruction sequence).
16241
16242@item -msdata=none
16243@opindex msdata=none
16244Disable use of the small data area.  Variables are put into
16245one of @samp{.data}, @samp{.bss}, or @samp{.rodata} (unless the
16246@code{section} attribute has been specified).
16247This is the default.
16248
16249The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
16250Objects may be explicitly put in the small data area with the
16251@code{section} attribute using one of these sections.
16252
16253@item -msdata=sdata
16254@opindex msdata=sdata
16255Put small global and static data in the small data area, but do not
16256generate special code to reference them.
16257
16258@item -msdata=use
16259@opindex msdata=use
16260Put small global and static data in the small data area, and generate
16261special instructions to reference them.
16262
16263@item -G @var{num}
16264@opindex G
16265@cindex smaller data references
16266Put global and static objects less than or equal to @var{num} bytes
16267into the small data or BSS sections instead of the normal data or BSS
16268sections.  The default value of @var{num} is 8.
16269The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
16270for this option to have any effect.
16271
16272All modules should be compiled with the same @option{-G @var{num}} value.
16273Compiling with different values of @var{num} may or may not work; if it
16274doesn't the linker gives an error message---incorrect code is not
16275generated.
16276
16277@item -mdebug
16278@opindex mdebug
16279Makes the M32R-specific code in the compiler display some statistics
16280that might help in debugging programs.
16281
16282@item -malign-loops
16283@opindex malign-loops
16284Align all loops to a 32-byte boundary.
16285
16286@item -mno-align-loops
16287@opindex mno-align-loops
16288Do not enforce a 32-byte alignment for loops.  This is the default.
16289
16290@item -missue-rate=@var{number}
16291@opindex missue-rate=@var{number}
16292Issue @var{number} instructions per cycle.  @var{number} can only be 1
16293or 2.
16294
16295@item -mbranch-cost=@var{number}
16296@opindex mbranch-cost=@var{number}
16297@var{number} can only be 1 or 2.  If it is 1 then branches are
16298preferred over conditional code, if it is 2, then the opposite applies.
16299
16300@item -mflush-trap=@var{number}
16301@opindex mflush-trap=@var{number}
16302Specifies the trap number to use to flush the cache.  The default is
1630312.  Valid numbers are between 0 and 15 inclusive.
16304
16305@item -mno-flush-trap
16306@opindex mno-flush-trap
16307Specifies that the cache cannot be flushed by using a trap.
16308
16309@item -mflush-func=@var{name}
16310@opindex mflush-func=@var{name}
16311Specifies the name of the operating system function to call to flush
16312the cache.  The default is @emph{_flush_cache}, but a function call
16313is only used if a trap is not available.
16314
16315@item -mno-flush-func
16316@opindex mno-flush-func
16317Indicates that there is no OS function for flushing the cache.
16318
16319@end table
16320
16321@node M680x0 Options
16322@subsection M680x0 Options
16323@cindex M680x0 options
16324
16325These are the @samp{-m} options defined for M680x0 and ColdFire processors.
16326The default settings depend on which architecture was selected when
16327the compiler was configured; the defaults for the most common choices
16328are given below.
16329
16330@table @gcctabopt
16331@item -march=@var{arch}
16332@opindex march
16333Generate code for a specific M680x0 or ColdFire instruction set
16334architecture.  Permissible values of @var{arch} for M680x0
16335architectures are: @samp{68000}, @samp{68010}, @samp{68020},
16336@samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
16337architectures are selected according to Freescale's ISA classification
16338and the permissible values are: @samp{isaa}, @samp{isaaplus},
16339@samp{isab} and @samp{isac}.
16340
16341GCC defines a macro @samp{__mcf@var{arch}__} whenever it is generating
16342code for a ColdFire target.  The @var{arch} in this macro is one of the
16343@option{-march} arguments given above.
16344
16345When used together, @option{-march} and @option{-mtune} select code
16346that runs on a family of similar processors but that is optimized
16347for a particular microarchitecture.
16348
16349@item -mcpu=@var{cpu}
16350@opindex mcpu
16351Generate code for a specific M680x0 or ColdFire processor.
16352The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
16353@samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
16354and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
16355below, which also classifies the CPUs into families:
16356
16357@multitable @columnfractions 0.20 0.80
16358@item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
16359@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}
16360@item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
16361@item @samp{5206e} @tab @samp{5206e}
16362@item @samp{5208} @tab @samp{5207} @samp{5208}
16363@item @samp{5211a} @tab @samp{5210a} @samp{5211a}
16364@item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
16365@item @samp{5216} @tab @samp{5214} @samp{5216}
16366@item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
16367@item @samp{5225} @tab @samp{5224} @samp{5225}
16368@item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
16369@item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
16370@item @samp{5249} @tab @samp{5249}
16371@item @samp{5250} @tab @samp{5250}
16372@item @samp{5271} @tab @samp{5270} @samp{5271}
16373@item @samp{5272} @tab @samp{5272}
16374@item @samp{5275} @tab @samp{5274} @samp{5275}
16375@item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
16376@item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
16377@item @samp{5307} @tab @samp{5307}
16378@item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
16379@item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
16380@item @samp{5407} @tab @samp{5407}
16381@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}
16382@end multitable
16383
16384@option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
16385@var{arch} is compatible with @var{cpu}.  Other combinations of
16386@option{-mcpu} and @option{-march} are rejected.
16387
16388GCC defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
16389@var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
16390where the value of @var{family} is given by the table above.
16391
16392@item -mtune=@var{tune}
16393@opindex mtune
16394Tune the code for a particular microarchitecture within the
16395constraints set by @option{-march} and @option{-mcpu}.
16396The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
16397@samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
16398and @samp{cpu32}.  The ColdFire microarchitectures
16399are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
16400
16401You can also use @option{-mtune=68020-40} for code that needs
16402to run relatively well on 68020, 68030 and 68040 targets.
16403@option{-mtune=68020-60} is similar but includes 68060 targets
16404as well.  These two options select the same tuning decisions as
16405@option{-m68020-40} and @option{-m68020-60} respectively.
16406
16407GCC defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
16408when tuning for 680x0 architecture @var{arch}.  It also defines
16409@samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
16410option is used.  If GCC is tuning for a range of architectures,
16411as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
16412it defines the macros for every architecture in the range.
16413
16414GCC also defines the macro @samp{__m@var{uarch}__} when tuning for
16415ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
16416of the arguments given above.
16417
16418@item -m68000
16419@itemx -mc68000
16420@opindex m68000
16421@opindex mc68000
16422Generate output for a 68000.  This is the default
16423when the compiler is configured for 68000-based systems.
16424It is equivalent to @option{-march=68000}.
16425
16426Use this option for microcontrollers with a 68000 or EC000 core,
16427including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16428
16429@item -m68010
16430@opindex m68010
16431Generate output for a 68010.  This is the default
16432when the compiler is configured for 68010-based systems.
16433It is equivalent to @option{-march=68010}.
16434
16435@item -m68020
16436@itemx -mc68020
16437@opindex m68020
16438@opindex mc68020
16439Generate output for a 68020.  This is the default
16440when the compiler is configured for 68020-based systems.
16441It is equivalent to @option{-march=68020}.
16442
16443@item -m68030
16444@opindex m68030
16445Generate output for a 68030.  This is the default when the compiler is
16446configured for 68030-based systems.  It is equivalent to
16447@option{-march=68030}.
16448
16449@item -m68040
16450@opindex m68040
16451Generate output for a 68040.  This is the default when the compiler is
16452configured for 68040-based systems.  It is equivalent to
16453@option{-march=68040}.
16454
16455This option inhibits the use of 68881/68882 instructions that have to be
16456emulated by software on the 68040.  Use this option if your 68040 does not
16457have code to emulate those instructions.
16458
16459@item -m68060
16460@opindex m68060
16461Generate output for a 68060.  This is the default when the compiler is
16462configured for 68060-based systems.  It is equivalent to
16463@option{-march=68060}.
16464
16465This option inhibits the use of 68020 and 68881/68882 instructions that
16466have to be emulated by software on the 68060.  Use this option if your 68060
16467does not have code to emulate those instructions.
16468
16469@item -mcpu32
16470@opindex mcpu32
16471Generate output for a CPU32.  This is the default
16472when the compiler is configured for CPU32-based systems.
16473It is equivalent to @option{-march=cpu32}.
16474
16475Use this option for microcontrollers with a
16476CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
1647768336, 68340, 68341, 68349 and 68360.
16478
16479@item -m5200
16480@opindex m5200
16481Generate output for a 520X ColdFire CPU@.  This is the default
16482when the compiler is configured for 520X-based systems.
16483It is equivalent to @option{-mcpu=5206}, and is now deprecated
16484in favor of that option.
16485
16486Use this option for microcontroller with a 5200 core, including
16487the MCF5202, MCF5203, MCF5204 and MCF5206.
16488
16489@item -m5206e
16490@opindex m5206e
16491Generate output for a 5206e ColdFire CPU@.  The option is now
16492deprecated in favor of the equivalent @option{-mcpu=5206e}.
16493
16494@item -m528x
16495@opindex m528x
16496Generate output for a member of the ColdFire 528X family.
16497The option is now deprecated in favor of the equivalent
16498@option{-mcpu=528x}.
16499
16500@item -m5307
16501@opindex m5307
16502Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
16503in favor of the equivalent @option{-mcpu=5307}.
16504
16505@item -m5407
16506@opindex m5407
16507Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
16508in favor of the equivalent @option{-mcpu=5407}.
16509
16510@item -mcfv4e
16511@opindex mcfv4e
16512Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
16513This includes use of hardware floating-point instructions.
16514The option is equivalent to @option{-mcpu=547x}, and is now
16515deprecated in favor of that option.
16516
16517@item -m68020-40
16518@opindex m68020-40
16519Generate output for a 68040, without using any of the new instructions.
16520This results in code that can run relatively efficiently on either a
1652168020/68881 or a 68030 or a 68040.  The generated code does use the
1652268881 instructions that are emulated on the 68040.
16523
16524The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
16525
16526@item -m68020-60
16527@opindex m68020-60
16528Generate output for a 68060, without using any of the new instructions.
16529This results in code that can run relatively efficiently on either a
1653068020/68881 or a 68030 or a 68040.  The generated code does use the
1653168881 instructions that are emulated on the 68060.
16532
16533The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
16534
16535@item -mhard-float
16536@itemx -m68881
16537@opindex mhard-float
16538@opindex m68881
16539Generate floating-point instructions.  This is the default for 68020
16540and above, and for ColdFire devices that have an FPU@.  It defines the
16541macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
16542on ColdFire targets.
16543
16544@item -msoft-float
16545@opindex msoft-float
16546Do not generate floating-point instructions; use library calls instead.
16547This is the default for 68000, 68010, and 68832 targets.  It is also
16548the default for ColdFire devices that have no FPU.
16549
16550@item -mdiv
16551@itemx -mno-div
16552@opindex mdiv
16553@opindex mno-div
16554Generate (do not generate) ColdFire hardware divide and remainder
16555instructions.  If @option{-march} is used without @option{-mcpu},
16556the default is ``on'' for ColdFire architectures and ``off'' for M680x0
16557architectures.  Otherwise, the default is taken from the target CPU
16558(either the default CPU, or the one specified by @option{-mcpu}).  For
16559example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
16560@option{-mcpu=5206e}.
16561
16562GCC defines the macro @samp{__mcfhwdiv__} when this option is enabled.
16563
16564@item -mshort
16565@opindex mshort
16566Consider type @code{int} to be 16 bits wide, like @code{short int}.
16567Additionally, parameters passed on the stack are also aligned to a
1656816-bit boundary even on targets whose API mandates promotion to 32-bit.
16569
16570@item -mno-short
16571@opindex mno-short
16572Do not consider type @code{int} to be 16 bits wide.  This is the default.
16573
16574@item -mnobitfield
16575@itemx -mno-bitfield
16576@opindex mnobitfield
16577@opindex mno-bitfield
16578Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
16579and @option{-m5200} options imply @w{@option{-mnobitfield}}.
16580
16581@item -mbitfield
16582@opindex mbitfield
16583Do use the bit-field instructions.  The @option{-m68020} option implies
16584@option{-mbitfield}.  This is the default if you use a configuration
16585designed for a 68020.
16586
16587@item -mrtd
16588@opindex mrtd
16589Use a different function-calling convention, in which functions
16590that take a fixed number of arguments return with the @code{rtd}
16591instruction, which pops their arguments while returning.  This
16592saves one instruction in the caller since there is no need to pop
16593the arguments there.
16594
16595This calling convention is incompatible with the one normally
16596used on Unix, so you cannot use it if you need to call libraries
16597compiled with the Unix compiler.
16598
16599Also, you must provide function prototypes for all functions that
16600take variable numbers of arguments (including @code{printf});
16601otherwise incorrect code is generated for calls to those
16602functions.
16603
16604In addition, seriously incorrect code results if you call a
16605function with too many arguments.  (Normally, extra arguments are
16606harmlessly ignored.)
16607
16608The @code{rtd} instruction is supported by the 68010, 68020, 68030,
1660968040, 68060 and CPU32 processors, but not by the 68000 or 5200.
16610
16611@item -mno-rtd
16612@opindex mno-rtd
16613Do not use the calling conventions selected by @option{-mrtd}.
16614This is the default.
16615
16616@item -malign-int
16617@itemx -mno-align-int
16618@opindex malign-int
16619@opindex mno-align-int
16620Control whether GCC aligns @code{int}, @code{long}, @code{long long},
16621@code{float}, @code{double}, and @code{long double} variables on a 32-bit
16622boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
16623Aligning variables on 32-bit boundaries produces code that runs somewhat
16624faster on processors with 32-bit busses at the expense of more memory.
16625
16626@strong{Warning:} if you use the @option{-malign-int} switch, GCC
16627aligns structures containing the above types differently than
16628most published application binary interface specifications for the m68k.
16629
16630@item -mpcrel
16631@opindex mpcrel
16632Use the pc-relative addressing mode of the 68000 directly, instead of
16633using a global offset table.  At present, this option implies @option{-fpic},
16634allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
16635not presently supported with @option{-mpcrel}, though this could be supported for
1663668020 and higher processors.
16637
16638@item -mno-strict-align
16639@itemx -mstrict-align
16640@opindex mno-strict-align
16641@opindex mstrict-align
16642Do not (do) assume that unaligned memory references are handled by
16643the system.
16644
16645@item -msep-data
16646Generate code that allows the data segment to be located in a different
16647area of memory from the text segment.  This allows for execute-in-place in
16648an environment without virtual memory management.  This option implies
16649@option{-fPIC}.
16650
16651@item -mno-sep-data
16652Generate code that assumes that the data segment follows the text segment.
16653This is the default.
16654
16655@item -mid-shared-library
16656Generate code that supports shared libraries via the library ID method.
16657This allows for execute-in-place and shared libraries in an environment
16658without virtual memory management.  This option implies @option{-fPIC}.
16659
16660@item -mno-id-shared-library
16661Generate code that doesn't assume ID-based shared libraries are being used.
16662This is the default.
16663
16664@item -mshared-library-id=n
16665Specifies the identification number of the ID-based shared library being
16666compiled.  Specifying a value of 0 generates more compact code; specifying
16667other values forces the allocation of that number to the current
16668library, but is no more space- or time-efficient than omitting this option.
16669
16670@item -mxgot
16671@itemx -mno-xgot
16672@opindex mxgot
16673@opindex mno-xgot
16674When generating position-independent code for ColdFire, generate code
16675that works if the GOT has more than 8192 entries.  This code is
16676larger and slower than code generated without this option.  On M680x0
16677processors, this option is not needed; @option{-fPIC} suffices.
16678
16679GCC normally uses a single instruction to load values from the GOT@.
16680While this is relatively efficient, it only works if the GOT
16681is smaller than about 64k.  Anything larger causes the linker
16682to report an error such as:
16683
16684@cindex relocation truncated to fit (ColdFire)
16685@smallexample
16686relocation truncated to fit: R_68K_GOT16O foobar
16687@end smallexample
16688
16689If this happens, you should recompile your code with @option{-mxgot}.
16690It should then work with very large GOTs.  However, code generated with
16691@option{-mxgot} is less efficient, since it takes 4 instructions to fetch
16692the value of a global symbol.
16693
16694Note that some linkers, including newer versions of the GNU linker,
16695can create multiple GOTs and sort GOT entries.  If you have such a linker,
16696you should only need to use @option{-mxgot} when compiling a single
16697object file that accesses more than 8192 GOT entries.  Very few do.
16698
16699These options have no effect unless GCC is generating
16700position-independent code.
16701
16702@end table
16703
16704@node MCore Options
16705@subsection MCore Options
16706@cindex MCore options
16707
16708These are the @samp{-m} options defined for the Motorola M*Core
16709processors.
16710
16711@table @gcctabopt
16712
16713@item -mhardlit
16714@itemx -mno-hardlit
16715@opindex mhardlit
16716@opindex mno-hardlit
16717Inline constants into the code stream if it can be done in two
16718instructions or less.
16719
16720@item -mdiv
16721@itemx -mno-div
16722@opindex mdiv
16723@opindex mno-div
16724Use the divide instruction.  (Enabled by default).
16725
16726@item -mrelax-immediate
16727@itemx -mno-relax-immediate
16728@opindex mrelax-immediate
16729@opindex mno-relax-immediate
16730Allow arbitrary-sized immediates in bit operations.
16731
16732@item -mwide-bitfields
16733@itemx -mno-wide-bitfields
16734@opindex mwide-bitfields
16735@opindex mno-wide-bitfields
16736Always treat bit-fields as @code{int}-sized.
16737
16738@item -m4byte-functions
16739@itemx -mno-4byte-functions
16740@opindex m4byte-functions
16741@opindex mno-4byte-functions
16742Force all functions to be aligned to a 4-byte boundary.
16743
16744@item -mcallgraph-data
16745@itemx -mno-callgraph-data
16746@opindex mcallgraph-data
16747@opindex mno-callgraph-data
16748Emit callgraph information.
16749
16750@item -mslow-bytes
16751@itemx -mno-slow-bytes
16752@opindex mslow-bytes
16753@opindex mno-slow-bytes
16754Prefer word access when reading byte quantities.
16755
16756@item -mlittle-endian
16757@itemx -mbig-endian
16758@opindex mlittle-endian
16759@opindex mbig-endian
16760Generate code for a little-endian target.
16761
16762@item -m210
16763@itemx -m340
16764@opindex m210
16765@opindex m340
16766Generate code for the 210 processor.
16767
16768@item -mno-lsim
16769@opindex mno-lsim
16770Assume that runtime support has been provided and so omit the
16771simulator library (@file{libsim.a)} from the linker command line.
16772
16773@item -mstack-increment=@var{size}
16774@opindex mstack-increment
16775Set the maximum amount for a single stack increment operation.  Large
16776values can increase the speed of programs that contain functions
16777that need a large amount of stack space, but they can also trigger a
16778segmentation fault if the stack is extended too much.  The default
16779value is 0x1000.
16780
16781@end table
16782
16783@node MeP Options
16784@subsection MeP Options
16785@cindex MeP options
16786
16787@table @gcctabopt
16788
16789@item -mabsdiff
16790@opindex mabsdiff
16791Enables the @code{abs} instruction, which is the absolute difference
16792between two registers.
16793
16794@item -mall-opts
16795@opindex mall-opts
16796Enables all the optional instructions---average, multiply, divide, bit
16797operations, leading zero, absolute difference, min/max, clip, and
16798saturation.
16799
16800
16801@item -maverage
16802@opindex maverage
16803Enables the @code{ave} instruction, which computes the average of two
16804registers.
16805
16806@item -mbased=@var{n}
16807@opindex mbased=
16808Variables of size @var{n} bytes or smaller are placed in the
16809@code{.based} section by default.  Based variables use the @code{$tp}
16810register as a base register, and there is a 128-byte limit to the
16811@code{.based} section.
16812
16813@item -mbitops
16814@opindex mbitops
16815Enables the bit operation instructions---bit test (@code{btstm}), set
16816(@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
16817test-and-set (@code{tas}).
16818
16819@item -mc=@var{name}
16820@opindex mc=
16821Selects which section constant data is placed in.  @var{name} may
16822be @code{tiny}, @code{near}, or @code{far}.
16823
16824@item -mclip
16825@opindex mclip
16826Enables the @code{clip} instruction.  Note that @code{-mclip} is not
16827useful unless you also provide @code{-mminmax}.
16828
16829@item -mconfig=@var{name}
16830@opindex mconfig=
16831Selects one of the built-in core configurations.  Each MeP chip has
16832one or more modules in it; each module has a core CPU and a variety of
16833coprocessors, optional instructions, and peripherals.  The
16834@code{MeP-Integrator} tool, not part of GCC, provides these
16835configurations through this option; using this option is the same as
16836using all the corresponding command-line options.  The default
16837configuration is @code{default}.
16838
16839@item -mcop
16840@opindex mcop
16841Enables the coprocessor instructions.  By default, this is a 32-bit
16842coprocessor.  Note that the coprocessor is normally enabled via the
16843@code{-mconfig=} option.
16844
16845@item -mcop32
16846@opindex mcop32
16847Enables the 32-bit coprocessor's instructions.
16848
16849@item -mcop64
16850@opindex mcop64
16851Enables the 64-bit coprocessor's instructions.
16852
16853@item -mivc2
16854@opindex mivc2
16855Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
16856
16857@item -mdc
16858@opindex mdc
16859Causes constant variables to be placed in the @code{.near} section.
16860
16861@item -mdiv
16862@opindex mdiv
16863Enables the @code{div} and @code{divu} instructions.
16864
16865@item -meb
16866@opindex meb
16867Generate big-endian code.
16868
16869@item -mel
16870@opindex mel
16871Generate little-endian code.
16872
16873@item -mio-volatile
16874@opindex mio-volatile
16875Tells the compiler that any variable marked with the @code{io}
16876attribute is to be considered volatile.
16877
16878@item -ml
16879@opindex ml
16880Causes variables to be assigned to the @code{.far} section by default.
16881
16882@item -mleadz
16883@opindex mleadz
16884Enables the @code{leadz} (leading zero) instruction.
16885
16886@item -mm
16887@opindex mm
16888Causes variables to be assigned to the @code{.near} section by default.
16889
16890@item -mminmax
16891@opindex mminmax
16892Enables the @code{min} and @code{max} instructions.
16893
16894@item -mmult
16895@opindex mmult
16896Enables the multiplication and multiply-accumulate instructions.
16897
16898@item -mno-opts
16899@opindex mno-opts
16900Disables all the optional instructions enabled by @code{-mall-opts}.
16901
16902@item -mrepeat
16903@opindex mrepeat
16904Enables the @code{repeat} and @code{erepeat} instructions, used for
16905low-overhead looping.
16906
16907@item -ms
16908@opindex ms
16909Causes all variables to default to the @code{.tiny} section.  Note
16910that there is a 65536-byte limit to this section.  Accesses to these
16911variables use the @code{%gp} base register.
16912
16913@item -msatur
16914@opindex msatur
16915Enables the saturation instructions.  Note that the compiler does not
16916currently generate these itself, but this option is included for
16917compatibility with other tools, like @code{as}.
16918
16919@item -msdram
16920@opindex msdram
16921Link the SDRAM-based runtime instead of the default ROM-based runtime.
16922
16923@item -msim
16924@opindex msim
16925Link the simulator run-time libraries.
16926
16927@item -msimnovec
16928@opindex msimnovec
16929Link the simulator runtime libraries, excluding built-in support
16930for reset and exception vectors and tables.
16931
16932@item -mtf
16933@opindex mtf
16934Causes all functions to default to the @code{.far} section.  Without
16935this option, functions default to the @code{.near} section.
16936
16937@item -mtiny=@var{n}
16938@opindex mtiny=
16939Variables that are @var{n} bytes or smaller are allocated to the
16940@code{.tiny} section.  These variables use the @code{$gp} base
16941register.  The default for this option is 4, but note that there's a
1694265536-byte limit to the @code{.tiny} section.
16943
16944@end table
16945
16946@node MicroBlaze Options
16947@subsection MicroBlaze Options
16948@cindex MicroBlaze Options
16949
16950@table @gcctabopt
16951
16952@item -msoft-float
16953@opindex msoft-float
16954Use software emulation for floating point (default).
16955
16956@item -mhard-float
16957@opindex mhard-float
16958Use hardware floating-point instructions.
16959
16960@item -mmemcpy
16961@opindex mmemcpy
16962Do not optimize block moves, use @code{memcpy}.
16963
16964@item -mno-clearbss
16965@opindex mno-clearbss
16966This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.
16967
16968@item -mcpu=@var{cpu-type}
16969@opindex mcpu=
16970Use features of, and schedule code for, the given CPU.
16971Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
16972where @var{X} is a major version, @var{YY} is the minor version, and
16973@var{Z} is compatibility code.  Example values are @samp{v3.00.a},
16974@samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}.
16975
16976@item -mxl-soft-mul
16977@opindex mxl-soft-mul
16978Use software multiply emulation (default).
16979
16980@item -mxl-soft-div
16981@opindex mxl-soft-div
16982Use software emulation for divides (default).
16983
16984@item -mxl-barrel-shift
16985@opindex mxl-barrel-shift
16986Use the hardware barrel shifter.
16987
16988@item -mxl-pattern-compare
16989@opindex mxl-pattern-compare
16990Use pattern compare instructions.
16991
16992@item -msmall-divides
16993@opindex msmall-divides
16994Use table lookup optimization for small signed integer divisions.
16995
16996@item -mxl-stack-check
16997@opindex mxl-stack-check
16998This option is deprecated.  Use @option{-fstack-check} instead.
16999
17000@item -mxl-gp-opt
17001@opindex mxl-gp-opt
17002Use GP-relative @code{.sdata}/@code{.sbss} sections.
17003
17004@item -mxl-multiply-high
17005@opindex mxl-multiply-high
17006Use multiply high instructions for high part of 32x32 multiply.
17007
17008@item -mxl-float-convert
17009@opindex mxl-float-convert
17010Use hardware floating-point conversion instructions.
17011
17012@item -mxl-float-sqrt
17013@opindex mxl-float-sqrt
17014Use hardware floating-point square root instruction.
17015
17016@item -mbig-endian
17017@opindex mbig-endian
17018Generate code for a big-endian target.
17019
17020@item -mlittle-endian
17021@opindex mlittle-endian
17022Generate code for a little-endian target.
17023
17024@item -mxl-reorder
17025@opindex mxl-reorder
17026Use reorder instructions (swap and byte reversed load/store).
17027
17028@item -mxl-mode-@var{app-model}
17029Select application model @var{app-model}.  Valid models are
17030@table @samp
17031@item executable
17032normal executable (default), uses startup code @file{crt0.o}.
17033
17034@item xmdstub
17035for use with Xilinx Microprocessor Debugger (XMD) based
17036software intrusive debug agent called xmdstub. This uses startup file
17037@file{crt1.o} and sets the start address of the program to 0x800.
17038
17039@item bootstrap
17040for applications that are loaded using a bootloader.
17041This model uses startup file @file{crt2.o} which does not contain a processor
17042reset vector handler. This is suitable for transferring control on a
17043processor reset to the bootloader rather than the application.
17044
17045@item novectors
17046for applications that do not require any of the
17047MicroBlaze vectors. This option may be useful for applications running
17048within a monitoring application. This model uses @file{crt3.o} as a startup file.
17049@end table
17050
17051Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
17052@option{-mxl-mode-@var{app-model}}.
17053
17054@end table
17055
17056@node MIPS Options
17057@subsection MIPS Options
17058@cindex MIPS options
17059
17060@table @gcctabopt
17061
17062@item -EB
17063@opindex EB
17064Generate big-endian code.
17065
17066@item -EL
17067@opindex EL
17068Generate little-endian code.  This is the default for @samp{mips*el-*-*}
17069configurations.
17070
17071@item -march=@var{arch}
17072@opindex march
17073Generate code that runs on @var{arch}, which can be the name of a
17074generic MIPS ISA, or the name of a particular processor.
17075The ISA names are:
17076@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
17077@samp{mips32}, @samp{mips32r2}, @samp{mips64} and @samp{mips64r2}.
17078The processor names are:
17079@samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
17080@samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
17081@samp{5kc}, @samp{5kf},
17082@samp{20kc},
17083@samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
17084@samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
17085@samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, @samp{34kn},
17086@samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
17087@samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
17088@samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a},
17089@samp{m4k},
17090@samp{m14k}, @samp{m14kc}, @samp{m14ke}, @samp{m14kec},
17091@samp{octeon}, @samp{octeon+}, @samp{octeon2},
17092@samp{orion},
17093@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
17094@samp{r4600}, @samp{r4650}, @samp{r4700}, @samp{r6000}, @samp{r8000},
17095@samp{rm7000}, @samp{rm9000},
17096@samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
17097@samp{sb1},
17098@samp{sr71000},
17099@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
17100@samp{vr5000}, @samp{vr5400}, @samp{vr5500},
17101@samp{xlr} and @samp{xlp}.
17102The special value @samp{from-abi} selects the
17103most compatible architecture for the selected ABI (that is,
17104@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
17105
17106The native Linux/GNU toolchain also supports the value @samp{native},
17107which selects the best architecture option for the host processor.
17108@option{-march=native} has no effect if GCC does not recognize
17109the processor.
17110
17111In processor names, a final @samp{000} can be abbreviated as @samp{k}
17112(for example, @option{-march=r2k}).  Prefixes are optional, and
17113@samp{vr} may be written @samp{r}.
17114
17115Names of the form @samp{@var{n}f2_1} refer to processors with
17116FPUs clocked at half the rate of the core, names of the form
17117@samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
17118rate as the core, and names of the form @samp{@var{n}f3_2} refer to
17119processors with FPUs clocked a ratio of 3:2 with respect to the core.
17120For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
17121for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
17122accepted as synonyms for @samp{@var{n}f1_1}.
17123
17124GCC defines two macros based on the value of this option.  The first
17125is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
17126a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
17127where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
17128For example, @option{-march=r2000} sets @samp{_MIPS_ARCH}
17129to @samp{"r2000"} and defines the macro @samp{_MIPS_ARCH_R2000}.
17130
17131Note that the @samp{_MIPS_ARCH} macro uses the processor names given
17132above.  In other words, it has the full prefix and does not
17133abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
17134the macro names the resolved architecture (either @samp{"mips1"} or
17135@samp{"mips3"}).  It names the default architecture when no
17136@option{-march} option is given.
17137
17138@item -mtune=@var{arch}
17139@opindex mtune
17140Optimize for @var{arch}.  Among other things, this option controls
17141the way instructions are scheduled, and the perceived cost of arithmetic
17142operations.  The list of @var{arch} values is the same as for
17143@option{-march}.
17144
17145When this option is not used, GCC optimizes for the processor
17146specified by @option{-march}.  By using @option{-march} and
17147@option{-mtune} together, it is possible to generate code that
17148runs on a family of processors, but optimize the code for one
17149particular member of that family.
17150
17151@option{-mtune} defines the macros @samp{_MIPS_TUNE} and
17152@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
17153@option{-march} ones described above.
17154
17155@item -mips1
17156@opindex mips1
17157Equivalent to @option{-march=mips1}.
17158
17159@item -mips2
17160@opindex mips2
17161Equivalent to @option{-march=mips2}.
17162
17163@item -mips3
17164@opindex mips3
17165Equivalent to @option{-march=mips3}.
17166
17167@item -mips4
17168@opindex mips4
17169Equivalent to @option{-march=mips4}.
17170
17171@item -mips32
17172@opindex mips32
17173Equivalent to @option{-march=mips32}.
17174
17175@item -mips32r2
17176@opindex mips32r2
17177Equivalent to @option{-march=mips32r2}.
17178
17179@item -mips64
17180@opindex mips64
17181Equivalent to @option{-march=mips64}.
17182
17183@item -mips64r2
17184@opindex mips64r2
17185Equivalent to @option{-march=mips64r2}.
17186
17187@item -mips16
17188@itemx -mno-mips16
17189@opindex mips16
17190@opindex mno-mips16
17191Generate (do not generate) MIPS16 code.  If GCC is targeting a
17192MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.
17193
17194MIPS16 code generation can also be controlled on a per-function basis
17195by means of @code{mips16} and @code{nomips16} attributes.
17196@xref{Function Attributes}, for more information.
17197
17198@item -mflip-mips16
17199@opindex mflip-mips16
17200Generate MIPS16 code on alternating functions.  This option is provided
17201for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
17202not intended for ordinary use in compiling user code.
17203
17204@item -minterlink-compressed
17205@item -mno-interlink-compressed
17206@opindex minterlink-compressed
17207@opindex mno-interlink-compressed
17208Require (do not require) that code using the standard (uncompressed) MIPS ISA
17209be link-compatible with MIPS16 and microMIPS code, and vice versa.
17210
17211For example, code using the standard ISA encoding cannot jump directly
17212to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
17213@option{-minterlink-compressed} therefore disables direct jumps unless GCC
17214knows that the target of the jump is not compressed.
17215
17216@item -minterlink-mips16
17217@itemx -mno-interlink-mips16
17218@opindex minterlink-mips16
17219@opindex mno-interlink-mips16
17220Aliases of @option{-minterlink-compressed} and
17221@option{-mno-interlink-compressed}.  These options predate the microMIPS ASE
17222and are retained for backwards compatibility.
17223
17224@item -mabi=32
17225@itemx -mabi=o64
17226@itemx -mabi=n32
17227@itemx -mabi=64
17228@itemx -mabi=eabi
17229@opindex mabi=32
17230@opindex mabi=o64
17231@opindex mabi=n32
17232@opindex mabi=64
17233@opindex mabi=eabi
17234Generate code for the given ABI@.
17235
17236Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
17237generates 64-bit code when you select a 64-bit architecture, but you
17238can use @option{-mgp32} to get 32-bit code instead.
17239
17240For information about the O64 ABI, see
17241@uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.
17242
17243GCC supports a variant of the o32 ABI in which floating-point registers
17244are 64 rather than 32 bits wide.  You can select this combination with
17245@option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
17246and @code{mfhc1} instructions and is therefore only supported for
17247MIPS32R2 processors.
17248
17249The register assignments for arguments and return values remain the
17250same, but each scalar value is passed in a single 64-bit register
17251rather than a pair of 32-bit registers.  For example, scalar
17252floating-point values are returned in @samp{$f0} only, not a
17253@samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
17254remains the same, but all 64 bits are saved.
17255
17256@item -mabicalls
17257@itemx -mno-abicalls
17258@opindex mabicalls
17259@opindex mno-abicalls
17260Generate (do not generate) code that is suitable for SVR4-style
17261dynamic objects.  @option{-mabicalls} is the default for SVR4-based
17262systems.
17263
17264@item -mshared
17265@itemx -mno-shared
17266Generate (do not generate) code that is fully position-independent,
17267and that can therefore be linked into shared libraries.  This option
17268only affects @option{-mabicalls}.
17269
17270All @option{-mabicalls} code has traditionally been position-independent,
17271regardless of options like @option{-fPIC} and @option{-fpic}.  However,
17272as an extension, the GNU toolchain allows executables to use absolute
17273accesses for locally-binding symbols.  It can also use shorter GP
17274initialization sequences and generate direct calls to locally-defined
17275functions.  This mode is selected by @option{-mno-shared}.
17276
17277@option{-mno-shared} depends on binutils 2.16 or higher and generates
17278objects that can only be linked by the GNU linker.  However, the option
17279does not affect the ABI of the final executable; it only affects the ABI
17280of relocatable objects.  Using @option{-mno-shared} generally makes
17281executables both smaller and quicker.
17282
17283@option{-mshared} is the default.
17284
17285@item -mplt
17286@itemx -mno-plt
17287@opindex mplt
17288@opindex mno-plt
17289Assume (do not assume) that the static and dynamic linkers
17290support PLTs and copy relocations.  This option only affects
17291@option{-mno-shared -mabicalls}.  For the n64 ABI, this option
17292has no effect without @option{-msym32}.
17293
17294You can make @option{-mplt} the default by configuring
17295GCC with @option{--with-mips-plt}.  The default is
17296@option{-mno-plt} otherwise.
17297
17298@item -mxgot
17299@itemx -mno-xgot
17300@opindex mxgot
17301@opindex mno-xgot
17302Lift (do not lift) the usual restrictions on the size of the global
17303offset table.
17304
17305GCC normally uses a single instruction to load values from the GOT@.
17306While this is relatively efficient, it only works if the GOT
17307is smaller than about 64k.  Anything larger causes the linker
17308to report an error such as:
17309
17310@cindex relocation truncated to fit (MIPS)
17311@smallexample
17312relocation truncated to fit: R_MIPS_GOT16 foobar
17313@end smallexample
17314
17315If this happens, you should recompile your code with @option{-mxgot}.
17316This works with very large GOTs, although the code is also
17317less efficient, since it takes three instructions to fetch the
17318value of a global symbol.
17319
17320Note that some linkers can create multiple GOTs.  If you have such a
17321linker, you should only need to use @option{-mxgot} when a single object
17322file accesses more than 64k's worth of GOT entries.  Very few do.
17323
17324These options have no effect unless GCC is generating position
17325independent code.
17326
17327@item -mgp32
17328@opindex mgp32
17329Assume that general-purpose registers are 32 bits wide.
17330
17331@item -mgp64
17332@opindex mgp64
17333Assume that general-purpose registers are 64 bits wide.
17334
17335@item -mfp32
17336@opindex mfp32
17337Assume that floating-point registers are 32 bits wide.
17338
17339@item -mfp64
17340@opindex mfp64
17341Assume that floating-point registers are 64 bits wide.
17342
17343@item -mhard-float
17344@opindex mhard-float
17345Use floating-point coprocessor instructions.
17346
17347@item -msoft-float
17348@opindex msoft-float
17349Do not use floating-point coprocessor instructions.  Implement
17350floating-point calculations using library calls instead.
17351
17352@item -mno-float
17353@opindex mno-float
17354Equivalent to @option{-msoft-float}, but additionally asserts that the
17355program being compiled does not perform any floating-point operations.
17356This option is presently supported only by some bare-metal MIPS
17357configurations, where it may select a special set of libraries
17358that lack all floating-point support (including, for example, the
17359floating-point @code{printf} formats).
17360If code compiled with @code{-mno-float} accidentally contains
17361floating-point operations, it is likely to suffer a link-time
17362or run-time failure.
17363
17364@item -msingle-float
17365@opindex msingle-float
17366Assume that the floating-point coprocessor only supports single-precision
17367operations.
17368
17369@item -mdouble-float
17370@opindex mdouble-float
17371Assume that the floating-point coprocessor supports double-precision
17372operations.  This is the default.
17373
17374@item -mabs=2008
17375@itemx -mabs=legacy
17376@opindex mabs=2008
17377@opindex mabs=legacy
17378These options control the treatment of the special not-a-number (NaN)
17379IEEE 754 floating-point data with the @code{abs.@i{fmt}} and
17380@code{neg.@i{fmt}} machine instructions.
17381
17382By default or when the @option{-mabs=legacy} is used the legacy
17383treatment is selected.  In this case these instructions are considered
17384arithmetic and avoided where correct operation is required and the
17385input operand might be a NaN.  A longer sequence of instructions that
17386manipulate the sign bit of floating-point datum manually is used
17387instead unless the @option{-ffinite-math-only} option has also been
17388specified.
17389
17390The @option{-mabs=2008} option selects the IEEE 754-2008 treatment.  In
17391this case these instructions are considered non-arithmetic and therefore
17392operating correctly in all cases, including in particular where the
17393input operand is a NaN.  These instructions are therefore always used
17394for the respective operations.
17395
17396@item -mnan=2008
17397@itemx -mnan=legacy
17398@opindex mnan=2008
17399@opindex mnan=legacy
17400These options control the encoding of the special not-a-number (NaN)
17401IEEE 754 floating-point data.
17402
17403The @option{-mnan=legacy} option selects the legacy encoding.  In this
17404case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17405significand field being 0, whereas signalling NaNs (sNaNs) are denoted
17406by the first bit of their trailing significand field being 1.
17407
17408The @option{-mnan=2008} option selects the IEEE 754-2008 encoding.  In
17409this case qNaNs are denoted by the first bit of their trailing
17410significand field being 1, whereas sNaNs are denoted by the first bit of
17411their trailing significand field being 0.
17412
17413The default is @option{-mnan=legacy} unless GCC has been configured with
17414@option{--with-nan=2008}.
17415
17416@item -mllsc
17417@itemx -mno-llsc
17418@opindex mllsc
17419@opindex mno-llsc
17420Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
17421implement atomic memory built-in functions.  When neither option is
17422specified, GCC uses the instructions if the target architecture
17423supports them.
17424
17425@option{-mllsc} is useful if the runtime environment can emulate the
17426instructions and @option{-mno-llsc} can be useful when compiling for
17427nonstandard ISAs.  You can make either option the default by
17428configuring GCC with @option{--with-llsc} and @option{--without-llsc}
17429respectively.  @option{--with-llsc} is the default for some
17430configurations; see the installation documentation for details.
17431
17432@item -mdsp
17433@itemx -mno-dsp
17434@opindex mdsp
17435@opindex mno-dsp
17436Use (do not use) revision 1 of the MIPS DSP ASE@.
17437@xref{MIPS DSP Built-in Functions}.  This option defines the
17438preprocessor macro @samp{__mips_dsp}.  It also defines
17439@samp{__mips_dsp_rev} to 1.
17440
17441@item -mdspr2
17442@itemx -mno-dspr2
17443@opindex mdspr2
17444@opindex mno-dspr2
17445Use (do not use) revision 2 of the MIPS DSP ASE@.
17446@xref{MIPS DSP Built-in Functions}.  This option defines the
17447preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
17448It also defines @samp{__mips_dsp_rev} to 2.
17449
17450@item -msmartmips
17451@itemx -mno-smartmips
17452@opindex msmartmips
17453@opindex mno-smartmips
17454Use (do not use) the MIPS SmartMIPS ASE.
17455
17456@item -mpaired-single
17457@itemx -mno-paired-single
17458@opindex mpaired-single
17459@opindex mno-paired-single
17460Use (do not use) paired-single floating-point instructions.
17461@xref{MIPS Paired-Single Support}.  This option requires
17462hardware floating-point support to be enabled.
17463
17464@item -mdmx
17465@itemx -mno-mdmx
17466@opindex mdmx
17467@opindex mno-mdmx
17468Use (do not use) MIPS Digital Media Extension instructions.
17469This option can only be used when generating 64-bit code and requires
17470hardware floating-point support to be enabled.
17471
17472@item -mips3d
17473@itemx -mno-mips3d
17474@opindex mips3d
17475@opindex mno-mips3d
17476Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
17477The option @option{-mips3d} implies @option{-mpaired-single}.
17478
17479@item -mmicromips
17480@itemx -mno-micromips
17481@opindex mmicromips
17482@opindex mno-mmicromips
17483Generate (do not generate) microMIPS code.
17484
17485MicroMIPS code generation can also be controlled on a per-function basis
17486by means of @code{micromips} and @code{nomicromips} attributes.
17487@xref{Function Attributes}, for more information.
17488
17489@item -mmt
17490@itemx -mno-mt
17491@opindex mmt
17492@opindex mno-mt
17493Use (do not use) MT Multithreading instructions.
17494
17495@item -mmcu
17496@itemx -mno-mcu
17497@opindex mmcu
17498@opindex mno-mcu
17499Use (do not use) the MIPS MCU ASE instructions.
17500
17501@item -meva
17502@itemx -mno-eva
17503@opindex meva
17504@opindex mno-eva
17505Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17506
17507@item -mvirt
17508@itemx -mno-virt
17509@opindex mvirt
17510@opindex mno-virt
17511Use (do not use) the MIPS Virtualization Application Specific instructions.
17512
17513@item -mlong64
17514@opindex mlong64
17515Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
17516an explanation of the default and the way that the pointer size is
17517determined.
17518
17519@item -mlong32
17520@opindex mlong32
17521Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
17522
17523The default size of @code{int}s, @code{long}s and pointers depends on
17524the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
17525uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
1752632-bit @code{long}s.  Pointers are the same size as @code{long}s,
17527or the same size as integer registers, whichever is smaller.
17528
17529@item -msym32
17530@itemx -mno-sym32
17531@opindex msym32
17532@opindex mno-sym32
17533Assume (do not assume) that all symbols have 32-bit values, regardless
17534of the selected ABI@.  This option is useful in combination with
17535@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
17536to generate shorter and faster references to symbolic addresses.
17537
17538@item -G @var{num}
17539@opindex G
17540Put definitions of externally-visible data in a small data section
17541if that data is no bigger than @var{num} bytes.  GCC can then generate
17542more efficient accesses to the data; see @option{-mgpopt} for details.
17543
17544The default @option{-G} option depends on the configuration.
17545
17546@item -mlocal-sdata
17547@itemx -mno-local-sdata
17548@opindex mlocal-sdata
17549@opindex mno-local-sdata
17550Extend (do not extend) the @option{-G} behavior to local data too,
17551such as to static variables in C@.  @option{-mlocal-sdata} is the
17552default for all configurations.
17553
17554If the linker complains that an application is using too much small data,
17555you might want to try rebuilding the less performance-critical parts with
17556@option{-mno-local-sdata}.  You might also want to build large
17557libraries with @option{-mno-local-sdata}, so that the libraries leave
17558more room for the main program.
17559
17560@item -mextern-sdata
17561@itemx -mno-extern-sdata
17562@opindex mextern-sdata
17563@opindex mno-extern-sdata
17564Assume (do not assume) that externally-defined data is in
17565a small data section if the size of that data is within the @option{-G} limit.
17566@option{-mextern-sdata} is the default for all configurations.
17567
17568If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
17569@var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
17570that is no bigger than @var{num} bytes, you must make sure that @var{Var}
17571is placed in a small data section.  If @var{Var} is defined by another
17572module, you must either compile that module with a high-enough
17573@option{-G} setting or attach a @code{section} attribute to @var{Var}'s
17574definition.  If @var{Var} is common, you must link the application
17575with a high-enough @option{-G} setting.
17576
17577The easiest way of satisfying these restrictions is to compile
17578and link every module with the same @option{-G} option.  However,
17579you may wish to build a library that supports several different
17580small data limits.  You can do this by compiling the library with
17581the highest supported @option{-G} setting and additionally using
17582@option{-mno-extern-sdata} to stop the library from making assumptions
17583about externally-defined data.
17584
17585@item -mgpopt
17586@itemx -mno-gpopt
17587@opindex mgpopt
17588@opindex mno-gpopt
17589Use (do not use) GP-relative accesses for symbols that are known to be
17590in a small data section; see @option{-G}, @option{-mlocal-sdata} and
17591@option{-mextern-sdata}.  @option{-mgpopt} is the default for all
17592configurations.
17593
17594@option{-mno-gpopt} is useful for cases where the @code{$gp} register
17595might not hold the value of @code{_gp}.  For example, if the code is
17596part of a library that might be used in a boot monitor, programs that
17597call boot monitor routines pass an unknown value in @code{$gp}.
17598(In such situations, the boot monitor itself is usually compiled
17599with @option{-G0}.)
17600
17601@option{-mno-gpopt} implies @option{-mno-local-sdata} and
17602@option{-mno-extern-sdata}.
17603
17604@item -membedded-data
17605@itemx -mno-embedded-data
17606@opindex membedded-data
17607@opindex mno-embedded-data
17608Allocate variables to the read-only data section first if possible, then
17609next in the small data section if possible, otherwise in data.  This gives
17610slightly slower code than the default, but reduces the amount of RAM required
17611when executing, and thus may be preferred for some embedded systems.
17612
17613@item -muninit-const-in-rodata
17614@itemx -mno-uninit-const-in-rodata
17615@opindex muninit-const-in-rodata
17616@opindex mno-uninit-const-in-rodata
17617Put uninitialized @code{const} variables in the read-only data section.
17618This option is only meaningful in conjunction with @option{-membedded-data}.
17619
17620@item -mcode-readable=@var{setting}
17621@opindex mcode-readable
17622Specify whether GCC may generate code that reads from executable sections.
17623There are three possible settings:
17624
17625@table @gcctabopt
17626@item -mcode-readable=yes
17627Instructions may freely access executable sections.  This is the
17628default setting.
17629
17630@item -mcode-readable=pcrel
17631MIPS16 PC-relative load instructions can access executable sections,
17632but other instructions must not do so.  This option is useful on 4KSc
17633and 4KSd processors when the code TLBs have the Read Inhibit bit set.
17634It is also useful on processors that can be configured to have a dual
17635instruction/data SRAM interface and that, like the M4K, automatically
17636redirect PC-relative loads to the instruction RAM.
17637
17638@item -mcode-readable=no
17639Instructions must not access executable sections.  This option can be
17640useful on targets that are configured to have a dual instruction/data
17641SRAM interface but that (unlike the M4K) do not automatically redirect
17642PC-relative loads to the instruction RAM.
17643@end table
17644
17645@item -msplit-addresses
17646@itemx -mno-split-addresses
17647@opindex msplit-addresses
17648@opindex mno-split-addresses
17649Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
17650relocation operators.  This option has been superseded by
17651@option{-mexplicit-relocs} but is retained for backwards compatibility.
17652
17653@item -mexplicit-relocs
17654@itemx -mno-explicit-relocs
17655@opindex mexplicit-relocs
17656@opindex mno-explicit-relocs
17657Use (do not use) assembler relocation operators when dealing with symbolic
17658addresses.  The alternative, selected by @option{-mno-explicit-relocs},
17659is to use assembler macros instead.
17660
17661@option{-mexplicit-relocs} is the default if GCC was configured
17662to use an assembler that supports relocation operators.
17663
17664@item -mcheck-zero-division
17665@itemx -mno-check-zero-division
17666@opindex mcheck-zero-division
17667@opindex mno-check-zero-division
17668Trap (do not trap) on integer division by zero.
17669
17670The default is @option{-mcheck-zero-division}.
17671
17672@item -mdivide-traps
17673@itemx -mdivide-breaks
17674@opindex mdivide-traps
17675@opindex mdivide-breaks
17676MIPS systems check for division by zero by generating either a
17677conditional trap or a break instruction.  Using traps results in
17678smaller code, but is only supported on MIPS II and later.  Also, some
17679versions of the Linux kernel have a bug that prevents trap from
17680generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
17681allow conditional traps on architectures that support them and
17682@option{-mdivide-breaks} to force the use of breaks.
17683
17684The default is usually @option{-mdivide-traps}, but this can be
17685overridden at configure time using @option{--with-divide=breaks}.
17686Divide-by-zero checks can be completely disabled using
17687@option{-mno-check-zero-division}.
17688
17689@item -mmemcpy
17690@itemx -mno-memcpy
17691@opindex mmemcpy
17692@opindex mno-memcpy
17693Force (do not force) the use of @code{memcpy()} for non-trivial block
17694moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
17695most constant-sized copies.
17696
17697@item -mlong-calls
17698@itemx -mno-long-calls
17699@opindex mlong-calls
17700@opindex mno-long-calls
17701Disable (do not disable) use of the @code{jal} instruction.  Calling
17702functions using @code{jal} is more efficient but requires the caller
17703and callee to be in the same 256 megabyte segment.
17704
17705This option has no effect on abicalls code.  The default is
17706@option{-mno-long-calls}.
17707
17708@item -mmad
17709@itemx -mno-mad
17710@opindex mmad
17711@opindex mno-mad
17712Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
17713instructions, as provided by the R4650 ISA@.
17714
17715@item -mimadd
17716@itemx -mno-imadd
17717@opindex mimadd
17718@opindex mno-imadd
17719Enable (disable) use of the @code{madd} and @code{msub} integer
17720instructions.  The default is @option{-mimadd} on architectures
17721that support @code{madd} and @code{msub} except for the 74k
17722architecture where it was found to generate slower code.
17723
17724@item -mfused-madd
17725@itemx -mno-fused-madd
17726@opindex mfused-madd
17727@opindex mno-fused-madd
17728Enable (disable) use of the floating-point multiply-accumulate
17729instructions, when they are available.  The default is
17730@option{-mfused-madd}.
17731
17732On the R8000 CPU when multiply-accumulate instructions are used,
17733the intermediate product is calculated to infinite precision
17734and is not subject to the FCSR Flush to Zero bit.  This may be
17735undesirable in some circumstances.  On other processors the result
17736is numerically identical to the equivalent computation using
17737separate multiply, add, subtract and negate instructions.
17738
17739@item -nocpp
17740@opindex nocpp
17741Tell the MIPS assembler to not run its preprocessor over user
17742assembler files (with a @samp{.s} suffix) when assembling them.
17743
17744@item -mfix-24k
17745@item -mno-fix-24k
17746@opindex mfix-24k
17747@opindex mno-fix-24k
17748Work around the 24K E48 (lost data on stores during refill) errata.
17749The workarounds are implemented by the assembler rather than by GCC@.
17750
17751@item -mfix-r4000
17752@itemx -mno-fix-r4000
17753@opindex mfix-r4000
17754@opindex mno-fix-r4000
17755Work around certain R4000 CPU errata:
17756@itemize @minus
17757@item
17758A double-word or a variable shift may give an incorrect result if executed
17759immediately after starting an integer division.
17760@item
17761A double-word or a variable shift may give an incorrect result if executed
17762while an integer multiplication is in progress.
17763@item
17764An integer division may give an incorrect result if started in a delay slot
17765of a taken branch or a jump.
17766@end itemize
17767
17768@item -mfix-r4400
17769@itemx -mno-fix-r4400
17770@opindex mfix-r4400
17771@opindex mno-fix-r4400
17772Work around certain R4400 CPU errata:
17773@itemize @minus
17774@item
17775A double-word or a variable shift may give an incorrect result if executed
17776immediately after starting an integer division.
17777@end itemize
17778
17779@item -mfix-r10000
17780@itemx -mno-fix-r10000
17781@opindex mfix-r10000
17782@opindex mno-fix-r10000
17783Work around certain R10000 errata:
17784@itemize @minus
17785@item
17786@code{ll}/@code{sc} sequences may not behave atomically on revisions
17787prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
17788@end itemize
17789
17790This option can only be used if the target architecture supports
17791branch-likely instructions.  @option{-mfix-r10000} is the default when
17792@option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
17793otherwise.
17794
17795@item -mfix-rm7000
17796@itemx -mno-fix-rm7000
17797@opindex mfix-rm7000
17798Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
17799workarounds are implemented by the assembler rather than by GCC@.
17800
17801@item -mfix-vr4120
17802@itemx -mno-fix-vr4120
17803@opindex mfix-vr4120
17804Work around certain VR4120 errata:
17805@itemize @minus
17806@item
17807@code{dmultu} does not always produce the correct result.
17808@item
17809@code{div} and @code{ddiv} do not always produce the correct result if one
17810of the operands is negative.
17811@end itemize
17812The workarounds for the division errata rely on special functions in
17813@file{libgcc.a}.  At present, these functions are only provided by
17814the @code{mips64vr*-elf} configurations.
17815
17816Other VR4120 errata require a NOP to be inserted between certain pairs of
17817instructions.  These errata are handled by the assembler, not by GCC itself.
17818
17819@item -mfix-vr4130
17820@opindex mfix-vr4130
17821Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
17822workarounds are implemented by the assembler rather than by GCC,
17823although GCC avoids using @code{mflo} and @code{mfhi} if the
17824VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
17825instructions are available instead.
17826
17827@item -mfix-sb1
17828@itemx -mno-fix-sb1
17829@opindex mfix-sb1
17830Work around certain SB-1 CPU core errata.
17831(This flag currently works around the SB-1 revision 2
17832``F1'' and ``F2'' floating-point errata.)
17833
17834@item -mr10k-cache-barrier=@var{setting}
17835@opindex mr10k-cache-barrier
17836Specify whether GCC should insert cache barriers to avoid the
17837side-effects of speculation on R10K processors.
17838
17839In common with many processors, the R10K tries to predict the outcome
17840of a conditional branch and speculatively executes instructions from
17841the ``taken'' branch.  It later aborts these instructions if the
17842predicted outcome is wrong.  However, on the R10K, even aborted
17843instructions can have side effects.
17844
17845This problem only affects kernel stores and, depending on the system,
17846kernel loads.  As an example, a speculatively-executed store may load
17847the target memory into cache and mark the cache line as dirty, even if
17848the store itself is later aborted.  If a DMA operation writes to the
17849same area of memory before the ``dirty'' line is flushed, the cached
17850data overwrites the DMA-ed data.  See the R10K processor manual
17851for a full description, including other potential problems.
17852
17853One workaround is to insert cache barrier instructions before every memory
17854access that might be speculatively executed and that might have side
17855effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
17856controls GCC's implementation of this workaround.  It assumes that
17857aborted accesses to any byte in the following regions does not have
17858side effects:
17859
17860@enumerate
17861@item
17862the memory occupied by the current function's stack frame;
17863
17864@item
17865the memory occupied by an incoming stack argument;
17866
17867@item
17868the memory occupied by an object with a link-time-constant address.
17869@end enumerate
17870
17871It is the kernel's responsibility to ensure that speculative
17872accesses to these regions are indeed safe.
17873
17874If the input program contains a function declaration such as:
17875
17876@smallexample
17877void foo (void);
17878@end smallexample
17879
17880then the implementation of @code{foo} must allow @code{j foo} and
17881@code{jal foo} to be executed speculatively.  GCC honors this
17882restriction for functions it compiles itself.  It expects non-GCC
17883functions (such as hand-written assembly code) to do the same.
17884
17885The option has three forms:
17886
17887@table @gcctabopt
17888@item -mr10k-cache-barrier=load-store
17889Insert a cache barrier before a load or store that might be
17890speculatively executed and that might have side effects even
17891if aborted.
17892
17893@item -mr10k-cache-barrier=store
17894Insert a cache barrier before a store that might be speculatively
17895executed and that might have side effects even if aborted.
17896
17897@item -mr10k-cache-barrier=none
17898Disable the insertion of cache barriers.  This is the default setting.
17899@end table
17900
17901@item -mflush-func=@var{func}
17902@itemx -mno-flush-func
17903@opindex mflush-func
17904Specifies the function to call to flush the I and D caches, or to not
17905call any such function.  If called, the function must take the same
17906arguments as the common @code{_flush_func()}, that is, the address of the
17907memory range for which the cache is being flushed, the size of the
17908memory range, and the number 3 (to flush both caches).  The default
17909depends on the target GCC was configured for, but commonly is either
17910@samp{_flush_func} or @samp{__cpu_flush}.
17911
17912@item mbranch-cost=@var{num}
17913@opindex mbranch-cost
17914Set the cost of branches to roughly @var{num} ``simple'' instructions.
17915This cost is only a heuristic and is not guaranteed to produce
17916consistent results across releases.  A zero cost redundantly selects
17917the default, which is based on the @option{-mtune} setting.
17918
17919@item -mbranch-likely
17920@itemx -mno-branch-likely
17921@opindex mbranch-likely
17922@opindex mno-branch-likely
17923Enable or disable use of Branch Likely instructions, regardless of the
17924default for the selected architecture.  By default, Branch Likely
17925instructions may be generated if they are supported by the selected
17926architecture.  An exception is for the MIPS32 and MIPS64 architectures
17927and processors that implement those architectures; for those, Branch
17928Likely instructions are not be generated by default because the MIPS32
17929and MIPS64 architectures specifically deprecate their use.
17930
17931@item -mfp-exceptions
17932@itemx -mno-fp-exceptions
17933@opindex mfp-exceptions
17934Specifies whether FP exceptions are enabled.  This affects how
17935FP instructions are scheduled for some processors.
17936The default is that FP exceptions are
17937enabled.
17938
17939For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
1794064-bit code, then we can use both FP pipes.  Otherwise, we can only use one
17941FP pipe.
17942
17943@item -mvr4130-align
17944@itemx -mno-vr4130-align
17945@opindex mvr4130-align
17946The VR4130 pipeline is two-way superscalar, but can only issue two
17947instructions together if the first one is 8-byte aligned.  When this
17948option is enabled, GCC aligns pairs of instructions that it
17949thinks should execute in parallel.
17950
17951This option only has an effect when optimizing for the VR4130.
17952It normally makes code faster, but at the expense of making it bigger.
17953It is enabled by default at optimization level @option{-O3}.
17954
17955@item -msynci
17956@itemx -mno-synci
17957@opindex msynci
17958Enable (disable) generation of @code{synci} instructions on
17959architectures that support it.  The @code{synci} instructions (if
17960enabled) are generated when @code{__builtin___clear_cache()} is
17961compiled.
17962
17963This option defaults to @code{-mno-synci}, but the default can be
17964overridden by configuring with @code{--with-synci}.
17965
17966When compiling code for single processor systems, it is generally safe
17967to use @code{synci}.  However, on many multi-core (SMP) systems, it
17968does not invalidate the instruction caches on all cores and may lead
17969to undefined behavior.
17970
17971@item -mrelax-pic-calls
17972@itemx -mno-relax-pic-calls
17973@opindex mrelax-pic-calls
17974Try to turn PIC calls that are normally dispatched via register
17975@code{$25} into direct calls.  This is only possible if the linker can
17976resolve the destination at link-time and if the destination is within
17977range for a direct call.
17978
17979@option{-mrelax-pic-calls} is the default if GCC was configured to use
17980an assembler and a linker that support the @code{.reloc} assembly
17981directive and @code{-mexplicit-relocs} is in effect.  With
17982@code{-mno-explicit-relocs}, this optimization can be performed by the
17983assembler and the linker alone without help from the compiler.
17984
17985@item -mmcount-ra-address
17986@itemx -mno-mcount-ra-address
17987@opindex mmcount-ra-address
17988@opindex mno-mcount-ra-address
17989Emit (do not emit) code that allows @code{_mcount} to modify the
17990calling function's return address.  When enabled, this option extends
17991the usual @code{_mcount} interface with a new @var{ra-address}
17992parameter, which has type @code{intptr_t *} and is passed in register
17993@code{$12}.  @code{_mcount} can then modify the return address by
17994doing both of the following:
17995@itemize
17996@item
17997Returning the new address in register @code{$31}.
17998@item
17999Storing the new address in @code{*@var{ra-address}},
18000if @var{ra-address} is nonnull.
18001@end itemize
18002
18003The default is @option{-mno-mcount-ra-address}.
18004
18005@end table
18006
18007@node MMIX Options
18008@subsection MMIX Options
18009@cindex MMIX Options
18010
18011These options are defined for the MMIX:
18012
18013@table @gcctabopt
18014@item -mlibfuncs
18015@itemx -mno-libfuncs
18016@opindex mlibfuncs
18017@opindex mno-libfuncs
18018Specify that intrinsic library functions are being compiled, passing all
18019values in registers, no matter the size.
18020
18021@item -mepsilon
18022@itemx -mno-epsilon
18023@opindex mepsilon
18024@opindex mno-epsilon
18025Generate floating-point comparison instructions that compare with respect
18026to the @code{rE} epsilon register.
18027
18028@item -mabi=mmixware
18029@itemx -mabi=gnu
18030@opindex mabi=mmixware
18031@opindex mabi=gnu
18032Generate code that passes function parameters and return values that (in
18033the called function) are seen as registers @code{$0} and up, as opposed to
18034the GNU ABI which uses global registers @code{$231} and up.
18035
18036@item -mzero-extend
18037@itemx -mno-zero-extend
18038@opindex mzero-extend
18039@opindex mno-zero-extend
18040When reading data from memory in sizes shorter than 64 bits, use (do not
18041use) zero-extending load instructions by default, rather than
18042sign-extending ones.
18043
18044@item -mknuthdiv
18045@itemx -mno-knuthdiv
18046@opindex mknuthdiv
18047@opindex mno-knuthdiv
18048Make the result of a division yielding a remainder have the same sign as
18049the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
18050remainder follows the sign of the dividend.  Both methods are
18051arithmetically valid, the latter being almost exclusively used.
18052
18053@item -mtoplevel-symbols
18054@itemx -mno-toplevel-symbols
18055@opindex mtoplevel-symbols
18056@opindex mno-toplevel-symbols
18057Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
18058code can be used with the @code{PREFIX} assembly directive.
18059
18060@item -melf
18061@opindex melf
18062Generate an executable in the ELF format, rather than the default
18063@samp{mmo} format used by the @command{mmix} simulator.
18064
18065@item -mbranch-predict
18066@itemx -mno-branch-predict
18067@opindex mbranch-predict
18068@opindex mno-branch-predict
18069Use (do not use) the probable-branch instructions, when static branch
18070prediction indicates a probable branch.
18071
18072@item -mbase-addresses
18073@itemx -mno-base-addresses
18074@opindex mbase-addresses
18075@opindex mno-base-addresses
18076Generate (do not generate) code that uses @emph{base addresses}.  Using a
18077base address automatically generates a request (handled by the assembler
18078and the linker) for a constant to be set up in a global register.  The
18079register is used for one or more base address requests within the range 0
18080to 255 from the value held in the register.  The generally leads to short
18081and fast code, but the number of different data items that can be
18082addressed is limited.  This means that a program that uses lots of static
18083data may require @option{-mno-base-addresses}.
18084
18085@item -msingle-exit
18086@itemx -mno-single-exit
18087@opindex msingle-exit
18088@opindex mno-single-exit
18089Force (do not force) generated code to have a single exit point in each
18090function.
18091@end table
18092
18093@node MN10300 Options
18094@subsection MN10300 Options
18095@cindex MN10300 options
18096
18097These @option{-m} options are defined for Matsushita MN10300 architectures:
18098
18099@table @gcctabopt
18100@item -mmult-bug
18101@opindex mmult-bug
18102Generate code to avoid bugs in the multiply instructions for the MN10300
18103processors.  This is the default.
18104
18105@item -mno-mult-bug
18106@opindex mno-mult-bug
18107Do not generate code to avoid bugs in the multiply instructions for the
18108MN10300 processors.
18109
18110@item -mam33
18111@opindex mam33
18112Generate code using features specific to the AM33 processor.
18113
18114@item -mno-am33
18115@opindex mno-am33
18116Do not generate code using features specific to the AM33 processor.  This
18117is the default.
18118
18119@item -mam33-2
18120@opindex mam33-2
18121Generate code using features specific to the AM33/2.0 processor.
18122
18123@item -mam34
18124@opindex mam34
18125Generate code using features specific to the AM34 processor.
18126
18127@item -mtune=@var{cpu-type}
18128@opindex mtune
18129Use the timing characteristics of the indicated CPU type when
18130scheduling instructions.  This does not change the targeted processor
18131type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
18132@samp{am33-2} or @samp{am34}.
18133
18134@item -mreturn-pointer-on-d0
18135@opindex mreturn-pointer-on-d0
18136When generating a function that returns a pointer, return the pointer
18137in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
18138only in @code{a0}, and attempts to call such functions without a prototype
18139result in errors.  Note that this option is on by default; use
18140@option{-mno-return-pointer-on-d0} to disable it.
18141
18142@item -mno-crt0
18143@opindex mno-crt0
18144Do not link in the C run-time initialization object file.
18145
18146@item -mrelax
18147@opindex mrelax
18148Indicate to the linker that it should perform a relaxation optimization pass
18149to shorten branches, calls and absolute memory addresses.  This option only
18150has an effect when used on the command line for the final link step.
18151
18152This option makes symbolic debugging impossible.
18153
18154@item -mliw
18155@opindex mliw
18156Allow the compiler to generate @emph{Long Instruction Word}
18157instructions if the target is the @samp{AM33} or later.  This is the
18158default.  This option defines the preprocessor macro @samp{__LIW__}.
18159
18160@item -mnoliw
18161@opindex mnoliw
18162Do not allow the compiler to generate @emph{Long Instruction Word}
18163instructions.  This option defines the preprocessor macro
18164@samp{__NO_LIW__}.
18165
18166@item -msetlb
18167@opindex msetlb
18168Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
18169instructions if the target is the @samp{AM33} or later.  This is the
18170default.  This option defines the preprocessor macro @samp{__SETLB__}.
18171
18172@item -mnosetlb
18173@opindex mnosetlb
18174Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
18175instructions.  This option defines the preprocessor macro
18176@samp{__NO_SETLB__}.
18177
18178@end table
18179
18180@node Moxie Options
18181@subsection Moxie Options
18182@cindex Moxie Options
18183
18184@table @gcctabopt
18185
18186@item -meb
18187@opindex meb
18188Generate big-endian code.  This is the default for @samp{moxie-*-*}
18189configurations.
18190
18191@item -mel
18192@opindex mel
18193Generate little-endian code.
18194
18195@item -mno-crt0
18196@opindex mno-crt0
18197Do not link in the C run-time initialization object file.
18198
18199@end table
18200
18201@node MSP430 Options
18202@subsection MSP430 Options
18203@cindex MSP430 Options
18204
18205These options are defined for the MSP430:
18206
18207@table @gcctabopt
18208
18209@item -masm-hex
18210@opindex masm-hex
18211Force assembly output to always use hex constants.  Normally such
18212constants are signed decimals, but this option is available for
18213testsuite and/or aesthetic purposes.
18214
18215@item -mmcu=
18216@opindex mmcu=
18217Select the MCU to target.  This is used to create a C preprocessor
18218symbol based upon the MCU name, converted to upper case and pre- and
18219post- fixed with @code{__}.  This in turn will be used by the
18220@code{msp430.h} header file to select an MCU specific supplimentary
18221header file.
18222
18223The option also sets the ISA to use.  If the MCU name is one that is
18224known to only support the 430 ISA then that is selected, otherwise the
18225430X ISA is selected.  A generic MCU name of @code{msp430} can also be
18226used to select the 430 ISA.  Similarly the generic @code{msp430x} MCU
18227name will select the 430X ISA.
18228
18229In addition an MCU specific linker script will be added to the linker
18230command line.  The script's name is the name of the MCU with
18231@code{.ld} appended.  Thus specifying @option{-mmcu=xxx} on the gcc
18232command line will define the C preprocessor symbol @code{__XXX__} and
18233cause the linker to search for a script called @file{xxx.ld}.
18234
18235This option is also passed on to the assembler.
18236
18237@item -mcpu=
18238@opindex -mcpu=
18239Specifies the ISA to use.  Accepted values are @code{msp430},
18240@code{msp430x} and @code{msp430xv2}.  This option is deprecated.  The
18241@option{-mmcu=} option should be used to select the ISA.
18242
18243@item -msim
18244@opindex msim
18245Link to the simulator runtime libraries and linker script.  Overrides
18246any scripts that would be selected by the @option{-mmcu=} option.
18247
18248@item -mlarge
18249@opindex mlarge
18250Use large-model addressing (20-bit pointers, 32-bit @code{size_t}).
18251
18252@item -msmall
18253@opindex msmall
18254Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).
18255
18256@item -mrelax
18257@opindex mrelax
18258This option is passed to the assembler and linker, and allows the
18259linker to perform certain optimizations that cannot be done until
18260the final link.
18261
18262@item mhwmult=
18263@opindex mhwmult=
18264Describes the type of hardware multiply supported by the target.
18265Accepted values are @code{none} for no hardware multiply, @code{16bit}
18266for the original 16-bit-only multiply supported by early MCUs.
18267@code{32bit} for the 16/32-bit multiply supported by later MCUs and
18268@code{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
18269A value of @code{auto} can also be given.  This tells GCC to deduce
18270the hardware multiply support based upon the MCU name provided by the
18271@option{-mmcu} option.  If no @option{-mmcu} option is specified then
18272@code{32bit} hardware multiply support is assumed.  @code{auto} is the
18273default setting.
18274
18275Hardware multiplies are normally performed by calling a library
18276routine.  This saves space in the generated code.  When compiling at
18277@code{-O3} or higher however the hardware multiplier is invoked
18278inline.  This makes for bigger, but faster code.
18279
18280The hardware multiply routines disable interrupts whilst running and
18281restore the previous interrupt state when they finish.  This makes
18282them safe to use inside interrupt handlers as well as in normal code.
18283
18284@item -minrt
18285@opindex minrt
18286Enable the use of a minimum runtime environment - no static
18287initializers or constructors.  This is intended for memory-constrained
18288devices.  The compiler will include special symbols in some objects
18289that tell the linker and runtime which code fragments are required.
18290
18291@end table
18292
18293@node NDS32 Options
18294@subsection NDS32 Options
18295@cindex NDS32 Options
18296
18297These options are defined for NDS32 implementations:
18298
18299@table @gcctabopt
18300
18301@item -mbig-endian
18302@opindex mbig-endian
18303Generate code in big-endian mode.
18304
18305@item -mlittle-endian
18306@opindex mlittle-endian
18307Generate code in little-endian mode.
18308
18309@item -mreduced-regs
18310@opindex mreduced-regs
18311Use reduced-set registers for register allocation.
18312
18313@item -mfull-regs
18314@opindex mfull-regs
18315Use full-set registers for register allocation.
18316
18317@item -mcmov
18318@opindex mcmov
18319Generate conditional move instructions.
18320
18321@item -mno-cmov
18322@opindex mno-cmov
18323Do not generate conditional move instructions.
18324
18325@item -mperf-ext
18326@opindex mperf-ext
18327Generate performance extension instructions.
18328
18329@item -mno-perf-ext
18330@opindex mno-perf-ext
18331Do not generate performance extension instructions.
18332
18333@item -mv3push
18334@opindex mv3push
18335Generate v3 push25/pop25 instructions.
18336
18337@item -mno-v3push
18338@opindex mno-v3push
18339Do not generate v3 push25/pop25 instructions.
18340
18341@item -m16-bit
18342@opindex m16-bit
18343Generate 16-bit instructions.
18344
18345@item -mno-16-bit
18346@opindex mno-16-bit
18347Do not generate 16-bit instructions.
18348
18349@item -mgp-direct
18350@opindex mgp-direct
18351Generate GP base instructions directly.
18352
18353@item -mno-gp-direct
18354@opindex mno-gp-direct
18355Do no generate GP base instructions directly.
18356
18357@item -misr-vector-size=@var{num}
18358@opindex misr-vector-size
18359Specify the size of each interrupt vector, which must be 4 or 16.
18360
18361@item -mcache-block-size=@var{num}
18362@opindex mcache-block-size
18363Specify the size of each cache block,
18364which must be a power of 2 between 4 and 512.
18365
18366@item -march=@var{arch}
18367@opindex march
18368Specify the name of the target architecture.
18369
18370@item -mforce-fp-as-gp
18371@opindex mforce-fp-as-gp
18372Prevent $fp being allocated during register allocation so that compiler
18373is able to force performing fp-as-gp optimization.
18374
18375@item -mforbid-fp-as-gp
18376@opindex mforbid-fp-as-gp
18377Forbid using $fp to access static and global variables.
18378This option strictly forbids fp-as-gp optimization
18379regardless of @option{-mforce-fp-as-gp}.
18380
18381@item -mex9
18382@opindex mex9
18383Use special directives to guide linker doing ex9 optimization.
18384
18385@item -mctor-dtor
18386@opindex mctor-dtor
18387Enable constructor/destructor feature.
18388
18389@item -mrelax
18390@opindex mrelax
18391Guide linker to relax instructions.
18392
18393@end table
18394
18395@node Nios II Options
18396@subsection Nios II Options
18397@cindex Nios II options
18398@cindex Altera Nios II options
18399
18400These are the options defined for the Altera Nios II processor.
18401
18402@table @gcctabopt
18403
18404@item -G @var{num}
18405@opindex G
18406@cindex smaller data references
18407Put global and static objects less than or equal to @var{num} bytes
18408into the small data or BSS sections instead of the normal data or BSS
18409sections.  The default value of @var{num} is 8.
18410
18411@item -mgpopt
18412@itemx -mno-gpopt
18413@opindex mgpopt
18414@opindex mno-gpopt
18415Generate (do not generate) GP-relative accesses for objects in the
18416small data or BSS sections.  The default is @option{-mgpopt} except
18417when @option{-fpic} or @option{-fPIC} is specified to generate
18418position-independent code.  Note that the Nios II ABI does not permit
18419GP-relative accesses from shared libraries.
18420
18421You may need to specify @option{-mno-gpopt} explicitly when building
18422programs that include large amounts of small data, including large
18423GOT data sections.  In this case, the 16-bit offset for GP-relative
18424addressing may not be large enough to allow access to the entire
18425small data section.
18426
18427@item -mel
18428@itemx -meb
18429@opindex mel
18430@opindex meb
18431Generate little-endian (default) or big-endian (experimental) code,
18432respectively.
18433
18434@item -mbypass-cache
18435@itemx -mno-bypass-cache
18436@opindex mno-bypass-cache
18437@opindex mbypass-cache
18438Force all load and store instructions to always bypass cache by
18439using I/O variants of the instructions. The default is not to
18440bypass the cache.
18441
18442@item -mno-cache-volatile
18443@itemx -mcache-volatile
18444@opindex mcache-volatile
18445@opindex mno-cache-volatile
18446Volatile memory access bypass the cache using the I/O variants of
18447the load and store instructions. The default is not to bypass the cache.
18448
18449@item -mno-fast-sw-div
18450@itemx -mfast-sw-div
18451@opindex mno-fast-sw-div
18452@opindex mfast-sw-div
18453Do not use table-based fast divide for small numbers. The default
18454is to use the fast divide at @option{-O3} and above.
18455
18456@item -mno-hw-mul
18457@itemx -mhw-mul
18458@itemx -mno-hw-mulx
18459@itemx -mhw-mulx
18460@itemx -mno-hw-div
18461@itemx -mhw-div
18462@opindex mno-hw-mul
18463@opindex mhw-mul
18464@opindex mno-hw-mulx
18465@opindex mhw-mulx
18466@opindex mno-hw-div
18467@opindex mhw-div
18468Enable or disable emitting @code{mul}, @code{mulx} and @code{div} family of
18469instructions by the compiler. The default is to emit @code{mul}
18470and not emit @code{div} and @code{mulx}.
18471
18472@item -mcustom-@var{insn}=@var{N}
18473@itemx -mno-custom-@var{insn}
18474@opindex mcustom-@var{insn}
18475@opindex mno-custom-@var{insn}
18476Each @option{-mcustom-@var{insn}=@var{N}} option enables use of a
18477custom instruction with encoding @var{N} when generating code that uses
18478@var{insn}.  For example, @code{-mcustom-fadds=253} generates custom
18479instruction 253 for single-precision floating-point add operations instead
18480of the default behavior of using a library call.
18481
18482The following values of @var{insn} are supported.  Except as otherwise
18483noted, floating-point operations are expected to be implemented with
18484normal IEEE 754 semantics and correspond directly to the C operators or the
18485equivalent GCC built-in functions (@pxref{Other Builtins}).
18486
18487Single-precision floating point:
18488@table @asis
18489
18490@item @samp{fadds}, @samp{fsubs}, @samp{fdivs}, @samp{fmuls}
18491Binary arithmetic operations.
18492
18493@item @samp{fnegs}
18494Unary negation.
18495
18496@item @samp{fabss}
18497Unary absolute value.
18498
18499@item @samp{fcmpeqs}, @samp{fcmpges}, @samp{fcmpgts}, @samp{fcmples}, @samp{fcmplts}, @samp{fcmpnes}
18500Comparison operations.
18501
18502@item @samp{fmins}, @samp{fmaxs}
18503Floating-point minimum and maximum.  These instructions are only
18504generated if @option{-ffinite-math-only} is specified.
18505
18506@item @samp{fsqrts}
18507Unary square root operation.
18508
18509@item @samp{fcoss}, @samp{fsins}, @samp{ftans}, @samp{fatans}, @samp{fexps}, @samp{flogs}
18510Floating-point trigonometric and exponential functions.  These instructions
18511are only generated if @option{-funsafe-math-optimizations} is also specified.
18512
18513@end table
18514
18515Double-precision floating point:
18516@table @asis
18517
18518@item @samp{faddd}, @samp{fsubd}, @samp{fdivd}, @samp{fmuld}
18519Binary arithmetic operations.
18520
18521@item @samp{fnegd}
18522Unary negation.
18523
18524@item @samp{fabsd}
18525Unary absolute value.
18526
18527@item @samp{fcmpeqd}, @samp{fcmpged}, @samp{fcmpgtd}, @samp{fcmpled}, @samp{fcmpltd}, @samp{fcmpned}
18528Comparison operations.
18529
18530@item @samp{fmind}, @samp{fmaxd}
18531Double-precision minimum and maximum.  These instructions are only
18532generated if @option{-ffinite-math-only} is specified.
18533
18534@item @samp{fsqrtd}
18535Unary square root operation.
18536
18537@item @samp{fcosd}, @samp{fsind}, @samp{ftand}, @samp{fatand}, @samp{fexpd}, @samp{flogd}
18538Double-precision trigonometric and exponential functions.  These instructions
18539are only generated if @option{-funsafe-math-optimizations} is also specified.
18540
18541@end table
18542
18543Conversions:
18544@table @asis
18545@item @samp{fextsd}
18546Conversion from single precision to double precision.
18547
18548@item @samp{ftruncds}
18549Conversion from double precision to single precision.
18550
18551@item @samp{fixsi}, @samp{fixsu}, @samp{fixdi}, @samp{fixdu}
18552Conversion from floating point to signed or unsigned integer types, with
18553truncation towards zero.
18554
18555@item @samp{floatis}, @samp{floatus}, @samp{floatid}, @samp{floatud}
18556Conversion from signed or unsigned integer types to floating-point types.
18557
18558@end table
18559
18560In addition, all of the following transfer instructions for internal
18561registers X and Y must be provided to use any of the double-precision
18562floating-point instructions.  Custom instructions taking two
18563double-precision source operands expect the first operand in the
1856464-bit register X.  The other operand (or only operand of a unary
18565operation) is given to the custom arithmetic instruction with the
18566least significant half in source register @var{src1} and the most
18567significant half in @var{src2}.  A custom instruction that returns a
18568double-precision result returns the most significant 32 bits in the
18569destination register and the other half in 32-bit register Y.
18570GCC automatically generates the necessary code sequences to write
18571register X and/or read register Y when double-precision floating-point
18572instructions are used.
18573
18574@table @asis
18575
18576@item @samp{fwrx}
18577Write @var{src1} into the least significant half of X and @var{src2} into
18578the most significant half of X.
18579
18580@item @samp{fwry}
18581Write @var{src1} into Y.
18582
18583@item @samp{frdxhi}, @samp{frdxlo}
18584Read the most or least (respectively) significant half of X and store it in
18585@var{dest}.
18586
18587@item @samp{frdy}
18588Read the value of Y and store it into @var{dest}.
18589@end table
18590
18591Note that you can gain more local control over generation of Nios II custom
18592instructions by using the @code{target("custom-@var{insn}=@var{N}")}
18593and @code{target("no-custom-@var{insn}")} function attributes
18594(@pxref{Function Attributes})
18595or pragmas (@pxref{Function Specific Option Pragmas}).
18596
18597@item -mcustom-fpu-cfg=@var{name}
18598@opindex mcustom-fpu-cfg
18599
18600This option enables a predefined, named set of custom instruction encodings
18601(see @option{-mcustom-@var{insn}} above).
18602Currently, the following sets are defined:
18603
18604@option{-mcustom-fpu-cfg=60-1} is equivalent to:
18605@gccoptlist{-mcustom-fmuls=252 @gol
18606-mcustom-fadds=253 @gol
18607-mcustom-fsubs=254 @gol
18608-fsingle-precision-constant}
18609
18610@option{-mcustom-fpu-cfg=60-2} is equivalent to:
18611@gccoptlist{-mcustom-fmuls=252 @gol
18612-mcustom-fadds=253 @gol
18613-mcustom-fsubs=254 @gol
18614-mcustom-fdivs=255 @gol
18615-fsingle-precision-constant}
18616
18617@option{-mcustom-fpu-cfg=72-3} is equivalent to:
18618@gccoptlist{-mcustom-floatus=243 @gol
18619-mcustom-fixsi=244 @gol
18620-mcustom-floatis=245 @gol
18621-mcustom-fcmpgts=246 @gol
18622-mcustom-fcmples=249 @gol
18623-mcustom-fcmpeqs=250 @gol
18624-mcustom-fcmpnes=251 @gol
18625-mcustom-fmuls=252 @gol
18626-mcustom-fadds=253 @gol
18627-mcustom-fsubs=254 @gol
18628-mcustom-fdivs=255 @gol
18629-fsingle-precision-constant}
18630
18631Custom instruction assignments given by individual
18632@option{-mcustom-@var{insn}=} options override those given by
18633@option{-mcustom-fpu-cfg=}, regardless of the
18634order of the options on the command line.
18635
18636Note that you can gain more local control over selection of a FPU
18637configuration by using the @code{target("custom-fpu-cfg=@var{name}")}
18638function attribute (@pxref{Function Attributes})
18639or pragma (@pxref{Function Specific Option Pragmas}).
18640
18641@end table
18642
18643These additional @samp{-m} options are available for the Altera Nios II
18644ELF (bare-metal) target:
18645
18646@table @gcctabopt
18647
18648@item -mhal
18649@opindex mhal
18650Link with HAL BSP.  This suppresses linking with the GCC-provided C runtime
18651startup and termination code, and is typically used in conjunction with
18652@option{-msys-crt0=} to specify the location of the alternate startup code
18653provided by the HAL BSP.
18654
18655@item -msmallc
18656@opindex msmallc
18657Link with a limited version of the C library, @option{-lsmallc}, rather than
18658Newlib.
18659
18660@item -msys-crt0=@var{startfile}
18661@opindex msys-crt0
18662@var{startfile} is the file name of the startfile (crt0) to use
18663when linking.  This option is only useful in conjunction with @option{-mhal}.
18664
18665@item -msys-lib=@var{systemlib}
18666@opindex msys-lib
18667@var{systemlib} is the library name of the library that provides
18668low-level system calls required by the C library,
18669e.g. @code{read} and @code{write}.
18670This option is typically used to link with a library provided by a HAL BSP.
18671
18672@end table
18673
18674@node PDP-11 Options
18675@subsection PDP-11 Options
18676@cindex PDP-11 Options
18677
18678These options are defined for the PDP-11:
18679
18680@table @gcctabopt
18681@item -mfpu
18682@opindex mfpu
18683Use hardware FPP floating point.  This is the default.  (FIS floating
18684point on the PDP-11/40 is not supported.)
18685
18686@item -msoft-float
18687@opindex msoft-float
18688Do not use hardware floating point.
18689
18690@item -mac0
18691@opindex mac0
18692Return floating-point results in ac0 (fr0 in Unix assembler syntax).
18693
18694@item -mno-ac0
18695@opindex mno-ac0
18696Return floating-point results in memory.  This is the default.
18697
18698@item -m40
18699@opindex m40
18700Generate code for a PDP-11/40.
18701
18702@item -m45
18703@opindex m45
18704Generate code for a PDP-11/45.  This is the default.
18705
18706@item -m10
18707@opindex m10
18708Generate code for a PDP-11/10.
18709
18710@item -mbcopy-builtin
18711@opindex mbcopy-builtin
18712Use inline @code{movmemhi} patterns for copying memory.  This is the
18713default.
18714
18715@item -mbcopy
18716@opindex mbcopy
18717Do not use inline @code{movmemhi} patterns for copying memory.
18718
18719@item -mint16
18720@itemx -mno-int32
18721@opindex mint16
18722@opindex mno-int32
18723Use 16-bit @code{int}.  This is the default.
18724
18725@item -mint32
18726@itemx -mno-int16
18727@opindex mint32
18728@opindex mno-int16
18729Use 32-bit @code{int}.
18730
18731@item -mfloat64
18732@itemx -mno-float32
18733@opindex mfloat64
18734@opindex mno-float32
18735Use 64-bit @code{float}.  This is the default.
18736
18737@item -mfloat32
18738@itemx -mno-float64
18739@opindex mfloat32
18740@opindex mno-float64
18741Use 32-bit @code{float}.
18742
18743@item -mabshi
18744@opindex mabshi
18745Use @code{abshi2} pattern.  This is the default.
18746
18747@item -mno-abshi
18748@opindex mno-abshi
18749Do not use @code{abshi2} pattern.
18750
18751@item -mbranch-expensive
18752@opindex mbranch-expensive
18753Pretend that branches are expensive.  This is for experimenting with
18754code generation only.
18755
18756@item -mbranch-cheap
18757@opindex mbranch-cheap
18758Do not pretend that branches are expensive.  This is the default.
18759
18760@item -munix-asm
18761@opindex munix-asm
18762Use Unix assembler syntax.  This is the default when configured for
18763@samp{pdp11-*-bsd}.
18764
18765@item -mdec-asm
18766@opindex mdec-asm
18767Use DEC assembler syntax.  This is the default when configured for any
18768PDP-11 target other than @samp{pdp11-*-bsd}.
18769@end table
18770
18771@node picoChip Options
18772@subsection picoChip Options
18773@cindex picoChip options
18774
18775These @samp{-m} options are defined for picoChip implementations:
18776
18777@table @gcctabopt
18778
18779@item -mae=@var{ae_type}
18780@opindex mcpu
18781Set the instruction set, register set, and instruction scheduling
18782parameters for array element type @var{ae_type}.  Supported values
18783for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
18784
18785@option{-mae=ANY} selects a completely generic AE type.  Code
18786generated with this option runs on any of the other AE types.  The
18787code is not as efficient as it would be if compiled for a specific
18788AE type, and some types of operation (e.g., multiplication) do not
18789work properly on all types of AE.
18790
18791@option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
18792for compiled code, and is the default.
18793
18794@option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
18795option may suffer from poor performance of byte (char) manipulation,
18796since the DSP AE does not provide hardware support for byte load/stores.
18797
18798@item -msymbol-as-address
18799Enable the compiler to directly use a symbol name as an address in a
18800load/store instruction, without first loading it into a
18801register.  Typically, the use of this option generates larger
18802programs, which run faster than when the option isn't used.  However, the
18803results vary from program to program, so it is left as a user option,
18804rather than being permanently enabled.
18805
18806@item -mno-inefficient-warnings
18807Disables warnings about the generation of inefficient code.  These
18808warnings can be generated, for example, when compiling code that
18809performs byte-level memory operations on the MAC AE type.  The MAC AE has
18810no hardware support for byte-level memory operations, so all byte
18811load/stores must be synthesized from word load/store operations.  This is
18812inefficient and a warning is generated to indicate
18813that you should rewrite the code to avoid byte operations, or to target
18814an AE type that has the necessary hardware support.  This option disables
18815these warnings.
18816
18817@end table
18818
18819@node PowerPC Options
18820@subsection PowerPC Options
18821@cindex PowerPC options
18822
18823These are listed under @xref{RS/6000 and PowerPC Options}.
18824
18825@node RL78 Options
18826@subsection RL78 Options
18827@cindex RL78 Options
18828
18829@table @gcctabopt
18830
18831@item -msim
18832@opindex msim
18833Links in additional target libraries to support operation within a
18834simulator.
18835
18836@item -mmul=none
18837@itemx -mmul=g13
18838@itemx -mmul=rl78
18839@opindex mmul
18840Specifies the type of hardware multiplication support to be used.  The
18841default is @code{none}, which uses software multiplication functions.
18842The @code{g13} option is for the hardware multiply/divide peripheral
18843only on the RL78/G13 targets.  The @code{rl78} option is for the
18844standard hardware multiplication defined in the RL78 software manual.
18845
18846@end table
18847
18848@node RS/6000 and PowerPC Options
18849@subsection IBM RS/6000 and PowerPC Options
18850@cindex RS/6000 and PowerPC Options
18851@cindex IBM RS/6000 and PowerPC Options
18852
18853These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
18854@table @gcctabopt
18855@item -mpowerpc-gpopt
18856@itemx -mno-powerpc-gpopt
18857@itemx -mpowerpc-gfxopt
18858@itemx -mno-powerpc-gfxopt
18859@need 800
18860@itemx -mpowerpc64
18861@itemx -mno-powerpc64
18862@itemx -mmfcrf
18863@itemx -mno-mfcrf
18864@itemx -mpopcntb
18865@itemx -mno-popcntb
18866@itemx -mpopcntd
18867@itemx -mno-popcntd
18868@itemx -mfprnd
18869@itemx -mno-fprnd
18870@need 800
18871@itemx -mcmpb
18872@itemx -mno-cmpb
18873@itemx -mmfpgpr
18874@itemx -mno-mfpgpr
18875@itemx -mhard-dfp
18876@itemx -mno-hard-dfp
18877@opindex mpowerpc-gpopt
18878@opindex mno-powerpc-gpopt
18879@opindex mpowerpc-gfxopt
18880@opindex mno-powerpc-gfxopt
18881@opindex mpowerpc64
18882@opindex mno-powerpc64
18883@opindex mmfcrf
18884@opindex mno-mfcrf
18885@opindex mpopcntb
18886@opindex mno-popcntb
18887@opindex mpopcntd
18888@opindex mno-popcntd
18889@opindex mfprnd
18890@opindex mno-fprnd
18891@opindex mcmpb
18892@opindex mno-cmpb
18893@opindex mmfpgpr
18894@opindex mno-mfpgpr
18895@opindex mhard-dfp
18896@opindex mno-hard-dfp
18897You use these options to specify which instructions are available on the
18898processor you are using.  The default value of these options is
18899determined when configuring GCC@.  Specifying the
18900@option{-mcpu=@var{cpu_type}} overrides the specification of these
18901options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
18902rather than the options listed above.
18903
18904Specifying @option{-mpowerpc-gpopt} allows
18905GCC to use the optional PowerPC architecture instructions in the
18906General Purpose group, including floating-point square root.  Specifying
18907@option{-mpowerpc-gfxopt} allows GCC to
18908use the optional PowerPC architecture instructions in the Graphics
18909group, including floating-point select.
18910
18911The @option{-mmfcrf} option allows GCC to generate the move from
18912condition register field instruction implemented on the POWER4
18913processor and other processors that support the PowerPC V2.01
18914architecture.
18915The @option{-mpopcntb} option allows GCC to generate the popcount and
18916double-precision FP reciprocal estimate instruction implemented on the
18917POWER5 processor and other processors that support the PowerPC V2.02
18918architecture.
18919The @option{-mpopcntd} option allows GCC to generate the popcount
18920instruction implemented on the POWER7 processor and other processors
18921that support the PowerPC V2.06 architecture.
18922The @option{-mfprnd} option allows GCC to generate the FP round to
18923integer instructions implemented on the POWER5+ processor and other
18924processors that support the PowerPC V2.03 architecture.
18925The @option{-mcmpb} option allows GCC to generate the compare bytes
18926instruction implemented on the POWER6 processor and other processors
18927that support the PowerPC V2.05 architecture.
18928The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
18929general-purpose register instructions implemented on the POWER6X
18930processor and other processors that support the extended PowerPC V2.05
18931architecture.
18932The @option{-mhard-dfp} option allows GCC to generate the decimal
18933floating-point instructions implemented on some POWER processors.
18934
18935The @option{-mpowerpc64} option allows GCC to generate the additional
1893664-bit instructions that are found in the full PowerPC64 architecture
18937and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
18938@option{-mno-powerpc64}.
18939
18940@item -mcpu=@var{cpu_type}
18941@opindex mcpu
18942Set architecture type, register usage, and
18943instruction scheduling parameters for machine type @var{cpu_type}.
18944Supported values for @var{cpu_type} are @samp{401}, @samp{403},
18945@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
18946@samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
18947@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
18948@samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
18949@samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
18950@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
18951@samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
18952@samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
18953@samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8}, @samp{powerpc},
18954@samp{powerpc64}, and @samp{rs64}.
18955
18956@option{-mcpu=powerpc}, and @option{-mcpu=powerpc64} specify pure 32-bit
18957PowerPC and 64-bit PowerPC architecture machine
18958types, with an appropriate, generic processor model assumed for
18959scheduling purposes.
18960
18961The other options specify a specific processor.  Code generated under
18962those options runs best on that processor, and may not run at all on
18963others.
18964
18965The @option{-mcpu} options automatically enable or disable the
18966following options:
18967
18968@gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
18969-mpopcntb -mpopcntd  -mpowerpc64 @gol
18970-mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
18971-msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx @gol
18972-mcrypto -mdirect-move -mpower8-fusion -mpower8-vector @gol
18973-mquad-memory -mquad-memory-atomic}
18974
18975The particular options set for any particular CPU varies between
18976compiler versions, depending on what setting seems to produce optimal
18977code for that CPU; it doesn't necessarily reflect the actual hardware's
18978capabilities.  If you wish to set an individual option to a particular
18979value, you may specify it after the @option{-mcpu} option, like
18980@option{-mcpu=970 -mno-altivec}.
18981
18982On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
18983not enabled or disabled by the @option{-mcpu} option at present because
18984AIX does not have full support for these options.  You may still
18985enable or disable them individually if you're sure it'll work in your
18986environment.
18987
18988@item -mtune=@var{cpu_type}
18989@opindex mtune
18990Set the instruction scheduling parameters for machine type
18991@var{cpu_type}, but do not set the architecture type or register usage,
18992as @option{-mcpu=@var{cpu_type}} does.  The same
18993values for @var{cpu_type} are used for @option{-mtune} as for
18994@option{-mcpu}.  If both are specified, the code generated uses the
18995architecture and registers set by @option{-mcpu}, but the
18996scheduling parameters set by @option{-mtune}.
18997
18998@item -mcmodel=small
18999@opindex mcmodel=small
19000Generate PowerPC64 code for the small model: The TOC is limited to
1900164k.
19002
19003@item -mcmodel=medium
19004@opindex mcmodel=medium
19005Generate PowerPC64 code for the medium model: The TOC and other static
19006data may be up to a total of 4G in size.
19007
19008@item -mcmodel=large
19009@opindex mcmodel=large
19010Generate PowerPC64 code for the large model: The TOC may be up to 4G
19011in size.  Other data and code is only limited by the 64-bit address
19012space.
19013
19014@item -maltivec
19015@itemx -mno-altivec
19016@opindex maltivec
19017@opindex mno-altivec
19018Generate code that uses (does not use) AltiVec instructions, and also
19019enable the use of built-in functions that allow more direct access to
19020the AltiVec instruction set.  You may also need to set
19021@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
19022enhancements.
19023
19024When @option{-maltivec} is used, rather than @option{-maltivec=le} or
19025@option{-maltivec=be}, the element order for Altivec intrinsics such
19026as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} will
19027match array element order corresponding to the endianness of the
19028target.  That is, element zero identifies the leftmost element in a
19029vector register when targeting a big-endian platform, and identifies
19030the rightmost element in a vector register when targeting a
19031little-endian platform.
19032
19033@item -maltivec=be
19034@opindex maltivec=be
19035Generate Altivec instructions using big-endian element order,
19036regardless of whether the target is big- or little-endian.  This is
19037the default when targeting a big-endian platform.
19038
19039The element order is used to interpret element numbers in Altivec
19040intrinsics such as @code{vec_splat}, @code{vec_extract}, and
19041@code{vec_insert}.  By default, these will match array element order
19042corresponding to the endianness for the target.
19043
19044@item -maltivec=le
19045@opindex maltivec=le
19046Generate Altivec instructions using little-endian element order,
19047regardless of whether the target is big- or little-endian.  This is
19048the default when targeting a little-endian platform.  This option is
19049currently ignored when targeting a big-endian platform.
19050
19051The element order is used to interpret element numbers in Altivec
19052intrinsics such as @code{vec_splat}, @code{vec_extract}, and
19053@code{vec_insert}.  By default, these will match array element order
19054corresponding to the endianness for the target.
19055
19056@item -mvrsave
19057@itemx -mno-vrsave
19058@opindex mvrsave
19059@opindex mno-vrsave
19060Generate VRSAVE instructions when generating AltiVec code.
19061
19062@item -mgen-cell-microcode
19063@opindex mgen-cell-microcode
19064Generate Cell microcode instructions.
19065
19066@item -mwarn-cell-microcode
19067@opindex mwarn-cell-microcode
19068Warn when a Cell microcode instruction is emitted.  An example
19069of a Cell microcode instruction is a variable shift.
19070
19071@item -msecure-plt
19072@opindex msecure-plt
19073Generate code that allows @command{ld} and @command{ld.so}
19074to build executables and shared
19075libraries with non-executable @code{.plt} and @code{.got} sections.
19076This is a PowerPC
1907732-bit SYSV ABI option.
19078
19079@item -mbss-plt
19080@opindex mbss-plt
19081Generate code that uses a BSS @code{.plt} section that @command{ld.so}
19082fills in, and
19083requires @code{.plt} and @code{.got}
19084sections that are both writable and executable.
19085This is a PowerPC 32-bit SYSV ABI option.
19086
19087@item -misel
19088@itemx -mno-isel
19089@opindex misel
19090@opindex mno-isel
19091This switch enables or disables the generation of ISEL instructions.
19092
19093@item -misel=@var{yes/no}
19094This switch has been deprecated.  Use @option{-misel} and
19095@option{-mno-isel} instead.
19096
19097@item -mspe
19098@itemx -mno-spe
19099@opindex mspe
19100@opindex mno-spe
19101This switch enables or disables the generation of SPE simd
19102instructions.
19103
19104@item -mpaired
19105@itemx -mno-paired
19106@opindex mpaired
19107@opindex mno-paired
19108This switch enables or disables the generation of PAIRED simd
19109instructions.
19110
19111@item -mspe=@var{yes/no}
19112This option has been deprecated.  Use @option{-mspe} and
19113@option{-mno-spe} instead.
19114
19115@item -mvsx
19116@itemx -mno-vsx
19117@opindex mvsx
19118@opindex mno-vsx
19119Generate code that uses (does not use) vector/scalar (VSX)
19120instructions, and also enable the use of built-in functions that allow
19121more direct access to the VSX instruction set.
19122
19123@item -mcrypto
19124@itemx -mno-crypto
19125@opindex mcrypto
19126@opindex mno-crypto
19127Enable the use (disable) of the built-in functions that allow direct
19128access to the cryptographic instructions that were added in version
191292.07 of the PowerPC ISA.
19130
19131@item -mdirect-move
19132@itemx -mno-direct-move
19133@opindex mdirect-move
19134@opindex mno-direct-move
19135Generate code that uses (does not use) the instructions to move data
19136between the general purpose registers and the vector/scalar (VSX)
19137registers that were added in version 2.07 of the PowerPC ISA.
19138
19139@item -mpower8-fusion
19140@itemx -mno-power8-fusion
19141@opindex mpower8-fusion
19142@opindex mno-power8-fusion
19143Generate code that keeps (does not keeps) some integer operations
19144adjacent so that the instructions can be fused together on power8 and
19145later processors.
19146
19147@item -mpower8-vector
19148@itemx -mno-power8-vector
19149@opindex mpower8-vector
19150@opindex mno-power8-vector
19151Generate code that uses (does not use) the vector and scalar
19152instructions that were added in version 2.07 of the PowerPC ISA.  Also
19153enable the use of built-in functions that allow more direct access to
19154the vector instructions.
19155
19156@item -mquad-memory
19157@itemx -mno-quad-memory
19158@opindex mquad-memory
19159@opindex mno-quad-memory
19160Generate code that uses (does not use) the non-atomic quad word memory
19161instructions.  The @option{-mquad-memory} option requires use of
1916264-bit mode.
19163
19164@item -mquad-memory-atomic
19165@itemx -mno-quad-memory-atomic
19166@opindex mquad-memory-atomic
19167@opindex mno-quad-memory-atomic
19168Generate code that uses (does not use) the atomic quad word memory
19169instructions.  The @option{-mquad-memory-atomic} option requires use of
1917064-bit mode.
19171
19172@item -mfloat-gprs=@var{yes/single/double/no}
19173@itemx -mfloat-gprs
19174@opindex mfloat-gprs
19175This switch enables or disables the generation of floating-point
19176operations on the general-purpose registers for architectures that
19177support it.
19178
19179The argument @var{yes} or @var{single} enables the use of
19180single-precision floating-point operations.
19181
19182The argument @var{double} enables the use of single and
19183double-precision floating-point operations.
19184
19185The argument @var{no} disables floating-point operations on the
19186general-purpose registers.
19187
19188This option is currently only available on the MPC854x.
19189
19190@item -m32
19191@itemx -m64
19192@opindex m32
19193@opindex m64
19194Generate code for 32-bit or 64-bit environments of Darwin and SVR4
19195targets (including GNU/Linux).  The 32-bit environment sets int, long
19196and pointer to 32 bits and generates code that runs on any PowerPC
19197variant.  The 64-bit environment sets int to 32 bits and long and
19198pointer to 64 bits, and generates code for PowerPC64, as for
19199@option{-mpowerpc64}.
19200
19201@item -mfull-toc
19202@itemx -mno-fp-in-toc
19203@itemx -mno-sum-in-toc
19204@itemx -mminimal-toc
19205@opindex mfull-toc
19206@opindex mno-fp-in-toc
19207@opindex mno-sum-in-toc
19208@opindex mminimal-toc
19209Modify generation of the TOC (Table Of Contents), which is created for
19210every executable file.  The @option{-mfull-toc} option is selected by
19211default.  In that case, GCC allocates at least one TOC entry for
19212each unique non-automatic variable reference in your program.  GCC
19213also places floating-point constants in the TOC@.  However, only
1921416,384 entries are available in the TOC@.
19215
19216If you receive a linker error message that saying you have overflowed
19217the available TOC space, you can reduce the amount of TOC space used
19218with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
19219@option{-mno-fp-in-toc} prevents GCC from putting floating-point
19220constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
19221generate code to calculate the sum of an address and a constant at
19222run time instead of putting that sum into the TOC@.  You may specify one
19223or both of these options.  Each causes GCC to produce very slightly
19224slower and larger code at the expense of conserving TOC space.
19225
19226If you still run out of space in the TOC even when you specify both of
19227these options, specify @option{-mminimal-toc} instead.  This option causes
19228GCC to make only one TOC entry for every file.  When you specify this
19229option, GCC produces code that is slower and larger but which
19230uses extremely little TOC space.  You may wish to use this option
19231only on files that contain less frequently-executed code.
19232
19233@item -maix64
19234@itemx -maix32
19235@opindex maix64
19236@opindex maix32
19237Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
19238@code{long} type, and the infrastructure needed to support them.
19239Specifying @option{-maix64} implies @option{-mpowerpc64},
19240while @option{-maix32} disables the 64-bit ABI and
19241implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
19242
19243@item -mxl-compat
19244@itemx -mno-xl-compat
19245@opindex mxl-compat
19246@opindex mno-xl-compat
19247Produce code that conforms more closely to IBM XL compiler semantics
19248when using AIX-compatible ABI@.  Pass floating-point arguments to
19249prototyped functions beyond the register save area (RSA) on the stack
19250in addition to argument FPRs.  Do not assume that most significant
19251double in 128-bit long double value is properly rounded when comparing
19252values and converting to double.  Use XL symbol names for long double
19253support routines.
19254
19255The AIX calling convention was extended but not initially documented to
19256handle an obscure K&R C case of calling a function that takes the
19257address of its arguments with fewer arguments than declared.  IBM XL
19258compilers access floating-point arguments that do not fit in the
19259RSA from the stack when a subroutine is compiled without
19260optimization.  Because always storing floating-point arguments on the
19261stack is inefficient and rarely needed, this option is not enabled by
19262default and only is necessary when calling subroutines compiled by IBM
19263XL compilers without optimization.
19264
19265@item -mpe
19266@opindex mpe
19267Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
19268application written to use message passing with special startup code to
19269enable the application to run.  The system must have PE installed in the
19270standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
19271must be overridden with the @option{-specs=} option to specify the
19272appropriate directory location.  The Parallel Environment does not
19273support threads, so the @option{-mpe} option and the @option{-pthread}
19274option are incompatible.
19275
19276@item -malign-natural
19277@itemx -malign-power
19278@opindex malign-natural
19279@opindex malign-power
19280On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19281@option{-malign-natural} overrides the ABI-defined alignment of larger
19282types, such as floating-point doubles, on their natural size-based boundary.
19283The option @option{-malign-power} instructs GCC to follow the ABI-specified
19284alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
19285
19286On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
19287is not supported.
19288
19289@item -msoft-float
19290@itemx -mhard-float
19291@opindex msoft-float
19292@opindex mhard-float
19293Generate code that does not use (uses) the floating-point register set.
19294Software floating-point emulation is provided if you use the
19295@option{-msoft-float} option, and pass the option to GCC when linking.
19296
19297@item -msingle-float
19298@itemx -mdouble-float
19299@opindex msingle-float
19300@opindex mdouble-float
19301Generate code for single- or double-precision floating-point operations.
19302@option{-mdouble-float} implies @option{-msingle-float}.
19303
19304@item -msimple-fpu
19305@opindex msimple-fpu
19306Do not generate @code{sqrt} and @code{div} instructions for hardware
19307floating-point unit.
19308
19309@item -mfpu=@var{name}
19310@opindex mfpu
19311Specify type of floating-point unit.  Valid values for @var{name} are
19312@samp{sp_lite} (equivalent to @option{-msingle-float -msimple-fpu}),
19313@samp{dp_lite} (equivalent to @option{-mdouble-float -msimple-fpu}),
19314@samp{sp_full} (equivalent to @option{-msingle-float}),
19315and @samp{dp_full} (equivalent to @option{-mdouble-float}).
19316
19317@item -mxilinx-fpu
19318@opindex mxilinx-fpu
19319Perform optimizations for the floating-point unit on Xilinx PPC 405/440.
19320
19321@item -mmultiple
19322@itemx -mno-multiple
19323@opindex mmultiple
19324@opindex mno-multiple
19325Generate code that uses (does not use) the load multiple word
19326instructions and the store multiple word instructions.  These
19327instructions are generated by default on POWER systems, and not
19328generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
19329PowerPC systems, since those instructions do not work when the
19330processor is in little-endian mode.  The exceptions are PPC740 and
19331PPC750 which permit these instructions in little-endian mode.
19332
19333@item -mstring
19334@itemx -mno-string
19335@opindex mstring
19336@opindex mno-string
19337Generate code that uses (does not use) the load string instructions
19338and the store string word instructions to save multiple registers and
19339do small block moves.  These instructions are generated by default on
19340POWER systems, and not generated on PowerPC systems.  Do not use
19341@option{-mstring} on little-endian PowerPC systems, since those
19342instructions do not work when the processor is in little-endian mode.
19343The exceptions are PPC740 and PPC750 which permit these instructions
19344in little-endian mode.
19345
19346@item -mupdate
19347@itemx -mno-update
19348@opindex mupdate
19349@opindex mno-update
19350Generate code that uses (does not use) the load or store instructions
19351that update the base register to the address of the calculated memory
19352location.  These instructions are generated by default.  If you use
19353@option{-mno-update}, there is a small window between the time that the
19354stack pointer is updated and the address of the previous frame is
19355stored, which means code that walks the stack frame across interrupts or
19356signals may get corrupted data.
19357
19358@item -mavoid-indexed-addresses
19359@itemx -mno-avoid-indexed-addresses
19360@opindex mavoid-indexed-addresses
19361@opindex mno-avoid-indexed-addresses
19362Generate code that tries to avoid (not avoid) the use of indexed load
19363or store instructions. These instructions can incur a performance
19364penalty on Power6 processors in certain situations, such as when
19365stepping through large arrays that cross a 16M boundary.  This option
19366is enabled by default when targeting Power6 and disabled otherwise.
19367
19368@item -mfused-madd
19369@itemx -mno-fused-madd
19370@opindex mfused-madd
19371@opindex mno-fused-madd
19372Generate code that uses (does not use) the floating-point multiply and
19373accumulate instructions.  These instructions are generated by default
19374if hardware floating point is used.  The machine-dependent
19375@option{-mfused-madd} option is now mapped to the machine-independent
19376@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
19377mapped to @option{-ffp-contract=off}.
19378
19379@item -mmulhw
19380@itemx -mno-mulhw
19381@opindex mmulhw
19382@opindex mno-mulhw
19383Generate code that uses (does not use) the half-word multiply and
19384multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
19385These instructions are generated by default when targeting those
19386processors.
19387
19388@item -mdlmzb
19389@itemx -mno-dlmzb
19390@opindex mdlmzb
19391@opindex mno-dlmzb
19392Generate code that uses (does not use) the string-search @samp{dlmzb}
19393instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
19394generated by default when targeting those processors.
19395
19396@item -mno-bit-align
19397@itemx -mbit-align
19398@opindex mno-bit-align
19399@opindex mbit-align
19400On System V.4 and embedded PowerPC systems do not (do) force structures
19401and unions that contain bit-fields to be aligned to the base type of the
19402bit-field.
19403
19404For example, by default a structure containing nothing but 8
19405@code{unsigned} bit-fields of length 1 is aligned to a 4-byte
19406boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
19407the structure is aligned to a 1-byte boundary and is 1 byte in
19408size.
19409
19410@item -mno-strict-align
19411@itemx -mstrict-align
19412@opindex mno-strict-align
19413@opindex mstrict-align
19414On System V.4 and embedded PowerPC systems do not (do) assume that
19415unaligned memory references are handled by the system.
19416
19417@item -mrelocatable
19418@itemx -mno-relocatable
19419@opindex mrelocatable
19420@opindex mno-relocatable
19421Generate code that allows (does not allow) a static executable to be
19422relocated to a different address at run time.  A simple embedded
19423PowerPC system loader should relocate the entire contents of
19424@code{.got2} and 4-byte locations listed in the @code{.fixup} section,
19425a table of 32-bit addresses generated by this option.  For this to
19426work, all objects linked together must be compiled with
19427@option{-mrelocatable} or @option{-mrelocatable-lib}.
19428@option{-mrelocatable} code aligns the stack to an 8-byte boundary.
19429
19430@item -mrelocatable-lib
19431@itemx -mno-relocatable-lib
19432@opindex mrelocatable-lib
19433@opindex mno-relocatable-lib
19434Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
19435@code{.fixup} section to allow static executables to be relocated at
19436run time, but @option{-mrelocatable-lib} does not use the smaller stack
19437alignment of @option{-mrelocatable}.  Objects compiled with
19438@option{-mrelocatable-lib} may be linked with objects compiled with
19439any combination of the @option{-mrelocatable} options.
19440
19441@item -mno-toc
19442@itemx -mtoc
19443@opindex mno-toc
19444@opindex mtoc
19445On System V.4 and embedded PowerPC systems do not (do) assume that
19446register 2 contains a pointer to a global area pointing to the addresses
19447used in the program.
19448
19449@item -mlittle
19450@itemx -mlittle-endian
19451@opindex mlittle
19452@opindex mlittle-endian
19453On System V.4 and embedded PowerPC systems compile code for the
19454processor in little-endian mode.  The @option{-mlittle-endian} option is
19455the same as @option{-mlittle}.
19456
19457@item -mbig
19458@itemx -mbig-endian
19459@opindex mbig
19460@opindex mbig-endian
19461On System V.4 and embedded PowerPC systems compile code for the
19462processor in big-endian mode.  The @option{-mbig-endian} option is
19463the same as @option{-mbig}.
19464
19465@item -mdynamic-no-pic
19466@opindex mdynamic-no-pic
19467On Darwin and Mac OS X systems, compile code so that it is not
19468relocatable, but that its external references are relocatable.  The
19469resulting code is suitable for applications, but not shared
19470libraries.
19471
19472@item -msingle-pic-base
19473@opindex msingle-pic-base
19474Treat the register used for PIC addressing as read-only, rather than
19475loading it in the prologue for each function.  The runtime system is
19476responsible for initializing this register with an appropriate value
19477before execution begins.
19478
19479@item -mprioritize-restricted-insns=@var{priority}
19480@opindex mprioritize-restricted-insns
19481This option controls the priority that is assigned to
19482dispatch-slot restricted instructions during the second scheduling
19483pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
19484or @samp{2} to assign no, highest, or second-highest (respectively)
19485priority to dispatch-slot restricted
19486instructions.
19487
19488@item -msched-costly-dep=@var{dependence_type}
19489@opindex msched-costly-dep
19490This option controls which dependences are considered costly
19491by the target during instruction scheduling.  The argument
19492@var{dependence_type} takes one of the following values:
19493
19494@table @asis
19495@item @samp{no}
19496No dependence is costly.
19497
19498@item @samp{all}
19499All dependences are costly.
19500
19501@item @samp{true_store_to_load}
19502A true dependence from store to load is costly.
19503
19504@item @samp{store_to_load}
19505Any dependence from store to load is costly.
19506
19507@item @var{number}
19508Any dependence for which the latency is greater than or equal to
19509@var{number} is costly.
19510@end table
19511
19512@item -minsert-sched-nops=@var{scheme}
19513@opindex minsert-sched-nops
19514This option controls which NOP insertion scheme is used during
19515the second scheduling pass.  The argument @var{scheme} takes one of the
19516following values:
19517
19518@table @asis
19519@item @samp{no}
19520Don't insert NOPs.
19521
19522@item @samp{pad}
19523Pad with NOPs any dispatch group that has vacant issue slots,
19524according to the scheduler's grouping.
19525
19526@item @samp{regroup_exact}
19527Insert NOPs to force costly dependent insns into
19528separate groups.  Insert exactly as many NOPs as needed to force an insn
19529to a new group, according to the estimated processor grouping.
19530
19531@item @var{number}
19532Insert NOPs to force costly dependent insns into
19533separate groups.  Insert @var{number} NOPs to force an insn to a new group.
19534@end table
19535
19536@item -mcall-sysv
19537@opindex mcall-sysv
19538On System V.4 and embedded PowerPC systems compile code using calling
19539conventions that adhere to the March 1995 draft of the System V
19540Application Binary Interface, PowerPC processor supplement.  This is the
19541default unless you configured GCC using @samp{powerpc-*-eabiaix}.
19542
19543@item -mcall-sysv-eabi
19544@itemx -mcall-eabi
19545@opindex mcall-sysv-eabi
19546@opindex mcall-eabi
19547Specify both @option{-mcall-sysv} and @option{-meabi} options.
19548
19549@item -mcall-sysv-noeabi
19550@opindex mcall-sysv-noeabi
19551Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
19552
19553@item -mcall-aixdesc
19554@opindex m
19555On System V.4 and embedded PowerPC systems compile code for the AIX
19556operating system.
19557
19558@item -mcall-linux
19559@opindex mcall-linux
19560On System V.4 and embedded PowerPC systems compile code for the
19561Linux-based GNU system.
19562
19563@item -mcall-freebsd
19564@opindex mcall-freebsd
19565On System V.4 and embedded PowerPC systems compile code for the
19566FreeBSD operating system.
19567
19568@item -mcall-netbsd
19569@opindex mcall-netbsd
19570On System V.4 and embedded PowerPC systems compile code for the
19571NetBSD operating system.
19572
19573@item -mcall-openbsd
19574@opindex mcall-netbsd
19575On System V.4 and embedded PowerPC systems compile code for the
19576OpenBSD operating system.
19577
19578@item -maix-struct-return
19579@opindex maix-struct-return
19580Return all structures in memory (as specified by the AIX ABI)@.
19581
19582@item -msvr4-struct-return
19583@opindex msvr4-struct-return
19584Return structures smaller than 8 bytes in registers (as specified by the
19585SVR4 ABI)@.
19586
19587@item -mabi=@var{abi-type}
19588@opindex mabi
19589Extend the current ABI with a particular extension, or remove such extension.
19590Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
19591@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble},
19592@var{elfv1}, @var{elfv2}@.
19593
19594@item -mabi=spe
19595@opindex mabi=spe
19596Extend the current ABI with SPE ABI extensions.  This does not change
19597the default ABI, instead it adds the SPE ABI extensions to the current
19598ABI@.
19599
19600@item -mabi=no-spe
19601@opindex mabi=no-spe
19602Disable Book-E SPE ABI extensions for the current ABI@.
19603
19604@item -mabi=ibmlongdouble
19605@opindex mabi=ibmlongdouble
19606Change the current ABI to use IBM extended-precision long double.
19607This is a PowerPC 32-bit SYSV ABI option.
19608
19609@item -mabi=ieeelongdouble
19610@opindex mabi=ieeelongdouble
19611Change the current ABI to use IEEE extended-precision long double.
19612This is a PowerPC 32-bit Linux ABI option.
19613
19614@item -mabi=elfv1
19615@opindex mabi=elfv1
19616Change the current ABI to use the ELFv1 ABI.
19617This is the default ABI for big-endian PowerPC 64-bit Linux.
19618Overriding the default ABI requires special system support and is
19619likely to fail in spectacular ways.
19620
19621@item -mabi=elfv2
19622@opindex mabi=elfv2
19623Change the current ABI to use the ELFv2 ABI.
19624This is the default ABI for little-endian PowerPC 64-bit Linux.
19625Overriding the default ABI requires special system support and is
19626likely to fail in spectacular ways.
19627
19628@item -mprototype
19629@itemx -mno-prototype
19630@opindex mprototype
19631@opindex mno-prototype
19632On System V.4 and embedded PowerPC systems assume that all calls to
19633variable argument functions are properly prototyped.  Otherwise, the
19634compiler must insert an instruction before every non-prototyped call to
19635set or clear bit 6 of the condition code register (@var{CR}) to
19636indicate whether floating-point values are passed in the floating-point
19637registers in case the function takes variable arguments.  With
19638@option{-mprototype}, only calls to prototyped variable argument functions
19639set or clear the bit.
19640
19641@item -msim
19642@opindex msim
19643On embedded PowerPC systems, assume that the startup module is called
19644@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
19645@file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
19646configurations.
19647
19648@item -mmvme
19649@opindex mmvme
19650On embedded PowerPC systems, assume that the startup module is called
19651@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
19652@file{libc.a}.
19653
19654@item -mads
19655@opindex mads
19656On embedded PowerPC systems, assume that the startup module is called
19657@file{crt0.o} and the standard C libraries are @file{libads.a} and
19658@file{libc.a}.
19659
19660@item -myellowknife
19661@opindex myellowknife
19662On embedded PowerPC systems, assume that the startup module is called
19663@file{crt0.o} and the standard C libraries are @file{libyk.a} and
19664@file{libc.a}.
19665
19666@item -mvxworks
19667@opindex mvxworks
19668On System V.4 and embedded PowerPC systems, specify that you are
19669compiling for a VxWorks system.
19670
19671@item -memb
19672@opindex memb
19673On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
19674header to indicate that @samp{eabi} extended relocations are used.
19675
19676@item -meabi
19677@itemx -mno-eabi
19678@opindex meabi
19679@opindex mno-eabi
19680On System V.4 and embedded PowerPC systems do (do not) adhere to the
19681Embedded Applications Binary Interface (EABI), which is a set of
19682modifications to the System V.4 specifications.  Selecting @option{-meabi}
19683means that the stack is aligned to an 8-byte boundary, a function
19684@code{__eabi} is called from @code{main} to set up the EABI
19685environment, and the @option{-msdata} option can use both @code{r2} and
19686@code{r13} to point to two separate small data areas.  Selecting
19687@option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
19688no EABI initialization function is called from @code{main}, and the
19689@option{-msdata} option only uses @code{r13} to point to a single
19690small data area.  The @option{-meabi} option is on by default if you
19691configured GCC using one of the @samp{powerpc*-*-eabi*} options.
19692
19693@item -msdata=eabi
19694@opindex msdata=eabi
19695On System V.4 and embedded PowerPC systems, put small initialized
19696@code{const} global and static data in the @samp{.sdata2} section, which
19697is pointed to by register @code{r2}.  Put small initialized
19698non-@code{const} global and static data in the @samp{.sdata} section,
19699which is pointed to by register @code{r13}.  Put small uninitialized
19700global and static data in the @samp{.sbss} section, which is adjacent to
19701the @samp{.sdata} section.  The @option{-msdata=eabi} option is
19702incompatible with the @option{-mrelocatable} option.  The
19703@option{-msdata=eabi} option also sets the @option{-memb} option.
19704
19705@item -msdata=sysv
19706@opindex msdata=sysv
19707On System V.4 and embedded PowerPC systems, put small global and static
19708data in the @samp{.sdata} section, which is pointed to by register
19709@code{r13}.  Put small uninitialized global and static data in the
19710@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
19711The @option{-msdata=sysv} option is incompatible with the
19712@option{-mrelocatable} option.
19713
19714@item -msdata=default
19715@itemx -msdata
19716@opindex msdata=default
19717@opindex msdata
19718On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
19719compile code the same as @option{-msdata=eabi}, otherwise compile code the
19720same as @option{-msdata=sysv}.
19721
19722@item -msdata=data
19723@opindex msdata=data
19724On System V.4 and embedded PowerPC systems, put small global
19725data in the @samp{.sdata} section.  Put small uninitialized global
19726data in the @samp{.sbss} section.  Do not use register @code{r13}
19727to address small data however.  This is the default behavior unless
19728other @option{-msdata} options are used.
19729
19730@item -msdata=none
19731@itemx -mno-sdata
19732@opindex msdata=none
19733@opindex mno-sdata
19734On embedded PowerPC systems, put all initialized global and static data
19735in the @samp{.data} section, and all uninitialized data in the
19736@samp{.bss} section.
19737
19738@item -mblock-move-inline-limit=@var{num}
19739@opindex mblock-move-inline-limit
19740Inline all block moves (such as calls to @code{memcpy} or structure
19741copies) less than or equal to @var{num} bytes.  The minimum value for
19742@var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
19743targets.  The default value is target-specific.
19744
19745@item -G @var{num}
19746@opindex G
19747@cindex smaller data references (PowerPC)
19748@cindex .sdata/.sdata2 references (PowerPC)
19749On embedded PowerPC systems, put global and static items less than or
19750equal to @var{num} bytes into the small data or BSS sections instead of
19751the normal data or BSS section.  By default, @var{num} is 8.  The
19752@option{-G @var{num}} switch is also passed to the linker.
19753All modules should be compiled with the same @option{-G @var{num}} value.
19754
19755@item -mregnames
19756@itemx -mno-regnames
19757@opindex mregnames
19758@opindex mno-regnames
19759On System V.4 and embedded PowerPC systems do (do not) emit register
19760names in the assembly language output using symbolic forms.
19761
19762@item -mlongcall
19763@itemx -mno-longcall
19764@opindex mlongcall
19765@opindex mno-longcall
19766By default assume that all calls are far away so that a longer and more
19767expensive calling sequence is required.  This is required for calls
19768farther than 32 megabytes (33,554,432 bytes) from the current location.
19769A short call is generated if the compiler knows
19770the call cannot be that far away.  This setting can be overridden by
19771the @code{shortcall} function attribute, or by @code{#pragma
19772longcall(0)}.
19773
19774Some linkers are capable of detecting out-of-range calls and generating
19775glue code on the fly.  On these systems, long calls are unnecessary and
19776generate slower code.  As of this writing, the AIX linker can do this,
19777as can the GNU linker for PowerPC/64.  It is planned to add this feature
19778to the GNU linker for 32-bit PowerPC systems as well.
19779
19780On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
19781callee, L42}, plus a @dfn{branch island} (glue code).  The two target
19782addresses represent the callee and the branch island.  The
19783Darwin/PPC linker prefers the first address and generates a @code{bl
19784callee} if the PPC @code{bl} instruction reaches the callee directly;
19785otherwise, the linker generates @code{bl L42} to call the branch
19786island.  The branch island is appended to the body of the
19787calling function; it computes the full 32-bit address of the callee
19788and jumps to it.
19789
19790On Mach-O (Darwin) systems, this option directs the compiler emit to
19791the glue for every direct call, and the Darwin linker decides whether
19792to use or discard it.
19793
19794In the future, GCC may ignore all longcall specifications
19795when the linker is known to generate glue.
19796
19797@item -mtls-markers
19798@itemx -mno-tls-markers
19799@opindex mtls-markers
19800@opindex mno-tls-markers
19801Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
19802specifying the function argument.  The relocation allows the linker to
19803reliably associate function call with argument setup instructions for
19804TLS optimization, which in turn allows GCC to better schedule the
19805sequence.
19806
19807@item -pthread
19808@opindex pthread
19809Adds support for multithreading with the @dfn{pthreads} library.
19810This option sets flags for both the preprocessor and linker.
19811
19812@item -mrecip
19813@itemx -mno-recip
19814@opindex mrecip
19815This option enables use of the reciprocal estimate and
19816reciprocal square root estimate instructions with additional
19817Newton-Raphson steps to increase precision instead of doing a divide or
19818square root and divide for floating-point arguments.  You should use
19819the @option{-ffast-math} option when using @option{-mrecip} (or at
19820least @option{-funsafe-math-optimizations},
19821@option{-finite-math-only}, @option{-freciprocal-math} and
19822@option{-fno-trapping-math}).  Note that while the throughput of the
19823sequence is generally higher than the throughput of the non-reciprocal
19824instruction, the precision of the sequence can be decreased by up to 2
19825ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
19826roots.
19827
19828@item -mrecip=@var{opt}
19829@opindex mrecip=opt
19830This option controls which reciprocal estimate instructions
19831may be used.  @var{opt} is a comma-separated list of options, which may
19832be preceded by a @code{!} to invert the option:
19833@code{all}: enable all estimate instructions,
19834@code{default}: enable the default instructions, equivalent to @option{-mrecip},
19835@code{none}: disable all estimate instructions, equivalent to @option{-mno-recip};
19836@code{div}: enable the reciprocal approximation instructions for both single and double precision;
19837@code{divf}: enable the single-precision reciprocal approximation instructions;
19838@code{divd}: enable the double-precision reciprocal approximation instructions;
19839@code{rsqrt}: enable the reciprocal square root approximation instructions for both single and double precision;
19840@code{rsqrtf}: enable the single-precision reciprocal square root approximation instructions;
19841@code{rsqrtd}: enable the double-precision reciprocal square root approximation instructions;
19842
19843So, for example, @option{-mrecip=all,!rsqrtd} enables
19844all of the reciprocal estimate instructions, except for the
19845@code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
19846which handle the double-precision reciprocal square root calculations.
19847
19848@item -mrecip-precision
19849@itemx -mno-recip-precision
19850@opindex mrecip-precision
19851Assume (do not assume) that the reciprocal estimate instructions
19852provide higher-precision estimates than is mandated by the PowerPC
19853ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
19854@option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
19855The double-precision square root estimate instructions are not generated by
19856default on low-precision machines, since they do not provide an
19857estimate that converges after three steps.
19858
19859@item -mveclibabi=@var{type}
19860@opindex mveclibabi
19861Specifies the ABI type to use for vectorizing intrinsics using an
19862external library.  The only type supported at present is @code{mass},
19863which specifies to use IBM's Mathematical Acceleration Subsystem
19864(MASS) libraries for vectorizing intrinsics using external libraries.
19865GCC currently emits calls to @code{acosd2}, @code{acosf4},
19866@code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
19867@code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
19868@code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
19869@code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
19870@code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
19871@code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
19872@code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
19873@code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
19874@code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
19875@code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
19876@code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
19877@code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
19878@code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
19879for power7.  Both @option{-ftree-vectorize} and
19880@option{-funsafe-math-optimizations} must also be enabled.  The MASS
19881libraries must be specified at link time.
19882
19883@item -mfriz
19884@itemx -mno-friz
19885@opindex mfriz
19886Generate (do not generate) the @code{friz} instruction when the
19887@option{-funsafe-math-optimizations} option is used to optimize
19888rounding of floating-point values to 64-bit integer and back to floating
19889point.  The @code{friz} instruction does not return the same value if
19890the floating-point number is too large to fit in an integer.
19891
19892@item -mpointers-to-nested-functions
19893@itemx -mno-pointers-to-nested-functions
19894@opindex mpointers-to-nested-functions
19895Generate (do not generate) code to load up the static chain register
19896(@var{r11}) when calling through a pointer on AIX and 64-bit Linux
19897systems where a function pointer points to a 3-word descriptor giving
19898the function address, TOC value to be loaded in register @var{r2}, and
19899static chain value to be loaded in register @var{r11}.  The
19900@option{-mpointers-to-nested-functions} is on by default.  You cannot
19901call through pointers to nested functions or pointers
19902to functions compiled in other languages that use the static chain if
19903you use the @option{-mno-pointers-to-nested-functions}.
19904
19905@item -msave-toc-indirect
19906@itemx -mno-save-toc-indirect
19907@opindex msave-toc-indirect
19908Generate (do not generate) code to save the TOC value in the reserved
19909stack location in the function prologue if the function calls through
19910a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
19911saved in the prologue, it is saved just before the call through the
19912pointer.  The @option{-mno-save-toc-indirect} option is the default.
19913
19914@item -mcompat-align-parm
19915@itemx -mno-compat-align-parm
19916@opindex mcompat-align-parm
19917Generate (do not generate) code to pass structure parameters with a
19918maximum alignment of 64 bits, for compatibility with older versions
19919of GCC.
19920
19921Older versions of GCC (prior to 4.9.0) incorrectly did not align a
19922structure parameter on a 128-bit boundary when that structure contained
19923a member requiring 128-bit alignment.  This is corrected in more
19924recent versions of GCC.  This option may be used to generate code
19925that is compatible with functions compiled with older versions of
19926GCC.
19927
19928The @option{-mno-compat-align-parm} option is the default.
19929@end table
19930
19931@node RX Options
19932@subsection RX Options
19933@cindex RX Options
19934
19935These command-line options are defined for RX targets:
19936
19937@table @gcctabopt
19938@item -m64bit-doubles
19939@itemx -m32bit-doubles
19940@opindex m64bit-doubles
19941@opindex m32bit-doubles
19942Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
19943or 32 bits (@option{-m32bit-doubles}) in size.  The default is
19944@option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
19945works on 32-bit values, which is why the default is
19946@option{-m32bit-doubles}.
19947
19948@item -fpu
19949@itemx -nofpu
19950@opindex fpu
19951@opindex nofpu
19952Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
19953floating-point hardware.  The default is enabled for the @var{RX600}
19954series and disabled for the @var{RX200} series.
19955
19956Floating-point instructions are only generated for 32-bit floating-point
19957values, however, so the FPU hardware is not used for doubles if the
19958@option{-m64bit-doubles} option is used.
19959
19960@emph{Note} If the @option{-fpu} option is enabled then
19961@option{-funsafe-math-optimizations} is also enabled automatically.
19962This is because the RX FPU instructions are themselves unsafe.
19963
19964@item -mcpu=@var{name}
19965@opindex -mcpu
19966Selects the type of RX CPU to be targeted.  Currently three types are
19967supported, the generic @var{RX600} and @var{RX200} series hardware and
19968the specific @var{RX610} CPU.  The default is @var{RX600}.
19969
19970The only difference between @var{RX600} and @var{RX610} is that the
19971@var{RX610} does not support the @code{MVTIPL} instruction.
19972
19973The @var{RX200} series does not have a hardware floating-point unit
19974and so @option{-nofpu} is enabled by default when this type is
19975selected.
19976
19977@item -mbig-endian-data
19978@itemx -mlittle-endian-data
19979@opindex mbig-endian-data
19980@opindex mlittle-endian-data
19981Store data (but not code) in the big-endian format.  The default is
19982@option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
19983format.
19984
19985@item -msmall-data-limit=@var{N}
19986@opindex msmall-data-limit
19987Specifies the maximum size in bytes of global and static variables
19988which can be placed into the small data area.  Using the small data
19989area can lead to smaller and faster code, but the size of area is
19990limited and it is up to the programmer to ensure that the area does
19991not overflow.  Also when the small data area is used one of the RX's
19992registers (usually @code{r13}) is reserved for use pointing to this
19993area, so it is no longer available for use by the compiler.  This
19994could result in slower and/or larger code if variables are pushed onto
19995the stack instead of being held in this register.
19996
19997Note, common variables (variables that have not been initialized) and
19998constants are not placed into the small data area as they are assigned
19999to other sections in the output executable.
20000
20001The default value is zero, which disables this feature.  Note, this
20002feature is not enabled by default with higher optimization levels
20003(@option{-O2} etc) because of the potentially detrimental effects of
20004reserving a register.  It is up to the programmer to experiment and
20005discover whether this feature is of benefit to their program.  See the
20006description of the @option{-mpid} option for a description of how the
20007actual register to hold the small data area pointer is chosen.
20008
20009@item -msim
20010@itemx -mno-sim
20011@opindex msim
20012@opindex mno-sim
20013Use the simulator runtime.  The default is to use the libgloss
20014board-specific runtime.
20015
20016@item -mas100-syntax
20017@itemx -mno-as100-syntax
20018@opindex mas100-syntax
20019@opindex mno-as100-syntax
20020When generating assembler output use a syntax that is compatible with
20021Renesas's AS100 assembler.  This syntax can also be handled by the GAS
20022assembler, but it has some restrictions so it is not generated by default.
20023
20024@item -mmax-constant-size=@var{N}
20025@opindex mmax-constant-size
20026Specifies the maximum size, in bytes, of a constant that can be used as
20027an operand in a RX instruction.  Although the RX instruction set does
20028allow constants of up to 4 bytes in length to be used in instructions,
20029a longer value equates to a longer instruction.  Thus in some
20030circumstances it can be beneficial to restrict the size of constants
20031that are used in instructions.  Constants that are too big are instead
20032placed into a constant pool and referenced via register indirection.
20033
20034The value @var{N} can be between 0 and 4.  A value of 0 (the default)
20035or 4 means that constants of any size are allowed.
20036
20037@item -mrelax
20038@opindex mrelax
20039Enable linker relaxation.  Linker relaxation is a process whereby the
20040linker attempts to reduce the size of a program by finding shorter
20041versions of various instructions.  Disabled by default.
20042
20043@item -mint-register=@var{N}
20044@opindex mint-register
20045Specify the number of registers to reserve for fast interrupt handler
20046functions.  The value @var{N} can be between 0 and 4.  A value of 1
20047means that register @code{r13} is reserved for the exclusive use
20048of fast interrupt handlers.  A value of 2 reserves @code{r13} and
20049@code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
20050@code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
20051A value of 0, the default, does not reserve any registers.
20052
20053@item -msave-acc-in-interrupts
20054@opindex msave-acc-in-interrupts
20055Specifies that interrupt handler functions should preserve the
20056accumulator register.  This is only necessary if normal code might use
20057the accumulator register, for example because it performs 64-bit
20058multiplications.  The default is to ignore the accumulator as this
20059makes the interrupt handlers faster.
20060
20061@item -mpid
20062@itemx -mno-pid
20063@opindex mpid
20064@opindex mno-pid
20065Enables the generation of position independent data.  When enabled any
20066access to constant data is done via an offset from a base address
20067held in a register.  This allows the location of constant data to be
20068determined at run time without requiring the executable to be
20069relocated, which is a benefit to embedded applications with tight
20070memory constraints.  Data that can be modified is not affected by this
20071option.
20072
20073Note, using this feature reserves a register, usually @code{r13}, for
20074the constant data base address.  This can result in slower and/or
20075larger code, especially in complicated functions.
20076
20077The actual register chosen to hold the constant data base address
20078depends upon whether the @option{-msmall-data-limit} and/or the
20079@option{-mint-register} command-line options are enabled.  Starting
20080with register @code{r13} and proceeding downwards, registers are
20081allocated first to satisfy the requirements of @option{-mint-register},
20082then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
20083is possible for the small data area register to be @code{r8} if both
20084@option{-mint-register=4} and @option{-mpid} are specified on the
20085command line.
20086
20087By default this feature is not enabled.  The default can be restored
20088via the @option{-mno-pid} command-line option.
20089
20090@item -mno-warn-multiple-fast-interrupts
20091@itemx -mwarn-multiple-fast-interrupts
20092@opindex mno-warn-multiple-fast-interrupts
20093@opindex mwarn-multiple-fast-interrupts
20094Prevents GCC from issuing a warning message if it finds more than one
20095fast interrupt handler when it is compiling a file.  The default is to
20096issue a warning for each extra fast interrupt handler found, as the RX
20097only supports one such interrupt.
20098
20099@end table
20100
20101@emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
20102has special significance to the RX port when used with the
20103@code{interrupt} function attribute.  This attribute indicates a
20104function intended to process fast interrupts.  GCC ensures
20105that it only uses the registers @code{r10}, @code{r11}, @code{r12}
20106and/or @code{r13} and only provided that the normal use of the
20107corresponding registers have been restricted via the
20108@option{-ffixed-@var{reg}} or @option{-mint-register} command-line
20109options.
20110
20111@node S/390 and zSeries Options
20112@subsection S/390 and zSeries Options
20113@cindex S/390 and zSeries Options
20114
20115These are the @samp{-m} options defined for the S/390 and zSeries architecture.
20116
20117@table @gcctabopt
20118@item -mhard-float
20119@itemx -msoft-float
20120@opindex mhard-float
20121@opindex msoft-float
20122Use (do not use) the hardware floating-point instructions and registers
20123for floating-point operations.  When @option{-msoft-float} is specified,
20124functions in @file{libgcc.a} are used to perform floating-point
20125operations.  When @option{-mhard-float} is specified, the compiler
20126generates IEEE floating-point instructions.  This is the default.
20127
20128@item -mhard-dfp
20129@itemx -mno-hard-dfp
20130@opindex mhard-dfp
20131@opindex mno-hard-dfp
20132Use (do not use) the hardware decimal-floating-point instructions for
20133decimal-floating-point operations.  When @option{-mno-hard-dfp} is
20134specified, functions in @file{libgcc.a} are used to perform
20135decimal-floating-point operations.  When @option{-mhard-dfp} is
20136specified, the compiler generates decimal-floating-point hardware
20137instructions.  This is the default for @option{-march=z9-ec} or higher.
20138
20139@item -mlong-double-64
20140@itemx -mlong-double-128
20141@opindex mlong-double-64
20142@opindex mlong-double-128
20143These switches control the size of @code{long double} type. A size
20144of 64 bits makes the @code{long double} type equivalent to the @code{double}
20145type. This is the default.
20146
20147@item -mbackchain
20148@itemx -mno-backchain
20149@opindex mbackchain
20150@opindex mno-backchain
20151Store (do not store) the address of the caller's frame as backchain pointer
20152into the callee's stack frame.
20153A backchain may be needed to allow debugging using tools that do not understand
20154DWARF 2 call frame information.
20155When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
20156at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
20157the backchain is placed into the topmost word of the 96/160 byte register
20158save area.
20159
20160In general, code compiled with @option{-mbackchain} is call-compatible with
20161code compiled with @option{-mmo-backchain}; however, use of the backchain
20162for debugging purposes usually requires that the whole binary is built with
20163@option{-mbackchain}.  Note that the combination of @option{-mbackchain},
20164@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
20165to build a linux kernel use @option{-msoft-float}.
20166
20167The default is to not maintain the backchain.
20168
20169@item -mpacked-stack
20170@itemx -mno-packed-stack
20171@opindex mpacked-stack
20172@opindex mno-packed-stack
20173Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
20174specified, the compiler uses the all fields of the 96/160 byte register save
20175area only for their default purpose; unused fields still take up stack space.
20176When @option{-mpacked-stack} is specified, register save slots are densely
20177packed at the top of the register save area; unused space is reused for other
20178purposes, allowing for more efficient use of the available stack space.
20179However, when @option{-mbackchain} is also in effect, the topmost word of
20180the save area is always used to store the backchain, and the return address
20181register is always saved two words below the backchain.
20182
20183As long as the stack frame backchain is not used, code generated with
20184@option{-mpacked-stack} is call-compatible with code generated with
20185@option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
20186S/390 or zSeries generated code that uses the stack frame backchain at run
20187time, not just for debugging purposes.  Such code is not call-compatible
20188with code compiled with @option{-mpacked-stack}.  Also, note that the
20189combination of @option{-mbackchain},
20190@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
20191to build a linux kernel use @option{-msoft-float}.
20192
20193The default is to not use the packed stack layout.
20194
20195@item -msmall-exec
20196@itemx -mno-small-exec
20197@opindex msmall-exec
20198@opindex mno-small-exec
20199Generate (or do not generate) code using the @code{bras} instruction
20200to do subroutine calls.
20201This only works reliably if the total executable size does not
20202exceed 64k.  The default is to use the @code{basr} instruction instead,
20203which does not have this limitation.
20204
20205@item -m64
20206@itemx -m31
20207@opindex m64
20208@opindex m31
20209When @option{-m31} is specified, generate code compliant to the
20210GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
20211code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
20212particular to generate 64-bit instructions.  For the @samp{s390}
20213targets, the default is @option{-m31}, while the @samp{s390x}
20214targets default to @option{-m64}.
20215
20216@item -mzarch
20217@itemx -mesa
20218@opindex mzarch
20219@opindex mesa
20220When @option{-mzarch} is specified, generate code using the
20221instructions available on z/Architecture.
20222When @option{-mesa} is specified, generate code using the
20223instructions available on ESA/390.  Note that @option{-mesa} is
20224not possible with @option{-m64}.
20225When generating code compliant to the GNU/Linux for S/390 ABI,
20226the default is @option{-mesa}.  When generating code compliant
20227to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
20228
20229@item -mmvcle
20230@itemx -mno-mvcle
20231@opindex mmvcle
20232@opindex mno-mvcle
20233Generate (or do not generate) code using the @code{mvcle} instruction
20234to perform block moves.  When @option{-mno-mvcle} is specified,
20235use a @code{mvc} loop instead.  This is the default unless optimizing for
20236size.
20237
20238@item -mdebug
20239@itemx -mno-debug
20240@opindex mdebug
20241@opindex mno-debug
20242Print (or do not print) additional debug information when compiling.
20243The default is to not print debug information.
20244
20245@item -march=@var{cpu-type}
20246@opindex march
20247Generate code that runs on @var{cpu-type}, which is the name of a system
20248representing a certain processor type.  Possible values for
20249@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
20250@samp{z9-109}, @samp{z9-ec} and @samp{z10}.
20251When generating code using the instructions available on z/Architecture,
20252the default is @option{-march=z900}.  Otherwise, the default is
20253@option{-march=g5}.
20254
20255@item -mtune=@var{cpu-type}
20256@opindex mtune
20257Tune to @var{cpu-type} everything applicable about the generated code,
20258except for the ABI and the set of available instructions.
20259The list of @var{cpu-type} values is the same as for @option{-march}.
20260The default is the value used for @option{-march}.
20261
20262@item -mtpf-trace
20263@itemx -mno-tpf-trace
20264@opindex mtpf-trace
20265@opindex mno-tpf-trace
20266Generate code that adds (does not add) in TPF OS specific branches to trace
20267routines in the operating system.  This option is off by default, even
20268when compiling for the TPF OS@.
20269
20270@item -mfused-madd
20271@itemx -mno-fused-madd
20272@opindex mfused-madd
20273@opindex mno-fused-madd
20274Generate code that uses (does not use) the floating-point multiply and
20275accumulate instructions.  These instructions are generated by default if
20276hardware floating point is used.
20277
20278@item -mwarn-framesize=@var{framesize}
20279@opindex mwarn-framesize
20280Emit a warning if the current function exceeds the given frame size.  Because
20281this is a compile-time check it doesn't need to be a real problem when the program
20282runs.  It is intended to identify functions that most probably cause
20283a stack overflow.  It is useful to be used in an environment with limited stack
20284size e.g.@: the linux kernel.
20285
20286@item -mwarn-dynamicstack
20287@opindex mwarn-dynamicstack
20288Emit a warning if the function calls @code{alloca} or uses dynamically-sized
20289arrays.  This is generally a bad idea with a limited stack size.
20290
20291@item -mstack-guard=@var{stack-guard}
20292@itemx -mstack-size=@var{stack-size}
20293@opindex mstack-guard
20294@opindex mstack-size
20295If these options are provided the S/390 back end emits additional instructions in
20296the function prologue that trigger a trap if the stack size is @var{stack-guard}
20297bytes above the @var{stack-size} (remember that the stack on S/390 grows downward).
20298If the @var{stack-guard} option is omitted the smallest power of 2 larger than
20299the frame size of the compiled function is chosen.
20300These options are intended to be used to help debugging stack overflow problems.
20301The additionally emitted code causes only little overhead and hence can also be
20302used in production-like systems without greater performance degradation.  The given
20303values have to be exact powers of 2 and @var{stack-size} has to be greater than
20304@var{stack-guard} without exceeding 64k.
20305In order to be efficient the extra code makes the assumption that the stack starts
20306at an address aligned to the value given by @var{stack-size}.
20307The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
20308
20309@item -mhotpatch[=@var{halfwords}]
20310@itemx -mno-hotpatch
20311@opindex mhotpatch
20312If the hotpatch option is enabled, a ``hot-patching'' function
20313prologue is generated for all functions in the compilation unit.
20314The funtion label is prepended with the given number of two-byte
20315Nop instructions (@var{halfwords}, maximum 1000000) or 12 Nop
20316instructions if no argument is present.  Functions with a
20317hot-patching prologue are never inlined automatically, and a
20318hot-patching prologue is never generated for functions functions
20319that are explicitly inline.
20320
20321This option can be overridden for individual functions with the
20322@code{hotpatch} attribute.
20323@end table
20324
20325@node Score Options
20326@subsection Score Options
20327@cindex Score Options
20328
20329These options are defined for Score implementations:
20330
20331@table @gcctabopt
20332@item -meb
20333@opindex meb
20334Compile code for big-endian mode.  This is the default.
20335
20336@item -mel
20337@opindex mel
20338Compile code for little-endian mode.
20339
20340@item -mnhwloop
20341@opindex mnhwloop
20342Disable generation of @code{bcnz} instructions.
20343
20344@item -muls
20345@opindex muls
20346Enable generation of unaligned load and store instructions.
20347
20348@item -mmac
20349@opindex mmac
20350Enable the use of multiply-accumulate instructions. Disabled by default.
20351
20352@item -mscore5
20353@opindex mscore5
20354Specify the SCORE5 as the target architecture.
20355
20356@item -mscore5u
20357@opindex mscore5u
20358Specify the SCORE5U of the target architecture.
20359
20360@item -mscore7
20361@opindex mscore7
20362Specify the SCORE7 as the target architecture. This is the default.
20363
20364@item -mscore7d
20365@opindex mscore7d
20366Specify the SCORE7D as the target architecture.
20367@end table
20368
20369@node SH Options
20370@subsection SH Options
20371
20372These @samp{-m} options are defined for the SH implementations:
20373
20374@table @gcctabopt
20375@item -m1
20376@opindex m1
20377Generate code for the SH1.
20378
20379@item -m2
20380@opindex m2
20381Generate code for the SH2.
20382
20383@item -m2e
20384Generate code for the SH2e.
20385
20386@item -m2a-nofpu
20387@opindex m2a-nofpu
20388Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
20389that the floating-point unit is not used.
20390
20391@item -m2a-single-only
20392@opindex m2a-single-only
20393Generate code for the SH2a-FPU, in such a way that no double-precision
20394floating-point operations are used.
20395
20396@item -m2a-single
20397@opindex m2a-single
20398Generate code for the SH2a-FPU assuming the floating-point unit is in
20399single-precision mode by default.
20400
20401@item -m2a
20402@opindex m2a
20403Generate code for the SH2a-FPU assuming the floating-point unit is in
20404double-precision mode by default.
20405
20406@item -m3
20407@opindex m3
20408Generate code for the SH3.
20409
20410@item -m3e
20411@opindex m3e
20412Generate code for the SH3e.
20413
20414@item -m4-nofpu
20415@opindex m4-nofpu
20416Generate code for the SH4 without a floating-point unit.
20417
20418@item -m4-single-only
20419@opindex m4-single-only
20420Generate code for the SH4 with a floating-point unit that only
20421supports single-precision arithmetic.
20422
20423@item -m4-single
20424@opindex m4-single
20425Generate code for the SH4 assuming the floating-point unit is in
20426single-precision mode by default.
20427
20428@item -m4
20429@opindex m4
20430Generate code for the SH4.
20431
20432@item -m4-100
20433@opindex m4-100
20434Generate code for SH4-100.
20435
20436@item -m4-100-nofpu
20437@opindex m4-100-nofpu
20438Generate code for SH4-100 in such a way that the
20439floating-point unit is not used.
20440
20441@item -m4-100-single
20442@opindex m4-100-single
20443Generate code for SH4-100 assuming the floating-point unit is in
20444single-precision mode by default.
20445
20446@item -m4-100-single-only
20447@opindex m4-100-single-only
20448Generate code for SH4-100 in such a way that no double-precision
20449floating-point operations are used.
20450
20451@item -m4-200
20452@opindex m4-200
20453Generate code for SH4-200.
20454
20455@item -m4-200-nofpu
20456@opindex m4-200-nofpu
20457Generate code for SH4-200 without in such a way that the
20458floating-point unit is not used.
20459
20460@item -m4-200-single
20461@opindex m4-200-single
20462Generate code for SH4-200 assuming the floating-point unit is in
20463single-precision mode by default.
20464
20465@item -m4-200-single-only
20466@opindex m4-200-single-only
20467Generate code for SH4-200 in such a way that no double-precision
20468floating-point operations are used.
20469
20470@item -m4-300
20471@opindex m4-300
20472Generate code for SH4-300.
20473
20474@item -m4-300-nofpu
20475@opindex m4-300-nofpu
20476Generate code for SH4-300 without in such a way that the
20477floating-point unit is not used.
20478
20479@item -m4-300-single
20480@opindex m4-300-single
20481Generate code for SH4-300 in such a way that no double-precision
20482floating-point operations are used.
20483
20484@item -m4-300-single-only
20485@opindex m4-300-single-only
20486Generate code for SH4-300 in such a way that no double-precision
20487floating-point operations are used.
20488
20489@item -m4-340
20490@opindex m4-340
20491Generate code for SH4-340 (no MMU, no FPU).
20492
20493@item -m4-500
20494@opindex m4-500
20495Generate code for SH4-500 (no FPU).  Passes @option{-isa=sh4-nofpu} to the
20496assembler.
20497
20498@item -m4a-nofpu
20499@opindex m4a-nofpu
20500Generate code for the SH4al-dsp, or for a SH4a in such a way that the
20501floating-point unit is not used.
20502
20503@item -m4a-single-only
20504@opindex m4a-single-only
20505Generate code for the SH4a, in such a way that no double-precision
20506floating-point operations are used.
20507
20508@item -m4a-single
20509@opindex m4a-single
20510Generate code for the SH4a assuming the floating-point unit is in
20511single-precision mode by default.
20512
20513@item -m4a
20514@opindex m4a
20515Generate code for the SH4a.
20516
20517@item -m4al
20518@opindex m4al
20519Same as @option{-m4a-nofpu}, except that it implicitly passes
20520@option{-dsp} to the assembler.  GCC doesn't generate any DSP
20521instructions at the moment.
20522
20523@item -m5-32media
20524@opindex m5-32media
20525Generate 32-bit code for SHmedia.
20526
20527@item -m5-32media-nofpu
20528@opindex m5-32media-nofpu
20529Generate 32-bit code for SHmedia in such a way that the
20530floating-point unit is not used.
20531
20532@item -m5-64media
20533@opindex m5-64media
20534Generate 64-bit code for SHmedia.
20535
20536@item -m5-64media-nofpu
20537@opindex m5-64media-nofpu
20538Generate 64-bit code for SHmedia in such a way that the
20539floating-point unit is not used.
20540
20541@item -m5-compact
20542@opindex m5-compact
20543Generate code for SHcompact.
20544
20545@item -m5-compact-nofpu
20546@opindex m5-compact-nofpu
20547Generate code for SHcompact in such a way that the
20548floating-point unit is not used.
20549
20550@item -mb
20551@opindex mb
20552Compile code for the processor in big-endian mode.
20553
20554@item -ml
20555@opindex ml
20556Compile code for the processor in little-endian mode.
20557
20558@item -mdalign
20559@opindex mdalign
20560Align doubles at 64-bit boundaries.  Note that this changes the calling
20561conventions, and thus some functions from the standard C library do
20562not work unless you recompile it first with @option{-mdalign}.
20563
20564@item -mrelax
20565@opindex mrelax
20566Shorten some address references at link time, when possible; uses the
20567linker option @option{-relax}.
20568
20569@item -mbigtable
20570@opindex mbigtable
20571Use 32-bit offsets in @code{switch} tables.  The default is to use
2057216-bit offsets.
20573
20574@item -mbitops
20575@opindex mbitops
20576Enable the use of bit manipulation instructions on SH2A.
20577
20578@item -mfmovd
20579@opindex mfmovd
20580Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
20581alignment constraints.
20582
20583@item -mrenesas
20584@opindex mrenesas
20585Comply with the calling conventions defined by Renesas.
20586
20587@item -mno-renesas
20588@opindex mno-renesas
20589Comply with the calling conventions defined for GCC before the Renesas
20590conventions were available.  This option is the default for all
20591targets of the SH toolchain.
20592
20593@item -mnomacsave
20594@opindex mnomacsave
20595Mark the @code{MAC} register as call-clobbered, even if
20596@option{-mrenesas} is given.
20597
20598@item -mieee
20599@itemx -mno-ieee
20600@opindex mieee
20601@opindex mno-ieee
20602Control the IEEE compliance of floating-point comparisons, which affects the
20603handling of cases where the result of a comparison is unordered.  By default
20604@option{-mieee} is implicitly enabled.  If @option{-ffinite-math-only} is
20605enabled @option{-mno-ieee} is implicitly set, which results in faster
20606floating-point greater-equal and less-equal comparisons.  The implcit settings
20607can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.
20608
20609@item -minline-ic_invalidate
20610@opindex minline-ic_invalidate
20611Inline code to invalidate instruction cache entries after setting up
20612nested function trampolines.
20613This option has no effect if @option{-musermode} is in effect and the selected
20614code generation option (e.g. @option{-m4}) does not allow the use of the @code{icbi}
20615instruction.
20616If the selected code generation option does not allow the use of the @code{icbi}
20617instruction, and @option{-musermode} is not in effect, the inlined code
20618manipulates the instruction cache address array directly with an associative
20619write.  This not only requires privileged mode at run time, but it also
20620fails if the cache line had been mapped via the TLB and has become unmapped.
20621
20622@item -misize
20623@opindex misize
20624Dump instruction size and location in the assembly code.
20625
20626@item -mpadstruct
20627@opindex mpadstruct
20628This option is deprecated.  It pads structures to multiple of 4 bytes,
20629which is incompatible with the SH ABI@.
20630
20631@item -matomic-model=@var{model}
20632@opindex matomic-model=@var{model}
20633Sets the model of atomic operations and additional parameters as a comma
20634separated list.  For details on the atomic built-in functions see
20635@ref{__atomic Builtins}.  The following models and parameters are supported:
20636
20637@table @samp
20638
20639@item none
20640Disable compiler generated atomic sequences and emit library calls for atomic
20641operations.  This is the default if the target is not @code{sh*-*-linux*}.
20642
20643@item soft-gusa
20644Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
20645built-in functions.  The generated atomic sequences require additional support
20646from the interrupt/exception handling code of the system and are only suitable
20647for SH3* and SH4* single-core systems.  This option is enabled by default when
20648the target is @code{sh*-*-linux*} and SH3* or SH4*.  When the target is SH4A,
20649this option will also partially utilize the hardware atomic instructions
20650@code{movli.l} and @code{movco.l} to create more efficient code, unless
20651@samp{strict} is specified.
20652
20653@item soft-tcb
20654Generate software atomic sequences that use a variable in the thread control
20655block.  This is a variation of the gUSA sequences which can also be used on
20656SH1* and SH2* targets.  The generated atomic sequences require additional
20657support from the interrupt/exception handling code of the system and are only
20658suitable for single-core systems.  When using this model, the @samp{gbr-offset=}
20659parameter has to be specified as well.
20660
20661@item soft-imask
20662Generate software atomic sequences that temporarily disable interrupts by
20663setting @code{SR.IMASK = 1111}.  This model works only when the program runs
20664in privileged mode and is only suitable for single-core systems.  Additional
20665support from the interrupt/exception handling code of the system is not
20666required.  This model is enabled by default when the target is
20667@code{sh*-*-linux*} and SH1* or SH2*.
20668
20669@item hard-llcs
20670Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
20671instructions only.  This is only available on SH4A and is suitable for
20672multi-core systems.  Since the hardware instructions support only 32 bit atomic
20673variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
20674Code compiled with this option will also be compatible with other software
20675atomic model interrupt/exception handling systems if executed on an SH4A
20676system.  Additional support from the interrupt/exception handling code of the
20677system is not required for this model.
20678
20679@item gbr-offset=
20680This parameter specifies the offset in bytes of the variable in the thread
20681control block structure that should be used by the generated atomic sequences
20682when the @samp{soft-tcb} model has been selected.  For other models this
20683parameter is ignored.  The specified value must be an integer multiple of four
20684and in the range 0-1020.
20685
20686@item strict
20687This parameter prevents mixed usage of multiple atomic models, even though they
20688would be compatible, and will make the compiler generate atomic sequences of the
20689specified model only.
20690
20691@end table
20692
20693@item -mtas
20694@opindex mtas
20695Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
20696Notice that depending on the particular hardware and software configuration
20697this can degrade overall performance due to the operand cache line flushes
20698that are implied by the @code{tas.b} instruction.  On multi-core SH4A
20699processors the @code{tas.b} instruction must be used with caution since it
20700can result in data corruption for certain cache configurations.
20701
20702@item -mprefergot
20703@opindex mprefergot
20704When generating position-independent code, emit function calls using
20705the Global Offset Table instead of the Procedure Linkage Table.
20706
20707@item -musermode
20708@itemx -mno-usermode
20709@opindex musermode
20710@opindex mno-usermode
20711Don't allow (allow) the compiler generating privileged mode code.  Specifying
20712@option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
20713inlined code would not work in user mode.  @option{-musermode} is the default
20714when the target is @code{sh*-*-linux*}.  If the target is SH1* or SH2*
20715@option{-musermode} has no effect, since there is no user mode.
20716
20717@item -multcost=@var{number}
20718@opindex multcost=@var{number}
20719Set the cost to assume for a multiply insn.
20720
20721@item -mdiv=@var{strategy}
20722@opindex mdiv=@var{strategy}
20723Set the division strategy to be used for integer division operations.
20724For SHmedia @var{strategy} can be one of:
20725
20726@table @samp
20727
20728@item fp
20729Performs the operation in floating point.  This has a very high latency,
20730but needs only a few instructions, so it might be a good choice if
20731your code has enough easily-exploitable ILP to allow the compiler to
20732schedule the floating-point instructions together with other instructions.
20733Division by zero causes a floating-point exception.
20734
20735@item inv
20736Uses integer operations to calculate the inverse of the divisor,
20737and then multiplies the dividend with the inverse.  This strategy allows
20738CSE and hoisting of the inverse calculation.  Division by zero calculates
20739an unspecified result, but does not trap.
20740
20741@item inv:minlat
20742A variant of @samp{inv} where, if no CSE or hoisting opportunities
20743have been found, or if the entire operation has been hoisted to the same
20744place, the last stages of the inverse calculation are intertwined with the
20745final multiply to reduce the overall latency, at the expense of using a few
20746more instructions, and thus offering fewer scheduling opportunities with
20747other code.
20748
20749@item call
20750Calls a library function that usually implements the @samp{inv:minlat}
20751strategy.
20752This gives high code density for @code{m5-*media-nofpu} compilations.
20753
20754@item call2
20755Uses a different entry point of the same library function, where it
20756assumes that a pointer to a lookup table has already been set up, which
20757exposes the pointer load to CSE and code hoisting optimizations.
20758
20759@item inv:call
20760@itemx inv:call2
20761@itemx inv:fp
20762Use the @samp{inv} algorithm for initial
20763code generation, but if the code stays unoptimized, revert to the @samp{call},
20764@samp{call2}, or @samp{fp} strategies, respectively.  Note that the
20765potentially-trapping side effect of division by zero is carried by a
20766separate instruction, so it is possible that all the integer instructions
20767are hoisted out, but the marker for the side effect stays where it is.
20768A recombination to floating-point operations or a call is not possible
20769in that case.
20770
20771@item inv20u
20772@itemx inv20l
20773Variants of the @samp{inv:minlat} strategy.  In the case
20774that the inverse calculation is not separated from the multiply, they speed
20775up division where the dividend fits into 20 bits (plus sign where applicable)
20776by inserting a test to skip a number of operations in this case; this test
20777slows down the case of larger dividends.  @samp{inv20u} assumes the case of a such
20778a small dividend to be unlikely, and @samp{inv20l} assumes it to be likely.
20779
20780@end table
20781
20782For targets other than SHmedia @var{strategy} can be one of:
20783
20784@table @samp
20785
20786@item call-div1
20787Calls a library function that uses the single-step division instruction
20788@code{div1} to perform the operation.  Division by zero calculates an
20789unspecified result and does not trap.  This is the default except for SH4,
20790SH2A and SHcompact.
20791
20792@item call-fp
20793Calls a library function that performs the operation in double precision
20794floating point.  Division by zero causes a floating-point exception.  This is
20795the default for SHcompact with FPU.  Specifying this for targets that do not
20796have a double precision FPU will default to @code{call-div1}.
20797
20798@item call-table
20799Calls a library function that uses a lookup table for small divisors and
20800the @code{div1} instruction with case distinction for larger divisors.  Division
20801by zero calculates an unspecified result and does not trap.  This is the default
20802for SH4.  Specifying this for targets that do not have dynamic shift
20803instructions will default to @code{call-div1}.
20804
20805@end table
20806
20807When a division strategy has not been specified the default strategy will be
20808selected based on the current target.  For SH2A the default strategy is to
20809use the @code{divs} and @code{divu} instructions instead of library function
20810calls.
20811
20812@item -maccumulate-outgoing-args
20813@opindex maccumulate-outgoing-args
20814Reserve space once for outgoing arguments in the function prologue rather
20815than around each call.  Generally beneficial for performance and size.  Also
20816needed for unwinding to avoid changing the stack frame around conditional code.
20817
20818@item -mdivsi3_libfunc=@var{name}
20819@opindex mdivsi3_libfunc=@var{name}
20820Set the name of the library function used for 32-bit signed division to
20821@var{name}.
20822This only affects the name used in the @samp{call} and @samp{inv:call}
20823division strategies, and the compiler still expects the same
20824sets of input/output/clobbered registers as if this option were not present.
20825
20826@item -mfixed-range=@var{register-range}
20827@opindex mfixed-range
20828Generate code treating the given register range as fixed registers.
20829A fixed register is one that the register allocator can not use.  This is
20830useful when compiling kernel code.  A register range is specified as
20831two registers separated by a dash.  Multiple register ranges can be
20832specified separated by a comma.
20833
20834@item -mindexed-addressing
20835@opindex mindexed-addressing
20836Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
20837This is only safe if the hardware and/or OS implement 32-bit wrap-around
20838semantics for the indexed addressing mode.  The architecture allows the
20839implementation of processors with 64-bit MMU, which the OS could use to
20840get 32-bit addressing, but since no current hardware implementation supports
20841this or any other way to make the indexed addressing mode safe to use in
20842the 32-bit ABI, the default is @option{-mno-indexed-addressing}.
20843
20844@item -mgettrcost=@var{number}
20845@opindex mgettrcost=@var{number}
20846Set the cost assumed for the @code{gettr} instruction to @var{number}.
20847The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
20848
20849@item -mpt-fixed
20850@opindex mpt-fixed
20851Assume @code{pt*} instructions won't trap.  This generally generates
20852better-scheduled code, but is unsafe on current hardware.
20853The current architecture
20854definition says that @code{ptabs} and @code{ptrel} trap when the target
20855anded with 3 is 3.
20856This has the unintentional effect of making it unsafe to schedule these
20857instructions before a branch, or hoist them out of a loop.  For example,
20858@code{__do_global_ctors}, a part of @file{libgcc}
20859that runs constructors at program
20860startup, calls functions in a list which is delimited by @minus{}1.  With the
20861@option{-mpt-fixed} option, the @code{ptabs} is done before testing against @minus{}1.
20862That means that all the constructors run a bit more quickly, but when
20863the loop comes to the end of the list, the program crashes because @code{ptabs}
20864loads @minus{}1 into a target register.
20865
20866Since this option is unsafe for any
20867hardware implementing the current architecture specification, the default
20868is @option{-mno-pt-fixed}.  Unless specified explicitly with
20869@option{-mgettrcost}, @option{-mno-pt-fixed} also implies @option{-mgettrcost=100};
20870this deters register allocation from using target registers for storing
20871ordinary integers.
20872
20873@item -minvalid-symbols
20874@opindex minvalid-symbols
20875Assume symbols might be invalid.  Ordinary function symbols generated by
20876the compiler are always valid to load with
20877@code{movi}/@code{shori}/@code{ptabs} or
20878@code{movi}/@code{shori}/@code{ptrel},
20879but with assembler and/or linker tricks it is possible
20880to generate symbols that cause @code{ptabs} or @code{ptrel} to trap.
20881This option is only meaningful when @option{-mno-pt-fixed} is in effect.
20882It prevents cross-basic-block CSE, hoisting and most scheduling
20883of symbol loads.  The default is @option{-mno-invalid-symbols}.
20884
20885@item -mbranch-cost=@var{num}
20886@opindex mbranch-cost=@var{num}
20887Assume @var{num} to be the cost for a branch instruction.  Higher numbers
20888make the compiler try to generate more branch-free code if possible.
20889If not specified the value is selected depending on the processor type that
20890is being compiled for.
20891
20892@item -mzdcbranch
20893@itemx -mno-zdcbranch
20894@opindex mzdcbranch
20895@opindex mno-zdcbranch
20896Assume (do not assume) that zero displacement conditional branch instructions
20897@code{bt} and @code{bf} are fast.  If @option{-mzdcbranch} is specified, the
20898compiler will try to prefer zero displacement branch code sequences.  This is
20899enabled by default when generating code for SH4 and SH4A.  It can be explicitly
20900disabled by specifying @option{-mno-zdcbranch}.
20901
20902@item -mfused-madd
20903@itemx -mno-fused-madd
20904@opindex mfused-madd
20905@opindex mno-fused-madd
20906Generate code that uses (does not use) the floating-point multiply and
20907accumulate instructions.  These instructions are generated by default
20908if hardware floating point is used.  The machine-dependent
20909@option{-mfused-madd} option is now mapped to the machine-independent
20910@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
20911mapped to @option{-ffp-contract=off}.
20912
20913@item -mfsca
20914@itemx -mno-fsca
20915@opindex mfsca
20916@opindex mno-fsca
20917Allow or disallow the compiler to emit the @code{fsca} instruction for sine
20918and cosine approximations.  The option @code{-mfsca} must be used in
20919combination with @code{-funsafe-math-optimizations}.  It is enabled by default
20920when generating code for SH4A.  Using @code{-mno-fsca} disables sine and cosine
20921approximations even if @code{-funsafe-math-optimizations} is in effect.
20922
20923@item -mfsrra
20924@itemx -mno-fsrra
20925@opindex mfsrra
20926@opindex mno-fsrra
20927Allow or disallow the compiler to emit the @code{fsrra} instruction for
20928reciprocal square root approximations.  The option @code{-mfsrra} must be used
20929in combination with @code{-funsafe-math-optimizations} and
20930@code{-ffinite-math-only}.  It is enabled by default when generating code for
20931SH4A.  Using @code{-mno-fsrra} disables reciprocal square root approximations
20932even if @code{-funsafe-math-optimizations} and @code{-ffinite-math-only} are
20933in effect.
20934
20935@item -mpretend-cmove
20936@opindex mpretend-cmove
20937Prefer zero-displacement conditional branches for conditional move instruction
20938patterns.  This can result in faster code on the SH4 processor.
20939
20940@end table
20941
20942@node Solaris 2 Options
20943@subsection Solaris 2 Options
20944@cindex Solaris 2 options
20945
20946These @samp{-m} options are supported on Solaris 2:
20947
20948@table @gcctabopt
20949@item -mclear-hwcap
20950@opindex mclear-hwcap
20951@option{-mclear-hwcap} tells the compiler to remove the hardware
20952capabilities generated by the Solaris assembler.  This is only necessary
20953when object files use ISA extensions not supported by the current
20954machine, but check at runtime whether or not to use them.
20955
20956@item -mimpure-text
20957@opindex mimpure-text
20958@option{-mimpure-text}, used in addition to @option{-shared}, tells
20959the compiler to not pass @option{-z text} to the linker when linking a
20960shared object.  Using this option, you can link position-dependent
20961code into a shared object.
20962
20963@option{-mimpure-text} suppresses the ``relocations remain against
20964allocatable but non-writable sections'' linker error message.
20965However, the necessary relocations trigger copy-on-write, and the
20966shared object is not actually shared across processes.  Instead of
20967using @option{-mimpure-text}, you should compile all source code with
20968@option{-fpic} or @option{-fPIC}.
20969
20970@end table
20971
20972These switches are supported in addition to the above on Solaris 2:
20973
20974@table @gcctabopt
20975@item -pthreads
20976@opindex pthreads
20977Add support for multithreading using the POSIX threads library.  This
20978option sets flags for both the preprocessor and linker.  This option does
20979not affect the thread safety of object code produced  by the compiler or
20980that of libraries supplied with it.
20981
20982@item -pthread
20983@opindex pthread
20984This is a synonym for @option{-pthreads}.
20985@end table
20986
20987@node SPARC Options
20988@subsection SPARC Options
20989@cindex SPARC options
20990
20991These @samp{-m} options are supported on the SPARC:
20992
20993@table @gcctabopt
20994@item -mno-app-regs
20995@itemx -mapp-regs
20996@opindex mno-app-regs
20997@opindex mapp-regs
20998Specify @option{-mapp-regs} to generate output using the global registers
209992 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
21000global register 1, each global register 2 through 4 is then treated as an
21001allocable register that is clobbered by function calls.  This is the default.
21002
21003To be fully SVR4 ABI-compliant at the cost of some performance loss,
21004specify @option{-mno-app-regs}.  You should compile libraries and system
21005software with this option.
21006
21007@item -mflat
21008@itemx -mno-flat
21009@opindex mflat
21010@opindex mno-flat
21011With @option{-mflat}, the compiler does not generate save/restore instructions
21012and uses a ``flat'' or single register window model.  This model is compatible
21013with the regular register window model.  The local registers and the input
21014registers (0--5) are still treated as ``call-saved'' registers and are
21015saved on the stack as needed.
21016
21017With @option{-mno-flat} (the default), the compiler generates save/restore
21018instructions (except for leaf functions).  This is the normal operating mode.
21019
21020@item -mfpu
21021@itemx -mhard-float
21022@opindex mfpu
21023@opindex mhard-float
21024Generate output containing floating-point instructions.  This is the
21025default.
21026
21027@item -mno-fpu
21028@itemx -msoft-float
21029@opindex mno-fpu
21030@opindex msoft-float
21031Generate output containing library calls for floating point.
21032@strong{Warning:} the requisite libraries are not available for all SPARC
21033targets.  Normally the facilities of the machine's usual C compiler are
21034used, but this cannot be done directly in cross-compilation.  You must make
21035your own arrangements to provide suitable library functions for
21036cross-compilation.  The embedded targets @samp{sparc-*-aout} and
21037@samp{sparclite-*-*} do provide software floating-point support.
21038
21039@option{-msoft-float} changes the calling convention in the output file;
21040therefore, it is only useful if you compile @emph{all} of a program with
21041this option.  In particular, you need to compile @file{libgcc.a}, the
21042library that comes with GCC, with @option{-msoft-float} in order for
21043this to work.
21044
21045@item -mhard-quad-float
21046@opindex mhard-quad-float
21047Generate output containing quad-word (long double) floating-point
21048instructions.
21049
21050@item -msoft-quad-float
21051@opindex msoft-quad-float
21052Generate output containing library calls for quad-word (long double)
21053floating-point instructions.  The functions called are those specified
21054in the SPARC ABI@.  This is the default.
21055
21056As of this writing, there are no SPARC implementations that have hardware
21057support for the quad-word floating-point instructions.  They all invoke
21058a trap handler for one of these instructions, and then the trap handler
21059emulates the effect of the instruction.  Because of the trap handler overhead,
21060this is much slower than calling the ABI library routines.  Thus the
21061@option{-msoft-quad-float} option is the default.
21062
21063@item -mno-unaligned-doubles
21064@itemx -munaligned-doubles
21065@opindex mno-unaligned-doubles
21066@opindex munaligned-doubles
21067Assume that doubles have 8-byte alignment.  This is the default.
21068
21069With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
21070alignment only if they are contained in another type, or if they have an
21071absolute address.  Otherwise, it assumes they have 4-byte alignment.
21072Specifying this option avoids some rare compatibility problems with code
21073generated by other compilers.  It is not the default because it results
21074in a performance loss, especially for floating-point code.
21075
21076@item -muser-mode
21077@itemx -mno-user-mode
21078@opindex muser-mode
21079@opindex mno-user-mode
21080Do not generate code that can only run in supervisor mode.  This is relevant
21081only for the @code{casa} instruction emitted for the LEON3 processor.  The
21082default is @option{-mno-user-mode}.
21083
21084@item -mno-faster-structs
21085@itemx -mfaster-structs
21086@opindex mno-faster-structs
21087@opindex mfaster-structs
21088With @option{-mfaster-structs}, the compiler assumes that structures
21089should have 8-byte alignment.  This enables the use of pairs of
21090@code{ldd} and @code{std} instructions for copies in structure
21091assignment, in place of twice as many @code{ld} and @code{st} pairs.
21092However, the use of this changed alignment directly violates the SPARC
21093ABI@.  Thus, it's intended only for use on targets where the developer
21094acknowledges that their resulting code is not directly in line with
21095the rules of the ABI@.
21096
21097@item -mcpu=@var{cpu_type}
21098@opindex mcpu
21099Set the instruction set, register set, and instruction scheduling parameters
21100for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
21101@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
21102@samp{leon}, @samp{leon3}, @samp{sparclite}, @samp{f930}, @samp{f934},
21103@samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
21104@samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
21105@samp{niagara3} and @samp{niagara4}.
21106
21107Native Solaris and GNU/Linux toolchains also support the value @samp{native},
21108which selects the best architecture option for the host processor.
21109@option{-mcpu=native} has no effect if GCC does not recognize
21110the processor.
21111
21112Default instruction scheduling parameters are used for values that select
21113an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
21114@samp{sparclite}, @samp{sparclet}, @samp{v9}.
21115
21116Here is a list of each supported architecture and their supported
21117implementations.
21118
21119@table @asis
21120@item v7
21121cypress
21122
21123@item v8
21124supersparc, hypersparc, leon, leon3
21125
21126@item sparclite
21127f930, f934, sparclite86x
21128
21129@item sparclet
21130tsc701
21131
21132@item v9
21133ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
21134@end table
21135
21136By default (unless configured otherwise), GCC generates code for the V7
21137variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
21138additionally optimizes it for the Cypress CY7C602 chip, as used in the
21139SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
21140SPARCStation 1, 2, IPX etc.
21141
21142With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
21143architecture.  The only difference from V7 code is that the compiler emits
21144the integer multiply and integer divide instructions which exist in SPARC-V8
21145but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
21146optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
211472000 series.
21148
21149With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
21150the SPARC architecture.  This adds the integer multiply, integer divide step
21151and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
21152With @option{-mcpu=f930}, the compiler additionally optimizes it for the
21153Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
21154@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
21155MB86934 chip, which is the more recent SPARClite with FPU@.
21156
21157With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
21158the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
21159integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
21160but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
21161optimizes it for the TEMIC SPARClet chip.
21162
21163With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
21164architecture.  This adds 64-bit integer and floating-point move instructions,
211653 additional floating-point condition code registers and conditional move
21166instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
21167optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
21168@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
21169Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
21170@option{-mcpu=niagara}, the compiler additionally optimizes it for
21171Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
21172additionally optimizes it for Sun UltraSPARC T2 chips. With
21173@option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
21174UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
21175additionally optimizes it for Sun UltraSPARC T4 chips.
21176
21177@item -mtune=@var{cpu_type}
21178@opindex mtune
21179Set the instruction scheduling parameters for machine type
21180@var{cpu_type}, but do not set the instruction set or register set that the
21181option @option{-mcpu=@var{cpu_type}} does.
21182
21183The same values for @option{-mcpu=@var{cpu_type}} can be used for
21184@option{-mtune=@var{cpu_type}}, but the only useful values are those
21185that select a particular CPU implementation.  Those are @samp{cypress},
21186@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3}, @samp{f930},
21187@samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
21188@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3} and
21189@samp{niagara4}.  With native Solaris and GNU/Linux toolchains, @samp{native}
21190can also be used.
21191
21192@item -mv8plus
21193@itemx -mno-v8plus
21194@opindex mv8plus
21195@opindex mno-v8plus
21196With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
21197difference from the V8 ABI is that the global and out registers are
21198considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
21199mode for all SPARC-V9 processors.
21200
21201@item -mvis
21202@itemx -mno-vis
21203@opindex mvis
21204@opindex mno-vis
21205With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
21206Visual Instruction Set extensions.  The default is @option{-mno-vis}.
21207
21208@item -mvis2
21209@itemx -mno-vis2
21210@opindex mvis2
21211@opindex mno-vis2
21212With @option{-mvis2}, GCC generates code that takes advantage of
21213version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
21214default is @option{-mvis2} when targeting a cpu that supports such
21215instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
21216also sets @option{-mvis}.
21217
21218@item -mvis3
21219@itemx -mno-vis3
21220@opindex mvis3
21221@opindex mno-vis3
21222With @option{-mvis3}, GCC generates code that takes advantage of
21223version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
21224default is @option{-mvis3} when targeting a cpu that supports such
21225instructions, such as niagara-3 and later.  Setting @option{-mvis3}
21226also sets @option{-mvis2} and @option{-mvis}.
21227
21228@item -mcbcond
21229@itemx -mno-cbcond
21230@opindex mcbcond
21231@opindex mno-cbcond
21232With @option{-mcbcond}, GCC generates code that takes advantage of
21233compare-and-branch instructions, as defined in the Sparc Architecture 2011.
21234The default is @option{-mcbcond} when targeting a cpu that supports such
21235instructions, such as niagara-4 and later.
21236
21237@item -mpopc
21238@itemx -mno-popc
21239@opindex mpopc
21240@opindex mno-popc
21241With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
21242population count instruction.  The default is @option{-mpopc}
21243when targeting a cpu that supports such instructions, such as Niagara-2 and
21244later.
21245
21246@item -mfmaf
21247@itemx -mno-fmaf
21248@opindex mfmaf
21249@opindex mno-fmaf
21250With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
21251Fused Multiply-Add Floating-point extensions.  The default is @option{-mfmaf}
21252when targeting a cpu that supports such instructions, such as Niagara-3 and
21253later.
21254
21255@item -mfix-at697f
21256@opindex mfix-at697f
21257Enable the documented workaround for the single erratum of the Atmel AT697F
21258processor (which corresponds to erratum #13 of the AT697E processor).
21259
21260@item -mfix-ut699
21261@opindex mfix-ut699
21262Enable the documented workarounds for the floating-point errata and the data
21263cache nullify errata of the UT699 processor.
21264@end table
21265
21266These @samp{-m} options are supported in addition to the above
21267on SPARC-V9 processors in 64-bit environments:
21268
21269@table @gcctabopt
21270@item -m32
21271@itemx -m64
21272@opindex m32
21273@opindex m64
21274Generate code for a 32-bit or 64-bit environment.
21275The 32-bit environment sets int, long and pointer to 32 bits.
21276The 64-bit environment sets int to 32 bits and long and pointer
21277to 64 bits.
21278
21279@item -mcmodel=@var{which}
21280@opindex mcmodel
21281Set the code model to one of
21282
21283@table @samp
21284@item medlow
21285The Medium/Low code model: 64-bit addresses, programs
21286must be linked in the low 32 bits of memory.  Programs can be statically
21287or dynamically linked.
21288
21289@item medmid
21290The Medium/Middle code model: 64-bit addresses, programs
21291must be linked in the low 44 bits of memory, the text and data segments must
21292be less than 2GB in size and the data segment must be located within 2GB of
21293the text segment.
21294
21295@item medany
21296The Medium/Anywhere code model: 64-bit addresses, programs
21297may be linked anywhere in memory, the text and data segments must be less
21298than 2GB in size and the data segment must be located within 2GB of the
21299text segment.
21300
21301@item embmedany
21302The Medium/Anywhere code model for embedded systems:
2130364-bit addresses, the text and data segments must be less than 2GB in
21304size, both starting anywhere in memory (determined at link time).  The
21305global register %g4 points to the base of the data segment.  Programs
21306are statically linked and PIC is not supported.
21307@end table
21308
21309@item -mmemory-model=@var{mem-model}
21310@opindex mmemory-model
21311Set the memory model in force on the processor to one of
21312
21313@table @samp
21314@item default
21315The default memory model for the processor and operating system.
21316
21317@item rmo
21318Relaxed Memory Order
21319
21320@item pso
21321Partial Store Order
21322
21323@item tso
21324Total Store Order
21325
21326@item sc
21327Sequential Consistency
21328@end table
21329
21330These memory models are formally defined in Appendix D of the Sparc V9
21331architecture manual, as set in the processor's @code{PSTATE.MM} field.
21332
21333@item -mstack-bias
21334@itemx -mno-stack-bias
21335@opindex mstack-bias
21336@opindex mno-stack-bias
21337With @option{-mstack-bias}, GCC assumes that the stack pointer, and
21338frame pointer if present, are offset by @minus{}2047 which must be added back
21339when making stack frame references.  This is the default in 64-bit mode.
21340Otherwise, assume no such offset is present.
21341@end table
21342
21343@node SPU Options
21344@subsection SPU Options
21345@cindex SPU options
21346
21347These @samp{-m} options are supported on the SPU:
21348
21349@table @gcctabopt
21350@item -mwarn-reloc
21351@itemx -merror-reloc
21352@opindex mwarn-reloc
21353@opindex merror-reloc
21354
21355The loader for SPU does not handle dynamic relocations.  By default, GCC
21356gives an error when it generates code that requires a dynamic
21357relocation.  @option{-mno-error-reloc} disables the error,
21358@option{-mwarn-reloc} generates a warning instead.
21359
21360@item -msafe-dma
21361@itemx -munsafe-dma
21362@opindex msafe-dma
21363@opindex munsafe-dma
21364
21365Instructions that initiate or test completion of DMA must not be
21366reordered with respect to loads and stores of the memory that is being
21367accessed.
21368With @option{-munsafe-dma} you must use the @code{volatile} keyword to protect
21369memory accesses, but that can lead to inefficient code in places where the
21370memory is known to not change.  Rather than mark the memory as volatile,
21371you can use @option{-msafe-dma} to tell the compiler to treat
21372the DMA instructions as potentially affecting all memory.
21373
21374@item -mbranch-hints
21375@opindex mbranch-hints
21376
21377By default, GCC generates a branch hint instruction to avoid
21378pipeline stalls for always-taken or probably-taken branches.  A hint
21379is not generated closer than 8 instructions away from its branch.
21380There is little reason to disable them, except for debugging purposes,
21381or to make an object a little bit smaller.
21382
21383@item -msmall-mem
21384@itemx -mlarge-mem
21385@opindex msmall-mem
21386@opindex mlarge-mem
21387
21388By default, GCC generates code assuming that addresses are never larger
21389than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
21390a full 32-bit address.
21391
21392@item -mstdmain
21393@opindex mstdmain
21394
21395By default, GCC links against startup code that assumes the SPU-style
21396main function interface (which has an unconventional parameter list).
21397With @option{-mstdmain}, GCC links your program against startup
21398code that assumes a C99-style interface to @code{main}, including a
21399local copy of @code{argv} strings.
21400
21401@item -mfixed-range=@var{register-range}
21402@opindex mfixed-range
21403Generate code treating the given register range as fixed registers.
21404A fixed register is one that the register allocator cannot use.  This is
21405useful when compiling kernel code.  A register range is specified as
21406two registers separated by a dash.  Multiple register ranges can be
21407specified separated by a comma.
21408
21409@item -mea32
21410@itemx -mea64
21411@opindex mea32
21412@opindex mea64
21413Compile code assuming that pointers to the PPU address space accessed
21414via the @code{__ea} named address space qualifier are either 32 or 64
21415bits wide.  The default is 32 bits.  As this is an ABI-changing option,
21416all object code in an executable must be compiled with the same setting.
21417
21418@item -maddress-space-conversion
21419@itemx -mno-address-space-conversion
21420@opindex maddress-space-conversion
21421@opindex mno-address-space-conversion
21422Allow/disallow treating the @code{__ea} address space as superset
21423of the generic address space.  This enables explicit type casts
21424between @code{__ea} and generic pointer as well as implicit
21425conversions of generic pointers to @code{__ea} pointers.  The
21426default is to allow address space pointer conversions.
21427
21428@item -mcache-size=@var{cache-size}
21429@opindex mcache-size
21430This option controls the version of libgcc that the compiler links to an
21431executable and selects a software-managed cache for accessing variables
21432in the @code{__ea} address space with a particular cache size.  Possible
21433options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
21434and @samp{128}.  The default cache size is 64KB.
21435
21436@item -matomic-updates
21437@itemx -mno-atomic-updates
21438@opindex matomic-updates
21439@opindex mno-atomic-updates
21440This option controls the version of libgcc that the compiler links to an
21441executable and selects whether atomic updates to the software-managed
21442cache of PPU-side variables are used.  If you use atomic updates, changes
21443to a PPU variable from SPU code using the @code{__ea} named address space
21444qualifier do not interfere with changes to other PPU variables residing
21445in the same cache line from PPU code.  If you do not use atomic updates,
21446such interference may occur; however, writing back cache lines is
21447more efficient.  The default behavior is to use atomic updates.
21448
21449@item -mdual-nops
21450@itemx -mdual-nops=@var{n}
21451@opindex mdual-nops
21452By default, GCC inserts nops to increase dual issue when it expects
21453it to increase performance.  @var{n} can be a value from 0 to 10.  A
21454smaller @var{n} inserts fewer nops.  10 is the default, 0 is the
21455same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
21456
21457@item -mhint-max-nops=@var{n}
21458@opindex mhint-max-nops
21459Maximum number of nops to insert for a branch hint.  A branch hint must
21460be at least 8 instructions away from the branch it is affecting.  GCC
21461inserts up to @var{n} nops to enforce this, otherwise it does not
21462generate the branch hint.
21463
21464@item -mhint-max-distance=@var{n}
21465@opindex mhint-max-distance
21466The encoding of the branch hint instruction limits the hint to be within
21467256 instructions of the branch it is affecting.  By default, GCC makes
21468sure it is within 125.
21469
21470@item -msafe-hints
21471@opindex msafe-hints
21472Work around a hardware bug that causes the SPU to stall indefinitely.
21473By default, GCC inserts the @code{hbrp} instruction to make sure
21474this stall won't happen.
21475
21476@end table
21477
21478@node System V Options
21479@subsection Options for System V
21480
21481These additional options are available on System V Release 4 for
21482compatibility with other compilers on those systems:
21483
21484@table @gcctabopt
21485@item -G
21486@opindex G
21487Create a shared object.
21488It is recommended that @option{-symbolic} or @option{-shared} be used instead.
21489
21490@item -Qy
21491@opindex Qy
21492Identify the versions of each tool used by the compiler, in a
21493@code{.ident} assembler directive in the output.
21494
21495@item -Qn
21496@opindex Qn
21497Refrain from adding @code{.ident} directives to the output file (this is
21498the default).
21499
21500@item -YP,@var{dirs}
21501@opindex YP
21502Search the directories @var{dirs}, and no others, for libraries
21503specified with @option{-l}.
21504
21505@item -Ym,@var{dir}
21506@opindex Ym
21507Look in the directory @var{dir} to find the M4 preprocessor.
21508The assembler uses this option.
21509@c This is supposed to go with a -Yd for predefined M4 macro files, but
21510@c the generic assembler that comes with Solaris takes just -Ym.
21511@end table
21512
21513@node TILE-Gx Options
21514@subsection TILE-Gx Options
21515@cindex TILE-Gx options
21516
21517These @samp{-m} options are supported on the TILE-Gx:
21518
21519@table @gcctabopt
21520@item -mcmodel=small
21521@opindex mcmodel=small
21522Generate code for the small model.  The distance for direct calls is
21523limited to 500M in either direction.  PC-relative addresses are 32
21524bits.  Absolute addresses support the full address range.
21525
21526@item -mcmodel=large
21527@opindex mcmodel=large
21528Generate code for the large model.  There is no limitation on call
21529distance, pc-relative addresses, or absolute addresses.
21530
21531@item -mcpu=@var{name}
21532@opindex mcpu
21533Selects the type of CPU to be targeted.  Currently the only supported
21534type is @samp{tilegx}.
21535
21536@item -m32
21537@itemx -m64
21538@opindex m32
21539@opindex m64
21540Generate code for a 32-bit or 64-bit environment.  The 32-bit
21541environment sets int, long, and pointer to 32 bits.  The 64-bit
21542environment sets int to 32 bits and long and pointer to 64 bits.
21543
21544@item -mbig-endian
21545@itemx -mlittle-endian
21546@opindex mbig-endian
21547@opindex mlittle-endian
21548Generate code in big/little endian mode, respectively.
21549@end table
21550
21551@node TILEPro Options
21552@subsection TILEPro Options
21553@cindex TILEPro options
21554
21555These @samp{-m} options are supported on the TILEPro:
21556
21557@table @gcctabopt
21558@item -mcpu=@var{name}
21559@opindex mcpu
21560Selects the type of CPU to be targeted.  Currently the only supported
21561type is @samp{tilepro}.
21562
21563@item -m32
21564@opindex m32
21565Generate code for a 32-bit environment, which sets int, long, and
21566pointer to 32 bits.  This is the only supported behavior so the flag
21567is essentially ignored.
21568@end table
21569
21570@node V850 Options
21571@subsection V850 Options
21572@cindex V850 Options
21573
21574These @samp{-m} options are defined for V850 implementations:
21575
21576@table @gcctabopt
21577@item -mlong-calls
21578@itemx -mno-long-calls
21579@opindex mlong-calls
21580@opindex mno-long-calls
21581Treat all calls as being far away (near).  If calls are assumed to be
21582far away, the compiler always loads the function's address into a
21583register, and calls indirect through the pointer.
21584
21585@item -mno-ep
21586@itemx -mep
21587@opindex mno-ep
21588@opindex mep
21589Do not optimize (do optimize) basic blocks that use the same index
21590pointer 4 or more times to copy pointer into the @code{ep} register, and
21591use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
21592option is on by default if you optimize.
21593
21594@item -mno-prolog-function
21595@itemx -mprolog-function
21596@opindex mno-prolog-function
21597@opindex mprolog-function
21598Do not use (do use) external functions to save and restore registers
21599at the prologue and epilogue of a function.  The external functions
21600are slower, but use less code space if more than one function saves
21601the same number of registers.  The @option{-mprolog-function} option
21602is on by default if you optimize.
21603
21604@item -mspace
21605@opindex mspace
21606Try to make the code as small as possible.  At present, this just turns
21607on the @option{-mep} and @option{-mprolog-function} options.
21608
21609@item -mtda=@var{n}
21610@opindex mtda
21611Put static or global variables whose size is @var{n} bytes or less into
21612the tiny data area that register @code{ep} points to.  The tiny data
21613area can hold up to 256 bytes in total (128 bytes for byte references).
21614
21615@item -msda=@var{n}
21616@opindex msda
21617Put static or global variables whose size is @var{n} bytes or less into
21618the small data area that register @code{gp} points to.  The small data
21619area can hold up to 64 kilobytes.
21620
21621@item -mzda=@var{n}
21622@opindex mzda
21623Put static or global variables whose size is @var{n} bytes or less into
21624the first 32 kilobytes of memory.
21625
21626@item -mv850
21627@opindex mv850
21628Specify that the target processor is the V850.
21629
21630@item -mv850e3v5
21631@opindex mv850e3v5
21632Specify that the target processor is the V850E3V5.  The preprocessor
21633constant @samp{__v850e3v5__} is defined if this option is used.
21634
21635@item -mv850e2v4
21636@opindex mv850e2v4
21637Specify that the target processor is the V850E3V5.  This is an alias for
21638the @option{-mv850e3v5} option.
21639
21640@item -mv850e2v3
21641@opindex mv850e2v3
21642Specify that the target processor is the V850E2V3.  The preprocessor
21643constant @samp{__v850e2v3__} is defined if this option is used.
21644
21645@item -mv850e2
21646@opindex mv850e2
21647Specify that the target processor is the V850E2.  The preprocessor
21648constant @samp{__v850e2__} is defined if this option is used.
21649
21650@item -mv850e1
21651@opindex mv850e1
21652Specify that the target processor is the V850E1.  The preprocessor
21653constants @samp{__v850e1__} and @samp{__v850e__} are defined if
21654this option is used.
21655
21656@item -mv850es
21657@opindex mv850es
21658Specify that the target processor is the V850ES.  This is an alias for
21659the @option{-mv850e1} option.
21660
21661@item -mv850e
21662@opindex mv850e
21663Specify that the target processor is the V850E@.  The preprocessor
21664constant @samp{__v850e__} is defined if this option is used.
21665
21666If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
21667nor @option{-mv850e2} nor @option{-mv850e2v3} nor @option{-mv850e3v5}
21668are defined then a default target processor is chosen and the
21669relevant @samp{__v850*__} preprocessor constant is defined.
21670
21671The preprocessor constants @samp{__v850} and @samp{__v851__} are always
21672defined, regardless of which processor variant is the target.
21673
21674@item -mdisable-callt
21675@itemx -mno-disable-callt
21676@opindex mdisable-callt
21677@opindex mno-disable-callt
21678This option suppresses generation of the @code{CALLT} instruction for the
21679v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
21680architecture.
21681
21682This option is enabled by default when the RH850 ABI is
21683in use (see @option{-mrh850-abi}), and disabled by default when the
21684GCC ABI is in use.  If @code{CALLT} instructions are being generated
21685then the C preprocessor symbol @code{__V850_CALLT__} will be defined.
21686
21687@item -mrelax
21688@itemx -mno-relax
21689@opindex mrelax
21690@opindex mno-relax
21691Pass on (or do not pass on) the @option{-mrelax} command line option
21692to the assembler.
21693
21694@item -mlong-jumps
21695@itemx -mno-long-jumps
21696@opindex mlong-jumps
21697@opindex mno-long-jumps
21698Disable (or re-enable) the generation of PC-relative jump instructions.
21699
21700@item -msoft-float
21701@itemx -mhard-float
21702@opindex msoft-float
21703@opindex mhard-float
21704Disable (or re-enable) the generation of hardware floating point
21705instructions.  This option is only significant when the target
21706architecture is @samp{V850E2V3} or higher.  If hardware floating point
21707instructions are being generated then the C preprocessor symbol
21708@code{__FPU_OK__} will be defined, otherwise the symbol
21709@code{__NO_FPU__} will be defined.
21710
21711@item -mloop
21712@opindex mloop
21713Enables the use of the e3v5 LOOP instruction.  The use of this
21714instruction is not enabled by default when the e3v5 architecture is
21715selected because its use is still experimental.
21716
21717@item -mrh850-abi
21718@itemx -mghs
21719@opindex mrh850-abi
21720@opindex mghs
21721Enables support for the RH850 version of the V850 ABI.  This is the
21722default.  With this version of the ABI the following rules apply:
21723
21724@itemize
21725@item
21726Integer sized structures and unions are returned via a memory pointer
21727rather than a register.
21728
21729@item
21730Large structures and unions (more than 8 bytes in size) are passed by
21731value.
21732
21733@item
21734Functions are aligned to 16-bit boundaries.
21735
21736@item
21737The @option{-m8byte-align} command line option is supported.
21738
21739@item
21740The @option{-mdisable-callt} command line option is enabled by
21741default.  The @option{-mno-disable-callt} command line option is not
21742supported.
21743@end itemize
21744
21745When this version of the ABI is enabled the C preprocessor symbol
21746@code{__V850_RH850_ABI__} is defined.
21747
21748@item -mgcc-abi
21749@opindex mgcc-abi
21750Enables support for the old GCC version of the V850 ABI.  With this
21751version of the ABI the following rules apply:
21752
21753@itemize
21754@item
21755Integer sized structures and unions are returned in register @code{r10}.
21756
21757@item
21758Large structures and unions (more than 8 bytes in size) are passed by
21759reference.
21760
21761@item
21762Functions are aligned to 32-bit boundaries, unless optimizing for
21763size.
21764
21765@item
21766The @option{-m8byte-align} command line option is not supported.
21767
21768@item
21769The @option{-mdisable-callt} command line option is supported but not
21770enabled by default.
21771@end itemize
21772
21773When this version of the ABI is enabled the C preprocessor symbol
21774@code{__V850_GCC_ABI__} is defined.
21775
21776@item -m8byte-align
21777@itemx -mno-8byte-align
21778@opindex m8byte-align
21779@opindex mno-8byte-align
21780Enables support for @code{doubles} and @code{long long} types to be
21781aligned on 8-byte boundaries.  The default is to restrict the
21782alignment of all objects to at most 4-bytes.  When
21783@option{-m8byte-align} is in effect the C preprocessor symbol
21784@code{__V850_8BYTE_ALIGN__} will be defined.
21785
21786@item -mbig-switch
21787@opindex mbig-switch
21788Generate code suitable for big switch tables.  Use this option only if
21789the assembler/linker complain about out of range branches within a switch
21790table.
21791
21792@item -mapp-regs
21793@opindex mapp-regs
21794This option causes r2 and r5 to be used in the code generated by
21795the compiler.  This setting is the default.
21796
21797@item -mno-app-regs
21798@opindex mno-app-regs
21799This option causes r2 and r5 to be treated as fixed registers.
21800
21801@end table
21802
21803@node VAX Options
21804@subsection VAX Options
21805@cindex VAX options
21806
21807These @samp{-m} options are defined for the VAX:
21808
21809@table @gcctabopt
21810@item -munix
21811@opindex munix
21812Do not output certain jump instructions (@code{aobleq} and so on)
21813that the Unix assembler for the VAX cannot handle across long
21814ranges.
21815
21816@item -mgnu
21817@opindex mgnu
21818Do output those jump instructions, on the assumption that the
21819GNU assembler is being used.
21820
21821@item -mg
21822@opindex mg
21823Output code for G-format floating-point numbers instead of D-format.
21824@end table
21825
21826@node VMS Options
21827@subsection VMS Options
21828
21829These @samp{-m} options are defined for the VMS implementations:
21830
21831@table @gcctabopt
21832@item -mvms-return-codes
21833@opindex mvms-return-codes
21834Return VMS condition codes from @code{main}. The default is to return POSIX-style
21835condition (e.g.@ error) codes.
21836
21837@item -mdebug-main=@var{prefix}
21838@opindex mdebug-main=@var{prefix}
21839Flag the first routine whose name starts with @var{prefix} as the main
21840routine for the debugger.
21841
21842@item -mmalloc64
21843@opindex mmalloc64
21844Default to 64-bit memory allocation routines.
21845
21846@item -mpointer-size=@var{size}
21847@opindex -mpointer-size=@var{size}
21848Set the default size of pointers. Possible options for @var{size} are
21849@samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
21850for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
21851The later option disables @code{pragma pointer_size}.
21852@end table
21853
21854@node VxWorks Options
21855@subsection VxWorks Options
21856@cindex VxWorks Options
21857
21858The options in this section are defined for all VxWorks targets.
21859Options specific to the target hardware are listed with the other
21860options for that target.
21861
21862@table @gcctabopt
21863@item -mrtp
21864@opindex mrtp
21865GCC can generate code for both VxWorks kernels and real time processes
21866(RTPs).  This option switches from the former to the latter.  It also
21867defines the preprocessor macro @code{__RTP__}.
21868
21869@item -non-static
21870@opindex non-static
21871Link an RTP executable against shared libraries rather than static
21872libraries.  The options @option{-static} and @option{-shared} can
21873also be used for RTPs (@pxref{Link Options}); @option{-static}
21874is the default.
21875
21876@item -Bstatic
21877@itemx -Bdynamic
21878@opindex Bstatic
21879@opindex Bdynamic
21880These options are passed down to the linker.  They are defined for
21881compatibility with Diab.
21882
21883@item -Xbind-lazy
21884@opindex Xbind-lazy
21885Enable lazy binding of function calls.  This option is equivalent to
21886@option{-Wl,-z,now} and is defined for compatibility with Diab.
21887
21888@item -Xbind-now
21889@opindex Xbind-now
21890Disable lazy binding of function calls.  This option is the default and
21891is defined for compatibility with Diab.
21892@end table
21893
21894@node x86-64 Options
21895@subsection x86-64 Options
21896@cindex x86-64 options
21897
21898These are listed under @xref{i386 and x86-64 Options}.
21899
21900@node Xstormy16 Options
21901@subsection Xstormy16 Options
21902@cindex Xstormy16 Options
21903
21904These options are defined for Xstormy16:
21905
21906@table @gcctabopt
21907@item -msim
21908@opindex msim
21909Choose startup files and linker script suitable for the simulator.
21910@end table
21911
21912@node Xtensa Options
21913@subsection Xtensa Options
21914@cindex Xtensa Options
21915
21916These options are supported for Xtensa targets:
21917
21918@table @gcctabopt
21919@item -mconst16
21920@itemx -mno-const16
21921@opindex mconst16
21922@opindex mno-const16
21923Enable or disable use of @code{CONST16} instructions for loading
21924constant values.  The @code{CONST16} instruction is currently not a
21925standard option from Tensilica.  When enabled, @code{CONST16}
21926instructions are always used in place of the standard @code{L32R}
21927instructions.  The use of @code{CONST16} is enabled by default only if
21928the @code{L32R} instruction is not available.
21929
21930@item -mfused-madd
21931@itemx -mno-fused-madd
21932@opindex mfused-madd
21933@opindex mno-fused-madd
21934Enable or disable use of fused multiply/add and multiply/subtract
21935instructions in the floating-point option.  This has no effect if the
21936floating-point option is not also enabled.  Disabling fused multiply/add
21937and multiply/subtract instructions forces the compiler to use separate
21938instructions for the multiply and add/subtract operations.  This may be
21939desirable in some cases where strict IEEE 754-compliant results are
21940required: the fused multiply add/subtract instructions do not round the
21941intermediate result, thereby producing results with @emph{more} bits of
21942precision than specified by the IEEE standard.  Disabling fused multiply
21943add/subtract instructions also ensures that the program output is not
21944sensitive to the compiler's ability to combine multiply and add/subtract
21945operations.
21946
21947@item -mserialize-volatile
21948@itemx -mno-serialize-volatile
21949@opindex mserialize-volatile
21950@opindex mno-serialize-volatile
21951When this option is enabled, GCC inserts @code{MEMW} instructions before
21952@code{volatile} memory references to guarantee sequential consistency.
21953The default is @option{-mserialize-volatile}.  Use
21954@option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
21955
21956@item -mforce-no-pic
21957@opindex mforce-no-pic
21958For targets, like GNU/Linux, where all user-mode Xtensa code must be
21959position-independent code (PIC), this option disables PIC for compiling
21960kernel code.
21961
21962@item -mtext-section-literals
21963@itemx -mno-text-section-literals
21964@opindex mtext-section-literals
21965@opindex mno-text-section-literals
21966Control the treatment of literal pools.  The default is
21967@option{-mno-text-section-literals}, which places literals in a separate
21968section in the output file.  This allows the literal pool to be placed
21969in a data RAM/ROM, and it also allows the linker to combine literal
21970pools from separate object files to remove redundant literals and
21971improve code size.  With @option{-mtext-section-literals}, the literals
21972are interspersed in the text section in order to keep them as close as
21973possible to their references.  This may be necessary for large assembly
21974files.
21975
21976@item -mtarget-align
21977@itemx -mno-target-align
21978@opindex mtarget-align
21979@opindex mno-target-align
21980When this option is enabled, GCC instructs the assembler to
21981automatically align instructions to reduce branch penalties at the
21982expense of some code density.  The assembler attempts to widen density
21983instructions to align branch targets and the instructions following call
21984instructions.  If there are not enough preceding safe density
21985instructions to align a target, no widening is performed.  The
21986default is @option{-mtarget-align}.  These options do not affect the
21987treatment of auto-aligned instructions like @code{LOOP}, which the
21988assembler always aligns, either by widening density instructions or
21989by inserting NOP instructions.
21990
21991@item -mlongcalls
21992@itemx -mno-longcalls
21993@opindex mlongcalls
21994@opindex mno-longcalls
21995When this option is enabled, GCC instructs the assembler to translate
21996direct calls to indirect calls unless it can determine that the target
21997of a direct call is in the range allowed by the call instruction.  This
21998translation typically occurs for calls to functions in other source
21999files.  Specifically, the assembler translates a direct @code{CALL}
22000instruction into an @code{L32R} followed by a @code{CALLX} instruction.
22001The default is @option{-mno-longcalls}.  This option should be used in
22002programs where the call target can potentially be out of range.  This
22003option is implemented in the assembler, not the compiler, so the
22004assembly code generated by GCC still shows direct call
22005instructions---look at the disassembled object code to see the actual
22006instructions.  Note that the assembler uses an indirect call for
22007every cross-file call, not just those that really are out of range.
22008@end table
22009
22010@node zSeries Options
22011@subsection zSeries Options
22012@cindex zSeries options
22013
22014These are listed under @xref{S/390 and zSeries Options}.
22015
22016@node Code Gen Options
22017@section Options for Code Generation Conventions
22018@cindex code generation conventions
22019@cindex options, code generation
22020@cindex run-time options
22021
22022These machine-independent options control the interface conventions
22023used in code generation.
22024
22025Most of them have both positive and negative forms; the negative form
22026of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
22027one of the forms is listed---the one that is not the default.  You
22028can figure out the other form by either removing @samp{no-} or adding
22029it.
22030
22031@table @gcctabopt
22032@item -fbounds-check
22033@opindex fbounds-check
22034For front ends that support it, generate additional code to check that
22035indices used to access arrays are within the declared range.  This is
22036currently only supported by the Java and Fortran front ends, where
22037this option defaults to true and false respectively.
22038
22039@item -fstack-reuse=@var{reuse-level}
22040@opindex fstack_reuse
22041This option controls stack space reuse for user declared local/auto variables
22042and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
22043@samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
22044local variables and temporaries, @samp{named_vars} enables the reuse only for
22045user defined local variables with names, and @samp{none} disables stack reuse
22046completely. The default value is @samp{all}. The option is needed when the
22047program extends the lifetime of a scoped local variable or a compiler generated
22048temporary beyond the end point defined by the language.  When a lifetime of
22049a variable ends, and if the variable lives in memory, the optimizing compiler
22050has the freedom to reuse its stack space with other temporaries or scoped
22051local variables whose live range does not overlap with it. Legacy code extending
22052local lifetime will likely to break with the stack reuse optimization.
22053
22054For example,
22055
22056@smallexample
22057   int *p;
22058   @{
22059     int local1;
22060
22061     p = &local1;
22062     local1 = 10;
22063     ....
22064   @}
22065   @{
22066      int local2;
22067      local2 = 20;
22068      ...
22069   @}
22070
22071   if (*p == 10)  // out of scope use of local1
22072     @{
22073
22074     @}
22075@end smallexample
22076
22077Another example:
22078@smallexample
22079
22080   struct A
22081   @{
22082       A(int k) : i(k), j(k) @{ @}
22083       int i;
22084       int j;
22085   @};
22086
22087   A *ap;
22088
22089   void foo(const A& ar)
22090   @{
22091      ap = &ar;
22092   @}
22093
22094   void bar()
22095   @{
22096      foo(A(10)); // temp object's lifetime ends when foo returns
22097
22098      @{
22099        A a(20);
22100        ....
22101      @}
22102      ap->i+= 10;  // ap references out of scope temp whose space
22103                   // is reused with a. What is the value of ap->i?
22104   @}
22105
22106@end smallexample
22107
22108The lifetime of a compiler generated temporary is well defined by the C++
22109standard. When a lifetime of a temporary ends, and if the temporary lives
22110in memory, the optimizing compiler has the freedom to reuse its stack
22111space with other temporaries or scoped local variables whose live range
22112does not overlap with it. However some of the legacy code relies on
22113the behavior of older compilers in which temporaries' stack space is
22114not reused, the aggressive stack reuse can lead to runtime errors. This
22115option is used to control the temporary stack reuse optimization.
22116
22117@item -ftrapv
22118@opindex ftrapv
22119This option generates traps for signed overflow on addition, subtraction,
22120multiplication operations.
22121
22122@item -fwrapv
22123@opindex fwrapv
22124This option instructs the compiler to assume that signed arithmetic
22125overflow of addition, subtraction and multiplication wraps around
22126using twos-complement representation.  This flag enables some optimizations
22127and disables others.  This option is enabled by default for the Java
22128front end, as required by the Java language specification.
22129
22130@item -fexceptions
22131@opindex fexceptions
22132Enable exception handling.  Generates extra code needed to propagate
22133exceptions.  For some targets, this implies GCC generates frame
22134unwind information for all functions, which can produce significant data
22135size overhead, although it does not affect execution.  If you do not
22136specify this option, GCC enables it by default for languages like
22137C++ that normally require exception handling, and disables it for
22138languages like C that do not normally require it.  However, you may need
22139to enable this option when compiling C code that needs to interoperate
22140properly with exception handlers written in C++.  You may also wish to
22141disable this option if you are compiling older C++ programs that don't
22142use exception handling.
22143
22144@item -fnon-call-exceptions
22145@opindex fnon-call-exceptions
22146Generate code that allows trapping instructions to throw exceptions.
22147Note that this requires platform-specific runtime support that does
22148not exist everywhere.  Moreover, it only allows @emph{trapping}
22149instructions to throw exceptions, i.e.@: memory references or floating-point
22150instructions.  It does not allow exceptions to be thrown from
22151arbitrary signal handlers such as @code{SIGALRM}.
22152
22153@item -fdelete-dead-exceptions
22154@opindex fdelete-dead-exceptions
22155Consider that instructions that may throw exceptions but don't otherwise
22156contribute to the execution of the program can be optimized away.
22157This option is enabled by default for the Ada front end, as permitted by
22158the Ada language specification.
22159Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
22160
22161@item -funwind-tables
22162@opindex funwind-tables
22163Similar to @option{-fexceptions}, except that it just generates any needed
22164static data, but does not affect the generated code in any other way.
22165You normally do not need to enable this option; instead, a language processor
22166that needs this handling enables it on your behalf.
22167
22168@item -fasynchronous-unwind-tables
22169@opindex fasynchronous-unwind-tables
22170Generate unwind table in DWARF 2 format, if supported by target machine.  The
22171table is exact at each instruction boundary, so it can be used for stack
22172unwinding from asynchronous events (such as debugger or garbage collector).
22173
22174@item -fno-gnu-unique
22175@opindex fno-gnu-unique
22176On systems with recent GNU assembler and C library, the C++ compiler
22177uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions
22178of template static data members and static local variables in inline
22179functions are unique even in the presence of @code{RTLD_LOCAL}; this
22180is necessary to avoid problems with a library used by two different
22181@code{RTLD_LOCAL} plugins depending on a definition in one of them and
22182therefore disagreeing with the other one about the binding of the
22183symbol.  But this causes @code{dlclose} to be ignored for affected
22184DSOs; if your program relies on reinitialization of a DSO via
22185@code{dlclose} and @code{dlopen}, you can use
22186@option{-fno-gnu-unique}.
22187
22188@item -fpcc-struct-return
22189@opindex fpcc-struct-return
22190Return ``short'' @code{struct} and @code{union} values in memory like
22191longer ones, rather than in registers.  This convention is less
22192efficient, but it has the advantage of allowing intercallability between
22193GCC-compiled files and files compiled with other compilers, particularly
22194the Portable C Compiler (pcc).
22195
22196The precise convention for returning structures in memory depends
22197on the target configuration macros.
22198
22199Short structures and unions are those whose size and alignment match
22200that of some integer type.
22201
22202@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
22203switch is not binary compatible with code compiled with the
22204@option{-freg-struct-return} switch.
22205Use it to conform to a non-default application binary interface.
22206
22207@item -freg-struct-return
22208@opindex freg-struct-return
22209Return @code{struct} and @code{union} values in registers when possible.
22210This is more efficient for small structures than
22211@option{-fpcc-struct-return}.
22212
22213If you specify neither @option{-fpcc-struct-return} nor
22214@option{-freg-struct-return}, GCC defaults to whichever convention is
22215standard for the target.  If there is no standard convention, GCC
22216defaults to @option{-fpcc-struct-return}, except on targets where GCC is
22217the principal compiler.  In those cases, we can choose the standard, and
22218we chose the more efficient register return alternative.
22219
22220@strong{Warning:} code compiled with the @option{-freg-struct-return}
22221switch is not binary compatible with code compiled with the
22222@option{-fpcc-struct-return} switch.
22223Use it to conform to a non-default application binary interface.
22224
22225@item -fshort-enums
22226@opindex fshort-enums
22227Allocate to an @code{enum} type only as many bytes as it needs for the
22228declared range of possible values.  Specifically, the @code{enum} type
22229is equivalent to the smallest integer type that has enough room.
22230
22231@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
22232code that is not binary compatible with code generated without that switch.
22233Use it to conform to a non-default application binary interface.
22234
22235@item -fshort-double
22236@opindex fshort-double
22237Use the same size for @code{double} as for @code{float}.
22238
22239@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
22240code that is not binary compatible with code generated without that switch.
22241Use it to conform to a non-default application binary interface.
22242
22243@item -fshort-wchar
22244@opindex fshort-wchar
22245Override the underlying type for @samp{wchar_t} to be @samp{short
22246unsigned int} instead of the default for the target.  This option is
22247useful for building programs to run under WINE@.
22248
22249@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
22250code that is not binary compatible with code generated without that switch.
22251Use it to conform to a non-default application binary interface.
22252
22253@item -fno-common
22254@opindex fno-common
22255In C code, controls the placement of uninitialized global variables.
22256Unix C compilers have traditionally permitted multiple definitions of
22257such variables in different compilation units by placing the variables
22258in a common block.
22259This is the behavior specified by @option{-fcommon}, and is the default
22260for GCC on most targets.
22261On the other hand, this behavior is not required by ISO C, and on some
22262targets may carry a speed or code size penalty on variable references.
22263The @option{-fno-common} option specifies that the compiler should place
22264uninitialized global variables in the data section of the object file,
22265rather than generating them as common blocks.
22266This has the effect that if the same variable is declared
22267(without @code{extern}) in two different compilations,
22268you get a multiple-definition error when you link them.
22269In this case, you must compile with @option{-fcommon} instead.
22270Compiling with @option{-fno-common} is useful on targets for which
22271it provides better performance, or if you wish to verify that the
22272program will work on other systems that always treat uninitialized
22273variable declarations this way.
22274
22275@item -fno-ident
22276@opindex fno-ident
22277Ignore the @samp{#ident} directive.
22278
22279@item -finhibit-size-directive
22280@opindex finhibit-size-directive
22281Don't output a @code{.size} assembler directive, or anything else that
22282would cause trouble if the function is split in the middle, and the
22283two halves are placed at locations far apart in memory.  This option is
22284used when compiling @file{crtstuff.c}; you should not need to use it
22285for anything else.
22286
22287@item -fverbose-asm
22288@opindex fverbose-asm
22289Put extra commentary information in the generated assembly code to
22290make it more readable.  This option is generally only of use to those
22291who actually need to read the generated assembly code (perhaps while
22292debugging the compiler itself).
22293
22294@option{-fno-verbose-asm}, the default, causes the
22295extra information to be omitted and is useful when comparing two assembler
22296files.
22297
22298@item -frecord-gcc-switches
22299@opindex frecord-gcc-switches
22300This switch causes the command line used to invoke the
22301compiler to be recorded into the object file that is being created.
22302This switch is only implemented on some targets and the exact format
22303of the recording is target and binary file format dependent, but it
22304usually takes the form of a section containing ASCII text.  This
22305switch is related to the @option{-fverbose-asm} switch, but that
22306switch only records information in the assembler output file as
22307comments, so it never reaches the object file.
22308See also @option{-grecord-gcc-switches} for another
22309way of storing compiler options into the object file.
22310
22311@item -fpic
22312@opindex fpic
22313@cindex global offset table
22314@cindex PIC
22315Generate position-independent code (PIC) suitable for use in a shared
22316library, if supported for the target machine.  Such code accesses all
22317constant addresses through a global offset table (GOT)@.  The dynamic
22318loader resolves the GOT entries when the program starts (the dynamic
22319loader is not part of GCC; it is part of the operating system).  If
22320the GOT size for the linked executable exceeds a machine-specific
22321maximum size, you get an error message from the linker indicating that
22322@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
22323instead.  (These maximums are 8k on the SPARC and 32k
22324on the m68k and RS/6000.  The 386 has no such limit.)
22325
22326Position-independent code requires special support, and therefore works
22327only on certain machines.  For the 386, GCC supports PIC for System V
22328but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
22329position-independent.
22330
22331When this flag is set, the macros @code{__pic__} and @code{__PIC__}
22332are defined to 1.
22333
22334@item -fPIC
22335@opindex fPIC
22336If supported for the target machine, emit position-independent code,
22337suitable for dynamic linking and avoiding any limit on the size of the
22338global offset table.  This option makes a difference on the m68k,
22339PowerPC and SPARC@.
22340
22341Position-independent code requires special support, and therefore works
22342only on certain machines.
22343
22344When this flag is set, the macros @code{__pic__} and @code{__PIC__}
22345are defined to 2.
22346
22347@item -fpie
22348@itemx -fPIE
22349@opindex fpie
22350@opindex fPIE
22351These options are similar to @option{-fpic} and @option{-fPIC}, but
22352generated position independent code can be only linked into executables.
22353Usually these options are used when @option{-pie} GCC option is
22354used during linking.
22355
22356@option{-fpie} and @option{-fPIE} both define the macros
22357@code{__pie__} and @code{__PIE__}.  The macros have the value 1
22358for @option{-fpie} and 2 for @option{-fPIE}.
22359
22360@item -fno-jump-tables
22361@opindex fno-jump-tables
22362Do not use jump tables for switch statements even where it would be
22363more efficient than other code generation strategies.  This option is
22364of use in conjunction with @option{-fpic} or @option{-fPIC} for
22365building code that forms part of a dynamic linker and cannot
22366reference the address of a jump table.  On some targets, jump tables
22367do not require a GOT and this option is not needed.
22368
22369@item -ffixed-@var{reg}
22370@opindex ffixed
22371Treat the register named @var{reg} as a fixed register; generated code
22372should never refer to it (except perhaps as a stack pointer, frame
22373pointer or in some other fixed role).
22374
22375@var{reg} must be the name of a register.  The register names accepted
22376are machine-specific and are defined in the @code{REGISTER_NAMES}
22377macro in the machine description macro file.
22378
22379This flag does not have a negative form, because it specifies a
22380three-way choice.
22381
22382@item -fcall-used-@var{reg}
22383@opindex fcall-used
22384Treat the register named @var{reg} as an allocable register that is
22385clobbered by function calls.  It may be allocated for temporaries or
22386variables that do not live across a call.  Functions compiled this way
22387do not save and restore the register @var{reg}.
22388
22389It is an error to use this flag with the frame pointer or stack pointer.
22390Use of this flag for other registers that have fixed pervasive roles in
22391the machine's execution model produces disastrous results.
22392
22393This flag does not have a negative form, because it specifies a
22394three-way choice.
22395
22396@item -fcall-saved-@var{reg}
22397@opindex fcall-saved
22398Treat the register named @var{reg} as an allocable register saved by
22399functions.  It may be allocated even for temporaries or variables that
22400live across a call.  Functions compiled this way save and restore
22401the register @var{reg} if they use it.
22402
22403It is an error to use this flag with the frame pointer or stack pointer.
22404Use of this flag for other registers that have fixed pervasive roles in
22405the machine's execution model produces disastrous results.
22406
22407A different sort of disaster results from the use of this flag for
22408a register in which function values may be returned.
22409
22410This flag does not have a negative form, because it specifies a
22411three-way choice.
22412
22413@item -fpack-struct[=@var{n}]
22414@opindex fpack-struct
22415Without a value specified, pack all structure members together without
22416holes.  When a value is specified (which must be a small power of two), pack
22417structure members according to this value, representing the maximum
22418alignment (that is, objects with default alignment requirements larger than
22419this are output potentially unaligned at the next fitting location.
22420
22421@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
22422code that is not binary compatible with code generated without that switch.
22423Additionally, it makes the code suboptimal.
22424Use it to conform to a non-default application binary interface.
22425
22426@item -finstrument-functions
22427@opindex finstrument-functions
22428Generate instrumentation calls for entry and exit to functions.  Just
22429after function entry and just before function exit, the following
22430profiling functions are called with the address of the current
22431function and its call site.  (On some platforms,
22432@code{__builtin_return_address} does not work beyond the current
22433function, so the call site information may not be available to the
22434profiling functions otherwise.)
22435
22436@smallexample
22437void __cyg_profile_func_enter (void *this_fn,
22438                               void *call_site);
22439void __cyg_profile_func_exit  (void *this_fn,
22440                               void *call_site);
22441@end smallexample
22442
22443The first argument is the address of the start of the current function,
22444which may be looked up exactly in the symbol table.
22445
22446This instrumentation is also done for functions expanded inline in other
22447functions.  The profiling calls indicate where, conceptually, the
22448inline function is entered and exited.  This means that addressable
22449versions of such functions must be available.  If all your uses of a
22450function are expanded inline, this may mean an additional expansion of
22451code size.  If you use @samp{extern inline} in your C code, an
22452addressable version of such functions must be provided.  (This is
22453normally the case anyway, but if you get lucky and the optimizer always
22454expands the functions inline, you might have gotten away without
22455providing static copies.)
22456
22457A function may be given the attribute @code{no_instrument_function}, in
22458which case this instrumentation is not done.  This can be used, for
22459example, for the profiling functions listed above, high-priority
22460interrupt routines, and any functions from which the profiling functions
22461cannot safely be called (perhaps signal handlers, if the profiling
22462routines generate output or allocate memory).
22463
22464@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
22465@opindex finstrument-functions-exclude-file-list
22466
22467Set the list of functions that are excluded from instrumentation (see
22468the description of @code{-finstrument-functions}).  If the file that
22469contains a function definition matches with one of @var{file}, then
22470that function is not instrumented.  The match is done on substrings:
22471if the @var{file} parameter is a substring of the file name, it is
22472considered to be a match.
22473
22474For example:
22475
22476@smallexample
22477-finstrument-functions-exclude-file-list=/bits/stl,include/sys
22478@end smallexample
22479
22480@noindent
22481excludes any inline function defined in files whose pathnames
22482contain @code{/bits/stl} or @code{include/sys}.
22483
22484If, for some reason, you want to include letter @code{','} in one of
22485@var{sym}, write @code{'\,'}. For example,
22486@code{-finstrument-functions-exclude-file-list='\,\,tmp'}
22487(note the single quote surrounding the option).
22488
22489@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
22490@opindex finstrument-functions-exclude-function-list
22491
22492This is similar to @code{-finstrument-functions-exclude-file-list},
22493but this option sets the list of function names to be excluded from
22494instrumentation.  The function name to be matched is its user-visible
22495name, such as @code{vector<int> blah(const vector<int> &)}, not the
22496internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
22497match is done on substrings: if the @var{sym} parameter is a substring
22498of the function name, it is considered to be a match.  For C99 and C++
22499extended identifiers, the function name must be given in UTF-8, not
22500using universal character names.
22501
22502@item -fstack-check
22503@opindex fstack-check
22504Generate code to verify that you do not go beyond the boundary of the
22505stack.  You should specify this flag if you are running in an
22506environment with multiple threads, but you only rarely need to specify it in
22507a single-threaded environment since stack overflow is automatically
22508detected on nearly all systems if there is only one stack.
22509
22510Note that this switch does not actually cause checking to be done; the
22511operating system or the language runtime must do that.  The switch causes
22512generation of code to ensure that they see the stack being extended.
22513
22514You can additionally specify a string parameter: @code{no} means no
22515checking, @code{generic} means force the use of old-style checking,
22516@code{specific} means use the best checking method and is equivalent
22517to bare @option{-fstack-check}.
22518
22519Old-style checking is a generic mechanism that requires no specific
22520target support in the compiler but comes with the following drawbacks:
22521
22522@enumerate
22523@item
22524Modified allocation strategy for large objects: they are always
22525allocated dynamically if their size exceeds a fixed threshold.
22526
22527@item
22528Fixed limit on the size of the static frame of functions: when it is
22529topped by a particular function, stack checking is not reliable and
22530a warning is issued by the compiler.
22531
22532@item
22533Inefficiency: because of both the modified allocation strategy and the
22534generic implementation, code performance is hampered.
22535@end enumerate
22536
22537Note that old-style stack checking is also the fallback method for
22538@code{specific} if no target support has been added in the compiler.
22539
22540@item -fstack-limit-register=@var{reg}
22541@itemx -fstack-limit-symbol=@var{sym}
22542@itemx -fno-stack-limit
22543@opindex fstack-limit-register
22544@opindex fstack-limit-symbol
22545@opindex fno-stack-limit
22546Generate code to ensure that the stack does not grow beyond a certain value,
22547either the value of a register or the address of a symbol.  If a larger
22548stack is required, a signal is raised at run time.  For most targets,
22549the signal is raised before the stack overruns the boundary, so
22550it is possible to catch the signal without taking special precautions.
22551
22552For instance, if the stack starts at absolute address @samp{0x80000000}
22553and grows downwards, you can use the flags
22554@option{-fstack-limit-symbol=__stack_limit} and
22555@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
22556of 128KB@.  Note that this may only work with the GNU linker.
22557
22558@item -fsplit-stack
22559@opindex fsplit-stack
22560Generate code to automatically split the stack before it overflows.
22561The resulting program has a discontiguous stack which can only
22562overflow if the program is unable to allocate any more memory.  This
22563is most useful when running threaded programs, as it is no longer
22564necessary to calculate a good stack size to use for each thread.  This
22565is currently only implemented for the i386 and x86_64 back ends running
22566GNU/Linux.
22567
22568When code compiled with @option{-fsplit-stack} calls code compiled
22569without @option{-fsplit-stack}, there may not be much stack space
22570available for the latter code to run.  If compiling all code,
22571including library code, with @option{-fsplit-stack} is not an option,
22572then the linker can fix up these calls so that the code compiled
22573without @option{-fsplit-stack} always has a large stack.  Support for
22574this is implemented in the gold linker in GNU binutils release 2.21
22575and later.
22576
22577@item -fleading-underscore
22578@opindex fleading-underscore
22579This option and its counterpart, @option{-fno-leading-underscore}, forcibly
22580change the way C symbols are represented in the object file.  One use
22581is to help link with legacy assembly code.
22582
22583@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
22584generate code that is not binary compatible with code generated without that
22585switch.  Use it to conform to a non-default application binary interface.
22586Not all targets provide complete support for this switch.
22587
22588@item -ftls-model=@var{model}
22589@opindex ftls-model
22590Alter the thread-local storage model to be used (@pxref{Thread-Local}).
22591The @var{model} argument should be one of @code{global-dynamic},
22592@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
22593Note that the choice is subject to optimization: the compiler may use
22594a more efficient model for symbols not visible outside of the translation
22595unit, or if @option{-fpic} is not given on the command line.
22596
22597The default without @option{-fpic} is @code{initial-exec}; with
22598@option{-fpic} the default is @code{global-dynamic}.
22599
22600@item -fvisibility=@var{default|internal|hidden|protected}
22601@opindex fvisibility
22602Set the default ELF image symbol visibility to the specified option---all
22603symbols are marked with this unless overridden within the code.
22604Using this feature can very substantially improve linking and
22605load times of shared object libraries, produce more optimized
22606code, provide near-perfect API export and prevent symbol clashes.
22607It is @strong{strongly} recommended that you use this in any shared objects
22608you distribute.
22609
22610Despite the nomenclature, @code{default} always means public; i.e.,
22611available to be linked against from outside the shared object.
22612@code{protected} and @code{internal} are pretty useless in real-world
22613usage so the only other commonly used option is @code{hidden}.
22614The default if @option{-fvisibility} isn't specified is
22615@code{default}, i.e., make every
22616symbol public---this causes the same behavior as previous versions of
22617GCC@.
22618
22619A good explanation of the benefits offered by ensuring ELF
22620symbols have the correct visibility is given by ``How To Write
22621Shared Libraries'' by Ulrich Drepper (which can be found at
22622@w{@uref{http://people.redhat.com/~drepper/}})---however a superior
22623solution made possible by this option to marking things hidden when
22624the default is public is to make the default hidden and mark things
22625public.  This is the norm with DLLs on Windows and with @option{-fvisibility=hidden}
22626and @code{__attribute__ ((visibility("default")))} instead of
22627@code{__declspec(dllexport)} you get almost identical semantics with
22628identical syntax.  This is a great boon to those working with
22629cross-platform projects.
22630
22631For those adding visibility support to existing code, you may find
22632@samp{#pragma GCC visibility} of use.  This works by you enclosing
22633the declarations you wish to set visibility for with (for example)
22634@samp{#pragma GCC visibility push(hidden)} and
22635@samp{#pragma GCC visibility pop}.
22636Bear in mind that symbol visibility should be viewed @strong{as
22637part of the API interface contract} and thus all new code should
22638always specify visibility when it is not the default; i.e., declarations
22639only for use within the local DSO should @strong{always} be marked explicitly
22640as hidden as so to avoid PLT indirection overheads---making this
22641abundantly clear also aids readability and self-documentation of the code.
22642Note that due to ISO C++ specification requirements, @code{operator new} and
22643@code{operator delete} must always be of default visibility.
22644
22645Be aware that headers from outside your project, in particular system
22646headers and headers from any other library you use, may not be
22647expecting to be compiled with visibility other than the default.  You
22648may need to explicitly say @samp{#pragma GCC visibility push(default)}
22649before including any such headers.
22650
22651@samp{extern} declarations are not affected by @option{-fvisibility}, so
22652a lot of code can be recompiled with @option{-fvisibility=hidden} with
22653no modifications.  However, this means that calls to @code{extern}
22654functions with no explicit visibility use the PLT, so it is more
22655effective to use @code{__attribute ((visibility))} and/or
22656@code{#pragma GCC visibility} to tell the compiler which @code{extern}
22657declarations should be treated as hidden.
22658
22659Note that @option{-fvisibility} does affect C++ vague linkage
22660entities. This means that, for instance, an exception class that is
22661be thrown between DSOs must be explicitly marked with default
22662visibility so that the @samp{type_info} nodes are unified between
22663the DSOs.
22664
22665An overview of these techniques, their benefits and how to use them
22666is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.
22667
22668@item -fstrict-volatile-bitfields
22669@opindex fstrict-volatile-bitfields
22670This option should be used if accesses to volatile bit-fields (or other
22671structure fields, although the compiler usually honors those types
22672anyway) should use a single access of the width of the
22673field's type, aligned to a natural alignment if possible.  For
22674example, targets with memory-mapped peripheral registers might require
22675all such accesses to be 16 bits wide; with this flag you can
22676declare all peripheral bit-fields as @code{unsigned short} (assuming short
22677is 16 bits on these targets) to force GCC to use 16-bit accesses
22678instead of, perhaps, a more efficient 32-bit access.
22679
22680If this option is disabled, the compiler uses the most efficient
22681instruction.  In the previous example, that might be a 32-bit load
22682instruction, even though that accesses bytes that do not contain
22683any portion of the bit-field, or memory-mapped registers unrelated to
22684the one being updated.
22685
22686In some cases, such as when the @code{packed} attribute is applied to a
22687structure field, it may not be possible to access the field with a single
22688read or write that is correctly aligned for the target machine.  In this
22689case GCC falls back to generating multiple accesses rather than code that
22690will fault or truncate the result at run time.
22691
22692Note:  Due to restrictions of the C/C++11 memory model, write accesses are
22693not allowed to touch non bit-field members.  It is therefore recommended
22694to define all bits of the field's type as bit-field members.
22695
22696The default value of this option is determined by the application binary
22697interface for the target processor.
22698
22699@item -fsync-libcalls
22700@opindex fsync-libcalls
22701This option controls whether any out-of-line instance of the @code{__sync}
22702family of functions may be used to implement the C++11 @code{__atomic}
22703family of functions.
22704
22705The default value of this option is enabled, thus the only useful form
22706of the option is @option{-fno-sync-libcalls}.  This option is used in
22707the implementation of the @file{libatomic} runtime library.
22708
22709@end table
22710
22711@c man end
22712
22713@node Environment Variables
22714@section Environment Variables Affecting GCC
22715@cindex environment variables
22716
22717@c man begin ENVIRONMENT
22718This section describes several environment variables that affect how GCC
22719operates.  Some of them work by specifying directories or prefixes to use
22720when searching for various kinds of files.  Some are used to specify other
22721aspects of the compilation environment.
22722
22723Note that you can also specify places to search using options such as
22724@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
22725take precedence over places specified using environment variables, which
22726in turn take precedence over those specified by the configuration of GCC@.
22727@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
22728GNU Compiler Collection (GCC) Internals}.
22729
22730@table @env
22731@item LANG
22732@itemx LC_CTYPE
22733@c @itemx LC_COLLATE
22734@itemx LC_MESSAGES
22735@c @itemx LC_MONETARY
22736@c @itemx LC_NUMERIC
22737@c @itemx LC_TIME
22738@itemx LC_ALL
22739@findex LANG
22740@findex LC_CTYPE
22741@c @findex LC_COLLATE
22742@findex LC_MESSAGES
22743@c @findex LC_MONETARY
22744@c @findex LC_NUMERIC
22745@c @findex LC_TIME
22746@findex LC_ALL
22747@cindex locale
22748These environment variables control the way that GCC uses
22749localization information which allows GCC to work with different
22750national conventions.  GCC inspects the locale categories
22751@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
22752so.  These locale categories can be set to any value supported by your
22753installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
22754Kingdom encoded in UTF-8.
22755
22756The @env{LC_CTYPE} environment variable specifies character
22757classification.  GCC uses it to determine the character boundaries in
22758a string; this is needed for some multibyte encodings that contain quote
22759and escape characters that are otherwise interpreted as a string
22760end or escape.
22761
22762The @env{LC_MESSAGES} environment variable specifies the language to
22763use in diagnostic messages.
22764
22765If the @env{LC_ALL} environment variable is set, it overrides the value
22766of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
22767and @env{LC_MESSAGES} default to the value of the @env{LANG}
22768environment variable.  If none of these variables are set, GCC
22769defaults to traditional C English behavior.
22770
22771@item TMPDIR
22772@findex TMPDIR
22773If @env{TMPDIR} is set, it specifies the directory to use for temporary
22774files.  GCC uses temporary files to hold the output of one stage of
22775compilation which is to be used as input to the next stage: for example,
22776the output of the preprocessor, which is the input to the compiler
22777proper.
22778
22779@item GCC_COMPARE_DEBUG
22780@findex GCC_COMPARE_DEBUG
22781Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
22782@option{-fcompare-debug} to the compiler driver.  See the documentation
22783of this option for more details.
22784
22785@item GCC_EXEC_PREFIX
22786@findex GCC_EXEC_PREFIX
22787If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
22788names of the subprograms executed by the compiler.  No slash is added
22789when this prefix is combined with the name of a subprogram, but you can
22790specify a prefix that ends with a slash if you wish.
22791
22792If @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
22793an appropriate prefix to use based on the pathname it is invoked with.
22794
22795If GCC cannot find the subprogram using the specified prefix, it
22796tries looking in the usual places for the subprogram.
22797
22798The default value of @env{GCC_EXEC_PREFIX} is
22799@file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
22800the installed compiler. In many cases @var{prefix} is the value
22801of @code{prefix} when you ran the @file{configure} script.
22802
22803Other prefixes specified with @option{-B} take precedence over this prefix.
22804
22805This prefix is also used for finding files such as @file{crt0.o} that are
22806used for linking.
22807
22808In addition, the prefix is used in an unusual way in finding the
22809directories to search for header files.  For each of the standard
22810directories whose name normally begins with @samp{/usr/local/lib/gcc}
22811(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
22812replacing that beginning with the specified prefix to produce an
22813alternate directory name.  Thus, with @option{-Bfoo/}, GCC searches
22814@file{foo/bar} just before it searches the standard directory
22815@file{/usr/local/lib/bar}.
22816If a standard directory begins with the configured
22817@var{prefix} then the value of @var{prefix} is replaced by
22818@env{GCC_EXEC_PREFIX} when looking for header files.
22819
22820@item COMPILER_PATH
22821@findex COMPILER_PATH
22822The value of @env{COMPILER_PATH} is a colon-separated list of
22823directories, much like @env{PATH}.  GCC tries the directories thus
22824specified when searching for subprograms, if it can't find the
22825subprograms using @env{GCC_EXEC_PREFIX}.
22826
22827@item LIBRARY_PATH
22828@findex LIBRARY_PATH
22829The value of @env{LIBRARY_PATH} is a colon-separated list of
22830directories, much like @env{PATH}.  When configured as a native compiler,
22831GCC tries the directories thus specified when searching for special
22832linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
22833using GCC also uses these directories when searching for ordinary
22834libraries for the @option{-l} option (but directories specified with
22835@option{-L} come first).
22836
22837@item LANG
22838@findex LANG
22839@cindex locale definition
22840This variable is used to pass locale information to the compiler.  One way in
22841which this information is used is to determine the character set to be used
22842when character literals, string literals and comments are parsed in C and C++.
22843When the compiler is configured to allow multibyte characters,
22844the following values for @env{LANG} are recognized:
22845
22846@table @samp
22847@item C-JIS
22848Recognize JIS characters.
22849@item C-SJIS
22850Recognize SJIS characters.
22851@item C-EUCJP
22852Recognize EUCJP characters.
22853@end table
22854
22855If @env{LANG} is not defined, or if it has some other value, then the
22856compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
22857recognize and translate multibyte characters.
22858@end table
22859
22860@noindent
22861Some additional environment variables affect the behavior of the
22862preprocessor.
22863
22864@include cppenv.texi
22865
22866@c man end
22867
22868@node Precompiled Headers
22869@section Using Precompiled Headers
22870@cindex precompiled headers
22871@cindex speed of compilation
22872
22873Often large projects have many header files that are included in every
22874source file.  The time the compiler takes to process these header files
22875over and over again can account for nearly all of the time required to
22876build the project.  To make builds faster, GCC allows you to
22877@dfn{precompile} a header file.
22878
22879To create a precompiled header file, simply compile it as you would any
22880other file, if necessary using the @option{-x} option to make the driver
22881treat it as a C or C++ header file.  You may want to use a
22882tool like @command{make} to keep the precompiled header up-to-date when
22883the headers it contains change.
22884
22885A precompiled header file is searched for when @code{#include} is
22886seen in the compilation.  As it searches for the included file
22887(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
22888compiler looks for a precompiled header in each directory just before it
22889looks for the include file in that directory.  The name searched for is
22890the name specified in the @code{#include} with @samp{.gch} appended.  If
22891the precompiled header file can't be used, it is ignored.
22892
22893For instance, if you have @code{#include "all.h"}, and you have
22894@file{all.h.gch} in the same directory as @file{all.h}, then the
22895precompiled header file is used if possible, and the original
22896header is used otherwise.
22897
22898Alternatively, you might decide to put the precompiled header file in a
22899directory and use @option{-I} to ensure that directory is searched
22900before (or instead of) the directory containing the original header.
22901Then, if you want to check that the precompiled header file is always
22902used, you can put a file of the same name as the original header in this
22903directory containing an @code{#error} command.
22904
22905This also works with @option{-include}.  So yet another way to use
22906precompiled headers, good for projects not designed with precompiled
22907header files in mind, is to simply take most of the header files used by
22908a project, include them from another header file, precompile that header
22909file, and @option{-include} the precompiled header.  If the header files
22910have guards against multiple inclusion, they are skipped because
22911they've already been included (in the precompiled header).
22912
22913If you need to precompile the same header file for different
22914languages, targets, or compiler options, you can instead make a
22915@emph{directory} named like @file{all.h.gch}, and put each precompiled
22916header in the directory, perhaps using @option{-o}.  It doesn't matter
22917what you call the files in the directory; every precompiled header in
22918the directory is considered.  The first precompiled header
22919encountered in the directory that is valid for this compilation is
22920used; they're searched in no particular order.
22921
22922There are many other possibilities, limited only by your imagination,
22923good sense, and the constraints of your build system.
22924
22925A precompiled header file can be used only when these conditions apply:
22926
22927@itemize
22928@item
22929Only one precompiled header can be used in a particular compilation.
22930
22931@item
22932A precompiled header can't be used once the first C token is seen.  You
22933can have preprocessor directives before a precompiled header; you cannot
22934include a precompiled header from inside another header.
22935
22936@item
22937The precompiled header file must be produced for the same language as
22938the current compilation.  You can't use a C precompiled header for a C++
22939compilation.
22940
22941@item
22942The precompiled header file must have been produced by the same compiler
22943binary as the current compilation is using.
22944
22945@item
22946Any macros defined before the precompiled header is included must
22947either be defined in the same way as when the precompiled header was
22948generated, or must not affect the precompiled header, which usually
22949means that they don't appear in the precompiled header at all.
22950
22951The @option{-D} option is one way to define a macro before a
22952precompiled header is included; using a @code{#define} can also do it.
22953There are also some options that define macros implicitly, like
22954@option{-O} and @option{-Wdeprecated}; the same rule applies to macros
22955defined this way.
22956
22957@item If debugging information is output when using the precompiled
22958header, using @option{-g} or similar, the same kind of debugging information
22959must have been output when building the precompiled header.  However,
22960a precompiled header built using @option{-g} can be used in a compilation
22961when no debugging information is being output.
22962
22963@item The same @option{-m} options must generally be used when building
22964and using the precompiled header.  @xref{Submodel Options},
22965for any cases where this rule is relaxed.
22966
22967@item Each of the following options must be the same when building and using
22968the precompiled header:
22969
22970@gccoptlist{-fexceptions}
22971
22972@item
22973Some other command-line options starting with @option{-f},
22974@option{-p}, or @option{-O} must be defined in the same way as when
22975the precompiled header was generated.  At present, it's not clear
22976which options are safe to change and which are not; the safest choice
22977is to use exactly the same options when generating and using the
22978precompiled header.  The following are known to be safe:
22979
22980@gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
22981-fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
22982-fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
22983-pedantic-errors}
22984
22985@end itemize
22986
22987For all of these except the last, the compiler automatically
22988ignores the precompiled header if the conditions aren't met.  If you
22989find an option combination that doesn't work and doesn't cause the
22990precompiled header to be ignored, please consider filing a bug report,
22991see @ref{Bugs}.
22992
22993If you do use differing options when generating and using the
22994precompiled header, the actual behavior is a mixture of the
22995behavior for the options.  For instance, if you use @option{-g} to
22996generate the precompiled header but not when using it, you may or may
22997not get debugging information for routines in the precompiled header.
22998